2. FASE EXPLORACIÓN (VISUAL)
Para esta fase usaremos matploit para graficar, y seabor para simplificar la creación de gráficos complejos al proporcionar funciones de alto nivel para gráficos como diagramas de dispersión con líneas de regresión, matrices de correlación, gráficos de distribución conjunta, diagramas de violín y mucho más.
import matplotlib.pyplot as plt
import seaborn as snsPor ejemplo, si queremos ver histogramas de cada variable. Luego iremos combinandolas para sacar las conclusiones objetivo que tenemos.
saber11.hist(figsize=(30,35))
plt.show()Es hora de combinar variables para nuestros histogramas y sacar conclusiones. Pero antes, busquemos nuestro colegio preferido.
instuto = saber11[saber11['COLE_NOMBRE_ESTABLECIMIENTO'].str.contains('COLEGIO INSTITUTO TECNICO INTERNACIONAL', case=False)]['COLE_NOMBRE_ESTABLECIMIENTO']
instuto| COLE_NOMBRE_ESTABLECIMIENTO | |
|---|---|
| 28813 | COLEGIO INSTITUTO TECNICO INTERNACIONAL (IED) |
| 30925 | COLEGIO INSTITUTO TECNICO INTERNACIONAL (IED) |
| 31056 | COLEGIO INSTITUTO TECNICO INTERNACIONAL (IED) |
| 40353 | COLEGIO INSTITUTO TECNICO INTERNACIONAL (IED) |
| 42675 | COLEGIO INSTITUTO TECNICO INTERNACIONAL (IED) |
| ... | ... |
| 2734602 | COLEGIO INSTITUTO TECNICO INTERNACIONAL (IED) |
| 2739100 | COLEGIO INSTITUTO TECNICO INTERNACIONAL (IED) |
| 2758677 | COLEGIO INSTITUTO TECNICO INTERNACIONAL (IED) |
| 2760805 | COLEGIO INSTITUTO TECNICO INTERNACIONAL (IED) |
| 2762246 | COLEGIO INSTITUTO TECNICO INTERNACIONAL (IED) |
794 rows × 1 columns
import numpy as np
# Obtener los datos únicos de 'PERIODO' y 'PUNT_MATEMATICAS'
periodos = saber11['PERIODO'].unique()
puntajes = saber11['PUNT_MATEMATICAS']
# Ordenar los períodos de forma cronológica y alinear con los puntajes correspondientes
periodos_ordenados, puntajes_ordenados = zip(*sorted(zip(periodos, puntajes)))
# Crear el gráfico
fig, ax = plt.subplots(figsize=(10, 6))
bar_width = 0.6
bar_positions = np.arange(len(periodos_ordenados))
# Barras
bars = ax.bar(bar_positions, puntajes_ordenados, bar_width, color='skyblue', edgecolor='black')
# Línea de tendencia
z = np.polyfit(bar_positions, puntajes_ordenados, 1)
p = np.poly1d(z)
ax.plot(bar_positions, p(bar_positions), 'r--', linewidth=2, label='Tendencia')
# Etiquetas y título
ax.set_xlabel('Período', fontsize=12)
ax.set_ylabel('Puntaje en Matemáticas', fontsize=12)
ax.set_title('Puntaje en Matemáticas por Período', fontsize=14, fontweight='bold')
ax.set_xticks(bar_positions)
ax.set_xticklabels(periodos_ordenados, rotation=45, ha='right')
# Anotaciones
covid_start = 20201 # Período de inicio del COVID-19
covid_end = 20211 # Período de cierre del COVID-19
ax.annotate('Inicio del COVID-19', xy=(periodos_ordenados.index(covid_start), puntajes_ordenados[periodos_ordenados.index(covid_start)]),
xytext=(0.2, 0.9), textcoords='axes fraction', fontsize=10,
arrowprops=dict(facecolor='black', shrink=0.05),
horizontalalignment='left', verticalalignment='top')
ax.annotate('Cierre del COVID-19', xy=(periodos_ordenados.index(covid_end), puntajes_ordenados[periodos_ordenados.index(covid_end)]),
xytext=(0.8, 0.9), textcoords='axes fraction', fontsize=10,
arrowprops=dict(facecolor='black', shrink=0.05),
horizontalalignment='right', verticalalignment='top')
# Leyenda
ax.legend(fontsize=10)
# Ajustar márgenes y espaciado
plt.tight_layout()Puntaje de Matematicas en Promedio por Disponibilidad de Computador en el Hogar
# Calculamos el puntaje promedio por disponibilidad de computador en el hogar
puntajes_promedio = saber11.groupby('FAMI_TIENECOMPUTADOR')['PUNT_MATEMATICAS'].mean()
ax = puntajes_promedio.plot(kind='bar', figsize=(6, 6), color='skyblue', edgecolor='black', linewidth=1.5)
# Configuramos etiquetas y título
ax.set_xlabel('Disponibilidad de Computador en el Hogar', fontsize=12)
ax.set_ylabel('Puntaje Global Promedio', fontsize=12)
ax.set_title('Puntaje de Matematicas en Promedio por Disponibilidad de Computador en el Hogar', fontsize=14, fontweight='bold')
plt.xticks(rotation=0)
plt.tight_layout()
plt.show()Calcular el puntaje promedio de matemáticas por acceso a internet en el hogar
# Calculamos el puntaje promedio de matemáticas por acceso a internet en el hogar
puntajes_promedio = saber11.groupby('FAMI_TIENEINTERNET')['PUNT_MATEMATICAS'].mean()
# Creamos el gráfico de barras
ax = puntajes_promedio.plot(kind='bar', figsize=(6, 6), color='skyblue', edgecolor='black', linewidth=1.5)
# Configuramos etiquetas y título
ax.set_xlabel('Acceso a Internet en el Hogar', fontsize=12)
ax.set_ylabel('Puntaje Promedio de Matemáticas', fontsize=12)
ax.set_title('Puntaje Promedio de Matemáticas por Acceso a Internet en el Hogar', fontsize=14, fontweight='bold')
plt.xticks(rotation=0)
plt.tight_layout()
plt.show()Calcular el puntaje promedio de matemáticas por nivel socioeconómico del establecimiento
# Calculamos el puntaje promedio de matemáticas por nivel socioeconómico del establecimiento
puntajes_promedio = saber11.groupby('ESTU_NSE_ESTABLECIMIENTO')['PUNT_MATEMATICAS'].mean()
# Crear el gráfico de barras
ax = puntajes_promedio.plot(kind='bar', figsize=(8, 6), color='skyblue', edgecolor='black', linewidth=1.5)
# Configurar etiquetas y título
ax.set_xlabel('Nivel Socioeconómico del Establecimiento', fontsize=12)
ax.set_ylabel('Puntaje Promedio de Matemáticas', fontsize=12)
ax.set_title('Puntaje Promedio de Matemáticas por Nivel Socioeconómico del Establecimiento', fontsize=14, fontweight='bold')
# Ajustamos la rotación de las etiquetas del eje x
plt.xticks(rotation=0)
# Ajustar márgenes y espaciado
plt.tight_layout()
plt.show()Calcular el puntaje promedio de matemáticas por jornada académica
# Calculamos el puntaje promedio de matemáticas por jornada académica
puntajes_promedio = saber11.groupby('COLE_JORNADA')['PUNT_MATEMATICAS'].mean()
# Creamos el gráfico de barras
ax = puntajes_promedio.plot(kind='bar', figsize=(8, 6), color='skyblue', edgecolor='black', linewidth=1.5)
# Configuramos etiquetas y título
ax.set_xlabel('Jornada Académica', fontsize=12)
ax.set_ylabel('Puntaje Promedio de Matemáticas', fontsize=12)
ax.set_title('Puntaje Promedio de Matemáticas por Jornada Académica', fontsize=14, fontweight='bold')
# Ajustamos la rotación de las etiquetas del eje x
plt.xticks(rotation=0)
# Ajustamos márgenes y espaciado
plt.tight_layout()
plt.show()Puntaje Promedio de Matemáticas de los estudiantes por Nivel Educativo de los Padres
# Calculamos el puntaje promedio de matemáticas por nivel educativo del padre
puntajes_promedio_padre = saber11.groupby('FAMI_EDUCACIONPADRE')['PUNT_MATEMATICAS'].mean()
# Calculamos el puntaje promedio de matemáticas por nivel educativo de la madre
puntajes_promedio_madre = saber11.groupby('FAMI_EDUCACIONMADRE')['PUNT_MATEMATICAS'].mean()
# Creamos el gráfico de barras para el nivel educativo del padre
ax1 = puntajes_promedio_padre.plot(kind='bar', figsize=(10, 6), color='skyblue', edgecolor='black', linewidth=1.5, position=1, width=0.4)
# Creamos el gráfico de barras para el nivel educativo de la madre
ax2 = puntajes_promedio_madre.plot(kind='bar', figsize=(10, 6), color='lightgreen', edgecolor='black', linewidth=1.5, position=0, width=0.4)
# Configuramos etiquetas y título
ax1.set_xlabel('Nivel Educativo de los Padres', fontsize=12)
ax1.set_ylabel('Puntaje Promedio de Matemáticas', fontsize=12)
ax1.set_title('Puntaje Promedio de Matemáticas de los estudiantes por Nivel Educativo de los Padres', fontsize=14, fontweight='bold')
# Crear la leyenda
ax1.legend(['Padre', 'Madre'], loc='upper right')
# Ajustar la rotación de las etiquetas del eje x
plt.xticks(rotation=45, ha='right')
# Ajustar márgenes y espaciado
plt.tight_layout()
plt.show()Relación entre INSE y Puntaje de Matemáticas
# Crear el gráfico de dispersión
plt.figure(figsize=(8, 6))
plt.scatter(saber11['ESTU_INSE_INDIVIDUAL'], saber11['PUNT_MATEMATICAS'], alpha=0.5)
# Configurar etiquetas y título
plt.xlabel('Índice Socioeconómico Individual (INSE)', fontsize=12)
plt.ylabel('Puntaje de Matemáticas', fontsize=12)
plt.title('Relación entre INSE y Puntaje de Matemáticas', fontsize=14, fontweight='bold')
# Ajustar márgenes y espaciado
plt.tight_layout()
plt.show()-
A medida que aumenta el INSE, la dispersión de los puntos se reduce gradualmente. Esto indica que, en general, los estudiantes de estratos socioeconómicos más altos tienden a tener puntajes de matemáticas más consistentes y agrupados en un rango más estrecho.
-
La dispersión de los puntos es mayor en los niveles más bajos del INSE (por debajo de 40). Esto sugiere que entre los estudiantes de estratos socioeconómicos más bajos, hay una mayor variabilidad en los puntajes de matemáticas. Algunos estudiantes de estos estratos obtienen puntajes relativamente altos, mientras que otros obtienen puntajes bajos.
-
Hay algunos valores atípicos en el gráfico, especialmente en los niveles más altos del INSE (por encima de 80). Estos puntos representan estudiantes con puntajes de matemáticas excepcionalmente altos en relación con su INSE. Sería interesante investigar las características y circunstancias específicas de estos estudiantes.
