Bibliotecas necesarias

library(dplyr)
library(tidyr)

Base de datos

Lectura de datos .csv

icfes_ancho <- read.csv("Saber_11__2018-2.csv", encoding = "UTF-8")

Conversión a formato .Rdata

save(icfes_ancho, file = "Icfes_201802.Rdata", compress = "xz")

Lectura de datos .Rdata

load("Icfes_201802.Rdata")

Estructura interna

str(icfes_ancho)
## 'data.frame':    549934 obs. of  83 variables:
##  $ ESTU_TIPODOCUMENTO           : Factor w/ 9 levels "CC","CE","CR",..: 3 9 9 9 1 9 9 9 9 9 ...
##  $ ESTU_NACIONALIDAD            : Factor w/ 42 levels "AFGANISTÁN","ALBANIA",..: 15 15 15 15 15 15 15 15 15 15 ...
##  $ ESTU_GENERO                  : Factor w/ 2 levels "F","M": 2 2 2 2 2 1 2 2 2 2 ...
##  $ ESTU_FECHANACIMIENTO         : Factor w/ 11818 levels "","01/01/1900",..: 3741 8523 7436 7761 6237 5212 8164 7636 9946 7799 ...
##  $ PERIODO                      : int  20182 20182 20182 20182 20182 20182 20182 20182 20182 20182 ...
##  $ ESTU_CONSECUTIVO             : Factor w/ 549934 levels "SB11201820000001",..: 376152 492618 192856 470102 283318 213746 78094 497067 82724 189676 ...
##  $ ESTU_ESTUDIANTE              : Factor w/ 1 level "ESTUDIANTE": 1 1 1 1 1 1 1 1 1 1 ...
##  $ ESTU_PAIS_RESIDE             : Factor w/ 42 levels "AFGANISTÁN","ALBANIA",..: 15 15 15 15 15 15 15 15 15 15 ...
##  $ ESTU_TIENEETNIA              : Factor w/ 3 levels "-","No","Si": 2 2 2 2 2 3 3 2 2 2 ...
##  $ ESTU_ETNIA                   : Factor w/ 21 levels "-","Arhuaco",..: 1 1 1 1 1 12 1 1 1 1 ...
##  $ ESTU_LIMITA_MOTRIZ           : Factor w/ 2 levels "-","x": 1 1 1 1 1 1 1 1 1 1 ...
##  $ ESTU_DEPTO_RESIDE            : Factor w/ 35 levels "-","AMAZONAS",..: 5 15 33 8 6 14 21 5 9 8 ...
##  $ ESTU_COD_RESIDE_DEPTO        : Factor w/ 35 levels "-","05","08",..: 3 11 25 6 4 13 15 3 7 6 ...
##  $ ESTU_MCPIO_RESIDE            : Factor w/ 1033 levels "-","ABEJORRAL",..: 871 478 133 953 101 286 971 667 513 259 ...
##  $ ESTU_COD_RESIDE_MCPIO        : Factor w/ 1116 levels "-","05001","05002",..: 146 440 1007 197 150 589 655 140 331 228 ...
##  $ FAMI_ESTRATOVIVIENDA         : Factor w/ 8 levels "-","Estrato 1",..: 3 2 3 4 3 1 8 8 3 2 ...
##  $ FAMI_PERSONASHOGAR           : Factor w/ 6 levels "-","1 a 2","3 a 4",..: 5 4 2 3 5 6 5 4 4 3 ...
##  $ FAMI_CUARTOSHOGAR            : Factor w/ 7 levels "-","Cinco","Cuatro",..: 3 4 4 6 6 4 6 4 3 7 ...
##  $ FAMI_EDUCACIONPADRE          : Factor w/ 13 levels "-","Educación profesional completa",..: 6 10 6 6 6 1 11 10 9 9 ...
##  $ FAMI_EDUCACIONMADRE          : Factor w/ 13 levels "-","Educación profesional completa",..: 6 8 13 2 6 1 11 10 11 9 ...
##  $ FAMI_TRABAJOLABORPADRE       : Factor w/ 14 levels "-","Es agricultor, pesquero o jornalero",..: 6 14 8 8 7 7 7 3 2 2 ...
##  $ FAMI_TRABAJOLABORMADRE       : Factor w/ 14 levels "-","Es agricultor, pesquero o jornalero",..: 6 13 6 4 13 7 13 13 13 11 ...
##  $ FAMI_TIENEINTERNET           : Factor w/ 3 levels "-","No","Si": 3 3 2 3 3 1 2 3 2 2 ...
##  $ FAMI_TIENESERVICIOTV         : Factor w/ 3 levels "-","No","Si": 3 3 2 3 3 1 2 3 3 2 ...
##  $ FAMI_TIENECOMPUTADOR         : Factor w/ 3 levels "-","No","Si": 2 2 2 3 2 2 2 3 2 2 ...
##  $ FAMI_TIENELAVADORA           : Factor w/ 3 levels "-","No","Si": 3 3 2 3 3 2 2 3 3 2 ...
##  $ FAMI_TIENEHORNOMICROOGAS     : Factor w/ 3 levels "-","No","Si": 2 2 3 3 3 2 2 3 2 2 ...
##  $ FAMI_TIENEAUTOMOVIL          : Factor w/ 3 levels "-","No","Si": 2 2 2 3 2 2 2 3 2 2 ...
##  $ FAMI_TIENEMOTOCICLETA        : Factor w/ 3 levels "-","No","Si": 3 3 2 2 2 2 3 2 3 3 ...
##  $ FAMI_TIENECONSOLAVIDEOJUEGOS : Factor w/ 3 levels "-","No","Si": 2 2 2 3 2 2 2 3 2 2 ...
##  $ FAMI_NUMLIBROS               : Factor w/ 5 levels "-","0 A 10 LIBROS",..: 4 3 4 5 5 1 3 2 2 3 ...
##  $ FAMI_COMELECHEDERIVADOS      : Factor w/ 5 levels "-","1 o 2 veces por semana",..: 5 4 2 5 2 1 2 4 2 3 ...
##  $ FAMI_COMECARNEPESCADOHUEVO   : Factor w/ 5 levels "-","1 o 2 veces por semana",..: 5 2 3 5 2 1 2 3 5 2 ...
##  $ FAMI_COMECEREALFRUTOSLEGUMBRE: Factor w/ 5 levels "-","1 o 2 veces por semana",..: 2 2 2 5 3 1 4 4 5 3 ...
##  $ FAMI_SITUACIONECONOMICA      : Factor w/ 4 levels "-","Igual","Mejor",..: 2 3 3 2 2 2 2 2 2 2 ...
##  $ ESTU_DEDICACIONLECTURADIARIA : Factor w/ 6 levels "-","30 minutos o menos",..: 2 4 2 2 2 1 4 6 2 4 ...
##  $ ESTU_DEDICACIONINTERNET      : Factor w/ 6 levels "-","30 minutos o menos",..: 5 4 4 5 3 1 2 3 4 2 ...
##  $ ESTU_HORASSEMANATRABAJA      : Factor w/ 6 levels "-","0","Entre 11 y 20 horas",..: 2 2 2 2 6 5 2 6 6 6 ...
##  $ ESTU_TIPOREMUNERACION        : Factor w/ 5 levels "-","No","Si, en efectivo",..: 2 2 2 2 2 2 2 3 3 2 ...
##  $ COLE_CODIGO_ICFES            : int  122432 28704 112466 134692 80051 114181 144220 109033 174656 45443 ...
##  $ COLE_COD_DANE_ESTABLECIMIENTO: num  1.08e+11 1.23e+11 2.76e+11 3.15e+11 3.11e+11 ...
##  $ COLE_NOMBRE_ESTABLECIMIENTO  : Factor w/ 9225 levels "ACAD AMERICANA DE SISTEMAS Y COMERCIO",..: 7028 4674 7204 8235 1585 4915 6216 7170 7709 5417 ...
##  $ COLE_GENERO                  : Factor w/ 3 levels "FEMENINO","MASCULINO",..: 3 3 3 3 3 3 3 3 3 3 ...
##  $ COLE_NATURALEZA              : Factor w/ 2 levels "NO OFICIAL","OFICIAL": 2 2 2 1 1 2 2 2 2 2 ...
##  $ COLE_CALENDARIO              : Factor w/ 3 levels "A","B","OTRO": 1 1 1 1 1 1 1 1 1 1 ...
##  $ COLE_BILINGUE                : Factor w/ 3 levels "-","N","S": 2 2 2 1 2 2 1 2 2 2 ...
##  $ COLE_CARACTER                : Factor w/ 5 levels "-","ACADÉMICO",..: 2 2 5 2 5 5 5 2 2 5 ...
##  $ COLE_COD_DANE_SEDE           : num  1.08e+11 1.23e+11 2.76e+11 3.15e+11 3.11e+11 ...
##  $ COLE_NOMBRE_SEDE             : Factor w/ 10034 levels "# 1","# 3 CICUCO",..: 6483 5437 3575 7955 2385 5536 6554 7232 7600 5784 ...
##  $ COLE_SEDE_PRINCIPAL          : Factor w/ 2 levels "N","S": 2 2 2 2 2 2 2 2 2 2 ...
##  $ COLE_AREA_UBICACION          : Factor w/ 2 levels "RURAL","URBANO": 2 2 1 2 2 1 1 1 1 1 ...
##  $ COLE_JORNADA                 : Factor w/ 6 levels "COMPLETA","MAÑANA",..: 2 6 2 2 1 2 2 2 1 1 ...
##  $ COLE_COD_MCPIO_UBICACION     : int  8001 23417 76001 15001 11001 27250 44847 8573 17444 15806 ...
##  $ COLE_MCPIO_UBICACION         : Factor w/ 1030 levels "ABEJORRAL","ÁBREGO",..: 84 476 133 950 101 285 968 665 511 921 ...
##  $ COLE_COD_DEPTO_UBICACION     : int  8 23 76 15 11 27 44 8 17 15 ...
##  $ COLE_DEPTO_UBICACION         : Factor w/ 33 levels "AMAZONAS","ANTIOQUIA",..: 4 14 31 7 5 13 19 4 8 7 ...
##  $ ESTU_PRIVADO_LIBERTAD        : Factor w/ 2 levels "N","S": 1 1 1 1 1 1 1 1 1 1 ...
##  $ ESTU_COD_MCPIO_PRESENTACION  : int  8001 23417 76001 15001 11001 76109 44847 8001 17444 15238 ...
##  $ ESTU_MCPIO_PRESENTACION      : Factor w/ 463 levels "ABEJORRAL","ÁBREGO",..: 46 216 69 430 52 57 437 46 232 124 ...
##  $ ESTU_DEPTO_PRESENTACION      : Factor w/ 33 levels "AMAZONAS","ANTIOQUIA",..: 4 14 31 7 5 31 19 4 8 7 ...
##  $ ESTU_COD_DEPTO_PRESENTACION  : int  8 23 76 15 11 76 44 8 17 15 ...
##  $ PUNT_LECTURA_CRITICA         : int  63 54 59 61 56 28 45 30 50 43 ...
##  $ PERCENTIL_LECTURA_CRITICA    : int  84 54 72 79 64 1 24 1 42 19 ...
##  $ DESEMP_LECTURA_CRITICA       : int  3 3 3 3 3 1 2 1 2 2 ...
##  $ PUNT_MATEMATICAS             : int  69 50 43 60 51 35 49 37 63 51 ...
##  $ PERCENTIL_MATEMATICAS        : int  95 48 28 78 53 10 46 15 86 53 ...
##  $ DESEMP_MATEMATICAS           : int  3 2 2 3 3 1 2 2 3 3 ...
##  $ PUNT_C_NATURALES             : int  54 50 46 60 48 36 45 40 57 50 ...
##  $ PERCENTIL_C_NATURALES        : int  67 53 40 84 45 10 35 20 74 55 ...
##  $ DESEMP_C_NATURALES           : int  2 2 2 3 2 1 2 1 3 2 ...
##  $ PUNT_SOCIALES_CIUDADANAS     : int  57 40 45 67 49 37 33 40 48 50 ...
##  $ PERCENTIL_SOCIALES_CIUDADANAS: int  76 28 43 94 55 19 9 29 53 59 ...
##  $ DESEMP_SOCIALES_CIUDADANAS   : int  3 1 2 3 2 1 1 1 2 2 ...
##  $ PUNT_INGLES                  : int  65 48 47 63 56 37 50 40 59 48 ...
##  $ PERCENTIL_INGLES             : int  90 46 42 86 71 10 53 20 80 43 ...
##  $ DESEMP_INGLES                : Factor w/ 5 levels "A-","A1","A2",..: 3 2 1 3 2 1 2 1 3 2 ...
##  $ PUNT_GLOBAL                  : int  305 242 241 310 257 171 218 185 274 242 ...
##  $ PERCENTIL_GLOBAL             : int  85 46 45 87 57 4 29 9 68 46 ...
##  $ ESTU_NSE_ESTABLECIMIENTO     : int  2 2 2 3 3 2 1 2 1 2 ...
##  $ ESTU_INSE_INDIVIDUAL         : num  53.2 45.1 44.8 73.6 49.4 ...
##  $ ESTU_NSE_INDIVIDUAL          : Factor w/ 5 levels "-","NSE1","NSE2",..: 4 3 3 5 3 2 2 4 2 2 ...
##  $ ESTU_ESTADOINVESTIGACION     : Factor w/ 3 levels "PRESENTE CON LECTURA TARDIA",..: 2 2 2 2 2 2 2 2 2 2 ...
##  $ ESTU_GENERACION.E            : Factor w/ 4 levels "GENERACION E - EXCELENCIA DEPARTAMENTAL",..: 4 3 3 4 3 4 4 4 4 3 ...

