Projeto Painel COVID-19 — Parte I

Olá pessoal.

Ano passado criei alguns dashboards com os dados da COVID-19 no Brasil, porém ainda eram painéis meio básicos, sem muita técnica. Nesse ano, inspirado pelo livro Storytelling com Dados, resolvi recriar meus dashboards.

Mas desta vez fui um pouco além e estruturei melhor os dados e criei efetivamente um processo de ETL, como vou descrever mais abaixo.

Todos os arquivos do projeto podem ser encontrados neste repositório do meu GitHub:

COVID-19 — ruginski/DS (github.com)

Esta primeira parte é mais técnica e vou mostrar como montei o processo de ETL. Mas não se assuste! A Parte II fica mais leve com o processo de criação dos graficos bonitinhos no PowerBI. 😁

Ainda é um MVP, mas já está bem legal. Vem junto!

O problema e as perguntas a serem respondidas

  • Evolução de casos no Brasil
  • Comparações entre as regiões do país
  • Evolução dos casos no Paraná, aproveitando os dados de sexo e idade que são disponibilizados nesta base.

Modelo CRISP-DM

Não vou entrar muito neste modelo, pois o assunto iria longe, mas a base para a construção de todo o projeto (e também deste artigo) foi o framework CRISP-DM.

Explodindo um pouco essas fases, temos algo mais ou menos assim:

  1. Definição do problema e perguntas a serem respondidas
  2. Planejamento do processo de Data Science
  3. Coleta de dados
  4. Processamento e limpeza dos dados
  5. Armazenamento dos dados
  6. Análise de dados
  7. Construção e validação de algoritmos e modelos
  8. Data Visualization
  9. Disseminação da informação
  10. Deploy

A origem dos dados

  • Coronavírus Brasil (saude.gov.br): Contém os dados consolidados de todo o país, com dados agrupados diariamente por: Região, Estado, Município, data, casos comprovados, recuperados e óbitos acumulados e novos e também população (informação muito importante).
  • Campanha | Coronavírus (coronavirus.pr.gov.br): Contém os dados dos Municípios do Paraná. Esta base tem algumas informações diferentes, como idade e sexo que podem ser usadas para análises mais interessantes.

Além disso, também uso uma planilha com as coordenadas geográficas de todos os Municípios. Um dos próximos passos é utilizar esta informação para inserir os dados em mapas, mas isso é outra história…

Construção do ETL

Importações:

  • O arquivo obtido do site do Ministério da Saúde não passa pela Stage, pois era um processo muito lento e não teria um ganho aparente no processo. Neste caso ele é importado, tratado e enviado diretamente para o DW.

Transformações e Feature engineering:

Inicialmente faço um merge com os dados de “população”, que são obtidos da mesma planilha do Ministério da Saúde.

Na sequência do processo, utilizo 2 value mappers para criar uma nova feature de “faixa etária” e outra, chamada RMC, para identificar os municípios da Região Metropolitada de Curitiba. Os municípios são categorizados de 3 formas: NUC (Núcleo Urbano Central), Vale do Ribeira e, o que não der “match”, ficou como interior.

Exportações:

Finalmente o job!

Em um formato serial, o job começa verificando a conectividade com os bancos de dados Stage e DW e, caso a conexão seja estabelecida com sucesso, as transformações são iniciadas a partir da importação dos arquivos CSV e XLS para a Stage e depois fazendo as transformações já citadas. E… SUCESSO!

Em casa de falha de qualquer um dos steps, o job é abortado. Muitas coisas poderaim ser feitas quando isso acontece, como: enviar uma alerta, salvar em um log ou executar um script, mas por enquanto estou apenas cancelando tudo.

E o container? Tem container?

No meu artigo Building a Docker image, que está lá no Medium, mostrei como criar e modificar a sua própria imagem do Jupyter Notebook utilizando o Docker.

Para armazenar os dados deste projeto estou usando a imagem original e oficial do MySQL no Docker ( mysql — Docker Hub). Lembrando que todos os dados salvos no container são perdidos quando ele é desligado, então a única alteração que precisei fazer é para persistir os dados em disco. Mas para isso basta montar a pasta onde deseja salvar os bancos de dados na pasta padrão de dados do MySQL, através do parâmetro — mout do docker:

--mount type=bind, src=/CAMINHO/PARA/PERSISTIR/OS/DADOS, dst=/var/lib/mysql

What’s next?

Mas, para quem ficou curioso, já vai uma ideia de como está ficando:

Originally published at https://www.linkedin.com.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store