knitr::opts_chunk$set( collapse = TRUE, eval = FALSE, echo = TRUE, comment = "#>" )
library(magest)
Las aplicaciones tipo CSpro o CSentry crean una tabla en una base de datos admiministrada por el gestor de bases de datos MySql. Hasta ahora, el nombre de la base de datos construida para las encuestas es cspro. Para cada encuesta hay una tabla distinta en la base de datos, que contiene al menos dos campos: questionnaire y quest. Cada registro del campo questionnaire es de tipo alfanumérico, el cual trae todos los datos asociados con un cuestionario o boleta en un tipo de arreglo conocido como «formato fijo» (en R es usado el acrónimo fwd para decir «fixed width format»). En ese formato, los datos de cada variable ocupan una posición dentro del registro, determinada por la posición del primer caracter y el número de caracteres asignados para registrar los datos de la variable en cuestión. Los programadores crean el archivo «diccionario de datos», donde se especifican la posición inicial y el número de caracteres asignados a cada variable. Entonces, para leer los datos de una encuesta, es necesario conocer el nombre de la tabla con los datos, el diccionario de datos correspondiente, y crear un objeto que sirva de ruta de acceso a la base de datos.
A efectos de la lectura, el diccionario debe estar en forma de un data.frame con las columnas variable (nombre de la variable), start (posición del primer caracter dentro del registro) y length (número de caracteres asignados a la variable). La función leer_dic_dat_excel_ sirve para leer un diccionario que está en un archivo excel, y estandariza el nombre de las variables a letras minúsculas. El número de filas debe ser igual al número de variables.
dd <- leer_dic_dat_xlsx("datos/oct_dic.xlsx", filas = 1:200, columnas = 2:4, hoja = 1) dd <- leer_dic_dat_xlsx("datos/oct_dic.xlsx", 200, 2:4)
Para crear el objeto que da el acceso a la base de datos, hay que saber: el número ip del servidor (host), el nombre (user) y la clave de acceso (password) del usuario, y el nombre de la base de datos (dbname). Funciones relativas al tema: par_conn_mysql, conn_mysql, close_mysql, conn_valido.
par_conn_mysql inicializa una lista con los datos de host, user, etc. y verifica que no hace falta alguno. La lista se puede pasar como argumento a conn_mysql. Si cualesquiera o todos los parámetros no son pasados en los argumentos, la función los busca en las variables de ambiente (que pueden ser especificadas en el archivo de usuario .renviron) MYSQLSERVERMAG (host), MYSQLUID (user), MYSQLPWD (password) y MYSQLDB (dbname).
# todos los argumentos tomados de variables de ambiente pm <- par_conn_mysql() # sólo algunos argumentos pm <- par_conn_mysql(dbname = "basedatos") # explícitos pm <- par_conn_mysql(host = "10.22.168.199", dbname = "cspro", user = "eddy", password = "sinclave")
conn_mysql devuelve el enlace con la base de datos. Llama a par_conn_mysql para validar los parámetros o leer de las variables de ambiente.
# lee de variables de ambiente cn <- conn_mysql() cn <- conn_mysql(dbname = "cspro") # explícitos cn <- conn_mysql(host = "10.22.168.199", dbname = "cspro", password = "sinclave", user = "eddy") # es válido el conector? conn_valido(cn) # inhabilita la conecxión close_mysql(cn)
Hay dos maneras de leer los datos. Una es enviar la consulta a MySql y esperar el resultado en un data.frame. Otra es exportar toda la tabla a un archivo (temporal o persistente) de formato fwd, y luego rescatar en un data.frame todas o algunas de las variables leyendo el archivo.
La función get_data_cspro «hala» los datos desde la base de datos. Tiene como argumentos tab_dict (nombre de la tabla con los datos de la encuesta), dat_dict (data.frame con el diccionario), columnas (variables que se van a leer), clase_col (el tipo de datos asociado a cada variable) y los argumentos opcionales (...) entre los que puede ir conn (objeto de conexión) o los parámetros de la conexión (host, dbname, etc.). Tenga presente que si no especifica el argumento clase_col y quiere incluir alguno o algunos argumentos opcionales, debe dejar el espacio que le correspondería a clase_col (como en la segunda lectura del ejemplo que viene adelante).
# los parámetros leídos de variables de ambiente cn <- conn_mysql() # diccionario dd <- leer_dic_dat_xlsx("datos/hato_dic.xlsx", filas = 1:200, columnas = 2:4) ## lectura z <- get_data_cspro(tab_dict = "hato_dict", dat_dict = dd, columnas = c("quest", "c045"), clase_col = c("integer", "numeric"), conn = cn) ## arg. clase_col no especificado; arg. conn entre los opcionales z <- get_data_cspro(tab_dict = "hato_dict", dat_dict = dd, columnas = c("quest", "c045"), , conn = cn) ## crea objeto conexión con las variables de ambiente z <- get_data_cspro("hato_dict", dd, c("quest", "c045"))
setwd("c:/encuestas/ciclo2022") cn <- conn_mysql( ) dd <- leer_dic_dat_xlsx("datos/oct-dic.xlsx", 2:200, 3:5) z <- get_data_cspro("seguimoct2022_dict", dd, c("quest", "c5000"),, conn = cn) h <- longitud_variables(c("quest", "c5000"), dd)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.