Pipeline de dados e dashboard analitico para acompanhar jogos da Copa do Mundo FIFA 2026. O projeto extrai dados publicos, organiza tudo em PostgreSQL, calcula indicadores de forca das equipes, gera previsoes de partidas e entrega views prontas para consumo no Power BI.
O WCStats centraliza informacoes de jogos, rankings, valor de mercado, historico recente, indicadores socioeconomicos e contexto ambiental em uma base unica. A partir dessa base, o projeto calcula probabilidades de resultado, placares provaveis, gols esperados e standings de grupos.
Principais entregas:
- Pipeline ELT em Python, PostgreSQL e Apache Airflow.
- Camadas de dados em
raw,staging,marteexperiments. - Views finais para o dashboard de proximos jogos e probabilidades.
- Arquivo Power BI (
WCStats.pbix) para visualizacao interativa. - Laboratorio de modelos para comparar pesos e estrategias de previsao.
- Python
- PostgreSQL
- Apache Airflow
- Docker Compose
- Pandas, NumPy, SciPy e SQLAlchemy
- BeautifulSoup/lxml para scraping
- Power BI
fontes publicas
|
v
src/01_extract -> raw
|
v
src/02_transform -> staging
|
v
src/03_mart -> mart
|
v
src/04_views -> views para Power BI
src/05_experiments -> experiments
Camadas do banco:
raw: dados brutos vindos das fontes externas.staging: dados limpos, normalizados e mapeados.mart: tabelas finais de analise, features, rankings e previsoes.experiments: camada isolada para backtests e comparacao de modelos.
O projeto possui fluxos separados para referencias, atualizacao diaria e experimentos.
DAGs principais:
wcstats_reference_pipeline: carga manual de dados pesados ou quase estaticos, como participantes, ranking FIFA, HDI, World Bank, valor de mercado e dados ambientais.wcstats_pipeline: pipeline diaria para atualizar jogos, recalcular forca das equipes, previsoes, probabilidades, standings e views finais.wcstats_experiments_pipeline: pipeline manual para backtests e comparacao de modelos no schemaexperiments.
Ordem recomendada:
- Execute
wcstats_reference_pipelineuma vez para preparar as tabelas de referencia. - Execute ou ative
wcstats_pipelinepara manter os dados atualizados. - Execute
wcstats_experiments_pipelinequando quiser estudar novos pesos e modelos.
WCStats/
dags/
wcstats_pipeline_dag.py
wcstats_experiments_dag.py
src/
01_extract/
02_transform/
03_mart/
04_views/
05_experiments/
config.py
check_reference_tables.py
docker-compose.yml
requirements.txt
.env.example
WCStats.pbix
O projeto combina diferentes fontes publicas:
- OpenFootball World Cup JSON
- World Bank API
- Our World in Data HDI
- Transfermarkt
- GeoNames
- Open-Meteo
- Ranking FIFA via scraping
As principais views consumidas pelo dashboard sao:
mart.vw_match_center: base principal do painel de proximos jogos.mart.vw_next_match: proximas partidas selecionaveis para cards.mart.vw_next_match_score_probabilities: probabilidades de placares para os proximos jogos.mart.vw_team_power_ranking: ranking analitico disponivel no mart, usado como base de forca das equipes.
O modelo principal combina sinais de:
- Ranking FIFA
- Elo
- desempenho recente
- historico das equipes
- valor de mercado
- perfil de gols
- indicadores socioeconomicos
- contexto ambiental
As previsoes geradas incluem:
- probabilidade de vitoria do mandante
- probabilidade de empate
- probabilidade de vitoria do visitante
- gols esperados
- placares mais provaveis
- over/under gols
- ambas marcam
O script src/05_experiments/create_prediction_model_lab.py cria uma camada separada para avaliar modelos sem alterar o pipeline oficial.
Exemplo dos pesos do baseline:
Exemplo de resultado de avaliacao:
Ele gera:
experiments.model_candidatesexperiments.model_match_predictionsexperiments.model_evaluation_summaryexperiments.model_ablation_summaryexperiments.vw_all_prediction_modelsexperiments.vw_best_prediction_modelsexperiments.vw_model_component_weightsexperiments.vw_socio_environment_impactexperiments.vw_worldcup_model_results
Metricas acompanhadas:
- acerto de resultado 1X2
- acerto sem empates
- acerto de placar
- log loss
- erro medio de gols
- impacto dos sinais socioeconomicos e ambientais
Crie um arquivo .env a partir do exemplo:
copy .env.example .envConfigure as credenciais do PostgreSQL:
DB_USER=postgres
DB_PASSWORD=postgres
DB_HOST=localhost
AIRFLOW_DB_HOST=host.docker.internal
DB_PORT=5432
DB_NAME=wcstatsSuba a inicializacao do Airflow:
docker compose up airflow-initSuba webserver e scheduler:
docker compose up airflow-webserver airflow-schedulerAcesse o Airflow em:
http://localhost:8080
Credenciais padrao locais:
admin / admin
Tambem e possivel executar scripts diretamente, desde que o .env esteja configurado:
python src/01_extract/extract_matches.py
python src/02_transform/transform_matches_clean.py
python src/03_mart/create_team_strength_score.py
python src/04_views/create_match_center_views.pyPara rodar o laboratorio de modelos:
python src/05_experiments/create_prediction_model_lab.pyO arquivo principal do Power BI e:
WCStats.pbix
O dashboard atual e focado em proximos jogos, probabilidades, placares provaveis e totais de gols. A pagina dedicada a selecoes/ranking ainda nao faz parte desta versao publica do projeto.
- O projeto foi pensado para ambiente local/dev.
- O arquivo
.envnao deve ser versionado. - Dados temporarios e extracoes locais devem ficar fora do Git quando possivel.
- Para producao, o ideal e criar uma imagem customizada do Airflow com dependencias pre-instaladas e usar secrets para credenciais.
Este repositorio usa dados publicos de terceiros. Verifique os termos de uso das fontes antes de redistribuir bases processadas ou dashboards derivados.




