Utilizando GitHub Actions para baixar dados públicos

Um exemplo com dados de barragens de mineração

Cerveja com Dados Fortaleza

12 de abril de 2023

Por que esse exemplo?

  • Eu gosto de automatizar tarefas!

  • Um exemplo com dados públicos

  • Base de dados com abrangência nacional

O que é o SIGBM?

SIGBM

SIGBM

  • Permite fazer pesquisas, ver os resultados, e baixar em Excel, CSV ou PDF!

  • Não disponibiliza o histórico ao baixar, apenas o cenário atual.

  • É interessante ter o histórico. Exemplo: o volume armazenado foi alterado? aumentou? diminuiu?

  • Descobri, utilizando a aba Network/Rede do navegador e fazendo a pesquisa, que ao clicar para baixar um arquivo Excel é enviado uma requisição POST para um link fixo.

  • Podemos usar esse link para baixar os dados em um script!

Importando os dados no R

  • Conseguimos “imitar” o processo de baixar o arquivo usando programação.
Código
1link_sigbm <-   "https://app.anm.gov.br/SIGBM/Publico/ClassificacaoNacionalDaBarragem/ExportarExcel"

2httr::POST(link_sigbm,
3           httr::write_disk("sigbm.xlsx"))
1
Salvando o link em um objeto
2
Fazer uma requisição POST no link
3
Salvar o resultado em um arquivo
Código
4sigbm_bruto <- readxl::read_excel("sigbm.xlsx", skip = 4)

5names(sigbm_bruto)
4
Importar dados, pulando 4 linhas iniciais
5
Vendo o nome das colunas!
 [1] "ID Barragem"              "Nome da Barragem"        
 [3] "Nome do Empreendedor"     "CPF/CNPJ"                
 [5] "Latitude"                 "Longitude"               
 [7] "Posicionamento"           "Município"               
 [9] "UF"                       "Minério Principal"       
[11] "Altura Atual(m)"          "Volume Atual(m³)"        
[13] "Método Construtivo"       "Categoria de Risco"      
[15] "Dano Potencial Associado" "Inserida na PNSB?"       
[17] "Nível de Emergencia"      "Status DCE Atual"        
[19] "Status DCO Atual"        
Código
sigbm <- sigbm_bruto |> 
6  janitor::clean_names() |>
  dplyr::mutate(
7    lat = parzer::parse_lat(latitude),
    long = parzer::parse_lon(longitude)
  ) |> 
8  dplyr::filter(lat != 0, long != 0)
6
Limpando nome das colunas!
7
Arrumando as colunas de lat/long
8
Removendo linhas onde lat/long é igual à 0 (erro de cadastro)

Usando os dados importados

Código
library(leaflet)
sigbm |> 
  dplyr::mutate(texto = glue::glue(
               "UF: {uf} <br>
               ID: {id_barragem} <br> 
               Nome da barragem: {nome_da_barragem} <br>
               Empreendedor: {nome_do_empreendedor} <br>
               Minério principal: {minerio_principal}"
             )) |> 
  leaflet() |> 
  addProviderTiles("Esri.WorldImagery") |> 
  addMarkers(~ long, ~lat,
             clusterOptions = markerClusterOptions(),
             popup = ~texto)

Automatização

  • Conseguimos acessar os dados diretamente do R.

  • Isso ainda não resolve a questão de ter um histórico!

  • Podemos usar o GitHub Actions para pedir que um computador execute um código todos os dias!

  • Configurei um workflow para baixar dados diariamente e salvar em um repositório no GitHub.

  • Tem dados desde 05/05/2022.

Exemplo do código do Workflow

Código em: sigbm/.github/workflows/download-sigbm.yaml

on:
  schedule:
    - cron:  "15 12 * * *"
  workflow_dispatch:
    branches: [main, master]


name: download-sigbm

jobs:
  download:
    runs-on: ubuntu-latest
    env:
      GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }}
    steps:
      - uses: actions/checkout@v2

      - name: Fetch latest data
        run: |-
          curl -X POST -d "" https://app.anm.gov.br/SIGBM/Publico/ClassificacaoNacionalDaBarragem/ExportarExcel --output data-raw/sigbm_download_`date +"%Y-%m-%d"`.xlsx

      - name: commit results
        run: |
          git config --local user.email "milz.bea@gmail.com"
          git config --local user.name "Beatriz Milz"
          git add .
          git commit -m 'Update data' || echo "Update data"
          git push origin || echo "Update data"

https://github.com/beatrizmilz/sigbm/tree/main/data-raw

https://github.com/beatrizmilz/sigbm/releases/tag/dados

Conclusão

  • Podemos usar o GitHub Actions para baixar e salvar dados ao longo do tempo

  • Pode ser útil para jornalistas, pesquisadores, setor privado, etc.

  • O GH Actions NÃO depende do R :)

  • Posts sobre GitHub Actions: https://beamilz.com/series-gha.html

Beatriz Milz

  • Co-organizadora: R-Ladies São Paulo / Latin-R / satRday São Paulo

  • Professora na Curso-R e consultora na R6

  • Instrutora de Tidyverse certificada pela RStudio

Contato

Obrigada!