Trabajo de Fin de Grado · Ingeniería Informática

Movilidad ESII

Herramienta de escritorio desarrollada en Python para la gestión centralizada y visualización geográfica de la movilidad académica en la Escuela Superior de Ingeniería Informática en el campus de Albacete (ESIIAB).

Instalador Windows autocontenido · sin conexión a internet · Microsoft Store · código abierto

Stack Tecnológico

Frontend
Streamlit

Interfaz web reactiva con mínimo código frontend, ideal para aplicaciones de datos.

Backend
Flask

API REST ligera que desacopla la lógica de negocio de la capa de presentación.

Procesamiento
pandas

Filtrado, agregación y transformación de datos en memoria sobre DataFrames.

Visualización
Folium · Leaflet

Mapas interactivos HTML autocontenidos sin dependencia de servicios externos.

Persistencia
Excel · xlrd · openpyxl

Lectura y escritura directa de los ficheros Excel institucionales ya existentes.

Empaquetado
PyInstaller · Inno Setup · MSIX

Distribución como instalador Windows (.exe) y paquete nativo MSIX para la Microsoft Store, sin requerir Python en el equipo de destino.

El Problema

La gestión de la movilidad académica -programas Erasmus, convenios bilaterales e intercambios nacionales- implica el manejo de grandes volúmenes de datos heterogéneos: universidades de destino, asignaturas reconocidas, estudiantes participantes, cursos académicos y países involucrados.

En la ESII este proceso se realizaba de forma manual, dispersa y dependiente de hojas de cálculo Excel. Esto generaba inconsistencias, dificultaba la consulta histórica e impedía obtener una visión global y actualizada de la movilidad.

Los coordinadores carecían de una herramienta que les permitiese explorar la información de forma interactiva, filtrar por parámetros relevantes o generar informes fácilmente, lo que ralentizaba la toma de decisiones y aumentaba la carga administrativa.

  • Datos dispersos

    Información distribuida en múltiples ficheros Excel sin estructura unificada.

  • Sin visión geográfica

    Imposible visualizar a qué países y ciudades se dirigen los estudiantes.

  • Consultas lentas

    Filtrar por titulación, curso o destino requería búsquedas manuales tediosas.

  • Sin estadísticas integradas

    Obtener métricas agregadas exigía realizar cálculos manuales puntuales fuera del sistema.

La Solución

Movilidad ESII centraliza toda la información en una aplicación de escritorio multiplataforma que combina una interfaz web local (Streamlit) con una API REST ligera (Flask), ofreciendo exploración interactiva, visualización cartográfica y exportación directa a Excel.

Datos de entrada
Ficheros Excel históricos, datos de universidades y asignaturas
Movilidad ESII
Procesamiento, almacenamiento y visualización integrados
Resultados
Mapas interactivos, estadísticas y exportación a Excel

Demostración

A continuación se muestran las principales pantallas de la aplicación.

Vista principal del mapa interactivo de destinos
Mapa interactivo de destinos
Panel de búsqueda y filtros del mapa
Búsqueda y filtrado de datos
Módulo de estadísticas con gráficos
Panel de estadísticas
Exportación de estadísticas a Excel
Exportación a Excel

Arquitectura del Sistema

El sistema se organiza en capas desacopladas que separan la presentación, la lógica de negocio, el acceso a datos y la seguridad.

Capa de Presentación
Streamlit UI Vistas de mapa Vistas de estadísticas Popups y formularios
Capa de API
Flask REST API Rutas y endpoints Validadores
Capa de Dominio
Modelos de datos Filtros de mapa Filtros de estadísticas Ciudades ES
Capa de Persistencia
Excel (.xls/.xlsx) pandas DataFrames xlrd / openpyxl Carga de datos Actualización Excel Hojas de materias
Utilidades y Seguridad
Configuración Token manager Exportación Procesado de mapas

Funcionalidades Principales

Exploración Interactiva

Búsqueda en tiempo real de estudiantes, universidades y asignaturas. Filtros combinables por titulación, curso académico, país y tipo de movilidad. Resultados paginados y ordenables.

  • Búsqueda por nombre y código
  • Filtros por ámbito y titulación
  • Panel lateral de filtros combinables

Visualización Geográfica

Mapa interactivo basado en Folium con marcadores geolocalizados por destino. Visualización por intensidad de flujos, agrupación de puntos cercanos y popups con detalle de cada movilidad.

  • Marcadores por país y ciudad
  • Capas filtrables
  • Popups con información completa

Estadísticas Globales

Módulo de análisis con gráficos nativos de Streamlit sobre DataFrames de pandas. Distribución por países, progresión por curso académico, comparativa entre titulaciones y desglose por tipo de programa de movilidad.

  • Gráficos de barras y líneas
  • Progresión anual de intercambios
  • Comparativa por titulación

Exportación a Excel

