Zacznij terazZacznij za darmo

Eksploracja kuchni: najbardziej charakterystyczne składniki

Każda kuchnia świata wyróżnia się niewielkim zestawem charakterystycznych składników. Nie da się ich jednak odnaleźć, patrząc na najpopularniejsze składniki – te to po prostu podstawy gotowania, takie jak sól czy cukier.

Przydatną miarą, która pomoże nam w tym zadaniu, jest statystyka term frequency–inverse document frequency (TFIDF). To miara numeryczna określająca, jak ważny jest dany wyraz (składnik) dla konkretnego dokumentu (kuchni) w całej kolekcji (przepisów).

Wartości tf_idf zostały już za ciebie wyliczone, a wzbogacony zbiór danych nosi nazwę recipes_enriched. Twoim celem jest stworzenie aplikacji Shiny, która wyświetla poziomy wykres słupkowy z najbardziej charakterystycznymi składnikami wybranej kuchni, posortowanymi według wartości tf_idf.

Aplikacja wyświetlająca interaktywny poziomy wykres słupkowy z najważniejszymi składnikami wybranej kuchni

Użyjesz wyrażenia reaktywnego, aby zamknąć w nim obliczenia i pozwolić kodowi odpowiedzialnemu za wykres skupić się wyłącznie na jego tworzeniu. To dobra praktyka programistyczna, która sprawia, że aplikacje Shiny są modularne i wydajne.

Załadowane zostały pakiety shiny, dplyr, ggplot2 i plotly. Poniżej znajdziesz dwa przydatne fragmenty kodu – do filtrowania najważniejszych składników dla danej kuchni oraz do tworzenia poziomego wykresu słupkowego. Możesz je odpowiednio dostosować.

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()

To ćwiczenie jest częścią kursu

Tworzenie aplikacji internetowych z Shiny w R

Zobacz kurs

Instrukcje do ćwiczenia

  • UI:

    • Dodaj interaktywny wynik plotly o nazwie plot_top_ingredients i umieść go w tabPanel() z odpowiednią etykietą.
  • Server:

    • Dodaj wyrażenie reaktywne o nazwie rval_top_ingredients, które filtruje recipes_enriched dla wybranej kuchni i wybiera najbardziej charakterystyczne składniki na podstawie wartości tf_idf.
    • Wyrenderuj interaktywny wykres słupkowy z najważniejszymi składnikami i ich wartościami tf_idf, a następnie przypisz go do wyjścia o nazwie plot_top_ingredients. Jako dodatkowe wyzwanie sprawdź, czy uda ci się wyświetlić słupki w malejącej kolejności według tf_idf.

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', 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)
Edytuj i uruchom kod