Introducción

Este trabajo final presenta un análisis exploratorio y estadístico sobre la matrícula escolar por grado y género, utilizando datos oficiales obtenidos desde Ministerio de Educación y Ciencias - Paraguay.

El objetivo es entender la distribución de estudiantes por grado y género, y analizar tendencias en la matrícula escolar.

Descripción de los datos

Los datos corresponden a inscripciones de estudiantes en el primer ciclo de educación escolar básica. Cada fila representa una institución educativa con la cantidad de hombres y mujeres matriculados por grado.

El archivo fuente es un CSV separado por coma (“,”) y codificado en Latin-1.

Metodología El presente trabajo se desarrolló a partir del análisis de la base de datos de matriculaciones en la Educación Escolar Básica disponible en el portal de datos abiertos del Ministerio de Educación y Ciencias de Paraguay (https://datos.mec.gov.py/data/matriculaciones_educacion_escolar_basica). La información fue descargada en formato .csv, conteniendo datos por institución, grado, sexo, año y ubicación.

  1. Herramientas utilizadas Para el procesamiento, limpieza y análisis de los datos se utilizó una combinación de herramientas de análisis de datos:

RStudio como entorno de desarrollo principal, aprovechando la integración con Python mediante el paquete reticulate.

Python 3, utilizando las siguientes bibliotecas:

polars para la lectura y manipulación eficiente de datos tabulares,

pandas para el manejo estructurado de información tabular,

matplotlib para la generación de gráficos,

scikit-learn para aplicar modelos de regresión lineal y obtener métricas de ajuste.

  1. Preparación de los datos Se realizó una normalización de nombres de columnas, eliminando tildes, espacios y caracteres especiales para facilitar su manipulación.

Se seleccionaron únicamente las columnas relacionadas con la cantidad de matriculados por grado y por sexo (de primer a noveno grado).

Para cada grado se calcularon:

El total de estudiantes,

La cantidad de hombres y de mujeres,

Y el porcentaje de cada sexo sobre el total.

  1. Análisis realizado Se elaboraron distintos gráficos para observar el comportamiento de la matrícula:

Gráfico de barras con la cantidad total de matriculados por grado, junto con una línea de regresión lineal que muestra la tendencia decreciente conforme se avanza en los grados.

Gráficos de barras agrupadas, uno para mostrar la distribución absoluta por sexo, y otro que presenta el porcentaje que representan hombres y mujeres en cada grado.

Se calcularon métricas del modelo de regresión (pendiente, intercepto, MSE y R²) para cuantificar la relación entre el grado y la cantidad de estudiantes. # Análisis Exploratorio

R Markdown

import warnings
warnings.filterwarnings("ignore", category=UserWarning)

import polars as pl
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
import numpy as np

# 1. Leer archivo CSV separado por ";"
df = pl.read_csv(
    r"C:\Users\blasi\OneDrive\Documentos\curso big data\trabajo final\final\base_inscriptos_primer_ciclo_V2.csv",
    encoding="latin1",
    dtypes={"codigo_institucion": pl.Utf8, "codigo_barrio_localidad": pl.Utf8},
    truncate_ragged_lines=True
)
## <string>:3: DeprecationWarning: the argument `dtypes` for `read_csv` is deprecated. It was renamed to `schema_overrides` in version 0.20.31.
# 2. Normalizar nombres de columna
mapping = {
    col: col.strip().lower()
        .replace("á", "a").replace("é", "e").replace("í", "i")
        .replace("ó", "o").replace("ú", "u").replace("ñ", "n")
        .replace(" ", "_").replace("/", "_")
    for col in df.columns
}
df = df.rename(mapping)

# 3. Seleccionar columnas de grados
grados = [
    ("primer_grado_hombre", "primer_grado_mujer"),
    ("segundo_grado_hombre", "segundo_grado_mujer"),
    ("tercer_grado_hombre", "tercer_grado_mujer"),
    ("cuarto_grado_hombre", "cuarto_grado_mujer"),
    ("quinto_grado_hombre", "quinto_grado_mujer"),
    ("sexto_grado_hombre", "sexto_grado_mujer"),
    ("septimo_grado_hombre", "septimo_grado_mujer"),
    ("octavo_grado_hombre", "octavo_grado_mujer"),
    ("noveno_grado_hombre", "noveno_grado_mujer"),
]

# 4. Calcular suma por grado y preparar datasets
datos = []
hombres = []
mujeres = []

for i, (h_col, m_col) in enumerate(grados, 1):
    total_h = df.select(pl.col(h_col).cast(pl.Float64).sum()).item()
    total_m = df.select(pl.col(m_col).cast(pl.Float64).sum()).item()
    total = total_h + total_m
    datos.append((i, total))
    hombres.append(total_h)
    mujeres.append(total_m)

# 5. Preparar datos para regresión
X = pd.DataFrame([x for x, _ in datos], columns=["grado"])
y = pd.Series([y for _, y in datos], name="matriculados")
model = LinearRegression().fit(X, y)
y_pred = model.predict(X)

# 6. Mostrar métricas
print(f"Pendiente:   {model.coef_[0]:.2f}")
## Pendiente:   -14721.87
print(f"Intercepto:  {model.intercept_:.2f}")
## Intercepto:  511372.67
print(f"MSE:         {mean_squared_error(y, y_pred):.2f}")
## MSE:         97904335.21
print(f"R²:          {r2_score(y, y_pred):.4f}")
## R²:          0.9365
# 7. Gráfico 1: Total de matriculados por grado con regresión
plt.figure(figsize=(8, 6))
plt.bar(X["grado"], y, alpha=0.6, label="Matriculados por grado")
plt.plot(X["grado"], y_pred, color='red', linewidth=2, label="Tendencia")
plt.xlabel("Grado Escolar")
plt.ylabel("Cantidad de Matriculados")
plt.title("Distribución de matrícula por grado")
plt.xticks(X["grado"])
## ([<matplotlib.axis.XTick object at 0x00000289417BC980>, <matplotlib.axis.XTick object at 0x00000289417E9450>, <matplotlib.axis.XTick object at 0x00000289417E9BD0>, <matplotlib.axis.XTick object at 0x00000289417EA350>, <matplotlib.axis.XTick object at 0x00000289417EAAD0>, <matplotlib.axis.XTick object at 0x00000289417EB250>, <matplotlib.axis.XTick object at 0x00000289417EB9D0>, <matplotlib.axis.XTick object at 0x0000028941814190>, <matplotlib.axis.XTick object at 0x0000028941814910>], [Text(1, 0, '1'), Text(2, 0, '2'), Text(3, 0, '3'), Text(4, 0, '4'), Text(5, 0, '5'), Text(6, 0, '6'), Text(7, 0, '7'), Text(8, 0, '8'), Text(9, 0, '9')])
plt.grid(True)
plt.legend()
plt.gca().yaxis.set_major_formatter(ticker.FuncFormatter(lambda x, p: format(int(x), ',')))
plt.show()

# 8. Gráfico 2: Matrícula por género (valores absolutos)
grados_numeros = np.array(list(range(1, 10)))
ancho = 0.35  # ancho de cada barra

# Posiciones para barras lado a lado
pos_h = grados_numeros - ancho / 2
pos_m = grados_numeros + ancho / 2

plt.figure(figsize=(10, 6))
plt.bar(pos_h, hombres, width=ancho, label='Hombres')
plt.bar(pos_m, mujeres, width=ancho, label='Mujeres')
plt.xlabel("Grado Escolar")
plt.ylabel("Cantidad de Matriculados")
plt.title("Distribución de matrícula por grado y género (barras lado a lado)")
plt.xticks(grados_numeros)
## ([<matplotlib.axis.XTick object at 0x0000028941930050>, <matplotlib.axis.XTick object at 0x00000289418D3890>, <matplotlib.axis.XTick object at 0x0000028941974190>, <matplotlib.axis.XTick object at 0x0000028941974910>, <matplotlib.axis.XTick object at 0x0000028941975090>, <matplotlib.axis.XTick object at 0x0000028941975810>, <matplotlib.axis.XTick object at 0x0000028941975F90>, <matplotlib.axis.XTick object at 0x0000028941976710>, <matplotlib.axis.XTick object at 0x0000028941976E90>], [Text(1, 0, '1'), Text(2, 0, '2'), Text(3, 0, '3'), Text(4, 0, '4'), Text(5, 0, '5'), Text(6, 0, '6'), Text(7, 0, '7'), Text(8, 0, '8'), Text(9, 0, '9')])
plt.legend()
plt.grid(True, axis='y')
plt.gca().yaxis.set_major_formatter(ticker.FuncFormatter(lambda x, p: format(int(x), ',')))
plt.show()

Conclusión: El análisis de los datos de matriculación en la Educación Escolar Básica revela varios patrones importantes en cuanto a la distribución de estudiantes por grado y por sexo:

Disminución progresiva de la matrícula: El primer gráfico muestra una clara tendencia descendente en la cantidad total de matriculados a medida que se avanza en los grados, desde primero hasta noveno. Esta caída se refleja también en la recta de regresión ajustada, cuya pendiente negativa indica una pérdida sostenida de estudiantes en los grados superiores. Este fenómeno puede deberse a múltiples factores, como el abandono escolar, repitencia acumulada, migración, o deserción por motivos socioeconómicos.

Distribución por género estable y equilibrada: En el segundo gráfico, que descompone la matrícula por sexo y grado (con barras separadas), se observa que la cantidad de varones y mujeres es relativamente similar en todos los grados. No se registran diferencias significativas de participación entre géneros, lo cual indica que, en términos de acceso y permanencia, la matrícula escolar no presenta una brecha de género visible en los datos analizados.

En conjunto, los resultados evidencian un problema de retención escolar a lo largo del ciclo básico, pero también muestran un logro en cuanto a equidad de género en el acceso a la educación formal. Estos hallazgos pueden servir como base para profundizar en estudios cualitativos o geográficos más específicos, orientados a entender mejor las causas detrás de la disminución progresiva de la matrícula.