LoslegenKostenlos loslegen

Küchen erkunden: Wordclouds

Hoffentlich macht es dir Spaß, diese kulinarischen Shiny-Apps zu bauen! Eine praktische Methode, viele Daten zu visualisieren, sind Wordclouds. In dieser Aufgabe erweiterst du die zuvor erstellte Shiny-App und fügst einen neuen Tab hinzu, der die auffälligsten Zutaten als interaktive Wordcloud anzeigt.

An app displaying an interactive wordcloud of top ingredients by chosen cuisine

Wir haben die Pakete shiny, dplyr, ggplot2, plotly und d3wordcloud bereits geladen. Hier ist ein praktischer Schnipsel, um eine Wordcloud zu erzeugen.

d3wordcloud(
  words = c('hello', 'world', 'good'), 
  freqs = c(20, 40, 30),
  tooltip = TRUE
)

Diese Übung ist Teil des Kurses

Webanwendungen mit Shiny in R entwickeln

Kurs anzeigen

Anleitung zur Übung

  • UI: Füge ein d3wordcloudOutput() mit dem Namen wc_ingredients hinzu und packe es in ein tabPanel(). Dies sollte das erste tabPanel() in deiner App sein.
  • Server: Rendere eine interaktive Wordcloud mit den Top-Zutaten und der Anzahl der Rezepte, in denen sie verwendet werden, mit d3wordcloud::renderD3wordcloud() und weise sie einem Output namens wc_ingredients zu. Du musst den reaktiven Ausdruck rval_top_ingredients() verwenden, um ein Data Frame mit den Top-Zutaten und den Rezeptanzahlen zurückzugeben.

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', 5, 100, 20),
    ),
    mainPanel(
      tabsetPanel(
        # CODE BELOW: Add `d3wordcloudOutput` named `wc_ingredients` in a `tabPanel`
        
        tabPanel('Plot', plotly::plotlyOutput('plot_top_ingredients')),
        tabPanel('Table', DT::DTOutput('dt_top_ingredients'))
      )
    )
  )
)

server <- function(input, output, session){
  # CODE BELOW: Render an interactive wordcloud of top ingredients and 
  # the number of recipes they get used in, using `d3wordcloud::renderD3wordcloud`,
  # and assign it to an output named `wc_ingredients`.
  
  
  
  
  rval_top_ingredients <- reactive({
    recipes_enriched %>% 
      filter(cuisine == input$cuisine) %>% 
      arrange(desc(tf_idf)) %>% 
      head(input$nb_ingredients) %>% 
      mutate(ingredient = forcats::fct_reorder(ingredient, tf_idf))
  })
  output$plot_top_ingredients <- plotly::renderPlotly({
    rval_top_ingredients() %>%
      ggplot(aes(x = ingredient, y = tf_idf)) +
      geom_col() +
      coord_flip()
  })
  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 = ui, server= server)
Code bearbeiten und ausführen