Dashboards interativos com Shiny

Crie aplicativos dinâmicos da Web usando Shiny em R

Saiba como criar painéis interativos e aplicativos da Web usando Shiny em R. Este tutorial aborda os conceitos básicos do Shiny, desde o design de interfaces de usuário até a manipulação da reatividade e a implantação do aplicativo.

Programação
Autor
Afiliação
Data de Publicação

10 de fevereiro de 2024

Data de Modificação

29 de abril de 2025

Palavras-chave

Tutorial do Shiny, Painéis interativos em R, Criar o aplicativo Shiny, Aplicativos interativos da Web, Painel de controle do Shiny

Introdução

O Shiny é um pacote poderoso do R que permite criar aplicativos interativos da Web diretamente do R. Com o Shiny, você pode transformar suas análises em painéis dinâmicos que permitem aos usuários explorar os dados em tempo real. Este tutorial o guiará pelos conceitos básicos do Shiny, desde a configuração da interface do usuário até o gerenciamento da reatividade e a implantação do aplicativo. Quer você seja novo no Shiny ou esteja procurando expandir suas habilidades, este guia o ajudará a criar painéis interativos e envolventes para seus projetos de dados.



Primeiros passos com o Shiny

Antes de começar, certifique-se de que o Shiny esteja instalado. Você pode instalá-lo a partir do CRAN, se necessário:

#| label: install-shiny
install.packages("shiny")
library(shiny)

Estrutura básica de um aplicativo Shiny

Um aplicativo Shiny geralmente consiste em dois componentes principais: - UI (Interface do usuário): Define o layout e a aparência do seu aplicativo. - Servidor: Contém a lógica que controla o comportamento do aplicativo e responde às entradas do usuário.

Aqui está uma estrutura mínima de aplicativo Shiny:

#| label: minimal-shiny-app
library(shiny)

# Definir a interface do usuário para o aplicativo
ui <- fluidPage(
  titlePanel("My First Shiny App"),
  sidebarLayout(
    sidebarPanel(
      sliderInput("obs", "Number of observations:", 
                  min = 10, max = 100, value = 50)
    ),
    mainPanel(
      plotOutput("distPlot")
    )
  )
)

# Definir a lógica do servidor necessária para desenhar um histograma
server <- function(input, output) {
  output$distPlot <- renderPlot({
    hist(rnorm(input$obs))
  })
}

# Executar o aplicativo 
shinyApp(ui = ui, server = server)

Neste exemplo, o aplicativo gera um histograma com base em uma distribuição normal aleatória, com o número de observações controlado por uma entrada de controle deslizante.

Exemplo de aplicativo Shiny 01

Criação de um painel mais interativo

Vamos criar um exemplo um pouco mais complexo que inclui várias entradas e saídas, demonstrando a reatividade e o conteúdo dinâmico. Neste exemplo, criaremos um painel que permite aos usuários filtrar e visualizar dados do conjunto de dados integrado mtcars.

#| label: interactive-dashboard
library(shiny)
library(ggplot2)
library(dplyr)

# Definir a interface do usuário para o painel
ui <- fluidPage(
  titlePanel("Mtcars Data Dashboard"),
  sidebarLayout(
    sidebarPanel(
      sliderInput("cyl", "Select number of cylinders:", 
                  min = min(mtcars$cyl), max = max(mtcars$cyl), 
                  value = c(min(mtcars$cyl), max(mtcars$cyl))),
      selectInput("var", "Select variable to plot:",
                  choices = c("mpg", "hp", "wt"), selected = "mpg")
    ),
    mainPanel(
      plotOutput("dataPlot"),
      tableOutput("dataTable")
    )
  )
)

# Definir a lógica do servidor para o painel
server <- function(input, output) {
  # Expressão reativa para filtrar dados com base na entrada do controle deslizante
  filteredData <- reactive({
    mtcars %>%
      filter(cyl >= input$cyl[1], cyl <= input$cyl[2])
  })
  
  # Renderizar um gráfico com base nos dados filtrados e na variável selecionada
  output$dataPlot <- renderPlot({
    ggplot(filteredData(), aes_string(x = input$var)) +
      geom_histogram(binwidth = 5, fill = "steelblue", color = "white") +
      labs(title = paste("Distribution of", input$var),
           x = input$var, y = "Frequency") +
      theme_minimal()
  })
  
  # Renderizar os dados filtrados como uma tabela
  output$dataTable <- renderTable({
    filteredData()
  })
}

# Executar o aplicativo Shiny
shinyApp(ui = ui, server = server)

Neste exemplo, os usuários podem selecionar o número de cilindros e uma variável para plotar, com o painel sendo atualizado dinamicamente com base em suas entradas.

Exemplo de aplicativo Shiny 02

Melhores práticas e dicas

  • Modularize seu código:
    Para aplicativos maiores, considere modularizar a interface do usuário e os componentes do servidor em arquivos separados.

  • Utilizar temas do Shiny:
    Personalize a aparência do seu aplicativo usando temas Shiny (por exemplo, por meio do pacote shinythemes).

  • Otimização de desempenho:
    Use expressões reativas de forma eficiente para minimizar cálculos redundantes e melhorar o desempenho do aplicativo.

  • Testes e depuração:
    Teste regularmente seu aplicativo para garantir que todos os componentes reativos sejam atualizados conforme o esperado e use as ferramentas de depuração integradas do Shiny quando surgirem problemas.

Opções de implantação

Quando seu painel estiver concluído, você poderá implantá-lo usando várias plataformas:

  • ShinyApps.io: Um serviço de nuvem para hospedar aplicativos Shiny.
  • RStudio Connect: Para implantação e colaboração em nível empresarial.
  • Docker: Coloque seu aplicativo Shiny em contêineres para implantações reproduzíveis e dimensionáveis.

Conclusão

O Shiny permite que você transforme suas análises de R em painéis interativos que são atraentes e funcionais. Este tutorial forneceu um guia passo a passo para criar um aplicativo Shiny, desde a estrutura básica do aplicativo até um exemplo de painel mais interativo usando o conjunto de dados mtcars. Faça experiências com esses exemplos, personalize os layouts e explore recursos avançados para criar aplicativos dinâmicos orientados por dados.

Leitura adicional

Boa codificação e aproveite a criação de painéis interativos com o Shiny!

Explore mais artigos

Nota

Aqui estão mais artigos da mesma categoria para ajudá-lo a se aprofundar no tópico.

De volta ao topo

Reuso

Citação

BibTeX
@online{kassambara2024,
  author = {Kassambara, Alboukadel},
  title = {Dashboards interativos com Shiny},
  date = {2024-02-10},
  url = {https://www.datanovia.com/pt/learn/programming/r/tools/interactive-dashboards-with-shiny.html},
  langid = {pt}
}
Por favor, cite este trabalho como:
Kassambara, Alboukadel. 2024. “Dashboards interativos com Shiny.” February 10, 2024. https://www.datanovia.com/pt/learn/programming/r/tools/interactive-dashboards-with-shiny.html.