blogs
Saber 11 · Los datos y su limpieza

Ciencia de Datos

Saber 11 · Los datos y su limpieza

Una investigación basada en datos que descubre cómo la pandemia transformó la educación pública en Bogotá y qué nos dicen los números sobre las brechas educativas.

27 jun 2024

6 min

HomeBlogsSaber 11 · Los datos y su limpieza

Las pruebas ICFES son exámenes estandarizados obligatorios en Colombia, siendo la principal la Saber 11 que evalúa competencias en lectura crítica, matemáticas, ciencias naturales, sociales e inglés. Son fundamentales porque constituyen un requisito para graduarse de bachillerato, determinan el acceso a universidades públicas, sirven como criterio para becas, permiten evaluar la calidad educativa de las instituciones y orientan las políticas públicas del sistema educativo nacional

Impacto del cierre de escuelas por COVID-19

Este análisis implica examinar los datos históricos de los resultados de la prueba Saber 11 en los colegios públicos de Bogotá y compararlos con los resultados durante el cierre de las escuelas con el propósito de identificar los cambios y las tendencias que pueden haber ocurrido durante este periodo. Además, se llevará a cabo un análisis comparativo de las diferentes localidades de Bogotá para determinar si existen diferencias significativas en los resultados de la prueba Saber 11 entre los colegios públicos de la ciudad y para finalizar se hará una reflexión sobre cómo la educación remota afectó a los estudiantes de los colegios públicos en Bogotá que son primordialmente los de menores condiciones socioeconómicas y si estos tuvieron acceso o no, a recursos educativos y tecnológicos adecuados durante la pandemia.

Es importante destacar que los cambios mencionados anteriormente se refieren a las diferencias en los puntajes promedio según algunas variables de interés, entre las cuales se incluyen:

  • Ubicación geográfica (localidad donde se encuentra la institución educativa oficial).

  • Estrato socioeconómico de los estudiantes

  • Jornada académica en la que se encuentra el estudiante

  • Disponibilidad o no de un computador en el hogar.

  • Acceso o no a internet en el hogar.

  • Nivel educativo de los padres.

  • Flexibilización de los contenidos curriculares desarrollados, asociados a intensidad horaria, metodologías implementadas y criterios de evaluación.

Seguiremos estas etapas, para la primera etapa analizaremos, importaremos los datos, haremos correciones y revisaremos que todo este bien para poder empezar con lo divertido, es muy normal que en empresas a inicio existan errores, mala organizacion, malas decisiones, información decentralizada, etc. Cosas que iremos arreglando, por ejemplo, para este escenario trabajaremos con txts proporcionados de la base de datos del icfes. Una vez que hagamos los analisis necesarios y las graficas necesarias haremos los entrenamientos, validamos y realizaremos la prediccion con algoritmos de aprendizaje supervizado - y predicciones con algebra linel multiple.

1. Importanción de Pandas.

A mededida que se escribe este analisis iremos importando las librerias (Un conjunto de funciones y herramientas predefinidas que pueden ser importadas y utilizadas en el desarrollo para realizar tareas específicas). Para este paso usaremos pandas para el analisis y manipulacion de datos.

Python
import pandas as pd

1.1 Identificación de datos.

En este proceso analizaremos las variables e importaremos el dataset (archivos.txt) de la base de datos proporcionada del ICFEs, como sabemos los csv tienen separadores para identificar columnas, filas y datos, en este caso si visualizamos alguno de estos archivos tenemos ¬ como separador. Así que no hace falta la conversion aun csv.

Python
import pandas as pd

path = '/content/drive/MyDrive/icfes/'

# Importamos los datos a nuestra variable df

df = pd.read_csv(path+'SB11_20181.TXT', sep='¬', engine='python')

df.head()
ESTU_TIPODOCUMENTOESTU_NACIONALIDADESTU_GENEROESTU_FECHANACIMIENTOPERIODOESTU_CONSECUTIVOESTU_ESTUDIANTEESTU_PAIS_RESIDEESTU_TIENEETNIAESTU_ETNIA...PUNT_INGLESPERCENTIL_INGLESDESEMP_INGLESPUNT_GLOBALPERCENTIL_GLOBALESTU_INSE_INDIVIDUALESTU_NSE_INDIVIDUALESTU_NSE_ESTABLECIMIENTOESTU_ESTADOINVESTIGACIONESTU_PILOPAGA
0TICOLOMBIAF19/07/200020181SB11201810005035ESTUDIANTECOLOMBIANoNaN...4421A-2262054.101344NSE33.0PUBLICARNO
1TICOLOMBIAM03/10/200120181SB11201810005012ESTUDIANTECOLOMBIANoNaN...5845A22633766.990405NSE43.0PUBLICARNO
2TICOLOMBIAF29/06/200020181SB11201810005026ESTUDIANTECOLOMBIANoNaN...325A-2041245.721848NSE23.0PUBLICARNO
3TICOLOMBIAM30/04/200120181SB11201810004998ESTUDIANTECOLOMBIANoNaN...5032A13317051.145124NSE23.0PUBLICARNO
4TICOLOMBIAF06/08/200120181SB11201810005010ESTUDIANTECOLOMBIANoNaN...6250A23186353.365582NSE33.0PUBLICARNO

5 rows × 82 columns

Python
df
ESTU_TIPODOCUMENTOESTU_NACIONALIDADESTU_GENEROESTU_FECHANACIMIENTOPERIODOESTU_CONSECUTIVOESTU_ESTUDIANTEESTU_PAIS_RESIDEESTU_TIENEETNIAESTU_ETNIA...PUNT_INGLESPERCENTIL_INGLESDESEMP_INGLESPUNT_GLOBALPERCENTIL_GLOBALESTU_INSE_INDIVIDUALESTU_NSE_INDIVIDUALESTU_NSE_ESTABLECIMIENTOESTU_ESTADOINVESTIGACIONESTU_PILOPAGA
0TICOLOMBIAF19/07/200020181SB11201810005035ESTUDIANTECOLOMBIANoNaN...4421A-2262054.101344NSE33.0PUBLICARNO
1TICOLOMBIAM03/10/200120181SB11201810005012ESTUDIANTECOLOMBIANoNaN...5845A22633766.990405NSE43.0PUBLICARNO
2TICOLOMBIAF29/06/200020181SB11201810005026ESTUDIANTECOLOMBIANoNaN...325A-2041245.721848NSE23.0PUBLICARNO
3TICOLOMBIAM30/04/200120181SB11201810004998ESTUDIANTECOLOMBIANoNaN...5032A13317051.145124NSE23.0PUBLICARNO
4TICOLOMBIAF06/08/200120181SB11201810005010ESTUDIANTECOLOMBIANoNaN...6250A23186353.365582NSE33.0PUBLICARNO
..................................................................
12522TICOLOMBIAM09/04/200020181SB11201810055305ESTUDIANTECOLOMBIANoNaN...5133A12081371.165216NSE42.0PUBLICARNO
12523TICOLOMBIAF17/12/200120181SB11201810055294ESTUDIANTECOLOMBIASiNaN...4625A-2603555.447884NSE32.0PUBLICARNO
12524TICOLOMBIAM27/03/200020181SB11201810055303ESTUDIANTECOLOMBIANoNaN...261A-2101462.192852NSE32.0PUBLICARNO
12525TICOLOMBIAM18/01/200220181SB11201810055301ESTUDIANTECOLOMBIANoNaN...4421A-2151654.766308NSE32.0PUBLICARNO
12526TICOLOMBIAM04/05/200120181SB11201810055300ESTUDIANTECOLOMBIANoNaN...4218A-2784453.387778NSE32.0PUBLICARNO

