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.

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
Istruzioni dell'esercizio
UI:
- Aggiungi un output plotly interattivo chiamato
plot_top_ingredientse incapsulalo in untabPanel()con un'etichetta appropriata.
- Aggiungi un output plotly interattivo chiamato
Server:
- Aggiungi un'espressione reattiva chiamata
rval_top_ingredientsche filtrarecipes_enrichedper la cucina selezionata e per gli ingredienti più distintivi in base al valore ditf_idf. - Rendi un grafico a barre interattivo degli ingredienti principali e dei rispettivi
tf_idfe assegnalo a un output chiamatoplot_top_ingredients. Come sfida extra, prova a far visualizzare le barre in ordine decrescente ditf_idf.
- Aggiungi un'espressione reattiva chiamata
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)