turicas / brasil.io

Backend do Brasil.IO (para código dos scripts de coleta de dados, veja o link na página de cada dataset)
https://brasil.io/
GNU General Public License v3.0
929 stars 145 forks source link

Coletar dados automaticamente #86

Open turicas opened 6 years ago

turicas commented 6 years ago

Pré-requisito: #85.

A etapa final para que os dados de todos os datasets sejam coletados automaticamente será criar um ambiente no backend que agenda e executa tarefas.

Tarefas (ainda necessita de melhor detalhamento):

turicas commented 6 years ago

Primeiro passo em direção a isso foi a criação do data-worker, que monta uma imagem Docker com o script de captura de dados e então roda essa imagem com os parâmetros corretos para gerar os dados. Ainda não contempla o data-package. Vou testá-lo nos datasets que já libertei para identificar limitações e possíveis melhorias.

JoaoCarabetta commented 6 years ago

Uma alternativa para padronizar os dados e montar o arquivo de datapackage pode ser esse projeto https://github.com/frictionlessdata/datapackage-pipelines

Ele atuaria depois que a captura foi feita e os dados foram raspados. Daí, procuraria o arquivo do output dos dados e um .yaml com os metadados dos dados para padronizar e gerar o datapackge.

As vantagens de usar ele são:

Se parecer uma boa ideia, posso implementar alguns exemplos ainda essa semana para testar a eficácia.

turicas commented 6 years ago

@JoaoCarabetta acho uma ótima ideia, só queria comentar algumas coisas: 1- A conversão para UTF-8 em geral já é feita nos próprios scripts de captura, que abrem os dados nas mais diversas codificações e exportam sempre em UTF-8; 2- O lance da concatenação também em geral é feito nos scripts, não sei até que ponto a gente conseguiria generalizar os scripts para deixar essa parte com o pipelines - talvez seja mais otimizado deixar nos scripts mesmo, pelo menos por enquanto; 3- A questão do cálculo dos campos também em geral fazemos nos scripts, dados que alguns desses campos precisam de cálculos mais complexos (como agrupamentos de outra tabela, por exemplo); nesse caso o que eu costumo fazer é gerar um banco de dados SQLite e executar consultas SQL lá (que provavelmente é bem mais poderoso do que o pipelines poderia fazer); 4- A inferência de tipos por enquanto está sendo feita por um script que desenvolvi (que por baixo dos panos usa a rows). Acredito que um script personalizado para isso ainda será necessário, dado que existem diversos metadados além dos tipos que precisamos no Brasil.IO (exemplo: esse script detecta automaticamente uma tabela que é um documento (CPF/CNPJ) e já gera o link para outro dataset); 5- Não sei como o cron deles funcionaria para rodar os scripts automaticamente, temos que pesquisar mais sobre.

JoaoCarabetta commented 6 years ago

@turicas 1,2,3,4 - Não precisamos usar todas as funcionalidades do pacote, podemos usar só a geração do datapackage.json. Mas fica aí disponível para alguém que queria. 5 - Comentei sobre o cron não exatamente para usar o cron deles, mas para usar o próprio documento para alimentar o sistema do brasil.io. Que também poderia tirar vantagem dos tipos descritos e dos metadados inseridos. Isso economizaria o número de arquivos de configuração necessários.