Skip to content

Projeto acadêmico: extração, processamento e persistência do histórico de taxas de juros básicas do BACEN.

Notifications You must be signed in to change notification settings

tonsatomicos/bacen-interest-rate-history

Repository files navigation

Projeto de Web Mining & Crawler Scraping
Bacen - Histórico das Taxas de Juros

Este projeto foi concebido como parte de um desafio durante a disciplina de Web Mining & Crawler Scraping, no curso de pós-graduação em Engenharia de Dados, na Universidade de Fortaleza (Unifor).

O desafio consistia em desenvolver um scraper no site de nossa escolha, extrair e retornar os dados. Optei por raspar o histórico de taxas de juros básicas do BACEN.

Para realizar esse processo, utilizei Selenium para a raspagem de dados, Pandas para transformação, Pandera para qualidade de dados e SQLAlchemy ORM para persistência, realizando insert e update conforme necessário.

Etapas

Descrição da Imagem

Estrutura

Utilizando Poetry para gerenciamento de ambientes virtuais e dependências, e Pyenv para o controle de versão.

Versão do Python

3.11.9

Dependências | Produção

  • selenium
  • pandas
  • lxml
  • html5lib
  • pandera
  • sqlalchemy
  • psycopg2-binary
  • pyodbc
  • loguru

Dependências | Desenvolvimento

  • flake8
  • black
  • isort
  • ipykernel
  • matplotlib
  • pre-commit

Instalação das Dependências

Você pode instalar as dependências manualmente, ou, utilizando o Poetry ou o Pip com os seguintes comandos:

Utilizando Poetry

poetry install

Utilizando Pip

pip install -r requirements.txt

Configurações do Projeto - Parte 1 - Banco de Dados

O arquivo ./bacen-interest-rate-history/core/domain/models/rate_history.py contém a definição da classe que representa a tabela do banco de dados, ou seja, a classe que mapeia a tabela onde os dados serão persistidos, com os campos necessários para cada registro.

Neste caso, a classe está mapeada para a tabela historico_juros_taxas. Caso seja necessário, você pode alterar para outra tabela conforme a necessidade do projeto.

Os scripts SQL disponibilizados em ./sql/ inclui o esquema da tabela, com detalhes sobre os tipos de dados, chaves primárias e quaisquer restrições adicionais necessárias.

Como usar?

Nas linhas 10 e 11 do script ./bacen-interest-rate-history/bacen-interest-rate-history/core/main.py existe a criação do objeto engine para os bancos PostgreSQL e SQL Server, basta configurar na ordem:

  • Banco para persistência
    • Consulte o arquivo ./bacen-interest-rate-history/bacen-interest-rate-history/core/utils/db_engine.py para verificar os bancos suportados.
  • IP do banco
  • Usuário
  • Senha
  • Database

Qual banco usar?

Como visto anteriormente, a engine está adaptada para persistir os dados ou no Postgres ou no SQL Server, caso precise persistir em outros bancos, como MySQL, basta consultar a documentação do SQL Alchemy e adicionar uma nova opção na função create_engine existente no arquivo ./bacen-interest-rate-history/bacen-interest-rate-history/core/utils/db_engine.py.

Utilizando Docker

Tenho preparado na pasta ./bacen-interest-rate-history/infra/docker/ um docker-compose, com um container Postgres e um container SQL Server, que cria automaticamente o banco e as tabelas, caso queira utilizar um deles, prossiga com o comando:

docker-compose up -d

Lembre-se de verificar o usuário e a senha dos bancos de dados no arquivo docker-compose.yml.

Configurações do Projeto - Parte 2 - Qualidade dos Dados

Usando Pandera para garantir a qualidade dos dados após a transformação. O arquivo ./bacen-interest-rate-history/core/domain/models/rate_history.py contém a definição da classe que representa o schema de saída da transformação dos dados usando Pandas, verificando a tipagem dos dados e garantido que estejam de acordo com o schema do banco de dados.

Conclusão

Após realizar essa primeira configuração, o projeto está pronto para ser executado. Ele pode facilmente persistir em qualquer banco de dados relacional, desde que a engine esteja configurada corretamente. Isso oferece uma ampla flexibilidade para adaptar o projeto a diferentes ambientes e requisitos de armazenamento de dados.

Para executar o projeto, utilize o seguinte comando:

python ./bacen-interest-rate-history/bacen-interest-rate-history/core/main.py

Considerações Finais

  • A documentação pode não estar tão detalhada, talvez seja necessário um certo nível de conhecimento para adaptar o código.
  • Se tudo estiver configurado corretamente, basta executar o script e verificar a tabela no banco de dados usando o DBeaver ou outra ferramenta de sua preferencia.
  • Tentei aplicar os conceitos de SOLID nesse projeto, por isso a estrutura pode parecer uma pouco confusa.
  • Disponibilizei na pasta ./notebooks/ um jupyter notebook chamado data_analysis.ipynb, onde recupero os dados inseridos no banco de dados e faço uma análise da evolução da meta Selic ao longo do tempo.

Image

About

Projeto acadêmico: extração, processamento e persistência do histórico de taxas de juros básicas do BACEN.

Topics

Resources

Stars

Watchers

Forks