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.

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
Pokyny k cvičení
UI:
- Přidej interaktivní plotly výstup pojmenovaný
plot_top_ingredientsa zabal ho dotabPanel()s vhodným popiskem.
- Přidej interaktivní plotly výstup pojmenovaný
Server:
- Přidej reaktivní výraz pojmenovaný
rval_top_ingredients, který filtrujerecipes_enrichedpro vybranou kuchyni a zobrazí nejcharakterističtější ingredience podle hodnotytf_idf. - Vykresli interaktivní sloupcový graf nejdůležitějších ingrediencí a jejich
hodnot
tf_idfa přiřaď ho k výstupu pojmenovanémuplot_top_ingredients. Jako extra výzvu zkus zajistit, aby se sloupce zobrazovaly v sestupném pořadí podletf_idf.
- Přidej reaktivní výraz pojmenovaný
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)