# Instalar y cargar el paquete 'data.table' si aún no está instalado
# install.packages("data.table")
library(data.table)
# Importar la base de datos consolidada
<- fread("C:/data-exploration/geih_complete.csv")
data
# Asegúrate de que la función 'merge_month()' esté disponible en tu entorno
# Puedes definir o cargar la función según sea necesario
Revisión y Validación de Datos Consolidados (GEIH)
Nota: Para realizar la validación de datos es recomendable haber seguido previamente la Guia: Pegado de la GEIH o tener la base de datos completa de la GEIH descargada.
Preparación de para la validación
Instalar y Cargar Paquete:
Si aún no has instalado el paquete
data.table
, descomenta y ejecuta la líneainstall.packages("data.table")
.Luego, carga el paquete con
library(data.table)
. Esto es necesario para usar la funciónfread()
para importar datos.
Importar Datos:
La función
fread()
de data.table se utiliza para leer archivos CSV de manera eficiente. Aquí, el archivogeih_complete.csv
se importa y se asigna a la variable data.Asegúrate de que la ruta especificada
"C:/data-exploration/geih_complete.csv"
sea correcta para tu dispositivo. Puedes verificar tu directorio de trabajo actual congetwd()
y ajustar la ruta según sea necesario.
Preparativos Adicionales:
- Asegúrate de que la función
merge_month()
haya sido definida previamente como se indico en la guia sobre el pegado de la GEIH, ya que es necesaria para las operaciones posteriores. Define o carga esta función según sea necesario.
- Asegúrate de que la función
1. Función para verificar la estructura de los datos verify_variables()
La función verify_variables()
se utiliza para asegurar la consistencia en la estructura de los datos a través de diferentes meses. Su objetivo es garantizar que las columnas presentes en los datos de cada mes coincidan con las columnas de un conjunto de datos consolidado
<- file.path(getwd(), "datos")
base_dir
<- list.dirs(path = base_dir, full.names = FALSE, recursive = FALSE)
months
<- function() {
verify_variables
for (month in months) {
<- merge_month(month)
month_data
if (all(names(month_data) %in% names(data))) {
print(paste("Todas las variables presentes en", month, "están presentes en los datos consolidados"))
else {
} print(paste("Existen variables presentes en", month, "que no se encuentran presentes en los datos consolidados"))
}
}
}
verify_variables()
1.1 Definir el directorio base
<- file.path(getwd(), "datos") base_dir
La variable base_dir
almacena la ruta hacia un subdirectorio llamado “datos” dentro del directorio de trabajo actual, obtenido mediante getwd()
. La función file.path()
se encarga de construir la ruta de forma segura y correcta, adaptándose automáticamente al sistema operativo, lo que asegura la portabilidad del código al manejar los separadores de ruta apropiados.
1.2 Listar los subdirectorios
<- list.dirs(path = base_dir, full.names = FALSE, recursive = FALSE) months
En esta línea, se utiliza la función list.dirs()
para crear una lista de subdirectorios contenidos en el directorio especificado por base_dir.
El argumento path = base_dir
indica que se listarán los directorios dentro del directorio base definido anteriormente. full.names = FALSE
significa que los nombres de los directorios se devolverán como nombres simples (sin incluir la ruta completa), mientras que recursive = FALSE
especifica que solo se listarán los subdirectorios de nivel superior, es decir, no se explorarán subdirectorios dentro de otros subdirectorios. El resultado es una lista de nombres de directorios de nivel superior en la carpeta datos
, que representa probablemente los datos organizados por meses.
1.3 Definición de la función
<- function() { verify_variables
Aquí se define una nueva función llamada verify_variables
. Esta función no toma ningún argumento y su propósito es verificar que las variables (columnas) en los datos de cada mes coincidan con las variables en la data consolidada.
1.4 Iteración sobre los Meses
for (month in months) {
Se utiliza un bucle for para iterar sobre cada mes en el vector months.
En cada iteración, la variable month
tomará el valor de uno de los meses, por ejemplo, "enero", "febrero", etc
.
1.5 Obtener Datos del Mes
<- merge_month(month) month_data
Dentro del bucle, se llama a la función merge_month()
con el nombre del mes actual como argumento. Esta función debería devolver un data frame que contiene los datos para el mes especificado. El resultado se guarda en la variable month_data.
1.6 Comparación de Nombres de Columnas
if (all(names(month_data) %in% names(data))) {
Se verifica si todos los nombres de las columnas en month_data están presentes en names(data)
, que es un vector con los nombres de las columnas en la data consolidada. La función names()
obtiene los nombres de las columnas de un data frame, y %in%
verifica si cada nombre de columna de month_data
está en el conjunto de nombres de columnas de data. La función all()
asegura que la condición sea verdadera para todas las columnas.
1.7 Mensaje de Resultados
print(paste("Todas las variables presentes en", month, "están presentes en los datos consolidados"))
Si todas las columnas de month_data
están presentes en la data consolidada, se imprime un mensaje indicando que las variables son las mismas que las del mes actual.
print(paste("Existen variables presentes en", month, "que no se encuentran presentes en los datos consolidados"))
Si alguna columna de month_data
no está en la data consolidada, se imprime un mensaje indicando que las variables no son las mismas que las del mes actual.
1.8 Llamada a la Función
verify_variables()
Finalmente, la función verify_variables()
es llamada para ejecutar la verificación. Esto dispara la ejecución del bucle for
y la verificación de columnas para cada mes especificado en el vector months
.
1.9 Retorno de la función
1] "Todas las variables presentes en abril están presentes en los datos consolidados"
[1] "Todas las variables presentes en enero están presentes en los datos consolidados"
[1] "Todas las variables presentes en febrero están presentes en los datos consolidados"
[1] "Todas las variables presentes en junio están presentes en los datos consolidados"
[1] "Todas las variables presentes en marzo están presentes en los datos consolidados"
[1] "Todas las variables presentes en mayo están presentes en los datos consolidados" [
2. Función para el conteo de registros observations()
La función observations()
asegura la consistencia en el número de observaciones a lo largo de un conjunto de datos de diferentes meses.
<- function() {
observations
<- 0
total_obs
for (month in months) {
<- merge_month(month)
month_data <- total_obs + nrow(month_data)
total_obs
}
if (total_obs == nrow(data)) {
print("El número de observaciones es correcto")
else {
} print("El número de observaciones no es correcto")
}
}
observations()
2.1 Definición de la función
<- function() { observations
Aquí se define una nueva función llamada observations()
. Esta función no recibe ningún argumento y su objetivo es verificar si el número total de observaciones en la data consolidada coincide con la suma de las observaciones de cada mes.
2.2 Inicialización del contador de observaciones
<- 0 total_obs
Se inicializa una variable llamada total_obs con el valor 0
. Esta variable se utilizará para acumular el total de observaciones de todos los meses.
2.3 Iteración sobre los meses
for (month in months) {
Se utiliza un bucle for
para iterar sobre cada mes en el vector months.
En cada iteración, la variable month
toma el valor de uno de los meses por ejemplo, "enero", "febrero", etc.
.
2.4 Obtener datos del mes iterado
<- merge_month(month) month_data
Dentro del bucle, se llama a la función merge_month()
con el nombre del mes actual como argumento. Esta función debería devolver un data frame que contiene los datos para el mes especificado. El resultado se guarda en la variable month_data
.
2.5 Contar y acumular observaciones
<- total_obs + nrow(month_data) total_obs
Se cuenta el número de filas (observaciones
) en month_data
utilizando nrow(month_data)
y se suma al contador total_obs.
Esta operación se repite para cada mes, acumulando el total de observaciones.
2.6 Verificación del número de observaciones
if (total_obs == nrow(data)) {
Una vez que se ha acumulado el total de observaciones para todos los meses, se compara este total con el número de filas en la data consolidada (usando nrow(data)
). La función nrow()
obtiene el número de filas en un dataframe o data table.
2.7 Mensajes de resultado
print("El número de observaciones es correcto")
Si el total de observaciones calculado coincide con el número de filas en la data consolidada, se imprime el mensaje "El número de observaciones es correcto"
.
print("El número de observaciones no es correcto")
Si el total de observaciones calculado no coincide con el número de filas en la data consolidada, se imprime el mensaje "El número de observaciones no es correcto"
.
2.8 Llamada a la Función
observations()
Finalmente, se llama a la funciónobservations()
para ejecutar el código y realizar la verificación del número total de observaciones.
2.9 Retorno de la función
1] "El número de observaciones es correcto" [
3. Función para verificar duplicados duplicate()
La función observations()
asegura la consistencia en el número de observaciones a lo largo de un conjunto de datos de diferentes meses.
<- function(data) {
duplicate
<- data[duplicated(data)]
duplicate
# Verifica si hay filas duplicadas
if (nrow(duplicate) == 0) {
print("No hay duplicados por fila")
else {
} print("Hay duplicados por fila")
}
}
duplicate(data)
3.1 Definición de la Función
<- function(data) { duplicados
Esta línea define una nueva función llamada duplicate.
La función toma un argumento data, que representa el conjunto de datos en el cual se quiere verificar la presencia de filas duplicadas.
3.2 Identificación de filas duplicadas
<- data[duplicated(data)] duplicate
En esta línea, se utiliza la función duplicated(data)
para identificar las filas duplicadas en el conjunto de datos data
. La función duplicated()
devuelve un vector lógico del mismo largo que data, donde cada elemento es TRUE
si la fila correspondiente es un duplicado de una fila anterior y FALSE
en caso contrario. Al utilizar este vector lógico para indexar data
, se obtienen todas las filas duplicadas y se almacenan en un nuevo dataframe llamado duplicate.
3.3 Verificación de la presencia de duplicados
if (nrow(duplicado) == 0) {
Esta línea de código verifica si el número de filas en el data frame duplicate es igual a 0
utilizando la función nrow()
, que cuenta el número de filas. Sinrow(duplicado)
es 0
, significa que no se encontraron filas duplicadas en el conjunto de datos original data.
3.4 Retorno de mensajes de resultados
print("No hay duplicados por fila")
Si la verificación anterior es verdadera (es decir, no hay duplicados), se imprime un mensaje indicando que"No hay duplicados por fila"
. Esto confirma que todas las filas del conjunto de datos son únicas.
print("Hay duplicados por fila")
Si la verificación es falsa (es decir, hay al menos una fila duplicada), se imprime un mensaje indicando que "Hay duplicados por fila"
. Esto señala que el conjunto de datos contiene duplicados y que es necesario manejarlos para asegurar la integridad de los datos.
3.5 Llamada a la función
duplicate(data)
Finalmente, se llama a la función duplicate()
pasando como argumento el conjunto de datos data.
Esta llamada ejecuta la función y realiza la verificación de duplicados en el conjunto de datos proporcionado.
3.5 Retorno de la función
1] "No hay duplicados por fila" [
4. Función para validar la completitud de los datos en las variables clave missing_values()
La función duplicate()
se utiliza para verificar la existencia de filas duplicadas en un conjunto de datos específico.
<- function(data, ...) {
missing_values lapply(.SD, function(x) sum(is.na(x))), .SDcols = c(...)]
data[,
}
missing_values(data, "DIRECTORIO", "SECUENCIA_P", "ORDEN", "HOGAR", "FEX_C18")
4.1 Definición de la función
<- function(data, ...) { missing_values
Esta línea define una nueva función llamada missing_values. La función toma un argumento data, que es el conjunto de datos a analizar, y un argumento variable ...
que permite pasar múltiples nombres de columnas. Estos nombres de columnas representan las variables en las que se desea verificar la presencia de valores faltantes NA
.
4.2 Aplicación de una función para contar valores faltantes
lapply(.SD, function(x) sum(is.na(x))), .SDcols = c(...)] data[,
Esta línea utiliza la sintaxis de data.table
para contar los valores faltantes en las columnas especificadas. A continuación se desglosa cómo funciona esta línea:
data[, ...]
: Esto indica que se está aplicando una operación adata.
La coma antes del paréntesis indica que se están seleccionando columnas específicas o realizando operaciones en columnas, sin modificar filas.lapply(.SD, function(x) sum(is.na(x)))
: Aquí se utilizalapply()
para aplicar una función a cada columna especificada..SD
(Subset of Data) es una característica dedata.table
que representa las columnas especificadas en.SDcols
. La función anónimafunction(x) sum(is.na(x))
cuenta el número de valoresNA
en cada columna al aplicaris.na(x)
para identificar valores faltantes ysum()
para contar cuántos de esos valores existen..SDcols = c(...)
: Esta parte especifica las columnas en las que se aplicará la función.c(...)
indica que las columnas serán las proporcionadas como argumentos variables a la funciónmissing_values()
. Esto permite flexibilidad para verificar diferentes columnas según sea necesario.
4.3 Llamada a la función para identificar valores faltantes
missing_values(data, "DIRECTORIO", "SECUENCIA_P", "ORDEN", "HOGAR", "FEX_C18")
Aquí se llama a la función missing_values()
pasando el conjunto de datos data y una lista de nombres de columnas: "DIRECTORIO", "SECUENCIA_P", "ORDEN", "HOGAR", y "FEX_C18"
. Esta llamada a la función genera una tabla que muestra el número de valores faltantes en cada una de estas columnas.
4.4 Retorno de la función
Lo que se espera es que las variables seleccionadas (variables clave) no tengan ningún valor nulo.
DIRECTORIO SECUENCIA_P ORDEN HOGAR FEX_C18<int> <int> <int> <int> <int>
0 0 0 0 0
5. Verificación de Variables con Sufijos select_suffix()
La función select_suffix()
permite seleccionar y mostrar columnas de un data.table
que terminan en los sufijos especificados. Si no se encuentran columnas con los sufijos proporcionados, la función informa al usuario.
<- function(data, sufijos = "x") {
select_suffix
<- paste0("\\.(", paste(sufijos, collapse = "|"), ")$")
regex_pattern
<- grep(regex_pattern, names(data), value = TRUE)
matching_cols
if (length(matching_cols) > 0) {
<- data[, ..matching_cols]
result print(result)
else {
} print(paste0("No hay variables que terminen en ", paste(sufijos, collapse = ", ")))
}
}
select_suffix(data, c("x", "y", "z"))
5.1 Definición de la Función
<- function(data, sufijos = "x") { select_suffix
select_suffix
: Define una función que toma dos argumentos:
data
: Undata.table
del que se seleccionarán las columnas.sufijos
: Un vector de sufijos para buscar en los nombres de las columnas. El valor predeterminado es"x"
.
5.2 Crear Patrón de Búsqueda
<- paste0("\\.(", paste(sufijos, collapse = "|"), ")$") regex_pattern
regex_pattern
: Construye un patrón de expresión regular para buscar columnas cuyos nombres terminen con los sufijos especificados.
paste(sufijos, collapse = "|")
: Une los sufijos en una cadena separada por el símbolo|
, que en las expresiones regulares actúa como “o”. Por ejemplo, sisufijos
esc("x", "y")
, el patrón será\\.("x|y")$
.paste0("\\.(", ..., ")$")
: Añade el prefijo\\.
(para coincidir con un punto literal) y el sufijo$
(para indicar el final del nombre de la columna).
5.3 Buscar Columnas que Coincidan con el Patrón
<- grep(regex_pattern, names(data), value = TRUE) matching_cols
matching_cols
: Utiliza grep()
para buscar nombres de columnas en data
que coincidan con el patrón.
regex_pattern
: El patrón de búsqueda creado anteriormente.names(data)
: Obtiene los nombres de las columnas dedata
.value = TRUE
: Devuelve los nombres de las columnas que coinciden con el patrón.
5.4 Verificar la Presencia de Columnas Coincidentes
if (length(matching_cols) > 0) {
if (length(matching_cols) > 0)
: Verifica si se encontraron columnas que coinciden con el patrón. length(matching_cols)
devuelve el número de columnas encontradas.
5.5 Mostrar las Columnas Coincidentes
<- data[, ..matching_cols]
result print(result)
result
: Selecciona las columnas coincidentes deldata.table
y las almacena enresult
.print(result)
: Muestra las columnas coincidentes.
5.6 Mostrar Mensaje si No Se Encontraron Coincidencias
print(paste0("No hay variables que terminen en ", paste(sufijos, collapse = ", ")))
print(paste0(...))
: Imprime un mensaje indicando que no se encontraron columnas que terminen con los sufijos especificados.
5.7 Ejemplo de Uso de la Función
select_suffix(data, c("x", "y", "z"))
select_suffix(data, c("x", "y", "z"))
: Llama a la función select_suffix()
con data
y los sufijos c("x", "y", "z")
para buscar y mostrar las columnas que terminan en estos sufijos.
5.8 Retorno de la función
1] "No hay variables que terminen en x, y, z" [
6. Funcion para la validación de contenido content_validation()
La función content_validation``()
se utiliza para verificar la consistencia de los datos entre un conjunto de datos mensual específico y un conjunto de datos consolidado.
<- function(data, month, by_col, ...) {
content_validation <- list(
months_dictionary "enero" = 1,
"febrero" = 2,
"marzo" = 3,
"abril" = 4,
"mayo" = 5,
"junio" = 6,
"julio" = 7,
"agosto" = 8,
"septiembre" = 9,
"octubre" = 10,
"noviembre" = 11,
"diciembre" = 12
)
<- merge_month(month)
month_data
<- month_data[, lapply(.SD, function(x) sum(x, na.rm = TRUE)), .SDcols = c(...), by = by_col]
total_complete_data <- data[MES == months_dictionary[[month]], lapply(.SD, function(x) sum(x, na.rm = TRUE)), .SDcols = c(...), by = by_col]
total_month_data
if (all(total_complete_data == total_month_data)) {
print("El contenido coincide")
else {
} print("El contenido no coincide")
}
}
content_validation(data, "marzo", "DPTO", c("OCI", "P7360", "P9460"))
6.1 Definición de la función
<- function(data, month, by_col, ...) { validacion
Esta línea define una nueva función llamada content_validation()
La función toma cuatro argumentos:
data
: El conjunto de datos consolidado en el que se verificará la consistencia.month
: El mes específico que se quiere validar.by_col
: La columna por la cual se agruparán los datos para la comparación....
: Un argumento variable que permite especificar múltiples columnas para las cuales se sumarán los valores durante la validación.
6.2 Creación de un diccionario de meses
<- list(
months_dictionary "enero" = 1,
"febrero" = 2,
"marzo" = 3,
"abril" = 4,
"mayo" = 5,
"junio" = 6,
"julio" = 7,
"agosto" = 8,
"septiembre" = 9,
"octubre" = 10,
"noviembre" = 11,
"diciembre" = 12
)
Aquí se crea una lista llamada months_dictionary
que asocia nombres de meses con sus correspondientes números de mes. Esta lista facilita la conversión del nombre del mes proporcionado en el argumento month
a su número de mes equivalente.
6.3 Obtención de los datos del mes específico
<- merge_month(month) month_data
Se llama a la función merge_month()
con el nombre del mes especificado en month para obtener los datos correspondientes a ese mes. El resultado es un data frame llamado month_data
que contiene la información para el mes actual.
6.4 Cálculo de resultados por mes
<- month_data[, lapply(.SD, function(x) sum(x, na.rm = TRUE)), .SDcols = c(...), by = by_col] total_complete_data
.SD
: Es un data table subset que contiene solo las columnas especificadas en.SDcols
.lapply(.SD, function(x) sum(x, na.rm = TRUE))
: Aplica una función a cada columna en.SD
. La función cuenta la suma de los valores en cada columna, ignorando los valoresNA
..SDcols = c(...)
: Especifica las columnas a las cuales aplicar la función.c(...)
permite pasar múltiples nombres de columnas.by = by_col
: Agrupa los resultados por la columna especificada enby_col
.
El resultado, total_complete_data
, es un data frame con la suma de valores para cada columna especificada, agrupado por la columna de agrupamiento en month_data
.
6.5 Cálculo de resultados en el conjunto de datos consolidado
<- data[MES == months_dictionary[[month]], lapply(.SD, function(x) sum(x, na.rm = TRUE)), .SDcols = c(...), by = by_col] total_month_data
data[MES == months_dictionary[[month]]]
: Filtra el conjunto de datos consolidado data para seleccionar solo las filas correspondientes al mes especificado. El número del mes se obtiene delmonths_dictionary
.El cálculo realizado es similar al de
total_complete_data
: se suman los valores en las columnas especificadas, agrupados por la columnaby_col
.
6.6 Comparación de resultados y mensajes de resultado
if (all(total_complete_data == total_month_data)) {
print("El contenido coincide")
else {
} print("El contenido no coincide")
}
all(total_complete_data == total_month_data)
: Compara si todos los valores entotal_complete_data
son iguales a los valores entotal_month_data
La funciónall()
devuelveTRUE
si todas las comparaciones son verdaderas.print("El contenido coincide")
: Si todos los valores coinciden, se imprime este mensaje.print("El contenido no coincide")
: Si hay alguna discrepancia entretotal_complete_data
ytotal_month_data
, se imprime este mensaje
6.7 Llamada a la función para validación
content_validation(data, "marzo", "DPTO", c("OCI", "P7360", "P9460"))
data
: Conjunto de datos consolidado.marzo
: Mes que se quiere validar.DPTO
: Columna por la cual se agruparán los datos.c("OCI", "P7360", "P9460")
: Columnas para las cuales se sumarán los valores durante la validación.
Esta llamada a la función ejecuta la validación para el mes de marzo, comparando los resultados de las sumas en el conjunto de datos del mes específico con los resultados en el conjunto de datos consolidado.
6.8 Retorno de la función
1] "El contenido coincide" [
Apéndice
Función verify_variables()
La función verify_variables()
se utiliza para garantizar la consistencia en la estructura de los datos a lo largo del tiempo. Itera a través de los datos de cada mes, verifica si las columnas en los datos de cada mes coinciden con las de un conjunto de datos consolidado, y proporciona retroalimentación sobre cualquier discrepancia encontrada. Esto es crucial para asegurar que el análisis posterior sea consistente y preciso, evitando errores debido a diferencias en la estructura de los datos.
Función observations()
La función observations()
asegura la consistencia en el número de observaciones a lo largo de un conjunto de datos de diferentes meses. Al sumar el número de observaciones de cada mes y compararlo con el número de observaciones en el conjunto de datos consolidado, esta función ayuda a identificar posibles pérdidas o duplicaciones de datos. Este proceso es esencial para mantener la integridad de los datos en análisis longitudinales, donde las inconsistencias en el número de observaciones podrían afectar la validez de los resultados.
Función duplicate()
La función duplicate()
se utiliza para verificar la existencia de filas duplicadas en un conjunto de datos específico. Primero, identifica todas las filas duplicadas y las almacena en un nuevo data frame. Luego, verifica si hay o no filas duplicadas al comprobar el número de filas en el data frame de duplicados. Dependiendo del resultado, se imprime un mensaje para informar al usuario si hay duplicados en las filas o si todas las filas son únicas. Detectar y manejar duplicados es crucial en análisis de datos para evitar sesgos y asegurar que los resultados reflejen con precisión la realidad del fenómeno estudiado..
Función missing_values()
La función missing_values()
se utiliza para evaluar la completitud de datos en un conjunto específico de columnas dentro de un data frame. Al contar el número de valores faltantes NA
en cada columna especificada, esta función ayuda a identificar problemas de calidad de datos, como la presencia de registros incompletos. Tener columnas clave con valores faltantes puede afectar negativamente los análisis posteriores, por lo que esta función es útil para realizar una limpieza de datos inicial y asegurar que las columnas esenciales estén completas antes de proceder con análisis más detallados
Función select_suffix()
La función select_suffix()
permite seleccionar y mostrar columnas de un data.table
que terminan en los sufijos especificados. Si no se encuentran columnas con los sufijos proporcionados, la función informa al usuario. Esto facilita la identificación y el análisis de columnas específicas en un conjunto de datos.
Función content_validation()
La función content_validation()
se utiliza para verificar la consistencia de los datos entre un conjunto de datos mensual específico y un conjunto de datos consolidado. Primero, obtiene los datos del mes especificado y calcula las sumas de ciertas columnas agrupadas por una columna clave. Luego, realiza el mismo cálculo en el conjunto de datos consolidado para el mes correspondiente y compara los resultados. Esta función es esencial para asegurar que los datos de los meses individuales coincidan con los datos en el conjunto consolidado, garantizando así la integridad y precisión de los datos en el análisis.
Contáctanos
Te invitamos a explorar el proyecto completo, con todas su guias indicaciones y demás ¡Solo visita el repositorio del Proyecto!