Los Centros Comunitarios benefician a miles de personas en municipios urbanos y rurales, consolidándose como un modelo de proximidad social que contribuye a reducir brechas de desigualdad y fortalecer el sentido de pertenencia local. No obstante, persisten retos relevantes vinculados con la mejora de la infraestructura, la actualización de materiales y la ampliación de la cobertura en zonas con alta vulnerabilidad. Es por esto que se plantea la pregunta de investigación: ¿En qué medida los factores evaluados en los talleres de los Centros Comunitarios influyen en la recomendación y permanencia de los usuarios, y cómo puede utilizarse esta información para rediseñar y mejorar la oferta de servicios?
Las encuestas de percepción aplicadas a las y los usuarios de los Centros Comunitarios de Nuevo León evidencian un alto nivel de satisfacción con los talleres, especialmente en aspectos relacionados con la calidad de la enseñanza, la atención del personal y la pertinencia de los contenidos. En contraste, las observaciones críticas se centran principalmente en cuestiones específicas del espacio físico y en la disponibilidad de recursos dentro de los centros.
En la primera parte del proyecto (Actividad 1), se desarrolla de manera sistemática el proceso de carga, limpieza, unificación y análisis exploratorio de las bases de datos correspondientes a las Valoraciones de Talleres en Centros Comunitarios del Estado de Nuevo León.
Se definen las rutas y se importan múltiples archivos de Excel (los cuestionarios de valoración de talleres) que contienen información por año y trimestre. A través de una función, el código extrae automáticamente del nombre de cada archivo los valores correspondientes al año y trimestre, creando columnas específicas para integrarlos dentro de un solo data frame. Este procedimiento permite identificar la procedencia temporal de cada registro y mantener la trazabilidad de los datos originales.
Posteriormente, se normalizan los nombres de las variables y se estandarizan los formatos de texto. También se lleva a cabo un proceso de limpieza de datos, eliminando duplicados, registros vacíos y caracteres innecesarios. Se transforman las variables numéricas para facilitar su análisis posterior y se tipifican las variables cualitativas, garantizando la coherencia en todo el conjunto de datos consolidado.
Luego, se identifican y extraen las respuestas textuales o abiertas del instrumento de evaluación. El script detecta automáticamente las columnas que contienen texto libre mediante patrones en los nombres de las variables (por ejemplo, “coment”, “observ”, “texto” o “sugerencia”), generando para cada una un data frame independiente. Estos archivos se almacenan en una carpeta de salida llamada “salidas_texto”, lo que permite su análisis posterior mediante técnicas de minería de texto.
Finalmente, el código exporta los resultados principales: la base de datos consolidada, los estadísticos globales, los resúmenes por periodo y las respuestas abiertas en formato .csv. Con ello, se documenta de manera completa el proceso de preparación de la información para las siguientes etapas del proyecto.
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.1 ✔ stringr 1.5.2
## ✔ ggplot2 4.0.0 ✔ tibble 3.3.0
## ✔ lubridate 1.9.4 ✔ tidyr 1.3.1
## ✔ purrr 1.1.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(readxl)
library(janitor)
##
## Adjuntando el paquete: 'janitor'
##
## The following objects are masked from 'package:stats':
##
## chisq.test, fisher.test
library(stringr)
library(purrr)
library(skimr)
library(vroom)
##
## Adjuntando el paquete: 'vroom'
##
## The following objects are masked from 'package:readr':
##
## as.col_spec, col_character, col_date, col_datetime, col_double,
## col_factor, col_guess, col_integer, col_logical, col_number,
## col_skip, col_time, cols, cols_condense, cols_only, date_names,
## date_names_lang, date_names_langs, default_locale, fwf_cols,
## fwf_empty, fwf_positions, fwf_widths, locale, output_column,
## problems, spec
library(dplyr)
library(fs)
library(tibble)
library(ggplot2)
#Lectura de la carpeta
carpeta <- "C:/Users/User/OneDrive/Desktop/Nicole/LTP/Semestre 5/Ciencia de Datos 2/Entregable_1/Bases de datos_CC_SII"
# Archivos
archivos <- list.files(path = carpeta, pattern = "*.xlsx", full.names = TRUE)
# Almacenar archivos en una lista
lista_bases <- map(archivos, read_excel)
## Warning: Coercing text to numeric in E1875 / R1875C5: '64.'
## Warning: Coercing text to numeric in E1406 / R1406C5: '07'
## Warning: Coercing text to numeric in E1409 / R1409C5: '06'
## Warning: Coercing text to numeric in E3178 / R3178C5: '19.'
## Warning: Coercing text to numeric in E3312 / R3312C5: '08'
## Warning: Coercing text to numeric in E3717 / R3717C5: '09'
## New names:
## New names:
## • `Calidad de la información brindada por el personal del Centro Comunitario`
## -> `Calidad de la información brindada por el personal del Centro
## Comunitario...27`
## • `Calidad de la información brindada por el personal del Centro Comunitario`
## -> `Calidad de la información brindada por el personal del Centro
## Comunitario...28`
## • `Favor de justificar su respuesta` -> `Favor de justificar su respuesta...44`
## • `Favor de justificar su respuesta` -> `Favor de justificar su respuesta...46`
## • `Indique el por qué de su respuesta` -> `Indique el por qué de su
## respuesta...49`
## • `Indique el por qué de su respuesta` -> `Indique el por qué de su
## respuesta...51`
## Warning: Coercing text to numeric in E1083 / R1083C5: '09'
## Warning: Coercing text to numeric in E1133 / R1133C5: '06'
## Warning: Coercing text to numeric in E1908 / R1908C5: '19.'
## Warning: Coercing text to numeric in E1939 / R1939C5: '1.10'
## Warning: Coercing text to numeric in E2224 / R2224C5: '19.'
## Warning: Coercing text to numeric in E2226 / R2226C5: '19.'
## Warning: Coercing text to numeric in E2230 / R2230C5: '38.'
## Warning: Coercing text to numeric in E2632 / R2632C5: '65.'
## Warning: Coercing text to numeric in E2637 / R2637C5: '43.'
## Warning: Coercing text to numeric in E5412 / R5412C5: '64.'
## Warning: Coercing text to numeric in E5413 / R5413C5: '63.'
## Warning: Coercing text to numeric in E5414 / R5414C5: '62.'
## Warning: Coercing text to numeric in E5415 / R5415C5: '64.'
## Warning: Coercing text to numeric in E5416 / R5416C5: '64.'
## Warning: Coercing text to numeric in E5688 / R5688C5: '09'
## New names:
## New names:
## • `Calidad de la información brindada por el personal del Centro Comunitario`
## -> `Calidad de la información brindada por el personal del Centro
## Comunitario...27`
## • `Calidad de la información brindada por el personal del Centro Comunitario`
## -> `Calidad de la información brindada por el personal del Centro
## Comunitario...28`
## • `Favor de justificar su respuesta` -> `Favor de justificar su respuesta...44`
## • `Favor de justificar su respuesta` -> `Favor de justificar su respuesta...46`
## • `Indique el por qué de su respuesta` -> `Indique el por qué de su
## respuesta...49`
## • `Indique el por qué de su respuesta` -> `Indique el por qué de su
## respuesta...51`
## Warning: Coercing text to numeric in E1230 / R1230C5: '09'
## Warning: Coercing text to numeric in E1238 / R1238C5: '012'
## Warning: Coercing text to numeric in E1966 / R1966C5: '09'
## Warning: Coercing text to numeric in E2352 / R2352C5: '09'
## Warning: Coercing text to numeric in E3233 / R3233C5: '06'
## New names:
## • `Calidad de la información brindada por el personal del Centro Comunitario`
## -> `Calidad de la información brindada por el personal del Centro
## Comunitario...27`
## • `Calidad de la información brindada por el personal del Centro Comunitario`
## -> `Calidad de la información brindada por el personal del Centro
## Comunitario...28`
## • `Favor de justificar su respuesta` -> `Favor de justificar su respuesta...44`
## • `Favor de justificar su respuesta` -> `Favor de justificar su respuesta...46`
## • `Indique el por qué de su respuesta` -> `Indique el por qué de su
## respuesta...49`
## • `Indique el por qué de su respuesta` -> `Indique el por qué de su
## respuesta...51`
parse_año_trimestre <- function(file_path) {
fname <- basename(file_path)
# Extraer año (4 dígitos)
año <- str_extract(fname, "(?<!\\d)(19|20)\\d{2}(?!\\d)")
# Extraer número de trimestre
tri_num <- str_match(fname, "(?i)\\b([1-4])[\\s_-]*[Tt]\\b")[,2]
if (is.na(tri_num)) {
tri_num <- str_match(fname, "(?i)\\b[Tt][\\s_-]*([1-4])\\b")[,2]
}
# Normalizar siempre a T1, T2, T3, T4
trimestre <- if (!is.na(tri_num)) paste0("T", tri_num) else NA_character_
tibble(
año = año %||% NA_character_,
trimestre = trimestre,
año_trimestre = if (!is.na(año) && !is.na(trimestre)) paste0(año, "_", trimestre) else NA_character_
)
}
# 1) Función para leer y procesar un archivo
leer_archivo <- function(f) {
meta <- parse_año_trimestre(f)
readxl::read_excel(f, col_types = "text", guess_max = 10000) |>
# Limpia nombres de las columnas
janitor::clean_names() |>
# Quita espacios extra en todas las columnas
mutate(across(everything(), ~ .x |> str_squish())) |>
# Agrega columnas nuevas con metadatos
mutate(
año = meta$año,
trimestre = meta$trimestre,
año_trimestre = meta$año_trimestre
) |>
# Mueve las columnas clave al inicio
relocate(año, trimestre, año_trimestre, .before = 1)
}
# 2) Crear el DataFrame unificado
todo <- purrr::map_dfr(archivos, leer_archivo) |>
# Convertir todo a texto primero (seguro)
mutate(across(everything(), as.character)) |>
# Reemplazar cadenas vacías por NA
mutate(across(everything(), ~ na_if(.x, ""))) |>
# Inferir tipos automáticamente (números, fechas, etc.)
readr::type_convert(locale = readr::locale(decimal_mark = ".")) |>
# Eliminar filas totalmente vacías
janitor::remove_empty("rows") |>
# Eliminar duplicados exactos
distinct()
## New names:
## New names:
## New names:
## New names:
## New names:
## ── Column specification
## ──────────────────────────────────────────────────────── cols( .default =
## col_character(), año = col_double(), marca_temporal = col_double(),
## fecha_en_que_se_aplica_la_encuesta = col_logical(),
## x2_cuantos_anos_cumplidos_tiene = col_double(), horario_de_inicio_de_taller =
## col_double(),
## x1_1_en_caso_de_haber_respondido_no_en_la_pregunta_anterior_favor_de_responder_el_costo_del_tramite_de_inscripcion
## = col_double(), el_contenido_o_temas_del_curso_taller = col_double(),
## la_cantidad_y_calidad_de_materiales_y_equipo_utilizados_en_el_curso_taller =
## col_double(), los_horarios_del_curso_taller = col_double(),
## el_conocimiento_del_tallerista_o_instructor_sobre_el_tema_del_curso_taller =
## col_double(), la_forma_de_ensenanza_utilizada_en_las_clases = col_double(),
## la_motivacion_a_la_participacion_de_parte_del_tallerista_o_instructor =
## col_double(),
## el_cumplimiento_del_tallerista_o_instructor_con_los_horarios_establecidos =
## col_double(),
## la_resolucion_de_preguntas_dudas_y_el_enriquecimiento_de_comentarios =
## col_double(),
## trato_recibido_por_el_personal_que_labora_en_el_centro_comunitario =
## col_double(),
## calidad_de_la_informacion_brindada_por_el_personal_del_centro_comunitario =
## col_double(), salones_o_aulas = col_double(), salas_de_computo = col_double(),
## banos = col_double(), gimnasio_canchas = col_double() # ... with 27 more
## columns ) ℹ Use `spec()` for the full column specifications.
## • `Calidad de la información brindada por el personal del Centro Comunitario`
## -> `Calidad de la información brindada por el personal del Centro
## Comunitario...27`
## • `Calidad de la información brindada por el personal del Centro Comunitario`
## -> `Calidad de la información brindada por el personal del Centro
## Comunitario...28`
## • `Favor de justificar su respuesta` -> `Favor de justificar su respuesta...44`
## • `Favor de justificar su respuesta` -> `Favor de justificar su respuesta...46`
## • `Indique el por qué de su respuesta` -> `Indique el por qué de su
## respuesta...49`
## • `Indique el por qué de su respuesta` -> `Indique el por qué de su
## respuesta...51`
# 3) Chequeo de sanidad: trimestres válidos
stopifnot(all(is.na(todo$trimestre) | todo$trimestre %in% c("T1","T2","T3","T4")))
extraer_respuestas_abiertas <- function(df = todo,
exportar = TRUE,
dir_salida = "salidas_texto",
umbral_unicos = 0.20,
umbral_long = 15) {
stopifnot(is.data.frame(df))
# Chequeos suaves de columnas meta (no falla si no están todas)
cols_meta_posibles <- c("año","trimestre","año_trimestre","archivo","source_file")
cols_presentes <- intersect(cols_meta_posibles, names(df))
if (!"año_trimestre" %in% cols_presentes) {
message("Sugerencia: agrega 'año_trimestre' para mejores reportes por periodo.")
}
# Columnas de texto candidatas
cols_char <- df |> select(where(is.character)) |> names()
if (length(cols_char) == 0) {
stop("No se encontraron columnas de texto (tipo character) en 'df'.")
}
# Detección por nombre (patrones)
patron_texto <- "(coment|sugerenc|sugerencia|opinion|opinión|observ|abiert|texto|porque|por_que|justific|descripcion|descripción|otro)"
por_nombre <- cols_char[str_detect(cols_char, regex(patron_texto, ignore_case = TRUE))]
# Métricas de contenido (proporción únicos + longitud media)
texto_metricas <- tibble(variable = cols_char) |>
mutate(
prop_unique = map_dbl(variable, ~{
v <- df[[.x]]
if (is.null(v) || all(is.na(v))) return(0)
n_distinct(v, na.rm = TRUE) / max(1, sum(!is.na(v)))
}),
long_media = map_dbl(variable, ~{
v <- df[[.x]]; v <- v[!is.na(v)]
if (length(v) == 0) return(0)
mean(nchar(v), na.rm = TRUE)
})
)
por_contenido <- texto_metricas |>
filter(prop_unique >= umbral_unicos | long_media >= umbral_long) |>
pull(variable)
# Unión final de candidatas
vars_texto <- union(por_nombre, por_contenido)
if (length(vars_texto) == 0) vars_texto <- cols_char
# Detectar columna id si existe
posibles_id <- intersect(names(df),
c("id","folio","id_persona","id_registro","id_participante","clave","id_encuesta"))
col_id <- if (length(posibles_id) > 0) posibles_id[1] else NULL
# Auxiliar: limpiar cada columna de texto
limpiar_texto_df <- function(df, var_texto, col_id = NULL) {
keep_cols <- c("año","trimestre","año_trimestre","archivo", var_texto)
if (!"archivo" %in% names(df) && "source_file" %in% names(df)) {
df <- df |> mutate(archivo = source_file)
}
if (!is.null(col_id)) keep_cols <- union(keep_cols, col_id)
out <- df |>
select(any_of(keep_cols)) |>
mutate(!!var_texto := .data[[var_texto]] |> str_squish()) |>
filter(!is.na(.data[[var_texto]]), nzchar(.data[[var_texto]])) |>
filter(nchar(.data[[var_texto]]) >= 3) |>
distinct()
metas <- intersect(c("año","trimestre","año_trimestre","archivo", col_id), names(out))
if (length(metas) > 0) out <- out |> relocate(all_of(metas), .before = 1)
out |> rename(respuesta_texto = all_of(var_texto))
}
# Construir lista de dataframes por pregunta
listas_texto <- set_names(vars_texto) |>
map(~ limpiar_texto_df(df, .x, col_id = col_id))
# Inventario por periodo
inventario <- map_df(names(listas_texto), function(v){
listas_texto[[v]] |>
count(año_trimestre, name = "n_respuestas") |>
mutate(variable_texto = v, .before = 1)
}) |>
arrange(variable_texto, año_trimestre)
# Exportación segura
if (exportar) {
if (!dir.exists(dir_salida)) dir.create(dir_salida, recursive = TRUE)
# Nombre seguro: sin caracteres raros, máx 50 chars y único
safe_name <- function(x) {
y <- gsub("[^A-Za-z0-9_]+", "_", x)
y <- substr(y, 1, 50)
y
}
nombres_seg <- map_chr(names(listas_texto), safe_name)
# Evitar colisiones si truncó igual
nombres_seg <- make.unique(nombres_seg, sep = "_")
walk2(listas_texto, nombres_seg, \(df_i, nm) {
fn <- file.path(dir_salida, paste0("abierta_", nm, ".csv"))
write_csv(df_i, fn, na = "")
})
write_csv(inventario, file.path(dir_salida, "inventario_preguntas_abiertas.csv"), na = "")
message("CSVs creados en: ", normalizePath(dir_salida))
}
# Retorno
list(
variables_detectadas = vars_texto,
metricas_contenido = texto_metricas,
inventario_por_periodo = inventario,
dataframes_por_pregunta = listas_texto
)
}
# Ejecutar
respuestas_texto <- extraer_respuestas_abiertas(
df = todo,
exportar = TRUE,
dir_salida = "salidas_texto"
)
## CSVs creados en: C:\Users\User\OneDrive\Desktop\Nicole\LTP\Semestre 5\Ciencia de Datos 2\Entregable_1\salidas_texto
# Resumen útil en consola
cat("Variables de texto detectadas:\n")
## Variables de texto detectadas:
print(respuestas_texto$variables_detectadas)
## [1] "comentarios_sobre_el_curso_o_taller_que_recibio"
## [2] "comentarios_sobre_el_tallerista_o_instructor_que_impartio_el_curso"
## [3] "comentarios_sobre_el_personal_del_centro_comunitario"
## [4] "comentarios_sobre_la_infraestructura_del_centro_comunitario"
## [5] "x5_1_en_caso_de_haber_respondido_no_en_la_pregunta_anterior_favor_de_justificar_su_respuesta"
## [6] "x7_1_en_caso_de_haber_respondido_no_en_la_pregunta_anterior_favor_de_justificar_su_respuesta"
## [7] "x8_estaria_interesado_a_en_tomar_otro_curso_taller_en_este_centro_comunitario"
## [8] "x8_1_en_caso_de_haber_respondido_no_en_la_pregunta_anterior_favor_de_justificar_su_respuesta"
## [9] "x9_1_si_su_respuesta_fue_insatisfecho_a_indique_por_que"
## [10] "x10_si_tiene_algun_otro_curso_o_taller_que_le_interesaria_tomar_que_no_se_ofrece_en_el_centro_comunitario_favor_de_mencionarlo"
## [11] "x11_en_su_opinion_cual_es_el_principal_aspecto_a_mejorar_en_los_centros_comunitarios"
## [12] "otras_sugerencias_u_opiniones_que_permitan_mejorar_los_servicios_brindados_en_el_centro_comunitario"
## [13] "otro_taller_que_haya_tomado_en_el_trimestre_coloque_un_cero_si_no_tomo_otro_taller"
## [14] "favor_de_justificar_su_respuesta_44"
## [15] "favor_de_justificar_su_respuesta_46"
## [16] "indique_el_por_que_de_su_respuesta_49"
## [17] "estaria_interesado_a_en_tomar_otro_curso_taller_en_este_centro_comunitario"
## [18] "indique_el_por_que_de_su_respuesta_51"
## [19] "si_su_respuesta_fue_insatisfecho_indique_por_que_en_caso_contrario_coloque_un_cero"
## [20] "si_tiene_algun_otro_curso_o_taller_que_le_interesaria_tomar_que_no_se_ofrece_en_el_centro_comunitario_favor_de_mencionarlo"
## [21] "en_su_opinion_cual_es_el_principal_aspecto_a_mejorar_en_los_centros_comunitarios"
## [22] "otras_sugerencia_u_opiniones_que_permitan_mejorar_los_servicios_brindados_en_el_centro_comunitario"
## [23] "favor_de_justificar_su_respuesta_41"
## [24] "favor_de_justificar_su_respuesta_43"
## [25] "indique_el_por_que_de_su_respuesta_46"
## [26] "indique_el_por_que_de_su_respuesta_48"
## [27] "por_que_medio_se_entero_del_curso_o_taller"
## [28] "estaria_interesado_a_en_tomar_otro_curso_o_taller_en_este_centro_comunitario"
## [29] "sugerencia_o_comentario_que_nos_permita_mejorar_el_taller_o_eventos_a_los_que_asistio_opcional"
## [30] "en_caso_de_elegir_otro_menciona_el_taller_al_que_asistes"
## [31] "pudiera_darnos_alguna_sugerencia_u_opinion_que_nos_permita_mejorar_este_curso_taller_o_sobre_los_eventos_a_los_que_asistio"
## [32] "x4_cual_es_su_maximo_nivel_de_escolaridad_alcanzado_al_dia_de_hoy"
## [33] "x5_a_que_se_dedica_actualmente_puede_seleccionar_una_o_mas_opciones"
## [34] "curso_o_taller_que_cursa_o_termino"
## [35] "x4_1_en_caso_de_haber_respondido_no_en_la_pregunta_anterior_que_considera_usted_se_puede_mejorar_en_las_instalaciones_para_tener_accesibilidad"
## [36] "x6_lo_que_usted_aprendio_en_el_curso_taller_en_que_ambito_de_su_vida_lo_aplicaria_puede_marcar_hasta_dos_opciones"
## [37] "fecha_de_nacimiento"
## [38] "cual_es_su_maximo_nivel_de_escolaridad_alcanzado_al_dia_de_hoy"
## [39] "a_que_se_dedica_actualmente_puede_seleccionar_una_o_mas_opciones"
## [40] "lo_que_usted_aprendio_en_el_curso_taller_en_que_ambito_de_su_vida_lo_aplicaria_puede_marcar_hasta_dos_opciones"
## [41] "nombre"
## [42] "curso_o_taller_que_termino"
## [43] "lo_que_usted_aprendio_en_el_curso_o_taller_en_donde_lo_aplicaria"
## [44] "esta_satisfecho_a_o_insatisfecho_a_con_los_eventos_deportivos_culturales_artisticos_a_los_que_usted_o_alguien_de_su_familia_ha_asistido_en_el_ano_en_curso"
## [45] "escolaridad_actual"
## [46] "a_que_se_dedica_actualmente"
## [47] "nombre_opcional"
## [48] "telefono_o_celular_opcional"
## [49] "justifique_su_respuesta_en_caso_de_haber_respondido_no_en_la_pregunta_anterior"
## [50] "nombre_del_entrevistado"
## [51] "lo_que_usted_aprendio_en_el_curso_taller_en_donde_lo_aplicaria"
## [52] "senale_su_escolaridad_actual"
## [53] "nombre_del_entrevistado_opcional"
cat("\nInventario (primeras 10 filas):\n")
##
## Inventario (primeras 10 filas):
print(head(respuestas_texto$inventario_por_periodo, 10))
## # A tibble: 10 × 3
## variable_texto año_trimestre n_respuestas
## <chr> <chr> <int>
## 1 a_que_se_dedica_actualmente 2017_T4 15
## 2 a_que_se_dedica_actualmente 2018_T4 6
## 3 a_que_se_dedica_actualmente 2019_T4 16
## 4 a_que_se_dedica_actualmente 2020_T4 35
## 5 a_que_se_dedica_actualmente 2021_T4 112
## 6 a_que_se_dedica_actualmente_puede_seleccionar_una… 2024_T2 185
## 7 a_que_se_dedica_actualmente_puede_seleccionar_una… 2024_T3 160
## 8 a_que_se_dedica_actualmente_puede_seleccionar_una… 2024_T4 172
## 9 a_que_se_dedica_actualmente_puede_seleccionar_una… 2025_T1 173
## 10 a_que_se_dedica_actualmente_puede_seleccionar_una… 2025_T2 196
La Actividad 2 desarrolla la segunda etapa del proyecto de análisis de los talleres impartidos en los Centros Comunitarios de Nuevo León, enfocándose en el procesamiento, limpieza y análisis exploratorio de las respuestas textuales obtenidas en las encuestas de percepción aplicadas a las y los usuarios. Su objetivo principal es identificar patrones de opinión, temas recurrentes y palabras clave que reflejen la experiencia de los participantes con los talleres comunitarios.
En la primera sección, el script carga los archivos generados previamente en la Actividad 1 (uno por cada pregunta abierta), asegurando su correcta lectura y unificación. Para cada archivo, se implementan funciones que verifican la ausencia de valores vacíos, eliminan caracteres especiales y transforman el texto a minúsculas. Posteriormente, se realiza una limpieza lingüística exhaustiva, que incluye la eliminación de puntuación, números, espacios extra y stopwords en español, además de términos irrelevantes o repetitivos que pudieran distorsionar los resultados.
Una vez preparado el corpus textual, el código genera representaciones visuales que facilitan la interpretación de los datos. Mediante el uso de la librería tm, se construye una matriz término-documento (DTM) y se calculan las frecuencias de cada palabra en el conjunto de respuestas. En la parte final, el código aplica un modelo de análisis de tópicos (LDA – Latent Dirichlet Allocation) con el fin de identificar agrupamientos semánticos dentro del texto. Este procedimiento permite reconocer los temas subyacentes en las opiniones, vinculando las palabras más representativas a distintos ejes de percepción, como calidad de la enseñanza, atención del personal, infraestructura y materiales.
library(tidyverse)
library(readxl)
library(janitor)
library(stringr)
library(purrr)
library(skimr)
library(vroom)
library(dplyr)
library(fs)
library(tibble)
library(ggplot2)
library(rvest)
##
## Adjuntando el paquete: 'rvest'
## The following object is masked from 'package:readr':
##
## guess_encoding
library(xml2)
library(tm)
## Cargando paquete requerido: NLP
##
## Adjuntando el paquete: 'NLP'
## The following object is masked from 'package:ggplot2':
##
## annotate
library(wordcloud2)
library(topicmodels)
library(stopwords)
##
## Adjuntando el paquete: 'stopwords'
## The following object is masked from 'package:tm':
##
## stopwords
library(tidytext)
library(slam)
library(stringi)
library(knitr)
library(purrr)
#Agarrar los archivos generados en act1
ruta_textos <- "salidas_texto"
archivos <- list.files(ruta_textos, pattern = "\\.(csv|txt)$", full.names = TRUE)
#Imprimir archivos encontrados
cat("Archivos encontrados:\n")
## Archivos encontrados:
print(archivos)
## [1] "salidas_texto/abierta_a_que_se_dedica_actualmente.csv"
## [2] "salidas_texto/abierta_a_que_se_dedica_actualmente_puede_seleccionar_una_.csv"
## [3] "salidas_texto/abierta_a_que_se_dedica_actualmente_puede_seleccionar_una_o_mas_opciones.csv"
## [4] "salidas_texto/abierta_comentarios_sobre_el_curso_o_taller_que_recibio.csv"
## [5] "salidas_texto/abierta_comentarios_sobre_el_personal_del_centro_comunitar.csv"
## [6] "salidas_texto/abierta_comentarios_sobre_el_personal_del_centro_comunitario.csv"
## [7] "salidas_texto/abierta_comentarios_sobre_el_tallerista_o_instructor_que_i.csv"
## [8] "salidas_texto/abierta_comentarios_sobre_el_tallerista_o_instructor_que_impartio_el_curso.csv"
## [9] "salidas_texto/abierta_comentarios_sobre_la_infraestructura_del_centro_co.csv"
## [10] "salidas_texto/abierta_comentarios_sobre_la_infraestructura_del_centro_comunitario.csv"
## [11] "salidas_texto/abierta_cual_es_su_maximo_nivel_de_escolaridad_alcanzado_a.csv"
## [12] "salidas_texto/abierta_cual_es_su_maximo_nivel_de_escolaridad_alcanzado_al_dia_de_hoy.csv"
## [13] "salidas_texto/abierta_curso_o_taller_que_cursa_o_termino.csv"
## [14] "salidas_texto/abierta_curso_o_taller_que_termino.csv"
## [15] "salidas_texto/abierta_en_caso_de_elegir_otro_menciona_el_taller_al_que_a.csv"
## [16] "salidas_texto/abierta_en_caso_de_elegir_otro_menciona_el_taller_al_que_asistes.csv"
## [17] "salidas_texto/abierta_en_su_opinion_cual_es_el_principal_aspecto_a_mejor.csv"
## [18] "salidas_texto/abierta_en_su_opinion_cual_es_el_principal_aspecto_a_mejorar_en_los_centros_comunitarios.csv"
## [19] "salidas_texto/abierta_escolaridad_actual.csv"
## [20] "salidas_texto/abierta_esta_satisfecho_a_o_insatisfecho_a_con_los_eventos.csv"
## [21] "salidas_texto/abierta_estaria_interesado_a_en_tomar_otro_curso_o_taller_.csv"
## [22] "salidas_texto/abierta_estaria_interesado_a_en_tomar_otro_curso_o_taller_en_este_centro_comunitario.csv"
## [23] "salidas_texto/abierta_estaria_interesado_a_en_tomar_otro_curso_taller_en.csv"
## [24] "salidas_texto/abierta_estaria_interesado_a_en_tomar_otro_curso_taller_en_este_centro_comunitario.csv"
## [25] "salidas_texto/abierta_favor_de_justificar_su_respuesta_41.csv"
## [26] "salidas_texto/abierta_favor_de_justificar_su_respuesta_43.csv"
## [27] "salidas_texto/abierta_favor_de_justificar_su_respuesta_44.csv"
## [28] "salidas_texto/abierta_favor_de_justificar_su_respuesta_46.csv"
## [29] "salidas_texto/abierta_fecha_de_nacimiento.csv"
## [30] "salidas_texto/abierta_indique_el_por_que_de_su_respuesta_46.csv"
## [31] "salidas_texto/abierta_indique_el_por_que_de_su_respuesta_48.csv"
## [32] "salidas_texto/abierta_indique_el_por_que_de_su_respuesta_49.csv"
## [33] "salidas_texto/abierta_indique_el_por_que_de_su_respuesta_51.csv"
## [34] "salidas_texto/abierta_justifique_su_respuesta_en_caso_de_haber_respondid.csv"
## [35] "salidas_texto/abierta_lo_que_usted_aprendio_en_el_curso_o_taller_en_dond.csv"
## [36] "salidas_texto/abierta_lo_que_usted_aprendio_en_el_curso_o_taller_en_donde_lo_aplicaria.csv"
## [37] "salidas_texto/abierta_lo_que_usted_aprendio_en_el_curso_taller_en_donde_.csv"
## [38] "salidas_texto/abierta_lo_que_usted_aprendio_en_el_curso_taller_en_que_am.csv"
## [39] "salidas_texto/abierta_lo_que_usted_aprendio_en_el_curso_taller_en_que_ambito_de_su_vida_lo_aplicaria_puede_marcar_hasta_dos_opciones.csv"
## [40] "salidas_texto/abierta_nombre.csv"
## [41] "salidas_texto/abierta_nombre_del_entrevistado.csv"
## [42] "salidas_texto/abierta_nombre_del_entrevistado_opcional.csv"
## [43] "salidas_texto/abierta_nombre_opcional.csv"
## [44] "salidas_texto/abierta_otras_sugerencia_u_opiniones_que_permitan_mejorar_.csv"
## [45] "salidas_texto/abierta_otras_sugerencia_u_opiniones_que_permitan_mejorar_los_servicios_brindados_en_el_centro_comunitario.csv"
## [46] "salidas_texto/abierta_otras_sugerencias_u_opiniones_que_permitan_mejorar.csv"
## [47] "salidas_texto/abierta_otras_sugerencias_u_opiniones_que_permitan_mejorar_los_servicios_brindados_en_el_centro_comunitario.csv"
## [48] "salidas_texto/abierta_otro_taller_que_haya_tomado_en_el_trimestre_coloqu.csv"
## [49] "salidas_texto/abierta_otro_taller_que_haya_tomado_en_el_trimestre_coloque_un_cero_si_no_tomo_otro_taller.csv"
## [50] "salidas_texto/abierta_por_que_medio_se_entero_del_curso_o_taller.csv"
## [51] "salidas_texto/abierta_pudiera_darnos_alguna_sugerencia_u_opinion_que_nos.csv"
## [52] "salidas_texto/abierta_pudiera_darnos_alguna_sugerencia_u_opinion_que_nos_permita_mejorar_este_curso_taller_o_sobre_los_eventos_a_los_que_asistio.csv"
## [53] "salidas_texto/abierta_senale_su_escolaridad_actual.csv"
## [54] "salidas_texto/abierta_si_su_respuesta_fue_insatisfecho_indique_por_que_e.csv"
## [55] "salidas_texto/abierta_si_su_respuesta_fue_insatisfecho_indique_por_que_en_caso_contrario_coloque_un_cero.csv"
## [56] "salidas_texto/abierta_si_tiene_algun_otro_curso_o_taller_que_le_interesa.csv"
## [57] "salidas_texto/abierta_si_tiene_algun_otro_curso_o_taller_que_le_interesaria_tomar_que_no_se_ofrece_en_el_centro_comunitario_favor_de_mencionarlo.csv"
## [58] "salidas_texto/abierta_sugerencia_o_comentario_que_nos_permita_mejorar_el.csv"
## [59] "salidas_texto/abierta_sugerencia_o_comentario_que_nos_permita_mejorar_el_taller_o_eventos_a_los_que_asistio_opcional.csv"
## [60] "salidas_texto/abierta_telefono_o_celular_opcional.csv"
## [61] "salidas_texto/abierta_x10_si_tiene_algun_otro_curso_o_taller_que_le_inte.csv"
## [62] "salidas_texto/abierta_x10_si_tiene_algun_otro_curso_o_taller_que_le_interesaria_tomar_que_no_se_ofrece_en_el_centro_comunitario_favor_de_mencionarlo.csv"
## [63] "salidas_texto/abierta_x11_en_su_opinion_cual_es_el_principal_aspecto_a_m.csv"
## [64] "salidas_texto/abierta_x11_en_su_opinion_cual_es_el_principal_aspecto_a_mejorar_en_los_centros_comunitarios.csv"
## [65] "salidas_texto/abierta_x4_1_en_caso_de_haber_respondido_no_en_la_pregunta.csv"
## [66] "salidas_texto/abierta_x4_1_en_caso_de_haber_respondido_no_en_la_pregunta_anterior_que_considera_usted_se_puede_mejorar_en_las_instalaciones_para_tener_accesibilidad.csv"
## [67] "salidas_texto/abierta_x4_cual_es_su_maximo_nivel_de_escolaridad_alcanzad.csv"
## [68] "salidas_texto/abierta_x4_cual_es_su_maximo_nivel_de_escolaridad_alcanzado_al_dia_de_hoy.csv"
## [69] "salidas_texto/abierta_x5_1_en_caso_de_haber_respondido_no_en_la_pregunta.csv"
## [70] "salidas_texto/abierta_x5_1_en_caso_de_haber_respondido_no_en_la_pregunta_anterior_favor_de_justificar_su_respuesta.csv"
## [71] "salidas_texto/abierta_x5_a_que_se_dedica_actualmente_puede_seleccionar_u.csv"
## [72] "salidas_texto/abierta_x5_a_que_se_dedica_actualmente_puede_seleccionar_una_o_mas_opciones.csv"
## [73] "salidas_texto/abierta_x6_lo_que_usted_aprendio_en_el_curso_taller_en_que.csv"
## [74] "salidas_texto/abierta_x6_lo_que_usted_aprendio_en_el_curso_taller_en_que_ambito_de_su_vida_lo_aplicaria_puede_marcar_hasta_dos_opciones.csv"
## [75] "salidas_texto/abierta_x7_1_en_caso_de_haber_respondido_no_en_la_pregunta.csv"
## [76] "salidas_texto/abierta_x7_1_en_caso_de_haber_respondido_no_en_la_pregunta_anterior_favor_de_justificar_su_respuesta.csv"
## [77] "salidas_texto/abierta_x8_1_en_caso_de_haber_respondido_no_en_la_pregunta.csv"
## [78] "salidas_texto/abierta_x8_1_en_caso_de_haber_respondido_no_en_la_pregunta_anterior_favor_de_justificar_su_respuesta.csv"
## [79] "salidas_texto/abierta_x8_estaria_interesado_a_en_tomar_otro_curso_taller.csv"
## [80] "salidas_texto/abierta_x8_estaria_interesado_a_en_tomar_otro_curso_taller_en_este_centro_comunitario.csv"
## [81] "salidas_texto/abierta_x9_1_si_su_respuesta_fue_insatisfecho_a_indique_po.csv"
## [82] "salidas_texto/abierta_x9_1_si_su_respuesta_fue_insatisfecho_a_indique_por_que.csv"
## [83] "salidas_texto/inventario_preguntas_abiertas.csv"
leer_texto <- function(archivo) {
# Leer los csv
if (grepl("\\.csv$", archivo)) {
# Se carga como data frame
df <- read_csv(archivo, show_col_types = FALSE)
# Concatena las respuestas a un solo texto
if ("respuesta_texto" %in% names(df)) {
texto <- paste(df$respuesta_texto, collapse = " ")
# Si no hay columna de las respuestas, agarra todo el cvs
} else {
texto <- paste(unlist(df), collapse = " ")
}
# Por si el archivo no es cvs
} else {
texto <- readLines(archivo, warn = FALSE)
texto <- paste(texto, collapse = " ")
}
texto
}
# Lee todos los archivos uno por uno y los convierte en texto con leer_texto().
# Se guarda cada resultado dentro de una lista.
textos <- lapply(archivos, leer_texto)
names(textos) <- basename(archivos)
# Crear un corpus con todos los textos para limpieza
corpus <- Corpus(VectorSource(textos))
# Limpieza básica
corpus <- tm_map(corpus, content_transformer(tolower)) # minúsculas
## Warning in tm_map.SimpleCorpus(corpus, content_transformer(tolower)):
## transformation drops documents
corpus <- tm_map(corpus, removePunctuation) # eliminar puntuación
## Warning in tm_map.SimpleCorpus(corpus, removePunctuation): transformation drops
## documents
corpus <- tm_map(corpus, removeNumbers) # eliminar números
## Warning in tm_map.SimpleCorpus(corpus, removeNumbers): transformation drops
## documents
corpus <- tm_map(corpus, stripWhitespace) # eliminar espacios vacios
## Warning in tm_map.SimpleCorpus(corpus, stripWhitespace): transformation drops
## documents
corpus <- tm_map(corpus, removeWords, stopwords("es")) # quitar artículos en español
## Warning in tm_map.SimpleCorpus(corpus, removeWords, stopwords("es")):
## transformation drops documents
corpus <- tm_map(corpus, content_transformer(function(x) stri_trans_general(x, "Latin-ASCII"))) # quitar acentos
## Warning in tm_map.SimpleCorpus(corpus, content_transformer(function(x)
## stri_trans_general(x, : transformation drops documents
# Quitar palabras irrelevantes específicas
palabras_eliminar <- c("hay", "gusta", "puede", "seguir", "maestro", "tener", "mas", "sirve", "siempre", "puedo", "momento", "cada", "cuenta", "dudas", "pues", "agua", "mucha", "hace", "muchas", "personas", "poder", "totalmente", "rampa", "ser", "aprendido", "rampas", "taller", "talleres", "solo", "si", "aprender", "cosas", "hernandez")
corpus <- tm_map(corpus, removeWords, palabras_eliminar)
## Warning in tm_map.SimpleCorpus(corpus, removeWords, palabras_eliminar):
## transformation drops documents
# Matrix término-documento
# Convierte el texto en datos estructurados: para contar palabras, hacer nubes, gráficos o análisis más avanzados
dtm <- DocumentTermMatrix(
corpus,
control = list(
wordLengths = c(2, Inf) # descarta tokens de 1 letra
# bounds = list(global = c(3, Inf)) # (opcional) solo términos que aparezcan en ≥3 docs
)
)
# Detectar filas vacías
rs <- row_sums(dtm)
sum(rs == 0) # cuántos docs vacíos quedaron
## [1] 7
# Filtrar documentos con al menos 1 término
dtm <- dtm[rs > 0, ]
corpus <- corpus[rs > 0] # mantén corpus y dtm alineados
# Inspeccionar la matriz
inspect(dtm[1:5, 1:5])
## <<DocumentTermMatrix (documents: 5, terms: 5)>>
## Non-/sparse entries: 17/8
## Sparsity : 32%
## Maximal term length: 11
## Weighting : term frequency (tf)
## Sample :
## Terms
## Docs abarrotes acabo actividades adultos ala
## 1 1 1 1 1 1
## 2 0 1 0 0 4
## 3 0 1 0 0 4
## 4 0 3 86 5 12
## 5 0 3 26 3 19
# muestra rápida
# Sumar columnas para el conteo total de cada término
conteo_total <- colSums(as.matrix(dtm))
# Ordena y muestra los términos más comunes
terminos_comunes <- sort(conteo_total, decreasing = TRUE)
# Convierte los términos más comunes y sus frecuencias en un data frame
terminos_df <- data.frame(
word = names(terminos_comunes),
freq = as.numeric(terminos_comunes)
)
##Tablas o gráficos con los estadísticos descriptivos más relevantes.
# Revisión de Estadísticos Generales
# Número total de registros
registros_totales <- nrow(todo)
cat("Número total de registros en la base unificada:", registros_totales, "\n")
## Número total de registros en la base unificada: 36465
# Registros por periodos
registros_por_periodo <- todo |>
count(año_trimestre, name = "Número de registros por trimestre y año") |>
arrange(año_trimestre)
print(registros_por_periodo)
## # A tibble: 11 × 2
## año_trimestre `Número de registros por trimestre y año`
## <chr> <int>
## 1 2017_T4 464
## 2 2018_T4 407
## 3 2019_T4 583
## 4 2020_T4 920
## 5 2021_T4 4226
## 6 2022_T1 2310
## 7 2024_T2 5391
## 8 2024_T3 5354
## 9 2024_T4 4782
## 10 2025_T1 6172
## 11 2025_T2 5856
## Estadísticos descriptivos de variables numéricas de todo
resumen_num <- todo |>
select(where(is.numeric)) |>
summarise(across(
everything(),
list(
media = ~ mean(.x, na.rm = TRUE),
desviacion = ~ sd(.x, na.rm = TRUE),
minimo = ~ min(.x, na.rm = TRUE),
maximo = ~ max(.x, na.rm = TRUE)
),
.names = "{.col}_{.fn}"
))
knitr::kable(resumen_num, caption = "Estadísticos descriptivos de variables numéricas")
| año_media | año_desviacion | año_minimo | año_maximo | marca_temporal_media | marca_temporal_desviacion | marca_temporal_minimo | marca_temporal_maximo | x2_cuantos_anos_cumplidos_tiene_media | x2_cuantos_anos_cumplidos_tiene_desviacion | x2_cuantos_anos_cumplidos_tiene_minimo | x2_cuantos_anos_cumplidos_tiene_maximo | horario_de_inicio_de_taller_media | horario_de_inicio_de_taller_desviacion | horario_de_inicio_de_taller_minimo | horario_de_inicio_de_taller_maximo | x1_1_en_caso_de_haber_respondido_no_en_la_pregunta_anterior_favor_de_responder_el_costo_del_tramite_de_inscripcion_media | x1_1_en_caso_de_haber_respondido_no_en_la_pregunta_anterior_favor_de_responder_el_costo_del_tramite_de_inscripcion_desviacion | x1_1_en_caso_de_haber_respondido_no_en_la_pregunta_anterior_favor_de_responder_el_costo_del_tramite_de_inscripcion_minimo | x1_1_en_caso_de_haber_respondido_no_en_la_pregunta_anterior_favor_de_responder_el_costo_del_tramite_de_inscripcion_maximo | el_contenido_o_temas_del_curso_taller_media | el_contenido_o_temas_del_curso_taller_desviacion | el_contenido_o_temas_del_curso_taller_minimo | el_contenido_o_temas_del_curso_taller_maximo | la_cantidad_y_calidad_de_materiales_y_equipo_utilizados_en_el_curso_taller_media | la_cantidad_y_calidad_de_materiales_y_equipo_utilizados_en_el_curso_taller_desviacion | la_cantidad_y_calidad_de_materiales_y_equipo_utilizados_en_el_curso_taller_minimo | la_cantidad_y_calidad_de_materiales_y_equipo_utilizados_en_el_curso_taller_maximo | los_horarios_del_curso_taller_media | los_horarios_del_curso_taller_desviacion | los_horarios_del_curso_taller_minimo | los_horarios_del_curso_taller_maximo | el_conocimiento_del_tallerista_o_instructor_sobre_el_tema_del_curso_taller_media | el_conocimiento_del_tallerista_o_instructor_sobre_el_tema_del_curso_taller_desviacion | el_conocimiento_del_tallerista_o_instructor_sobre_el_tema_del_curso_taller_minimo | el_conocimiento_del_tallerista_o_instructor_sobre_el_tema_del_curso_taller_maximo | la_forma_de_ensenanza_utilizada_en_las_clases_media | la_forma_de_ensenanza_utilizada_en_las_clases_desviacion | la_forma_de_ensenanza_utilizada_en_las_clases_minimo | la_forma_de_ensenanza_utilizada_en_las_clases_maximo | la_motivacion_a_la_participacion_de_parte_del_tallerista_o_instructor_media | la_motivacion_a_la_participacion_de_parte_del_tallerista_o_instructor_desviacion | la_motivacion_a_la_participacion_de_parte_del_tallerista_o_instructor_minimo | la_motivacion_a_la_participacion_de_parte_del_tallerista_o_instructor_maximo | el_cumplimiento_del_tallerista_o_instructor_con_los_horarios_establecidos_media | el_cumplimiento_del_tallerista_o_instructor_con_los_horarios_establecidos_desviacion | el_cumplimiento_del_tallerista_o_instructor_con_los_horarios_establecidos_minimo | el_cumplimiento_del_tallerista_o_instructor_con_los_horarios_establecidos_maximo | la_resolucion_de_preguntas_dudas_y_el_enriquecimiento_de_comentarios_media | la_resolucion_de_preguntas_dudas_y_el_enriquecimiento_de_comentarios_desviacion | la_resolucion_de_preguntas_dudas_y_el_enriquecimiento_de_comentarios_minimo | la_resolucion_de_preguntas_dudas_y_el_enriquecimiento_de_comentarios_maximo | trato_recibido_por_el_personal_que_labora_en_el_centro_comunitario_media | trato_recibido_por_el_personal_que_labora_en_el_centro_comunitario_desviacion | trato_recibido_por_el_personal_que_labora_en_el_centro_comunitario_minimo | trato_recibido_por_el_personal_que_labora_en_el_centro_comunitario_maximo | calidad_de_la_informacion_brindada_por_el_personal_del_centro_comunitario_media | calidad_de_la_informacion_brindada_por_el_personal_del_centro_comunitario_desviacion | calidad_de_la_informacion_brindada_por_el_personal_del_centro_comunitario_minimo | calidad_de_la_informacion_brindada_por_el_personal_del_centro_comunitario_maximo | salones_o_aulas_media | salones_o_aulas_desviacion | salones_o_aulas_minimo | salones_o_aulas_maximo | salas_de_computo_media | salas_de_computo_desviacion | salas_de_computo_minimo | salas_de_computo_maximo | banos_media | banos_desviacion | banos_minimo | banos_maximo | gimnasio_canchas_media | gimnasio_canchas_desviacion | gimnasio_canchas_minimo | gimnasio_canchas_maximo | polivalente_media | polivalente_desviacion | polivalente_minimo | polivalente_maximo | areas_verdes_media | areas_verdes_desviacion | areas_verdes_minimo | areas_verdes_maximo | horario_de_inicio_de_curso_o_taller_usar_formato_de_12_hrs_media | horario_de_inicio_de_curso_o_taller_usar_formato_de_12_hrs_desviacion | horario_de_inicio_de_curso_o_taller_usar_formato_de_12_hrs_minimo | horario_de_inicio_de_curso_o_taller_usar_formato_de_12_hrs_maximo | los_horarios_del_curso_o_taller_media | los_horarios_del_curso_o_taller_desviacion | los_horarios_del_curso_o_taller_minimo | los_horarios_del_curso_o_taller_maximo | calidad_de_la_informacion_brindada_por_el_personal_del_centro_comunitario_27_media | calidad_de_la_informacion_brindada_por_el_personal_del_centro_comunitario_27_desviacion | calidad_de_la_informacion_brindada_por_el_personal_del_centro_comunitario_27_minimo | calidad_de_la_informacion_brindada_por_el_personal_del_centro_comunitario_27_maximo | calidad_de_la_informacion_brindada_por_el_personal_del_centro_comunitario_28_media | calidad_de_la_informacion_brindada_por_el_personal_del_centro_comunitario_28_desviacion | calidad_de_la_informacion_brindada_por_el_personal_del_centro_comunitario_28_minimo | calidad_de_la_informacion_brindada_por_el_personal_del_centro_comunitario_28_maximo | sala_de_computo_media | sala_de_computo_desviacion | sala_de_computo_minimo | sala_de_computo_maximo | calidad_de_la_informacion_brindada_por_el_personal_del_centro_comunitario_24_media | calidad_de_la_informacion_brindada_por_el_personal_del_centro_comunitario_24_desviacion | calidad_de_la_informacion_brindada_por_el_personal_del_centro_comunitario_24_minimo | calidad_de_la_informacion_brindada_por_el_personal_del_centro_comunitario_24_maximo | calidad_de_la_informacion_brindada_por_el_personal_del_centro_comunitario_25_media | calidad_de_la_informacion_brindada_por_el_personal_del_centro_comunitario_25_desviacion | calidad_de_la_informacion_brindada_por_el_personal_del_centro_comunitario_25_minimo | calidad_de_la_informacion_brindada_por_el_personal_del_centro_comunitario_25_maximo | contenido_o_temas_del_curso_o_taller_media | contenido_o_temas_del_curso_o_taller_desviacion | contenido_o_temas_del_curso_o_taller_minimo | contenido_o_temas_del_curso_o_taller_maximo | calidad_y_cantidad_de_materiales_y_equipo_utilizados_en_el_curso_o_taller_media | calidad_y_cantidad_de_materiales_y_equipo_utilizados_en_el_curso_o_taller_desviacion | calidad_y_cantidad_de_materiales_y_equipo_utilizados_en_el_curso_o_taller_minimo | calidad_y_cantidad_de_materiales_y_equipo_utilizados_en_el_curso_o_taller_maximo | horarios_del_curso_o_taller_media | horarios_del_curso_o_taller_desviacion | horarios_del_curso_o_taller_minimo | horarios_del_curso_o_taller_maximo | manera_de_ensenar_del_tallerista_o_instructor_media | manera_de_ensenar_del_tallerista_o_instructor_desviacion | manera_de_ensenar_del_tallerista_o_instructor_minimo | manera_de_ensenar_del_tallerista_o_instructor_maximo | conocimientos_acerca_de_los_temas_por_parte_del_tallerista_o_instructor_media | conocimientos_acerca_de_los_temas_por_parte_del_tallerista_o_instructor_desviacion | conocimientos_acerca_de_los_temas_por_parte_del_tallerista_o_instructor_minimo | conocimientos_acerca_de_los_temas_por_parte_del_tallerista_o_instructor_maximo | motivacion_del_tallerista_o_instructor_en_la_participacion_del_taller_media | motivacion_del_tallerista_o_instructor_en_la_participacion_del_taller_desviacion | motivacion_del_tallerista_o_instructor_en_la_participacion_del_taller_minimo | motivacion_del_tallerista_o_instructor_en_la_participacion_del_taller_maximo | iluminacion_en_aulas_y_espacios_media | iluminacion_en_aulas_y_espacios_desviacion | iluminacion_en_aulas_y_espacios_minimo | iluminacion_en_aulas_y_espacios_maximo | limpieza_de_areas_media | limpieza_de_areas_desviacion | limpieza_de_areas_minimo | limpieza_de_areas_maximo | trato_y_o_informacion_brindada_por_el_personal_que_labora_en_el_centro_comunitario_media | trato_y_o_informacion_brindada_por_el_personal_que_labora_en_el_centro_comunitario_desviacion | trato_y_o_informacion_brindada_por_el_personal_que_labora_en_el_centro_comunitario_minimo | trato_y_o_informacion_brindada_por_el_personal_que_labora_en_el_centro_comunitario_maximo | horario_de_inicio_del_curso_o_taller_media | horario_de_inicio_del_curso_o_taller_desviacion | horario_de_inicio_del_curso_o_taller_minimo | horario_de_inicio_del_curso_o_taller_maximo | el_contenido_o_temas_del_curso_o_taller_media | el_contenido_o_temas_del_curso_o_taller_desviacion | el_contenido_o_temas_del_curso_o_taller_minimo | el_contenido_o_temas_del_curso_o_taller_maximo | la_calidad_y_cantidad_de_materiales_y_equipo_utilizados_en_el_curso_taller_media | la_calidad_y_cantidad_de_materiales_y_equipo_utilizados_en_el_curso_taller_desviacion | la_calidad_y_cantidad_de_materiales_y_equipo_utilizados_en_el_curso_taller_minimo | la_calidad_y_cantidad_de_materiales_y_equipo_utilizados_en_el_curso_taller_maximo | la_manera_de_ensenar_del_tallerista_o_instructor_media | la_manera_de_ensenar_del_tallerista_o_instructor_desviacion | la_manera_de_ensenar_del_tallerista_o_instructor_minimo | la_manera_de_ensenar_del_tallerista_o_instructor_maximo | el_tallerista_o_instructor_conoce_el_tema_del_curso_taller_media | el_tallerista_o_instructor_conoce_el_tema_del_curso_taller_desviacion | el_tallerista_o_instructor_conoce_el_tema_del_curso_taller_minimo | el_tallerista_o_instructor_conoce_el_tema_del_curso_taller_maximo | el_tallerista_o_instructor_motivo_la_participacion_entre_los_asistentes_media | el_tallerista_o_instructor_motivo_la_participacion_entre_los_asistentes_desviacion | el_tallerista_o_instructor_motivo_la_participacion_entre_los_asistentes_minimo | el_tallerista_o_instructor_motivo_la_participacion_entre_los_asistentes_maximo | iluminacion_en_aulas_y_espacios_en_caso_de_no_conocer_el_centro_comunitario_colocar_0_media | iluminacion_en_aulas_y_espacios_en_caso_de_no_conocer_el_centro_comunitario_colocar_0_desviacion | iluminacion_en_aulas_y_espacios_en_caso_de_no_conocer_el_centro_comunitario_colocar_0_minimo | iluminacion_en_aulas_y_espacios_en_caso_de_no_conocer_el_centro_comunitario_colocar_0_maximo | limpieza_de_areas_en_caso_de_no_conocer_el_centro_comunitario_colocar_0_media | limpieza_de_areas_en_caso_de_no_conocer_el_centro_comunitario_colocar_0_desviacion | limpieza_de_areas_en_caso_de_no_conocer_el_centro_comunitario_colocar_0_minimo | limpieza_de_areas_en_caso_de_no_conocer_el_centro_comunitario_colocar_0_maximo |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2023.519 | 1.795349 | 2017 | 2025 | 45330.98 | 603.1577 | 43064.42 | 45842.48 | 38.06565 | 15.3846 | 2 | 82 | 0.3514149 | 0.1877203 | 0 | 0.9583333 | 0.5 | 0.7071068 | 0 | 1 | 9.679752 | 0.9676746 | 1 | 10 | 9.264244 | 1.53231 | 1 | 10 | 9.677444 | 0.9643468 | 1 | 10 | 9.740881 | 0.8236199 | 1 | 10 | 9.71318 | 0.8503043 | 1 | 10 | 9.723497 | 0.8551263 | 1 | 10 | 9.725574 | 0.8582964 | 1 | 10 | 9.707252 | 0.8751227 | 1 | 10 | 9.638888 | 0.9351207 | 1 | 10 | 9.713478 | 0.8675139 | 1 | 10 | 8.946152 | 1.632469 | 1 | 10 | 7.890177 | 2.771296 | 1 | 10 | 7.991878 | 2.327694 | 1 | 10 | 7.707806 | 2.937746 | 1 | 10 | 8.391693 | 2.293245 | 1 | 10 | 7.912405 | 2.610466 | 1 | 10 | 0.4346031 | 0.2032529 | 0 | 0.9680556 | 9.630521 | 1.04423 | 1 | 10 | 9.606795 | 0.9631157 | 1 | 10 | 9.607291 | 0.9631542 | 1 | 10 | 8.200753 | 2.55105 | 1 | 10 | 9.610833 | 0.9941879 | 1 | 10 | 9.623632 | 0.9885569 | 1 | 10 | 9.545914 | 0.8304405 | 1 | 10 | 8.978938 | 1.540703 | 1 | 10 | 9.421651 | 1.035999 | 1 | 10 | 9.640691 | 0.7538381 | 1 | 10 | 9.633109 | 0.735998 | 1 | 10 | 9.617944 | 0.7774952 | 2 | 10 | 9.041702 | 1.46843 | 1 | 10 | 9.218197 | 1.242758 | 1 | 10 | 9.637424 | 0.9130526 | 1 | 10 | 0.3684126 | 0.1874075 | 0 | 0.9791667 | 9.80691 | 0.6135431 | 1 | 10 | 9.449598 | 1.352426 | 1 | 10 | 9.833649 | 0.6119239 | 1 | 10 | 9.875059 | 0.5351616 | 1 | 10 | 9.826313 | 0.621225 | 1 | 10 | 7.220776 | 4.071405 | 0 | 10 | 7.207762 | 4.172085 | 0 | 10 |
## Estadísticos descriptivos de variables numéricas por periodo
resumen_num_periodo <- todo |>
group_by(año_trimestre) |>
select(año_trimestre, where(is.numeric)) |>
summarise(across(
where(is.numeric),
list(
media = ~ mean(.x, na.rm = TRUE),
desviacion = ~ sd(.x, na.rm = TRUE),
minimo = ~ min(.x, na.rm = TRUE),
maximo = ~ max(.x, na.rm = TRUE)
),
.names = "{.col}_{.fn}"
),
.groups = "drop")
## Warning: There were 636 warnings in `summarise()`.
## The first warning was:
## ℹ In argument: `across(...)`.
## ℹ In group 1: `año_trimestre = "2017_T4"`.
## Caused by warning in `min()`:
## ! ningún argumento finito para min; retornando Inf
## ℹ Run `dplyr::last_dplyr_warnings()` to see the 635 remaining warnings.
knitr::kable(resumen_num_periodo, caption = "Estadísticos descriptivos de variables numéricas por periodo (año_trimestre)")
| año_trimestre | año_media | año_desviacion | año_minimo | año_maximo | marca_temporal_media | marca_temporal_desviacion | marca_temporal_minimo | marca_temporal_maximo | x2_cuantos_anos_cumplidos_tiene_media | x2_cuantos_anos_cumplidos_tiene_desviacion | x2_cuantos_anos_cumplidos_tiene_minimo | x2_cuantos_anos_cumplidos_tiene_maximo | horario_de_inicio_de_taller_media | horario_de_inicio_de_taller_desviacion | horario_de_inicio_de_taller_minimo | horario_de_inicio_de_taller_maximo | x1_1_en_caso_de_haber_respondido_no_en_la_pregunta_anterior_favor_de_responder_el_costo_del_tramite_de_inscripcion_media | x1_1_en_caso_de_haber_respondido_no_en_la_pregunta_anterior_favor_de_responder_el_costo_del_tramite_de_inscripcion_desviacion | x1_1_en_caso_de_haber_respondido_no_en_la_pregunta_anterior_favor_de_responder_el_costo_del_tramite_de_inscripcion_minimo | x1_1_en_caso_de_haber_respondido_no_en_la_pregunta_anterior_favor_de_responder_el_costo_del_tramite_de_inscripcion_maximo | el_contenido_o_temas_del_curso_taller_media | el_contenido_o_temas_del_curso_taller_desviacion | el_contenido_o_temas_del_curso_taller_minimo | el_contenido_o_temas_del_curso_taller_maximo | la_cantidad_y_calidad_de_materiales_y_equipo_utilizados_en_el_curso_taller_media | la_cantidad_y_calidad_de_materiales_y_equipo_utilizados_en_el_curso_taller_desviacion | la_cantidad_y_calidad_de_materiales_y_equipo_utilizados_en_el_curso_taller_minimo | la_cantidad_y_calidad_de_materiales_y_equipo_utilizados_en_el_curso_taller_maximo | los_horarios_del_curso_taller_media | los_horarios_del_curso_taller_desviacion | los_horarios_del_curso_taller_minimo | los_horarios_del_curso_taller_maximo | el_conocimiento_del_tallerista_o_instructor_sobre_el_tema_del_curso_taller_media | el_conocimiento_del_tallerista_o_instructor_sobre_el_tema_del_curso_taller_desviacion | el_conocimiento_del_tallerista_o_instructor_sobre_el_tema_del_curso_taller_minimo | el_conocimiento_del_tallerista_o_instructor_sobre_el_tema_del_curso_taller_maximo | la_forma_de_ensenanza_utilizada_en_las_clases_media | la_forma_de_ensenanza_utilizada_en_las_clases_desviacion | la_forma_de_ensenanza_utilizada_en_las_clases_minimo | la_forma_de_ensenanza_utilizada_en_las_clases_maximo | la_motivacion_a_la_participacion_de_parte_del_tallerista_o_instructor_media | la_motivacion_a_la_participacion_de_parte_del_tallerista_o_instructor_desviacion | la_motivacion_a_la_participacion_de_parte_del_tallerista_o_instructor_minimo | la_motivacion_a_la_participacion_de_parte_del_tallerista_o_instructor_maximo | el_cumplimiento_del_tallerista_o_instructor_con_los_horarios_establecidos_media | el_cumplimiento_del_tallerista_o_instructor_con_los_horarios_establecidos_desviacion | el_cumplimiento_del_tallerista_o_instructor_con_los_horarios_establecidos_minimo | el_cumplimiento_del_tallerista_o_instructor_con_los_horarios_establecidos_maximo | la_resolucion_de_preguntas_dudas_y_el_enriquecimiento_de_comentarios_media | la_resolucion_de_preguntas_dudas_y_el_enriquecimiento_de_comentarios_desviacion | la_resolucion_de_preguntas_dudas_y_el_enriquecimiento_de_comentarios_minimo | la_resolucion_de_preguntas_dudas_y_el_enriquecimiento_de_comentarios_maximo | trato_recibido_por_el_personal_que_labora_en_el_centro_comunitario_media | trato_recibido_por_el_personal_que_labora_en_el_centro_comunitario_desviacion | trato_recibido_por_el_personal_que_labora_en_el_centro_comunitario_minimo | trato_recibido_por_el_personal_que_labora_en_el_centro_comunitario_maximo | calidad_de_la_informacion_brindada_por_el_personal_del_centro_comunitario_media | calidad_de_la_informacion_brindada_por_el_personal_del_centro_comunitario_desviacion | calidad_de_la_informacion_brindada_por_el_personal_del_centro_comunitario_minimo | calidad_de_la_informacion_brindada_por_el_personal_del_centro_comunitario_maximo | salones_o_aulas_media | salones_o_aulas_desviacion | salones_o_aulas_minimo | salones_o_aulas_maximo | salas_de_computo_media | salas_de_computo_desviacion | salas_de_computo_minimo | salas_de_computo_maximo | banos_media | banos_desviacion | banos_minimo | banos_maximo | gimnasio_canchas_media | gimnasio_canchas_desviacion | gimnasio_canchas_minimo | gimnasio_canchas_maximo | polivalente_media | polivalente_desviacion | polivalente_minimo | polivalente_maximo | areas_verdes_media | areas_verdes_desviacion | areas_verdes_minimo | areas_verdes_maximo | horario_de_inicio_de_curso_o_taller_usar_formato_de_12_hrs_media | horario_de_inicio_de_curso_o_taller_usar_formato_de_12_hrs_desviacion | horario_de_inicio_de_curso_o_taller_usar_formato_de_12_hrs_minimo | horario_de_inicio_de_curso_o_taller_usar_formato_de_12_hrs_maximo | los_horarios_del_curso_o_taller_media | los_horarios_del_curso_o_taller_desviacion | los_horarios_del_curso_o_taller_minimo | los_horarios_del_curso_o_taller_maximo | calidad_de_la_informacion_brindada_por_el_personal_del_centro_comunitario_27_media | calidad_de_la_informacion_brindada_por_el_personal_del_centro_comunitario_27_desviacion | calidad_de_la_informacion_brindada_por_el_personal_del_centro_comunitario_27_minimo | calidad_de_la_informacion_brindada_por_el_personal_del_centro_comunitario_27_maximo | calidad_de_la_informacion_brindada_por_el_personal_del_centro_comunitario_28_media | calidad_de_la_informacion_brindada_por_el_personal_del_centro_comunitario_28_desviacion | calidad_de_la_informacion_brindada_por_el_personal_del_centro_comunitario_28_minimo | calidad_de_la_informacion_brindada_por_el_personal_del_centro_comunitario_28_maximo | sala_de_computo_media | sala_de_computo_desviacion | sala_de_computo_minimo | sala_de_computo_maximo | calidad_de_la_informacion_brindada_por_el_personal_del_centro_comunitario_24_media | calidad_de_la_informacion_brindada_por_el_personal_del_centro_comunitario_24_desviacion | calidad_de_la_informacion_brindada_por_el_personal_del_centro_comunitario_24_minimo | calidad_de_la_informacion_brindada_por_el_personal_del_centro_comunitario_24_maximo | calidad_de_la_informacion_brindada_por_el_personal_del_centro_comunitario_25_media | calidad_de_la_informacion_brindada_por_el_personal_del_centro_comunitario_25_desviacion | calidad_de_la_informacion_brindada_por_el_personal_del_centro_comunitario_25_minimo | calidad_de_la_informacion_brindada_por_el_personal_del_centro_comunitario_25_maximo | contenido_o_temas_del_curso_o_taller_media | contenido_o_temas_del_curso_o_taller_desviacion | contenido_o_temas_del_curso_o_taller_minimo | contenido_o_temas_del_curso_o_taller_maximo | calidad_y_cantidad_de_materiales_y_equipo_utilizados_en_el_curso_o_taller_media | calidad_y_cantidad_de_materiales_y_equipo_utilizados_en_el_curso_o_taller_desviacion | calidad_y_cantidad_de_materiales_y_equipo_utilizados_en_el_curso_o_taller_minimo | calidad_y_cantidad_de_materiales_y_equipo_utilizados_en_el_curso_o_taller_maximo | horarios_del_curso_o_taller_media | horarios_del_curso_o_taller_desviacion | horarios_del_curso_o_taller_minimo | horarios_del_curso_o_taller_maximo | manera_de_ensenar_del_tallerista_o_instructor_media | manera_de_ensenar_del_tallerista_o_instructor_desviacion | manera_de_ensenar_del_tallerista_o_instructor_minimo | manera_de_ensenar_del_tallerista_o_instructor_maximo | conocimientos_acerca_de_los_temas_por_parte_del_tallerista_o_instructor_media | conocimientos_acerca_de_los_temas_por_parte_del_tallerista_o_instructor_desviacion | conocimientos_acerca_de_los_temas_por_parte_del_tallerista_o_instructor_minimo | conocimientos_acerca_de_los_temas_por_parte_del_tallerista_o_instructor_maximo | motivacion_del_tallerista_o_instructor_en_la_participacion_del_taller_media | motivacion_del_tallerista_o_instructor_en_la_participacion_del_taller_desviacion | motivacion_del_tallerista_o_instructor_en_la_participacion_del_taller_minimo | motivacion_del_tallerista_o_instructor_en_la_participacion_del_taller_maximo | iluminacion_en_aulas_y_espacios_media | iluminacion_en_aulas_y_espacios_desviacion | iluminacion_en_aulas_y_espacios_minimo | iluminacion_en_aulas_y_espacios_maximo | limpieza_de_areas_media | limpieza_de_areas_desviacion | limpieza_de_areas_minimo | limpieza_de_areas_maximo | trato_y_o_informacion_brindada_por_el_personal_que_labora_en_el_centro_comunitario_media | trato_y_o_informacion_brindada_por_el_personal_que_labora_en_el_centro_comunitario_desviacion | trato_y_o_informacion_brindada_por_el_personal_que_labora_en_el_centro_comunitario_minimo | trato_y_o_informacion_brindada_por_el_personal_que_labora_en_el_centro_comunitario_maximo | horario_de_inicio_del_curso_o_taller_media | horario_de_inicio_del_curso_o_taller_desviacion | horario_de_inicio_del_curso_o_taller_minimo | horario_de_inicio_del_curso_o_taller_maximo | el_contenido_o_temas_del_curso_o_taller_media | el_contenido_o_temas_del_curso_o_taller_desviacion | el_contenido_o_temas_del_curso_o_taller_minimo | el_contenido_o_temas_del_curso_o_taller_maximo | la_calidad_y_cantidad_de_materiales_y_equipo_utilizados_en_el_curso_taller_media | la_calidad_y_cantidad_de_materiales_y_equipo_utilizados_en_el_curso_taller_desviacion | la_calidad_y_cantidad_de_materiales_y_equipo_utilizados_en_el_curso_taller_minimo | la_calidad_y_cantidad_de_materiales_y_equipo_utilizados_en_el_curso_taller_maximo | la_manera_de_ensenar_del_tallerista_o_instructor_media | la_manera_de_ensenar_del_tallerista_o_instructor_desviacion | la_manera_de_ensenar_del_tallerista_o_instructor_minimo | la_manera_de_ensenar_del_tallerista_o_instructor_maximo | el_tallerista_o_instructor_conoce_el_tema_del_curso_taller_media | el_tallerista_o_instructor_conoce_el_tema_del_curso_taller_desviacion | el_tallerista_o_instructor_conoce_el_tema_del_curso_taller_minimo | el_tallerista_o_instructor_conoce_el_tema_del_curso_taller_maximo | el_tallerista_o_instructor_motivo_la_participacion_entre_los_asistentes_media | el_tallerista_o_instructor_motivo_la_participacion_entre_los_asistentes_desviacion | el_tallerista_o_instructor_motivo_la_participacion_entre_los_asistentes_minimo | el_tallerista_o_instructor_motivo_la_participacion_entre_los_asistentes_maximo | iluminacion_en_aulas_y_espacios_en_caso_de_no_conocer_el_centro_comunitario_colocar_0_media | iluminacion_en_aulas_y_espacios_en_caso_de_no_conocer_el_centro_comunitario_colocar_0_desviacion | iluminacion_en_aulas_y_espacios_en_caso_de_no_conocer_el_centro_comunitario_colocar_0_minimo | iluminacion_en_aulas_y_espacios_en_caso_de_no_conocer_el_centro_comunitario_colocar_0_maximo | limpieza_de_areas_en_caso_de_no_conocer_el_centro_comunitario_colocar_0_media | limpieza_de_areas_en_caso_de_no_conocer_el_centro_comunitario_colocar_0_desviacion | limpieza_de_areas_en_caso_de_no_conocer_el_centro_comunitario_colocar_0_minimo | limpieza_de_areas_en_caso_de_no_conocer_el_centro_comunitario_colocar_0_maximo |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2017_T4 | 2017 | 0 | 2017 | 2017 | 43076.33 | 2.9885182 | 43064.42 | 43087.51 | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | 9.581897 | 0.8299053 | 2 | 10 | 8.579741 | 1.892950 | 1 | 10 | 9.534483 | 0.8306341 | 3 | 10 | 9.741379 | 0.5710161 | 5 | 10 | 9.676724 | 0.7825149 | 1 | 10 | 9.681035 | 0.7731916 | 3 | 10 | 8.939655 | 1.517579 | 1 | 10 | 8.969828 | 1.545269 | 1 | 10 | 9.674569 | 0.6732467 | 6 | 10 | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf |
| 2018_T4 | 2018 | 0 | 2018 | 2018 | 43456.63 | 14.0106699 | 43412.50 | 43475.72 | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | 9.378378 | 0.9254605 | 1 | 10 | 8.572482 | 1.471914 | 2 | 10 | 9.233415 | 1.1541588 | 1 | 10 | 9.501228 | 0.8211331 | 5 | 10 | 9.520884 | 0.7871700 | 5 | 10 | 9.481573 | 0.8118758 | 6 | 10 | 8.643735 | 1.841865 | 1 | 10 | 8.850123 | 1.274859 | 1 | 10 | 9.221130 | 1.0387780 | 4 | 10 | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf |
| 2019_T4 | 2019 | 0 | 2019 | 2019 | 43795.99 | 0.4075434 | 43795.60 | 43797.45 | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | 9.343053 | 0.8263169 | 6 | 10 | 8.699829 | 1.694173 | 1 | 10 | 9.301887 | 0.9799256 | 2 | 10 | 9.456261 | 0.8023105 | 5 | 10 | 9.430532 | 0.7983408 | 5 | 10 | 9.449400 | 0.8083088 | 4 | 10 | 8.794168 | 1.546140 | 1 | 10 | 9.090909 | 1.148869 | 1 | 10 | 9.379074 | 0.9872248 | 2 | 10 | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf |
| 2020_T4 | 2020 | 0 | 2020 | 2020 | 44180.73 | 11.3778511 | 44179.61 | 44524.48 | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | 9.730435 | 0.7413981 | 1 | 10 | 9.536957 | 1.017124 | 1 | 10 | 9.523913 | 1.0888064 | 1 | 10 | 9.768478 | 0.7388532 | 1 | 10 | 9.789130 | 0.5965911 | 5 | 10 | 9.753261 | 0.7128467 | 2 | 10 | 9.426087 | 1.064295 | 1 | 10 | 9.586956 | 0.996754 | 1 | 10 | 9.682609 | 0.7870841 | 3 | 10 | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf |
| 2021_T4 | 2021 | 0 | 2021 | 2021 | 44542.90 | 4.9972391 | 44539.54 | 44671.61 | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | 9.695693 | 0.8488993 | 1 | 10 | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | 9.699243 | 0.9216319 | 1 | 10 | 0.3684126 | 0.1874075 | 0 | 0.9791667 | 9.80691 | 0.6135431 | 1 | 10 | 9.449598 | 1.352426 | 1 | 10 | 9.833649 | 0.6119239 | 1 | 10 | 9.875059 | 0.5351616 | 1 | 10 | 9.826313 | 0.621225 | 1 | 10 | 7.220776 | 4.071405 | 0 | 10 | 7.207762 | 4.172085 | 0 | 10 |
| 2022_T1 | 2022 | 0 | 2022 | 2022 | 44652.88 | 3.4440797 | 44650.40 | 44663.62 | 38.06565 | 15.3846 | 2 | 82 | 0.3514149 | 0.1877203 | 0 | 0.9583333 | 0.5 | 0.7071068 | 0 | 1 | 9.772609 | 0.9009382 | 1 | 10 | 9.203913 | 1.763701 | 1 | 10 | 9.643913 | 1.1460097 | 1 | 10 | 9.822609 | 0.7746597 | 1 | 10 | 9.792174 | 0.8233909 | 1 | 10 | 9.803478 | 0.8150317 | 1 | 10 | 9.823478 | 0.7837886 | 1 | 10 | 9.797826 | 0.8422791 | 1 | 10 | 9.718696 | 0.9221540 | 1 | 10 | 9.713478 | 0.8675139 | 1 | 10 | 8.980218 | 1.707727 | 1 | 10 | 7.890177 | 2.771296 | 1 | 10 | 8.019100 | 2.408385 | 1 | 10 | 8.318554 | 2.374241 | 1 | 10 | 8.351978 | 2.312509 | 1 | 10 | 8.230559 | 2.384831 | 1 | 10 | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf |
| 2024_T2 | 2024 | 0 | 2024 | 2024 | 45454.62 | 3.9713462 | 45449.39 | 45473.80 | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | 9.691152 | 0.9873756 | 1 | 10 | 9.212020 | 1.570759 | 1 | 10 | NaN | NA | Inf | -Inf | 9.776294 | 0.7736632 | 1 | 10 | 9.731775 | 0.8488940 | 1 | 10 | 9.752550 | 0.8329823 | 1 | 10 | 9.733259 | 0.8753930 | 1 | 10 | 9.731590 | 0.8496000 | 1 | 10 | 9.639028 | 0.9887633 | 1 | 10 | NaN | NA | Inf | -Inf | 8.973721 | 1.595027 | 1 | 10 | NaN | NA | Inf | -Inf | 7.745570 | 2.436973 | 1 | 10 | 7.625124 | 2.928972 | 1 | 10 | 8.445750 | 2.170132 | 1 | 10 | 7.789369 | 2.653010 | 1 | 10 | 0.3650714 | 0.2008712 | 0 | 0.9166667 | 9.631237 | 1.0724151 | 1 | 10 | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | 8.236114 | 2.476089 | 1 | 10 | 9.610833 | 0.9941879 | 1 | 10 | 9.623632 | 0.9885569 | 1 | 10 | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf |
| 2024_T3 | 2024 | 0 | 2024 | 2024 | 45554.24 | 5.0506467 | 45546.57 | 45569.38 | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | 9.678932 | 0.9104376 | 1 | 10 | 9.204894 | 1.590429 | 1 | 10 | NaN | NA | Inf | -Inf | 9.742622 | 0.8078327 | 1 | 10 | 9.711804 | 0.8102549 | 1 | 10 | 9.722451 | 0.8353709 | 1 | 10 | 9.725252 | 0.8185736 | 1 | 10 | 9.698356 | 0.8682977 | 1 | 10 | 9.619537 | 0.9164618 | 1 | 10 | NaN | NA | Inf | -Inf | 8.815677 | 1.724212 | 1 | 10 | NaN | NA | Inf | -Inf | 7.797448 | 2.356216 | 1 | 10 | 7.758355 | 2.802115 | 1 | 10 | 8.242860 | 2.312928 | 1 | 10 | 7.867126 | 2.516752 | 1 | 10 | 0.3722190 | 0.1993586 | 0 | 0.9319444 | 9.625700 | 1.0450263 | 1 | 10 | 9.602727 | 0.9549932 | 1 | 10 | 9.594509 | 0.9792045 | 1 | 10 | 8.178043 | 2.470429 | 1 | 10 | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf |
| 2024_T4 | 2024 | 0 | 2024 | 2024 | 45633.32 | 3.2419451 | 45628.64 | 45651.50 | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | 9.692388 | 0.9229355 | 1 | 10 | 9.315140 | 1.437980 | 1 | 10 | NaN | NA | Inf | -Inf | 9.748850 | 0.7749704 | 1 | 10 | 9.722083 | 0.8062255 | 1 | 10 | 9.731911 | 0.8227459 | 1 | 10 | 9.739858 | 0.8145794 | 1 | 10 | 9.720828 | 0.8430859 | 1 | 10 | 9.635090 | 0.9222246 | 1 | 10 | NaN | NA | Inf | -Inf | 8.913203 | 1.689618 | 1 | 10 | NaN | NA | Inf | -Inf | 7.988800 | 2.368080 | 1 | 10 | 7.669825 | 2.997516 | 1 | 10 | 8.435494 | 2.344768 | 1 | 10 | 7.983200 | 2.586325 | 1 | 10 | 0.4813368 | 0.1966650 | 0 | 0.9680556 | 9.651819 | 1.0114673 | 1 | 10 | 9.611041 | 0.9768859 | 1 | 10 | 9.622334 | 0.9614984 | 1 | 10 | 8.237562 | 2.530340 | 1 | 10 | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf |
| 2025_T1 | 2025 | 0 | 2025 | 2025 | 45725.60 | 5.4632312 | 45716.60 | 45747.74 | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | 9.692158 | 0.9169977 | 1 | 10 | 9.333927 | 1.444527 | 1 | 10 | NaN | NA | Inf | -Inf | 9.735256 | 0.8237490 | 1 | 10 | 9.717272 | 0.8148714 | 1 | 10 | 9.719864 | 0.8283821 | 1 | 10 | 9.727155 | 0.8353835 | 1 | 10 | 9.712897 | 0.8227495 | 1 | 10 | 9.681303 | 0.8380556 | 1 | 10 | NaN | NA | Inf | -Inf | 9.034557 | 1.477303 | 1 | 10 | NaN | NA | Inf | -Inf | 8.184485 | 2.236990 | 1 | 10 | 7.780598 | 2.935292 | 1 | 10 | 8.415767 | 2.291752 | 1 | 10 | 7.963103 | 2.614143 | 1 | 10 | 0.4675882 | 0.1917978 | 0 | 0.9666667 | 9.654731 | 0.9826919 | 1 | 10 | 9.645496 | 0.8838148 | 1 | 10 | 9.650519 | 0.8737487 | 1 | 10 | 8.261879 | 2.528682 | 1 | 10 | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf |
| 2025_T2 | 2025 | 0 | 2025 | 2025 | 45828.76 | 3.0374816 | 45824.78 | 45842.48 | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | 9.610143 | 1.1000316 | 1 | 10 | 9.275273 | 1.504804 | 1 | 10 | NaN | NA | Inf | -Inf | 9.674010 | 0.9282256 | 1 | 10 | 9.654713 | 0.9590977 | 1 | 10 | 9.663251 | 0.9528537 | 1 | 10 | 9.667008 | 0.9550679 | 1 | 10 | 9.640369 | 0.9849956 | 1 | 10 | 9.583504 | 1.0071619 | 1 | 10 | NaN | NA | Inf | -Inf | 8.968165 | 1.654713 | 1 | 10 | NaN | NA | Inf | -Inf | 8.198127 | 2.190342 | 1 | 10 | 7.528464 | 3.127995 | 1 | 10 | 8.426217 | 2.333415 | 1 | 10 | 7.868352 | 2.720289 | 1 | 10 | 0.4827221 | 0.1931929 | 0 | 0.9680556 | 9.591359 | 1.1039192 | 1 | 10 | 9.566257 | 1.0351873 | 1 | 10 | 9.561134 | 1.0348425 | 1 | 10 | 8.092884 | 2.726323 | 1 | 10 | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf | NaN | NA | Inf | -Inf |
# Categóricas: Top 10 frecuencias por variable y por periodo
cat_cols <- todo |> select(where(is.character)) |> names()
freqs_cat_periodo <- map(cat_cols, \(col){
todo |>
count(año_trimestre, .data[[col]], sort = TRUE, name = "n") |>
group_by(año_trimestre) |>
slice_head(n = 10) |>
ungroup() |>
mutate(variable = col, .before = 1,
respuesta = .data[[col]]) |>
select(variable, año_trimestre, respuesta, n)
}) |> bind_rows()
Se evidencia una tendencia sostenida de satisfacción alta entre los participantes, con variaciones leves entre trimestres. Los indicadores de percepción sobre el taller, el personal y la utilidad del curso concentran las puntuaciones más elevadas, con medias superiores a 4 en una escala de 1 a 5, lo que confirma la eficacia percibida del programa.
La distribución de frecuencias muestra que los talleres de oficios, manualidades y desarrollo personal son los más demandados, seguidos por los cursos de salud y bienestar. Las categorías asociadas a la atención y trato del personal presentan concentraciones notables en las respuestas más positivas, lo que coincide con los hallazgos cualitativos sobre la relevancia del componente humano.
Las desviaciones estándar bajas reflejan una homogeneidad en las percepciones, lo que sugiere una experiencia de servicio consistente en la mayoría de los centros. Sin embargo, la dispersión es ligeramente mayor en las variables relacionadas con infraestructura y materiales, lo que coincide con los comentarios textuales que aluden a la necesidad de mejorar los espacios físicos y recursos de apoyo.
Finalmente, las correlaciones entre satisfacción general, intención de recomendación y continuidad en los cursos resultan positivas y significativas, lo que respalda la hipótesis de que la calidad percibida y la experiencia del usuario influyen directamente en la retención y recomendación. En conjunto, los resultados cuantitativos confirman que los talleres no solo cumplen una función educativa, sino también social y de fortalecimiento comunitario.
## Tópicos
# Configurar el número de tópicos
num_topics <- 6
# Ajustar el modelo LDA
lda_model <- LDA(dtm, k = num_topics, control = list(seed = 123))
# Extraer los tópicos y palabras clave
# Mostrar las 10 palabras clave principales por tópico
terms(lda_model, 6)
## Topic 1 Topic 2 Topic 3 Topic 4 Topic 5 Topic 6
## [1,] "ayuda" "bien" "maestra" "reposteria" "falta" "amables"
## [2,] "salud" "cursos" "bien" "cocina" "bien" "bien"
## [3,] "bien" "clases" "excelente" "ingles" "banos" "atentos"
## [4,] "bueno" "linea" "buena" "corte" "mantenimiento" "personal"
## [5,] "personal" "material" "buen" "pintura" "areas" "trato"
## [6,] "hacer" "gustaria" "explica" "maria" "salones" "excelente"
terms_lda <- terms(lda_model, 6)
## Nube de palabras
# Crear la nube de palabras con wordcloud2
wordcloud2(
terminos_df,
size = 0.5,
color = "random-light",
backgroundColor = "black")
## Gráfico de barras con las 15 palabras más frecuentes
# Selecciona las filas más grandes
# Las ordena de mayor a menor frecuencia
top15 <- terminos_df |> slice_max(order_by = freq, n = 15)
# Crear el gráfico
ggplot(top15,
aes(x = reorder(word, freq), y = freq)) +
geom_col(fill = "pink") +
# Invertir el órden de x e y
coord_flip() +
# Título de los ejes
labs(
title = "Top 15 palabras más frecuentes en respuestas abiertas",
x = NULL, y = "Frecuencia"
) +
theme_minimal()
La palabra más predominante en la nube de palabras es “bien”: lo que muestra que la mayoría de las respuestas reflejan opiniones positivas y concisas sobre la calidad de los talleres. En general, los participantes utilizan términos que expresan satisfacción y gratitud, mientras que los comentarios críticos son menos frecuentes y se enfocan en aspectos prácticos como materiales o mantenimiento. Este patrón sugiere un sentido de comunidad y aprecio hacia las actividades y el personal, identificando factores cualitativos como la atención, la utilidad percibida y el ambiente del taller, que influyen directamente en la satisfacción general. Estas dimensiones pueden tener un efecto importante en la intención de recomendación y en la retención de usuarios. Comprender qué atributos generan una experiencia positiva permitirá integrar los hallazgos cualitativos con la evaluación cuantitativa y optimizar el diseño del servicio para fortalecer tanto la permanencia como la promoción de los talleres comunitarios.
Los resultados obtenidos hasta el momento permiten afirmar que los Centros Comunitarios de Nuevo León cumplen su función social y educativa de alto valor para las comunidades. La evidencia cuantitativa muestra una valoración consistentemente positiva en variables como la calidad de los talleres, la atención del personal y la utilidad práctica de los contenidos. A su vez, los resultados cualitativos revelan un discurso de gratitud y reconocimiento hacia los instructores, junto con demandas específicas relacionadas con la infraestructura y los materiales de apoyo.
En conjunto, estos hallazgos sugieren que la experiencia del usuario se estructura en torno a dos dimensiones principales: una afectiva-relacional, vinculada con la confianza y el acompañamiento del personal, y otra material-operativa, asociada con la disponibilidad de recursos y la comodidad de los espacios.
Para las siguientes etapas del análisis, se propone avanzar hacia una modelación estadística explicativa, que permita identificar los factores con mayor peso en la satisfacción y en la retención de los usuarios.Este enfoque facilitará una comprensión más profunda del impacto de los talleres y ofrecerá evidencia empírica para optimizar el diseño del servicio, priorizando los atributos con mayor influencia en la experiencia ciudadana y en la sostenibilidad del programa comunitario.