ÎncepețiÎncepe gratuit

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.

O aplicație care afișează un nor de cuvinte interactiv cu ingredientele de top pentru bucătăria aleasă

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

Vezi cursul

Instrucțiuni pentru exercițiu

  • UI: Adaugă un d3wordcloudOutput() numit wc_ingredients și include-l într-un tabPanel(). Acesta trebuie să fie primul tabPanel() 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 numit wc_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)
Editează și rulează codul