Skip to content

[plutarco] ETL + endpoint afluencia por estación — Metro CDMX (2010-2026) #45

Description

@galigaribaldi

Contexto

Hallazgo durante la implementación de #40: el Portal de Datos Abiertos de la CDMX publica afluencia por estación para el STC Metro — 16 años de datos diarios (enero 2010 - abril 2026, 56 MB CSV).

De todos los sistemas de transporte, solo el Metro tiene granularidad por estación en datos abiertos. Los demás sistemas (Metrobús, Trolebús, Cablebús, Tren Ligero) solo publican por línea.

Valor

Para VFT

  • El Node Score usa âᵢ (demanda observada por estación). Hoy VFT tiene que prorratear la afluencia de la línea entre estaciones con un modelo estimado
  • Con estos datos, VFT tendría la demanda real observada por estación del Metro — sin estimación
  • Metro = 49% de la afluencia total del sistema, así que esto cubre el sistema más importante

Para Apimetro

  • Primer dataset de serie temporal larga (16 años) del esquema plutarco
  • Habilita un nuevo endpoint: GET /movilidad/analitico/afluencia-estacion
  • ~37,000 registros (agregado mensual) o ~1.1M (diario) — manejable para PostgreSQL

Fuente

Dataset: Afluencia Diaria del Metro (Simple)
URL: https://datos.cdmx.gob.mx/dataset/afluencia-diaria-del-metro-cdmx
Publicador: STC Metro / SEMOVI
Licencia: CC BY 4.0
Actualización: Mensual
Columnas: fecha, linea, estacion, afluencia (por confirmar con diccionario de datos)

También existe versión Desglosada con tipo de pago (tarjeta, boleto, gratuidad).

Implementación propuesta

DDL

CREATE TABLE IF NOT EXISTS plutarco.afluencia_estacion (
    id            SERIAL PRIMARY KEY,
    estacion_id   INTEGER REFERENCES public.estacions(id),
    linea_id      INTEGER REFERENCES public.lineas(id),
    anio          SMALLINT NOT NULL,
    mes_num       SMALLINT NOT NULL,
    mes           VARCHAR(20),
    afluencia     BIGINT NOT NULL,
    fuente        TEXT,
    created_at    TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
    UNIQUE(estacion_id, anio, mes_num)
);

Archivos a crear

  • ETL/DataCharge/LoadAfluenciaEstacion.py — ETL (descarga CSV, agrega a mensual, mapea estación)
  • db/migrations/v3.0_afluencia_estacion.sql — DDL + índices
  • cmd/pkg/controller/geojson/AfluenciaEstacionController.go — query
  • cmd/pkg/routes/RoutesAfluenciaEstacion.go — handler + Swagger
  • cmd/pkg/routes/Routes.go — wire en grupo analítico

Endpoint

GET /movilidad/analitico/afluencia-estacion

Filtros: linea_id, estacion_id, anio, mes_num

Dependencias

  • 195 estaciones de Metro en public.estacions
  • Catálogo de homologación de nombres de estación (CSV usa nombres que pueden diferir de public.estacions.nombre)

Estimación de volumen

  • ~195 estaciones × 16 años × 12 meses = ~37,440 registros (mensual)
  • ~195 estaciones × 16 años × 365 días = ~1,138,800 registros (diario)

Recomendación: almacenar a nivel mensual (consistente con afluencia_linea) con opción de agregar tabla diaria después si se requiere.

Metadata

Metadata

Assignees

No one assigned

    Labels

    area: backendTareas del servidor, API y lógica de negocioarea: dataTareas de base de datos, ETL y calidad de datosarea: integrationTareas de integración entre capaspriority: mediumPróximo ciclo

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions