Novedades#

0.3.0 (17 de octubre de 2026)#

Al actualizar

  • La aplicación requiere Streamlit 1.51 o más reciente (pip install "dane-data[app]" lo actualiza). Con versiones anteriores, las tablas no aceptaban width="stretch" y cada gráfica mostraba un aviso de función obsoleta. Los lanzadores ya usaban una versión reciente.

  • Corregido: dd.geih.download([]) y dd.eam.download([]) descargaban la serie entera; ahora no descargan nada (None sigue siendo «todos»). Un año que no está en el ANDA, como 2030, ya no se ignora en silencio: se avisa. En dd.geih.download(), modules=[] (que bajaba todos los módulos) o un nombre mal escrito lanzan ValueError, y en la aplicación el botón de descargar se desactiva si no hay módulos elegidos.

  • EAM 2024: el archivo de Stata del ANDA ya no se convierte a TXT al descargarlo; se guarda tal cual y dd.eam.load() lo lee directamente. La conversión cambiaba los códigos por las etiquetas de valor del archivo, y cualquier variable con etiquetas quedaba como texto. Los TXT ya convertidos se siguen usando; para tener los códigos originales, borre la carpeta de 2024 y vuelva a descargar el año.

Cifras

  • Corregido: si un filtro dejaba algún mes sin ninguna persona (un grupo pequeño), el promedio mensual de los niveles se dividía por menos meses y salía más alto. Ahora un mes vacío cuenta como 0, como en el promedio de los totales mensuales del DANE, en las funciones serie_* y en dd.tabla / dd.geih.indicadores() después de dd.geih.filtrar(), que anota los meses cargados en df.attrs["meses_por_anio"]. Las tasas no cambian. Elegir meses con df[df.mes <= 3] sigue contando solo esos meses.

  • Corregido: en dd.geih.serie_indicadores(), dd.geih.serie_tabla() y dd.geih.serie_frecuencias(), un filtro de rango ({"edad": (15, 28)}) y uno de valores ({"edad": [15, 28]}) compartían la caché, así que el segundo devolvía el resultado del primero. Las cachés anteriores se recalculan solas.

  • Corregido: si un mes completo estaba en dos carpetas (por ejemplo, descomprimido dos veces), se sumaban las dos y el mes contaba doble. Ahora se usa una sola, con un aviso.

  • Corregido: con estadistico="porcentaje", las filas cuyo primer grupo estaba vacío (por ejemplo, posicion_ocupacional de quien no está ocupado) salían con porcentaje vacío en dd.tabla y dd.geih.serie_tabla(). Ahora también suman 100 %.

  • Corregido: dd.eam.crecimiento() calculaba como anual el cambio entre años no consecutivos (por ejemplo, de 2015 a 2018 si faltaban los años de en medio). Ahora esa tasa queda vacía.

  • dd.eam.deflactar() se puede aplicar dos veces seguidas (antes fallaba por la columna deflactor repetida), y un deflactor con un año repetido lanza ValueError en vez de duplicar filas en silencio.

  • Corregido: dd.geih.exportar() sin variables escribía solo anio, mes y las columnas de los filtros. Ahora escribe todas las variables armonizadas, como dice su documentación.

  • Corregido: un solo valor o nombre en vez de una lista se partía en letras. filtros={"sexo": "Mujer"} no dejaba a nadie, y columns="P6500" o modules="ocupados" no agregaban nada. Ahora valen igual que ["Mujer"], ["P6500"] o ["ocupados"] en dd.geih.load(), dd.geih.load_month(), dd.geih.filtrar(), las funciones serie_*, dd.geih.exportar() (variables="fex"), dd.eam.load() y dd.eam.deflactar().

Descargas

  • Las descargas ya no dejan archivos a medias: si se interrumpe la extracción (Ctrl+C, disco lleno), el archivo no queda con su nombre final, y un archivo de distinto tamaño que el del ZIP se vuelve a extraer. Antes, la próxima descarga daba el mes o el año por completo con los datos cortados.

  • Si un mes del paquete anual del empalme (o un ZIP anidado de un mes) no se puede abrir, el año ya no queda marcado como completo y el ZIP se borra: la próxima descarga lo vuelve a bajar.

  • Un ZIP dañado ya no se queda en disco para siempre: si lo descargado no es un ZIP válido (descarga cortada o página de error del DANE) se reintenta, y un ZIP en disco que no se puede abrir o extraer se borra y se vuelve a descargar.

  • Con la aplicación abierta, un archivo de la GEIH reemplazado en la misma carpeta (por ejemplo, un CSV dañado que se vuelve a descargar) se revisa de nuevo; antes había que reiniciar la aplicación.

  • Corregido: dd.eam.load() fallaba con AttributeError si un archivo no traía la columna de departamento; ahora departamento queda vacío.

