Kom igångKom igång gratis

Utforska kök: ordmoln

Hoppas du har roligt med att bygga dessa matinspirerade Shiny-appar! Ett praktiskt sätt att visualisera stora mängder data är ordmoln. I den här övningen utökar du Shiny-appen vi byggde tidigare och lägger till en ny flik som visar de mest utmärkande ingredienserna som ett interaktivt ordmoln.

An app displaying an interactive wordcloud of top ingredients by chosen cuisine

Paketen shiny, dplyr, ggplot2, plotly och d3wordcloud är redan inlästa. Här är ett praktiskt kodexempel för att skapa ett ordmoln.

d3wordcloud(
  words = c('hello', 'world', 'good'), 
  freqs = c(20, 40, 30),
  tooltip = TRUE
)

Den här övningen är en del av kursen

Bygg webbapplikationer med Shiny i R

Visa kurs

Övningsinstruktioner

  • UI: Lägg till en d3wordcloudOutput() med namnet wc_ingredients och omslut den i ett tabPanel(). Det här ska vara det första tabPanel() i din app.
  • Server: Rendera ett interaktivt ordmoln över de vanligaste ingredienserna och antalet recept de används i, med hjälp av d3wordcloud::renderD3wordcloud() och tilldela det till en utdata med namnet wc_ingredients. Du behöver använda det reaktiva uttrycket rval_top_ingredients() för att returnera en dataram med de vanligaste ingredienserna och antalet recept.

Interaktiv övning med praktiskt arbete

Testa den här övningen genom att slutföra den här exempelkoden.

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)
Redigera och kör kod