Generación de informes Excel con openpyxl a partir de los resultados filtrados. Plantillas predefinidas, estilos aplicados automáticamente y actualización incremental de ficheros existentes.

  • Exportación de vistas filtradas
  • Plantillas con estilos
  • Actualización de ficheros existentes

Decisiones Técnicas

¿Por qué Python?

Python ofrece un ecosistema maduro para el procesamiento de datos (pandas, openpyxl), la creación de interfaces web ligeras (Streamlit, Flask) y el empaquetado de aplicaciones de escritorio (PyInstaller). Su legibilidad facilita el mantenimiento por parte del personal técnico de la ESII sin experiencia previa en el proyecto.

Frente a alternativas como Java (Swing) o Electron, Python reduce significativamente el tiempo de desarrollo al evitar capas de abstracción innecesarias para un sistema de uso interno.

¿Por qué visualización geográfica?

Los datos de movilidad tienen una dimensión espacial inherente: cada intercambio implica un origen y un destino geolocalizable. Representar esto en un mapa convierte datos abstractos en conocimiento visual inmediato, facilitando la identificación de patrones de concentración en determinados países o ciudades.

Folium, basado en Leaflet.js, permite generar mapas HTML autocontenidos que pueden abrirse sin conexión a internet, lo cual es crítico en entornos de uso institucional.

¿Por qué Streamlit + Flask?

Streamlit proporciona una interfaz reactiva con mínimo código frontend, ideal para aplicaciones de datos orientadas a usuarios no técnicos. Flask actúa como backend ligero que expone una API REST, desacoplando la lógica de negocio de la capa de presentación y facilitando futuras integraciones.

¿Por qué Excel como persistencia?

Los datos de movilidad ya existían en formato Excel en la ESII. Mantener Excel como registro oficial de datos elimina la fricción de migración: los coordinadores pueden seguir actualizando los ficheros con las herramientas que conocen, y la aplicación los lee directamente con xlrd y openpyxl.

pandas actúa como capa de procesamiento en memoria: permite filtrar, agregar y transformar los datos con un rendimiento más que suficiente para los volúmenes manejados, sin necesidad de una base de datos adicional.

Retos y Aprendizajes

Calidad e inconsistencia de los datos históricos

Los ficheros Excel de partida presentaban inconsistencias en nombres de universidades, códigos de asignaturas y formatos de fecha. El mayor reto fue diseñar un proceso de carga robusto capaz de normalizar y validar los datos de entrada sin perder información. Se implementó un pipeline de transformación con reglas configurable y registro detallado de errores.

Geolocalización sin API externa

Para no depender de servicios de geocodificación externos, las coordenadas de cada universidad de destino se mantienen en una hoja específica del propio fichero Excel institucional (Coordenadas), con las columnas país, universidad y coordenadas. Al cargar los datos, la aplicación cruza el nombre de la universidad de cada alumno con esa hoja y asigna la coordenada correspondiente sin necesidad de conexión a internet. Para el alta manual de nuevos registros se integra Nominatim (OpenStreetMap) como geocodificador opcional, con degradación elegante si no hay red disponible.

Empaquetado como aplicación de escritorio

Distribuir una aplicación Python con Streamlit como ejecutable Windows requirió resolver múltiples problemas de PyInstaller: dependencias ocultas de Streamlit, recursos estáticos, scripts de lanzamiento de procesos secundarios y scripts de instalación con Inno Setup. Cada iteración del empaquetado reveló nuevas dependencias no declaradas.

Diseño visual e intuitivo para la gestión de datos

Aunque la gestión de la movilidad se realizaba hasta ahora con hojas de cálculo Excel, este enfoque resultaba tedioso, propenso a errores y difícil de mantener a medida que el volumen de datos crecía. El reto consistió en diseñar una interfaz visual que centralizase toda la información en un único sistema, simplificase los flujos de trabajo más habituales y ofreciese una experiencia de consulta y edición de datos mucho más ágil y clara que la navegación manual por múltiples ficheros desconectados.

Instalación

Microsoft Store Instalar desde la Microsoft Store

La forma más sencilla: la aplicación se descarga, actualiza y desinstala de forma limpia a través de la Microsoft Store. No aparece el aviso de SmartScreen ni se necesita desbloquear ningún archivo manualmente.

Obtener en Microsoft Store

Disponible en la Microsoft Store: aplicación certificada y firmada por Microsoft.

Instalador Windows (.exe)

Descargable directamente desde GitHub Releases. No requiere Python instalado: incluye todas las dependencias empaquetadas. Dos variantes disponibles:

  • Con datos de demostración — incluye datos de ejemplo para explorar la aplicación desde el primer momento.
  • Sin datos — instalación limpia para uso en producción con los ficheros Excel reales de la institución.

¿Prefieres verificar el hash SHA256 o consultar el historial de cambios? Ver release en GitHub.

  1. Descarga el instalador adecuado con los botones de arriba.
  2. Ejecuta el instalador y sigue los pasos del asistente.
  3. Abre Movilidad ESII desde el acceso directo del escritorio.

