Dashboard de Inflação: como automatizar com o Github Actions

Na última semana, ensinamos como é possível realizar o deploy de um dashboard do nível de atividade econômica brasileira, construído através do Shiny, em uma webpage através do Shiny apps. Através deste método, é necessário que haja um trabalho manual para realizar a atualizações  de dados do dashboard, e de forma que possamos melhorar este processo, ensinaremos neste post como automatizar a atualizações de dados de um painel, utilizando como exemplo o Dashboard de Inflação construído através do nosso Curso de Análise de Conjuntura com o R.

O processo de automatização de scripts no Github envolve alguns passos e conhecimentos necessários, sendo alguns tópicos de certa forma avançados, exigindo algum tempo de estudo. Porém, aqui iremos simplificar o processo para que todos consigam utilizá-lo. O processo aqui envolve utilizar um Dashboard criado no R utilizando o Flexdashboard e Shiny, sendo portanto um dashboard dinâmico. Essa informação é importante, devido ao fato de que caso haja a utilização de outro tipo de dashboard é necessário que ocorra ajustes nos procedimentos.

Dashboard de Inflação

Aqui na Análise Macro ensinamos a criar dashboard para análise de conjuntura brasileira de forma totalmente reprodutível e automática. Você pode checar o resultado através deste link https://analisemacro.shinyapps.io/dashboard_inflacao/.

Dito isto, podemos prosseguir com os passos necessários para a automatização do dashboard.

Pré-requisitos

  • Ter instalado o R e RStudio
  • Ter instalado o Git
  • Criar uma conta no GitHub
  • Criar uma conta no Shiny App
  • Ter em mãos o dashboard construído através do Curso de Análise de Conjuntura

Após todos estes procedimentos, podemos então seguir no envio dos arquivos do dashboard para o Github, de forma que seja criado um repositório no site e que possa realizar o deploy no Shiny App através do Github, e que ele possa realizar a automatização com o Github Actions.

1° passo

Abra o projeto do dashboard (dashboard_inflation.Rproj) em conjunto com o arquivo .Rmd. Primeiro precisamos gerenciar as dependências do dashboard (isto é, o pacotes utilizados no script), de forma que o Github reconheça quais devem ser baixados pelo Github Actions.

Com os arquivos do dashboard aberto, utilize o seguinte código no console.


renv::init()

renv::snapshot()

2° passo

Configurado as dependências, podemos então exportar os arquivos para o repositório do Github. Para criar o repositório, devemos seguir os seguintes passos:

  1. Estar logado no GitHub
  2. Clicar no botão New
  3. Definir um nome do repositório
  4. Clicar em Create repository

Ao criar o repositório, aparecerá alguns comandos em Git, que podemos utilizar para integrar o projeto do nosso dashboard com o repositório. Copiamos o código que aparece na sugestão "…or create a new repository on the command line" e colamos no Terminal do Rstudio. No nosso exemplo utilizamos o seguinte código:


echo "# dashboard_inflacao" >> README.md

git init

git add README.md

git commit -m "first commit"

git branch -M main

git remote add origin https://github.com/analisemacro/dashboard_inflacao.git
git push -u origin main

git add .

git commit -m "add dashboard"

git push

3° passo

Com efeito, integramos nossos arquivos remotos com o Github, o seguinte passo será rodar o dashboard no Github em conjunto com o Shiny Apps, de forma que ele seja atualizado automaticamente com o Github Actions. Mais importante, será configurar o Github em conjunto com o Shiny App. Para isso, devemos coletar os secrets (chaves) do Shiny Apps.
  1. acesse shinyapps.io
  2. entre em sua conta (caso não tenha, crie uma)
  3. clique na imagem do perfil e vá em tokens
  4. na página, utilize o token que deseja para realizar o deploy do dashboard, caso não tenha um token, clique em new token
  5. com o secrets em mãos, deveremos colocá-los no Github. No repositório, acesse Settings > secrets > actions > New repository secret. Em cada novo secret, utilize os nomes utilizados na imagem, e que correspondem para os nomes dos secrets relacionados aos tokens do Shiny App.

Temos o suficiente agora para conseguir utilizar o Github Actions.

4° passo

