Skip to content

Releases: Datos-Mexico/datos-mexico-py

v0.2.1 — Pulido académico integral del SDK

13 May 17:07
33a4f40

Choose a tag to compare

Pulido académico integral del SDK. Sin cambios en la API pública, cero breaking changes.


[0.2.1] — 2026-05-13

Pulido académico integral del SDK sin cambios en la API pública. Cero breaking changes para usuarios existentes. Cambios concentrados en infraestructura de reproducibilidad, metadata académica, sincronización docs↔código, y robustez operacional.

Added

  • Snapshot OpenAPI versionado (openapi/openapi.snapshot.json, 14,727 líneas) como registro citable del contrato API al momento del release.
  • Detección automática de drift entre snapshot y API live:
    • Workflow continuo openapi-drift.yml en cada push y PR.
    • Workflow cron diario openapi-drift-cron.yml con gestión automática de issues.
    • Política: drift es información, no error; CI no falla por drift.
  • Script de actualización del snapshot openapi/update_snapshot.py idempotente.
  • Deploy automático de docs a Cloudflare Pages (docs-deploy.yml) en cada push a main que toque docs/, mkdocs.yml, o src/**.
  • Test de reproducibilidad permanente del README (tests/test_readme_examples.py): extrae bloques de código del README, valida compile(), y opcionalmente ejecuta contra la API real.
  • Coverage report como artifact en GitHub Actions (XML + HTML) con badge en README.
  • requirements-dev.txt con hashes SHA256 desde uv.lock para reproducibilidad CI universal.
  • Script scripts/sync_requirements.sh para regenerar el lockfile + requirements export.
  • Script scripts/regen_docs_figures.py con tres modos (dry-run, --apply, --verify) para mantener cifras vivas sincronizadas con la API.
  • Sección "Cortar un release" en docs/contributing.md documentando el proceso completo (10 pasos).
  • Sección "Reproducibilidad del entorno" en docs/contributing.md documentando paths uv y pip --require-hashes.
  • Sección "Gestión del drift del OpenAPI spec" en docs/contributing.md.
  • Sección "Secretos requeridos por CI/CD" en docs/contributing.md.
  • Labels openapi-drift y automated en el repositorio GitHub para gestión automática de issues por el cron.

Changed

  • CITATION.cff consolidada como fuente única de metadata académica según schema CFF 1.2.0; campo type: software explicitado.
  • BibTeX canónico alineado byte a byte en README, docs/citation.md, y notebook Amafore. Tipo @software (no @misc), author corporativo con brace doble {{Equipo de Datos México}} para preservar entidad en parsers BibTeX, URL apuntando al repositorio del código, campos completos (year, month, version, url, publisher, license, note).
  • README "Uso rápido" corregido: el primer bloque ya no usa dict-style camelCase incorrecto (stats['totalServidores']) sino atributos snake_case correctos (stats.total_servidores); ahora corre limpio al copia-pegar.
  • README "Uso rápido" unificado al patrón context manager with DatosMexico() as client: consistente con docs/quickstart.md.
  • 45 bloques de código en docs/ auditados; 30 corregidos para sincronizar con los modelos Pydantic actuales del SDK (tutoriales cdmx, enigh, consar, comparativo; conceptos identidad-contable; tutorial enoe ya estaba sincronizado).
  • Convención de conteo de endpoints documentada explícitamente: endpoints HTTP (95/114 cubiertos = 83%) como cifra canónica comparable con APIs institucionales, métodos SDK (97 públicos) como aclaración pedagógica donde aporta valor.
  • Workflow tests.yml ahora usa pip install --require-hashes -r requirements-dev.txt para reproducibilidad universal en lugar de pip install -e ".[dev]" sin lock.
  • Versiones de GitHub Actions uniformadas: actions/upload-artifact@v7 en los 5 workflows.
  • Casing canónico Datos-Mexico en 26 URLs sobre 17 archivos (la organización en GitHub es Datos-Mexico, no datos-mexico).
  • docs/contributing.md ampliada de 36 a más de 300 líneas con guía completa de desarrollo (setup uv, tests unit + integration, ruff/mypy, cómo agregar un namespace, mkdocs serve, release process OIDC).
  • docs/tutoriales/cdmx.md generalizada la nota sobre sectores test residuales (la API expone sectores con total_servidores=0 cuya cantidad puede variar entre releases).
  • Cifras frías refrescadas contra snapshot vigente de la API (servidores CDMX en README y tutorial).
  • docs/conceptos/comparativo y docs/index.md con descripción precisa del alcance real de los 7 endpoints de cruce cross-dataset.
  • BibTeX del notebook Amafore completado con version, month, publisher, license, note para coincidir con la versión canónica.

Fixed

  • README ejemplo "Uso rápido" que crasheaba con TypeError: 'DashboardStats' object is not subscriptable al copia-pegar la primera línea de código en una terminal de usuario.
  • Promesas stale en README: eliminada mención "Próximamente: comparativo cross-dataset" cuando el módulo ya existe desde v0.1.0; agregado ENOE a la lista de walkthroughs.
  • Conteo de notebooks: corregido de 5 a 6 (off-by-one introducido al agregar el notebook de ENOE).
  • Heading: corregido ## Examples a ## Ejemplos (única sección en inglés en README en español).
  • docs/api/ directorio vacío eliminado del filesystem local.
  • uv.lock ahora committeado para reproducibilidad CI verificable.
  • Patrón .env ampliado a .env* en .gitignore para cubrir variantes futuras.

Infrastructure

  • 38 commits sobre v0.2.0 organizados en 5 fases de pulido (PR #6 y PR #7).
  • Cobertura de tests: 99% (1964 sentencias, 29 sin cubrir).
  • Suite: 234 passed, 27 skipped (gated por DATOS_MEXICO_INTEGRATION_TESTS=1).
  • mypy --strict, ruff: clean en todo el código fuente.

Notes for citation

CITATION.cff actualizada con version: 0.2.1 y date-released: 2026-05-13. Los BibTeX en README, docs y notebook reflejan los mismos campos. Use cffconvert -f bibtex -i CITATION.cff para generar la cita canónica, o copie directamente el bloque @software{datos_mexico_py, ...} provisto en cualquiera de las tres ubicaciones.

v0.2.0 — Módulo ENOE (mercado laboral mexicano)

12 May 07:58

Choose a tag to compare

datos-mexico v0.2.0

Released: 2026-05-11

Nuevo módulo ENOE — acceso a 101.5 millones de microdatos y 76 mil
indicadores agregados
del mercado laboral mexicano (INEGI ENOE,
2005T1–2025T1, dominio 15 años o más).

Instalación

pip install datos-mexico
# extra opcional para microdatos_to_pandas() y los notebooks
pip install datos-mexico[examples]

Nuevas capacidades — client.enoe

19 métodos nuevos en cuatro familias.

Catálogos y metadata (5)

  • health() — estado del dataset (último periodo, conteos, cobertura).
  • metadata() — información completa de cobertura, tablas, etapas y caveats.
  • indicadores() — los 13 indicadores agregados disponibles.
  • entidades() — las 32 entidades federativas con clave INEGI.
  • etapas() — las 3 etapas metodológicas (clasica, etoe_telefonica, enoe_n).

Indicadores agregados (5)

  • serie_nacional() — serie temporal nacional 2005T1–2025T1.
  • snapshot_nacional() — los 13 indicadores nacionales en un periodo.
  • serie_entidad() — serie temporal por entidad federativa.
  • snapshot_entidad() — todas las entidades para un indicador en un periodo.
  • ranking() — ranking de entidades por indicador y periodo.

Distribuciones (4)

  • distribucion_sectorial_snapshot() — composición por sector económico (12 sectores SCIAN).
  • distribucion_sectorial_serie() — evolución temporal de un sector.
  • distribucion_posicion_snapshot() — composición por posición en la ocupación (subordinados, empleadores, cuenta propia, no remunerados).
  • distribucion_posicion_serie() — evolución temporal de una posición.

Microdatos (5)

  • microdatos_schema() — descripción de columnas por tabla.
  • microdatos_count() — conteo exacto con filtros sin descargar filas.
  • microdatos_page() — una página explícita con paginación.
  • microdatos_iter() — iterador síncrono que pagina internamente.
  • microdatos_to_pandas() — helper DataFrame (requiere pandas).

Tablas disponibles: viv (vivienda), hog (hogar), sdem
(sociodemográfico), coe1 y coe2 (cuestionario de ocupación y empleo).

Modelos Pydantic (28 nuevos)

Tipos fuertes con caveats metodológicos integrados:

  • EnoeHealth, EnoeMetadata, EnoeTablaInfo
  • CaveatMetodologico (slug, titulo, descripcion, periodo_aplicable, referencia)
  • IndicadorRef, IndicadoresResponse
  • EntidadRef, EntidadesResponse
  • EtapaRef, EtapasResponse
  • CoberturaTemporal, PuntoSerie
  • SerieNacionalResponse, SerieEntidadResponse
  • IndicadorSnapshotItem, SnapshotNacionalResponse, EntidadSnapshotRow, SnapshotEntidadResponse
  • RankingEntidadRow, RankingResponse
  • DistribucionSectorialRow, DistribucionSectorialSnapshot, DistribucionSectorialSerie
  • DistribucionPosicionRow, DistribucionPosicionSnapshot, DistribucionPosicionSerie
  • MicrodatoColumna, MicrodatosSchema, MicrodatosCount
  • MicrodatosPagination, MicrodatosListResponse

Validación académica — reproducir el boletín INEGI 265/25

from datos_mexico import DatosMexico

with DatosMexico() as client:
    r = client.enoe.ranking(
        periodo="2025T1",
        indicador="tasa_desocupacion",
        limit=5,
    )
    for e in r.ranking:
        print(f"{e.rank}. {e.entidad_nombre}: {e.valor:.2f}%")

Salida — TOP 5 entidades por tasa de desocupación, 1T 2025:

Rank Clave INEGI Entidad Tasa
1 27 Tabasco 4.97%
2 05 Coahuila de Zaragoza 3.56%
3 10 Durango 3.46%
4 09 Ciudad de México 3.45%
5 28 Tamaulipas 3.37%

Cifras idénticas al boletín INEGI 265/25.

Caveats metodológicos integrados

El módulo inyecta automáticamente caveats tipados (CaveatMetodologico)
en cada response que toque una zona delicada:

  • TIL1 definición operativa — series de informalidad laboral.
  • redefinicion_tcco_2020T1 — la TCCO cambió su construcción en
    2020T1; comparaciones cross-etapa requieren cautela.
  • cambio_marco_2020T3 — transición al marco muestral del CPV 2020;
    subestimación de 6-7 % en el periodo 2020T3–2021T4.
  • dominio_15_plus — el observatorio reconstruyó la etapa clásica
    sobre el dominio uniforme 15+ (INEGI publicaba 14+ pre-2014T4).
  • gap_documental_2020T2 — trimestre sin microdatos por la
    suspensión COVID; sustituido por ETOE telefónica.

Cada response relevante expone caveats: list[CaveatMetodologico].

Documentación

Tests

33 tests passing (31 mock con respx + 2 integration tests que
reproducen el ranking INEGI 265/25 contra el API en vivo, gated por
DATOS_MEXICO_INTEGRATION_TESTS=1).

Smoke test end-to-end después de instalar:

pip install datos-mexico
python -c "
from datos_mexico import DatosMexico
with DatosMexico() as client:
    r = client.enoe.ranking(
        periodo='2025T1',
        indicador='tasa_desocupacion',
        limit=5,
    )
    claves = [e.entidad_clave for e in r.ranking]
    assert claves == ['27', '05', '10', '09', '28'], claves
    print('INEGI 265/25 reproducible vía pip install datos-mexico')
"

Compatibilidad

  • Python: 3.10, 3.11, 3.12, 3.13.
  • Sin breaking changes desde v0.1.0; los namespaces existentes
    (cdmx, consar, enigh, comparativo, …) no cambian de API.
  • pandas como extra opcional — solo lo necesita el helper
    microdatos_to_pandas. Disponible en el extra examples
    (pip install datos-mexico[examples]).
  • Convención entidad_clave — el módulo ENOE adopta el contrato
    entidad_clave canónico del observatorio (Sub-fase 3.10c del backend):
    el SDK siempre envía entidad_clave, nunca el alias deprecated
    entidad.

Backend

  • API REST pública: https://api.datos-itam.org (Cloudflare CDN).
  • 17 endpoints ENOE en producción.
  • Latencia warm: ~150–200 ms cache HIT, <2 s cold cross-region.

Cobertura del SDK

Namespace Endpoints Estado
cdmx, consar, enigh, comparativo, … (v0.1.0) 78
enoe (v0.2.0) 17
Total cubierto 95 / 114 100 % de las lecturas públicas

Equipo

  • David Fernando Ávila Díaz (ITAM, founder).
  • Asesoría académica: Dr. Marco Augusto Vásquez Beltrán.
  • Equipo de Datos México.

Próximos pasos

  • Frontend /enoe en datosmexico.org (Fase 4).
  • DOI Zenodo para citación académica.
  • Submission al Premio Amafore-ITAM 2026.

PyPI: https://pypi.org/project/datos-mexico/0.2.0/
Docs: https://docs.datosmexico.org/
Issues: https://github.com/Datos-Mexico/datos-mexico-py/issues

v0.1.0 — Initial public release

06 May 22:05

Choose a tag to compare

Initial public release

First public release of the datos-mexico Python SDK.

Features

  • 78 endpoints implemented covering 100% of the public read API of
    https://api.datos-itam.org
  • 9 namespaces: cdmx (servidores públicos), consar (SAR/AFOREs),
    enigh (hogares), comparativo (cross-dataset), personas, nombramientos,
    demo, export, plus root client.health()
  • Pydantic v2 strict models with Decimal precision for monetary
    fields (preserves accuracy for financial analysis)
  • HTTP client with retries (exponential backoff), in-memory TTL
    cache, and structured exception hierarchy
  • 201 unit tests + 27 integration tests validating identidad
    contable contra cifras INEGI oficiales
  • Type checked with mypy --strict in 28 source files
  • 5 Jupyter example notebooks demonstrating real workflows

Installation

pip install datos-mexico==0.1.0

Optional dependencies for running notebooks:

pip install datos-mexico[examples]

Quickstart

from datos_mexico import DatosMexico

with DatosMexico() as client:
    stats = client.cdmx.dashboard_stats()
    print(f'{stats.total_servidores:,} servidores públicos en CDMX')

Documentation

See https://github.com/datos-mexico/datos-mexico-py for full documentation
and example notebooks in the examples/
directory.

Citation

See CITATION.cff
for citation in BibTeX format.