Ir al contenido principal

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

Posit Cloud - como instalar librerías de Python en el entorno de R

 Ahora que estamos tomando una maestría buscando que siga "girando la ardilla" por unos años más en la materia de "Cómputo Estadístico" nos ha sugerido usar la versión gratuita de Posit en la nube. En su página definen este producto como "es una solución basada en la nube que permite acceder al poderoso conjunto de herramientas de ciencia de datos de Posit directamente en el navegador web  - sin requerir instalación o configuraciones complejas". Para los usuarios que han utilizado Posit RStudio en primera instancia verán el entorno muy similar a Posit Cloud con algunas pequeñas diferencias, para empezar necesitamos un usuario o contraseña aunque es posible autenticarse usando alguna cuenta existente como es el caso de Google. Con el tiempo y trabajando en desarrollo de software, vamos entendiendo que quizás el nombre queda muy grande a los pequeños ejemplos, pero es muy recomendable el uso de proyectos siempre. A continuación vemos el entorno Posit Clo...

REDATAM en Ubuntu (Linux)

 En un blog alterno, escribí sobre como migraba un "viejo" Intel i5 al sistema operativo Ubuntu en su versión más actual. Me comunique con mi gran colega Lenin de la CELADE en Chile, después de mucho tiempo, y le pedí me diera un pequeño resumen del "estado del arte" de REDATAM me dijo que todo marchaba bien, y pues ahora creo que tengo que actualizarme en contenedores pues el web server se encuentra ahí. Nos pusimos manos a la obra, el instalable desde la página no tiene ninguna extensión de archivo, asumí que era un ejecutable para Linux, no se si la página sufra ataques constantes ya que después quise volver a descargar sin éxito, la página estaba caida, sin embargo rescate el ejecutable anteriormente descargado. Últimamente primero hago y después documento, ya que con todo y mi compañero Deep,  no todo sale a la primera ni como lo dictan sus sugerencias, sobre todo en Linux y MacOS.  Por lo que, les muestro solo el resultado final de esta primera exploración, im...

El problema del gallo - otra vertiente de usar Python en RMarkdown con Posit RStudio

Cuando pensamos que ya se había cruzado el río, el buen gallo - mi amigo el Dany  Lara- no podía insertar código de Python  en un documento de RMarkdown  usando la versión de escritorio de Posit RStudio a pesar de las soluciones como instalar el Python y direccionarlo desde R con la biblioteca reticulate . Si bien se podía ejecutar código del interprete base, al querer correr usando módulos y con ello intentando instalar dichos módulos mandaba el siguiente mensaje: > py_install('matplotlib') Using virtual environment "D:/tu_usuario/Documents/.virtualenvs/r-reticulate" ... WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1006)'))': /simple/matplotlib/ WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) a...