Esse repositório centraliza links e dados sobre boletins de número de casos das Secretarias Estaduais de Saúde (SES) sobre os casos de covid19 no Brasil (por município por dia), além de outros dados relevantes para a análise, como óbitos registrados em cartório (por estado por dia).
A licença do código é LGPL3 e dos dados convertidos Creative Commons Attribution ShareAlike. Caso utilize os dados, cite a fonte original e quem tratou os dados e caso compartilhe os dados, utilize a mesma licença. Exemplos de como os dados podem ser citados:
- Fonte: Secretarias de Saúde das Unidades Federativas, dados tratados por Álvaro Justen e equipe de voluntários Brasil.IO
- Brasil.IO: boletins epidemiológicos da COVID-19 por município por dia, disponível em: https://brasil.io/dataset/covid19/ (última atualização: XX de XX de XXXX, acesso em XX de XX de XXXX).
Depois de coletados e checados os dados ficam disponíveis de 3 formas no Brasil.IO:
- Interface Web (feita para humanos)
- API (feita para humanos que desenvolvem programas) - veja a documentação da API
- Download do dataset completo
Caso queira acessar os dados antes de serem publicados (ATENÇÃO: pode ser que não tenham sido checados), você pode acessar diretamente as planilhas em que estamos trabalhando.
Se esse programa e/ou os dados resultantes foram úteis a você ou à sua empresa, considere fazer uma doação ao projeto Brasil.IO, que é mantido voluntariamente.
Antes de entrar em contato conosco (estamos sobrecarregados) para tirar dúvidas sobre os dados, CONSULTE NOSSO FAQ.
Para mais detalhes veja a metodologia de coleta de dados.
Caso queira analisar os dados usando SQL, veja o script
analysis.sh
(ele baixa e converte os CSVs para um banco de
dados SQLite e já cria índices e views que facilitam o trabalho) e os
arquivos na pasta sql/
. Por padrão o script reutiliza os arquivos
caso já tenha baixado; para sempre baixar a versão mais atual dos dados,
execute ./analysis.sh --clean
.
Os metadados estão descritos conforme os padrões Data Package e Table Schema do Frictionless Data. Isso significa que os dados podem ser validados automaticamente para detectar, por exemplo, se os valores de um campo estão em conformidade com a tipagem definida, se uma data é válida, se há colunas faltando ou se há linhas duplicadas.
Para fazer a verificação, ative o ambiente virtual Python e em seguida digite:
goodtables data/datapackage.json
O relatório da ferramenta Good Tables irá indicar se houver alguma inconsistência. A validação também pode ser feita online pelo site Goodtables.io.
Você pode contribuir de diversas formas:
- Criando programas (crawlers/scrapers/spiders) para extrair os dados automaticamente (LEIA ISSO ANTES);
- Coletando links para os boletins de seu estado;
- Coletando dados sobre os casos por município por dia;
- Entrando em contato com a secretaria estadual de seu estado, sugerindo as recomendações de liberação dos dados;
- Evitando contato com humanos;
- Lavando as mãos várias vezes ao dia;
- Sendo solidário aos mais vulneráveis;
Para se voluntariar, siga estes passos.
Procure o seu estado nas issues desse repositório e vamos conversar por lá.
Estamos mudando a forma de subida dos dados para facilitar o trabalho dos voluntários e deixar o processo mais robusto e confiável e, com isso, será mais fácil que robôs possam subir também os dados; dessa forma, os scrapers ajudarão bastante no processo. Porém, ao criar um scraper é importante que você siga algumas regras:
- Necessário fazer o scraper usando o
scrapy
; - Não usar
pandas
,BeautifulSoap
,requests
ou outras bibliotecas desnecessárias (a std lib do Python já tem muita biblioteca útil, oscrapy
com XPath já dá conta de boa parte das raspagens erows
já é uma dependência desse repositório); - Deve existir alguma maneira fácil de fazer o scraper coletar os boletins e casos para uma data específica (mas ele deve ser capaz de identificar para quais datas os dados disponíveis e de capturar várias datas também);
- O método de parsing deve devolver (com
yield
) um dicionário com as seguintes chaves:date
: data no formato"YYYY-MM-DD"
state
: sigla do estado, com 2 caracteres maiúsculos (deve ser um atributo da classe do spider e usarself.state
)city
(nome do município ou em branco, caso seja o valor do estado, deve serNone
)place_type
:"city"
para município e"state"
para estadoconfirmed
: inteiro, número de casos confirmados (ouNone
)deaths
: inteiro, número de mortes naquele dia (ouNone
)- ATENÇÃO: o scraper deve devolver sempre um registro para o estado que não seja a soma dos valores por município (esse dado deve ser extraído da linha "total no estado" no boletim) - essa linha virá com a coluna
city
com o valorNone
eplace_type
com"state"
- esse dado apenas deve vir preenchido como sendo a soma dos valores municipais caso o boletim não tenha os dados totais;
- Quando possível, use testes automatizados.
Nesse momento não temos muito tempo disponível para revisão, então por favor, só crie um pull request com código de um novo scraper caso você possa cumprir os requisitos acima.
Necessita de Python 3 (testado em 3.8.2). Para montar seu ambiente:
- Instale o Python 3.8.2
- Crie um virtualenv
- Instale as dependências:
- Script de consolidação e robô:
pip install -r requirements.txt
- Extratores de dados estaduais:
pip install -r requirements-collect.txt
- Script de consolidação e robô:
- Rode o script de coleta:
./collect.sh
- Rode o script de consolidação:
./run.sh
Verifique o resultado em data/output
.
Se você preferir utilizar o Docker para executar, basta usar os comandos a seguir :
make docker-build # para construir a imagem
make docker-collect # para coletar os dados
make docker-run # para consolidar os dados
Quer saber quais projetos e notícias estão usando nossos dados? Veja o clipping.
Crie um arquivo .env
com os valores corretos para as seguintes variáveis de
ambiente:
BRASILIO_SSH_USER
BRASILIO_SSH_SERVER
BRASILIO_DATA_PATH
BRASILIO_UPDATE_COMMAND
Execute o script:
./deploy.sh
Ele irá coletar os dados das planilhas (que estão linkadas em
data/boletim_url.csv
e data/caso_url.csv
), adicionar os dados ao
repositório, compactá-los, enviá-los ao servidor e executar o comando de
atualização de dataset.
Nota: o script que baixa e converte os dados automaticamente deve ser executado separadamente, com o comando
./collect.sh
.