Jelajahi kuliner: bahan teratas (versi lanjutan)
Setiap jenis kuliner memiliki ciri khas karena sejumlah kecil bahan yang unik. Kita tidak dapat menonjolkan bahan-bahan ini hanya dengan melihat bahan paling populer, karena biasanya itu adalah bahan dasar memasak seperti garam atau gula.
Metrik lain yang dapat membantu adalah term frequency–inverse document frequency (TFIDF), sebuah statistik numerik yang dirancang untuk mencerminkan seberapa penting sebuah kata (bahan) bagi sebuah dokumen (jenis kuliner) dalam sebuah koleksi atau korpus (resep).
Kami telah lebih dulu menghitung tf_idf untuk Anda dan membuat himpunan data yang diperkaya bernama recipes_enriched. Tujuan Anda adalah membuat aplikasi Shiny yang menampilkan diagram batang horizontal berisi bahan-bahan paling khas dalam suatu kuliner, diukur menggunakan tf_idf.

Anda akan menggunakan ekspresi reaktif untuk merangkum perhitungan sehingga kode plotting hanya berfokus pada pembuatan plot. Ini adalah praktik pemrograman yang baik dan membantu membuat aplikasi Shiny yang modular dan berkinerja baik.
Kami telah memuat paket shiny, dplyr, ggplot2, dan plotly. Berikut dua cuplikan berguna untuk memfilter bahan teratas berdasarkan jenis kuliner dan membuat diagram batang horizontal. Anda dapat menyesuaikannya sesuai kebutuhan.
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()
Latihan ini adalah bagian dari kursus
Membangun Aplikasi Web dengan Shiny di R
Petunjuk latihan
UI:
- Tambahkan keluaran plotly interaktif bernama
plot_top_ingredientsdan bungkus di dalamtabPanel()dengan label yang sesuai.
- Tambahkan keluaran plotly interaktif bernama
Server:
- Tambahkan ekspresi reaktif bernama
rval_top_ingredientsyang memfilterrecipes_enricheduntuk kuliner yang dipilih dan bahan-bahan paling khas berdasarkan nilaitf_idf. - Render diagram batang interaktif dari bahan-bahan teratas beserta
tf_idf-nya dan tetapkan ke keluaran bernamaplot_top_ingredients. Sebagai tantangan tambahan untuk Anda sendiri, coba atur agar batang ditampilkan dalam urutan menurun berdasarkantf_idf.
- Tambahkan ekspresi reaktif bernama
Latihan interaktif praktis
Cobalah latihan ini dengan menyelesaikan kode contoh berikut.
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)