12527 rows × 82 columns

Tenemos 82 columnas y 12mil estudiantes, y vimos ejemplos de como se reflejan los datos de los estudiantes, ya nos podemos dar una idea de como manejar las variables categóricas, por ejemplo, ESTU_GENERO, donde utilizaremos One-Hot Encoding, donde se crea una nueva columna binaria (0 o 1) para cada categoría única de la variable.

  • F: Femenino (0)
  • M: Mascuino (1)

Pero sin adelantarnos, sigamos estudiando las variables ya que no se muestran todas.

Python
df.info()
salida
RangeIndex: 12527 entries, 0 to 12526
Data columns (total 82 columns):
 #   Column                         Non-Null Count  Dtype
---  ------                         --------------  -----
 0   ESTU_TIPODOCUMENTO             12527 non-null  object
 1   ESTU_NACIONALIDAD              12527 non-null  object
 2   ESTU_GENERO                    12527 non-null  object
 3   ESTU_FECHANACIMIENTO           12527 non-null  object
 4   PERIODO                        12527 non-null  int64
 5   ESTU_CONSECUTIVO               12527 non-null  object
 6   ESTU_ESTUDIANTE                12527 non-null  object
 7   ESTU_PAIS_RESIDE               12527 non-null  object
 8   ESTU_TIENEETNIA                12526 non-null  object
 9   ESTU_ETNIA                     119 non-null    object
 10  ESTU_DEPTO_RESIDE              12527 non-null  object
 11  ESTU_COD_RESIDE_DEPTO          12527 non-null  int64
 12  ESTU_MCPIO_RESIDE              12527 non-null  object
 13  ESTU_COD_RESIDE_MCPIO          12527 non-null  int64
 14  FAMI_ESTRATOVIVIENDA           12063 non-null  object
 15  FAMI_PERSONASHOGAR             12244 non-null  object
 16  FAMI_CUARTOSHOGAR              12319 non-null  object
 17  FAMI_EDUCACIONPADRE            12094 non-null  object
 18  FAMI_EDUCACIONMADRE            12096 non-null  object
 19  FAMI_TRABAJOLABORPADRE         12273 non-null  object
 20  FAMI_TRABAJOLABORMADRE         12299 non-null  object
 21  FAMI_TIENEINTERNET             12108 non-null  object
 22  FAMI_TIENESERVICIOTV           12083 non-null  object
 23  FAMI_TIENECOMPUTADOR           12347 non-null  object
 24  FAMI_TIENELAVADORA             12354 non-null  object
 25  FAMI_TIENEHORNOMICROOGAS       12347 non-null  object
 26  FAMI_TIENEAUTOMOVIL            12329 non-null  object
 27  FAMI_TIENEMOTOCICLETA          12317 non-null  object
 28  FAMI_TIENECONSOLAVIDEOJUEGOS   12335 non-null  object
 29  FAMI_NUMLIBROS                 12102 non-null  object
 30  FAMI_COMELECHEDERIVADOS        12086 non-null  object
 31  FAMI_COMECARNEPESCADOHUEVO     12073 non-null  object
 32  FAMI_COMECEREALFRUTOSLEGUMBRE  12076 non-null  object
 33  FAMI_SITUACIONECONOMICA        12328 non-null  object
 34  ESTU_DEDICACIONLECTURADIARIA   12091 non-null  object
 35  ESTU_DEDICACIONINTERNET        12069 non-null  object
 36  ESTU_HORASSEMANATRABAJA        12326 non-null  object
 37  ESTU_TIPOREMUNERACION          12273 non-null  object
 38  COLE_CODIGO_ICFES              12527 non-null  int64
 39  COLE_COD_DANE_ESTABLECIMIENTO  12527 non-null  int64
 40  COLE_NOMBRE_ESTABLECIMIENTO    12527 non-null  object
 41  COLE_GENERO                    12527 non-null  object
 42  COLE_NATURALEZA                12527 non-null  object
 43  COLE_CALENDARIO                12527 non-null  object
 44  COLE_BILINGUE                  11123 non-null  object
 45  COLE_CARACTER                  12403 non-null  object
 46  COLE_COD_DANE_SEDE             12527 non-null  int64
 47  COLE_NOMBRE_SEDE               12527 non-null  object
 48  COLE_SEDE_PRINCIPAL            12527 non-null  object
 49  COLE_AREA_UBICACION            12527 non-null  object
 50  COLE_JORNADA                   12527 non-null  object
 51  COLE_COD_MCPIO_UBICACION       12527 non-null  int64
 52  COLE_MCPIO_UBICACION           12527 non-null  object
 53  COLE_COD_DEPTO_UBICACION       12527 non-null  int64
 54  COLE_DEPTO_UBICACION           12527 non-null  object
 55  ESTU_PRIVADO_LIBERTAD          12527 non-null  object
 56  ESTU_COD_MCPIO_PRESENTACION    12527 non-null  int64
 57  ESTU_MCPIO_PRESENTACION        12527 non-null  object
 58  ESTU_DEPTO_PRESENTACION        12527 non-null  object
 59  ESTU_COD_DEPTO_PRESENTACION    12527 non-null  int64
 60  PUNT_LECTURA_CRITICA           12527 non-null  int64
 61  PERCENTIL_LECTURA_CRITICA      12527 non-null  int64
 62  DESEMP_LECTURA_CRITICA         12527 non-null  int64
 63  PUNT_MATEMATICAS               12527 non-null  int64
 64  PERCENTIL_MATEMATICAS          12527 non-null  int64
 65  DESEMP_MATEMATICAS             12527 non-null  int64
 66  PUNT_C_NATURALES               12527 non-null  int64
 67  PERCENTIL_C_NATURALES          12527 non-null  int64
 68  DESEMP_C_NATURALES             12527 non-null  int64
 69  PUNT_SOCIALES_CIUDADANAS       12527 non-null  int64
 70  PERCENTIL_SOCIALES_CIUDADANAS  12527 non-null  int64
 71  DESEMP_SOCIALES_CIUDADANAS     12527 non-null  int64
 72  PUNT_INGLES                    12527 non-null  int64
 73  PERCENTIL_INGLES               12527 non-null  int64
 74  DESEMP_INGLES                  12527 non-null  object
 75  PUNT_GLOBAL                    12527 non-null  int64
 76  PERCENTIL_GLOBAL               12527 non-null  int64
 77  ESTU_INSE_INDIVIDUAL           12268 non-null  float64
 78  ESTU_NSE_INDIVIDUAL            12268 non-null  object
 79  ESTU_NSE_ESTABLECIMIENTO       12430 non-null  float64
 80  ESTU_ESTADOINVESTIGACION       12527 non-null  object
 81  ESTU_PILOPAGA                  12527 non-null  object
 dtypes: float64(2), int64(26), object(54)
 memory usage: 7.8+ MB

