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.

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
Anleitung zur Übung
- UI: Füge ein
d3wordcloudOutput()mit dem Namenwc_ingredientshinzu und packe es in eintabPanel(). Dies sollte das erstetabPanel()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 namenswc_ingredientszu. Du musst den reaktiven Ausdruckrval_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)