Ciência de Dados: O processo de obter respostas a partir de dados reais [Parte 1]

Compartilhe

Compartilhar no facebook
Compartilhar no google
Compartilhar no twitter
Compartilhar no linkedin

Iniciar no campo da Ciência de Dados não é uma tarefa simples. É necessário ao menos um pouco de domínio em diversas áreas. Além disso, é preciso exercitar a aplicação desse conhecimento teórico em casos reais, e isso pode ser ainda mais difícil.

A maioria dos cursos disponíveis por aí apresenta atividades práticas pouco originais, para dizer o mínimo, e  atacar um problema real logo de cara pode ser um tanto intimidador para um iniciante.

Pensando nisso, decidi compartilhar um artigo onde apresento um exemplo de como esse processo pode ser feito, utilizando dados reais.

A ideia é focar no processo (da formulação da questão inicial até a conclusão, passando pela obtenção, limpeza e tratamento dos dados, assim como a geração de visualizações) e não na implementação em si, por isso não há muitos detalhes sobre as bibliotecas ou métodos utilizados, mas essa é a parte fácil de se encontrar na internet.

O tema escolhido foi o desastre de Brumadinho, um assunto atual e ainda com muitas questões em aberto. Vamos começar?

 

Teriam chuvas acima da média contribuído para o desastre em Brumadinho?

Análise sobre possível impacto das chuvas no rompimento da barragem de Brumadinho

Em 25 de janeiro de 2019, a Barragem I da mina do Córrego do Feijão em Brumadinho (MG) se rompeu, dando origem a um dos maiores desastres humanos e ambientais da história do Brasil. No início de dezembro de 2019, quase um ano depois, 257 pessoas haviam sido encontradas mortas e 13 ainda estavam desaparecidas[1]. Logo após os primeiros desdobramentos, um dos fatores especulados como uma possível causa da tragédia, inclusive por veículos da imprensa[2], foi a quantidade de chuvas na região.

Em seu relatório Mine Tailing Storage: Safety is no Accident[3], de 2017, a Organização das Nações Unidas afirma que chuvas fortes e prolongadas, furacões e abalos sísmicos podem ser gatilhos para rupturas e transbordamentos, mas neste caso,  a ONU considera que houve erro humano – já que o planejamento de risco para construção e manutenção da barragem deve levar em conta as condições climáticas do local.

Sobre o relatório, Alex Bastos, professor de Geologia da Universidade Federal do Espírito Santo e integrante do comitê da ONU sobre barragens de minério, resume: “A conclusão do estudo é que existem dois motivos causadores de rompimentos: erro na análise de risco e negligência na manutenção da barragem.

Ou seja, se existiu uma chuva torrencial que causou transbordamento da barragem, houve aí um erro na análise de risco. Se a região está sujeita a uma chuva assim, a estrutura da barragem deveria ser outra. A análise de risco tem que ser precisa.”[4]

De qualquer forma, antes de analisar a participação do fator precipitação no desastre, precisamos nos perguntar: houveram, de fato, chuvas acima da média que poderiam ter impactado no rompimento da barragem de Brumadinho?

Essa é a pergunta que tentaremos responder neste artigo de duas partes em formato de Jupyter Notebook.

Dados analisados

Para realizar nosso estudo, conjuntos de dados disponíveis publicamente no Sistema Nacional de Informações sobre Recursos Hídricos (SNIRH) da Agência Nacional de Águas (ANA) e no CEMADEN (Centro Nacional de Monitoramento e Alertas de Desastres Naturais), agências do governo brasileiro, foram usados para coletar informações sobre precipitação nas proximidades da barragem e analisar se haveria algum padrão anormal de chuva que poderia ter contribuído para o desastre.

As estações meteorológicas do entorno foram reduzidas às 6 mais próximas da barragem, variando de 8,81 a 2,16 km de distância, de modo que sempre fossem utilizados os dados da estação mais próxima que estivessem disponíveis em cada período (no caso das estações do CEMADEN).

