Ir al contenido principal

Más de dplyr y una librería nueva: sqldf

 En el Instituto es muy común los requerimientos especiales; cuando a veces la sección de consulta interactiva no nos puede dar algunas respuestas muy especificas a dichos requerimientos. Lo que sigue es descargar los datos abiertos y procesarlos con algún software estadístico o lenguaje de programación.

En los últimos años como se ha mencionado en los anteriores artículos se ha masificado y popularizado el uso del lenguaje de programación R por lo que al tener un enfoque fuertemente orientado a la estadística resulta fácil atender este tipo de requerimientos.

Vamos a ejemplificar con una consulta de la Encuesta Nacional sobre Uso del Tiempo (ENUT). La pregunta es la siguiente:

Número de personas de 15 a 24 años que abandonaron la escuela por razón de que se unió, casó o embarazó.

Para ello tenemos que descargar los microdatos de la página del Instituto e iniciar a escribir instrucciones  para dar respuesta a los requerimientos.

Otros documentos necesarios para realizar la consulta es el diccionario de datos y el cuestionario para identificar las columnas relacionadas con las preguntas así como el flujo de las mismas.

Cuestionario

https://www.inegi.org.mx/contenidos/programas/enut/2019/doc/enut_2019_cuestionario.pdf

Diccionario de datos (Descriptor de archivos):

https://www.inegi.org.mx/programas/enut/2019/#microdatos

Hemos identificado que las preguntas relacionados están en la sección que le hemos llamado como sociodemográfico.

Sección del cuestionario:


Sección del archivo del descriptor de archivo:


Debido a estos dos documentos nos damos cuenta que el nombre de las columnas son P3_9 para asistencia escolar y P3_10 para razón principal por la que no asiste a la escuela.

Si la variable P3_9 tiene un valor de 2 (no asiste a la escuela) y la variable P3_10 tiene valores 4 o 5 (razón por la cual no asiste a la escuela, se unió o se casó o se embarazó) estos son los casos que queremos contar o analizar. También es importante tomar en cuenta la columna EDAD.

Ahora en el Instituto se ha dejado de lado los formatos XBase (Dbf) y ahora lo que se publica en la página oficial son formatos de texto del tipo CSV (Valores separados por coma por sus siglas en inglés) para revisar el contenido de estos archivos que generalmente el sistema operativo los abre con MS Excel, podemos seleccionar el archivo y con el botón secundario del ratón elegimos abrirlo con un editor de texto (se puede con el NotePad o Bloc de Notas de Windows ya que no es archivo demasiado grande) aquí podemos observar el contenido completo del archivo que se ha descargado.


En posts pasados se ha publicado las equivalencias entre los consultas hechas con dplyr y código SQL (según la librería que se trate) ahora vamos a abordar ambos temas para resolver este requerimiento.

En una rápida investigación cuando un archivo de tipo CSV es asignado a un data frame debido a que como mencionamos al principio aplica ya que es un archivo de mediano tamaño, para el uso de SQL instalamos la librería sqldf y si es el caso se debe instalar también dplyr.

Así mismo en los pasados posts se habló de la librería DBI que se utiliza para trabajar con conexiones de base de datos o bien con Apache Spark

Para resolver el requerimiento y atender rápido se usó el software el Microsoft Visual FoxPro pero debido al uso generalizado que se da de la librería dplyr se busco resolver ya con toda la subdirección este mismo requerimiento.

Entonces vamos a explicar el código paso por paso.

library(dplyr)

library(sqldf)

Como se menciona tenemos que mandar llamar las 2 librerías, antes se tienen que instalar.

setwd("Unidad:/Ruta")

cdTsDem <- read.csv("TSDEM.csv")

Es muy recomendable fijar una ruta de trabajo y se realiza mediante la instrucción setwd, además se lee el archivo CSV y se pasa a un dataframe.

Esta primer consulta nos devuelve el número de personas que NO asisten a la escuela con edades entre 15 y 24 años.

PNAE <- cdTsDem %>% filter(P3_9=="2" & (as.numeric(EDAD)>=15 & as.numeric(EDAD)<=24)) %>%  summarise(tot = sum(FAC_HOG, na.rm = TRUE))

PNAE_SQL <- sqldf("select sum(FAC_HOG) from cdTsDem where P3_9='2' and (EDAD>=15 and EDAD<=24)")

Otro aspecto importante a resaltar es que como es un dato de una encuesta tenemos que sumar el ponderador (operación sum() de dplyr y SQL) que para esta encuesta es FAC_HOG.

En el entorno de R y específicamente en las librerías abordadas nos damos cuenta que si en una columna hay solo datos numéricos aunque vengan definidos como cadenas (string) se les da un trato de numéricos y no es necesario aplicar funciones de conversión de datos (por ejemplo as.numeric()) como se puede observar en el ejemplo de SQL.

Otra cuestión es que para el caso de dlpyr sino indicamos que los datos marcados con NA se ignoren, la consulta no se realiza, manda un NA, es por ello que a la función sum() hay que agregarle el parámetro na.rm = TRUE. 

Ahora necesitamos verificar la pregunta P3_10 para dar respuesta por completo a la petición del usuario.

PNAE_x_UnEmb <- cdTsDem %>%   filter(P3_9=="2" & (P3_10=='4' | P3_10=='5') & (as.numeric(EDAD)>=15 & as.numeric(EDAD)<=24)) %>%   summarise(tot = sum(FAC_HOG, na.rm = TRUE))

PNAE_x_UnEmb2 <- sqldf("select sum(FAC_HOG) from cdTsDem where P3_9='2' and (P3_10='4' or P3_10='5') and (EDAD>=15 and EDAD<=24)")

Con esto ya tenemos el número de personas de edad entre 15 y 24 años que NO asisten a la escuela y la razón principal es porque se unió o se embarazó. Aquí la ejecución de estas líneas de código:



Seguiremos compartiendo artículos en la medida de los posible, hasta el próximo post.

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