Ir al contenido principal

Los conteos de registros con dplyr con condiciones

Seguimos con esta serie de artículos que tiene el propósito de apoyar a personas que como yo inician en el mundo de R y de alguna manera a la ciencia de datos, así como para mi es una especie de cuaderno de notas digital.

El archivo con el que ejemplificó está en el sitio de INEGI y es la información de registros administrativos referentes a la estadística de mortalidad, en este caso específico para el año 2019.

Una gran amiga doctora, me consultó sobre como obtener causas de muerte de menores de edad con estos datos.

Una vez que descargamos el archivo lo que tenemos que hacer es crear el código en R para abrir este archivo en formato CSV usando Spark.

Para lo cual usamos las siguientes instrucciones:

library(sparklyr)

library(dplyr)


config <- spark_config()

config$`sparklyr.shell.driver-memory` <- "16G"

config$spark.memory.fractions <- 0.7

sc <- spark_connect(master="local", config = config)

defun19 <- spark_read_csv(sc, name = "defun19",                                      path="D:/EjemplosR/defun19/conjunto_de_datos_defunciones_registradas_2019.CSV",                        delimiter=",", header = TRUE, overwrite = TRUE)


Esta nueva forma para configurar la conexión de Spark es para utilizar mejorar el uso de la memoria RAM [1], después se crea una conexión y se realiza una conexión con el archivo csv.

Cuando creía que las consultas con el paquete dplyr en R, las podía realizar usando de alguna manera haciendo similitudes con SQL y de acuerdo a lo que escribí en un artículo anterior, si para que me devuelva el número de filas/registros se resolvía con esta instrucción:

nrows <- defun19 %>% summarise(n())

Lo  lógico era agregarle una condición con filter.

nrows2 <- defun19 %>% summarise(n()) %>% filter(lista_mex=="33B" |  lista_mex=="33C")

Sin embargo al consultar la variable me marcó lo siguiente:



Entonces espere pacientemente a que mis compañeros me mostraran un ejemplo, y pues nuevamente lo uso sin filter para ver que funcionaba, a continuación las defunciones registradas en 2019.

nrows <- defun19 %>% sdf_nrow()

nrows2 <- defun19 %>% tally()

Encontré la verdad información muy escueta y en inglés sobre sdf_nrow (parece que es de Spark)[2] y tally() [3] que también parece ser nativo de R, pero funcionó y ambas de forma rápida.

Vamos con algo especifico; mi amiga es pediatra con especialidad en nefrología por lo que vamos a filtrar las defunciones del grupo de la lista mexicana 38 que es "enfermedades del sistema urinario" y menores de 18 años, por ahora queremos absolutos.

Los códigos de la lista mexicana se puede descargar aquí.

##Enfermedades del sistema urinario en menores de 18 años

renales <- defun19 %>% filter(trim(gr_lismex)=="38" & edad<4018) %>% sdf_nrow()

Si ahora queremos que esos mismos casos que ahora se reflejan como el total del grupo 38 y los menores de 18, ahora de ese total que se desglose por causa, que en nuestro viejo conocido SQL sería un group by y aquí en Spark sería lo mismo.

renalesxcausa <- defun19 %>% group_by(lista_mex) %>% filter(trim(gr_lismex)=="38" & edad<4018) %>% tally()

En esta instrucción que ya es un agrupamiento, se usa tally() ya que si dejamos sdf_nrow() solo imprime el total del grupo.

A continuación comparto el código completo para este ejercicio.


Corrida del script de R.


Por ahora es todo en lo referente a este tema de los tantos que abarca este lenguaje de programación.

Hasta la vista.

Miguel Araujo.

[1] Sparklyr from RStudio https://spark.rstudio.com/guides/connections/

[2] Sparklyr from RStudio https://spark.rstudio.com/reference/

[3] RDocumentation https://www.rdocumentation.org/packages/dplyr/versions/0.7.8/topics/tally#:~:text=tally()%20is%20a%20convenient,before%20and%20ungroup()%20after.



Comentarios

Entradas populares de este blog

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...

RMarkdown - Python para usuarios de Posit RStudio

 Al escribir el post anterior pareciera que sería la misma lógica con la versión de escritorio de Posit RStudio , sin embargo al querer ejecutar un chunk de Python en un archivo de RMarkdown , manda que se tienen que actualizar los paquetes, descarga algunas cosas pero al final manda el siguiente mensaje: Show in New Window Error in system2(uv, c("python list", "--all-versions", "--color never", : '"C:\Users\mi_nombre_de_usuario\AppData\Local\R\cache\R\reticulate\uv\bin\uv.exe"' not found Error: Installation of Python not found, Python bindings not loaded. See the Python "Order of Discovery" here: https://rstudio.github.io/reticulate/articles/versions.html#order-of-discovery. La IA de Google aconseja  instalar uv pero el paquete reticulate no tiene ese método. Cuando se pensaba en instalar todo el que yo le llamo ecosistema del lenguaje de programación R se trató con esta última receta, descargar Python e instalarlo en una ...