Depuración

Selección de columnas

icfes_ancho2 <- icfes_ancho %>%
  # Seleccionando columnas
  select(ESTU_TIPODOCUMENTO, ESTU_NACIONALIDAD, ESTU_GENERO,
         ESTU_DEPTO_RESIDE, ESTU_MCPIO_RESIDE, FAMI_ESTRATOVIVIENDA,
         COLE_JORNADA, FAMI_TIENEINTERNET, FAMI_TIENECOMPUTADOR,
         FAMI_TIENECONSOLAVIDEOJUEGOS, FAMI_NUMLIBROS,
         FAMI_COMECARNEPESCADOHUEVO, ESTU_DEDICACIONINTERNET,
         ESTU_HORASSEMANATRABAJA, COLE_NATURALEZA, COLE_AREA_UBICACION,
         PUNT_LECTURA_CRITICA, PUNT_MATEMATICAS, PUNT_C_NATURALES,
         PUNT_SOCIALES_CIUDADANAS, PUNT_INGLES) %>%
  # Filtrando datos sólo para Colombia
  filter(ESTU_NACIONALIDAD == "COLOMBIA") %>% 
  # Eliminando variable de nacionalidad
  select(-ESTU_NACIONALIDAD)

Estructura interna de icfes_acho2:

str(icfes_ancho2)
## 'data.frame':    549519 obs. of  20 variables:
##  $ ESTU_TIPODOCUMENTO          : Factor w/ 9 levels "CC","CE","CR",..: 3 9 9 9 1 9 9 9 9 9 ...
##  $ ESTU_GENERO                 : Factor w/ 2 levels "F","M": 2 2 2 2 2 1 2 2 2 2 ...
##  $ ESTU_DEPTO_RESIDE           : Factor w/ 35 levels "-","AMAZONAS",..: 5 15 33 8 6 14 21 5 9 8 ...
##  $ ESTU_MCPIO_RESIDE           : Factor w/ 1033 levels "-","ABEJORRAL",..: 871 478 133 953 101 286 971 667 513 259 ...
##  $ FAMI_ESTRATOVIVIENDA        : Factor w/ 8 levels "-","Estrato 1",..: 3 2 3 4 3 1 8 8 3 2 ...
##  $ COLE_JORNADA                : Factor w/ 6 levels "COMPLETA","MAÑANA",..: 2 6 2 2 1 2 2 2 1 1 ...
##  $ FAMI_TIENEINTERNET          : Factor w/ 3 levels "-","No","Si": 3 3 2 3 3 1 2 3 2 2 ...
##  $ FAMI_TIENECOMPUTADOR        : Factor w/ 3 levels "-","No","Si": 2 2 2 3 2 2 2 3 2 2 ...
##  $ FAMI_TIENECONSOLAVIDEOJUEGOS: Factor w/ 3 levels "-","No","Si": 2 2 2 3 2 2 2 3 2 2 ...
##  $ FAMI_NUMLIBROS              : Factor w/ 5 levels "-","0 A 10 LIBROS",..: 4 3 4 5 5 1 3 2 2 3 ...
##  $ FAMI_COMECARNEPESCADOHUEVO  : Factor w/ 5 levels "-","1 o 2 veces por semana",..: 5 2 3 5 2 1 2 3 5 2 ...
##  $ ESTU_DEDICACIONINTERNET     : Factor w/ 6 levels "-","30 minutos o menos",..: 5 4 4 5 3 1 2 3 4 2 ...
##  $ ESTU_HORASSEMANATRABAJA     : Factor w/ 6 levels "-","0","Entre 11 y 20 horas",..: 2 2 2 2 6 5 2 6 6 6 ...
##  $ COLE_NATURALEZA             : Factor w/ 2 levels "NO OFICIAL","OFICIAL": 2 2 2 1 1 2 2 2 2 2 ...
##  $ COLE_AREA_UBICACION         : Factor w/ 2 levels "RURAL","URBANO": 2 2 1 2 2 1 1 1 1 1 ...
##  $ PUNT_LECTURA_CRITICA        : int  63 54 59 61 56 28 45 30 50 43 ...
##  $ PUNT_MATEMATICAS            : int  69 50 43 60 51 35 49 37 63 51 ...
##  $ PUNT_C_NATURALES            : int  54 50 46 60 48 36 45 40 57 50 ...
##  $ PUNT_SOCIALES_CIUDADANAS    : int  57 40 45 67 49 37 33 40 48 50 ...
##  $ PUNT_INGLES                 : int  65 48 47 63 56 37 50 40 59 48 ...