1.2 Categorización de variables por grupos

Categoría 1: Información personal del estudiante

  • ESTU_TIPODOCUMENTO
  • ESTU_NACIONALIDAD
  • ESTU_GENERO
  • ESTU_FECHANACIMIENTO
  • ESTU_CONSECUTIVO
  • ESTU_ESTUDIANTE
  • ESTU_PAIS_RESIDE
  • ESTU_TIENEETNIA
  • ESTU_ETNIA
  • ESTU_DEPTO_RESIDE
  • ESTU_COD_RESIDE_DEPTO
  • ESTU_MCPIO_RESIDE
  • ESTU_COD_RESIDE_MCPIO
  • ESTU_PRIVADO_LIBERTAD

Categoría 2: Información familiar y socioeconómica

  • FAMI_ESTRATOVIVIENDA
  • FAMI_PERSONASHOGAR
  • FAMI_CUARTOSHOGAR
  • FAMI_EDUCACIONPADRE
  • FAMI_EDUCACIONMADRE
  • FAMI_TRABAJOLABORPADRE
  • FAMI_TRABAJOLABORMADRE
  • FAMI_TIENEINTERNET
  • FAMI_TIENESERVICIOTV
  • FAMI_TIENECOMPUTADOR
  • FAMI_TIENELAVADORA
  • FAMI_TIENEHORNOMICROOGAS
  • FAMI_TIENEAUTOMOVIL
  • FAMI_TIENEMOTOCICLETA
  • FAMI_TIENECONSOLAVIDEOJUEGOS
  • FAMI_NUMLIBROS
  • FAMI_COMELECHEDERIVADOS
  • FAMI_COMECARNEPESCADOHUEVO
  • FAMI_COMECEREALFRUTOSLEGUMBRE
  • FAMI_SITUACIONECONOMICA
  • ESTU_INSE_INDIVIDUAL
  • ESTU_NSE_INDIVIDUAL
  • ESTU_NSE_ESTABLECIMIENTO

Categoría 3: Información académica y laboral del estudiante

  • ESTU_DEDICACIONLECTURADIARIA
  • ESTU_DEDICACIONINTERNET
  • ESTU_HORASSEMANATRABAJA
  • ESTU_TIPOREMUNERACION
  • ESTU_ESTADOINVESTIGACION
  • ESTU_PILOPAGA

Categoría 4: Información del colegio

  • COLE_CODIGO_ICFES
  • COLE_COD_DANE_ESTABLECIMIENTO
  • COLE_NOMBRE_ESTABLECIMIENTO
  • COLE_GENERO
  • COLE_NATURALEZA
  • COLE_CALENDARIO
  • COLE_BILINGUE
  • COLE_CARACTER
  • COLE_COD_DANE_SEDE
  • COLE_NOMBRE_SEDE
  • COLE_SEDE_PRINCIPAL
  • COLE_AREA_UBICACION
  • COLE_JORNADA
  • COLE_COD_MCPIO_UBICACION
  • COLE_MCPIO_UBICACION
  • COLE_COD_DEPTO_UBICACION
  • COLE_DEPTO_UBICACION

Categoría 5: Información de la presentación del examen

  • PERIODO
  • ESTU_COD_MCPIO_PRESENTACION
  • ESTU_MCPIO_PRESENTACION
  • ESTU_DEPTO_PRESENTACION
  • ESTU_COD_DEPTO_PRESENTACION

Categoría 6: Resultados de la prueba Saber 11

  • PUNT_LECTURA_CRITICA
  • PERCENTIL_LECTURA_CRITICA
  • DESEMP_LECTURA_CRITICA
  • PUNT_MATEMATICAS
  • PERCENTIL_MATEMATICAS
  • DESEMP_MATEMATICAS
  • PUNT_C_NATURALES
  • PERCENTIL_C_NATURALES
  • DESEMP_C_NATURALES
  • PUNT_SOCIALES_CIUDADANAS
  • PERCENTIL_SOCIALES_CIUDADANAS
  • DESEMP_SOCIALES_CIUDADANAS
  • PUNT_INGLES
  • PERCENTIL_INGLES
  • DESEMP_INGLES
  • PUNT_GLOBAL
  • PERCENTIL_GLOBAL
