Kom igångKom igång gratis

Utforska kök: de mest utmärkande ingredienserna

Varje kök kännetecknas av en liten uppsättning distinkta ingredienser. Dessa syns inte om vi bara tittar på de mest populära ingredienserna, eftersom de tenderar att vara basingredienser som salt eller socker.

Ett annat mått som kan hjälpa oss här är term frequency–inverse document frequency (TFIDF), en numerisk statistik som mäter hur viktig en term (ingrediens) är för ett dokument (kök) i en samling eller korpus (recept).

Vi har redan beräknat tf_idf åt dig och skapat en berikad datamängd med namnet recipes_enriched. Ditt mål är att bygga en Shiny-app som visar ett horisontellt stapeldiagram över de mest utmärkande ingredienserna i ett valt kök, mätt med tf_idf.

En app som visar ett interaktivt horisontellt stapeldiagram över de viktigaste ingredienserna för det valda köket

Du använder ett reaktivt uttryck för att kapsla in beräkningarna och låta diagramkoden fokusera enbart på att skapa diagrammet. Det är god programmeringspraxis och bidrar till modulära och effektiva Shiny-appar.

Paketen shiny, dplyr, ggplot2 och plotly är inlästa. Här är två användbara kodsnuttar för att filtrera fram de bästa recepten per kök och skapa ett horisontellt stapeldiagram. Du kan anpassa dem efter behov.

top_ingredients <- recipes_enriched %>% 
  filter(cuisine == 'greek') %>% 
  arrange(desc(tf_idf)) %>% 
  head(5) 

ggplot(top_ingredients, aes(x = ingredient, y = tf_idf)) +
  geom_col() +
  coord_flip()

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

Bygg webbapplikationer med Shiny i R

Visa kurs

Övningsinstruktioner

  • UI:

    • Lägg till en interaktiv plotly-utdata med namnet plot_top_ingredients och placera den i en tabPanel() med en lämplig etikett.
  • Server:

    • Lägg till ett reaktivt uttryck med namnet rval_top_ingredients som filtrerar recipes_enriched på det valda köket och de mest utmärkande ingredienserna baserat på tf_idf-värdet.
    • Rendera ett interaktivt stapeldiagram över de viktigaste ingredienserna och deras tf_idf-värden och tilldela det till en utdata med namnet plot_top_ingredients. Som en extra utmaning: se om du kan få staplarna att visas i fallande ordning efter tf_idf.

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', 1, 100, 10),
    ),
    mainPanel(
      tabsetPanel(
        # CODE BELOW: Add a plotly output named "plot_top_ingredients"
        
        tabPanel('Table', DT::DTOutput('dt_top_ingredients'))
      )
    )
  )
)

server <- function(input, output, session) {
  # CODE BELOW: Add a reactive expression named `rval_top_ingredients` that
  # filters `recipes_enriched` for the selected cuisine and top ingredients
  # based on the tf_idf value.

  
  
  
  
  
  
  # CODE BELOW: Render a horizontal bar plot of top ingredients and 
  # the tf_idf of recipes they get used in, and assign it to an output named 
  # `plot_top_ingredients` 
  
  
  
  
  
  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, server)
Redigera och kör kod