Mariana Queiroz
28/6/2021

Shiny e o fantástico mundo do R na ciência de dados

Agregando valor com aplicativos web interativos.
Photo by Carlos Muza on Unsplash

A ciência de dados, na sua parte de modelagem preditiva, fala em construir e utilizar algoritmos de aprendizado de máquina para prever eventos ou situações de interesse. Essa capacidade preditiva pode auxiliar tanto empresas quanto governos, antecipando situações que ofereçam prejuízos a pessoas, entidades ou corporações, por exemplo. Mas como muitos devem saber, não é tão trivial assim transmitir essas informações futuras, pois a lógica por trás delas e o valor agregado que existe em tais previsões, muitas vezes, ficam em alguma abstração mental do indivíduo que as fez e de outros poucos.

Tudo bem, não estou aqui para abordar sobre “a beleza de encontrar padrões” em um monte de informações que parecem desconexas, mas que não necessariamente são.

Estou aqui para falar sobre o Shiny e os primeiros passos na criação de um aplicativo interativo com muitas possibilidades de customizações!
Shiny é um pacote do R que possibilita a criação de aplicativos web e que é mais fácil de utilizar se você usa o RStudio IDE. Seu framework permite que aplicativos complicados sejam criados sem nenhum conhecimento prévio em HTML, CSS ou JavaScript - basta conhecer o R! Claro que qualquer conhecimento nessas áreas facilita as customizações a serem feitas, além de viabilizar a criação de apps poderosos.

Alguns usuários de Python no mundo da ciência de dados pensam como Greg Lamp, mantenedor do ggplot for python, e acham que o “R é um pouco estranho” . Mesmo assim, gostaria de estimular que conheçam mais sobre a linguagem e as coisas boas que podem derivar dela - como as visualizações incríveis do ggplot2.

Caso você queira agregar valor em seus modelos preditivos, basta criar dashboards potentes, customizáveis, interativos com ótimo design e que tenham rápida resposta aos inputs do usuário. O Shiny é a escolha certa pra isso!

https://shiny.rstudio.com/


Já foi feita uma breve introdução desse incrível framework que usa código de linguagem R para entregar soluções que servem de demonstração das análises e previsões de modelos de machine learning. Então, que tal colocarmos a mão na massa e implementar nosso primeiro ShinyApp?

Primeiro, você deve estar em um ambiente de trabalho do R. Para instalar e carregar o pacote no seu diretório de trabalho basta usar os comandos:

# Instalando o pacote
install.packages("shiny")

# Carregando o pacote
library(shiny)

Basicamente, um aplicativo do Shiny usa os componentes a seguir:

  1. UI (do inglês, user interface) que definirá a aparência do seu aplicativo;
  2. Server que definirá o funcionamento do seu app;
  3. Programação reativa que automatizará as mudanças das saídas (outputs) quando as entradas mudarem (inputs).

# Carregando o pacote
library(shiny)

# Definindo o layout
ui <- fluidPage(  
"Hello, world!"
)

# Definindo um servidor para o Shiny
server <- function(input, output, session) {
}

# Executando o aplicativo
shinyApp(ui, server)

O código acima não produz nada demais - e não usou o 3º componente. Mas você já pode dizer que esse é seu primeiro aplicativo usando Shiny. Olha como ficaria:

Existem algumas maneiras para criar um aplicativo Shiny, mas a mais simples é criar um diretório e colocar todo seu código em um único arquivo chamado app.R dentro deste diretório. Esse arquivo informará ao shinycomo será a configuração do seu app em termos de aparência e de comportamento.

Avancemos, começando pela parte responsável por definir a interface do usuário do app, o componente UI. Neste componente são utilizadas funções de layout - layout function - que fornecem uma estrutura visual de alto nível. Dentro destas funções estarão os controles de entrada e saída, isto é, de input e output.

Interactive Web Apps with shiny Cheat Sheet — https://shiny.rstudio.com/images/shiny-cheatsheet.pdf


O componente server estabelecerá a lógica necessária para que nosso aplicativo se comporte da maneira como queremos. Então no server a saída será salva em output$* com a função de renderização do output render*(), os valores de entrada serão salvos em input$*e a reatividade será criada usando o input$* dentro da função render*(). Minha cabeça começou a dar “bug” . Melhor usarmos um exemplo simples, mas um pouco mais elaborado do que nosso aplicativo inicial:

# Carregando pacotes
library(shiny)
library(datasets)

# Definindo o layout
ui <- fluidPage(        

# Dando um título à página    
titlePanel("Telefones por Região"),    

# Gerando uma linha com uma barra lateral    
sidebarLayout(              

# Defindo a barra lateral com uma entrada        
sidebarPanel(            selectInput("region", "Região:",                        
choices=colnames(WorldPhones)),            
hr(),            
helpText("Dados da AT&T (1961) The World's Telephones.")        
),        

# Criando um local para o gráfico de barras        
mainPanel(            
plotOutput("phonePlot")          
)    

)
)# Defindo um servidor para o Shiny
server <- function(input, output) {    

# Preenchendo o local que criamos para um gráfico    
output$phonePlot <- renderPlot({        

# Renderizando um gráfico de barras        
barplot(WorldPhones[,input$region]*1000,                
main=input$region,                
ylab="Número de telefones",                
xlab="Ano")    
})
}

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

E voilà! Olha só como ficou nosso ShinyApp:

Repare que para criar o app foi usada a função shinyApp(ui, server) permitindo a união dos 3 componentes. Mas faltou falar sobre a programação reativa, então vou discorrer brevemente sobre ela. O framework do Shiny serve para facilitar a conexão de valores de entrada de uma página da web e fazer com que os resultados sejam escritos como valores de saída de volta para a página da web, usando a linguagem R no back-end. Shiny apps são interativos permitindo que usuários alterem o valor de entrada no aplicativo e obtenham respostas correspondentes aos valores escolhidos por eles. Digamos assim:

  • Temos um input que definirá quantos pontos aparecerão no gráfico;
  • O usuário altera esse input de 10 para 50, por exemplo;
  • Apenas o gráfico será reprocessado para refletir a nova escolha do usuário;
  • Assim o output atualizará de 10 pontos para mostrar 50 pontos.

Essa mágica acontece devido ao uso da programação reativa fazendo com que alterações nos inputs afetem apenas as partes certas do seu código R para serem executadas novamente. Isso fará com que os outputs que foram alterados sejam atualizados em nosso aplicativo.

O Shiny tem uma alta capacidade de customização!


Fiz essa simples personalização
construindo um aplicativo estático e que diz muito se você reparar. Mas, também, para mostrar que é possível fazer diversas personalizações, tornando qualquer dashboard mais atrativo!

Se você se interessou por essa forma de agregar valor, ao demonstrar o poder das interpretações obtidas através de seus modelos de machine learning de forma visual e clara. Confira os links a seguir:

Mais artigos da Datarisk

Ver todos os artigos
© Copyright 2017 - 2022 | Datarisk.io | Todos os direitos reservados