Inizia subitoInizia gratis

Esplora le cucine: ingredienti principali (redux)

Ogni cucina si distingue grazie a un piccolo insieme di ingredienti caratteristici. Non possiamo metterli in evidenza guardando gli ingredienti più popolari, perché sono quelli di base della cucina come sale o zucchero.

Un altro indicatore utile è il term frequency–inverse document frequency (TFIDF), una statistica numerica pensata per riflettere quanto una parola (ingrediente) sia importante per un documento (cucina) in una collezione o corpus (ricette).

Abbiamo già precomputato il tf_idf per te e creato un insieme di dati arricchito chiamato recipes_enriched. Il tuo obiettivo è creare un'app Shiny che mostri un grafico a barre orizzontali con gli ingredienti più distintivi di una cucina, misurati tramite tf_idf.

Un'app che mostra un grafico a barre orizzontali interattivo degli ingredienti principali per la cucina scelta

Userai un'espressione reattiva per racchiudere i calcoli e lasciare che il codice di visualizzazione si concentri solo sulla creazione del grafico. È una buona pratica di programmazione e aiuta a creare app Shiny modulari ed efficienti.

Abbiamo caricato i pacchetti shiny, dplyr, ggplot2 e plotly. Ecco due snippet utili per filtrare gli ingredienti principali per cucina e creare un grafico a barre orizzontali. Puoi modificarli secondo necessità.

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()

Questo esercizio fa parte del corso

Creare applicazioni web con Shiny in R

Visualizza corso

Istruzioni dell'esercizio

  • UI:

    • Aggiungi un output plotly interattivo chiamato plot_top_ingredients e incapsulalo in un tabPanel() con un'etichetta appropriata.
  • Server:

    • Aggiungi un'espressione reattiva chiamata rval_top_ingredients che filtra recipes_enriched per la cucina selezionata e per gli ingredienti più distintivi in base al valore di tf_idf.
    • Rendi un grafico a barre interattivo degli ingredienti principali e dei rispettivi tf_idf e assegnalo a un output chiamato plot_top_ingredients. Come sfida extra, prova a far visualizzare le barre in ordine decrescente di tf_idf.

esercizio interattivo pratico

Prova questo esercizio completando questo codice di esempio.

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)
Modifica ed esegui il codice