• Stars
    star
    530
  • Rank 83,660 (Top 2 %)
  • Language
    Python
  • License
    GNU Lesser Genera...
  • Created almost 5 years ago
  • Updated over 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Dados diários mais recentes do coronavírus por município brasileiro

🇺🇸 English?

covid19-br

pytest@docker goodtables

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).

Tabela de Conteúdos

  1. Licença e Citação
  2. Sobre os dados
  3. Guia de contribuição geral
  4. Guia de instalação / setup do projeto (ambiente de desenvolvimento)
  5. Guia de como executar os scrapers existentes
  6. Guia de como criar novos scrapers
  7. Guia de como atualizar os dados no Brasil.io (ambiente de produção)

Licença e Citação

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 pode ser conferida no site).

Dados

Depois de coletados e checados os dados ficam disponíveis de 3 formas no Brasil.IO:

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.

FAQ SOBRE OS DADOS

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.

Clipping

Quer saber quais projetos e notícias estão usando nossos dados? Veja o clipping.

Analisando os 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.

Leia também nossa análise dos microdados de vacinação disponíveis no OpenDataSUS.

Validando os dados

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.

Mais informações

Você pode ter interesse em ver também:

Contribuindo

Você pode contribuir de diversas formas:

  • Criando programas (crawlers/scrapers/spiders) para extrair os dados automaticamente (LEIA ESSE GUIA 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á.

Instalando

Este projeto utiliza Python 3 (testado em 3.8.2) e Scrapy.

Você pode montar seu ambiente de desenvolvimento utilizando o setup padrão ou o setup com docker.

Setup Padrão

  1. Instale o Python 3.8.2
  2. Crie um virtualenv (você pode usar venv para isso).
  3. Instale as dependências: pip install -r requirements-development.txt

Setup com Docker

Se você preferir utilizar o Docker para executar, basta usar os comandos a seguir :

make docker-build       # para construir a imagem
make docker-run-spiders # para coletar os dados

Executando os scrapers

Uma vez que seu setup estiver terminado, você pode rodar todos os scrapers usando um dos seguintes comandos no seu terminal (a depender do tipo de setup que decidiu fazer):

python covid19br/run_spider.py  # caso tenha feito o setup padrão
make docker-run-spiders         # caso esteja usando o setup com docker

Os comandos acima irão rodar os scrapers de todos os estados que temos implementado buscando os dados sobre a data de hoje e salvarão o consolidado em .csv na pasta data deste diretório (por padrão são salvos em arquivos com o nome no padrão "data/{estado}/covid19-{estado}-{data}{extra_info}.csv").

Mas essa não é a única forma de usar esse comando, você pode optar por não salvar os consolidados em um .csv (apenas exibi-los na tela) ou então rodar apenas os scrapers de alguns estados específicos ou para outros dias específicos que não são necessariamente a data de hoje.

Para adaptar melhor o comando ao seu caso de uso você pode rodá-lo no terminal com as seguintes opções:

OBS: Se você estiver usando docker, basta acrescentar docker container run --rm --name covid19-br -v $(PWD)/data:/app/data covid19-br antes de qualquer um dos comandos a seguir.

# Exemplo de como raspar os dados de todos os estados em um intervalo de datas
python covid19br/run_spider.py --start-date 24/02/2021 --end-date 30/03/2021

# Caso você queira executar para datas específicas (coloque-as em lista separando-as por vírgulas):
python covid19br/run_spider.py --dates-list  15/01/2022,17/01/2022

# Para executar apenas spiders de estados específicos (coloque-os em lista e separados por vírgulas):
python covid19br/run_spider.py --states BA,PR

# Para ver quais são os estados com scrapers implementados:
python covid19br/run_spider.py --available-spiders

# Caso você não queira salvar os csv's, apenas mostrar na tela os resultados:
python covid19br/run_spider.py --print-results-only

# Você pode consultar essas e outras opções disponíveis usando:
python covid19br/run_spider.py -h

Criando novos scrapers

Estamos mudando a forma como subimos os 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 (confira aqui as docs);
  • Não usar pandas, BeautifulSoap, requests ou outras bibliotecas desnecessárias (a std lib do Python já tem muita biblioteca útil, o scrapy com XPath já dá conta de boa parte das raspagens e rows já é uma dependência desse repositório);

Para padronizar a forma que os scrapers recebem parâmetros e retornam os dados, criamos um Spider Base, que nada mais é que um spider básico do scrapy com lógica a mais para:

  • Identificar para quais datas o spider deve procurar dados (essa informação é recebida como parâmetro e é guardada na classe no atributo self.requested_dates, que é um generator de valores do tipo datetime.date com as datas que precisamos raspar os dados, e deve ser usada pelo seu spider para buscar os dados como solicitado).
  • Guardar os dados raspados de uma forma que sejam retornados para o sistema que chamou o scraper de forma padronizada.

Para padronizar os dados que são retornados pelos spiders, criamos a classe FullReport que representa um "relatório completo" e armazena todos os dados coletados para um determinado estado em uma data específica. Esse relatório completo é composto por vários boletins, (um para cada cidade do estado + um para casos importados/indefinidos) com o número de casos confirmados e número de mortes daquele dia.

O seu script não precisa se preocupar com a criação do objeto FullReport que será retornado, isso é responsabilidade do Spider Base, o que seu spider deve criar são os boletins com os dados que ele coletar e salvar esses boletins no relatório através do método add_new_bulletin_to_report disponibilizado pelo Spider Base.

Em resumo, ao criar um spider de um novo estado tenha em mente:

  • É desejável que você crie seu spider extendendo a classe Spider Base (você pode conferir alguns exemplos de como outros spiders são implementados na pasta /covid19br/spiders).
  • Um spider completo é capaz de coletar os dados:
    • De número de casos confirmados e número de mortes por cidade do estado;
    • De número de casos confirmados e número de mortes importados/indefinidos;
    • De números de casos confirmados e números de mortes totais do estado (esse valor normalmente é computado automaticamente conforme os casos acimas são obtidos, mas em casos onde a scretaria disponibiliza o valor total, nós optamos por usá-lo como "fonte da verdade").
    • Para diferentes datas (desde o início da pandemia até hoje).

    OBS: Como não há uma padronização na forma em que as secretarias disponibilizam os dados, nem sempre é possível obter todas essas informações como desejamos. Obter parte dessas informações de forma automatizada já pode ser um bom começo e uma contribuição válida! :)

  • Os dados coletados devem ser salvos em boletins e adicionados no retorno do spider através do método add_new_bulletin_to_report.

