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.

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
Instrucciones del ejercicio
UI:
- Añade una salida interactiva de plotly llamada
plot_top_ingredientsy envuélvela en untabPanel()con una etiqueta adecuada.
- Añade una salida interactiva de plotly llamada
Server:
- Añade una expresión reactiva llamada
rval_top_ingredientsque filtrerecipes_enrichedpor la cocina seleccionada y los ingredientes más distintivos según el valor detf_idf. - Representa un gráfico de barras interactivo de los ingredientes principales y su
tf_idfy asígnalo a una salida llamadaplot_top_ingredients. Como reto adicional, intenta que las barras se muestren en orden descendente detf_idf.
- Añade una expresión reactiva llamada
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)