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:
- Google Colab Notebook de trabajo
- Python (Lenguaje de Programación)
Videos informativos:
- Google Colab: https://www.youtube.com/watch?v=mLqLYaOApIg
- Python en Colab: https://www.youtube.com/watch?v=ZwtDVIVB58A
- Librería Pandas: https://www.youtube.com/watch?v=PvNKKrPE0AI
🎯 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
skiprows=13
asegura que la cabecera real sea interpretada correctamente; evita filas basura en el DataFrame.- Eliminar la única fila nula en
NOMBRE_IES
previene errores de enmascaramiento booleano. - 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). - 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.