Este projeto organiza e analisa dados da Fórmula 1 usando arquitetura Medallion (Bronze → Silver → Gold) com PySpark, Python e Jupyter Notebook. Inclui processos de ETL, dashboards interativos e análises históricas de pilotos, construtores e corridas. Desenvolvido como projeto da disciplina FGA0060 – Sistemas de Banco de Dados 2, do curso de Engenharia de Software da Universidade de Brasília (UnB).
-
Implementar uma arquitetura Lakehouse para armazenar e processar dados da Fórmula 1, organizada nas camadas Bronze, Silver e Gold;
-
Modelar os dados por meio de representações conceitual (MER), lógica (DER) e física (DLD), garantindo consistência e padronização estrutural;
-
Construir e popular um banco de dados containerizado (via Docker) com tabelas otimizadas para consultas e transformações em larga escala;
-
Disponibilizar um ambiente analítico integrado, permitindo exploração de dados, análises estatísticas e construção de dashboards interativos com base nas camadas Gold.
git clone https://github.com/Julio1099/formula1-analytics.git
cd formula1-analyticsCertifique-se de ter o Java e Python instalados, necessários para rodar o PySpark.
# Instalar Java
sudo apt install default-jdk
java -version
# Instalar Python
sudo apt install python3 python3-venv python3-pip
python3 --versionCrie um ambiente virtual:
python3 -m venv venv
source venv/bin/activateInstale PySpark e Jupyter:
pip install pyspark jupyterInicie o Jupyter Notebook:
jupyter notebookcd docker
docker-compose up --builddocker exec -it medallion-db psql -U $POSTGRES_USER -d $POSTGRES_DB -c "\dn+"
docker exec -it medallion-db psql -U $POSTGRES_USER -d $POSTGRES_DB -c "\dt silver.*"formula1-analytics/
├─ dags
| ├─ airflowignore
| └─ formula1_pipeline_dag.py
├─ DataLayer/
│ ├─ raw/ # Camada Bronze (dados brutos)
│ │ ├─ dados_originais/
│ │ ├─ analytics_raw.ipynb
│ │ └─ dicionario_raw.md
│ │
│ ├─ silver/ # Camada Silver (dados tratados)
│ │ ├─ dicionario_silver.md
| | ├─ ddl_silver.sql
| | ├─ analytics.ipynb
| | └─ mer_der_dld.pdf
│ │
│ └─ gold/ # Camada Gold (dados analíticos)
│ ├─ mer_der_dld.pdf
| ├─ consultas.sql
| ├─ ddl_gold.sql
| └─ mnemonicos.pdf
│
├─ Transformer/ # Scripts de transformação/ETL
│ ├─ etl_raw_to_silver.ipynb
│ └─ etl_silver_to_gold.ipynb
│
├─ docker/ # Docker
│ ├─ docker-compose.yml
│ ├─Dockerfile
│ └─Dockerfile.airflow
│
└─ README.md
- Distribuição de Tempos de Volta em Mônaco;
- Evolução do Tempo Médio de Volta em Corrida;
- Pit stops por corrida (distribuição);
- Experiência vs Eficácia em Voltas Rápidas;
- Distribuição de Tempos de Volta por Construtor;
- Proporção de abandonos por status de corrida;
- Evolução do Tempo de Volta e Consistência da Pista;
- Heatmap de Performance por Volta;
- Evolução da Posição em Corrida.
- Python – ETL e manipulação de dados;
- PySpark – processamento distribuído e transformação de dados em larga escala;
- PostgreSQL – armazenamento e estruturação dos dados (Lakehouse);
- Docker – containerização e isolamento dos ambientes;
- Jupyter Notebook – análise exploratória, desenvolvimento e visualização interativa;
- SQL – modelagem conceitual, lógica e física do banco de dados.
- PoweBI – visualização interativa e análise de resultados.
O dashboard final foi desenvolvido no Power BI, com design planejado no Figma, e é composto por uma página inicial e outras três páginas analíticas, acessadas por um menu interativo com botões clicáveis no topo. As páginas estão dispostas da seguinte forma:
- Seasons Winners — seleção de ano e corrida, exibindo os 3 melhores colocados e suas equipes.
- Pace — seleção de ano e corrida, permitindo analisar o ritmo geral da prova e o ritmo individual dos pilotos.
- Pit Stops — seleção de ano e equipe, mostrando ranking, consistência, evolução do tempo médio e demais métricas de pit stop.
- Drivers Comparison — seleção de dois pilotos, exibindo comparações de pódios, pontuação, DNFs e outras estatísticas.
Fernando Gabriel dos Santos Carrijo 221008033 |
Júlio Cezar Gomes de Souza Crispim 221007591 |
Kaleb de Souza Macedo 231026975 |
Othavio Araujo Bolzan 231039150 |