Ao finalizar a implementação do seu spider, adicione-o na lista de spiders do script run_spider.py e execute-o (mais informações sobre como fazer isso na seção anterior). Se tudo correu como previsto, é esperado que seja criado um .csv na pasta /data/... com os dados raspados pelo seu spider :)

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.

Atualização dos Dados no Brasil.IO

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
BULLETIN_SPREADSHEET_ID

Execute o script:

./deploy.sh full

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 python covid19br/run_spider.py.

More Repositories

1

brasil.io

Backend do Brasil.IO (para código dos scripts de coleta de dados, veja o link na página de cada dataset)
Python
915
star
2

rows

A common, beautiful interface to tabular data, no matter the format
Python
865
star
3

socios-brasil

Captura os dados de sócios das empresas brasileiras na Receita Federal e exporta para um formato legível por humanos
Python
560
star
4

salarios-magistrados

Baixa as planilhas de salários de magistrados, extrai os contracheques, limpa e exporta pra CSV
Python
250
star
5

eleicoes-brasil

Scripts para capturar dados do Repositório de Dados Eleitorais do TSE, limpá-los, normalizá-los e agrupá-los
Python
147
star
6

sbc

SBC - Use SSH Like a Boss!
Shell
81
star
7

Ethernet_ENC28J60

[NOT MAINTAINED, NOT COMPLETED] Implementation of an Arduino-compatible socket layer library that uses Microchip ENC28J60 Ethernet controller.
C
76
star
8

crau

Easy-to-use Web archiver
Python
56
star
9

transparencia-gov-br

Scraper do Portal da Transparência do Governo Federal, em Python 3
Python
51
star
10

nubank-to-csv

Script para converter a fatura do NuBank (em PDF) para um CSV lindão
Python
50
star
11

genero-nomes

Classifica nomes por gênero de acordo com API do IBGE
Python
49
star
12

braindump

braindump: low-tech dump of my neurons
45
star
13

capturando-dados-sem-dor-de-cabeca

Material do tutorial "Capturando dados sem dor de cabeça"
Python
42
star
14

mongodict

MongoDB-backed Python dict-like interface
Python
39
star
15

outputty

NOT MAINTAINED ANYMORE. SEE "rows"
Python
37
star
16

cursos-prouni

Baixa dados relativos aos cursos que possuem bolsas integrais e parciais no PROUNI
Python
33
star
17

templater

Extract, parse and populate templates from strings
Python
27
star
18

gastos-deputados

Script que baixa, extrai e limpa dados de gastos da cota parlamentar
Python
26
star
19

censo-ibge

Scripts de captura para dados do Censo IBGE
Python
22
star
20

mandados-de-prisao

NÃO FUNCIONA MAIS POR CONTA DA NOVA VERSÃO DO BNMP. Scripts que coletam mandados da Base Nacional de Mandados de Prisão
Python
20
star
21

arduinoMakefile

