Zacznij terazZacznij za darmo

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.

Aplikacja wyświetlająca interaktywną chmurę słów z najpopularniejszymi składnikami dla wybranej kuchni

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

Zobacz kurs

Instrukcje do ćwiczenia

  • UI: Dodaj d3wordcloudOutput() o nazwie wc_ingredients i umieść go w tabPanel(). Powinna to być pierwsza zakładka tabPanel() 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 nazwie wc_ingredients. Użyj wyrażenia reaktywnego rval_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)
Edytuj i uruchom kod