Consultando Dados Abertos das Empresas Brasileiras

Published in
4 min readDec 10, 2021

--

Há um tempo atrás precisei fazer alguns relatórios usando os dados da base pública da receita federal — base de dados disponível neste link — e passei por alguns perrengues, afinal: era um relatório simples, porém a base era grande demais para simplesmente consultar usando qualquer ferramenta como Excel ou até o pandas no python.

Com esse problema em mente, resolvi construir e disponibilizar um leitor capaz de processar os dados sem necessariamente consumir todos os recursos do computador e, ainda assim, tentar manter a complexidade no menor nível possível. Para isso, decidi escrever algumas funções apenas usando PySpark e SQL, o que permite que o processamento seja feito a nível de arquivos, sem a necessidade de se montar um banco de dados relacional, mas ainda se usando da facilidade da linguagem SQL para consultar os dados. O pacote do spark para a configuração do ambiente local me pareceu mais simples — porém estou aberto a opiniões sobre isso!

O diagrama abaixo representa como funciona o processo:

Fluxo para a leitura dos dados abertos da empresas brasileiras.

Os códigos que construí estão disponíveis aqui:

Aqui vou explicar como usar cada uma das funções e como configurar o ambiente local.

Configurando o ambiente local:

Para configurar o ambiente local, você precisará:

  • instalar Python: a Python Brasil tem manuais bem fáceis para Windows, Linux e Mac.
  • instalar PySpark: basta instalar o pacote, um simples pip install pyspark já deve ser o suficiente. A documentação está disponível aqui.
  • Java: o Spark roda usando como dependência o Java, e para isso precisa da variável JAVA_HOME corretamente configurada. Geralmente isso já está configurado, porém em caso de problemas, este manual aqui deve ajudar.
  • Jupyter Notebook ou alguma IDE como o VSCode: eu uso o VSCode mesmo, disponível aqui.
  • Download do repositório: faça download do repositório contendo as funções, disponível neste link.

Processamento e Leitura:

Download e descompactação dos arquivos:

Para fazer o download dos arquivos no site da Receita Federal, você pode ir diretamente no site e fazer o download um a um. Porém isso é deixado dentro de um servidor e facilmente acessado via bash, o que possibilita fazer o download de todos os arquivos necessários em apenas uma linha de código.

Para isso, o código do arquivo downloader.sh irá verificar a existência de uma subpasta chamada arquivos.zip, e irá criá-la caso não exista, e então irá fazer o download de todos arquivos .zip do site da Receita Federal, usando o método wget. O download dos arquivos pode demorar bastante, pois são bem grandes: a pasta de arquivos compactados fica atualmente em 7GB enquanto dos arquivos descompactados em aproximadamente 20GB.

Para descompactar os arquivos, vamos usar uma função que está salva na biblioteca utils.py. Para isso, basta digitar na sua IDE:

import utilsutils.descompactando(caminho_do_arquivo=’caminho_dos_arquivos_zipados’, tipo_arquivo=’.zip’,destino=’destino_desejado’)

Esse código irá descompactar todos os arquivos da pasta listada dentro da variável caminho_do_arquivo dentro da pasta listada em destino.

Leitura dos Arquivos:

Para facilitar a leitura dos arquivos, foi criado um importador para cada um dos arquivos da receita federal. O importador irá ler os arquivos e configurá-los para obedecerem o layout dado pela própria Receita Federal. Além disso, o importador deixará os dados importados disponíveis dentro da memória do computador, possibilitando o acesso via SQL com o nome definido conforme a documentação.

Abaixo vamos construir o código exemplo para leitura da tabela de sócios:

# spark configs:
spark_session, sqlContext, sc = utils.spark_configs(memory=’6G’)
import leitor
leitor.importador_socios(arquivo='arquivos-unzip/K3241.K03200Y*.D10710.SOCIOCSV',separador=';',previsualizacao=True)

Com o código acima a tabela de sócios será importada com sucesso para a memória do computador. Repare no código acima que:

  1. O método para importar os arquivos permite que se siga um padrão, ou seja, para o caso de vários arquivos, basta colocar o padrão da nomenclatura e um * na localização que pode ser substituída.
  2. O método também permite a pré visualização dos dados. Se marcado como False não irá mostrar nada, mas se True irá mostrar as primeiras dez linhas.

Agora para ler essa tabela, será necessário consultar usando SQL, conforme abaixo:

# empresarios por idade
query_idade = """
SELECT
desc_faixa_etaria,
COUNT(cnpj_basico) AS frequencia
FROM socios
GROUP BY 1
ORDER BY 2 DESC
"""
por_idade = sqlContext.sql(query_idade)
por_idade.show()

Com a consulta acima, podemos ver que ao menos em 2021 a maioria dos empresários brasileiros tem entre 41 e 50 anos de idade.

Conclusão

Este projeto foi construído para permitir uma leitura rápida de uma massa de dados maior do que o normal de maneira simples e sem exigir demais do computador pessoal. Para mim, esse modelo fez sentido pois a configuração do ambiente local não é tão trabalhosa e o processamento a nível de arquivo permite uma maior escalabilidade. Acredito que consegui simplificar bastante o processo, porém se você não está familiarizado a configurar seu computador para linguagens de programação, pode ser que tenha algumas dificuldades na configuração do PySpark.

--

--