Skip to content
Your Name edited this page Jul 11, 2026 · 1 revision

⚙️ Setup e Configuração

Guia completo para instalar, configurar e executar o pipeline do zero.


Pré-requisitos

  • Python 3.12+
  • pip (gerenciador de pacotes Python)
  • Git (para clonar o repositório)
  • (Opcional) Docker + Docker Compose para PostgreSQL e Dagster

1. Clonar e Configurar

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.ini

Edite 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, 8713

Nota: Desde junho/2025 a SPTrans desativou a autenticação por token. Você pode deixar TOKEN vazio que a autenticação será ignorada. No entanto, mantenha a estrutura do config.ini para compatibilidade.


2. Instalar Dependências

pip install -r requirements.txt

Para funcionalidades extras (Parquet/DuckDB e PostgreSQL):

pip install duckdb pyarrow psycopg2-binary

Dependê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

3. Inicializar o Banco

python src/inicializar_banco.py

Isso 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 UNIQUE para dedup automático

4. Coletar Dados

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.py

Cada coletor executa um ciclo imediato e depois aguarda o próximo schedule.


5. Camada Analítica (Parquet)

# 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-18

Resultado em data/parquet/:

data/parquet/
├── posicoes/
│   ├── dt=2025-08-13/
│   ├── dt=2025-08-14/
│   └── ...
└── previsoes/
    ├── dt=2025-08-13/
    └── ...

6. Análise e Dashboard

Via CLI

# 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 sqlite

Via Dashboard

streamlit run src/dashboard_sptrans.py

Acesse http://localhost:8501 no navegador.


7. Expurgo (Janela Deslizante)

# 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-run

8. PostgreSQL (Produção)

Subir o servidor

docker compose up -d postgres

Inicializar schema

DATABASE_URL="postgresql://sptrans:sptrans_local@localhost:5432/sptrans" \
  python src/inicializar_banco.py

Coletar apontando para PostgreSQL

DATABASE_URL="postgresql://sptrans:sptrans_local@localhost:5432/sptrans" \
  python src/coleta_sptrans.py

Migrar dados existentes do SQLite

DATABASE_URL="postgresql://sptrans:sptrans_local@localhost:5432/sptrans" \
  python src/migrar_postgres.py

9. Orquestração (Dagster)

Com Docker

docker compose up dagster
# UI → http://localhost:3000

Sem Docker

pip install dagster dagster-webserver
dagster dev -w workspace.yaml
# UI → http://localhost:3000

10. Testes e CI

Local

# Lint
make lint          # ou: ruff check src/ tests/

# Testes
make test          # ou: pytest tests/ -q

# Tudo
make lint test

CI/CD

O 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

11. Tudo de Uma Vez (Docker Completo)

# 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 :5432

Resumo de Comandos Rápidos

pip 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