ComenzarEmpieza gratis

Explora cocinas: ingredientes destacados (versión 2)

Cada cocina se distingue por un pequeño conjunto de ingredientes propios. No podemos identificarlos mirando solo los ingredientes más populares, porque suelen ser los básicos de cocina, como la sal o el azúcar.

Otra métrica que puede ayudarnos en esta tarea es la frecuencia de término–frecuencia inversa de documento (TFIDF), una estadística numérica que refleja la importancia de una palabra (ingrediente) en un documento (cocina) dentro de una colección o corpus (recetas).

Ya hemos precomputado el tf_idf y creado un conjunto de datos enriquecido llamado recipes_enriched. Tu objetivo es crear una app Shiny que muestre un gráfico de barras horizontal con los ingredientes más distintivos de una cocina, según su tf_idf.

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

Usarás una expresión reactiva para encapsular los cálculos y permitir que el código de visualización se centre solo en crear el gráfico. Esta es una buena práctica de programación y ayuda a crear apps Shiny modulares y eficientes.

Hemos cargado los paquetes shiny, dplyr, ggplot2 y plotly. Aquí tienes dos fragmentos útiles para filtrar los ingredientes principales por cocina y crear un gráfico de barras horizontal. Puedes adaptarlos según necesites.

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()

Este ejercicio forma parte del curso

Creación de aplicaciones web con Shiny en R

Ver curso

Instrucciones del ejercicio

  • UI:

    • Añade una salida interactiva de plotly llamada plot_top_ingredients y envuélvela en un tabPanel() con una etiqueta adecuada.
  • Server:

    • Añade una expresión reactiva llamada rval_top_ingredients que filtre recipes_enriched por la cocina seleccionada y los ingredientes más distintivos según el valor de tf_idf.
    • Representa un gráfico de barras interactivo de los ingredientes principales y su tf_idf y asígnalo a una salida llamada plot_top_ingredients. Como reto adicional, intenta que las barras se muestren en orden descendente de tf_idf.

Ejercicio interactivo práctico

Prueba este ejercicio y completa el código de muestra.

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)
Editar y ejecutar código