Python
# Consultamos datos estadisticos generales: numeros de elementos, media, desviación, valor minimo, porcentajes
df.describe().transpose()
countmeanstdmin25%50%75%max
PERIODO12527.02.018100e+040.000000e+002.018100e+042.018100e+042.018100e+042.018100e+042.018100e+04
ESTU_COD_RESIDE_DEPTO12527.04.790053e+013.109914e+015.000000e+001.100000e+017.600000e+017.600000e+017.600000e+01
ESTU_COD_RESIDE_MCPIO12527.04.796111e+043.111927e+045.001000e+031.100100e+047.600100e+047.600100e+047.689500e+04
COLE_CODIGO_ICFES12527.08.921620e+041.367315e+051.820000e+021.934900e+044.644100e+041.061200e+057.146340e+05
COLE_COD_DANE_ESTABLECIMIENTO12527.03.577158e+114.197414e+101.765200e+113.118480e+113.760010e+113.760010e+114.768921e+11
COLE_COD_DANE_SEDE12527.03.576174e+114.195383e+101.765200e+113.118480e+113.760010e+113.760010e+114.768921e+11
COLE_COD_MCPIO_UBICACION12527.04.849935e+043.063171e+045.001000e+031.100100e+047.600100e+047.600100e+047.689200e+04
COLE_COD_DEPTO_UBICACION12527.04.839650e+013.064030e+015.000000e+001.100000e+017.600000e+017.600000e+017.600000e+01
ESTU_COD_MCPIO_PRESENTACION12527.04.790827e+043.118285e+045.001000e+031.100100e+047.600100e+047.600100e+047.683400e+04
ESTU_COD_DEPTO_PRESENTACION12527.04.785280e+013.117389e+015.000000e+001.100000e+017.600000e+017.600000e+017.600000e+01
PUNT_LECTURA_CRITICA12527.06.426591e+019.022561e+002.900000e+015.900000e+016.500000e+017.100000e+011.000000e+02
PERCENTIL_LECTURA_CRITICA12527.06.320029e+012.453513e+011.000000e+004.500000e+016.600000e+018.400000e+011.000000e+02
DESEMP_LECTURA_CRITICA12527.03.409675e+006.386825e-011.000000e+003.000000e+003.000000e+004.000000e+004.000000e+00
PUNT_MATEMATICAS12527.06.379428e+011.189882e+012.100000e+015.600000e+016.500000e+017.200000e+011.000000e+02
PERCENTIL_MATEMATICAS12527.06.397637e+012.402950e+011.000000e+004.700000e+016.700000e+018.400000e+011.000000e+02
DESEMP_MATEMATICAS12527.03.151034e+006.811860e-011.000000e+003.000000e+003.000000e+004.000000e+004.000000e+00
PUNT_C_NATURALES12527.06.280267e+011.063723e+010.000000e+005.600000e+016.400000e+017.000000e+011.000000e+02
PERCENTIL_C_NATURALES12527.06.420212e+012.384049e+011.000000e+004.700000e+016.700000e+018.400000e+011.000000e+02
DESEMP_C_NATURALES12527.02.971981e+007.347994e-011.000000e+003.000000e+003.000000e+003.000000e+004.000000e+00
PUNT_SOCIALES_CIUDADANAS12527.06.215742e+011.125163e+012.200000e+015.500000e+016.300000e+017.000000e+011.000000e+02
PERCENTIL_SOCIALES_CIUDADANAS12527.06.310178e+012.483422e+011.000000e+004.500000e+016.600000e+018.400000e+011.000000e+02
DESEMP_SOCIALES_CIUDADANAS12527.02.936298e+007.899843e-011.000000e+002.000000e+003.000000e+003.000000e+004.000000e+00
PUNT_INGLES12527.07.050802e+011.388719e+010.000000e+006.000000e+017.300000e+018.200000e+011.000000e+02
PERCENTIL_INGLES12527.06.484953e+012.306537e+011.000000e+004.800000e+016.700000e+018.400000e+011.000000e+02
PUNT_GLOBAL12527.03.190647e+024.907322e+011.370000e+022.870000e+023.260000e+023.550000e+024.750000e+02
PERCENTIL_GLOBAL12527.06.451217e+012.340080e+011.000000e+004.800000e+016.700000e+018.400000e+011.000000e+02
ESTU_INSE_INDIVIDUAL12268.06.585032e+018.564458e+002.159309e+015.966838e+016.641709e+017.210113e+018.358035e+01
ESTU_NSE_ESTABLECIMIENTO12430.03.272164e+005.884799e-011.000000e+003.000000e+003.000000e+004.000000e+004.000000e+00

Un resumen de las estadísticas descriptivas de las variables cuantitativas del año 2018

  1. PERIODO:

    • Todos los valores son iguales a 20181, lo que indica que los datos corresponden al mismo periodo.
  2. ESTU_COD_RESIDE_MCPIO, COLE_COD_MCPIO_UBICACION y ESTU_COD_MCPIO_PRESENTACION:

    • El 50% de los datos están entre los códigos 11001 (Bogotá) y 76001 (Cali).
  3. Puntajes y percentiles en las áreas evaluadas (PUNT_LECTURA_CRITICA, PUNT_MATEMATICAS, PUNT_C_NATURALES, PUNT_SOCIALES_CIUDADANAS, PUNT_INGLES):

    • Los puntajes promedio varían entre 62 y 70 puntos, con desviaciones estándar entre 9 y 13 puntos.
    • Los percentiles promedio están alrededor de 63, con desviaciones estándar cercanas a 24.
  4. Desempeños en las áreas evaluadas (DESEMP_LECTURA_CRITICA, DESEMP_MATEMATICAS, DESEMP_C_NATURALES, DESEMP_SOCIALES_CIUDADANAS):

    • Los desempeños promedio varían entre 2.9 y 3.4, con desviaciones estándar pequeñas (menores a 1).
  5. PUNT_GLOBAL y PERCENTIL_GLOBAL:

    • El puntaje global promedio es de 319 puntos, con una desviación estándar de 49 puntos.
    • El percentil global promedio es de 64.5, con una desviación estándar de 23.4.
  6. ESTU_INSE_INDIVIDUAL:

    • El índice socioeconómico individual promedio es de 65.85, con una desviación estándar de 8.56.
    • El 50% de los estudiantes tienen un índice entre 59.67 y 72.10.
  7. ESTU_NSE_ESTABLECIMIENTO:

    • El nivel socioeconómico promedio de los establecimientos es de 3.27, con una desviación estándar pequeña (0.59).
    • La mayoría de los establecimientos se encuentran en los niveles socioeconómicos 3 y 4.
Python
# Consultamos numeros de filas y columnas, para estar seguros.
df.shape
salida
(12527, 82)
Python
# Consultamos si tenemos celdas con valores sin valores
null_counts = df.isnull().sum()
null_counts
0
ESTU_TIPODOCUMENTO0
ESTU_NACIONALIDAD0
ESTU_GENERO0
ESTU_FECHANACIMIENTO0
PERIODO0
......
ESTU_INSE_INDIVIDUAL259
ESTU_NSE_INDIVIDUAL259
ESTU_NSE_ESTABLECIMIENTO97
ESTU_ESTADOINVESTIGACION0
ESTU_PILOPAGA0

82 rows × 1 columns

Python
# Filtramos las variables que tengan mas de un valor null con datos > 0
null_counts[null_counts > 0]
0
ESTU_TIENEETNIA1
ESTU_ETNIA12408
FAMI_ESTRATOVIVIENDA464
FAMI_PERSONASHOGAR283
FAMI_CUARTOSHOGAR208
FAMI_EDUCACIONPADRE433
FAMI_EDUCACIONMADRE431
FAMI_TRABAJOLABORPADRE254
FAMI_TRABAJOLABORMADRE228
FAMI_TIENEINTERNET419
FAMI_TIENESERVICIOTV444
FAMI_TIENECOMPUTADOR180
FAMI_TIENELAVADORA173
FAMI_TIENEHORNOMICROOGAS180
FAMI_TIENEAUTOMOVIL198
FAMI_TIENEMOTOCICLETA210
FAMI_TIENECONSOLAVIDEOJUEGOS192
FAMI_NUMLIBROS425
FAMI_COMELECHEDERIVADOS441
FAMI_COMECARNEPESCADOHUEVO454
FAMI_COMECEREALFRUTOSLEGUMBRE451
FAMI_SITUACIONECONOMICA199
ESTU_DEDICACIONLECTURADIARIA436
ESTU_DEDICACIONINTERNET458
ESTU_HORASSEMANATRABAJA201
ESTU_TIPOREMUNERACION254
COLE_BILINGUE1404
COLE_CARACTER124
ESTU_INSE_INDIVIDUAL259
ESTU_NSE_INDIVIDUAL259
ESTU_NSE_ESTABLECIMIENTO97

