CommencerCommencez gratuitement

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.

An app displaying an interactive horizontal bar plot of top ingredients by chosen cuisine

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>
Voir le cours

Instructions de l’exercice

  • UI :

    • Ajoutez une sortie plotly interactive nommée plot_top_ingredients et placez‑la dans un tabPanel() avec un libellé approprié.
  • Server :

    • Ajoutez une expression réactive nommée rval_top_ingredients qui filtre recipes_enriched pour la cuisine sélectionnée et retient les ingrédients les plus distinctifs selon la valeur tf_idf.
    • Rendu : créez un diagramme en barres interactif des ingrédients principaux et de leur tf_idf, et affectez‑le à une sortie nommée plot_top_ingredients. Pour aller plus loin, voyez si vous pouvez afficher les barres dans l’ordre décroissant de tf_idf.

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)
Modifier et exécuter le code