Filtro de filas y edición de nombres

icfes_ancho3 <- icfes_ancho2 %>% 
  # Editando nombres
  rename(TipoD = ESTU_TIPODOCUMENTO,
         Genero = ESTU_GENERO,
         DeptoR = ESTU_DEPTO_RESIDE,
         MpioR = ESTU_MCPIO_RESIDE,
         Estrato = FAMI_ESTRATOVIVIENDA,
         Jornada = COLE_JORNADA,
         Internet = FAMI_TIENEINTERNET,
         PC = FAMI_TIENECOMPUTADOR,
         Consola = FAMI_TIENECONSOLAVIDEOJUEGOS,
         Libros = FAMI_NUMLIBROS,
         Proteina = FAMI_COMECARNEPESCADOHUEVO,
         Tinternet = ESTU_DEDICACIONINTERNET,
         HorasT = ESTU_HORASSEMANATRABAJA,
         TipoCole = COLE_NATURALEZA,
         Area = COLE_AREA_UBICACION,
         LecturaC = PUNT_LECTURA_CRITICA,
         Matematicas = PUNT_MATEMATICAS,
         Naturales = PUNT_C_NATURALES,
         Sociales = PUNT_SOCIALES_CIUDADANAS,
         Ingles = PUNT_INGLES) %>% 
  # Filtrando datos sólo CC y TI
  filter(TipoD == "CC" | TipoD == "TI") %>%
  # Eliminando nivel "-" de factores
  filter(DeptoR != "-", MpioR != "-", Estrato != "-",
         Internet != "-", PC != "-", Consola != "-", 
         Libros != "-", Proteina != "-", Tinternet != "-",
         HorasT != "-") %>%
  # Eliminando niveles sobrantes en factores
  droplevels()

