Last active
November 8, 2018 14:54
-
-
Save leabdalla/0ab4e91470c3076669fe28e9fb3c54cd to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
library(shiny) # library que faz a interface interativa // https://shiny.rstudio.com | |
library(readxl) # library que faz a leitura de excel // https://readxl.tidyverse.org | |
library(dplyr) # library que ajuda na manipulacao dos dados // https://cran.r-project.org/web/packages/dplyr/vignettes/dplyr.html | |
library(magrittr) # library que permite encadear comandos (usados nos filtros) // https://cran.r-project.org/package=magrittr | |
library(ggplot2) # library que faz a criacao de diversos graficos // http://r-statistics.co/Top50-Ggplot2-Visualizations-MasterList-R-Code.html | |
" faz leitura do arquivo excel | |
---------------------------------------------------------------------------------------" | |
ENTRADAS <- read_xlsx("parkaz_ociosidade_de_loja.xlsx", col_names=TRUE) | |
" monta os components na tela | |
---------------------------------------------------------------------------------------" | |
ui <- fluidPage( | |
titlePanel("Tráfego por faixa de horário"), | |
sidebarLayout( | |
sidebarPanel( | |
helpText("Exibe a intensidade de tráfego em cada faixa de horário da semana"), | |
selectInput("lojaInput", | |
label = "Loja", | |
choices = unique(ENTRADAS$loja), | |
selected = 1) | |
), | |
mainPanel( | |
plotOutput("HEATMAP"), | |
br(), | |
tableOutput("TABELA") | |
) | |
) | |
) | |
" funcao utilitaria para pegar o total de Entradas de acordo com os parametros passados | |
---------------------------------------------------------------------------------------" | |
pegarTotalDeEntradas <- function(loja, dia_semana, hora_entrada){ | |
data <- ENTRADAS[ | |
ENTRADAS$loja == loja & | |
ENTRADAS$dia_semana == dia_semana & | |
ENTRADAS$hora_entrada == hora_entrada | |
,] | |
return(nrow(data)) | |
} | |
" funcao utilitaria para pegar o total de Entradas de acordo com os parametros passados | |
---------------------------------------------------------------------------------------" | |
pegarTotaisPorHoraDoDia <- function(loja, dia_semana){ | |
data <- c( | |
pegarTotalDeEntradas(loja, dia_semana, 7), | |
pegarTotalDeEntradas(loja, dia_semana, 8), | |
pegarTotalDeEntradas(loja, dia_semana, 9), | |
pegarTotalDeEntradas(loja, dia_semana, 10), | |
pegarTotalDeEntradas(loja, dia_semana, 11), | |
pegarTotalDeEntradas(loja, dia_semana, 12), | |
pegarTotalDeEntradas(loja, dia_semana, 13), | |
pegarTotalDeEntradas(loja, dia_semana, 14), | |
pegarTotalDeEntradas(loja, dia_semana, 15), | |
pegarTotalDeEntradas(loja, dia_semana, 16), | |
pegarTotalDeEntradas(loja, dia_semana, 17), | |
pegarTotalDeEntradas(loja, dia_semana, 18), | |
pegarTotalDeEntradas(loja, dia_semana, 19), | |
pegarTotalDeEntradas(loja, dia_semana, 20), | |
pegarTotalDeEntradas(loja, dia_semana, 21) | |
) | |
return(data) | |
} | |
" funcao server() processa os dados continuamente | |
-------------------------------------------------" | |
server <- function(input, output){ | |
" filtra os registros a serem calculados de acordo com o item selecionado | |
---------------------------------------------" | |
ENTRADAS_FILTRADAS <- reactive({ | |
ENTRADAS %>% | |
filter( | |
loja == input$lojaInput | |
) | |
}) | |
" cria um OUTPUT com a tabela simples | |
---------------------------------------------" | |
output$TABELA <- renderTable({ | |
ENTRADAS_FILTRADAS() | |
}) | |
" cria um OUTPUT com o heatmap | |
---------------------------------------------" | |
output$HEATMAP <- renderPlot({ | |
seg <- pegarTotaisPorHoraDoDia(input$lojaInput, 'seg') | |
ter <- pegarTotaisPorHoraDoDia(input$lojaInput, 'ter') | |
qua <- pegarTotaisPorHoraDoDia(input$lojaInput, 'qua') | |
qui <- pegarTotaisPorHoraDoDia(input$lojaInput, 'qui') | |
sex <- pegarTotaisPorHoraDoDia(input$lojaInput, 'sex') | |
sab <- pegarTotaisPorHoraDoDia(input$lojaInput, 'sab') | |
dom <- pegarTotaisPorHoraDoDia(input$lojaInput, 'dom') | |
# cria uma matrix com os dados de toda a semana | |
SEMANA <- data.frame(seg, ter, qua, qui, sex, sab, dom) | |
# define os nomes de cada linha do gráfico | |
row.names(SEMANA) <- c('7h', '8h', '9h', '10h', '11h', '12h', '13h', '14h', '15h', '16h', '17h', '18h', '19h', '20h', '21h') | |
# executa a criação do gráfico | |
my_heatmap <- heatmap(data.matrix(SEMANA), Rowv=NA, Colv=NA, col = cm.colors(256), scale="column") | |
}) | |
} | |
" inicia a execucao do shiny | |
-----------------------------" | |
shinyApp(ui = ui, server = server) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment