Explorer les cuisines : meilleurs ingrédients (version 2)
Chaque cuisine se distingue par un petit ensemble d’ingrédients caractéristiques. Impossible de les faire ressortir en regardant les ingrédients les plus populaires, car il s’agit souvent des indispensables de base comme le sel ou le sucre.
Une autre mesure utile pour notre objectif est la « term frequency–inverse document frequency » (TFIDF), une statistique numérique qui reflète l’importance d’un mot (ingrédient) dans un document (cuisine) au sein d’un ensemble ou corpus (recettes).
Nous avons déjà pré‑calculé le tf_idf pour vous et créé un jeu de données enrichi nommé recipes_enriched. Votre objectif est de créer une application Shiny qui affiche un diagramme en barres horizontal des ingrédients les plus distinctifs d’une cuisine, mesurés par tf_idf.

Vous utiliserez une expression réactive pour encapsuler les calculs et permettre au code de visualisation de se concentrer uniquement sur la création du graphique. C’est une bonne pratique de programmation qui aide à concevoir des applications Shiny modulaires et performantes.
Nous avons chargé les packages shiny, dplyr, ggplot2 et plotly. Voici deux extraits pratiques pour filtrer les meilleurs ingrédients par cuisine et créer un diagramme en barres horizontal. Adaptez‑les selon vos besoins.
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()
Cet exercice fait partie du cours
<cours>Créer des applications web avec Shiny en R</cours>Instructions de l’exercice
UI :
- Ajoutez une sortie plotly interactive nommée
plot_top_ingredientset placez‑la dans untabPanel()avec un libellé approprié.
- Ajoutez une sortie plotly interactive nommée
Server :
- Ajoutez une expression réactive nommée
rval_top_ingredientsqui filtrerecipes_enrichedpour la cuisine sélectionnée et retient les ingrédients les plus distinctifs selon la valeurtf_idf. - Rendu : créez un diagramme en barres interactif des ingrédients principaux et de leur
tf_idf, et affectez‑le à une sortie nomméeplot_top_ingredients. Pour aller plus loin, voyez si vous pouvez afficher les barres dans l’ordre décroissant detf_idf.
- Ajoutez une expression réactive nommée
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
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)