Skip to main content

Scraper de boletins de casos de COVID-19 no Espírito Santo.

Project description



COVID19-ES-Py

API em Python para consulta de casos de COVID-19 no estado do Espírito Santo.

PyPI pyversions PyPI GitHub code size in bytes Travis (.org) Read the Docs Codecov Codacy grade

PyPI - Downloads License: GPL v3

Recursos | Instalação | Como usar | Exemplos | Documentação | Considerações finais

Recursos

  • Extrai dados sobre:
    • Casos confirmados no estado
    • Critérios de avaliação de casos
    • Status e evolução de casos
    • Faixa etária, sexo, etnia e grau de escolaridade de pacientes
    • Sintomas e comorbidades de pacientes
    • Viagens de pacientes
  • Filtro de casos por data
  • Estruturação e busca de casos por município

  • Descontinuado/deprecated a partir da versão 2.0.0:

    • Pesquisa de casos por município
    • Pesquisa de boletim por data
    • Filtro de municípios com casos confirmados
    • Extração de URLs de boletins emitidos pela Secretaria de Estado da Saúde (SESA)
    • Extração de título, datas, corpo de notícia, números de casos e óbitos, etc, dos boletins

    Uma vez que a partir de 14/04 a SESA não emitirá mais boletins e em vez disso divulgará dados ao longo do dia pelo painel PowerBI, os recursos acima implementados através das classes ScraperBoletim e Boletim estão descontinuados. O pacote por padrão irá utilizar dados dos relatórios gerados pelo PowerBI, através das classes LeitorRelatório e Relatório (ver seção Como usar). Não use recursos descontinuados a menos que tenha um motivo específico.

Instalação

Atualmente, o COVID19-ES-Py possui suporte para Python 3.6+. Uma mesma release é feita ao PyPI e ao GitHub ao mesmo tempo, portanto você pode usar a fonte que achar mais conveniente.

Pelo repositório PyPI

Utilize seu gerenciador de pacotes preferido para instalar o pacote. Com pip:

pip install COVID19-ES-Py

Pelo código fonte

Através do pip

É possível usar o pip, dentre outros gerenciadores de pacotes, para instalar o pacote através do repositório. Usando a release mais recente:

pip install https://github.com/AtilioA/COVID19-ES-Py/releases/latest

Buildando com setup.py

  1. Baixe a última release e extraia a pasta;
  2. Entre no diretório raiz do pacote pelo terminal e rode o comando python setup.py install

Como usar

A API possui duas classes principais: LeitorRelatorio e Relatorio. A primeira é capaz de filtrar relatórios por data, etc, usando objetos Relatorio para fazer a interface para o programador. A segunda pode ser utilizada para extrair informações de um relatório específico. Confira os exemplos a seguir:

Exemplos

Inicializando o leitor e obtendo dados do último relatório:

import COVID19_ES_Py

# Inicializando o leitor
leitor = COVID19_ES_Py.LeitorRelatorio()

# Carregando objeto Relatorio com dados do último arquivo csv emitido
relatorio = leitor.carrega_ultimo_relatorio()  # Relatório do dia 17/04/2020
relatorio.casos
>>> {'AFONSO CLAUDIO': {'casosConfirmados': 2, 'obitos': 0},
...
    'VITORIA': {'casosConfirmados': 209, 'obitos': 8}}

Total de casos do relatório:

relatorio.totalGeral
>>> {'casosConfirmados': 952, 'obitos': 28}

Pesquisando casos por município:

Retorna objeto Municipio com casos do município no relatório:

relatorio.busca_casos_municipio("Vitória")
>>> "Município VITORIA:
209 casos confirmados.
8 óbitos."

# A busca ignora espaços extras e capitalização
relatorio.busca_casos_municipio("  santa teresa ")
>>> "Município SANTA TERESA:
4 casos confirmados.
0 óbitos."

# Também ignora caracteres especiais
relatorio.busca_casos_municipio("AFONSO CLAUDIO")
>>> "Município AFONSO CLAUDIO:
2 casos confirmados.
0 óbitos."

relatorio.busca_casos_municipio("arapiraca")
>>> exceptions.RelatorioError: O município "arapiraca" não foi encontrado no relatório. Pode ter ocorrido um erro de digitação ou o município não registrou casos de COVID-19.

Atributos da classe Município:

  • nome (str): O nome do município.

  • casos (list): (Caso): Uma lista de objetos do tipo Caso.

  • casosConfirmados (int): O número de casos confirmados no município.

  • obitos (int): O número de óbitos confirmados em decorrência de COVID-19 no município.

Pesquisando relatorio por data:

Retorna objetos Relatorio:

Filtrando até um dado dia:

relatorio29_03 = leitor.filtra_casos_ate_dia("16/04/2020")
>>> "Relatório do arquivo https://bi.static.es.gov.br/covid19/MICRODADOS.csv:
Total geral: {'casosConfirmados': 935, 'obitos': 28}
35 municípios infectados."

Filtrando apenas um dado dia:

relatorio29_03 = leitor.filtra_casos_no_dia("16/04/2020")
>>> "Relatório do arquivo https://bi.static.es.gov.br/covid19/MICRODADOS.csv:
Total geral: {'casosConfirmados': 11, 'obitos': 0}
5 municípios infectados."

A data de entrada pode ser formatada de várias formas.

Exemplos descontinuados

