Explorar culinárias: ingredientes em destaque (redux)
Cada culinária é única por causa de um pequeno conjunto de ingredientes característicos. Não conseguimos evidenciá-los olhando apenas os ingredientes mais populares, já que esses costumam ser a base do dia a dia, como sal ou açúcar.
Outra métrica que pode ajudar nessa busca é o termo frequência–inverso da frequência em documentos (TFIDF), uma estatística numérica que reflete a importância de uma palavra (ingrediente) para um documento (culinária) em uma coleção ou corpus (receitas).
Nós já pré-calculamos o tf_idf para você e criamos um conjunto de dados enriquecido chamado recipes_enriched. Seu objetivo é criar um app Shiny que exiba um gráfico de barras horizontal com os ingredientes mais distintivos de uma culinária, medidos por tf_idf.

Você vai usar uma expressão reativa para encapsular os cálculos e deixar o código do gráfico focado apenas em criar a visualização. Essa é uma boa prática de programação e ajuda a criar apps Shiny modulares e eficientes.
Carregamos os pacotes shiny, dplyr, ggplot2 e plotly. Aqui vão dois trechos úteis para filtrar os principais ingredientes por culinária e criar um gráfico de barras horizontal. Você pode adaptá-los conforme necessário.
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 exercício faz parte do curso
Construindo Aplicações Web com Shiny em R
Instruções do exercício
UI:
- Adicione uma saída interativa do plotly chamada
plot_top_ingredientse envolva em umtabPanel()com um rótulo apropriado.
- Adicione uma saída interativa do plotly chamada
Server:
- Adicione uma expressão reativa chamada
rval_top_ingredientsque filtrarecipes_enrichedpara a culinária selecionada e os ingredientes mais distintivos com base no valor detf_idf. - Renderize um gráfico de barras interativo dos principais ingredientes e seus
tf_idfe atribua-o a uma saída chamadaplot_top_ingredients. Como desafio extra, veja se você consegue fazer as barras serem exibidas em ordem decrescente detf_idf.
- Adicione uma expressão reativa chamada
Exercício interativo prático
Experimente este exercício completando este código de exemplo.
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)