Sesión 2 ‐ Filtrado y limpieza para la UTPL - AnthonyJ7/Documentaci-n-Reto-1---Practicum GitHub Wiki

Fecha: 02 de junio del 2025
Duración: 5 horas
Reto: Homologación de carreras (UTPL)
Herramientas utilizadas:

Videos informativos:


🎯 Objetivo general de la sesión

Filtrar las carreras de la UTPL y construir datasets limpios y reducidos que sirvan de entrada al emparejamiento semántico (fuzzy matching) de la próxima sesión.


📂 Archivo utilizado

  • base-datos-abiertos_oferta-academica_05022025.xlsx

🔄 Flujo de trabajo detallado

Paso Acción Código principal Resultado
1 Carga del dataset (saltando encabezado descriptivo) python df = pd.read_excel('base-datos-abiertos_oferta-academica_05022025.xlsx', engine='openpyxl', skiprows=13) Se omiten las 13 filas iniciales (descripción/meta-datos). La cabecera real queda en la fila 14; el DataFrame parte limpio.
2 Eliminación de valores nulos en NOMBRE_IES python df = df.dropna(subset=['NOMBRE_IES']) Se detectó 1 fila (índice 8379) con NaN; se eliminó para evitar errores posteriores.
3 Filtrado de carreras UTPL python mask_utpl = df['NOMBRE_IES'].str.upper().str.contains('UNIVERSIDAD TECNICA PARTICULAR DE LOJA', na=False) df_utpl = df[mask_utpl].copy() df_otros = df[~mask_utpl].copy() Separamos: df_utpl ➜ carreras de UTPL df_otros ➜ carreras de otras IES
4 Definición de columnas clave python columnas = ['NOMBRE_IES','NOMBRE_CARRERA','CAMPO_AMPLIO','NIVEL_FORMACIÓN','MODALIDAD','PROVINCIA'] Sólo estas columnas se usarán en limpieza, matching y tablero.
5 Limpieza de texto (minúsculas, sin tildes, sin espacios extra) python import unidecode def limpiar(t): return unidecode.unidecode(str(t).strip().lower()) if isinstance(t,str) else t for col in columnas: df_utpl[col] = df_utpl[col].apply(limpiar) df_otros[col] = df_otros[col].apply(limpiar) Normalización homogénea que mejora la precisión del matching y elimina variaciones de formato.
6 Reducción a columnas útiles python columnas_utiles = columnas df_utpl_limpio = df_utpl[columnas_utiles].copy() df_otros_limpio = df_otros[columnas_utiles].copy() Se generan dos DataFrames ligeros y listos para la siguiente etapa.
7 (opt.) Exportación para revisión python df_utpl_limpio.to_excel('carreras_utpl_limpias.xlsx', index=False) df_otros_limpio.to_excel('carreras_otros_limpias.xlsx', index=False) Archivos exportados para verificación manual en Excel (descargables desde Colab).

📦 Resultados

  • df_utpl_limpio – Carreras UTPL con 6 columnas clave y texto normalizado.
  • df_otros_limpio – Carreras de otras universidades con las mismas columnas y formato.
  • Dataset original preservado en df_completo (copia) por si se requiere alguna columna extra en el futuro.

🧠 Observaciones

  1. skiprows=13 asegura que la cabecera real sea interpretada correctamente; evita filas basura en el DataFrame.
  2. Eliminar la única fila nula en NOMBRE_IES previene errores de enmascaramiento booleano.
  3. La limpieza a minúsculas y sin tildes no altera el significado; sólo estandariza la forma. En Power BI se podrá re-formatear (por ejemplo, con UPPER() o capitalización).
  4. Conservar únicamente las columnas relevantes simplifica el procesamiento y acelera la computación en futuras etapas.

📌 Próximos pasos (Sesión 3)

  • Implementar RapidFuzz para emparejar cada NOMBRE_CARRERA de UTPL con las carreras más similares del resto de universidades.
  • Calcular el porcentaje de similitud y generar un archivo de coincidencias (matches_utpl.xlsx o .csv) que servirá como base de carga en Power BI.