Exemplos de recursos descontinuados e que serão removidos na versão 3.0.0.:

Inicializando o scraper e obtendo dados do último boletim:

import COVID19_ES_Py

# Inicializando o scraper
scraper = COVID19_ES_Py.ScraperBoletim()

# Carregando objeto Boletim com último boletim emitido
boletim = scraper.carrega_ultimo_boletim()  # Boletim do dia 27/03/2020
boletim.casos
>>> {'Afonso Cláudio': {'casosConfirmados': '0', 'casosDescartados': '1', 'casosSuspeitos': '0', 'totalCasos': '1'},
...
'Vitória': {'casosConfirmados': '18', 'casosDescartados': '96', 'casosSuspeitos': '142', 'totalCasos': '256'}}

Total de casos do boletim:

boletim.totalGeral
>>> {'casosConfirmados': '53 + 1*', 'casosDescartados': '411', 'casosSuspeitos': '1.105', 'totalCasos': '1.570'}

Pesquisando casos por município:

Retorna dicionário de casos do município no boletim:

boletim.pesquisa_casos_municipio("Vitória")
>>> {'casosConfirmados': '18', 'casosDescartados': '96', 'casosSuspeitos': '142', 'totalCasos': '256'}

# A busca ignora espaços extras e capitalização
boletim.pesquisa_casos_municipio("  santa teresa ")
>>> {'casosConfirmados': '1', 'casosDescartados': '1', 'casosSuspeitos': '0', 'totalCasos': '2'}

# Também ignora caracteres especiais
boletim.pesquisa_casos_municipio("AFONSO CLAUDIO")
>>> {'casosConfirmados': '0', 'casosDescartados': '1', 'casosSuspeitos': '0', 'totalCasos': '1'}

boletim.pesquisa_casos_municipio("arapiraca")
>>> exceptions.BoletimError: O município "arapiraca" não foi encontrado no boletim. Pode ter ocorrido um erro de digitação ou o município não registrou casos de COVID-19.

Pesquisando boletim por data:

Retorna o boletim da data de entrada, se houver:

boletim29_03 = scraper.pesquisa_boletim_data("29/03/2020")
boletim29_03.pega_dataPublicacao_formatada()
>>> "29/03/2020 19h25"

A data de entrada pode ser formatada de várias formas.

Filtrando municípios com casos confirmados:

Retorna dicionário de dicionários com municípios com casos confirmados:

boletim05_04 = scraper.pesquisa_boletim_data("05/04/2020")

municipiosFiltrados = boletim05_04.filtra_municipios_com_casos_confirmados()
municipiosFiltrados
>>> {'Afonso Cláudio': {"casosConfirmados": '1', "casosDescartados": "3", "casosSuspeitos": "3", "totalCasos": "7", "obitos": "0"},
...
'Vitória': {'casosConfirmados': '62', 'casosDescartados': '252', 'casosSuspeitos': '58', 'totalCasos': '372', 'obitos': '2'}}

boletim05_04.nMunicipiosInfectados
>>> 18
len(municipiosFiltrados)
>>> 18

Documentação

Você pode aprender mais sobre a API lendo a documentação oficial.

Considerações finais

Os dados são disponibilizados pelo Governo do Estado do Espírito Santo com a Superintendência Estadual de Comunicação Social do Espírito Santo (SECOM) e podem ser encontrados aqui.

Devido à natureza dos dados, há uma chance considerável de o scraping parar de funcionar a qualquer momento. Para minimizar essa possibilidade, muitos testes automatizados foram escritos; em caso de discrepância, tentarei atualizar o pacote o mais rápido possível.

Encontrou algum erro? Tem alguma sugestão para melhorar o COVID19-ES-Py? Crie uma issue! Contribuições são muito bem-vindas.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

COVID19-ES-Py-2.0.0.tar.gz (14.7 kB view details)

Uploaded Source

Built Distribution

COVID19_ES_Py-2.0.0-py3-none-any.whl (28.6 kB view details)

Uploaded Python 3

File details

Details for the file COVID19-ES-Py-2.0.0.tar.gz.

File metadata

  • Download URL: COVID19-ES-Py-2.0.0.tar.gz
  • Upload date:
  • Size: 14.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.8.0 tqdm/4.41.1 CPython/3.7.2

File hashes

Hashes for COVID19-ES-Py-2.0.0.tar.gz
Algorithm Hash digest
SHA256 b4cdefe447cc221aa4e7271b008d73f32d0fe6e3fe8b1f46a9957ba081618414
MD5 d5ff87c6ea33136ac25d2112379e59ea
BLAKE2b-256 7f91ecbfc3a3c6d1f75c2f184ea4f5399ff4c8289f25e44719e3e8bb0f4db222

See more details on using hashes here.

File details

Details for the file COVID19_ES_Py-2.0.0-py3-none-any.whl.

File metadata

  • Download URL: COVID19_ES_Py-2.0.0-py3-none-any.whl
  • Upload date:
  • Size: 28.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.8.0 tqdm/4.41.1 CPython/3.7.2

File hashes

Hashes for COVID19_ES_Py-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 04e559baf8077809a58990ee889c6fa2f9224dac2e41a7466a3b9d9739bef315
MD5 790ba14a8949a3e8d6b88ddaf695a4dc
BLAKE2b-256 4aad859a4c6f17fa3b8bce7e5487c799ed4235ee33035f0309e6bab3891b1ce4

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page