Začněte nyníZačněte zdarma

Prozkoumej kuchyně: nejdůležitější ingredience, tentokrát jinak

Každá kuchyně je jedinečná díky malé sadě typických ingrediencí. Tyto ingredience ale nenajdeme pohledem na ty nejpopulárnější – to jsou totiž základní suroviny vaření, jako sůl nebo cukr.

Další metrikou, která nám může pomoci, je term frequency–inverse document frequency (TFIDF) – numerická statistika, která měří, jak důležité je dané slovo (ingredience) pro konkrétní dokument (kuchyni) v rámci celé kolekce (receptů).

Hodnotu tf_idf jsme za tebe předpočítali a vytvořili rozšířenou datovou sadu recipes_enriched. Tvým úkolem je vytvořit Shiny aplikaci, která zobrazí horizontální sloupcový graf s nejcharakterističtějšími ingrediencemi vybrané kuchyně, seřazenými podle hodnoty tf_idf.

Aplikace zobrazující interaktivní horizontální sloupcový graf nejdůležitějších ingrediencí pro vybranou kuchyni

Použiješ reaktivní výraz, který zapouzdří výpočty a nechá kód pro vykreslení grafu soustředit se jen na samotný graf. Je to dobrá programátorská praxe a pomáhá to vytvářet modulární a výkonné Shiny aplikace.

Máme načtené balíčky shiny, dplyr, ggplot2 a plotly. Níže jsou dva užitečné úryvky kódu pro filtrování nejlepších receptů podle kuchyně a vytvoření horizontálního sloupcového grafu. Uprav je podle potřeby.

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

Toto cvičení je součástí kurzu

Tvorba webových aplikací se Shiny v R

Zobrazit kurz

Pokyny k cvičení

  • UI:

    • Přidej interaktivní plotly výstup pojmenovaný plot_top_ingredients a zabal ho do tabPanel() s vhodným popiskem.
  • Server:

    • Přidej reaktivní výraz pojmenovaný rval_top_ingredients, který filtruje recipes_enriched pro vybranou kuchyni a zobrazí nejcharakterističtější ingredience podle hodnoty tf_idf.
    • Vykresli interaktivní sloupcový graf nejdůležitějších ingrediencí a jejich hodnot tf_idf a přiřaď ho k výstupu pojmenovanému plot_top_ingredients. Jako extra výzvu zkus zajistit, aby se sloupce zobrazovaly v sestupném pořadí podle tf_idf.

Interaktivní cvičení na vyzkoušení si v praxi

Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.

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)
Upravit a spustit kód