ÎncepețiÎncepe gratuit

Explorează bucătăriile: cei mai distinctivi ingredienți (redux)

Fiecare bucătărie a lumii se distinge printr-un set restrâns de ingrediente specifice. Nu le putem identifica uitându-ne la cele mai populare ingrediente, deoarece acestea sunt ingrediente de bază în gătit, cum ar fi sarea sau zahărul.

O altă metrică utilă în această căutare este frecvența termenului–frecvența inversă a documentului (TFIDF), o statistică numerică menită să reflecte cât de important este un cuvânt (ingredient) pentru un document (bucătărie) dintr-o colecție sau corpus (rețete).

Am precalculat deja tf_idf pentru tine și am creat un set de date îmbogățit numit recipes_enriched. Scopul tău este să creezi o aplicație Shiny care afișează un grafic cu bare orizontale pentru cei mai distinctivi ingredienți dintr-o bucătărie, măsurați prin tf_idf.

O aplicație care afișează un grafic interactiv cu bare orizontale pentru principalii ingredienți în funcție de bucătăria selectată

Vei folosi o expresie reactivă pentru a încapsula calculele și a permite codului de vizualizare să se concentreze exclusiv pe crearea graficului. Aceasta este o bună practică de programare și contribuie la crearea unor aplicații Shiny modulare și performante.

Am încărcat pachetele shiny, dplyr, ggplot2 și plotly. Iată două fragmente de cod utile pentru a filtra cele mai relevante rețete după bucătărie și a crea un grafic cu bare orizontale. Le poți adapta după cum este necesar.

top_ingredients <- recipes_enriched %>% 
  filter(cuisine == 'greek') %>% 
  arrange(desc(tf_idf)) %>% 
  head(5) 

ggplot(top_ingredients, aes(x = ingredient, y = tf_idf)) +
  geom_col() +
  coord_flip()

Acest exercițiu face parte din cursul

Crearea aplicațiilor web cu Shiny în R

Vezi cursul

Instrucțiuni pentru exercițiu

  • UI:

    • Adaugă un rezultat plotly interactiv numit plot_top_ingredients și include-l într-un tabPanel() cu o etichetă potrivită.
  • Server:

    • Adaugă o expresie reactivă numită rval_top_ingredients care filtrează recipes_enriched după bucătăria selectată și cei mai distinctivi ingredienți pe baza valorii tf_idf.
    • Redă un grafic interactiv cu bare pentru principalii ingredienți și valorile lor tf_idf și atribuie-l unui rezultat numit plot_top_ingredients. Ca provocare suplimentară, încearcă să afișezi barele în ordine descrescătoare a tf_idf.

Exercițiu interactiv practic

Încearcă acest exercițiu completând acest cod de exemplu.

ui <- fluidPage(
  titlePanel('Explore Cuisines'),
  sidebarLayout(
    sidebarPanel(
      selectInput('cuisine', 'Select Cuisine', unique(recipes$cuisine)),
      sliderInput('nb_ingredients', 'Select No. of Ingredients', 1, 100, 10),
    ),
    mainPanel(
      tabsetPanel(
        # CODE BELOW: Add a plotly output named "plot_top_ingredients"
        
        tabPanel('Table', DT::DTOutput('dt_top_ingredients'))
      )
    )
  )
)

server <- function(input, output, session) {
  # CODE BELOW: Add a reactive expression named `rval_top_ingredients` that
  # filters `recipes_enriched` for the selected cuisine and top ingredients
  # based on the tf_idf value.

  
  
  
  
  
  
  # CODE BELOW: Render a horizontal bar plot of top ingredients and 
  # the tf_idf of recipes they get used in, and assign it to an output named 
  # `plot_top_ingredients` 
  
  
  
  
  
  output$dt_top_ingredients <- DT::renderDT({
    recipes %>% 
      filter(cuisine == input$cuisine) %>% 
      count(ingredient, name = 'nb_recipes') %>% 
      arrange(desc(nb_recipes)) %>% 
      head(input$nb_ingredients)
  })
}

shinyApp(ui, server)
Editează și rulează codul