[OUTDATED/NOT MAINTAINED] Simple Makefile (that works) for compile and upload Arduino sketches
Java
20
star
22

processos-stf

Script que baixa todos os processos do STF baseado na listagem disponível nas atas de distribuição
Python
15
star
23

droiduino

Control your house via Internet using your Android phone with Python and Arduino!
Python
14
star
24

pastebin-cli

Command-line interface to paste code/text to pastebin.com
Python
14
star
25

brasil

Python library to access Brazilian data through Brasil.IO API
Python
12
star
26

plotter

Plot data from CSV using Python, matplotlib and outputty
Python
11
star
27

DS1307

Arduino library for reading and setting date and time for the DS1307 Real-Time Clock IC
Java
11
star
28

luminaria-rgb

Luminária RGB controlada por Arduino e Android, via Ethernet
Java
10
star
29

pybitcask

A pure-Python implementation of Basho's bitcask key-value store.
Python
10
star
30

no-silence

Automatically detect and delete silince parts in videos
Python
10
star
31

pycopy

API wrapper to Copy.com compatible with Dropbox API
Python
9
star
32

dados-parana

Scrapers que capturam dados sobre o estado do Paraná e seus municípios
Python
9
star
33

autuacoes-ambientais-ibama

Extrator de PDFs de Autuações Ambientais do IBAMA
Python
8
star
34

shapefiles-brasil

Coleta shapefiles do IBGE, converte para GeoJSON e gera versões simplificadas
Python
8
star
35

festival-de-curitiba

Scraper que baixa os eventos que acontecerão no Festival de Curitiba (2019)
Python
7
star
36

slides

Slides of my talks
HTML
7
star
37

vortaroj

A Python dict that speaks many languages
Python
7
star
38

learning-sockets

Python
7
star
39

data-worker

Conjunto de scripts que roda scripts de coleta, extração e limpeza de dados do Brasil.IO
Shell
7
star
40

dotfiles

Some of my dotfiles
Shell
6
star
41

tweetlamp

Activate/deactivate any AC device by tweets using Arduino
Python
6
star
42

easygpg

Easy-to-use command-line interface to GnuPG
Python
5
star
43

turicas.github.io

Personal web page
HTML
5
star
44

tabula-docker

Script to build docker images for Tabula releases using Eclipse Temurin
Shell
5
star
45

simulado-detran-rj

Crawler das questões do simulado do DETRAN-RJ
Python
4
star
46

tomada-bluetooth

Tomada controlada por Bluetooth pelo Android
Java
4
star
47

curso-python-verao-2012

Resposta de alguns exercícios do curso de Python (EMAp/FGV, verão 2012)
Python
4
star
48

lista-anistiados

Script que extrai a lista de anistiados em PDF (2015 e 2018) e gera CSV
Python
4
star
49

async_process_executor

Python class to asynchronously execute tasks in processes
Python
3
star
50

websitetopdf

Simple app to demonstrate the usage of simplefractal/heroku-buildpack-wkhtmltopdf
Python
3
star
51

ddwrtdb

Simple CLI to search on DD-WRT router database and retrieve router information
Python
3
star
52

curriculum-vitae

My curriculum, in LaTex :)
TeX
3
star
53

fabric-recipes

Some useful fabric recipes
Python
3
star
54

SNES

Arduino library to get state of the buttons of a SNES controller.
C++
3
star
55

countdown-traffic-light

Python+Arduino-based countdown for 5min lightning talks that acts as a traffic-light
Python
3
star
56

nlplaying

My playings in Natural Language Processing, in Python.
Python
3
star
57

pytches

Play old-style musics using Python and beep (Unix)
Python
2
star
58

agensgraph-docker

Agensgraph Docker image based on official PostgreSQL image
Shell
2
star
59

cursodearduino.com.br

Site do Curso de Arduino
HTML
2
star
60

row

Reference implementation of a new tabular data format created by dataprotocols
Python
2
star
61

strobo

Python
2
star
62

carmomaq

Utilities to collect data and control Carmomaq coffee roasters
Python
2
star
63

old-pypelinin-text

Pipelines to process text in Python
Python
1
star
64

google-developer-day-2011

Minha implementação para resolver a provinha para entrar no Google Developer Day 2011 Brasil/São Paulo - e eu passei! \o/
Python
1
star
65

git_inspect

Tools to inspect git repositories
Python
1
star
66

site-teste

Python
1
star
67

Genuino

Jogo da memória para Arduino
Java
1
star
68

slides-ssh-avancado-e-sbc

Slides of my talks
JavaScript
1
star
69

ptwp_tagger

Tagging Portuguese Wikipedia with PyPLN and Palavras
Python
1
star
70

jsock

Key-value-based, HMAC-signed, non-blocking sockets for Python
Python
1
star
71

site-render

Python
1
star