Skip to content

This project automates the extraction, transformation, and processing of CNPJ (Brazilian tax ID) data from publicly available datasets. It simplifies downloading, unzipping, renaming, and processing large CNPJ datasets for analysis. Designed to help developers, analysts, and companies efficiently work with Brazilian business registration data.

License

Notifications You must be signed in to change notification settings

jmfeck/cnpj-data-extractor

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CNPJ Data Extractor

Video Tutorial

Para uma apresentacao em video deste projeto, acesse: CNPJ Data Extractor - Video Tutorial

Visão Geral do Projeto

O CNPJ Data Extractor é um projeto de código aberto que automatiza o processo de download, extração e transformação de conjuntos de dados do CNPJ (Cadastro Nacional da Pessoa Jurídica) a partir de fontes públicas disponíveis. O projeto é dividido em duas partes:

  1. Extração de Dados: Baixar e extrair automaticamente os conjuntos de dados do CNPJ particionados.
  2. Unificação de Dados: Combinar as tabelas particionadas em conjuntos de dados consolidados para processamento ou análise posterior.

Funcionalidades

  • Download Automático de Dados: Download multithreaded dos conjuntos de dados com suporte para verificação remota do tamanho do arquivo, evitando downloads redundantes.
  • Processamento Eficiente de Dados: Lida com grandes conjuntos de dados particionados e os consolida em uma única saída.
  • Formatos de Exportação Flexíveis: Os dados podem ser exportados nos formatos CSV, Parquet, JSON ou Feather para fácil integração com bancos de dados e plataformas de análise.
  • Configuração Modular: Caminhos, logs e opções de exportação são facilmente ajustáveis por meio de um arquivo de configuração (config.yaml).

Estrutura do Projeto

.  
├── config  
  ├── config.yaml         # Arquivo de configuração para caminhos, formatos e tipos de dados  
├── data_incoming         # Pasta para arquivos ZIP de dados recebidos  
├── data_outgoing         # Pasta para os dados processados de saída  
├── logs                  # Pasta para arquivos de log  
├── scripts               # Pasta para scripts em Python  
  ├── cnpj_extractor.py   # Script para extração de dados (parte 1)  
  ├── cnpj_merger.py      # Script para unificação das tabelas particionadas (parte 2)  
├── README.md             # Documentação do projeto  

Iniciando o Projeto

Pré-requisitos

  • Python 3.8+
  • Os seguintes pacotes Python:
    • pandas
    • pyyaml
    • requests
    • bs4 (BeautifulSoup)
    • tqdm

Configuração

Antes de executar os scripts, certifique-se de que o arquivo config.yaml esteja configurado de acordo com o seu ambiente. Esse arquivo contém caminhos para armazenamento de dados, logs e configurações de formato para exportação de dados.

Exemplo de config.yaml:

# URL base para o conjunto de dados do CNPJ  
base_url: 'http://200.152.38.155/CNPJ/dados_abertos_cnpj/'  

# Configurações de CSV  
csv_sep: ';'  
csv_dec: ','  
csv_quote: '"'  
csv_enc: 'cp1252'  

# Formato de exportação: Escolha entre 'csv', 'parquet', 'json' ou 'feather'  
export_format: 'parquet'  

# Definições de tipo de dado para cada tabela  
dtypes:  
  empresas:  
    cnpj_basico: "str"  
    razao_social: "str"  
    natureza_juridica: "str"  
    qualificacao_do_responsavel: "str"  
    capital_social: "str"  
    porte_da_empresa: "str"  
    ente_federativo_resposavel: "str"  

  estabelecimentos:  
    cnpj_basico: "str"  
    cnpj_ordem: "str"  
    cnpj_dv: "str"  
    identificador_matriz_filial: "str"  
    nome_fantasia: "str"  
    situacao_cadastral: "str"  
    data_situacao_cadastral: "str"  
    motivo_situacao_cadastral: "str"  
    nome_da_cidade_no_exterior: "str"  
    pais: "str"  
    data_de_inicio_da_atividade: "str"  
    cnae_fiscal_principal: "str"  
    cnae_fiscal_secundaria: "str"  
    tipo_de_logradouro: "str"  
    logradouro: "str"  
    numero: "str"  
    complemento: "str"  
    bairro: "str"  
    cep: "str"  
    uf: "str"  
    municipio: "str"  
    situacao_cadastral: "str"  
    ddd1: "str"  
    telefone1: "str"  
    ddd2: "str"  
    telefone2: "str"  
    ddd_do_fax: "str"  
    fax: "str"  
    correio_eletronico: "str"  
    situacao_especial: "str"  
    data_da_situacao_especial: "str"  
  ...  

Parte 1: Extração de Dados

Para iniciar o processo de extração de dados, execute o script cnpj_extractor.py. Este script fará o download do conjunto de dados do CNPJ para o mês mais recente disponível, verificará o tamanho dos arquivos e evitará o re-download de arquivos que já existam.

Execute a extração:

python cnpj_extractor.py  

Isso irá:

  • Baixar os conjuntos de dados particionados do mês mais recente disponível no servidor.
  • Salvá-los na pasta data_incoming.

Parte 2: Unificação de Dados

Após a extração dos dados, a segunda parte envolve a unificação das tabelas particionadas em conjuntos de dados consolidados.

Para realizar a unificação, execute o script cnpj_merger.py. Esse script lê os arquivos de dados, os processa e salva os dados unificados na pasta data_outgoing no formato especificado no config.yaml.

Execute o processo de unificação:

python cnpj_merger.py  

Isso irá:

  • Unir os arquivos de dados particionados (por exemplo, Empresas, Estabelecimentos, Sócios) em um único conjunto de dados.
  • Salvar o conjunto de dados unificado na pasta data_outgoing no formato que você preferir.

Personalizando o Formato de Exportação

Você pode facilmente alterar o formato dos arquivos exportados (por exemplo, CSV, Parquet, JSON) modificando o valor de export_format no config.yaml. Os formatos suportados são:

  • csv
  • parquet
  • json
  • feather

Logs

Os logs são gerados na pasta logs, com detalhes sobre os processos de download, extração e unificação. Isso ajuda a acompanhar o progresso das atividades de extração e unificação de dados.

Contribuindo

Contribuições são bem-vindas! Se você encontrar bugs ou tiver sugestões para novos recursos ou melhorias, sinta-se à vontade para enviar uma issue ou abrir um pull request.

Licença

Este projeto é licenciado sob a Licença MIT.

Notas para Melhorias

  • Tratamento de Erros: Melhorias adicionais podem ser incluídas, como mecanismos de tentativa de novo download ou tratamento de arquivos parcialmente baixados.
  • Processamento Paralelo: O processo de unificação também pode ser otimizado utilizando técnicas de processamento paralelo para lidar com grandes volumes de dados.

About

This project automates the extraction, transformation, and processing of CNPJ (Brazilian tax ID) data from publicly available datasets. It simplifies downloading, unzipping, renaming, and processing large CNPJ datasets for analysis. Designed to help developers, analysts, and companies efficiently work with Brazilian business registration data.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages