setwd(“SABER 11/Saber_11__2019-2_20240824.csv”)
install.packages("tidyverse")
## Installing package into 'C:/Users/USER/AppData/Local/R/win-library/4.4'
## (as 'lib' is unspecified)
## package 'tidyverse' successfully unpacked and MD5 sums checked
##
## The downloaded binary packages are in
## C:\Users\USER\AppData\Local\Temp\RtmpyOFv2p\downloaded_packages
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.1 ✔ tibble 3.2.1
## ✔ lubridate 1.9.3 ✔ tidyr 1.3.1
## ✔ purrr 1.0.2
## ── 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
install.packages("tidyverse")
## Warning: package 'tidyverse' is in use and will not be installed
library(tidyverse)
datos <- read_csv("SABER 11/Saber_11__2019-2_20240824.csv")
## Warning: One or more parsing issues, call `problems()` on your data frame for details,
## e.g.:
## dat <- vroom(...)
## problems(dat)
## Rows: 546212 Columns: 82
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (61): ESTU_TIPODOCUMENTO, ESTU_NACIONALIDAD, ESTU_GENERO, ESTU_FECHANACI...
## dbl (21): PERIODO, COLE_COD_DANE_ESTABLECIMIENTO, COLE_COD_DANE_SEDE, PUNT_L...
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
str(datos)
## spc_tbl_ [546,212 × 82] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ ESTU_TIPODOCUMENTO : chr [1:546212] "TI" "TI" "TI" "TI" ...
## $ ESTU_NACIONALIDAD : chr [1:546212] "COLOMBIA" "COLOMBIA" "COLOMBIA" "COLOMBIA" ...
## $ ESTU_GENERO : chr [1:546212] "M" "M" "M" "M" ...
## $ ESTU_FECHANACIMIENTO : chr [1:546212] "02/18/2002 12:00:00 AM" "06/28/2003 12:00:00 AM" "06/02/2001 12:00:00 AM" "04/26/2002 12:00:00 AM" ...
## $ PERIODO : num [1:546212] 20194 20194 20194 20194 20194 ...
## $ ESTU_CONSECUTIVO : chr [1:546212] "SB11201940031558" "SB11201940303339" "SB11201940255017" "SB11201940154799" ...
## $ ESTU_ESTUDIANTE : chr [1:546212] "ESTUDIANTE" "ESTUDIANTE" "ESTUDIANTE" "ESTUDIANTE" ...
## $ ESTU_TIENEETNIA : chr [1:546212] "No" "No" "No" "Si" ...
## $ ESTU_PAIS_RESIDE : chr [1:546212] "COLOMBIA" "COLOMBIA" "COLOMBIA" "COLOMBIA" ...
## $ ESTU_ETNIA : chr [1:546212] "-" "-" "-" "Ninguno" ...
## $ ESTU_DEPTO_RESIDE : chr [1:546212] "MAGDALENA" "BOGOTÁ" "BOLIVAR" "BOGOTÁ" ...
## $ ESTU_COD_RESIDE_DEPTO : chr [1:546212] "47" "11" "13" "11" ...
## $ ESTU_MCPIO_RESIDE : chr [1:546212] "SANTA ANA" "BOGOTÁ D.C." "CARTAGENA DE INDIAS" "BOGOTÁ D.C." ...
## $ ESTU_COD_RESIDE_MCPIO : chr [1:546212] "47707" "11001" "13001" "11001" ...
## $ FAMI_ESTRATOVIVIENDA : chr [1:546212] "Estrato 3" "Estrato 3" "Estrato 1" "Estrato 3" ...
## $ FAMI_PERSONASHOGAR : chr [1:546212] "5 a 6" "9 o más" "5 a 6" "3 a 4" ...
## $ FAMI_CUARTOSHOGAR : chr [1:546212] "Cinco" "Tres" "Dos" "Dos" ...
## $ FAMI_EDUCACIONPADRE : chr [1:546212] "Educación profesional completa" "Técnica o tecnológica completa" "Secundaria (Bachillerato) completa" "Primaria incompleta" ...
## $ FAMI_EDUCACIONMADRE : chr [1:546212] "Secundaria (Bachillerato) completa" "Técnica o tecnológica completa" "Secundaria (Bachillerato) completa" "Secundaria (Bachillerato) completa" ...
## $ FAMI_TRABAJOLABORPADRE : chr [1:546212] "No aplica" "Trabaja por cuenta propia (por ejemplo plomero, electricista)" "Es vendedor o trabaja en atención al público" "No aplica" ...
## $ FAMI_TRABAJOLABORMADRE : chr [1:546212] "Trabaja en el hogar, no trabaja o estudia" "Es dueño de un negocio pequeño (tiene pocos empleados o no tiene, por ejemplo tienda, papelería, etc" "Es vendedor o trabaja en atención al público" "Es dueño de un negocio pequeño (tiene pocos empleados o no tiene, por ejemplo tienda, papelería, etc" ...
## $ FAMI_TIENEINTERNET : chr [1:546212] "Si" "Si" "No" "No" ...
## $ FAMI_TIENESERVICIOTV : chr [1:546212] "Si" "Si" "Si" "No" ...
## $ FAMI_TIENECOMPUTADOR : chr [1:546212] "No" "Si" "No" "Si" ...
## $ FAMI_TIENELAVADORA : chr [1:546212] "Si" "Si" "Si" "No" ...
## $ FAMI_TIENEHORNOMICROOGAS : chr [1:546212] "Si" "Si" "No" "No" ...
## $ FAMI_TIENEAUTOMOVIL : chr [1:546212] "No" "Si" "No" "No" ...
## $ FAMI_TIENEMOTOCICLETA : chr [1:546212] "No" "No" "No" "No" ...
## $ FAMI_TIENECONSOLAVIDEOJUEGOS : chr [1:546212] "No" "No" "No" "No" ...
## $ FAMI_NUMLIBROS : chr [1:546212] "MÁS DE 100 LIBROS" "MÁS DE 100 LIBROS" "26 A 100 LIBROS" "11 A 25 LIBROS" ...
## $ FAMI_COMELECHEDERIVADOS : chr [1:546212] "1 o 2 veces por semana" "Todos o casi todos los días" "Todos o casi todos los días" "Todos o casi todos los días" ...
## $ FAMI_COMECARNEPESCADOHUEVO : chr [1:546212] "3 a 5 veces por semana" "3 a 5 veces por semana" "Todos o casi todos los días" "Todos o casi todos los días" ...
## $ FAMI_COMECEREALFRUTOSLEGUMBRE: chr [1:546212] "Nunca o rara vez comemos eso" "1 o 2 veces por semana" "3 a 5 veces por semana" "3 a 5 veces por semana" ...
## $ FAMI_SITUACIONECONOMICA : chr [1:546212] "Peor" "Mejor" "Igual" "Igual" ...
## $ ESTU_DEDICACIONLECTURADIARIA : chr [1:546212] "Entre 30 y 60 minutos" "Entre 30 y 60 minutos" "Entre 30 y 60 minutos" "30 minutos o menos" ...
## $ ESTU_DEDICACIONINTERNET : chr [1:546212] "Entre 30 y 60 minutos" "Entre 30 y 60 minutos" "Más de 3 horas" "Entre 30 y 60 minutos" ...
## $ ESTU_HORASSEMANATRABAJA : chr [1:546212] "Menos de 10 horas" "Menos de 10 horas" "0" "Más de 30 horas" ...
## $ ESTU_TIPOREMUNERACION : chr [1:546212] "Si, en efectivo" "Si, en efectivo" "Si, en efectivo" "Si, en efectivo" ...
## $ COLE_CODIGO_ICFES : chr [1:546212] "039008" "128611" "035493" "138032" ...
## $ COLE_COD_DANE_ESTABLECIMIENTO: num [1:546212] 1.48e+11 3.11e+11 1.13e+11 1.11e+11 1.11e+11 ...
## $ COLE_NOMBRE_ESTABLECIMIENTO : chr [1:546212] "INSTITUCION EDUCATIVA DEPARTAMENTAL ANTONIO BRUJES CARMONA" "GIMN SAN ANGELO" "INSTITUCION EDUCATIVA PROMOCION SOCIAL DE C/GENA." "COLEGIO VIRGINIA GUTIERREZ DE PINEDA (IED)" ...
## $ COLE_GENERO : chr [1:546212] "MIXTO" "MIXTO" "MIXTO" "MIXTO" ...
## $ COLE_NATURALEZA : chr [1:546212] "OFICIAL" "NO OFICIAL" "OFICIAL" "OFICIAL" ...
## $ COLE_CALENDARIO : chr [1:546212] "A" "A" "A" "A" ...
## $ COLE_BILINGUE : chr [1:546212] "N" "-" "N" "-" ...
## $ COLE_CARACTER : chr [1:546212] "TÉCNICO/ACADÉMICO" "ACADÉMICO" "TÉCNICO/ACADÉMICO" "ACADÉMICO" ...
## $ COLE_COD_DANE_SEDE : num [1:546212] 1.48e+11 3.11e+11 1.13e+11 1.11e+11 1.11e+11 ...
## $ COLE_NOMBRE_SEDE : chr [1:546212] "COL DPTAL ANTONIO BRUGES CARMONA" "GIMN SAN ANGELO" "INSTITUCION EDUCATIVA PROMOCION SOCIAL DE C/GENA." "COL VIRGINIA GUTIERREZ DE PINEDA (INS EDUC DIST)" ...
## $ COLE_SEDE_PRINCIPAL : chr [1:546212] "S" "S" "S" "S" ...
## $ COLE_AREA_UBICACION : chr [1:546212] "URBANO" "URBANO" "URBANO" "URBANO" ...
## $ COLE_JORNADA : chr [1:546212] "MAÑANA" "COMPLETA" "MAÑANA" "MAÑANA" ...
## $ COLE_COD_MCPIO_UBICACION : chr [1:546212] "47707" "11001" "13001" "11001" ...
## $ COLE_MCPIO_UBICACION : chr [1:546212] "SANTA ANA" "BOGOTÁ D.C." "CARTAGENA DE INDIAS" "BOGOTÁ D.C." ...
## $ COLE_COD_DEPTO_UBICACION : chr [1:546212] "47" "11" "13" "11" ...
## $ COLE_DEPTO_UBICACION : chr [1:546212] "MAGDALENA" "BOGOTÁ" "BOLIVAR" "BOGOTÁ" ...
## $ ESTU_PRIVADO_LIBERTAD : chr [1:546212] "N" "N" "N" "N" ...
## $ ESTU_COD_MCPIO_PRESENTACION : chr [1:546212] "47707" "11001" "13001" "11001" ...
## $ ESTU_MCPIO_PRESENTACION : chr [1:546212] "SANTA ANA" "BOGOTÁ D.C." "CARTAGENA DE INDIAS" "BOGOTÁ D.C." ...
## $ ESTU_DEPTO_PRESENTACION : chr [1:546212] "MAGDALENA" "BOGOTÁ" "BOLIVAR" "BOGOTÁ" ...
## $ ESTU_COD_DEPTO_PRESENTACION : chr [1:546212] "47" "11" "13" "11" ...
## $ PUNT_LECTURA_CRITICA : num [1:546212] 47 60 66 62 63 49 76 57 62 68 ...
## $ PERCENTIL_LECTURA_CRITICA : num [1:546212] 33 76 91 81 85 37 100 67 83 94 ...
## $ DESEMP_LECTURA_CRITICA : num [1:546212] 2 3 4 3 3 2 4 3 3 4 ...
## $ PUNT_MATEMATICAS : num [1:546212] 48 65 57 54 57 29 70 65 62 66 ...
## $ PERCENTIL_MATEMATICAS : num [1:546212] 42 88 70 60 70 4 96 88 82 91 ...
## $ DESEMP_MATEMATICAS : num [1:546212] 2 3 3 3 3 1 3 3 3 3 ...
## $ PUNT_C_NATURALES : num [1:546212] 37 54 41 61 55 41 70 63 66 63 ...
## $ PERCENTIL_C_NATURALES : num [1:546212] 15 71 29 87 74 26 98 90 95 91 ...
## $ DESEMP_C_NATURALES : num [1:546212] 1 2 2 3 2 2 3 3 3 3 ...
## $ PUNT_SOCIALES_CIUDADANAS : num [1:546212] 30 59 74 73 57 41 68 66 39 77 ...
## $ PERCENTIL_SOCIALES_CIUDADANAS: num [1:546212] 8 83 99 99 79 39 96 95 33 100 ...
## $ DESEMP_SOCIALES_CIUDADANAS : num [1:546212] 1 3 4 4 3 2 3 3 1 4 ...
## $ PUNT_INGLES : num [1:546212] 54 63 64 53 52 35 72 60 63 51 ...
## $ PERCENTIL_INGLES : num [1:546212] 67 88 89 67 63 14 96 83 88 61 ...
## $ DESEMP_INGLES : chr [1:546212] "A1" "A2" "A2" "A1" ...
## $ PUNT_GLOBAL : num [1:546212] 208 299 299 309 288 198 355 313 288 336 ...
## $ PERCENTIL_GLOBAL : num [1:546212] 25 83 84 88 78 19 99 89 78 95 ...
## $ ESTU_INSE_INDIVIDUAL : chr [1:546212] "50.9421557404314" "59.767864431576" "50.7642383644749" "45.7791353123516" ...
## $ ESTU_NSE_INDIVIDUAL : num [1:546212] 2 3 2 2 3 2 4 3 3 3 ...
## $ ESTU_NSE_ESTABLECIMIENTO : num [1:546212] 2 4 3 3 3 2 3 3 2 3 ...
## $ ESTU_ESTADOINVESTIGACION : chr [1:546212] "PUBLICAR" "PUBLICAR" "PUBLICAR" "PUBLICAR" ...
## $ ESTU_GENERACION-E : chr [1:546212] "NO" "NO" "GENERACION E - GRATUIDAD" "GENERACION E - GRATUIDAD" ...
## - attr(*, "spec")=
## .. cols(
## .. ESTU_TIPODOCUMENTO = col_character(),
## .. ESTU_NACIONALIDAD = col_character(),
## .. ESTU_GENERO = col_character(),
## .. ESTU_FECHANACIMIENTO = col_character(),
## .. PERIODO = col_double(),
## .. ESTU_CONSECUTIVO = col_character(),
## .. ESTU_ESTUDIANTE = col_character(),
## .. ESTU_TIENEETNIA = col_character(),
## .. ESTU_PAIS_RESIDE = col_character(),
## .. ESTU_ETNIA = col_character(),
## .. ESTU_DEPTO_RESIDE = col_character(),
## .. ESTU_COD_RESIDE_DEPTO = col_character(),
## .. ESTU_MCPIO_RESIDE = col_character(),
## .. ESTU_COD_RESIDE_MCPIO = col_character(),
## .. FAMI_ESTRATOVIVIENDA = col_character(),
## .. FAMI_PERSONASHOGAR = col_character(),
## .. FAMI_CUARTOSHOGAR = col_character(),
## .. FAMI_EDUCACIONPADRE = col_character(),
## .. FAMI_EDUCACIONMADRE = col_character(),
## .. FAMI_TRABAJOLABORPADRE = col_character(),
## .. FAMI_TRABAJOLABORMADRE = col_character(),
## .. FAMI_TIENEINTERNET = col_character(),
## .. FAMI_TIENESERVICIOTV = col_character(),
## .. FAMI_TIENECOMPUTADOR = col_character(),
## .. FAMI_TIENELAVADORA = col_character(),
## .. FAMI_TIENEHORNOMICROOGAS = col_character(),
## .. FAMI_TIENEAUTOMOVIL = col_character(),
## .. FAMI_TIENEMOTOCICLETA = col_character(),
## .. FAMI_TIENECONSOLAVIDEOJUEGOS = col_character(),
## .. FAMI_NUMLIBROS = col_character(),
## .. FAMI_COMELECHEDERIVADOS = col_character(),
## .. FAMI_COMECARNEPESCADOHUEVO = col_character(),
## .. FAMI_COMECEREALFRUTOSLEGUMBRE = col_character(),
## .. FAMI_SITUACIONECONOMICA = col_character(),
## .. ESTU_DEDICACIONLECTURADIARIA = col_character(),
## .. ESTU_DEDICACIONINTERNET = col_character(),
## .. ESTU_HORASSEMANATRABAJA = col_character(),
## .. ESTU_TIPOREMUNERACION = col_character(),
## .. COLE_CODIGO_ICFES = col_character(),
## .. COLE_COD_DANE_ESTABLECIMIENTO = col_double(),
## .. COLE_NOMBRE_ESTABLECIMIENTO = col_character(),
## .. COLE_GENERO = col_character(),
## .. COLE_NATURALEZA = col_character(),
## .. COLE_CALENDARIO = col_character(),
## .. COLE_BILINGUE = col_character(),
## .. COLE_CARACTER = col_character(),
## .. COLE_COD_DANE_SEDE = col_double(),
## .. COLE_NOMBRE_SEDE = col_character(),
## .. COLE_SEDE_PRINCIPAL = col_character(),
## .. COLE_AREA_UBICACION = col_character(),
## .. COLE_JORNADA = col_character(),
## .. COLE_COD_MCPIO_UBICACION = col_character(),
## .. COLE_MCPIO_UBICACION = col_character(),
## .. COLE_COD_DEPTO_UBICACION = col_character(),
## .. COLE_DEPTO_UBICACION = col_character(),
## .. ESTU_PRIVADO_LIBERTAD = col_character(),
## .. ESTU_COD_MCPIO_PRESENTACION = col_character(),
## .. ESTU_MCPIO_PRESENTACION = col_character(),
## .. ESTU_DEPTO_PRESENTACION = col_character(),
## .. ESTU_COD_DEPTO_PRESENTACION = col_character(),
## .. PUNT_LECTURA_CRITICA = col_double(),
## .. PERCENTIL_LECTURA_CRITICA = col_double(),
## .. DESEMP_LECTURA_CRITICA = col_double(),
## .. PUNT_MATEMATICAS = col_double(),
## .. PERCENTIL_MATEMATICAS = col_double(),
## .. DESEMP_MATEMATICAS = col_double(),
## .. PUNT_C_NATURALES = col_double(),
## .. PERCENTIL_C_NATURALES = col_double(),
## .. DESEMP_C_NATURALES = col_double(),
## .. PUNT_SOCIALES_CIUDADANAS = col_double(),
## .. PERCENTIL_SOCIALES_CIUDADANAS = col_double(),
## .. DESEMP_SOCIALES_CIUDADANAS = col_double(),
## .. PUNT_INGLES = col_double(),
## .. PERCENTIL_INGLES = col_double(),
## .. DESEMP_INGLES = col_character(),
## .. PUNT_GLOBAL = col_double(),
## .. PERCENTIL_GLOBAL = col_double(),
## .. ESTU_INSE_INDIVIDUAL = col_character(),
## .. ESTU_NSE_INDIVIDUAL = col_double(),
## .. ESTU_NSE_ESTABLECIMIENTO = col_double(),
## .. ESTU_ESTADOINVESTIGACION = col_character(),
## .. `ESTU_GENERACION-E` = col_character()
## .. )
## - attr(*, "problems")=<externalptr>
spec(datos)
## cols(
## ESTU_TIPODOCUMENTO = col_character(),
## ESTU_NACIONALIDAD = col_character(),
## ESTU_GENERO = col_character(),
## ESTU_FECHANACIMIENTO = col_character(),
## PERIODO = col_double(),
## ESTU_CONSECUTIVO = col_character(),
## ESTU_ESTUDIANTE = col_character(),
## ESTU_TIENEETNIA = col_character(),
## ESTU_PAIS_RESIDE = col_character(),
## ESTU_ETNIA = col_character(),
## ESTU_DEPTO_RESIDE = col_character(),
## ESTU_COD_RESIDE_DEPTO = col_character(),
## ESTU_MCPIO_RESIDE = col_character(),
## ESTU_COD_RESIDE_MCPIO = col_character(),
## FAMI_ESTRATOVIVIENDA = col_character(),
## FAMI_PERSONASHOGAR = col_character(),
## FAMI_CUARTOSHOGAR = col_character(),
## FAMI_EDUCACIONPADRE = col_character(),
## FAMI_EDUCACIONMADRE = col_character(),
## FAMI_TRABAJOLABORPADRE = col_character(),
## FAMI_TRABAJOLABORMADRE = col_character(),
## FAMI_TIENEINTERNET = col_character(),
## FAMI_TIENESERVICIOTV = col_character(),
## FAMI_TIENECOMPUTADOR = col_character(),
## FAMI_TIENELAVADORA = col_character(),
## FAMI_TIENEHORNOMICROOGAS = col_character(),
## FAMI_TIENEAUTOMOVIL = col_character(),
## FAMI_TIENEMOTOCICLETA = col_character(),
## FAMI_TIENECONSOLAVIDEOJUEGOS = col_character(),
## FAMI_NUMLIBROS = col_character(),
## FAMI_COMELECHEDERIVADOS = col_character(),
## FAMI_COMECARNEPESCADOHUEVO = col_character(),
## FAMI_COMECEREALFRUTOSLEGUMBRE = col_character(),
## FAMI_SITUACIONECONOMICA = col_character(),
## ESTU_DEDICACIONLECTURADIARIA = col_character(),
## ESTU_DEDICACIONINTERNET = col_character(),
## ESTU_HORASSEMANATRABAJA = col_character(),
## ESTU_TIPOREMUNERACION = col_character(),
## COLE_CODIGO_ICFES = col_character(),
## COLE_COD_DANE_ESTABLECIMIENTO = col_double(),
## COLE_NOMBRE_ESTABLECIMIENTO = col_character(),
## COLE_GENERO = col_character(),
## COLE_NATURALEZA = col_character(),
## COLE_CALENDARIO = col_character(),
## COLE_BILINGUE = col_character(),
## COLE_CARACTER = col_character(),
## COLE_COD_DANE_SEDE = col_double(),
## COLE_NOMBRE_SEDE = col_character(),
## COLE_SEDE_PRINCIPAL = col_character(),
## COLE_AREA_UBICACION = col_character(),
## COLE_JORNADA = col_character(),
## COLE_COD_MCPIO_UBICACION = col_character(),
## COLE_MCPIO_UBICACION = col_character(),
## COLE_COD_DEPTO_UBICACION = col_character(),
## COLE_DEPTO_UBICACION = col_character(),
## ESTU_PRIVADO_LIBERTAD = col_character(),
## ESTU_COD_MCPIO_PRESENTACION = col_character(),
## ESTU_MCPIO_PRESENTACION = col_character(),
## ESTU_DEPTO_PRESENTACION = col_character(),
## ESTU_COD_DEPTO_PRESENTACION = col_character(),
## PUNT_LECTURA_CRITICA = col_double(),
## PERCENTIL_LECTURA_CRITICA = col_double(),
## DESEMP_LECTURA_CRITICA = col_double(),
## PUNT_MATEMATICAS = col_double(),
## PERCENTIL_MATEMATICAS = col_double(),
## DESEMP_MATEMATICAS = col_double(),
## PUNT_C_NATURALES = col_double(),
## PERCENTIL_C_NATURALES = col_double(),
## DESEMP_C_NATURALES = col_double(),
## PUNT_SOCIALES_CIUDADANAS = col_double(),
## PERCENTIL_SOCIALES_CIUDADANAS = col_double(),
## DESEMP_SOCIALES_CIUDADANAS = col_double(),
## PUNT_INGLES = col_double(),
## PERCENTIL_INGLES = col_double(),
## DESEMP_INGLES = col_character(),
## PUNT_GLOBAL = col_double(),
## PERCENTIL_GLOBAL = col_double(),
## ESTU_INSE_INDIVIDUAL = col_character(),
## ESTU_NSE_INDIVIDUAL = col_double(),
## ESTU_NSE_ESTABLECIMIENTO = col_double(),
## ESTU_ESTADOINVESTIGACION = col_character(),
## `ESTU_GENERACION-E` = col_character()
## )
dim(datos)
## [1] 546212 82
#BASE DE DATOS ICFES COLOMBIA 2019
datos[] <- lapply(datos, function(x) {if (is.character(x)) {x[x == "-"] <- NA}
return(x)})
#DATOS FALTANTES
missing_data_summary <- datos %>%
summarise(across(everything(), ~sum(is.na(.)))) %>%
pivot_longer(cols = everything(), names_to = "Variable", values_to = "MissingValues") %>%
filter(MissingValues > 0)
print(missing_data_summary)
## # A tibble: 38 × 2
## Variable MissingValues
## <chr> <int>
## 1 ESTU_GENERO 121
## 2 ESTU_TIENEETNIA 377
## 3 ESTU_ETNIA 506203
## 4 ESTU_DEPTO_RESIDE 377
## 5 ESTU_COD_RESIDE_DEPTO 377
## 6 ESTU_MCPIO_RESIDE 377
## 7 ESTU_COD_RESIDE_MCPIO 377
## 8 FAMI_ESTRATOVIVIENDA 34507
## 9 FAMI_PERSONASHOGAR 15993
## 10 FAMI_CUARTOSHOGAR 17158
## # ℹ 28 more rows
# Graficar datos faltantes
ggplot(missing_data_summary, aes(x = reorder(Variable, MissingValues), y = MissingValues)) +
geom_bar(stat = "identity", fill = "steelblue") +
coord_flip() +
scale_y_log10(
labels = scales::label_number(scale = 1e-3, suffix = "k"),
breaks = c(0, 100, 1000, 10000, 30000, 100000)
) +
labs(
title = "Variables con Datos Faltantes",
x = "Variable",
y = "Número de Datos Faltantes"
) +
theme_minimal()
#Filtramos por las 2 ciudades en las cuales nos enfocaremos
barranquilla_datos <- filter(datos, ESTU_MCPIO_RESIDE == "BARRANQUILLA")
cartagena_datos <- filter(datos, ESTU_MCPIO_RESIDE == "CARTAGENA DE INDIAS")
#FUNCION PARA VARIABLES NUMERICAS : ESTADISTICAS CAJA BIGOTES
estadistica_numerica_boxplot <- function(data, variable) {
# Extraer la variable
var_data <- data[[variable]]
# Eliminar NA para evitar problemas en cálculos
var_data <- na.omit(var_data)
# Calcular estadísticas básicas
stats <- list(
Media = mean(var_data),
Mediana = median(var_data),
Varianza = var(var_data),
Desviacion = sd(var_data),
Minimo = min(var_data),
Maximo = max(var_data),
Cuartiles = quantile(var_data, probs = c(0.25, 0.5, 0.75)),
Percentiles = quantile(var_data, probs = c(0.01, 0.99))
)
# Mostrar estadísticas
print(stats)
# Crear un data frame temporal para ggplot
plot_data <- data.frame(var_data = var_data)
# Crear el boxplot
plot <- ggplot(plot_data, aes(x = factor(1), y = var_data)) +
geom_boxplot() +
labs(title = paste("Boxplot de", variable),
x = "Variable",
y = variable) +
theme_minimal()
# Mostrar el gráfico
print(plot)
}
#FUNCION PARA VARIABLES CATEG0RICAS : ESTADISTICAS BARRAS
estadistica_categorica_barr <- function(data, variable) {
# Calcular frecuencia de cada categoría
freq_table <- table(data[[variable]])
# Convertir a dataframe para ggplot
df_freq <- as.data.frame(freq_table)
colnames(df_freq) <- c("Category", "Frequency")
# Calcular moda
moda <- names(freq_table)[which.max(freq_table)]
# Calcular estadísticas básicas
stats <- list(
Total = sum(freq_table),
Moda = moda,
Frequencies = freq_table
)
# Mostrar estadísticas
print(stats)
# Crear el gráfico de barras
plot <- ggplot(df_freq, aes(x = Category, y = Frequency, fill = Category)) +
geom_bar(stat = "identity") +
labs(title = paste("Distribución de", variable),
x = "Categoría",
y = "Frecuencia") +
theme_minimal()
# Mostrar el gráfico
print(plot)
}
#GRAFICA VARIABLE CATEGORICA COMPARADA CON EL PUNTAJE GLOBAL
variablecategorica_vs_ptglobal <- function(data, categorical_var) {
# Verificar que la variable categórica existe en el dataset
if (!(categorical_var %in% names(data))) {
stop("La variable categórica no se encuentra en el dataset.")
}
# Filtrar los datos para excluir NA en la variable categórica y el puntaje global
filtered_data <- data %>%
filter(!is.na(.data[[categorical_var]]), !is.na(PUNT_GLOBAL))
# Agrupar por la variable categórica y calcular la media del puntaje global
summary_data <- filtered_data %>%
group_by_at(categorical_var) %>%
summarise(mean_punt_global = mean(PUNT_GLOBAL, na.rm = TRUE))
# Crear el gráfico de barras
plot <- ggplot(summary_data, aes(x = reorder(!!sym(categorical_var), mean_punt_global), y = mean_punt_global)) +
geom_bar(stat = "identity", fill = "skyblue") +
labs(title = paste("Puntaje Global por", categorical_var),
x = categorical_var,
y = "Media del Puntaje Global") +
theme_minimal() +
coord_flip() # Opcional: para mejor visualización si hay muchas categorías
# Mostrar el gráfico
print(plot)
}
#COMPARACION DE VARIABLES CATEGORICAS POR CIUDAD
compare_two_cities_categorical <- function(city1_data, city2_data, variable, city1_name = "Ciudad 1", city2_name = "Ciudad 2", position = "stack") {
# Crear un dataframe combinado con las 2 ciudades
combined_data <- rbind(
data.frame(Ciudad = city1_name, Categoria = city1_data[[variable]]),
data.frame(Ciudad = city2_name, Categoria = city2_data[[variable]])
)
# Eliminar NA
combined_data <- na.omit(combined_data)
# Convertir la variable categórica en un factor
combined_data$Categoria <- as.factor(combined_data$Categoria)
# Crear el gráfico de barras
plot <- ggplot(combined_data, aes(x = Ciudad, fill = Categoria)) +
geom_bar(position = position) +
labs(title = paste("Distribución de", variable, "entre", city1_name, "y", city2_name),
y = "Frecuencia",
x = "Ciudad") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
# Mostrar el gráfico
print(plot)
}
#Comparacion entre ciudades variable categorica PROPORCIONAL
compare_two_cities_categorical_proportions <- function(city1_data, city2_data, variable, city1_name = "Ciudad 1", city2_name = "Ciudad 2", position = "stack") {
# Crear un dataframe combinado con las 2 ciudades
combined_data <- rbind(
data.frame(Ciudad = city1_name, Categoria = city1_data[[variable]]),
data.frame(Ciudad = city2_name, Categoria = city2_data[[variable]])
)
# Eliminar NA
combined_data <- na.omit(combined_data)
# Convertir la variable categórica en un factor
combined_data$Categoria <- as.factor(combined_data$Categoria)
# Calcular proporciones
proportion_data <- combined_data %>%
group_by(Ciudad, Categoria) %>%
summarise(Count = n(), .groups = 'drop') %>%
group_by(Ciudad) %>%
mutate(Proporcion = Count / sum(Count)) %>%
ungroup()
# Crear el gráfico de barras
plot <- ggplot(proportion_data, aes(x = Ciudad, y = Proporcion, fill = Categoria)) +
geom_bar(stat = "identity", position = position) +
labs(title = paste("Distribución Proporcional de", variable, "entre", city1_name, "y", city2_name),
y = "Proporción",
x = "Ciudad") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
# Mostrar el gráfico
print(plot)
}
#Grafico comparando 2 ciudades variable numerica
compare_two_cities_violin <- function(city1_data, city2_data, variable, city1_name = "Ciudad 1", city2_name = "Ciudad 2") {
# Crear un dataframe combinado con las 2 ciudades
combined_data <- rbind(
data.frame(Ciudad = city1_name, Valor = city1_data[[variable]]),
data.frame(Ciudad = city2_name, Valor = city2_data[[variable]])
)
# Eliminar NA
combined_data <- na.omit(combined_data)
# Crear el gráfico de violín
plot <- ggplot(combined_data, aes(x = Ciudad, y = Valor, fill = Ciudad)) +
geom_violin(trim = FALSE, alpha = 0.5) + # Gráfico de violín para mostrar la distribución
geom_jitter(width = 0.2, alpha = 0.3) + # Agrega puntos dispersos para ver datos individuales
labs(title = paste("Distribución de", variable, "entre", city1_name, "y", city2_name),
y = variable,
x = "Ciudad") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
# Mostrar el gráfico
print(plot)
}
#Grafico de pastel por porcentaje
plot_pie_chart <- function(data, variable) {
# Verificar que la base de datos no sea NULL y contenga la variable
if (is.null(data) || !variable %in% names(data)) {
stop("La base de datos es NULL o la variable no existe en la base de datos.")
}
# Asegurarse de que la variable categórica esté en formato factor y eliminar NA
data <- data %>%
filter(!is.na(.[[variable]]))
data[[variable]] <- as.factor(data[[variable]])
# Calcular la frecuencia de cada categoría
category_counts <- data %>%
group_by(Categoria = .[[variable]]) %>%
summarise(Count = n(), .groups = 'drop') %>%
mutate(Proporcion = Count / sum(Count),
Porcentaje = Proporcion * 100)
# Crear el gráfico de pastel
plot <- ggplot(category_counts, aes(x = "", y = Proporcion, fill = Categoria)) +
geom_bar(width = 1, stat = "identity") +
coord_polar(theta = "y") +
labs(title = paste("Distribución de", variable, "en la Ciudad"),
y = "Proporción") +
theme_void() +
theme(legend.title = element_blank()) +
geom_text(aes(label = paste0(round(Porcentaje, 1), "%")),
position = position_stack(vjust = 0.5))
# Mostrar el gráfico
print(plot)
}
#Comparacion entre ciudades variable categorica PROPORCIONAL
compare_two_cities_categorical_proportions <- function(city1_data, city2_data, variable, city1_name = "Ciudad 1", city2_name = "Ciudad 2", position = "dodge") {
# Crear un dataframe combinado con las 2 ciudades
combined_data <- rbind(
data.frame(Ciudad = city1_name, Categoria = city1_data[[variable]]),
data.frame(Ciudad = city2_name, Categoria = city2_data[[variable]])
)
# Eliminar NA
combined_data <- na.omit(combined_data)
# Convertir la variable categórica en un factor
combined_data$Categoria <- as.factor(combined_data$Categoria)
# Calcular proporciones
proportion_data <- combined_data %>%
group_by(Ciudad, Categoria) %>%
summarise(Count = n(), .groups = 'drop') %>%
group_by(Ciudad) %>%
mutate(Proporcion = Count / sum(Count)) %>%
ungroup()
# Crear el gráfico de barras
plot <- ggplot(proportion_data, aes(x = Ciudad, y = Proporcion, fill = Categoria)) +
geom_bar(stat = "identity", position = position) +
labs(title = paste("Distribución Proporcional de", variable, "entre", city1_name, "y", city2_name),
y = "Proporción",
x = "Ciudad") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
# Mostrar el gráfico
print(plot)
}
grafica_distribucion <- function(data, variable) {
# Asegurarse de que la variable existe en el dataframe
if (!(variable %in% names(data))) {
stop("La variable especificada no se encuentra en el dataframe.")
}
# Crear el gráfico
plot <- ggplot(data, aes(x = !!sym(variable))) +
geom_histogram(aes(y = ..density..), bins = 30, fill = "blue", color = "black", alpha = 0.7) +
geom_density(color = "red", size = 1) +
labs(title = paste("Distribución de", variable),
x = variable,
y = "Densidad") +
theme_minimal()
# Mostrar el gráfico
print(plot)
}
#APLICACION FUNCIONES
#PUNTAJE GLOBAL
estadistica_numerica_boxplot(barranquilla_datos, "PUNT_GLOBAL")
## $Media
## [1] 248.7109
##
## $Mediana
## [1] 245
##
## $Varianza
## [1] 2927.063
##
## $Desviacion
## [1] 54.10234
##
## $Minimo
## [1] 80
##
## $Maximo
## [1] 437
##
## $Cuartiles
## 25% 50% 75%
## 207 245 288
##
## $Percentiles
## 1% 99%
## 148.00 371.24
grafica_distribucion(barranquilla_datos, "PUNT_GLOBAL")
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## Warning: The dot-dot notation (`..density..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(density)` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
estadistica_numerica_boxplot(cartagena_datos, "PUNT_GLOBAL")
## $Media
## [1] 236.1468
##
## $Mediana
## [1] 230
##
## $Varianza
## [1] 2856.757
##
## $Desviacion
## [1] 53.44863
##
## $Minimo
## [1] 88
##
## $Maximo
## [1] 475
##
## $Cuartiles
## 25% 50% 75%
## 195 230 273
##
## $Percentiles
## 1% 99%
## 145 367
grafica_distribucion(cartagena_datos, "PUNT_GLOBAL")
compare_two_cities_violin(barranquilla_datos, cartagena_datos, "PUNT_GLOBAL", city1_name = "Barranquilla", city2_name = "Cartagena")
#INFORMACION VARIABLE CATEGORICA POR CIUDAD
estadistica_categorica_barr(barranquilla_datos, "FAMI_NUMLIBROS")
## $Total
## [1] 15721
##
## $Moda
## [1] "0 A 10 LIBROS"
##
## $Frequencies
##
## 0 A 10 LIBROS 11 A 25 LIBROS 26 A 100 LIBROS MÁS DE 100 LIBROS
## 6389 5135 3231 966
estadistica_categorica_barr(cartagena_datos, "FAMI_NUMLIBROS")
## $Total
## [1] 12136
##
## $Moda
## [1] "0 A 10 LIBROS"
##
## $Frequencies
##
## 0 A 10 LIBROS 11 A 25 LIBROS 26 A 100 LIBROS MÁS DE 100 LIBROS
## 5325 3864 2205 742
estadistica_categorica_barr(barranquilla_datos, "ESTU_DEDICACIONINTERNET")
## $Total
## [1] 16061
##
## $Moda
## [1] "Entre 1 y 3 horas"
##
## $Frequencies
##
## 30 minutos o menos Entre 1 y 3 horas Entre 30 y 60 minutos
## 2175 5204 4068
## Más de 3 horas No Navega Internet
## 4105 509
estadistica_categorica_barr(cartagena_datos, "ESTU_DEDICACIONINTERNET")
## $Total
## [1] 12353
##
## $Moda
## [1] "Entre 1 y 3 horas"
##
## $Frequencies
##
## 30 minutos o menos Entre 1 y 3 horas Entre 30 y 60 minutos
## 2014 3903 3175
## Más de 3 horas No Navega Internet
## 2738 523
estadistica_categorica_barr(barranquilla_datos, "ESTU_DEDICACIONLECTURADIARIA")
## $Total
## [1] 16093
##
## $Moda
## [1] "30 minutos o menos"
##
## $Frequencies
##
## 30 minutos o menos Entre 1 y 2 horas
## 5657 1978
## Entre 30 y 60 minutos Más de 2 horas
## 4482 1058
## No leo por entretenimiento
## 2918
estadistica_categorica_barr(cartagena_datos, "ESTU_DEDICACIONLECTURADIARIA")
## $Total
## [1] 12377
##
## $Moda
## [1] "30 minutos o menos"
##
## $Frequencies
##
## 30 minutos o menos Entre 1 y 2 horas
## 4531 1529
## Entre 30 y 60 minutos Más de 2 horas
## 3446 714
## No leo por entretenimiento
## 2157
plot_pie_chart(barranquilla_datos, "ESTU_GENERO" )
plot_pie_chart(cartagena_datos, "ESTU_GENERO" )
plot_pie_chart(barranquilla_datos, "FAMI_TIENEINTERNET" )
plot_pie_chart(cartagena_datos, "FAMI_TIENEINTERNET" )
plot_pie_chart(barranquilla_datos, "FAMI_SITUACIONECONOMICA")
plot_pie_chart(cartagena_datos, "FAMI_SITUACIONECONOMICA")
#COMPARACIONES POR CIUDAD CON EL PUNTAJE GLOBAL
variablecategorica_vs_ptglobal(barranquilla_datos, "ESTU_DEDICACIONINTERNET")
variablecategorica_vs_ptglobal(cartagena_datos, "ESTU_DEDICACIONINTERNET")
variablecategorica_vs_ptglobal(barranquilla_datos, "ESTU_DEDICACIONLECTURADIARIA")
variablecategorica_vs_ptglobal(cartagena_datos, "ESTU_DEDICACIONLECTURADIARIA")
variablecategorica_vs_ptglobal(barranquilla_datos, "FAMI_ESTRATOVIVIENDA")
variablecategorica_vs_ptglobal(cartagena_datos, "FAMI_ESTRATOVIVIENDA")
variablecategorica_vs_ptglobal(barranquilla_datos, "FAMI_NUMLIBROS")
variablecategorica_vs_ptglobal(cartagena_datos,"FAMI_NUMLIBROS")
#COMPARACIONES CATEGORICAS ENTRE CIUDADES
compare_two_cities_categorical(barranquilla_datos, cartagena_datos, "FAMI_ESTRATOVIVIENDA", city1_name = "Barranquilla", city2_name = "Cartagena", position = "stack")
compare_two_cities_categorical(barranquilla_datos, cartagena_datos, "FAMI_TIENEINTERNET", city1_name = "Barranquilla", city2_name = "Cartagena", position = "stack")
compare_two_cities_categorical(barranquilla_datos, cartagena_datos, "FAMI_SITUACIONECONOMICA", city1_name = "Barranquilla", city2_name = "Cartagena", position = "stack")
compare_two_cities_categorical(barranquilla_datos, cartagena_datos, "ESTU_DEDICACIONINTERNET", city1_name = "Barranquilla", city2_name = "Cartagena", position = "stack")
compare_two_cities_categorical(barranquilla_datos, cartagena_datos, "ESTU_DEDICACIONLECTURADIARIA", city1_name = "Barranquilla", city2_name = "Cartagena", position = "stack")
#COMPARACIONES CATEGORICAS ENTRE CIUDADES DE MANERA PROPORCIONAL
compare_two_cities_categorical_proportions(barranquilla_datos, cartagena_datos, "ESTU_DEDICACIONLECTURADIARIA", city1_name = "Barranquilla", city2_name = "Cartagena", position = "dodge")
compare_two_cities_categorical_proportions(barranquilla_datos, cartagena_datos, "ESTU_DEDICACIONINTERNET", city1_name = "Barranquilla", city2_name = "Cartagena", position = "dodge")
compare_two_cities_categorical_proportions(barranquilla_datos, cartagena_datos, "FAMI_SITUACIONECONOMICA", city1_name = "Barranquilla", city2_name = "Cartagena", position = "dodge")
compare_two_cities_categorical_proportions(barranquilla_datos, cartagena_datos, "FAMI_ESTRATOVIVIENDA", city1_name = "Barranquilla", city2_name = "Cartagena", position = "dodge")