Nuevas equivalencias (y diferencias) en los paquetes DBI y dlpyr en R (2)

En este artículo abrimos un paréntesis para seguir haciendo esa analogía entre instrucciones dplyr y SQL (DBI) para tener un mejor conocimiento entre ambas sintaxis aunque pareciera que las instrucciones dlpyr se traducen en SQL como lo menciona el libro de "Mastering Spark with R" - "Los datos no son importados a R; en cambio, dplyr convierte esta tarea en instrucciones SQL que son enviadas a Spark" y en una sección previa del libro dice "...si eres competente (proeficiente) en SQL, esta opción es viable para ti".

Sin embargo, reitero es importante que cuando un grupo de trabajo maneja esta sintaxis es bueno como personal y profesional de TI tener los conocimientos necesarios para dar soporte y porque no usar dichos verbos de este paquete.

Vamos a regresar nuevamente a los datos abiertos del Instituto Mexicano del Seguro Social (IMSS) para extraer los puestos de trabajo que los patrones registran ante el Instituto correspondientes a julio y que se pueden descargar de este enlace.

Agrupar valores y aplicar una función (máximo, mínimo, promedio, suma, etc.)

Según la documentación existente en el sitio de datos abiertos del IMSS tenemos la columnas Sexo - sexo y la columna de Puestos de trabajo afiliados al IMSS (empleos asegurados o asegurados asociados a un empleo) - ta.

Vamos a agrupar los puestos de trabajo (ta) por Sexo (sexo). El universo de este archivo es de 4,884,288 de registros.

Código con DBI


Resultado de la consulta


La consulta se realizó en un tiempo de 1.63 segundos y como se puede observar es una consulta normal con SQL y se dice cual es la conexión que se va a usar para la misma. Como paréntesis este dato sobre empleo formal es muy alentador pues ni siquiera en los años previos de la pandemia se habían registrado tantos puestos de trabajo 21,079,434.

Código con dplyr


Resultado de la consulta


Una de las cosas por lo que la gente prefiere usar dplyr es la sencillez del código como se puede observar en este ejemplo, el tiempo que se llevó la consulta fue de 1.47 segundos que de hecho es menor que la primera opción que es con código SQL mediante la función dbGetQuery().

Agrupar 2 valores y aplicar una función ( sum ) además de ordenar los datos.

Ahora vamos con una consulta agrupada por dos columnas: entidad federativa (cve_entidad) y sexo (sexo) sumando la misma variable que son el número de puestos de trabajo (ta) además tenemos que ordenar según la entidad federativa.

Código DBI


Resultado de la consulta.


Aquí tenemos una consulta por entidad y por sexo de los puestos de trabajo existentes ordenados por las mismas columnas por las que son agrupadas, lo anterior llevó 1.85 segundos.

Código dplyr


Resultado de la consulta.


El tiempo que se llevó esta consulta fueron 1.69 segundos, me encontré que la consola mandaba el siguiente mensaje:

> puestosporsexo <- ptjulio2022 %>% group_by(cve_entidad, sexo) %>% summarise(totptjulio2022 = sum(ta)) %>%
+                   arrange(cve_entidad, sexo)
`summarise()` has grouped output by 'cve_entidad'. You can override using the `.groups` argument.
> puestosporsexo
`summarise()` has grouped output by 'cve_entidad'. You can override using the `.groups` argument.
`summarise()` has grouped output by 'cve_entidad'. You can override using the `.groups` argument.
`summarise()` has grouped output by 'cve_entidad'. You can override using the `.groups` argument.

Los mensajes de advertencia, información o error muchas veces desconciertan a los usuarios por lo que busqué en la web como se pudiera eliminar y encontré la solución en esta liga que nos sugiere poner la instrucción:

options(dplyr.summarise.inform = FALSE)

Reconozco que según la literatura se podría deducir que como dplyr es un traductor que convierte sus verbos en instrucciones de SQL sería más lento, pero no es así, por lo que es muy interesante seguir investigando y probando las similitudes entre los dos paquetes.

Para no saturarnos de información lo dejamos aquí y continuamos en un nuevo artículo (entrada para blogger) más adelante.

Hasta el siguiente post.

Miguel Araujo


Comentarios

Entradas populares de este blog

Librería de REDATAM para R

Conectar bases de datos Oracle con R vía JDBC

Red 7 Admin