LoslegenKostenlos loslegen

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.

An app displaying an interactive horizontal bar plot of top ingredients by chosen cuisine

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

Kurs anzeigen

Anleitung zur Übung

  • UI:

    • Füge eine interaktive plotly-Ausgabe namens plot_top_ingredients hinzu und wickle sie in ein tabPanel() mit einer passenden Beschriftung.
  • Server:

    • Füge einen reaktiven Ausdruck namens rval_top_ingredients hinzu, der recipes_enriched für die ausgewählte Küche filtert und die markantesten Zutaten basierend auf dem tf_idf-Wert auswählt.
    • Rendere ein interaktives Balkendiagramm der Top-Zutaten und ihrer tf_idf-Werte und weise es einem Output namens plot_top_ingredients zu. Als zusätzliche Herausforderung: Versuch, die Balken in absteigender Reihenfolge von tf_idf anzuzeigen.

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)
Code bearbeiten und ausführen