Estos datos con valores en null son de estudiantes que no han respondido a esas preguntas (Por razones desconocidas), es importante tener esto en cuenta.

Ahora tratemos de ver las columnas, así en caso de volver no tenemos que ir viendo cada consulta o nos iremos perdiendo a la hora de buscar alguna variable al programar.

Python
df.columns
salida
Index(['ESTU_TIPODOCUMENTO', 'ESTU_NACIONALIDAD', 'ESTU_GENERO',
           'ESTU_FECHANACIMIENTO', 'PERIODO', 'ESTU_CONSECUTIVO',
           'ESTU_ESTUDIANTE', 'ESTU_PAIS_RESIDE', 'ESTU_TIENEETNIA', 'ESTU_ETNIA',
           'ESTU_DEPTO_RESIDE', 'ESTU_COD_RESIDE_DEPTO', 'ESTU_MCPIO_RESIDE',
           'ESTU_COD_RESIDE_MCPIO', 'FAMI_ESTRATOVIVIENDA', 'FAMI_PERSONASHOGAR',
           'FAMI_CUARTOSHOGAR', 'FAMI_EDUCACIONPADRE', 'FAMI_EDUCACIONMADRE',
           'FAMI_TRABAJOLABORPADRE', 'FAMI_TRABAJOLABORMADRE',
           'FAMI_TIENEINTERNET', 'FAMI_TIENESERVICIOTV', 'FAMI_TIENECOMPUTADOR',
           'FAMI_TIENELAVADORA', 'FAMI_TIENEHORNOMICROOGAS', 'FAMI_TIENEAUTOMOVIL',
           'FAMI_TIENEMOTOCICLETA', 'FAMI_TIENECONSOLAVIDEOJUEGOS',
           'FAMI_NUMLIBROS', 'FAMI_COMELECHEDERIVADOS',
           'FAMI_COMECARNEPESCADOHUEVO', 'FAMI_COMECEREALFRUTOSLEGUMBRE',
           'FAMI_SITUACIONECONOMICA', 'ESTU_DEDICACIONLECTURADIARIA',
           'ESTU_DEDICACIONINTERNET', 'ESTU_HORASSEMANATRABAJA',
           'ESTU_TIPOREMUNERACION', 'COLE_CODIGO_ICFES',
           'COLE_COD_DANE_ESTABLECIMIENTO', 'COLE_NOMBRE_ESTABLECIMIENTO',
           'COLE_GENERO', 'COLE_NATURALEZA', 'COLE_CALENDARIO', 'COLE_BILINGUE',
           'COLE_CARACTER', 'COLE_COD_DANE_SEDE', 'COLE_NOMBRE_SEDE',
           'COLE_SEDE_PRINCIPAL', 'COLE_AREA_UBICACION', 'COLE_JORNADA',
           'COLE_COD_MCPIO_UBICACION', 'COLE_MCPIO_UBICACION',
           'COLE_COD_DEPTO_UBICACION', 'COLE_DEPTO_UBICACION',
           'ESTU_PRIVADO_LIBERTAD', 'ESTU_COD_MCPIO_PRESENTACION',
           'ESTU_MCPIO_PRESENTACION', 'ESTU_DEPTO_PRESENTACION',
           'ESTU_COD_DEPTO_PRESENTACION', 'PUNT_LECTURA_CRITICA',
           'PERCENTIL_LECTURA_CRITICA', 'DESEMP_LECTURA_CRITICA',
           'PUNT_MATEMATICAS', 'PERCENTIL_MATEMATICAS', 'DESEMP_MATEMATICAS',
           'PUNT_C_NATURALES', 'PERCENTIL_C_NATURALES', 'DESEMP_C_NATURALES',
           'PUNT_SOCIALES_CIUDADANAS', 'PERCENTIL_SOCIALES_CIUDADANAS',
           'DESEMP_SOCIALES_CIUDADANAS', 'PUNT_INGLES', 'PERCENTIL_INGLES',
           'DESEMP_INGLES', 'PUNT_GLOBAL', 'PERCENTIL_GLOBAL',
           'ESTU_INSE_INDIVIDUAL', 'ESTU_NSE_INDIVIDUAL',
           'ESTU_NSE_ESTABLECIMIENTO', 'ESTU_ESTADOINVESTIGACION',
           'ESTU_PILOPAGA'],
          dtype='object')
Python
df.dtypes
0
ESTU_TIPODOCUMENTOobject
ESTU_NACIONALIDADobject
ESTU_GENEROobject
ESTU_FECHANACIMIENTOobject
PERIODOint64
......
ESTU_INSE_INDIVIDUALfloat64
ESTU_NSE_INDIVIDUALobject
ESTU_NSE_ESTABLECIMIENTOfloat64
ESTU_ESTADOINVESTIGACIONobject
ESTU_PILOPAGAobject

82 rows × 1 columns

Variables cuantitativas

Son aquellas que representan una cantidad numérica o medida. Estas variables pueden ser discretas o continuas.

  • Variables cuantitativas discretas: Son aquellas que toman valores numéricos enteros y se pueden contar, como el número de personas en una familia o en este caso el periodo en el que se encuentra el estudiante.
  • Variables cuantitativas continuas: Son aquellas que pueden tomar cualquier valor dentro de un rango, y generalmente se miden en una escala continua, como la altura de una persona o el peso de un objeto.

Variables cualitativas

Son aquellas que representan cualidades o características que no se pueden medir numéricamente. Estas variables se dividen en dos subtipos:

  • Variables cualitativas nominales: Son aquellas que representan categorías sin un orden intrínseco, como el color de los ojos o la marca de un automóvil.
  • Variables cualitativas ordinales: Son aquellas que representan categorías con un orden natural o jerarquía, como el nivel de educación (primaria, secundaria, universitaria).