No mapa a seguir é possível ver a disposição geográfica da estação de Melo Franco da ANA (ponto em azul), das estações de Aranha, Alberto Flores, Centro, Córrego do Feijão e Distrito de Casa Branca do CEMADEN (pontos em verde) e da barragem que se rompeu (x em vermelho).

data_science_parte1_01

Por se tratarem de dados de fontes distintas, os formatos e disposições dos arquivos são bem diferentes e precisarão de manipulação específica. Os dados de cada estação da ANA são consolidados em um único arquivo CSV, que possui alguns cabeçalhos e legendas que precisarão ser ignorados.

Já os dados do CEMADEN são divididos por município e mês, ou seja, apesar de um arquivo conter dados de todas as estações do município, são necessários diversos arquivos para se analisar um período de alguns anos.

Abaixo temos a visualização de uma amostra de dois desses arquivos:

data_science_parte1_02
data_science_parte1_03

Limpeza e tratamento dos dados

Nosso objetivo final é consolidar, em um único DataFrame por dataset, o acumulado de chuvas por mês, de forma que consigamos criar visualizações que permitam fazer nossa análise. Os dados da ANA já possuem uma consolidação mensal e estão todos dispostos em um único arquivo, então vamos começar por ele.

Uma breve inspeção nos mostra alguns detalhes que vamos precisar levar em conta na hora de dizer para o Pandas como carregar esse arquivo:

  • O separador é ‘;’ e não ‘,’ como é o padrão para arquivos CSV
  • As 12 primeiras linhas são uma espécie de legenda que precisaremos ignorar
  • Os números estão no padrão brasileiro, com vírgula separando os decimais, o que também não é o padrão do Pandas
  • Por último, já poderíamos indicar qual coluna usar como índice para as linhas, mas como precisaremos fazer alguns tratamentos nela também, por enquanto vamos carregar o arquivo com o índice padrão

Dito isso, podemos carregar nossos dados assim:

data_science_parte1_04

data_science_parte1_05

O que de fato nos interessa está nas colunas ‘Data’ e ‘Total’. Elas que nos dizem o quanto choveu em cada mês na região da estação de Melo Franco. Vamos então fazer um recorte desses dados para ter uma visão mais detalhada. Antes, porém, vamos transformar os dados da coluna ‘Data’ de forma que o Pandas consiga trabalhar com essa informação em formato temporal.

data_science_parte1_06

Em um mundo perfeito, os dados já estariam praticamente na forma que precisamos, mas para uma melhor qualidade nos nossos resultados, temos que nos atentar para dois outros pontos:

  • Do início de 1941 ao fim de 2019 existe um total de 948 meses, porém temos mais de 1700 linhas em nosso DataFrame, ou seja, temos datas repetidas.
  • Na legenda do arquivo, além de ‘NivelConsistencia’ e ‘TipoMedicaoChuvas’, também está a definição de ‘Status’ e nem todos são úteis para nós.

Começaremos pelo tratamento das datas repetidas. Na verdade, se analisarmos com atenção, as datas estão repetidas mas com níveis de consistência diferentes (indicados na coluna ‘NivelConsistencia’). Uma consulta ao site da ANA revela o que isso significa:

“A análise de consistência dos dados pluviométricos deve ter como objetivo a identificação e correção de erros, bem como o preenchimento de falhas das séries pluviométricas.”[7]

Logo, dados consistidos são aqueles que já passaram por essa análise e correção de possíveis falhas. Sendo assim, sempre que possível, daremos prioridade aos dados que já estiverem consistidos (‘NivelConsistencia’ = 2), faremos isso criando uma máscara booleana que quando aplicada vai filtrar as linhas e retornar somente as versões com maior nível de consistência para cada data. Vamos criar também outra máscara para remover os dados posteriores a janeiro de 2019.

Por fim, vamos aproveitar para ordenar os dados de forma crescente pela data e transformar nossa coluna ‘Data’ no índice do nosso DataFrame.

data_science_parte1_07
Resolvemos o primeiro ponto, resta a questão dos status. Primeiramente, vamos ver qual a quantidade de cada status que nós temos para o dado que nos interessa:

