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:
- 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
- investigar uma forma de automatizar a execução do código web scraper
- executar testes de validação dos dados convertidos
- identificar e definir o dicionário dos dados resultante dos dados recolhidos do site
- estruturar repositório dssg-pt / dados-SICOeVM com atenção ao README.md para se manter atualizado
- 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:
- 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.
- Métricas no Twitter – publicar métricas no Twitter, que dão uma visão geral da sua evolução:
- mortalidade geral em períodos homólogos (mês anterior, mês homólogo ano passado, …)
- top 3 das regiões com mais óbitos (+comparação dessas regiões com concelhos com menor nº óbitos)
- 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?
- Produzir análises macro – resumir algumas informações relevantes do dataset actualizado:
- dias em falta
- data MIN/MAX
- 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.