Python ETL with data contract to validate CSV
Tech: python, git, pydantic, pandas, streamlit, ydata-profiling
Agradecimentos especiais ao @lvgalvao pelo conhecimento disponibilizado gratuitamente!
O projeto feito baseado na proposta da live Pipeline ETL com Python: Validando Dados e Planilhas de Excel para BI (Projeto end-to-end!) .
O repo feito durante a live: etl-python-excel-aovivo.
- O problema: criar um contrato de dados agnóstico, que independe do output (locker, streamlit, powerbi, etc.)
- A motivação: capacitar analistas, porque engenharia de dados dá mais dinheiro e proporcionaria qualidade de vida melhor
- Criar o projeto (10 minutos) - Github e o projeto Python
- Uma análise exploratória dos meus dados (20 minutos)
- Explicação do Pydantic e do Pandora (30 minutos)
- (ferramentas de validação de dados em tempo real)
- Aplicação de validação (30 minutos)
- Salvamento no banco de dados (30 minutos)
- Instalar ydata-profiling
/src/profiling.py
A análise exploratória do ydata-profiling está em report.html.
- pandera: valida o dataset inteiro
- pydantic: valida cada linha como se fosse um objeto
Vamos utilizar o pydantic para firmar o contrato de dados. No pydantic, definimos quais colunas e quais tipos de dados esperamos para cada uma (como um dict dtypes!).
O validator.py foi construído utilizando o arquivo data.csv. Para validar o validador, o csv data_2025.csv foi utilizado. Podemos verificar que o csv data_2025-validated.csv atende ao contrato de dados. É o arquivo corrigido manualmente. É importante notar que o validador apenas aponta os erros no arquivo, mas não os corrige.
etl-python-excel/
├── data/
│ ├── data.csv # used to build the validator
│ ├── data_2025.csv # used to test the validator
│ ├── data_2025-validated.csv # corrected dataset after using the validator
│ └── people.csv # example validator
├── output/
│ ├── report.html # output profiling.py
│ └── ...
├── src/
│ ├── app.py # streamlit frontend + backend
│ ├── profiling.py # análise exploratória
│ ├── validator-example.py
│ ├── validator.py # modelo Pydantic + função validate_dataframe
│ └── ...
├── .gitignore
├── pyproject.toml
├── README.md
├── ...
