Open turicas opened 4 years ago
https://github.com/turicas/covid19-br/pull/28
Baseado na implementação do PR, criei um código para o DF. Como os boletins incluem apenas informações sobre a unidade da federação e não sobre os municípios ou regiões administrativas, o arquivo de saída é mais conciso em número de linhas, mas mantém as colunas padrão.
Há pelo menos 3 estilos diferentes de formação dos boletins. No último, até a data de referência tem o formato alterado.
Uso o trabalho do @brunovilar como base melhorei e voltou a buscar as informações do DF. Estou corrindingo o buraco entre o dia 19/03 a 02/02
Já ia esquecendo os boletins mais novos traz os casos por Região Administrativa do DF. Elas não existem na tabela de codigo do IBGE. Contudo acredito que seria interessante ter essa dado individulizado tambem.
Bem vindo, @bjverde !
O DF, conforme a Constituição de 1988, não pode ser dividido em municípios. Por isso, é considerado como um só, Brasília. Embora o boletim tenha os números individualizados por Região Administrativa, elas não têm código IBGE por esse motivo.
O Brasil.io pode optar entre incluir ou não os dados individualizados por RA, já que eles estão no boletim. Mas, caso opte por incluir, não vai poder usar o código IBGE para isso.
Já que você está mexendo no scraper, é bom saber de uma coisa também. A cada boletim que sai, não vem apenas a informação do número de casos e óbitos do dia, mas também são revisados os números dos dias anteriores. Vide #86.
Entretanto, no caso do boletim do DF, essa informação não está disponível em texto nem em tabela. Ela está no gráfico, que é uma imagem dentro do PDF. À medida em que o tempo vai passando, os pontos no gráfico vão ficando mais apertados, e os números têm que ficar cada vez com uma fonte menor. Então é inviável eles continuarem a disponibilizar os dados desse jeito, a não ser que passem a cortar o começo da curva.
Estou em contato com pessoas da equipe que elabora o boletim e já informei sobre o problema. Quero sugerir um formato de planilha também para que passem a usar, mas ainda não chegamos em um consenso sobre o formato da planilha que devemos sugerir. Vide #89.
Obrigado @augusto-herrmann !
Sim estou mexendo nos scraper. Realmente não reparei nos gráficos, estava olhando apenas as tabelas e texto #86.
Você recomenda que parar o trabalho do scraper e aguarde a conclusão do #89 ??
Sim. Sugiro também que você entre no chat do Brasil.io, canal #covid10-centro-oeste. Lá estamos discutindo como tratar esses números. Tem também a questão da separação entre os casos de residentes no DF e os casos importados/indefinidos.
@bjverde, a SES/DF está divulgando os boletins agora em um novo formato. Ainda é PDF, mas estão mais organizados. Todos os dados necessários estão na primeira página do documento.
Acho que agora já é bastante viável implementar o scraper, se quiser continuar.
@augusto-herrmann desculpe a demora !! Vou atualizar o scraper que já fiz !!
Opa! Também fiz um scraper para o boletim em PDF:
https://github.com/turicas/covid19-br/compare/master...augusto-herrmann:df-spider
O problema é que a biblioteca rows não está lendo a tabela na primeira página com os campos sempre na mesma ordem. A ordem dos campos, visualmente no PDF, é sempre a mesma, mas a ordem lida pela rows é diferente e varia a cada boletim.
Já enfrentou esse tipo de problema, @turicas ?
Talvez a solução seja ler a partir dos microdados mesmo, que já estão em CSV.
Consegui resolver colocando uma expressão regular no parâmetro ends_before
.
Agora o scraper já funciona perfeitamente para o boletim do dia 28/5, mas não para o do dia 3/6. Neste último, a tabela está sendo lida como se tivesse só uma única linha, com os valores todos juntos na mesma célula e separados por saltos de linha.
In [20]: table = rows.import_from_pdf(
...: './Boletim-COVID_DF_93-03_06_2020.pdf',
...: page_numbers=[1],
...: starts_after=re.compile(r'Óbitos'),
...: ends_before=re.compile(r'^Fonte'),
...: force_types={'n': rows.fields.TextField}
...: )
In [21]: table
Out[21]: <rows.Table (from pdf) 5 fields, 1 rows>
Outra coisa a se fazer é ler os microdados de casos de Covid-19, que estão disponíveis em CSV, a partir do Painel de Covid-19 no DF.
Imagino que daria um pouco mais de trabalho fazer esse tipo de análise usando apenas o Python puro e a rows, já que aqui tem a diretiva de não adicionar dependências como Pandas ou Numpy.
Mas seria importante comparar se os números dos microdados estão coerentes com os do boletim.
Outra coisa a se fazer é ler os microdados de casos de Covid-19, que estão disponíveis em CSV, a partir do Painel de Covid-19 no DF.
Imagino que daria um pouco mais de trabalho fazer esse tipo de análise usando apenas o Python puro e a rows, já que aqui tem a diretiva de não adicionar dependências como Pandas ou Numpy.
Mas seria importante comparar se os números dos microdados estão coerentes com os do boletim.
se os dados estão em CSV, vai direto lá , não ?
ou sua ideia é no próprio scraper fazer o download dos dois e efetuar algum tipo de validação ?
eu estou com este dilema para AL, pois já tem uma PR pronta buscando dos microdados, mas como ainda não bate com o boletim em PDF (e não tenho scraper pro PDF), ainda estou buscando os dados manualmente pelo PDF
Sim, pensei em fazer uma validação. Gerar um warning e/ou preencher um campo de observação se os números estiverem diferentes, ou algo assim. Dar prioridade para um em detrimento do outro (discutir com o grupo qual seria mais confiável, se o PDF ou o CSV).
Poderia ser assim também para AL.
http://www.saude.df.gov.br/informativos-do-centro-de-operacoes-de-emergencia-coe/