Neste passo, iremos criar um workflow que possa realizar o deploy no Shiny app e atualizá-lo a cada dia automaticamente.
Para criar um workflow , deve acessar a página ''Actions'' e criar um novo workflow, através de new workflow >  set up a workflow yourself . É possível alterar o nome do arquivo para qualquer um, aqui utilizaremos "update.yml"
Na parte "Edit file", exclua o código padrão e copie o seguinte código para realizar a configuração do deploy do dashboard e manter a atualização diária.
on:
push:
branches:
- main
- master
schedule:
- cron: "0 0 * * *"

name: Dashboard update

jobs:
Dashboard-update:
runs-on: windows-latest
env:
GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }}
RSCONNECT_USER: ${{ secrets.RSCONNECT_USER }}
RSCONNECT_TOKEN: ${{ secrets.RSCONNECT_TOKEN }}
RSCONNECT_SECRET: ${{ secrets.RSCONNECT_SECRET }}
steps:
- uses: actions/checkout@v2
- uses: r-lib/actions/setup-r@v1
with:
r-version: '4.1.2' # The R version to download

- name: Cache packages
uses: actions/cache@v2
with:
path: ~\AppData\Local\renv
key: ${{ runner.os }}-renv-${{ hashFiles('**/renv.lock') }}
restore-keys: |
${{ runner.os }}-renv-
- name: Restore packages
run: |
if (!requireNamespace("renv", quietly = TRUE)) install.packages("renv")
renv::restore()
shell: Rscript {0}

- name: Install workflow dependencies
run: |
install.packages(c("rcmdcheck", "sessioninfo", "devtools"))
shell: Rscript {0}

- name: Install pandoc
run: |
choco install pandoc

- name: Authorize and deploy app
run: |
rsconnect::setAccountInfo(name='${{ secrets.RSCONNECT_USER }}', token='${{ secrets.RSCONNECT_TOKEN }}', secret='${{ secrets.RSCONNECT_SECRET }}')
rsconnect::deployApp(account = 'analisemacro', forceUpdate = TRUE)
shell: Rscript {0}

- name: Commit results
run: |
git config --local user.name "GitHub Actions"
git config --local user.email "actions@github.com"
git add .
git commit -m "Update data and deploy shiny app" || echo "No changes to commit"
git push origin || echo "No changes to commit"

Importante dizer que é necessário que o código deva conter uma indentação específica, para obter um exemplo de como pode realizar através do códigos, veja aqui.

Esta parte é um pouco complexa de se entender, portanto, não iremos nos aprofundar no papel de cada código.

Com isso, finalizamos todos os passos de construção do nosso workflow. Agora, será feito o deploy do nosso dashboard na página do Shiny App, bem como será feito esse procedimento todos os dias automaticamente.

Compartilhe esse artigo

Facebook
Twitter
LinkedIn
WhatsApp
Telegram
Email
Print

Comente o que achou desse artigo

Outros artigos relacionados

Análise do Censo Demográfico com o R

Como podemos analisar dados do Censo Demográfico para produzir pesquisas e implementar políticas públicas? Mostramos nesta postagem o resultado de uma breve análise dos dados preliminares do Censo Demográfico de 2022 usando o R.

Deploy de modelos com Python + Shinylive + GitHub gastando ZERO reais

Colocar modelos em produção pode ser um grande desafio. Lidar com custos monetários, infraestrutura operacional e complexidades de códigos e ferramentas pode acabar matando potenciais projetos. Uma solução que elimina todos estes obstáculos é a recém lançada Shinylive. Neste artigo mostramos um exemplo com um modelo de previsão para o preço do petróleo Brent.

Como automatizar tarefas repetitivas usando Python? Um exemplo para largar o Excel

Manter relatórios diários com dados e análises atualizados é um desafio, pois envolve várias etapas: coleta de dados, tratamento de informações, produção de análises e atualização de relatório. Para superar este desafio algumas ferramentas como Python + Quarto + GitHub podem ser usadas para automatizar tudo que for automatizável. Neste artigo mostramos um exemplo com dados do mercado financeiro.

como podemos ajudar?

Preencha os seus dados abaixo e fale conosco no WhatsApp

Boletim AM

Preencha o formulário abaixo para receber nossos boletins semanais diretamente em seu e-mail.