Teniendo estas definiciones importantes para nuestro analisis prosigamos a categorizar las variables que usaremos.

  1. Variables cuantitativas:

    • Variables cuantitativas continuas:

      • Puntajes promedio en las áreas evaluadas (PUNT_LECTURA_CRITICA, PUNT_MATEMATICAS, PUNT_C_NATURALES, PUNT_SOCIALES_CIUDADANAS, PUNT_INGLES)
      • Puntaje global (PUNT_GLOBAL)
      • Índice socioeconómico del evaluado (ESTU_INSE_INDIVIDUAL)
    • Variables cuantitativas discretas:

      • Periodo (PERIODO)
      • Código DANE del municipio de ubicación de la sede (COLE_COD_MCPIO_UBICACION)
      • Código DANE del departamento de ubicación de la sede (COLE_COD_DEPTO_UBICACION)
  2. Variables cualitativas:

    • Variables cualitativas nominales:

      • Municipio de ubicación de la sede (COLE_MCPIO_UBICACION)
      • Departamento de ubicación de la sede (COLE_DEPTO_UBICACION)
      • Naturaleza del establecimiento (COLE_NATURALEZA)
      • Jornada de la sede (COLE_JORNADA)
      • Género del evaluado (ESTU_GENERO)
      • Disponibilidad de computador en el hogar (FAMI_TIENECOMPUTADOR)
      • Acceso a internet en el hogar (FAMI_TIENEINTERNET)
    • Variables cualitativas ordinales:

      • Estrato socioeconómico de la vivienda (FAMI_ESTRATOVIVIENDA)
      • Nivel educativo más alto alcanzado por el padre (FAMI_EDUCACIONPADRE)
      • Nivel educativo más alto alcanzado por la madre (FAMI_EDUCACIONMADRE)
      • Nivel socioeconómico del evaluado (ESTU_NSE_INDIVIDUAL)

Como resumen tenemos información familiar, socioeconómica, academica (Trabajos de sus padres, cosas basicas materiales, titulaciones o nivel academico en el que petenezcan como su estrato) y laboral del estudiante como información personal, y detalle de como le fue en el icfes, ademas de saber donde estudia y presento el examen. Analizamos cada variable, sacamos las importantes, las categorizamos y sabemos que son, para que sirven y nos damos una idea de que podriamos hacer con ellas.

1.3 Importacion de los datasets

Como vimos al principio importamos un solo dataset SB11_20181.TXT para explorar sus columnas, para comprobar que todo este bien miremos el periodo.

Python
df['PERIODO']
PERIODO
020181
120181
220181
320181
420181
......
1252220181
1252320181
1252420181
1252520181
1252620181

12527 rows × 1 columns

De momento esta todo bien, coincide con periodo y año con el archivo, asi que es hora de importar los demas años y guardarlos todos en una sola variable, si mantenemos variables separadas con datasets sera mucho mas complejo por lo que iremos trabajando y filtrando por la columna PERIODO.

Python
import csv
import io

def read_csv_replace_null(file, encoding):
with open(file, 'r', encoding=encoding, errors='replace') as f:
content = f.read().replace('', '') # Reemplazar bytes nulos con una cadena vacía
return pd.read_csv(io.StringIO(content), sep='¬', engine='python', quoting=csv.QUOTE_NONE, on_bad_lines='skip')
Python
# Lista de nombres de archivos

files = ['SB11_20181.TXT', 'SB11_20182.TXT', 'SB11_20191_.txt', 'SB11_20192.TXT', 'SB11_20201.txt', 'SB11_20202.txt', 'SB11_20211.txt', 'SB11_20212.txt', 'SB11_20221.TXT', 'SB11_20231.TXT', 'SB11_20232.TXT']

# Comprensión de lista para leer todos los archivos y almacenarlos en una lista

# de DataFrames en uno solo, si el archivo es SB11_20222.TXT utilizamos las correciones correspondientes.

# el 2 if, es porque SB11*20191*.txt usa | en vez de ¬ para separar los datos, ademas de ser en minusculas las columnas...

saber11 = pd.concat(
[read_csv_replace_null(path+file, 'latin-1') if file == 'SB11_20222.TXT' else
pd.read_csv(path+file, sep='|', engine='python').rename(columns=str.upper) if file == 'SB11_20191_.txt' else
pd.read_csv(path+file, sep='¬', engine='python') for file in files],
ignore_index=True
)

1.4 Analizando y sanatizando datos.

Comprobemos que todo este bien, analizando cuantas columnas y alumnos tenemos (Antes habia 12mil), y si hay mas periodos, para poder trabajar.

Python
saber11.shape

(2775282, 92)

Como vemos, tenemos 2m de datos con los que podemos trabajar, y 92 columnas, por lo que hay columnas nuevas añadidas, y unos doscientos cincuenta y cinco millones trescientos veinticinco mil novecientos cuarenta y cuatro de datos.. Así que debemos ver cuales son.

Python
saber11.columns
salida
Index(['ESTU_TIPODOCUMENTO', 'ESTU_NACIONALIDAD', 'ESTU_GENERO',
           'ESTU_FECHANACIMIENTO', 'PERIODO', 'ESTU_CONSECUTIVO',
           'ESTU_ESTUDIANTE', 'ESTU_PAIS_RESIDE', 'ESTU_TIENEETNIA', 'ESTU_ETNIA',
           'ESTU_DEPTO_RESIDE', 'ESTU_COD_RESIDE_DEPTO', 'ESTU_MCPIO_RESIDE',
           'ESTU_COD_RESIDE_MCPIO', 'FAMI_ESTRATOVIVIENDA', 'FAMI_PERSONASHOGAR',
           'FAMI_CUARTOSHOGAR', 'FAMI_EDUCACIONPADRE', 'FAMI_EDUCACIONMADRE',
           'FAMI_TRABAJOLABORPADRE', 'FAMI_TRABAJOLABORMADRE',
           'FAMI_TIENEINTERNET', 'FAMI_TIENESERVICIOTV', 'FAMI_TIENECOMPUTADOR',
           'FAMI_TIENELAVADORA', 'FAMI_TIENEHORNOMICROOGAS', 'FAMI_TIENEAUTOMOVIL',
           'FAMI_TIENEMOTOCICLETA', 'FAMI_TIENECONSOLAVIDEOJUEGOS',
           'FAMI_NUMLIBROS', 'FAMI_COMELECHEDERIVADOS',
           'FAMI_COMECARNEPESCADOHUEVO', 'FAMI_COMECEREALFRUTOSLEGUMBRE',
           'FAMI_SITUACIONECONOMICA', 'ESTU_DEDICACIONLECTURADIARIA',
           'ESTU_DEDICACIONINTERNET', 'ESTU_HORASSEMANATRABAJA',
           'ESTU_TIPOREMUNERACION', 'COLE_CODIGO_ICFES',
           'COLE_COD_DANE_ESTABLECIMIENTO', 'COLE_NOMBRE_ESTABLECIMIENTO',
           'COLE_GENERO', 'COLE_NATURALEZA', 'COLE_CALENDARIO', 'COLE_BILINGUE',
           'COLE_CARACTER', 'COLE_COD_DANE_SEDE', 'COLE_NOMBRE_SEDE',
           'COLE_SEDE_PRINCIPAL', 'COLE_AREA_UBICACION', 'COLE_JORNADA',
           'COLE_COD_MCPIO_UBICACION', 'COLE_MCPIO_UBICACION',
           'COLE_COD_DEPTO_UBICACION', 'COLE_DEPTO_UBICACION',
           'ESTU_PRIVADO_LIBERTAD', 'ESTU_COD_MCPIO_PRESENTACION',
           'ESTU_MCPIO_PRESENTACION', 'ESTU_DEPTO_PRESENTACION',
           'ESTU_COD_DEPTO_PRESENTACION', 'PUNT_LECTURA_CRITICA',
           'PERCENTIL_LECTURA_CRITICA', 'DESEMP_LECTURA_CRITICA',
           'PUNT_MATEMATICAS', 'PERCENTIL_MATEMATICAS', 'DESEMP_MATEMATICAS',
           'PUNT_C_NATURALES', 'PERCENTIL_C_NATURALES', 'DESEMP_C_NATURALES',
           'PUNT_SOCIALES_CIUDADANAS', 'PERCENTIL_SOCIALES_CIUDADANAS',
           'DESEMP_SOCIALES_CIUDADANAS', 'PUNT_INGLES', 'PERCENTIL_INGLES',
           'DESEMP_INGLES', 'PUNT_GLOBAL', 'PERCENTIL_GLOBAL',
           'ESTU_INSE_INDIVIDUAL', 'ESTU_NSE_INDIVIDUAL',
           'ESTU_NSE_ESTABLECIMIENTO', 'ESTU_ESTADOINVESTIGACION', 'ESTU_PILOPAGA',
           'ESTU_LIMITA_MOTRIZ', 'ESTU_GENERACION-E', 'ESTU_GENERACIONE',
           'PERCENTIL_ESPECIAL_GLOBAL', 'ESTU_AGREGADO', 'ESTU_PRESENTACIONSABADO',
           'SEED_CODIGOMEN', 'SEED_NOMBRE', 'ESTU_LENGUANATIVA',
           'ESTU_GENERACION'],
          dtype='object')

