Profile
Back to NewsBack
GitHub Trending 28 min
Reader Mode
cortega26/chile-hub: Datos públicos de Chile curados, normalizados y validados: geografía, demografía, economía, salud, educación y distritos electorales. Listos para consumir en una línea de código con Polars, DuckDB, SQLite y Excel.

cortega26/chile-hub: Datos públicos de Chile curados, normalizados y validados: geografía, demografía, economía, salud, educación y distritos electorales. Listos para consumir en una línea de código con Polars, DuckDB, SQLite y Excel.

12 hours ago

Bandera de Chile chile-hub

Datos públicos de Chile, curados y listos para análisis en una línea de código.

La última milla de los datos oficiales de Chile — parte del ecosistema Tooltician.

CI/CD</a> PyPI version</a> PyPI downloads</a> Coverage</a> Data</a> License: MIT</a> DOI</a> ![Python]() ![Datasets]()

Instalación · Confianza · Capas · Recetas · API y CLI · Licencias

Landing de chile-hub: capas de datos de Chile listas para consumir


Instalar y usar en 30 segundos

pip install chile-hub
from chile_hub import ChileHub

hub = ChileHub() comunas = hub.load_polars("comunas") # 346 comunas, códigos CUT como texto censo = hub.load_polars("censo_comunal") # población censada por comuna

Cruce territorial garantizado: la clave es el CUT, nunca un int

df = ( comunas.join(censo, on="codigo_comuna") .select("codigo_comuna", "nombre_comuna", "nombre_region", "poblacion_censada") .sort("poblacion_censada", descending=True) .head(5) ) print(df)

Resultado real (Censo 2024):

shape: (5, 4)
┌───────────────┬───────────────┬─────────────────────────────────┬───────────────────┐
│ codigo_comuna ┆ nombre_comuna ┆ nombre_region                   ┆ poblacion_censada │
│ ---           ┆ ---           ┆ ---                             ┆ ---               │
│ str           ┆ str           ┆ str                             ┆ i64               │
╞═══════════════╪═══════════════╪═════════════════════════════════╪═══════════════════╡
│ 13201         ┆ Puente Alto   ┆ Región Metropolitana de Santia… ┆ 568086            │
│ 13119         ┆ Maipú         ┆ Región Metropolitana de Santia… ┆ 503635            │
│ 13101         ┆ Santiago      ┆ Región Metropolitana de Santia… ┆ 438856            │
│ 02101         ┆ Antofagasta   ┆ Región de Antofagasta           ┆ 401096            │
│ 13110         ┆ La Florida    ┆ Región Metropolitana de Santia… ┆ 374836            │
└───────────────┴───────────────┴─────────────────────────────────┴───────────────────┘

En el sitio puedes consultar los mismos Parquet con SQL en el navegador (motor DuckDB-WASM, sin instalar nada):

!Demo del explorador SQL de chile-hub

La primera ejecución descarga el bundle validado desde GitHub Releases, verifica su integridad SHA256 y lo deja en cache local; a partir de ahí todo corre contra el cache. La comprobación semanal de novedades no envía datos de uso y se desactiva con CHILE_HUB_NO_UPDATE_CHECK=1 (CHILE_HUB_LANG=es|en elige el idioma del aviso).

chile-hub cache update     # Forzar descarga del bundle más reciente
chile-hub cache status     # Ubicación y estado del cache local
chile-hub cache clear      # Liberar espacio
Variante pipeline: pip install chile-hub[pipeline] agrega DuckDB, Pandas,
XlsxWriter y curl_cffi para ejecutar el pipeline completo de extracción y build.
La instalación mínima solo incluye Polars, PyArrow, requests y platformdirs —
suficiente para consumir datos.
[!NOTE]
chile-hub no busca "tener todos los datos de Chile". Busca **reducir drásticamente
el costo técnico** de encontrar, limpiar, validar, cruzar y consumir datasets
geográficos, demográficos, electorales y económicos críticos de Chile.
> Tampoco es un portal ni una fuente oficial: trabaja aguas abajo de
datos.gob.cl y de las instituciones que publican cada dato,
y siempre enlaza a la fuente oficial. Es un proyecto independiente, sin afiliación con
esas instituciones. Misión y principios: docs/product-spec.md.
> En la práctica, responde preguntas como:
> - ¿Cómo cruzo mi base de clientes, escuelas o centros de salud con comunas oficiales sin perder ceros en los códigos?
- ¿Qué comunas concentran población censada, establecimientos públicos o indicadores urbanos?
- ¿Cómo llevo datos oficiales a Polars, DuckDB, SQLite, Excel o CI sin depender de enlaces cambiantes?

Versionado: Para entornos productivos, fija la versión exacta en requirements.txt
(revisa el badge de PyPI al inicio de este README para la versión más reciente):
> chile-hub==1.44.0
>
El bundle de datos se publica con cada release. La API del módulo ChileHub sigue
versionado semántico: cambios de interfaz pública solo en _major releases_.


Por qué confiar

Cada decisión de ingeniería de este proyecto está diseñada para que **no tengas que confiar ciegamente**: los datos vienen con la evidencia que los respalda.

Trabajar con datos públicos chilenos suele implicar los mismos obstáculos:

| Sin chile-hub | Con chile-hub | |:---|:---| | Enlaces rotos y APIs inconsistentes | Pipeline automatizado con fallbacks y verificación de integridad | | Planillas Excel deformes con celdas combinadas | Parquet, DuckDB y JSON listos para producción | | Códigos CUT que pierden ceros al leerse como int | CUT garantizados como VARCHAR de largo fijo ("01101") | | Nombres de comunas imposibles de cruzar (_Ñuñoa_ vs _Nunoa_) | Columna nombre_comuna_clean normalizada para cruces exactos | | Cero trazabilidad sobre origen y vigencia del dato | Metadatos con fuente, fecha de extracción, licencia y modo |

Seis pilares, auditables y verificables en cada build

