-
Notifications
You must be signed in to change notification settings - Fork 0
Setup
Your Name edited this page Jul 11, 2026
·
1 revision
Guia completo para instalar, configurar e executar o pipeline do zero.
- Python 3.12+
- pip (gerenciador de pacotes Python)
- Git (para clonar o repositório)
- (Opcional) Docker + Docker Compose para PostgreSQL e Dagster
git clone https://github.com/Roberton003/projeto_sptrans.git
cd projeto_sptrans
# Criar arquivo de configuração a partir do template
cp config/config.ini.template config/config.iniEdite config/config.ini com suas linhas de interesse:
[SPTRANS]
TOKEN =
[COLETA]
LINHAS_ALVO = 1036, 8000, 8011, 8012, 8700, 8702, 8703, 8704, 8705, 8706, 8707, 8708, 8713Nota: Desde junho/2025 a SPTrans desativou a autenticação por token. Você pode deixar
TOKENvazio que a autenticação será ignorada. No entanto, mantenha a estrutura doconfig.inipara compatibilidade.
pip install -r requirements.txtPara funcionalidades extras (Parquet/DuckDB e PostgreSQL):
pip install duckdb pyarrow psycopg2-binaryDependências principais:
| Pacote | Versão Mínima | Função |
|---|---|---|
| requests | — | Chamadas HTTP para API SPTrans |
| pandas | — | Manipulação de dados |
| schedule | — | Agendamento local (sem Dagster) |
| streamlit | — | Dashboard web |
| geopy | — | Cálculo de distâncias (ônibus agrupados) |
| duckdb | 1.0 | Consultas analíticas, exportação Parquet |
| pyarrow | — | Formato Parquet |
| dagster | 1.10 | Orquestração |
| psycopg2-binary | — | Conexão PostgreSQL |
| pytest + ruff | — | Testes e lint |
python src/inicializar_banco.pyIsso cria:
- O diretório
data/(se não existir) - O banco SQLite em
data/sptrans_data.db - As tabelas
posicoes,previsoes,resultados_analise - Os índices
UNIQUEpara dedup automático
Em terminais separados (ou com Docker/Dagster):
# Terminal 1 — Posições (a cada 5 min)
python src/coleta_sptrans.py
# Terminal 2 — Previsões (a cada 15 min)
python src/coleta_previsoes.pyCada coletor executa um ciclo imediato e depois aguarda o próximo schedule.
# Exportar tudo do SQLite para Parquet
python src/compactar_parquet.py
# Exportar apenas um dia específico
python src/compactar_parquet.py --date 2025-08-18Resultado em data/parquet/:
data/parquet/
├── posicoes/
│ ├── dt=2025-08-13/
│ ├── dt=2025-08-14/
│ └── ...
└── previsoes/
├── dt=2025-08-13/
└── ...
# Análise usando Parquet (mais rápido)
python src/analise_onibus.py --mode parquet
# Análise usando SQLite (fallback)
python src/analise_onibus.py --mode sqlitestreamlit run src/dashboard_sptrans.pyAcesse http://localhost:8501 no navegador.
# Expurga registros com mais de 7 dias (padrão)
python src/expurgar_sqlite.py
# Expurga registros com mais de 30 dias
python src/expurgar_sqlite.py --dias 30
# Apenas simula — não deleta nada
python src/expurgar_sqlite.py --dry-rundocker compose up -d postgresDATABASE_URL="postgresql://sptrans:sptrans_local@localhost:5432/sptrans" \
python src/inicializar_banco.pyDATABASE_URL="postgresql://sptrans:sptrans_local@localhost:5432/sptrans" \
python src/coleta_sptrans.pyDATABASE_URL="postgresql://sptrans:sptrans_local@localhost:5432/sptrans" \
python src/migrar_postgres.pydocker compose up dagster
# UI → http://localhost:3000pip install dagster dagster-webserver
dagster dev -w workspace.yaml
# UI → http://localhost:3000# Lint
make lint # ou: ruff check src/ tests/
# Testes
make test # ou: pytest tests/ -q
# Tudo
make lint testO pipeline inclui GitHub Actions que roda a cada push e pull_request:
# .github/workflows/ci.yml
- run: ruff check src/ tests/
- run: pytest tests/ -q# Iniciar todos os serviços
docker compose up -d
# Serviços:
# coletor-sptrans → coleta posições a cada 5 min
# coletor-previsoes → coleta previsões a cada 15 min
# dashboard → Streamlit :8501
# dagster → Dagster UI :3000
# postgres → PostgreSQL :5432pip install -r requirements.txt
python src/inicializar_banco.py
python src/coleta_sptrans.py # terminal 1
python src/coleta_previsoes.py # terminal 2
python src/compactar_parquet.py # após coletar
streamlit run src/dashboard_sptrans.py # dashboard
pytest tests/ -q # testes