data_science_parte1_08
A primeira boa notícia é não termos status 4 (‘Acumulado’) para o ‘Total’, o que faz sentido uma vez que essa já é uma medida cumulativa. Outra é o fato de apenas 42 das 930 entradas não estarem no status que queremos, o que representa menos de 5% da amostra.

Já que queremos gerar uma série de médias, faz sentido abrirmos mão dos dados com grande incerteza (status 2 e 3) para evitar que eles contaminem nossa amostra e consequentemente distorçam nossos resultados.

Entretanto, três entradas estão com o status 0, o que significa uma inconsistência. Vejamos:

data_science_parte1_09

Por algum motivo, a coluna ‘Total’ não foi corretamente aferida mas todas as medições diárias estão presentes e, melhor, todas elas têm status 1, indicando que são medições reais. Provavelmente essas inconsistências seriam corrigidas quandos os dados fossem consistidos (notem que ‘NivelConssistencia’ é 1 para essas linhas), mas felizmente temos dados suficientes para fazermos isso nós mesmos.

data_science_parte1_10

Por fim, agora podemos nos livrar das medidas imprecisas e reduzir o DataFrame a uma Série que contém apenas a coluna que realmente nos interessa, finalizando o tratamento para esse dataset.

data_science_parte1_11

Ótimo! Com um dos datasets tratado, já temos meio caminho percorrido na nossa jornada. Na parte 2 deste artigo, vamos lançar mão de novos tipos de análises e tratamentos necessários para extrair os dados relevantes do outro dataset que temos disponível, o do CEMADEN.

Vamos também construir as visualizações que servirão de suporte para nossas conclusões, permitindo que cheguemos finalmente à resposta da nossa questão inicial.

Te vejo na parte 2!

Links externos

  1. Reportagem “Mais uma vítima de Brumadinho é identificada; 13 continuam desaparecidas”, do jornal Estado de Minas. https://www.em.com.br/app/noticia/gerais/2019/12/02/interna_gerais,1105377/mais-uma-vitima-de-brumadinho-e-identificada-13-continuam-desaparecid.shtml
  2. Reportagem “Atividades de mina da Vale em Brumadinho deviam ter parado em 2016, diz inquérito”, do jornal Estado de Minas. https://www.em.com.br/app/noticia/gerais/2019/09/25/interna_gerais,1087875/atividades-de-mina-da-vale-em-brumadinho-deviam-ter-parado-em-2016.shtml
  3. Relatório Mine Tailings Storage: Safety Is No Accident, da ONU. http://www.grida.no/publications/383
  4. Reportagem “Tragédia com barragem da Vale em Brumadinho pode ser a pior no mundo em 3 décadas”, da BBC Brasil. https://www.bbc.com/portuguese/brasil-47034499
  5. Dados da estação de Melo Franco no SNIRH da ANA. http://www.snirh.gov.br/hidroweb/rest/api/documento/convencionais?tipo=3&documentos=2044008
  6. Link para acesso aos dados das estações do CEMADEN. http://www.cemaden.gov.br/mapainterativo/download/downpluv.php
  7. http://arquivos.ana.gov.br/infohidrologicas/cadastro/DiretrizesEAnalisesRecomendadasParaConsistenciaDeDadosPluviometricos-VersaoJan12.pdf

Quer saber mais?

Ebook Data Science do Grupo Movile: Em parceria com a Tera, criamos um ebook no qual falamos quais conhecimentos e características o profissional da área precisa ter, além de separarmos algumas dicas e conselhos. Confira: https://materiais.movile.com/ebook-data-science

Michel Nagme

Michel Nagme

Engenheiro de Computação pela UNICAMP, Desenvolvedor Backend Sênior na Sympla, entusiasta de Ciência de Dados e Inteligência Artificial e cervejeiro caseiro nas horas vagas.

Deixe um comentário

Categorias

Posts relacionados

Siga-nos

Baixe nosso e-book!

%d blogueiros gostam disto: