Explorează bucătăriile: nori de cuvinte
Sperăm că te bucuri construind aceste aplicații Shiny culinare! Un mod practic de a vizualiza o cantitate mare de date este prin nori de cuvinte. În acest exercițiu, vei extinde aplicația Shiny construită anterior și vei adăuga un nou tab care afișează ingredientele distinctive de top sub forma unui nor de cuvinte interactiv.

Am încărcat deja pachetele shiny, dplyr, ggplot2, plotly și
d3wordcloud. Iată un fragment de cod util pentru a crea un nor de cuvinte.
d3wordcloud(
words = c('hello', 'world', 'good'),
freqs = c(20, 40, 30),
tooltip = TRUE
)
Acest exercițiu face parte din cursul
Crearea aplicațiilor web cu Shiny în R
Instrucțiuni pentru exercițiu
- UI: Adaugă un
d3wordcloudOutput()numitwc_ingredientsși include-l într-untabPanel(). Acesta trebuie să fie primultabPanel()din aplicație. - Server: Randează un nor de cuvinte interactiv cu ingredientele de top și
numărul de rețete în care sunt utilizate, folosind
d3wordcloud::renderD3wordcloud(), și atribuie-l unui output numitwc_ingredients. Va trebui să folosești expresia reactivărval_top_ingredients()pentru a returna un data frame cu ingredientele de top și numărul de rețete.
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
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)