| Pilar | Descripción | Artefacto auditable | |:---|:---|:---| | Procedencia documentada | Cada dataset declara su fuente oficial exacta con URL directa al organismo público emisor (BCN, INE, MINEDUC, BCCh, MINSAL, datos.gob.cl). | provenance_report.md — fuente, modo y timestamp por capa | | Auditoría legal explícita | Licencia, atribución requerida y permiso de redistribución verificados dataset por dataset. 22 de 22 capas pasan la auditoría (ready). | redistribution_report.md + AGENTS.md §6 | | Pipeline fail-loud | Si una validación falla, el pipeline aborta — no publica datos corruptos, no emite advertencias silenciosas. | ADR-001 — fail-loud como decisión de arquitectura | | Contratos de esquema | 25 contratos JSON Schema (contracts/datasets/) definen columnas esperadas, tipos, claves primarias y cobertura. Se validan en cada build automáticamente. | ADR-005 + contracts/datasets/*.json | | Salud transparente | Dashboard público con severidad, frescura, cobertura, drift y degradación por dataset. 20 capas ok, 1 warn, 0 error. | hub_health.md — estado completo actualizado en cada build | | Calidad medida | Puntuación compuesta A-F por dataset: promedio 94.0/100 (19 A, 3 B). Dimensiones: validación, contrato, madurez de fuente, frescura, cobertura, política de reúso. | dataset_quality.md — scorecard completo |

Cada pilar se audita automáticamente en cada ejecución del pipeline. Los reportes se regeneran en cada build — no son documentos estáticos mantenidos a mano. Para auditar el estado exacto de cualquier capa:

chile-hub provenance   # fuente, modo y timestamp por dataset
chile-hub health       # severidad, frescura, drift y cobertura

El mismo estado se publica en el sitio, con historial de builds y detalle por capa:

!Estado operativo del hub

Respaldo adicional

  • 1147 tests (pytest --collect-only) que validan extracción, contratos e integridad de datos.
  • 23 ADRs (docs/adr/) que documentan cada decisión de arquitectura con su contexto, consecuencias y tradeoffs — no solo el "qué", sino el "por qué".
  • Drift monitoreado: todos los datasets bajo vigilancia de deriva de esquema; cualquier
cambio en la fuente se detecta y registra (drift_report.md).
  • Trazabilidad completa: cada build registra timestamp, versión de extractor y
snapshot de entrada en provenance_report.md.

Para una explicación más detallada de la arquitectura y las decisiones de diseño,
lee el caso de estudio: cómo está construido chile-hub.

Qué incluye

Cómo leer los conteos: 22 capas construibles (make build local, incl. 1 en carril
candidate) · 21 publicables (bundle ZIP) · 25 registradas en el catálogo (3 filas sin
datos aún: geometría, delincuencia, autoridades locales). La convención completa vive
junto al badge superior y en data/source_registry.json.

!Catálogo de capas publicado en el sitio

Mapa territorial interactivo: las 346 comunas con 7 métricas seleccionables (población, pobreza, permisos, equipamiento, MP2.5) y ficha por comuna.

!Mapa territorial interactivo de chile-hub

| # | Capa | Registros | Modo | Fuente | Licencia | Actualización | |:--:|:---|:---|:--:|:---|:---|:--:| | 1 | Regiones | 16 | live | BCN ArcGIS | CC BY | — | | 2 | Provincias | 56 | live | BCN ArcGIS | CC BY | — | | 3 | Comunas | 346 | live | BCN ArcGIS | CC BY | — | | 4 | Comunas Enriquecidas | 346 | live | BCN + INE | CC BY | — | | 5 | Indicadores Económicos | Serie histórica | live | BCCh / mindicador.cl | Libre c/cita | Diaria | | 6 | Censo Comunal 2024 | 346 | live | INE | CC BY 4.0 | Decenal | | 7 | Censo Hogares y Viviendas | 346 | live | INE | CC BY 4.0 | Decenal | | 8 | Establecimientos de Salud | 5743 | live | MINSAL / datos.gob.cl | CC0 | Mensual | | 9 | Distritos Electorales | 346 | live | BCN / Ley 20.840 | CC0 | — | | 10 | Establecimientos Educacionales | ~12 898 | live | MINEDUC | CC BY 3.0 CL | Anual | | 11 | Finanzas Municipales | 345 (parcial) | parcial | SINIM / SUBDERE | Revisión términos | Anual | | 12 | Resultados Educacionales | 345 | live | MINEDUC | CC BY 3.0 CL | Anual | | 13 | Indicadores Urbanos SIEDU | 6 701 (parcial) | live | INE / SIEDU | Datos abiertos INE | Anual | | 14 | Perfil Territorial Comunal | 346 | live | chile-hub derivado | Fuentes abiertas | Derivada | | 15 | Empresas (RES) | ~1 628 433 | live | Min. Economía / datos.gob.cl | CC-BY 3.0 CL | Mensual | | 16 | Pobreza Comunal (SAE) | 690 | live | MDS / Observatorio Social | Datos abiertos MDS | Bienal/trienal | | 17 | Consumo Eléctrico Comunal | 3 | fallback | CNE / Energía Abierta | CC BY | Anual | | 18 | Partidos Políticos | 37 | live | Cámara de Diputados | CC BY | Bajo_demanda | | 19 | Autoridades Electas | 205 | live | Cámara de Diputados + Senado | CC BY | Bajo_demanda | | 20 | Estadísticas Vitales | 13 840 | live | INE | CC BY 4.0 | Anual | | 21 | Permisos de Edificación | 8 650 | monthly | MINVU / CEDOC | Uso c/cita | Mensual | | 22 | Calidad del Aire | 3 020 | live | MMA / SINCA | Revisión términos | Diaria | | 23 | geometria_comunal | — | candidato | — | — | — | | 24 | Delincuencia Comunal | — | deprecated | CEAD / SPD | Revisión términos | — | | 25 | Autoridades Locales | — | candidato | BCN SIIT + Wikipedia | CC BY / CC BY-SA | — |

live: datos extraídos directamente desde la fuente oficial en cada ejecución del pipeline.
fallback: datos servidos desde un respaldo curado mientras se completa la extracción en vivo.
parcial: cobertura inferior al 50% del universo esperado. Capa candidata, no completa.
candidato: capa en carril candidate — extractor implementado, datos no incluidos en el bundle público.
deprecated: capa degradada a rechazada — sin mantención ni bundle; su doc queda como referencia histórica.
Para auditar el estado exacto de cada capa: chile-hub provenance y chile-hub health.

El schema de columnas, tipos y PK de cada capa vive en contracts/datasets/ y en docs/datasets/; el volcado completo está en el apéndice.

Formatos de salida

Cada ejecución del pipeline genera en data/normalized/:

| Tipo | Archivo | Uso | |:---|:---|:---| | Base de datos | chile_data.duckdb | Analítica local de alto rendimiento | | Base de datos | chile_data.db | SQLite para aplicaciones embebidas | | Intercambio | *.parquet por capa | Polars / Pandas / DuckDB | | Intercambio | *.json por capa | Pipelines y automatización | | Intercambio | chile_data_latest.xlsx | Excel multipestaña (códigos CUT como texto) | | Metadatos | artifact_manifest.json, hub_health., dataset_status.json, dataset_changelog.json, dataset_catalog., provenance_report., redistribution_report. | Catálogo físico, salud, changelog y auditoría | | Bundle | chile-hub-publishable-bundle.zip | Paquete público con verificación SHA256 |


Recetas de uso

¿Prefieres notebooks? Las cuatro recetas están en examples/notebooks/ con botón de Colab, o ejecutables en el explorador SQL del sitio.

1. Últimos indicadores económicos disponibles

from chile_hub import ChileHub

df = ChileHub().load_polars("indicadores") ultimos = ( df.sort("fecha", descending=True) .group_by("codigo_indicador") .first() .select("codigo_indicador", "fecha", "valor") .sort("codigo_indicador") ) print(ultimos)

2. Salud y educación por comuna

from chile_hub import ChileHub

hub = ChileHub() salud = hub.load_polars("establecimientos_salud") educacion = hub.load_polars("establecimientos_educacionales")

salud_por_comuna = salud.group_by("codigo_comuna").len("establecimientos_salud") educacion_por_comuna = educacion.group_by("codigo_comuna").len("establecimientos_educacionales")

resumen = ( hub.load_polars("comunas") .join(salud_por_comuna, on="codigo_comuna", how="left") .join(educacion_por_comuna, on="codigo_comuna", how="left") .fill_null(0) .select( "codigo_comuna", "nombre_comuna", "establecimientos_salud", "establecimientos_educacionales" ) ) print(resumen.head())

3. SQL directo con DuckDB

-- Top 10 comunas por población censada
SELECT nombre_comuna, poblacion_censada, hombres, mujeres
FROM 'data/normalized/censo_comunal.parquet'
ORDER BY poblacion_censada DESC
LIMIT 10;

-- Cruce territorial: comunas × distritos electorales SELECT c.nombre_comuna, c.nombre_region, e.distrito_electoral, e.circunscripcion_senatorial FROM 'data/normalized/comunas.parquet' c JOIN 'data/normalized/distritos_electorales.parquet' e ON c.codigo_comuna = e.codigo_comuna WHERE c.nombre_region = 'Valparaíso';


API y CLI

API Python compacta

| API | Uso | |:---|:---| | ChileHub() | Inicializa el helper; descarga y verifica el bundle si no hay cache local. | | ChileHub(data_dir="data/normalized") | Usa artefactos locales generados por el pipeline. | | hub.list_datasets() | Lista los nombres canónicos disponibles para load_polars(). | | hub.load_polars("comunas") | Carga una capa como polars.DataFrame desde Parquet. | | hub.summary() / hub.summary_table() | Resume modo de fuente, filas, validación, frescura y warnings. | | hub.health() / hub.status() | Reporta salud operativa para personas y CI/CD. | | hub.redistribution() | Expone estado legal de reúso y atribución por dataset. | | hub.provenance() | Muestra fuente, URL, modo de extracción y timestamps. | | chile-hub cache update/status/clear | Administra el cache local del bundle publicado. |

¿Construyes agentes? El proyecto incluye un servidor MCP con catálogo,
consultas y salud para que tu agente consuma los datos sin integraciones
propias: docs/mcp.md.

CLI: los comandos más usados

| Comando | Para qué | |:---|:---| | chile-hub list | Lista todos los datasets registrados. | | chile-hub show | Schema y metadatos detallados de una capa. | | chile-hub example --kind duckdb | Receta de consumo lista para copiar y pegar. | | chile-hub cross | Cruza dos datasets por clave territorial común. | | chile-hub export --output archivo | Exporta un dataset a CSV, JSON o Parquet. | | chile-hub health | Reporte consolidado de salud del hub. | | chile-hub status | JSON ultraliviano para CI/CD. | | chile-hub provenance | URLs de origen y métodos de extracción. | | chile-hub redistribution | Reporte legal de reúso por capa. | | chile-hub dataset-quality | Puntuación de calidad A-F por dataset. | | chile-hub --help | Listado completo y siempre actualizado. |

Referencia completa de CLI


Inspección y consulta

| Comando | Descripción | |:---|:---| | chile-hub list | Lista todos los datasets registrados | | chile-hub version | Muestra la versión instalada del paquete | | chile-hub cache status | Muestra ubicación y estado del cache local | | chile-hub cache update | Descarga y verifica el bundle publicado | | chile-hub cache clear | Elimina el cache local | | chile-hub show | Schema y metadatos detallados de una capa | | chile-hub path --output parquet | Ruta física al archivo de una capa | | chile-hub example --kind duckdb | Receta de consumo lista para copiar y pegar | | chile-hub overview | Resumen general del build y estado actual | | chile-hub inventory | Archivos en data/normalized/ con tamaños y hashes | | chile-hub snapshot | Snapshot humano y compacto del hub | | chile-hub summary | Resumen breve de datasets | | chile-hub search | Busca datasets por keyword, fuente o madurez | | chile-hub cross | Cruza dos datasets por clave territorial común | | chile-hub export --output archivo | Exporta un dataset a CSV, JSON o Parquet |

Calidad, salud y auditoría

| Comando | Descripción | |:---|:---| | chile-hub health | Reporte consolidado de salud del hub | | chile-hub freshness-audit | Auditoría de frescura contra el reloj actual | | chile-hub runtime-status | Salud registrada + vigencia en vivo | | chile-hub top-issue | Capa con mayor degradación operativa | | chile-hub drift | Desvíos, fallbacks activos y regresiones | | chile-hub status | JSON ultraliviano para CI/CD | | chile-hub dataset-status | Estado detallado machine-readable por dataset | | chile-hub dataset-changelog | Cambios entre el build actual y el metadata anterior | | chile-hub source-readiness | Madurez de fuente por dataset | | chile-hub dataset-quality | Puntuación de calidad A-F por dataset | | chile-hub check-sources | Verifica conectividad en vivo con las fuentes oficiales | | chile-hub validate | Valida un dataset (o un CSV/Parquet propio) contra su schema |

Distribución e integridad

| Comando | Descripción | |:---|:---| | chile-hub bundle | Metadata consolidada en un solo JSON | | chile-hub redistribution | Reporte legal de reúso por capa | | chile-hub provenance | URLs de origen y métodos de extracción | | chile-hub verify-package | Instrucción de verificación de integridad del ZIP | | chile-hub artifacts | Artefactos publicables del hub | | chile-hub shared-artifacts | Artefactos compartidos del hub (reportes, manifest) | | chile-hub reports | Lista los reportes compartidos disponibles | | chile-hub report | Resuelve la metadata de un reporte compartido | | chile-hub packages | Paquetes publicables del hub | | chile-hub package | Metadata del package principal del hub |

En entorno de desarrollo, usa python -m chile_hub o python -m src.chile_hub
como alternativa al comando chile-hub si el paquete no está instalado en modo editable.


Cómo funciona

El pipeline es lineal, determinista y estricto: si una validación falla, el build se cancela antes de publicar datos corruptos.

flowchart TB
    classDef extract fill:#e0f2fe,stroke:#0284c7,stroke-width:2px,color:#0f172a;
    classDef stage fill:#ecfeff,stroke:#0891b2,stroke-width:2px,color:#0f172a;
    classDef build fill:#fef9c3,stroke:#ca8a04,stroke-width:2px,color:#0f172a;
    classDef verify fill:#f0fdf4,stroke:#16a34a,stroke-width:2px,color:#0f172a;
    classDef test fill:#fae8ff,stroke:#c084fc,stroke-width:2px,color:#0f172a;
    classDef publish fill:#ffe4e6,stroke:#f43f5e,stroke-width:2px,color:#0f172a;

subgraph EXTRACT["1. EXTRACT - fuentes oficiales"] direction TB X1["Territorio<br/>BCN / SERVEL"]:::extract X2["Demografía 2024<br/>INE"]:::extract X3["Servicios públicos<br/>MINSAL / MINEDUC"]:::extract X4["Economía<br/>BCCh / SINIM / RES"]:::extract X5["Indicadores urbanos<br/>SIEDU"]:::extract end

S["data/staging/<br/>CSV + metadata.json"]:::stage B["2. BUILD<br/>build_dev_db.py"]:::build N["data/normalized/<br/>artefactos publicables"]:::stage V["3. VERIFY<br/>verify_pipeline.py"]:::verify T["4. TEST<br/>pytest"]:::test L["5. SMOKE + PUBLISH<br/>landing + bundle"]:::publish

X1 --> S X2 --> S X3 --> S X4 --> S X5 --> S S --> B --> N --> V --> T --> L

[!IMPORTANT]
Invariante crítica: El pipeline aborta si la cardinalidad de comunas ≠ 346, si los códigos CUT pierden el formato VARCHAR, o si alguna regla de negocio se rompe. Nunca se publican datos corruptos.

Extractores incluidos en el paso 1

| Dominio | Extractores | |:---|:---| | Territorio | subdere_extractor.py, electoral_extractor.py, geometria_comunal_extractor.py | | Demografía | censo_extractor.py, censo_hogares_viviendas_extractor.py, pobreza_extractor.py, estadisticas_vitales_extractor.py | | Servicios públicos | salud_extractor.py, mineduc_establecimientos_extractor.py, mineduc_resultados_extractor.py | | Economía | bcentral_extractor.py, sinim_finanzas_extractor.py, sinim_finanzas_live_extractor.py, res_extractor.py, consumo_electrico_extractor.py, permisos_edificacion_extractor.py | | Indicadores urbanos | siedu_extractor.py | | Medio ambiente | calidad_aire_extractor.py | | Política | partidos_politicos_extractor.py, autoridades_electas_extractor.py, autoridades_locales_extractor.py | | Seguridad (carril candidate) | cead_delincuencia_live_extractor.py | | Derivado en build_dev_db.py (sin extractor) | perfil_territorial_comunal |

El mapeo autoritativo entre dataset y extractor vive en
data/dataset_catalog_config.json; esta tabla
es solo orientativa. Detalle completo en AGENTS.md §2.

Modelo de datos: códigos CUT

El valor central de chile-hub es que todas las capas se vinculan jerárquicamente mediante los Códigos Únicos Territoriales (CUT) de SUBDERE/INE:

flowchart TB
    R["Territorio base<br/><b>REGIONES</b><br/>codigo_region"]
    P["<b>PROVINCIAS</b><br/>codigo_provincia + codigo_region"]
    C["<b>COMUNAS</b><br/>codigo_comuna + codigo_provincia + codigo_region"]
    L["Capas comunales<br/>codigo_comuna<br/>censo · hogares · salud<br/>educación · distritos · enriquecimiento"]

R --> P --> C --> L

| Grupo | Clave principal | Capas | |:---|:---|:---| | Territorio base | codigo_region, codigo_provincia, codigo_comuna | regiones, provincias, comunas | | Capas comunales | codigo_comuna | censo, hogares y viviendas, salud, educación, distritos electorales, pobreza, permisos de edificación, calidad del aire, estadísticas vitales, perfil territorial y más | | Series temporales | fecha o anio + clave propia | indicadores, calidad_aire, permisos_edificacion | | Registros | clave propia | empresas (RUT), partidos_politicos, autoridades_electas |

El diagrama entidad-relación completo está en el apéndice.


Próximos pasos

El roadmap actual prioriza crecer en usabilidad y confianza antes que agregar más capas.

| Horizonte | Foco | Entregable | Estado | |:---|:---|:---|:---:| | Now | Ejemplos, notebooks, errores claros, referencia API | Usuarios cargan y cruzan datos sin leer el pipeline completo | En progreso | | Next | Contratos de schema, source readiness, criterios públicos | Contribuidores proponen datasets con reglas claras y verificables | Planeado | | Later | Nuevas capas solo si pasan criterios de inclusión | El catálogo crece sin perder mantenibilidad ni claridad legal | Futuro |

Especificación completa: docs/product-spec.md
Criterios de inclusión: docs/dataset-inclusion-criteria.md
Estado del último build: data/normalized/pipeline_status.md

Desarrollo y contribución

¿Quieres aportar o pedir un dataset?

No necesitas saber programar ni traer los datos limpios: basta con la fuente y para qué sirve (o la necesidad, si solo quieres pedirlo). La guía de 2 minutos y los dos formularios están en Aportar o solicitar un dataset (criterios completos).

Desarrollar el pipeline

Esta sección es para contribuidores que ejecutan el pipeline de extracción, build y verificación en su máquina. Si solo necesitas consumir los datos, usa pip install chile-hub (ver Instalación).

# Entorno
git clone https://github.com/cortega26/chile-hub.git
cd chile-hub
make bootstrap          # Crea .venv, instala dependencias + Playwright
make doctor             # Verifica versión de Python y dependencias críticas

Pipeline completo

make refresh # extract → build → verify → test → landing

Pasos individuales

make extract # Ejecuta los extractores → data/staging/ make build # Compila artefactos → data/normalized/ make verify # Verifica integridad (SHA256, conteos, schema) make test # pytest (lee data/normalized/, no corre el pipeline) make coverage # pytest + cobertura de src/ (term-missing + coverage.xml) make verify-landing # Pruebas de humo de landing page con Playwright

Para entender la arquitectura, las reglas no negociables y el flujo de trabajo, revisa AGENTS.md; el punto de partida rápido es SOURCE_OF_TRUTH.md.

¿Encontraste un error o tienes un caso de uso? Abre un issue — ayuda a priorizar el roadmap.


Fuentes, licencias y reúso

Semáforo de redistribución

| Semáforo | Estado | Licencia típica | Acción | |:---:|:---|:---|:---| | Verde | open-attribution | CC BY, CC0 o equivalente | Se incluye en el bundle público | | Amarillo | public-api-review-terms | API pública sin licencia explícita | Se distribuye tras verificar el origen primario | | Rojo | restricted | Derechos de autor, Ley 19.628 | Nunca se integra al bundle público |

Licencia del proyecto

El código Python se distribuye bajo MIT. Los datasets conservan las licencias, permisos y requisitos de atribución de sus fuentes oficiales. Consulta DATA_LICENSES.md, chile-hub redistribution y chile-hub provenance antes de redistribuir artefactos derivados.

Cómo citar

Si usas chile-hub en un paper, tesis, curso o informe, cita el software y atribuye la fuente de cada capa. GitHub muestra el botón **"Cite this repository"** a partir de CITATION.cff; las recetas BibTeX/APA y la ruta para un DOI Zenodo están en docs/citation.md.


Apéndice: esquemas y modelo de datos

Schema completo de cada capa


1. regiones — Capa derivada de regiones para filtros, joins y referencias administrativas de alto nivel. (PK: codigo_region) | Columna | Tipo | Ejemplo | |:---|:---|:---| | codigo_region | VARCHAR(2) | "01" | | nombre_region | VARCHAR | "Tarapacá" |

2. provincias — Capa derivada de provincias para cruces intermedios entre region y comuna. (PK: codigo_provincia) | Columna | Tipo | Ejemplo | |:---|:---|:---| | codigo_region | VARCHAR(2) | "01" | | nombre_region | VARCHAR | "Tarapacá" | | codigo_provincia | VARCHAR(3) | "011" | | nombre_provincia | VARCHAR | "Iquique" |

3. comunas — Base territorial normalizada para cruces por region, provincia y comuna. (PK: codigo_comuna) | Columna | Tipo | Ejemplo | |:---|:---|:---| | codigo_comuna | VARCHAR(5) | "01101" | | nombre_comuna | VARCHAR | "Iquique" | | nombre_comuna_clean | VARCHAR | "iquique" | | codigo_provincia | VARCHAR(3) | "011" | | codigo_region | VARCHAR(2) | "01" | | nombre_region | VARCHAR | "Tarapacá" | | latitud_cabecera | DOUBLE | -20.2138 | | longitud_cabecera | DOUBLE | -70.1508 | | poblacion_estimada | INTEGER | 223400 |

4. comunas_enriquecidas — Comunas con coordenadas de cabecera y poblacion estimada INE, listas para analisis territorial sin joins adicionales. (PK: codigo_comuna) | Columna | Tipo | Ejemplo | |:---|:---|:---| | codigo_comuna | VARCHAR(5) | "01101" | | nombre_comuna | VARCHAR | "Iquique" | | nombre_comuna_clean | VARCHAR | "iquique" | | codigo_provincia | VARCHAR(3) | "011" | | codigo_region | VARCHAR(2) | "01" | | latitud_cabecera | DOUBLE | -20.2138 | | longitud_cabecera | DOUBLE | -70.1508 | | poblacion_estimada | INTEGER | 223400 |

5. indicadores — Serie de indicadores economicos diarios de referencia para analisis y software. (PK: fecha, codigo_indicador) | Columna | Tipo | Ejemplo | |:---|:---|:---| | fecha | DATE | "2026-05-30" | | codigo_indicador | VARCHAR | "uf" | | valor | DOUBLE | 39420.5 |

6. censo_comunal — Perfil demografico comunal del Censo 2024 con sexo y grandes grupos de edad. (PK: codigo_comuna) | Columna | Tipo | Ejemplo | |:---|:---|:---| | codigo_region | VARCHAR(2) | "01" | | codigo_provincia | VARCHAR(3) | "011" | | codigo_comuna | VARCHAR(5) | "01101" | | nombre_comuna | VARCHAR | "Iquique" | | poblacion_censada | INTEGER | 223400 | | hombres / mujeres | INTEGER | "111200 / 112200" | | razon_hombre_mujer | DOUBLE | 99.11 | | poblacion_0_14 … poblacion_65_mas | INTEGER | "5 tramos etarios" |

7. censo_hogares_viviendas — Viviendas y hogares censados por comuna, ocupacion y tamano medio del hogar. (PK: codigo_comuna) | Columna | Tipo | Ejemplo | |:---|:---|:---| | codigo_comuna | VARCHAR(5) | "01101" | | viviendas_censadas | INTEGER | 85000 | | viviendas_particulares_ocupadas | INTEGER | 75000 | | viviendas_colectivas | INTEGER | 200 | | hogares_censados | INTEGER | 73000 | | promedio_personas_hogar | DOUBLE | 3.06 |

8. establecimientos_salud — Directorio vigente de establecimientos de salud con tipo, dependencia, urgencia y ubicacion. (PK: codigo_establecimiento) | Columna | Tipo | Ejemplo | |:---|:---|:---| | codigo_establecimiento | VARCHAR | "101101" | | nombre_establecimiento | VARCHAR | "Hospital Dr. Ernesto Torres Galdames" | | tipo_establecimiento | VARCHAR | "Hospital" | | nivel_atencion | VARCHAR | "Alta Complejidad" | | codigo_comuna | VARCHAR(5) | "01101" | | tiene_servicio_urgencia | VARCHAR | "SI" / "NO" | | latitud / longitud | DOUBLE | "Coordenadas geográficas" | | estado_funcionamiento | VARCHAR | "Vigente" |

9. distritos_electorales — Asociación de comunas a distritos electorales (diputados) y circunscripciones senatoriales. (PK: codigo_comuna) | Columna | Tipo | Ejemplo | |:---|:---|:---| | codigo_comuna | VARCHAR(5) | "01101" | | nombre_comuna | VARCHAR | "Las Condes" | | distrito_electoral | VARCHAR | "10" | | circunscripcion_senatorial | VARCHAR | "3" |

10. establecimientos_educacionales — Directorio oficial del Ministerio de Educación (MINEDUC) con Rol Base de Datos (RBD), ubicación y dependencia administrativa. (PK: rbd) | Columna | Tipo | Ejemplo | |:---|:---|:---| | rbd | VARCHAR | "1234-5" | | dv_rbd | VARCHAR | "4" | | nombre_establecimiento | VARCHAR | "Liceo Abate Molina" | | codigo_comuna | VARCHAR(5) | "01101" | | dependencia_administrativa | VARCHAR | "Municipal" | | latitud / longitud | DOUBLE | "Coordenadas geográficas" | | estado_funcionamiento | VARCHAR | "Vigente" |

11. finanzas_municipales — Indicadores financieros municipales anuales desde SINIM/SUBDERE. CAPA PARCIAL/CANDIDATO: 3 de 346 comunas (0.9%). Usar con precaución; no representa cobertura nacional. (PK: anio, codigo_comuna) | Columna | Tipo | Ejemplo | |:---|:---|:---| | anio | INTEGER | 2024 | | codigo_comuna | VARCHAR(5) | "01101" | | ingresos_totales / gastos_totales | DOUBLE | 245000000000.0 | | ingresos_propios_permanentes | DOUBLE | 162000000000.0 | | fondo_comun_municipal | DOUBLE | 39000000000.0 |

12. resultados_educacionales — Resultados educacionales agregados por comuna y año, sin registros personales. (PK: anio, codigo_comuna) | Columna | Tipo | Ejemplo | |:---|:---|:---| | anio | INTEGER | 2024 | | codigo_comuna | VARCHAR(5) | "01101" | | matricula_total | INTEGER | 122000 | | asistencia_promedio | DOUBLE | 86.2 | | tasa_aprobacion / tasa_retiro | DOUBLE | "91.4 / 4.5" |

13. indicadores_urbanos_siedu — Indicadores urbanos SIEDU en formato largo con cobertura comunal parcial esperada. (PK: anio, codigo_comuna, codigo_indicador) | Columna | Tipo | Ejemplo | |:---|:---|:---| | anio | INTEGER | 2024 | | codigo_comuna | VARCHAR(5) | "01101" | | codigo_indicador | VARCHAR | "siedu_acceso_areas_verdes" | | categoria | VARCHAR | "Espacio publico" | | valor / unidad | DOUBLE | "71.4 / "porcentaje" |

14. perfil_territorial_comunal — Perfil comunal curado que consolida DPA, censo, salud, educación, finanzas, SIEDU y distritos. (PK: codigo_comuna) | Columna | Tipo | Ejemplo | |:---|:---|:---| | codigo_comuna | VARCHAR(5) | "01101" | | poblacion_censada | INTEGER | 223400 | | establecimientos_salud_total | INTEGER | 140 | | establecimientos_educacionales_total | INTEGER | 410 | | distrito_electoral | VARCHAR | "10" | | crecimiento_natural_ultimo_anio | INTEGER | 12 | | anio_estadisticas_vitales | INTEGER | 2023 | | viviendas_autorizadas_ultimo_anio | INTEGER | 2451 | | superficie_autorizada_m2_ultimo_anio | INTEGER | 187320 | | anio_permisos_edificacion | INTEGER | 2023 | | mp25_promedio_ultimo_anio | DOUBLE | 18.4 | | anio_calidad_aire | INTEGER | 2026 |

15. empresas — Registro de Empresas y Sociedades (RES) con RUT, razon social, tipo societario, capital, fecha de constitucion y comuna de domicilio. (PK: rut) | Columna | Tipo | Ejemplo | |:---|:---|:---| | rut | VARCHAR | "76286049-K" | | razon_social | VARCHAR | "COMERCIALIZADORA EJEMPLO SPA" | | codigo_sociedad | VARCHAR | "SPA" | | capital | INTEGER | 5000000 | | fecha_actuacion | DATE | "2020-06-15" | | anio | INTEGER | 2020 | | comuna_tributaria | VARCHAR | "SANTIAGO" | | region_tributaria | VARCHAR | "13" |

16. pobreza_comunal — Estimaciones de pobreza comunal por ingresos y multidimensional derivadas de la encuesta CASEN mediante metodología SAE (Estimación de Áreas Pequeñas). Incluye tasa, límite inferior y superior del intervalo de confianza por comuna, año y dimensión. (PK: codigo_comuna, anio, dimension) | Columna | Tipo | Ejemplo | |:---|:---|:---| | codigo_region | VARCHAR(2) | "01" | | codigo_comuna | VARCHAR(5) | "01101" | | nombre_comuna | VARCHAR | "Santiago" | | anio | INTEGER | 2022 | | dimension | VARCHAR | "ingresos" / "multidimensional" | | tasa | DOUBLE | 15.3 | | limite_inferior | DOUBLE | 12.1 | | limite_superior | DOUBLE | 18.9 | | metodologia | VARCHAR | "SAE" | | fuente | VARCHAR | "Observatorio Social — MDS" |

17. consumo_electrico_comunal — Consumo eléctrico anual por comuna y tipo de cliente (Residencial, Comercial, Industrial, Agrícola, Alumbrado Público, Otros), publicado por la Comisión Nacional de Energía (CNE) en el portal Energía Abierta. DEPRECATED: la fuente Junar de energiaabierta.cl fue decomisionada (investigado 2026-07-07); el dataset solo publica datos de muestra (FALLBACK_ROWS), no está en el bundle público. Ver data/source_registry.json. (PK: codigo_comuna, anio, tipo_cliente) | Columna | Tipo | Ejemplo | |:---|:---|:---| | codigo_region | VARCHAR(2) | "01" | | codigo_comuna | VARCHAR(5) | "01101" | | nombre_comuna | VARCHAR | "Santiago" | | anio | INTEGER | 2023 | | tipo_cliente | VARCHAR | "Residencial" | | consumo_kwh | DOUBLE | 1523400.5 | | numero_clientes | INTEGER | 45800 | | fuente | VARCHAR | "CNE — Energía Abierta" |

18. partidos_politicos — Roster de partidos políticos de Chile (Cámara de Diputadas y Diputados), con estado_legal y fecha_constitucion completados por join de nombre contra el registro público de SERVEL. (PK: id_partido) | Columna | Tipo | Ejemplo | |:---|:---|:---| | id_partido | VARCHAR | "DC" | | nombre | VARCHAR | "Partido Demócrata Cristiano" | | sigla | VARCHAR | "DC" | | estado_legal | VARCHAR | "constituido" (nulo si no matchea con SERVEL)" | | fecha_constitucion | DATE | "1988-05-02" | | ambito | VARCHAR | "null (sin fuente que lo provea)" | | fuente | VARCHAR | "Cámara de Diputadas y Diputados" |

19. autoridades_electas — Autoridades electas en ejercicio de Chile (diputados y senadores): partido, distrito electoral/circunscripción senatorial, región y período de mandato. (PK: id_autoridad) | Columna | Tipo | Ejemplo | |:---|:---|:---| | id_autoridad | VARCHAR | "diputado_1009" | | nombre | VARCHAR | "Jorge Alessandri Vergara" | | cargo | VARCHAR | "diputado" / "senador" | | institucion | VARCHAR | "Cámara de Diputadas y Diputados" / "Senado" | | partido | VARCHAR | "Unión Demócrata Independiente" | | distrito_electoral | VARCHAR | "10" (solo diputados)" | | circunscripcion_senatorial | VARCHAR | "3" (solo senadores)" | | codigo_region | VARCHAR(2) | "02" (solo senadores)" | | periodo_inicio / periodo_fin | DATE | "2026-03-11 / 2030-03-10" | | estado_mandato | VARCHAR | "vigente" |

20. estadisticas_vitales — Nacimientos y defunciones por comuna de residencia y sexo, desde los Anuarios de Estadísticas Vitales del INE (definitivos, 2010 en adelante). (PK: anio, codigo_comuna, evento, sexo) | Columna | Tipo | Ejemplo | |:---|:---|:---| | anio | INTEGER | 2023 | | codigo_region | VARCHAR(2) | "13" | | codigo_comuna | VARCHAR(5) | "13101" | | nombre_comuna | VARCHAR | "Santiago" | | evento | VARCHAR | "nacimiento" | | sexo | VARCHAR | "hombre" | | cantidad | INTEGER | 4521 | | estado_dato | VARCHAR | "definitivo" | | fuente | VARCHAR | "Instituto Nacional de Estadísticas (INE) — Estadísticas Vitales" | | url_fuente | VARCHAR | "https://www.ine.gob.cl/docs/default-source/.../2023/....xlsx" | | fecha_fuente | VARCHAR | "2026-09-14" |

21. permisos_edificacion — Viviendas en unidades y superficie (m2) por comuna y año —casas y departamentos— desde las estadísticas de permisos de edificación del CEDOC (MINVU), serie desde 2002. (PK: anio, codigo_comuna) | Columna | Tipo | Ejemplo | |:---|:---|:---| | anio | INTEGER | 2023 | | codigo_region | VARCHAR(2) | "13" | | codigo_comuna | VARCHAR(5) | "13101" | | nombre_comuna | VARCHAR | "Santiago" | | unidades_total | INTEGER | 2451 | | superficie_m2_total | INTEGER | 187320 | | unidades_casas | INTEGER | 312 | | superficie_m2_casas | INTEGER | 24810 | | unidades_departamentos | INTEGER | 2139 | | superficie_m2_departamentos | INTEGER | 162510 | | estado_dato | VARCHAR | "definitivo" | | fuente | VARCHAR | "MINVU — Centro de Estudios de Ciudad y Territorio (CEDOC)" | | url_fuente | VARCHAR | "https://catalogo.minvu.cl/cgi-bin/koha/opac-retrieve-file.pl?id=..." | | fecha_fuente | VARCHAR | "2026-09-15" |

22. calidad_aire — Promedios diarios de contaminantes atmosféricos (MP2.5, MP10, SO2, NO2, CO, O3) por estación de monitoreo, desde el SINCA (MMA). Cobertura parcial: ~65 comunas con estación. (PK: fecha, id_estacion, codigo_contaminante) | Columna | Tipo | Ejemplo | |:---|:---|:---| | fecha | VARCHAR | "2026-09-14" | | id_estacion | VARCHAR | "271" | | nombre_estacion | VARCHAR | "Quilicura" | | codigo_region | VARCHAR(2) | "13" | | codigo_comuna | VARCHAR(5) | "13144" | | nombre_comuna | VARCHAR | "Quilicura" | | latitud | DOUBLE | -33.36 | | longitud | DOUBLE | -70.73 | | codigo_contaminante | VARCHAR | "mp25" | | nombre_contaminante | VARCHAR | "MP 2,5" | | unidad | VARCHAR | "ug/m3" | | valor_promedio_diario | DOUBLE | 18.4 | | valor_max_horario | DOUBLE | 42.0 | | horas_validas | INTEGER | 24 | | estado_dato | VARCHAR | "definitivo" | | fuente | VARCHAR | "SINCA — Ministerio del Medio Ambiente" | | url_fuente | VARCHAR | "https://sinca.mma.gob.cl/index.php/json/listadomapa2k19/" | | fecha_fuente | VARCHAR | "2026-09-15" |

23. geometria_comunal — Límites poligonales de las 346 comunas de Chile (GeoParquet, geometría 'generalizada' — simplificada para cartografía a escala nacional, no apta para trabajo de precisión geodésica ni catastral). Fuente: BCN ArcGIS (tematico/Comunas_Generalizadas). Artefacto separado de comunas, unido por codigo_comuna. (en carril candidate — datos no incluidos en el bundle público) (PK: codigo_comuna) | Columna | Tipo | Ejemplo | |:---|:---|:---| | codigo_region | VARCHAR(2) | "01" | | codigo_comuna | VARCHAR(5) | "01101" | | nombre_comuna | VARCHAR | "Iquique" | | nombre_comuna_clean | VARCHAR | "iquique" | | nombre_region | VARCHAR | "Región de Tarapacá" | | geometry | BINARY | "WKB — Polygon o MultiPolygon en EPSG:4326 (WGS84), geoparquet 1.0" |

24. delincuencia_comunal — DEPRECATED 2026-09-15: Casos policiales de Delitos de Mayor Connotación Social (DMCS) y otras categorías por comuna y mes. Sin fuente estructurada oficial (solo scraping frágil) y no redistribuible; extractor neutralizado y fuera del scrape mensual. Ver docs/datasets/delincuencia_comunal.md. (en carril candidate — datos no incluidos en el bundle público) (PK: anio, mes, codigo_comuna, familia_delito) | Columna | Tipo | Ejemplo | |:---|:---|:---| | codigo_comuna | VARCHAR(5) | "01101" | | nombre_comuna | VARCHAR | "Santiago" | | anio | INTEGER | 2024 | | mes | INTEGER | 1 | | familia_delito | VARCHAR | "robos_violentos" | | casos | INTEGER | 245 |

25. autoridades_locales — Autoridades locales/subnacionales de Chile: gobernadores regionales (Wikipedia, CC-BY-SA) y alcaldes (BCN SIIT, dato público gubernamental). Wikipedia se mantiene como fuente de gobernadores y enriquecimiento opcional de periodo_inicio para alcaldes. Dataset segregado de autoridades_electas por licencia mixta. (en carril candidate — datos no incluidos en el bundle público) (PK: id_autoridad) | Columna | Tipo | Ejemplo | |:---|:---|:---| | id_autoridad | VARCHAR | "gobernador_01" | | nombre | VARCHAR | "null si no hay evidencia clara del titular" | | cargo | VARCHAR | "gobernador_regional" / "alcalde" | | codigo_region | VARCHAR(2) | "01" | | codigo_comuna | VARCHAR(5) | "01101" (solo alcaldes)" | | partido | VARCHAR | "nulo si no identificado" | | estado_mandato | VARCHAR | "vigente" / "sin_identificar" |

Diagrama entidad-relación (capas principales)

``mermaid erDiagram REGIONES { VARCHAR codigo_region PK "Ej: '01' (Tarapacá)" VARCHAR nombre_region } PROVINCIAS { VARCHAR codigo_provincia PK "Ej: '011' (Iquique)" VARCHAR codigo_region FK VARCHAR nombre_provincia } COMUNAS { VARCHAR codigo_comuna PK "Ej: '01101' (Iquique)" VARCHAR codigo_provincia FK VARCHAR codigo_region FK VARCHAR nombre_comuna VARCHAR nombre_comuna_clean "Ej: 'iquique' (sin tildes)" } COMUNAS_ENRIQUECIDAS { VARCHAR codigo_comuna PK VARCHAR nombre_comuna DOUBLE latitud_cabecera DOUBLE longitud_cabecera INTEGER poblacion_estimada } CENSO_COMUNAL { VARCHAR codigo_comuna PK INTEGER poblacion_censada INTEGER hombres INTEGER mujeres INTEGER poblacion_0_14 } CENSO_HOGARES_VIVIENDAS { VARCHAR codigo_comuna PK INTEGER viviendas_censadas INTEGER hogares_censados DOUBLE promedio_personas_hogar } ESTABLECIMIENTOS_SALUD { VARCHAR codigo_establecimiento PK VARCHAR codigo_comuna FK VARCHAR nombre_establecimiento VARCHAR tipo_establecimiento } DISTRITOS_ELECTORALES { VARCHAR codigo_comuna PK VARCHAR distrito_electoral VARCHAR circunscripcion_senatorial } ESTABLECIMIENTOS_EDUCACIONALES { VARCHAR rbd PK "Rol Base de Datos" VARCHAR codigo_comuna FK VARCHAR nombre_establecimiento

... (README truncated for length)

NeshDevTech

NeshDevTech is a professional technology firm passionate about creating innovative, high-performance web and mobile solutions.

Core Services
  • Custom Laravel Apps
  • SPA (React & Vue.js)
  • Flutter Mobile Apps
  • SEO & Performance Opt
Get in Touch
Available for Projects

Need a high-performing system? Let's discuss your project.


© 2026 NeshDevTech. All rights reserved.

Built with

Chat with me