Observatorio GEIH: cómo servir 4 años de microdatos del DANE en una app que carga al instante
El patrón de pre-agregación detrás del Observatorio GEIH — de ~2.5 GB de microdatos por año a un archivo de 0.4 MB — y el camino del software al artículo en Springer.
1. El reto: microdatos que no caben en una app
La GEIH es la encuesta con la que Colombia mide su mercado laboral, y sus microdatos públicos pesan alrededor de 2.5 GB por año. El Observatorio cubre 4 años (2022–2025) y 7 dimensiones — demografía, educación, mercado laboral, vivienda, salud, migración y datos —, con foco especial en la caracterización de la población venezolana. Cargar eso en una app Shiny alojada en el plan gratuito de shinyapps.io es directamente imposible: la app moriría antes de mostrar el primer gráfico.
2. El patrón: pre-agregar offline
La solución es no llevar los microdatos a la app. Un paso de preparación corre offline: lee los 4 años, calcula todos los indicadores por año × territorio × población, y guarda solo las tablas agregadas en un archivo .rds de ~0.4 MB — seis mil veces más pequeño que la fuente. La app solo lee y filtra ese archivo, por eso carga al instante y escala a más años sin tocar memoria. Los microdatos ni siquiera se versionan: son públicos y cualquiera puede regenerar los agregados con los scripts del repo.
# Offline (una vez por actualización): microdato -> agregados
# preparacion/agregar.R lee los 4 años y pre-agrega
# por año x territorio x población, ponderando por FEX_C18.
saveRDS(agregados, "agregados.rds") # ~0.4 MB, versionado
# En la app (cada visita): nunca se toca el microdato
agregados <- readRDS("agregados.rds")
# ... los módulos solo filtran y grafican3. El rigor: metodología DANE y auditoría
Pre-agregar solo sirve si los números son correctos. Todo indicador poblacional se pondera por el factor de expansión oficial (FEX_C18) y los conteos se expresan como promedio mensual. Cada indicador usa su unidad de análisis correcta — persona, hogar o vivienda: la tenencia de vivienda se agrega por hogar, no por persona. Las tasas laborales usan las definiciones oficiales del DANE: TGP = FT/PET, TO = OC/PET, TD = DS/FT. Y hay una red de seguridad: un script de auditoría verifica que los agregados coincidan con el microdato y que los valores caigan en los rangos oficiales.
4. De script a producto: la app modular
El Observatorio no es un script largo: cada pestaña es un módulo de Shiny independiente, con un tema de gráficos compartido que mantiene la identidad visual. La app tiene filtros por año, nivel territorial (nacional/departamental) y población (total o migrante venezolana), KPIs por sección, series de tendencia trimestrales, exportación a CSV y Excel, y está optimizada para móvil. Esa estructura modular fue lo que permitió que la v2 (de un año a cuatro) fuera una evolución y no una reescritura.
5. Del software al paper en Springer
El Observatorio terminó siendo el artefacto de un artículo de investigación en coautoría con Iván Cruz y Alic Barandica, presentado en R Day 2025 (Medellín) y publicado en Communications in Computer and Information Science (Springer). La lección que me llevo: el software reproducible es investigación — si la app respeta la metodología oficial, se audita contra la fuente y cualquiera puede regenerarla, el paso de producto a publicación académica es natural.
- 01¿Cómo servir años de microdatos en una app que carga al instante?Estás aquí
- 02¿Cómo explorar los microdatos del mercado laboral sin perderse?
- 03¿Cómo pasar del dato del ICFES a un informe institucional trazable?
- 04¿Qué patrones esconden 5,3 millones de micronegocios?
- 05¿Qué pesa de verdad en la pobreza multidimensional?
Cruz, I., Molina, D., & Barandica, A. (2026). Interactive Visualization and Analysis of Colombia's GEIH Data: A Shiny Application for Reproducible Demographic and Labor Market Research. En Communications in Computer and Information Science (pp. 139–152). Springer, Cham. https://doi.org/10.1007/978-3-032-18455-9_8
También te puede interesar
Caso de estudio: navegar los microdatos del mercado laboral colombiano
Proyecto público de portafolio: ETL con Polars sobre los microdatos de la GEIH, indicadores del mercado laboral y una app Streamlit con filtros, con la lógica cubierta por 25 pruebas en pytest.
R básico: aprende R desde cero, sin haber programado nunca
Guía de R para principiantes absolutos, en 12 pasos: qué es R y por qué aprenderlo, instalación verificada, tu primer script, objetos, tipos de datos, vectores, factores, data frames, el tidyverse, importación de datos y tu primer gráfico con ggplot2. Con errores comunes y recursos oficiales gratuitos para seguir.
Vectores: el modelo mental que sostiene todo R
El vector es la estructura central de R: cada columna, cada filtro y cada función de resumen es una operación sobre vectores. Este artículo construye el modelo mental completo: creación, las 5 formas de indexar, vectorización, el peligro del reciclaje y los modismos que usan los analistas.