Objetivos

  • Tornar nossas análises interativas

Usando Shiny

  • Faça sua análise normal primeiro!
  • Verifique se funciona
  • Simplifique o código e o fluxo de trabalho
  • Confirmar que todos os parâmetros são variáveis e não hard-coded

Usando Shiny

  1. Crie uma arquitetura:
    • um User Interface: ui <- fluidPage( ... )
    • uma função de server: server <- function(input, output, session) { ... }
    • uma chamada de aplicativo no final: shinyApp(ui = ui, server = server)
  2. Crie o User Interface com inputs
  3. Crie funções reactive no Server que respondem aos inputs
  4. Crie outputs que dependem de funções reactive
  5. Coloque os outputs no User Interface

Exemplo Analise

data <- read.csv("data.csv")

new_data <- data %>% filter(UF=="SP")
  
Graph <- new_data() %>% ggplot() +
      geom_col(aes(x=NOME_PARTIDO,y=QTDE_VOTOS))

Shiny Arquitetura (1)

ui <- fluidPage( 
  
  )

server <- function(input, output, session) { 
  
}

shinyApp(ui = ui, server = server)

Shiny Arquitetura (1)

library(tidyverse)
library(knitr)
library(shiny)

ui <- fluidPage( 
  
  )

server <- function(input, output, session) { 
  
}

shinyApp(ui = ui, server = server)

Shiny Arquitetura (1)

library(tidyverse)
library(knitr)
library(shiny)

data <- read.csv("data.csv")

ui <- fluidPage( 
  
  )

server <- function(input, output, session) { 
  
}

shinyApp(ui = ui, server = server)

Shiny Arquitetura (2)

data <- read.csv("data.csv")

ui <- fluidPage( 
  
  )

server <- function(input, output, session) { 
  
}

shinyApp(ui = ui, server = server)

Shiny Arquitetura (2)

data <- read.csv("data.csv")

ui <- fluidPage( 
  
  selectInput("Estado",
              label="Estado",
              choices = c("SP","RJ"),
              selected = "SP")    
  
  )

server <- function(input, output, session) { 
  
}

shinyApp(ui = ui, server = server)

Shiny Arquitetura (3)

data <- read.csv("data.csv")

ui <- fluidPage( 
  
  selectInput("Estado",
              label="Estado",
              choices = c("SP","RJ"),
              selected = "SP")    
  )

server <- function(input, output, session) { 
  
  new_data <- reactive({
    data %>% filter(UF==input$Estado)
  })
}
shinyApp(ui = ui, server = server)

Shiny Arquitetura (4)

data <- read.csv("data.csv")

ui <- fluidPage( 
 
  selectInput("Estado",
              label="Estado",
              choices = c("SP","RJ"),
              selected = "SP")    
  )

server <- function(input, output, session) { 
  
  new_data <- reactive({
    data %>% filter(UF==input$Estado)
  })
  
  output$graphic <- renderPlot({
    new_data() %>% ggplot() +
      geom_col(aes(x=NOME_PARTIDO,y=QTDE_VOTOS))
  })
}
shinyApp(ui = ui, server = server)

Shiny Arquitetura (5)

data <- read.csv("data.csv")

ui <- fluidPage( 
  
  selectInput("Estado",
              label="Estado",
              choices = c("SP","RJ"),
              selected = "SP"),
    
  plotOutput("Graph")
  )

server <- function(input, output, session) { 
  
  new_data <- reactive({
    data %>% filter(UF==input$Estado)
  })
  
  output$Graph <- renderPlot({
    new_data() %>% ggplot() +
      geom_col(aes(x=NOME_PARTIDO,y=QTDE_VOTOS))
  })
}
shinyApp(ui = ui, server = server)

Shiny Arquitetura

Elementos de UI

selectInput("Input_Nome",
            label="Descricao",
            choices=c("Option1","Option2"),
            selected="Option1")
checkboxInput("Input_Nome",
              label="Descricao",
              value=FALSE)

Elementos de UI

sliderInput("Input_Nome",
            label="Descricao",
            min=0,
            max=100,
            value=0)
numericInput("Input_Nome",
             label="Descricao",
             min=0,
             max=100,
             value=0)

Elementos de UI

radioButtons("Input_Nome",
            label="Descricao",
            choices=c("Option1","Option2"),
            selected="Option1")
checkboxGroupInput("Input_Nome",
             label="Descricao",
             choices=c("Option1","Option2"),
             selected="Option1")

Elementos de UI

  • Podemos alterar o 'layout' de UI com funções que rodear os inputs:
ui <- fluidPage( 
  
   titlePanel("Meu Aplicativo"),
  
  sidebarLayout(
    sidebarPanel(
      selectInput("Estado",
              label="Estado",
              choices = c("SP","RJ"),
              selected = "SP")
    ),
    mainPanel(
      plotOutput("Graph")
  )
  )
)

Elementos de UI

  • Podemos alterar o 'layout' de UI com funções que rodear os inputs:
ui <- navbarPage(title = "Website",
 tabPanel("tab 1", plotOutput("Chart")),
 tabPanel("tab 2", tableOutput("Table")),
 tabPanel("tab 3", textOutput("Text"))
 )

Lógica de Server

  • Quando mudamos um Input, o 'reactive' muda também
  • Outros 'reactives' que depende deste reactive mudam
    • O ordem de reactives no script está muito importante
  • Ao final, o Output que depende de varias reactives mudam e atualiza

Tipos de Output

Criar no servidor Colocar no UI
renderPlot({ }) plotOutput( )
renderTable({ }) tableOutput( )
renderText({ }) textOutput( )