ComeçarComece de graça

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.

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

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

Ver curso

Instruções do exercício

  • UI:

    • Adicione uma saída interativa do plotly chamada plot_top_ingredients e envolva em um tabPanel() com um rótulo apropriado.
  • Server:

    • Adicione uma expressão reativa chamada rval_top_ingredients que filtra recipes_enriched para a culinária selecionada e os ingredientes mais distintivos com base no valor de tf_idf.
    • Renderize um gráfico de barras interativo dos principais ingredientes e seus tf_idf e atribua-o a uma saída chamada plot_top_ingredients. Como desafio extra, veja se você consegue fazer as barras serem exibidas em ordem decrescente de tf_idf.

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)
Editar e executar o código