Aplicación

  • Corregido: las páginas de la EAM en la aplicación se caían (ValueError: ... is not in iterable) cuando los años descargados no eran consecutivos, por ejemplo 2005 y 2020.

  • Corregido: en la aplicación, la página de indicadores industriales se caía con IndexError si ningún establecimiento cumplía los filtros (un sector que no hay en el departamento elegido). Ahora muestra un aviso, como las páginas de la GEIH.

  • En la aplicación, cada exportación de microdatos tiene su propio archivo (con la población y una huella de los filtros, meses y columnas en el nombre). Antes dos exportaciones de los mismos años con distinta selección se sobrescribían.

  • dane-data app --address 0.0.0.0 (para un aula) avisa al abrir que la aplicación queda en la red sin contraseña, y la documentación lo advierte. Las descargas solo siguen enlaces https del ANDA.

  • La caché ya no puede quedar a medias: dd.geih.load() también la escribe con otro nombre y la renombra al terminar, y los nombres temporales son únicos, así que dos personas usando la misma aplicación a la vez (--address 0.0.0.0) no escriben el mismo archivo. dd.geih.clear_cache() borra también los temporales que dejó una escritura interrumpida.

  • Los lanzadores para estudiantes usan siempre las versiones exactas de uv.lock (uv run --frozen).

Configuración y línea de comandos

  • dd.set_paths(..., save=True) guarda solo las carpetas de esa llamada: las fijadas antes solo para la sesión ya no se vuelven permanentes. Una carpeta vacía lanza ValueError (antes quedaba la carpeta actual, .), un config.json dañado ya no hace fallar la librería y el archivo se escribe sin quedar nunca a medias. En la aplicación, «Guardar» solo guarda las carpetas que se cambiaron, así que ya no fija en el archivo las que venían de variables de entorno.

  • Línea de comandos: dane-data descargar eam con --modulos, --empalme o --limite, o descargar geih con --tic, ya no ignora esas opciones en silencio: avisa que no aplican y no descarga. dane-data config avisa cuando una variable de entorno tiene prioridad sobre la carpeta que se acaba de guardar.

Compatibilidad

  • Con pandas 2 (Google Colab) ya no aparecen avisos FutureWarning al calcular indicadores ni al armonizar; los resultados son los mismos.

0.2.2 (15 de octubre de 2026)#

  • Documentación nueva en https://integralindefinida.github.io/DANE-data/: guía de usuario, galería de ejemplos con datos reales y referencia de la API con una página por función.

  • Todas las funciones públicas tienen docstrings completos (parámetros, lo que devuelven, ejemplos). Los ejemplos que no necesitan los microdatos se ejecutan en las pruebas.

  • Corregido: con pandas 2 (el de Google Colab), descargar o cargar 2021 fallaba con ValueError: Version of given Stata file is 110. El Stata de septiembre de 2021 viene en formato 110 (Stata 7), que pandas solo lee desde la versión 3; ahora se lee con cualquier pandas, sin perder las edades de más de 100 años.

0.2.1 (14 de octubre de 2026)#

  • dane-data está en PyPI: pip install "dane-data[app]".

  • Las funciones y las cifras son las mismas de la 0.2.0.

0.2.0 (14 de octubre de 2026)#

Si ya tenía datos de la GEIH descargados

  • Vuelva a descargar 2008, 2011 y 2021. Los CSV que publica el DANE para 2008, 2011 y septiembre de 2021 están dañados; ahora se baja otro formato del mismo catálogo (TXT o Stata). Mientras no se vuelvan a descargar, esos meses se omiten con un aviso.

La aplicación ya no se cae con muchos años

  • Todas las tablas y gráficas de la GEIH se calculan un año a la vez y quedan guardadas: con 2007–2026, la primera consulta tarda alrededor de un minuto y las siguientes son instantáneas, con menos de 1 GB de memoria.

  • En Tablas y microdatos, la pestaña de microdatos muestra un mes de ejemplo y exporta a CSV todos los meses elegidos, uno a la vez.

  • Los indicadores laborales aceptan filtros (sexo, zona, edad, departamento) y selección de meses.

  • La aplicación avisa cuando los años elegidos mezclan marcos muestrales.

Cifras

  • La desocupación, la participación, la ocupación y el número de ocupados coinciden mes a mes con los anexos del DANE de 2007 a 2026 y en la serie de empalme 2010–2020.

  • Corregido febrero de 2011: algunas personas tomaban el factor de expansión de otro módulo, y la desocupación daba 12,81 % en vez del 12,86 % publicado.

  • Serie de empalme: octubre de 2012 venía con la definición anterior de la PET. Ahora todo el empalme usa la PET de 15 años o más, como lo publica el DANE.

  • Posición ocupacional desde 2022 con las etiquetas que muestran los datos (código 7, jornalero o peón).

  • EAM: la revisión de la CIIU se asigna según los códigos de cada archivo.

Librería

0.1.0 (9 de octubre de 2026)#

Primera versión: descarga, carga y armonización de la GEIH (2007–2026, y la serie de empalme 2010–2020) y de la EAM (1992–2024); indicadores del mercado laboral, tablas ponderadas, agregados industriales y panel de establecimientos; la aplicación y la línea de comandos.