Esse projeto tem como objetivo utilizar a Elastic Stack
para a visualização
dos dados dos saques realizados no mês de Outubro/19 do Bolsa Família.
Os dados para serem processados foram obtidos no Portal Brasileiro de Dados Abertos.
Para acessar os dado diretamente da fonte, clique aqui.
O arquivo obtido inicialmente é um .zip
chamado 201910_BolsaFamilia_Saques.zip
com o tamanho de 192M
.
Após realizar a descompactação, você terá o arquivo 201910_BolsaFamilia_Saques.csv
com 12.985.125 linhas com o tamanho de 1,4G
.
Cada linha desse arquivo .csv
possui as seguintes informações:
Coluna | Descrição |
---|---|
Ano/Mês Referência | Ano/Mês da folha de pagamento |
Ano/Mês Referência | Ano/Mês a que se refere a parcela |
UF | Sigla da Unidade Federativa do beneficiário do Bolsa Família |
Código SIAFI Município | Código, no SIAFI (Sistema Integrado de Administração Financeira), do município do beneficiário do Bolsa Família |
Nome Município | Nome do município do beneficiário do Bolsa Família |
NIS Beneficiário* | NIS do beneficiário do Bolsa Família |
Nome Beneficiário | Nome do beneficiário do Bolsa Família |
Data Saque | Data em que foi realizado o saque |
Valor Saque | Valor da parcela do benefício |
*: Criado pela Caixa Econômica Federal o NIS significa Número de Identificação Social e é ganho quando o cidadão brasileiro ingressa em algum Programa Social, seja o Bolsa Família, FGTS, emitiu sua Carteira de Trabalho, tornou-se contribuinte do INSS ou iniciou sua vida como trabalhador de iniciativa privada ou pública.
Para acessar o dicionário de dados diretamente, clique aqui.
Como o arquivo de .csv
que é obtido ao extrair o zip
é muito grande (1.4G) e o GitHub não permite uploads de arquivos
maiores que 100MB, foi realizado a separação desse .csv
em 15 arquivos .csv
.
Esse tipo de separação também ajudará na hora de consumir os dados, pois não será necessário abrir um único arquivo grande, muitas vezes onerando a máquina.
O comando abaixo gera 15 arquivos .csv
com base no 201910_BolsaFamilia_Saques.csv
, cada um com 900.000 linhas e com o prefixo saque_
.
split -d -l 900000 --additional-suffix=.csv 201910_BolsaFamilia_Saques.csv saque_
Ao final da execução do comando acima, é esperado que o diretório tenha o seguinte conteúdo:
-rw-rw-r-- 1 vitor vitor 93M fev 24 23:03 saque_00.csv
-rw-rw-r-- 1 vitor vitor 92M fev 24 23:03 saque_01.csv
-rw-rw-r-- 1 vitor vitor 94M fev 24 23:03 saque_02.csv
-rw-rw-r-- 1 vitor vitor 94M fev 24 23:03 saque_03.csv
-rw-rw-r-- 1 vitor vitor 94M fev 24 23:03 saque_04.csv
-rw-rw-r-- 1 vitor vitor 95M fev 24 23:03 saque_05.csv
-rw-rw-r-- 1 vitor vitor 94M fev 24 23:03 saque_06.csv
-rw-rw-r-- 1 vitor vitor 93M fev 24 23:03 saque_07.csv
-rw-rw-r-- 1 vitor vitor 94M fev 24 23:03 saque_08.csv
-rw-rw-r-- 1 vitor vitor 95M fev 24 23:03 saque_09.csv
-rw-rw-r-- 1 vitor vitor 94M fev 24 23:03 saque_10.csv
-rw-rw-r-- 1 vitor vitor 95M fev 24 23:03 saque_11.csv
-rw-rw-r-- 1 vitor vitor 93M fev 24 23:03 saque_12.csv
-rw-rw-r-- 1 vitor vitor 93M fev 24 23:03 saque_13.csv
-rw-rw-r-- 1 vitor vitor 40M fev 24 23:03 saque_14.csv
Esses arquivos podem ser encontrados na pasta dataset
. O arquivo bruto inicial deve ser baixo diretamente
pelo Portal, caso tenha interesse em obtê-lo execute o comando abaixo:
wget http://www.portaltransparencia.gov.br/download-de-dados/bolsa-familia-saques/201910
Para converter os arquivos de csv para json é necessário executar o script
convert_csv_to_json
.
Ele irá percorrer cada arquivo csv e gerará um json correspondente.
O arquivo JSON será um array de documentos conforme abaixo:
{
"pessoa": {
"nis": "",
"nome_completo": {
"nome": "Nome",
"sobrenome": "Sobrenome de Oliveira"
}
},
"data_saque": "18-10-2019",
"saque": 171,
"municipio": {
"localizacao": {
"lat": -10.995,
"lon": -68.7497
},
"nome": "Brasileia",
"siafi": "0105",
"uf": "AC"
}
}
Nem todas as linhas dos arquivo .csv
puderem ser convertidas, sendo assim, ao final do script
é gerado um arquivo erros_saques.csv
com as linhas que não puderem
ser transformadas para JSON. Isso ocorre, pois na geração do documento JSON, é adicionado
a latitude e longitude do documento e nem sempre o município pode ser encontrado.
Para inserir os dados é necessário a execução do script send_bulk_es.py
. Ele irá utilizar
os arquivos JSON gerados e irá enviar de 500 em 500 documentos para o Elasticsearch.
Ele utiliza Bulk helpers para agilizar o envio dos dados, visto que se fosse enviado cada documento por request, seria muito custoso.