La release también incluye un archivo SHA256.txt con los hashes de verificación de ambos instaladores. Puedes usarlo para comprobar que el archivo descargado no ha sido alterado.

⚠ Los instaladores .exe muestran el aviso de SmartScreen de Windows. Cómo resolverlo →

Desde código fuente

Requiere Python 3.12 y pip. Sigue los pasos indicados en el README.

  1. Clona el repositorio:
    git clone https://github.com/mariapicazosanchez/TFG-MariaPicazoSanchez
        cd TFG-MariaPicazoSanchez
  2. Instala las dependencias:
    pip install -r install_root/requirements.txt
  3. Lanza la aplicación:
    py launcher_system.py --dev

Requisitos del sistema

Componente Mínimo Recomendado
Sistema operativo Windows 10 Windows 10 / 11
Python 3.10 3.12
RAM 4 GB 8 GB
Espacio en disco 500 MB 1 GB

Microsoft Store

La aplicación está publicada en la Microsoft Store como paquete MSIX nativo, construido directamente desde el código fuente sin envolver ningún instalador externo. Tras superar íntegramente el proceso de certificación, Microsoft re-firma el paquete con su propio certificado, por lo que los usuarios finales la instalan sin avisos de SmartScreen.

🏪 Instalación desde la Store

  • Sin aviso de SmartScreen — Microsoft re-firma el paquete
  • Actualizaciones automáticas desde la Store
  • Desinstalación limpia sin residuos
  • Python embebido preinstalado dentro del paquete
  • Solo variante sin datos (instalación limpia)

📦 Instalador .exe (GitHub Releases)

  • Disponible inmediatamente sin proceso de certificación
  • Variante con datos de demostración incluida
  • Hash SHA256 verificable
  • Muestra aviso SmartScreen (publicador autofirmado)
  • Sin actualizaciones automáticas
Certificación completada

La aplicación ha sido aceptada en Microsoft Partner Center y está disponible en la Microsoft Store. Durante el proceso de certificación se resolvieron los tres incumplimientos de política identificados en la revisión inicial y Microsoft aprobó la capacidad restringida runFullTrust, necesaria para que la aplicación pueda arrancar subprocesos Python en tiempo de ejecución.

10.2.5 — Paquete MSIX nativo (sin instalador envuelto)
10.1.2.10 — Tiempo de arranque (lanzador optimizado)
10.1.1.11 — Nombres únicos en el menú Inicio
runFullTrust — Capacidad restringida aprobada por Microsoft

Advertencia de SmartScreen

Este aviso solo afecta a los instaladores .exe descargados desde GitHub Releases. La versión de la Microsoft Store está re-firmada por Microsoft y no muestra ningún aviso. Los instaladores .exe están firmados con un certificado autofirmado (no emitido por una CA comercial), por lo que Windows los mostrará como de publicador desconocido. Esto es habitual en proyectos académicos. La aplicación es completamente segura; el código fuente y el pipeline de construcción son públicamente auditables en este repositorio.

¿Por qué aparece el aviso?
  • Sin firma de código. El instalador no está firmado con un certificado Authenticode reconocido por Windows, por lo que aparece como «Publicador desconocido».
  • Sin reputación acumulada. SmartScreen también evalúa cuántos usuarios han descargado y ejecutado un archivo concreto. Un binario recién publicado parte de reputación cero.

Es el comportamiento esperado en proyectos académicos y no indica ningún riesgo.

Cómo resolver la advertencia

Desbloquear desde Propiedades

El método más sencillo. No requiere ningún archivo adicional.

  1. Descarga el archivo .exe. No lo ejecutes todavía.
  2. Abre la carpeta donde se guardó el archivo.
  3. Haz clic derecho sobre el archivo → Propiedades.
  4. En la pestaña General, desplázate hasta la parte inferior. Si Windows marcó el archivo como descargado de internet, verás el siguiente aviso:
  5. Marca la casilla DesbloquearAplicarAceptar.
  6. Ya puedes ejecutar el instalador.

Si la casilla Desbloquear no aparece, el archivo ya fue desbloqueado o se descargó de forma que no activó la marca de zona. No es necesaria ninguna acción adicional.

Nota: para eliminar el aviso en los instaladores .exe sería necesario un certificado EV emitido por una CA reconocida (DigiCert, Sectigo…). Para una distribución académica de alcance limitado, el desbloqueo manual es suficiente. Si prefieres evitarlo por completo, instala desde la Microsoft Store — el paquete MSIX está re-firmado por Microsoft durante la certificación, de modo que no se muestra ningún aviso.

María Picazo Sánchez

Grado en Ingeniería Informática

Escuela Superior de Ingeniería Informática en el campus de Albacete (ESIIAB)

Universidad de Castilla-La Mancha · Curso 2025–2026