Estas serias las nuevas columnas

  1. ESTU_GENERACION-E
  2. ESTU_GENERACIONE
  3. PERCENTIL_ESPECIAL_GLOBAL
  4. ESTU_AGREGADO
  5. ESTU_PRESENTACIONSABADO
  6. SEED_CODIGOMEN
  7. SEED_NOMBRE
  8. ESTU_LENGUANATIVA
  9. ESTU_GENERACION

Las iremos ignorando en este analisis ya que no aportan tanto, ademas debemos tener encuenta los resultados en cada año no podemos ir añadiendo columnas nuevas, sin saber que en los anteriores años estas preguntas no estan respondidas por lo que habran muchas respuestas en NULL (sin respuesta).

Python
# Consultamos si tenemos celdas con valores sin valores

null_counts = saber11.isnull().sum()
null_counts[null_counts > 0]
0
ESTU_GENERO219
ESTU_TIENEETNIA570590
ESTU_ETNIA2700179
ESTU_DEPTO_RESIDE1383
ESTU_COD_RESIDE_DEPTO1383
ESTU_MCPIO_RESIDE1383
ESTU_COD_RESIDE_MCPIO1383
FAMI_ESTRATOVIVIENDA175075
FAMI_PERSONASHOGAR98623
FAMI_CUARTOSHOGAR103634
FAMI_EDUCACIONPADRE153482
FAMI_EDUCACIONMADRE153885
FAMI_TRABAJOLABORPADRE111377
FAMI_TRABAJOLABORMADRE106420
FAMI_TIENEINTERNET156095
FAMI_TIENESERVICIOTV162269
FAMI_TIENECOMPUTADOR107012
FAMI_TIENELAVADORA102971
FAMI_TIENEHORNOMICROOGAS106871
FAMI_TIENEAUTOMOVIL109584
FAMI_TIENEMOTOCICLETA105170
FAMI_TIENECONSOLAVIDEOJUEGOS109449
FAMI_NUMLIBROS206262
FAMI_COMELECHEDERIVADOS179782
FAMI_COMECARNEPESCADOHUEVO163752
FAMI_COMECEREALFRUTOSLEGUMBRE175246
FAMI_SITUACIONECONOMICA108257
ESTU_DEDICACIONLECTURADIARIA159984
ESTU_DEDICACIONINTERNET165055
ESTU_HORASSEMANATRABAJA104407
ESTU_TIPOREMUNERACION109694
COLE_BILINGUE461550
COLE_CARACTER85283
ESTU_COD_MCPIO_PRESENTACION208
ESTU_MCPIO_PRESENTACION208
ESTU_DEPTO_PRESENTACION208
ESTU_COD_DEPTO_PRESENTACION208
PUNT_INGLES6843
PERCENTIL_INGLES6433
DESEMP_INGLES6433
PERCENTIL_GLOBAL6488
ESTU_INSE_INDIVIDUAL113465
ESTU_NSE_INDIVIDUAL113465
ESTU_NSE_ESTABLECIMIENTO16435
ESTU_PILOPAGA2762755
ESTU_LIMITA_MOTRIZ2775281
ESTU_GENERACION-E625850
ESTU_GENERACIONE2754199
PERCENTIL_ESPECIAL_GLOBAL2716195
ESTU_AGREGADO2762423
ESTU_PRESENTACIONSABADO2211850
SEED_CODIGOMEN2762578
SEED_NOMBRE2762578
ESTU_LENGUANATIVA2765972
ESTU_GENERACION2224133
Python
saber11.describe().transpose()
countmeanstdmin25%50%75%max
PERIODO2775282.02.020557e+041.788081e+012.018100e+042.019400e+042.020400e+042.021400e+042.023400e+04
ESTU_COD_RESIDE_DEPTO2773899.04.028716e+018.555583e+025.000000e+001.100000e+012.300000e+015.400000e+019.999900e+04
ESTU_COD_RESIDE_MCPIO2773899.03.321133e+042.664617e+045.001000e+031.100100e+042.300100e+045.424500e+049.999900e+04
COLE_CODIGO_ICFES2775282.02.500845e+052.706402e+051.800000e+015.244900e+041.262010e+054.317340e+058.152660e+05
COLE_COD_DANE_ESTABLECIMIENTO2775282.02.073891e+119.406685e+101.050010e+111.180010e+111.760010e+113.080010e+118.548740e+11
COLE_COD_DANE_SEDE2775282.02.078808e+119.462532e+101.050010e+111.187530e+111.760010e+113.080010e+118.548740e+11
COLE_COD_MCPIO_UBICACION2775282.03.322695e+042.661775e+045.001000e+031.100100e+042.300100e+045.423900e+049.977300e+04
COLE_COD_DEPTO_UBICACION2775282.03.299041e+012.659654e+015.000000e+001.100000e+012.300000e+015.400000e+019.900000e+01
ESTU_COD_MCPIO_PRESENTACION2775074.03.319458e+042.668342e+045.001000e+031.100100e+042.300100e+045.417200e+049.977300e+04
ESTU_COD_DEPTO_PRESENTACION2775074.03.297709e+012.666027e+015.000000e+001.100000e+012.300000e+015.400000e+019.900000e+01
PUNT_LECTURA_CRITICA2775282.05.272982e+011.053381e+010.000000e+004.500000e+015.300000e+016.000000e+011.000000e+02
PERCENTIL_LECTURA_CRITICA2775282.05.006827e+012.896852e+011.000000e+002.500000e+015.000000e+017.500000e+011.000000e+02
DESEMP_LECTURA_CRITICA2775282.02.649610e+007.512747e-011.000000e+002.000000e+003.000000e+003.000000e+004.000000e+00
PUNT_MATEMATICAS2775282.05.085867e+011.214063e+010.000000e+004.200000e+015.100000e+015.900000e+011.000000e+02
PERCENTIL_MATEMATICAS2775282.05.010526e+012.895552e+011.000000e+002.500000e+015.000000e+017.500000e+011.000000e+02
DESEMP_MATEMATICAS2775282.02.455762e+007.551350e-011.000000e+002.000000e+003.000000e+003.000000e+004.000000e+00
PUNT_C_NATURALES2775282.04.907280e+011.066725e+010.000000e+004.100000e+014.800000e+015.700000e+011.000000e+02
PERCENTIL_C_NATURALES2775282.05.014289e+012.893142e+011.000000e+002.500000e+015.000000e+017.500000e+011.000000e+02
DESEMP_C_NATURALES2775282.02.070502e+007.646729e-011.000000e+002.000000e+002.000000e+003.000000e+004.000000e+00
PUNT_SOCIALES_CIUDADANAS2775282.04.787349e+011.216655e+010.000000e+003.800000e+014.700000e+015.700000e+011.000000e+02
PERCENTIL_SOCIALES_CIUDADANAS2775282.05.014310e+012.892459e+011.000000e+002.500000e+015.000000e+017.500000e+011.000000e+02
DESEMP_SOCIALES_CIUDADANAS2775282.02.001436e+008.346854e-011.000000e+001.000000e+002.000000e+003.000000e+004.000000e+00
PUNT_INGLES2768439.04.977864e+011.283478e+010.000000e+004.000000e+014.800000e+015.700000e+011.000000e+02
PERCENTIL_INGLES2768849.05.016052e+012.890562e+011.000000e+002.500000e+015.000000e+017.500000e+011.000000e+02
PUNT_GLOBAL2775282.02.505214e+025.165701e+010.000000e+002.110000e+022.470000e+022.870000e+025.000000e+02
PERCENTIL_GLOBAL2768794.05.002996e+012.896563e+011.000000e+002.500000e+015.000000e+017.500000e+011.000000e+02
ESTU_INSE_INDIVIDUAL2661817.05.057651e+019.703502e+001.134724e+014.385332e+015.025759e+015.669878e+018.483637e+01
ESTU_NSE_ESTABLECIMIENTO2758847.02.405172e+006.729321e-011.000000e+002.000000e+002.000000e+003.000000e+004.000000e+00
PERCENTIL_ESPECIAL_GLOBAL59087.05.041936e+012.888397e+011.000000e+002.500000e+015.000000e+017.500000e+011.000000e+02
SEED_CODIGOMEN12704.01.443476e+026.276720e+015.000000e+006.800000e+011.880000e+021.880000e+022.720000e+02

