¿Cómo redujimos 5 millones de datos de empleos del IMSS para un Dashboard? – MANUALES DATLAS

Para cualquier analista de datos los Tableros Dinámicos, o «Dashboards», son un elemento crucial que nos ayudan a visualizar los datos e interpretarlos de una manera llamativa y dinámica.

Cuando se nos entrega una base de datos con una cantidad razonable de observaciones y solo las variables relevantes para nuestro proyecto crear un Dashboard puede ser cuestión de unas pocas horas, sin embargo todo analista sabe que eso pocas veces sucede. La mayoría de las veces tenemos que trabajar bases de datos muy grandes, donde no todas las variables nos resultan útiles.

Muchas veces eso no resulta un problema gracias a que los softwares para crear Tableros Dinámicos pueden leer todos los datos, pero mientras más grande sea la base más lento se vuelve interactuar con los gráficos empeorando la experiencia del usuario final.

Esta vez al equipo de DATLAS nos tocó trabajar con una base abierta sobre las personas registradas como asegurados del IMSS en 2022, la cual contaba con casi 5 millones de registros y 29 variables. Para poder crear un Dashboard que brindara la mejor experiencia, decidimos reducir la base de datos en R Studio y en este blog te compartiremos como lo hicimos.

Los registros de la base de datos «IMSS» estaban en clave numérica por lo que se tuvo que trabajar simultáneamente con un diccionario de datos.

Lo primero que hicimos fue hacer un análisis de las variables, ver cuáles eran las que realmente nos interesaba visualizar en el Tablero final. Resultaron ser sólo 6 variables de las 29 disponibles, para cada una de esas 6 variables creamos una base de datos que sirviera como «catálogo» basándonos en el diccionario de datos del IMSS.

Ejemplo del catálogo para la variable cve_entidad

La librería «dplyr» en R Studio fue nuestra mejor amiga durante todo este proceso. Utilizamos la función left_join para incluir la descripción de cada dato de acuerdo a la clave utilizando los catálogos.

Ejemplo: Para la variable «cve_entidad» los datos eran números enteros del 1 al 32. Dónde cada número representaba una entidad de México. Para agregar a la base de datos el nombre de cada estado de acuerdo a su clave utilizando el catálogo de entidad (que nombramos cat_entidad en R) utilizamos la función de esta manera

df <- left_join(IMSS, cat_entidad, by=»cve_entidad»)

Así agregamos las nueva variables en forma de texto, donde visualizamos la entidad como «Aguascalientes» y no como «1». De aquí en adelante trabajaremos con estas variables, y no con las que teníamos en clave.

Hay 2 principales razones por las que este paso es muy importante y necesario desde el principio:

  • La primera y más obvia, para al terminar poder visualizar los datos en el tablero de una mejor manera y facilitar su entendimiento
  • La segunda tiene que ver con el siguiente paso a realizar, el cual es: Agrupar por medio de la función «group_by».

Al analizar el catálogo de la variable «cve_municipio» notamos que había más de una clave para el mismo municipio, entonces, si agrupábamos con respecto a esa variable los valores se agrupaban como si fuera de diferentes municipios cuando en realidad se trataba de uno mismo, generando una data frame con más observaciones de las que en realidad eran (recordamos que lo que buscamos es reducir lo máximo posible el número de observaciones).

Es por eso que es importante primero cargar las nuevas variables con respecto al catálogo y agrupar en base a esas.

Por ejemplo el municipio «Abasolo» tiene 4 diferentes claves, si agrupáramos respecto a estas tendríamos 4 observaciones por el mismo municipio. En cambio, al agregar la nueva variable «municipio», se agrupa respecto al nombre del municipio (el cual es el mismo para esas 4 claves) y se tiene una sola observación por municipio.

Por eso es importante realizar la carga de catálogos antes de agrupar respecto a las «nuevas» variables que nos interesa mostrar en el Tablero. En nuestro caso nos interesaban las variables «sector_economico», «municipio», «entidad», «sexo», «edad», «salario» y «asegurados», de esta última nos interesa el total por lo que, en vez de agruparla, utilizaremos la función «summarise» para calcular el total por grupo. Creamos una nueva base llamada «Asegurados» de la siguiente manera:

Asegurados <- df %>% group_by(sector_economico, municipio, entidad, sexo, edad, salario) %>%

summarise(Total_Asegurados = sum(asegurados)) %>% data.frame()

Donde «df» es la base donde agregamos los catálogos.

Hasta aquí logramos reducir la base de datos de 4.9 Millones de datos a tan solo 1.8 Millones. Esto podría ser suficiente para trabajar la base en Power BI u otro software de tableros dinámicos, sin embargo, no terminamos aquí.

El ejercicio que se buscaba era visualizar los datos de los asegurados registrados en el IMSS de ciertos sectores económicos específicos. Se querían filtrar al rededor de 20 sectores usando la función «filter», pero poner cada uno de los sectores deseados dentro de la función, además de alargar el código, puede dar lugar a «errores de dedo» u omisiones. Entonces, ¿cómo filtrar en R 20 valores de tipo caracter sin escribir uno por uno?. Muy fácil, agregaremos una columna en el catálogo que creamos previamente sobre la variable deseada (en este caso el catálogo de «sector_economico») antes de realizar el left_join para agregar el catalogo a la base.

Esta columna la llamaremos, por ejemplo, cve_filtro y manualmente le daremos valores 1 o 0. Escribiremos 1 para los sectores que deseemos filtrar y 0 para los que no. Con ese cambio, podemos agregar el catálogo a la base exactamente como vimos anteriormente:

df <- left_join(IMSS, cat_sector, by=»sector_economico_4″)

Al momento de realizar el group_by agregaremos la nueva variable que creamos «cve_filtro»

Asegurados <- df %>% group_by(sector_economico, municipio, entidad, sexo, edad, salario, cve_filtro) %>%

summarise(Total_Asegurados = sum(asegurados)) %>% data.frame()

Y finalmente utilizamos la función «filter» con respecto a la variable «cve_filtro» buscando que sea igual a 1 (que son los deseados) así evitamos alargar inecesariamente el código y errores por escribir mal los valores.

Asegurados_filtrado <- Asegurados %>% filter(cve_filtro== 1)

Y Así es cómo redujimos 5 millones de datos del IMSS a sólo 400,000 para crear un dashboard más eficiente

Exportando la nueva base de datos pudimos crear un dashboard en Power BI que nos permite analizar los asegurados y así descubrir que el Sector Económico al que pertenecen más asegurados es el de Compraventa de alimentos y bebidas.

Así como ver que los asegurados se encuentran mayormente concentrados en el grupo de edad de 25 a 30 años de edad. Entre muchos otros datos que podemos capitalizar al analisar la base de datos que desarrollamos.

Hasta aqui la columna de hoy ¿Qué otras aplicaciones has escuchado para los shapefiles? Únete a la conversación en @DatlasMX y aprende más del tema en Datlas Academy

– Equipo Datlas –