Odkrywaj kuchnie: chmury słów
Mamy nadzieję, że świetnie bawisz się, budując te kulinarne aplikacje Shiny! Chmury słów to wygodny sposób na wizualizację dużych ilości danych. W tym ćwiczeniu rozbudujesz wcześniej zbudowaną aplikację Shiny i dodasz nową zakładkę, która wyświetla najbardziej charakterystyczne składniki jako interaktywną chmurę słów.

Biblioteki shiny, dplyr, ggplot2, plotly oraz d3wordcloud są już wczytane. Poniżej znajdziesz przydatny fragment kodu do tworzenia chmury słów.
d3wordcloud(
words = c('hello', 'world', 'good'),
freqs = c(20, 40, 30),
tooltip = TRUE
)
To ćwiczenie jest częścią kursu
Tworzenie aplikacji internetowych z Shiny w R
Instrukcje do ćwiczenia
- UI: Dodaj
d3wordcloudOutput()o nazwiewc_ingredientsi umieść go wtabPanel(). Powinna to być pierwsza zakładkatabPanel()w twojej aplikacji. - Server: Wyrenderuj interaktywną chmurę słów przedstawiającą najpopularniejsze składniki i liczbę przepisów, w których są używane. Skorzystaj z
d3wordcloud::renderD3wordcloud()i przypisz wynik do wyjścia o nazwiewc_ingredients. Użyj wyrażenia reaktywnegorval_top_ingredients(), aby pobrać ramkę danych z najpopularniejszymi składnikami i liczbą przepisów.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
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)