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.

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
Instrucțiuni pentru exercițiu
UI:
- Adaugă un rezultat plotly interactiv numit
plot_top_ingredientsși include-l într-untabPanel()cu o etichetă potrivită.
- Adaugă un rezultat plotly interactiv numit
Server:
- Adaugă o expresie reactivă numită
rval_top_ingredientscare filtreazărecipes_enricheddupă bucătăria selectată și cei mai distinctivi ingredienți pe baza valoriitf_idf. - Redă un grafic interactiv cu bare pentru principalii ingredienți și valorile
lor
tf_idfși atribuie-l unui rezultat numitplot_top_ingredients. Ca provocare suplimentară, încearcă să afișezi barele în ordine descrescătoare atf_idf.
- Adaugă o expresie reactivă numită
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)