Utforska kök: de mest utmärkande ingredienserna
Varje kök kännetecknas av en liten uppsättning distinkta ingredienser. Dessa syns inte om vi bara tittar på de mest populära ingredienserna, eftersom de tenderar att vara basingredienser som salt eller socker.
Ett annat mått som kan hjälpa oss här är term frequency–inverse document frequency (TFIDF), en numerisk statistik som mäter hur viktig en term (ingrediens) är för ett dokument (kök) i en samling eller korpus (recept).
Vi har redan beräknat tf_idf åt dig och skapat en berikad datamängd med namnet recipes_enriched. Ditt mål är att bygga en Shiny-app som visar ett horisontellt stapeldiagram över de mest utmärkande ingredienserna i ett valt kök, mätt med tf_idf.

Du använder ett reaktivt uttryck för att kapsla in beräkningarna och låta diagramkoden fokusera enbart på att skapa diagrammet. Det är god programmeringspraxis och bidrar till modulära och effektiva Shiny-appar.
Paketen shiny, dplyr, ggplot2 och plotly är inlästa. Här är två användbara kodsnuttar för att filtrera fram de bästa recepten per kök och skapa ett horisontellt stapeldiagram. Du kan anpassa dem efter behov.
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()
Den här övningen är en del av kursen
Bygg webbapplikationer med Shiny i R
Övningsinstruktioner
UI:
- Lägg till en interaktiv plotly-utdata med namnet
plot_top_ingredientsoch placera den i entabPanel()med en lämplig etikett.
- Lägg till en interaktiv plotly-utdata med namnet
Server:
- Lägg till ett reaktivt uttryck med namnet
rval_top_ingredientssom filtrerarrecipes_enrichedpå det valda köket och de mest utmärkande ingredienserna baserat påtf_idf-värdet. - Rendera ett interaktivt stapeldiagram över de viktigaste ingredienserna och deras
tf_idf-värden och tilldela det till en utdata med namnetplot_top_ingredients. Som en extra utmaning: se om du kan få staplarna att visas i fallande ordning eftertf_idf.
- Lägg till ett reaktivt uttryck med namnet
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
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)