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.

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
Instrukcje do ćwiczenia
UI:
- Dodaj interaktywny wynik plotly o nazwie
plot_top_ingredientsi umieść go wtabPanel()z odpowiednią etykietą.
- Dodaj interaktywny wynik plotly o nazwie
Server:
- Dodaj wyrażenie reaktywne o nazwie
rval_top_ingredients, które filtrujerecipes_enricheddla wybranej kuchni i wybiera najbardziej charakterystyczne składniki na podstawie wartościtf_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 nazwieplot_top_ingredients. Jako dodatkowe wyzwanie sprawdź, czy uda ci się wyświetlić słupki w malejącej kolejności wedługtf_idf.
- Dodaj wyrażenie reaktywne o nazwie
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)