class: center, middle, inverse, title-slide # Coleta de dados automatizada e integração contínua utilizando GitHub Actions: ## Exemplos com o Pacote Mananciais ### Beatriz Milz ### International Seminar on Statistics with R ### Junho de 2021 ---
<style type="text/css"> a:hover { opacity: 0.5; } </style> ## Beatriz Milz - 2019 - * - Doutoranda em Ciência Ambiental - PROCAM/IEE/USP - 2016-2018 - Mestrado em Ciências - Programa de Pós-Graduação em Análise Ambiental Integrada - UNIFESP - 2012-2015 - Bacharelado em Gestão Ambiental - EACH/USP ### R: Comunidades, eventos, pacotes, livros.. <center> <a href='https://education.rstudio.com/trainers/'> <img src='img/Hex/CertifiedRstudioTrainer.png' width="90px"></a> <a href='https://rladies.org/'> <img src='img/Hex/1hexlogorladies.jpeg' width="90px"></a> <a href='https://curso-r.com/'> <img src="img/Hex/curso-r-azul.jpg" width="90px"></a> <a href='https://livro.curso-r.com/'> <img src='https://curso-r.com/images/produtos/hex-livro.png' width="90px"></a> <a href='https://saopaulo2019.satrdays.org/'> <img src='img/Hex/2satrdaysp.png' width="90px"></a> <a href='https://latin-r.com/'> <img src='img/Hex/4LatinR_hex_violeta-cut.jpg' width="90px"></a> <a href='https://carpentries.org/'> <img src='img/Hex/carpentries.png' width="90px"> </a> <a href='https://user2021.r-project.org/'> <img src='https://user2021.r-project.org/img/artwork/user-logo-color.png' width="90px"> </a> <a href='https://cienciadedatos.github.io/dados/'> <img src='https://cienciadedatos.github.io/dados/reference/figures/dados-hex.png' width="90px"></a> <a href='https://beatrizmilz.github.io/mananciais/'> <img src='https://beatrizmilz.github.io/mananciais/reference/figures/hexlogo.png' width="90px"></a> </center> --- ## Objetivos .pull-left[ - Introduzir o conceito de GitHub Actions: - Para que serve? - Quais são os pré-requisitos para usar? - Onde buscar mais informações? - O pacote Mananciais servirá de exemplo! ] -- .pull-right[ - O objetivo **não** é virar ninja em 20 minutos: <img src="https://media.giphy.com/media/Ro3QH9ZNTCvHW/source.gif" width="90%" style="display: block; margin: auto;" /> ] --- ## Pacote Mananciais - Disponibiliza dados do mananciais que abastecem a Região Metropolitana de São Paulo (RMSP) - Importância dos dados: - RMSP - mais de 21 milhões de habitantes [(fonte)](https://www.pdui.sp.gov.br/rmsp/?page_id=56#:~:text=Os%20n%C3%BAmeros%20da%20RMSP%20impressionam,%C3%A1rea%20de%207.946%2C96%20km%C2%B2.) + crise hídrica em 2014/2015 - O volume armazenado nos reservatórios é um dado muito usado por pessoas pesquisadoras e pela mídia. --- ## Pacote Mananciais - Dados são originalmente disponibilizados no Portal dos mananciais da Sabesp: https://mananciais.sabesp.com.br/ . Algumas dificuldades de acesso: - Página "Situação dos mananciais" não apresenta opcão para fazer o download da base de dados - Download é possível na página "Dados dos Sistemas Produtores", selecionando "valores agregados para o sistema"; - Mais dificuldades: só é possível fazer a consulta de um sistema por vez; ao fazer consulta de longos períodos o site trava; formato do arquivo baixado não é o ideal. - Os dados são atualizados todos os dias de manhã. --- ## Pacote Mananciais - Disponibiliza os dados atualizados diariamente da página "Situação dos mananciais": - em [`.xlsx`](https://github.com/beatrizmilz/mananciais/blob/master/inst/extdata/mananciais.xlsx?raw=true) e em [`.csv`](https://github.com/beatrizmilz/mananciais/raw/master/inst/extdata/mananciais.csv) - com a função: ```r mananciais <- mananciais::dados_mananciais() dplyr::glimpse(mananciais) ``` ``` ## Rows: 47,994 ## Columns: 8 ## $ data <date> 2021-05-09, 2021-05-09, 2021-05-09, 2021-05-09, 2… ## $ sistema <chr> "Cantareira", "Alto Tietê", "Guarapiranga", "Cotia… ## $ volume_porcentagem <dbl> 49.6, 58.5, 69.4, 77.8, 88.5, 71.0, 77.8, 49.8, 58… ## $ volume_variacao <dbl> -0.2, -0.1, -0.2, -0.2, 0.0, 0.1, 0.2, -0.1, -0.1,… ## $ volume_operacional <dbl> 487.50590, 327.96921, 118.82658, 12.83817, 99.3076… ## $ pluviometria_dia <dbl> 0.0, 0.0, 0.2, 0.0, 0.2, 0.0, 2.6, 0.0, 0.4, 0.2, … ## $ pluviometria_mensal <dbl> 0.3, 1.6, 0.6, 1.0, 1.6, 28.6, 6.0, 0.3, 1.6, 0.4,… ## $ pluviometria_hist <dbl> 77.4, 75.4, 58.6, 64.6, 80.4, 133.3, 89.3, 77.4, 7… ``` https://beatrizmilz.github.io/mananciais/ --- ## Como isso é feito? - Dados da SABESP estão disponíveis em uma API, e é atualizado todos os dias de manhã. - O pacote mananciais apresenta uma função que atualiza a base de dados que está armazenada no pacote, buscando os dados atualizados na API: `mananciais:::atualizar_dados()` -- > Como manter essa base atualizada diariamente? --- class: middle ## GitHub Actions > ### ... nos ajuda a **automatizar tarefas**. ([fonte](https://docs.github.com/pt/actions/learn-github-actions/introduction-to-github-actions)) -- #### É a coisa mais útil/interessante que eu aprendi nos últimos meses 🚀 --- ## Conhecimentos prévios #### Git e GitHub <i class="fab fa-github"></i> #### Pacotes em R 📦 #### Testes unitários <i class="fas fa-mitten"></i> * .footnote[*(caso queira executar os testes, e fazer a avaliação da cobertura dos mesmos)] - [Nos slides finais](#referencias), tem referências de cada um destes assuntos! 📚 --- ## GitHub Actions - Eventos (events) #### Eventos: Um evento é uma atividade que aciona um fluxo de trabalho. <img src="img/explicacao_eventos.png" width="55%" style="display: block; margin: auto;" /> Diagrama feito por Beatriz Milz utilizando o site [draw.io](https://draw.io). --- ## GitHub Actions - Trabalhos (jobs) #### Trabalho: O trabalho usa etapas para controlar a ordem em que as ações são executadas <img src="img/explicacao_trabalho.png" width="60%" style="display: block; margin: auto;" /> Diagrama feito por Beatriz Milz utilizando o site [draw.io](https://draw.io). --- ## GitHub Actions - Fluxos de trabalho (workflows) <!-- - Os arquivos .yaml que armazenam informações os fluxos de trabalho, onde estão descritos os eventos e trabalhos. --> <img src="img/explicacao_workflows.png" width="45%" style="display: block; margin: auto;" /> Diagrama feito por Beatriz Milz utilizando o site [draw.io](https://draw.io) e [Carbon](https://carbon.now.sh/). Código de [r-lib/actions](https://github.com/r-lib/actions/tree/master/examples#quickstart-ci-workflow). ??? Os arquivos .yaml armazenam informações os fluxos de trabalho, onde estão descritos os eventos e trabalhos. --- ## Exemplo com GHA ### Atualização da base de dados - Confira o workflow no [Actions](https://github.com/beatrizmilz/mananciais/actions/workflows/2-update_data.yaml) - Como configurar? Adaptei um dos exemplos disponíveis no [r-lib/actions](https://github.com/r-lib/actions/tree/master/examples#example-workflows) - Evento: - Todos os dias, por volta de 9h15 da manhã + Sempre que houver um novo push no repositório - Trabalho: - [Esse código](https://github.com/beatrizmilz/mananciais/blob/master/data-raw/actions-update-data.R) será executado: verifica se é necessário atualizar a base, e se for: atualiza a base, disponibiliza a mesma no pacote e exporta em `.csv` e `.xlsx`. Atualiza o README e atualiza a página inicial do site do pacote. --- ## Exemplo com GHA ### Checagem do pacote e execução de testes - Confira o workflow no [Actions](https://github.com/beatrizmilz/mananciais/actions/workflows/1-R-CMD-check.yaml) - Como configurar? A função abaixo irá configurar utilizando o código disponível no [r-lib/actions](https://github.com/r-lib/actions/tree/master/examples#example-workflows). ```r usethis::use_github_action("check-release") ``` - Evento: - Sempre que houver um novo push no repositório - Trabalho: - Similar ao `devtools::check()`: vai verificar o pacote e também executar todos os testes. --- ## Exemplo com GHA ### Avaliação da cobertura de testes - Confira o workflow no [Actions](https://github.com/beatrizmilz/mananciais/actions/workflows/test-coverage.yaml) - Como configurar? A função abaixo irá configurar utilizando o código disponível no [r-lib/actions](https://github.com/r-lib/actions/tree/master/examples#example-workflows). ```r usethis::use_github_action("test-coverage") ``` - Evento: - Sempre que houver um novo push no repositório - Trabalho: - Executa `covr::codecov()` e faz a avaliação de cobertura de testes unitários. --- ## Conclusões .pull-left[ - Não é algo simples de aprender, mas facilita nosso trabalho :) - Veja a palestra do [Julio Trecenti](https://twitter.com/jtrecenti), ele mostrará outros exemplos com GHA! - Caso tenha dúvidas, envie neste fórum: https://discourse.curso-r.com/ - Antes de postar a dúvida, recomendo ler: [Dicas para escrever uma boa pergunta](https://discourse.curso-r.com/t/como-escrever-uma-boa-pergunta/542) ] .pull-right[ <img src="https://media.giphy.com/media/LBNsT5SdM897a/giphy.gif" style="display: block; margin: auto;" /> - É normal não acertar de primeira :) Provavelmente vai dar errado da primeira, segunda, terceira, ... , décima vez. Perseverança! ] --- name: referencias ## Referências/recomendações de consulta .pull-left[ - Git e GitHub - [Materiais da R-Ladies SP sobre a Hacktoberfest 2020](https://r-ladies-sao-paulo.github.io/2020-hacktoberfest/) - [Apresentação sobre pacotes em R da Curso-R - slides sobre Git e GitHub](https://curso-r.github.io/main-pacotes/slides/index.html) - Pacotes - [Apresentação sobre pacotes em R da Curso-R](https://curso-r.github.io/main-pacotes/slides/index.html) - [Capítulo 2 - Livro R Packages](https://r-pkgs.org/whole-game.html) - [Livro Zen do R](https://curso-r.github.io/zen-do-r/) ] .pull-right[ - GitHub Actions - [Documentação do GitHub Actions](https://docs.github.com/pt/actions/learn-github-actions/introduction-to-github-actions) - [Exemplos de workflows no repositório r-lib/actions](https://github.com/r-lib/actions/tree/master/examples#example-workflows) - Testes unitários - [Pacote {testthat}](https://testthat.r-lib.org/) - [Pacote {covr}](https://covr.r-lib.org/) ] --- ## Agradecimentos <img src="img/logos_bia.png" style="display: block; margin: auto;" /> <center><a href='https://curso-r.com/'> <img src="img/Hex/curso-r-azul.jpg" width="200px"></a></center> --- class: center ## Muito obrigada! .pull-left[ <img src="https://media.giphy.com/media/M9NbzZjAcxq9jS9LZJ/giphy.gif" width="50%" style="display: block; margin: auto;" /> Slides criados usando os pacotes em R: [**xaringan**](https://github.com/yihui/xaringan)<br> [gadenbuie/xaringanthemer](https://github.com/gadenbuie/xaringanthemer)<br> [eventoseroficial/templates.SER](https://github.com/eventoseroficial/templates.SER) O chakra vem de [remark.js](https://remarkjs.com), [**knitr**](http://yihui.name/knitr), e [R Markdown](https://rmarkdown.rstudio.com). ] -- .pull-right[ <img src="https://beatrizmilz.com/img/bea.png" width="50%" style="display: block; margin: auto;" /> <i class="fas fa-home"></i> [beatrizmilz.com](https://beatrizmilz.com) <i class="fab fa-twitter"></i> [@BeaMilz](https://twitter.com/BeaMilz) <i class="far fa-envelope"></i> [milz.bea@gmail.com](mailto:milz.bea@gmail.com) ] <!-- inicio academic icons --> <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/jpswalsh/academicons@1/css/academicons.min.css"> <!-- final academic icons --> <!-- inicio font awesome --> <script src="https://kit.fontawesome.com/1f72d6921a.js" crossorigin="anonymous"></script> <!-- final font awesome -->