Como tornamos os dados da mortalidade em Portugal acessíveis? Um guia passo a passo contado na primeira pessoa

Como tornamos os dados da mortalidade em Portugal acessíveis? Um guia passo a passo contado na primeira pessoa

Filipe Barroso, Nuno Pires, Paulo Silva – Voluntários DSSG PT

O miniprojeto Sistema de Informação dos Certificados de Óbito (SICO) (Vigilância da Mortalidade (eVM) da DSSG pretende contribuir significativamente para dar acesso livre e simples a dados oficiais da mortalidade em Portugal, especialmente durante a pandemia de COVID-19.  Desta forma, pretende-se ajudar entidades ou indivíduos que procurem uma fonte de dados aberta, estruturada e num formato standard, disponível no repositório da DSSG no Github. Com este objetivo em mente, o Paulo, o Nuno e o Filipe formaram uma equipa com uma missão: extração de dados de mortalidade das páginas HTML do site SICO eVM para ficheiros em formato .csv.

Este artigo pretende explicar as várias fases deste mini-projeto e a experiência da equipa.

Sobre a equipa e funções no mini-projeto

Paulo é um entusiasta dos dados  que assistiu a uma evento organizado pela Data Science Portugal, onde conheceu a DSSG que contactou imediatamente para descobrir como poderia contribuir. O papel do Paulo no projecto esteve maioritariamente ligado à especificação do dicionário de dados, produção de alguns conteúdos e gestão das tarefas da equipa.

Nuno, hoje na Alemanha e fora de Portugal há vários anos, descobriu a DSSG através das redes sociais. Quando viu a proposta para este projecto não hesitou em oferecer a sua contribuição. O papel do Nuno foi estudar o HTML da página do site extrair datas e respectivos dados utilizando python com regular expressions (usando só três bibliotecas Python: pandas, numpy e requests).

Filipe sempre de olho em comunidades e ou em projetos de código aberto, pensando em formas de contribuir com os seus conhecimentos. Organizador da GDG Lisboa e Flutter Portugal, participou em vários projectos e mal descobriu esta iniciativa, disponibilizou a sua ajuda. O papel do Filipe foi executar a opção Github Actions para a actualização diária de um ficheiro. 

Âmbito do trabalho

Depois de algumas conversas com a equipa DSSG, foram identificados os principais blocos de trabalho:

  1. desenvolver código para fazer um web scraper aos dados de mortalidade publicados no site https://evm.min-saude.pt/ e convertê-los para um formato .csv 
  2. investigar uma forma de automatizar a execução do código web scraper
  3. executar testes de validação dos dados convertidos
  4. identificar e definir o dicionário dos dados resultante dos dados recolhidos do site
  5. estruturar repositório dssg-pt / dados-SICOeVM com atenção ao README.md para se manter atualizado
  6. inserir as tarefas identificadas num board no GitHub

Principais questões

O primeiro passo foi esclarecer algumas questões técnicas:

Devem os dados ser  vários ficheiros, em função das variáveis mais relevantes, distribuídos por dd-mm-aaaa e sem-aaaa, ou em apenas 2 ficheiros, agregados por dd-mm-aaaa e sem-aaaa, incluindo todas as variáveis significativas?

Em função das dimensões e quantidade variáveis disponíveis no site, e com o objetivo de simplificar a consulta aos dados, a equipa decidiu  agregar e gerar, com atualização diária, dois novos ficheiros .csv, cumulativos, organizados respectivamente por dd-mm-aaaa e sem-aaaa.

Será viável descarregar e acrescentar apenas os dados mais recentes desde o último descarregamento aos ficheiros .csv, ou refrescar regularmente e por inteiro o dataset nos 2 ficheiros dd-mm-aaaa e sem-aaaa?

Como existe a possibilidade de dados previamente publicados serem corrigidos à posteriori, a equipa optou por executar a 2ª opção. 

Em relação à organização do repositório: Será preferível integrar o projeto no repositório DSSG ou criar um mini-repositório para o projeto?

Tornar o repositório SICO-eVM independente. Existem (sempre) outros projetos satélite a decorrer e integrar tudo na mesma tree, no geral, pode tornar as coisas mais difíceis de gerir e distinguir.

Qual o mecanismo que deveria ser utilizado para actualizar periodicamente os ficheiros .csv? Preferencialmente open source e fácil de integrar no GitHub.

A DSSG já tinha utilizado a opção GitHub Actions para automatizar sw workflows e foi essa a testada para automatizar o web scraper de forma simples e adequada. Essa opção foi a utilizada para descarregamento dos dados.

Que testes básicos deveriam ser executados para ter garantias mínimas que os dados atualizados nos ficheiros eram fiáveis e íntegros?

Python foi a linguagem programação escolhida para este projeto, sendo possível em poucas linhas de código preparar testes simples para validar os valores obtidos pelo web scraper. O termo ‘testes simples’ não deve ser menosprezado, pois dessa forma encontraram-se lacunas nos dados recolhidos, mesmo os menos óbvios, e assim manteve-se o dataset robusto e fidedigno.

É legal publicar os dados num novo formato?

A fonte dos dados é pública. A conversão desses dados para um novo formato não implica nenhum requisito extra, a não ser incluir a referência à licença GNU General Public License v3.0 no GitHub. Desta forma não se causou qualquer distúrbio ou impedimento ao site SICO detentor de todos os dados.

De uma forma muito natural e colaborativa, a distribuição das tarefas estava feita 🙂 Podíamos começar!

Requisitos fora de âmbito

No decorrer do projeto foram identificados aspectos que, apesar de o complementarem, estavam fora do seu âmbito. Ficou estabelecido que a equipa entregaria o projeto com os requisitos-chave desenvolvidos, dentro do prazo estabelecido, registando e avaliando os pontos identificados:

  1. Qualidade dos dados – melhorar a qualidade dos dados, com base nas incorreções detetadas nos nossos testes, nos comentários/queixas dos utilizadores finais. Eventualmente, partilhar esses inputs com a própria DGS.
  1. Métricas no Twitter – publicar métricas no Twitter, que dão uma visão geral da sua evolução:
    1. mortalidade geral em períodos homólogos (mês anterior, mês homólogo ano passado, …)
    2. top 3 das regiões com mais óbitos (+comparação dessas regiões com concelhos com menor nº óbitos)
  2. Criar subscrição para dados actualizados – criar subscrição para notificar sobre disponibilização de nova actualização dos dados descarregados do site eVM web hooks?
  1. Produzir análises macro – resumir algumas informações relevantes do dataset actualizado:
    1. dias em falta
    2. data MIN/MAX
    3. incongruência de totais (ex: variável mortalidade) quando comparados com sub-totais que (teoricamente) os compõem (ex: causa externa 1, causa externa 2,…

Em resumo

A equipa é unânime em admitir que a experiência foi enriquecedora e a repetir. O projeto foi oficialmente entregue no final do mês de julho. Desde aí, todos os dias pelas 3 da manhã os dados da mortalidade em Portugal são recolhidos e exportados num formato acessível, tanto para programadores  como para o público geral.