Saber los años y periodos de las pruebas saber11 que iremos trabajando.

Python
saber11['PERIODO'].unique()
salida
array([20181, 20182, 20191, 20194, 20201, 20204, 20211, 20214, 20221,
       20231, 20234])

Ya hemos identificado varios errores, y los hemos arreglado, ademas de que tenemos la columna PERIODO funcional, que era nuestro objetivo. Nuestro otro objetivo es saber que nuestra variable segunda mas importante (COLE_COD_DANE_SEDE) funcione bien, ya que con esta sabremos la ubicacion exacta de cada colegio.

Python
saber11['COLE_COD_DANE_SEDE']
COLE_COD_DANE_SEDE
0319001002330
1319001002330
2319001002330
3319001002330
4319001002330
......
2775277117444000818
2775278117444000818
2775279173283000038
2775280173283000038
2775281223807002839

2775282 rows × 1 columns

Python
saber11['COLE_COD_DANE_SEDE'] = saber11['COLE_COD_DANE_SEDE'].fillna(0).astype(int)

Con algunos ajustes hicimos que el codigo DANE de cada sede este bien formateado, ya que como vimos mas arriba era de tipo float64, es decir, decimal. Nosotros buscamos que nuestro codigo sea un entero. (Tenemos que cuidar nuestras variables como cientificos, ya que seran el resultado de nuestra investigacion).

Investigando un poco y mirando el funcionamiento del codigo interno de la web geoportal.dane.gov.co, podemos identificar con el codigo informacion tal como nombre, longitud, direccion, latitud, nombre, etc. Luego haremos una pequeña funcion para poder operar con esta web del gobierno.

Python
# Comprobamos que nuestra variable categorica este bien
# aparte que nos damos una idea de que jornadas existen.
saber11['COLE_JORNADA'].unique()
salida
array(['MAÑANA', 'COMPLETA', 'TARDE', 'NOCHE', 'UNICA', 'SABATINA'], dtype=object)
Python
# Saber si el estudiante como su familia tienen internet. (Binaria)
saber11['FAMI_TIENEINTERNET'].unique()
salida
array(['Si', 'No', nan], dtype=object)
Python
# Lo mismo si tienen algun computador con el que trabajar. (Binaria)
saber11['FAMI_TIENECOMPUTADOR'].unique()
salida
array(['Si', 'No', nan], dtype=object)
Python
# Estrato del 0 al 6, donde 0 no tiene estrato. Luego las volveremos numericas.
saber11['FAMI_ESTRATOVIVIENDA'].unique()
salida
array(['Estrato 3', 'Estrato 4', 'Estrato 1', 'Estrato 2', 'Estrato 5',
       'Estrato 6', nan, 'Sin Estrato'], dtype=object)
Python
# Educacion del padre, probablemente lo manejemos como binaria.
saber11['FAMI_EDUCACIONPADRE'].unique()
salida
array(['Secundaria (Bachillerato) completa',
       'Educación profesional completa', 'Primaria completa',
       'Técnica o tecnológica completa', 'Postgrado',
       'Secundaria (Bachillerato) incompleta', nan, 'No sabe',
       'Educación profesional incompleta', 'Primaria incompleta',
       'Ninguno', 'Técnica o tecnológica incompleta', 'No Aplica'],
      dtype=object)