Nota: de los 549934 registros iniciales quedan 473573 (86.11%) después del proceso de depuración.

  • Estructura interna de datos depurados:
str(icfes_ancho3)
## 'data.frame':    473573 obs. of  20 variables:
##  $ TipoD      : Factor w/ 2 levels "CC","TI": 2 2 2 1 2 2 2 2 2 2 ...
##  $ Genero     : Factor w/ 2 levels "F","M": 2 2 2 2 2 2 2 2 2 2 ...
##  $ DeptoR     : Factor w/ 33 levels "AMAZONAS","ANTIOQUIA",..: 14 31 7 5 19 4 8 7 12 2 ...
##  $ MpioR      : Factor w/ 1031 levels "ABEJORRAL","ÁBREGO",..: 476 132 951 100 969 665 511 258 104 161 ...
##  $ Estrato    : Factor w/ 7 levels "Estrato 1","Estrato 2",..: 1 2 3 2 7 7 2 1 2 1 ...
##  $ Jornada    : Factor w/ 6 levels "COMPLETA","MAÑANA",..: 6 2 2 1 2 2 1 1 5 2 ...
##  $ Internet   : Factor w/ 2 levels "No","Si": 2 1 2 2 1 2 1 1 1 1 ...
##  $ PC         : Factor w/ 2 levels "No","Si": 1 1 2 1 1 2 1 1 1 1 ...
##  $ Consola    : Factor w/ 2 levels "No","Si": 1 1 2 1 1 2 1 1 1 1 ...
##  $ Libros     : Factor w/ 4 levels "0 A 10 LIBROS",..: 2 3 4 4 2 1 1 2 2 2 ...
##  $ Proteina   : Factor w/ 4 levels "1 o 2 veces por semana",..: 1 2 4 1 1 2 4 1 2 2 ...
##  $ Tinternet  : Factor w/ 5 levels "30 minutos o menos",..: 3 3 4 2 1 2 3 1 5 1 ...
##  $ HorasT     : Factor w/ 5 levels "0","Entre 11 y 20 horas",..: 1 1 1 5 1 5 5 5 1 1 ...
##  $ TipoCole   : Factor w/ 2 levels "NO OFICIAL","OFICIAL": 2 2 1 1 2 2 2 2 2 2 ...
##  $ Area       : Factor w/ 2 levels "RURAL","URBANO": 2 1 2 2 1 1 1 1 2 2 ...
##  $ LecturaC   : int  54 59 61 56 45 30 50 43 43 62 ...
##  $ Matematicas: int  50 43 60 51 49 37 63 51 43 63 ...
##  $ Naturales  : int  50 46 60 48 45 40 57 50 35 59 ...
##  $ Sociales   : int  40 45 67 49 33 40 48 50 41 53 ...
##  $ Ingles     : int  48 47 63 56 50 40 59 48 41 46 ...

Datos ordenados tidydata

De formato ancho a largo

icfes_largo <- icfes_ancho3 %>% 
  gather(key = "Prueba", value = "Puntaje", c(16:20))

Ejemplo: formato largo a ancho

icfes_ancho_2 <- icfes_largo %>% 
  spread(key = Prueba, value = Puntaje, convert = TRUE)

Exportando datos depurados

save(icfes_largo, file = "Icfes_depurada.Rdata", compress = "xz")

Análisis gráfico

Número de personas

Distribución de puntajes

Asociación de puntajes

Unidad de cambio en Y por X