# Censo Perú 2017 vs 2025 Los dos últimos censos del Perú, distrito por distrito: 60 preguntas comparables en un mapa, y todas las variables del Censo 2025 para explorar. - App: https://censo-2025.appsbi.net - Metodología: https://censo-2025.appsbi.net/metodologia/ - Datos (CSV) y código: https://censo-2025.appsbi.net/descargas/ - Autor: Oscar Salas ([@osalasmo](https://x.com/osalasmo)). Proyecto independiente, no oficial. Fuente: INEI. ``` git clone https://censo-2025.appsbi.net/repo.git censo-peru ``` ## Qué hay aquí | Ruta | Qué es | |---|---| | `scripts/redatam_2025.py` | Extractor del REDATAM del INEI: frecuencias por distrito de todas las variables, por región. Sirve para 2025 (por defecto) y 2017 (`REDATAM_URL`, `REDATAM_BASE`). Modo reparación con `REDATAM_REPARAR`. | | `scripts/validar_redatam.py` | Controles: distritos de la región, suma de distritos = total de la región, categorías de la variable. | | `scripts/cargar_redatam_duckdb.py` | Carga todo en `db/censo.duckdb` (`redatam_2017`, `redatam_2025`, `cuadros_api_2025`). | | `scripts/cuadros_api_2025.py` | Cuadros por distrito del portal Censos 2025 (API del INEI). | | `scripts/mapa_pobreza_2017.py`, `cargar_2017_duckdb.py`, `dta_a_csv.py` | Base de hogares del Censo 2017 (Mapa de Pobreza 2018, microdatos INEI) → DuckDB/CSV. | | `scripts/redatam_ica_2025.py`, `imagen_ica_tweet.py` | Primera versión (solo Ica) y la imagen del primer tweet; se dejan como historia. | | `app/construir/armonizacion.py` | **Las equivalencias 2017 ↔ 2025**: qué pregunta y qué categorías de cada censo forman cada categoría común. | | `app/construir/construir_app_db.py` | Construye `app/data/app.duckdb` (lo que lee la API). Se detiene si alguna categoría queda sin asignar. | | `app/construir/generar_metodologia.py` | Genera la página de metodología desde las equivalencias y los datos. | | `app/construir/preparar_geo.py` | Simplifica los límites distritales (limites-peru-geojson, MIT). | | `app/backend/main.py` | API FastAPI de solo lectura sobre DuckDB (`/api/docs`). También sirve el frontend. | | `app/frontend/` | React + TypeScript + Vite + MapLibre GL. | | `app/publicar_descargas.py` | Genera los ZIP con CSV y la página `/descargas/`. | | `app/desplegar.py` | Despliegue: build, subida por SSH, reinicio, repo git, descargas. | | `app/servidor/` | Configuración de nginx del sitio. | ## Fuentes y puntos de acceso del INEI | Fuente | URL | |---|---| | REDATAM Censo 2025 (`CPV2025DI`) | `https://redatamcpv2025.inei.gob.pe/bininei/RpWebStats.exe/Frequency` | | REDATAM Censo 2017 (`CPV2017DI`) | `https://censos2017.inei.gob.pe/bininei/RpWebStats.exe/Frequency` | | Portal Censos 2025 (cuadros) | `https://censos2025.inei.gob.pe/api/v1` | | Microdatos Mapa de Pobreza 2018 | `https://proyectos.inei.gob.pe/iinei/srienaho/descarga/STATA/-Modulo.zip` | **Importante:** no lances dos extracciones a la vez contra el mismo servidor REDATAM. Reutiliza archivos temporales y mezcla respuestas entre sesiones (lo detecta `validar_redatam.py`). ## Reproducir todo Requisitos: Python 3.11+, Node 20+. ```bash pip install duckdb pandas fastapi "uvicorn[standard]" # 1) Extracción (horas; se puede relanzar, retoma lo ya bajado) python scripts/redatam_2025.py peru_2025/redatam REDATAM_URL=https://censos2017.inei.gob.pe REDATAM_BASE=CPV2017DI python scripts/redatam_2025.py peru_2017/redatam python scripts/cuadros_api_2025.py peru_2025/cuadros_api # opcional # 2) Controles y reparación python scripts/validar_redatam.py peru_2025/redatam peru_2025/malas.csv REDATAM_REPARAR=peru_2025/malas.csv python scripts/redatam_2025.py peru_2025/redatam # 3) Base unificada y base de la app python scripts/cargar_redatam_duckdb.py . python app/construir/construir_app_db.py . app/data/app.duckdb python app/construir/generar_metodologia.py . # 4) App cd app/frontend && npm install && npm run build cd ../backend && uvicorn main:app --port 8540 # http://localhost:8540 ``` Atajo sin extraer: descarga `censo-app.duckdb` de la página de descargas, guárdalo como `app/data/app.duckdb` y ejecuta el paso 4. ## Desplegar en tu propio servidor `app/desplegar.py` lee el acceso SSH de un archivo `servidor.json` que **no** está en el repositorio (ver `app/servidor.ejemplo.json`). Sube backend, frontend y base; crea el entorno virtual; levanta uvicorn en el puerto 8540. nginx (`app/servidor/`) hace de proxy, sirve las descargas y el repositorio git, y certbot pone el certificado. ## Créditos Datos: INEI, Censos Nacionales 2017 y 2025 (fuente pública). Mapas: github.com/josedaniel-cb/limites-peru-geojson (MIT). Si reutilizas los datos o el código, cita al INEI y a este proyecto.