Küchen erkunden: Top-Zutaten (Fortsetzung)
Jede Küche ist durch eine kleine Menge charakteristischer Zutaten geprägt. Diese tauchen nicht auf, wenn wir nur die beliebtesten Zutaten betrachten, denn das sind die Grundzutaten wie Salz oder Zucker.
Eine weitere Kennzahl, die uns hier hilft, ist die Termfrequenz–Inverse Dokumenthäufigkeit (TFIDF). Sie ist eine numerische Kennzahl, die widerspiegelt, wie wichtig ein Wort (Zutat) für ein Dokument (Küche) in einer Sammlung bzw. einem Korpus (Rezepte) ist.
Wir haben die tf_idf-Werte bereits für dich vorab berechnet und einen angereicherten Datensatz namens recipes_enriched erstellt. Dein Ziel ist es, eine Shiny-App zu bauen, die ein horizontales Balkendiagramm der markantesten Zutaten einer Küche zeigt, gemessen an tf_idf.

Du verwendest einen reaktiven Ausdruck, um die Berechnungen zu kapseln und den Plot-Code auf das Erstellen der Grafik zu fokussieren. Das ist gute Programmierpraxis und hilft, modulare und performante Shiny-Apps zu entwickeln.
Wir haben die Pakete shiny, dplyr, ggplot2 und plotly geladen. Hier sind zwei praktische Snippets, um nach den Top-Zutaten pro Küche zu filtern und ein horizontales Balkendiagramm zu erstellen. Du kannst sie passend abändern.
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()
Diese Übung ist Teil des Kurses
Webanwendungen mit Shiny in R entwickeln
Anleitung zur Übung
UI:
- Füge eine interaktive plotly-Ausgabe namens
plot_top_ingredientshinzu und wickle sie in eintabPanel()mit einer passenden Beschriftung.
- Füge eine interaktive plotly-Ausgabe namens
Server:
- Füge einen reaktiven Ausdruck namens
rval_top_ingredientshinzu, derrecipes_enrichedfür die ausgewählte Küche filtert und die markantesten Zutaten basierend auf demtf_idf-Wert auswählt. - Rendere ein interaktives Balkendiagramm der Top-Zutaten und ihrer
tf_idf-Werte und weise es einem Output namensplot_top_ingredientszu. Als zusätzliche Herausforderung: Versuch, die Balken in absteigender Reihenfolge vontf_idfanzuzeigen.
- Füge einen reaktiven Ausdruck namens
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
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)