Este projeto realiza a extração, transformação e carregamento (ETL) dos dados da Bolsa Capixaba, utilizando Apache Spark e Python. O objetivo é processar os dados brutos (bronze) e gerar dados tratados e organizados (silver) para análise.
Este projeto foi uma excelente oportunidade para aplicar e reforçar conceitos essenciais da engenharia de dados, além de integrar diversas tecnologias amplamente utilizadas no mercado. Abaixo estão os meus principais aprendizados:
- PySpark / Apache Spark: Realizei todo o processamento de dados em larga escala utilizando PySpark, aplicando transformações, limpezas e particionamento de forma eficiente e escalável.
- Web Scraping com Selenium: Automatizei a extração de dados de um portal público usando Selenium, simulando o comportamento de um usuário real para obter os arquivos necessários.
- Apache Airflow: Modelei todo o processo de ETL em DAGs, separando as etapas de extração, transformação e carga de forma clara, com agendamento e monitoramento integrados.
- Docker / Docker Compose: Containerizei a aplicação com Docker e orquestrei os serviços com Docker Compose, facilitando a execução e portabilidade do projeto entre diferentes ambientes.
- Arquitetura de Dados: Implementei uma estrutura de camadas inspirada em Data Lakes (Bronze, Silver, Gold), com foco em modularidade, rastreabilidade e controle de qualidade dos dados.
- Boas práticas de Engenharia de Dados: Trabalhei com logs estruturados, organização de diretórios, versionamento de dados, modularização de código e tratamento de exceções.
- Integração futura com Cloud (Azure Data Lake): Estruturei o projeto pensando na escalabilidade para ambientes em nuvem, prevendo a persistência dos dados processados diretamente em um Data Lake.
Este projeto reforçou tanto a parte técnica quanto a visão arquitetural de um pipeline de dados robusto e profissional.
| Etapa | Descrição | Prioridade | Status | Observações |
|---|---|---|---|---|
| Definir schema | Definir o schema dos dados bronze/silver | Alta | Feito | Verificar colunas variáveis |
O processo ETL envolve a leitura de arquivos CSV, Parquet e JSON, que contêm informações sobre os benefícios sociais da Bolsa Capixaba. O pipeline realiza as seguintes etapas:
-
Extração (Extract): Leitura dos arquivos de dados em formatos CSV, Parquet ou JSON.
-
Transformação (Transform): Limpeza, renomeação e formatação dos dados:
-
Renomeação de colunas para nomes mais legíveis.
-
Conversão de tipos de dados.
-
Formatação de valores, como valores de benefícios.
-
-
Carregamento (Load): Armazenamento dos dados tratados no formato Parquet, particionado por ano e mês de benefício.
bolsa_capixaba/
│
├── dags/ # DAGs do Airflow (orquestração de pipelines)
│
├── src/ # Código fonte (transformações, validações etc)
│ ├── ingestion/ # Scripts de ingestão
│ ├── processing/ # Transformações (ETL, limpeza, etc)
│ ├── utils/ # Funções auxiliares (log, conexões etc)
│
├── notebooks/ # Notebooks para análise e prototipagem
│
├── data/ # Dados locais temporários
│ ├── bronze/
│ ├── silver/
│ └── gold/
│
├── logs/ # Logs das execuções dos pipelines
│
├── requirements.txt # Dependências do projeto
├── Dockerfile # Containerização do projeto
├── docker-compose.yaml # Configurações do airflow
├── README.md # Documentação inicial
└── .env
As dependências do projeto estão listadas no arquivo requirements.txt:
- dotenv
- python-dotenv
- selenium
- webdriver-manager
- pyspark
- apache-airflow
- apache-airflow-providers-apache-spark
- apache-airflow-providers-postgres
- apache-airflow-providers-microsoft-azure
Você pode instalar as dependências com o seguinte comando:
pip install -r requirements.txtAntes de rodar o projeto, crie um arquivo .env na raiz como este:
BOLSA_CAPIXABA_URL="url para pegar os dados da bolsa capixaba"
Executando o projeto pelo docker:
docker-compose up --buildO processo ETL será iniciado automaticamente e os dados transformados estarão disponíveis na pasta silver.
✅ Dica: Se você já executou anteriormente e não precisa reconstruir a imagem, use apenas docker-compose up.
│ load_data_from_web.py
Baixa os dados: Abre os dados abertos em https://dados.es.gov.br e procura pelos arquivos da bolsa capixaba. Salva csv: Por fim, deixa os dados na camada bronze pra realizar o tratamento mais tarde.
│ process_data.py
Leitura dos dados: O script lê arquivos dos diretórios de entrada (bronze), verificando o tipo de cada arquivo (CSV, Parquet, JSON).
Aplicação das transformações: Aplica as transformações nas colunas do DataFrame, como renomeação e formatação.
Gravação dos dados: Os dados tratados são gravados no formato Parquet no diretório de saída (silver).
rename_cols(df): Renomeia as colunas do DataFrame para nomes mais legíveis.
cast_col_types(df): Converte tipos de dados para garantir consistência (ex.: de string para numérico).
format_benefit_value(df): Formata os valores de benefícios, garantindo que os dados estejam no formato correto.
Contribuições são bem-vindas! Sinta-se à vontade para abrir um pull request ou reportar issues.
-
Fork o projeto
-
Crie uma branch para a sua feature (git checkout -b feature/feature-name)
-
Faça as mudanças necessárias
-
Commit suas alterações (git commit -am 'Add new feature')
-
Push para a branch (git push origin feature/feature-name)
-
Abra um pull request para a branch main