Desarrollo de Webapps con Python y Shiny para el Análisis en Energías Renovables

Introducción

El curso está estructurado para desarrollar a lo largo de un semestre un proyecto. El proyecto consiste en realizar una webapp con shiny y Python con las siguientes caracteristicas:

  1. Debe estar documentado el tratamiento de los datos, utilizando técnicas de análisis de datos para asegurar su calidad antes de ser alimentados a la webapp

  2. Los datos alimentados a la webapp se almacenan en una base de datos.

  3. La webapp debe contener una base de datos para ESOLMET y otra para RUOA, que son dos estaciones meteorológicas. Nota: Los datos se pueden almacenar en una misma base de datos, solo se agregan campos, para que posteriormente se puedan discriminar unos datos de otros, a menos que ambas tengan datos completamente distintos.

  4. Debe tener una seccióna para poder hacer consultas seleccionando los datos que se desean graficar o descargar, combinando las dos estaciones meteorológicas.

  5. Debe contener calculo y estadística de la radiación solar y otras variables meteorológicas.

Para esto se ha estructurado en los siguientes bloques:

  1. Configurar el entorno y el control de versiones.
  2. Obtener y limpiar datos meteorológicos.
  3. Almacenar los datos en bases de datos.
  4. Construir la estructura web (Shiny) y enlazarla a la BD.
  5. Agregar cálculos estadísticos y visualizaciones interactivas.
  6. Crear una narrativa clara (storytelling) con un dashboard final.
  7. Desplegar la aplicación y presentar los resultados.

Este enfoque hace que cada paso del curso aporte al avance concreto del proyecto, reforzando la motivación de los estudiantes al ver cómo se construye la aplicación paso a paso.

Bloque 1: Preparación del Entorno y Control de Versiones

Objetivo:
Configurar el entorno de desarrollo, sentar las bases del control de versiones y preparar el escenario del proyecto.

  1. Instalación de Python y configuración de VSCode
    • Entornos virtuales, paquetes necesarios.
    • Primeros scripts de prueba.
  2. Control de versiones con Git y GitHub
    • Creación e inicialización de repositorios.
    • Flujo de trabajo básico (commits, ramas, pull requests).
    • Buenas prácticas para proyectos colaborativos.
  3. Introducción rápida a aplicaciones web
    • Diferencia entre páginas estáticas y aplicaciones interactivas.
    • Conceptos clave: cliente-servidor, flujo de datos.
    • Uso de GitHub para almacenar el código inicial del proyecto.

Producto del Bloque 1
- Repositorio en GitHub con la estructura base del proyecto.
- Entorno de Python configurado (con Shiny si se requiere desde el inicio).
- Documentación básica en README sobre cómo clonar, instalar y ejecutar.


Bloque 2: Limpieza e Ingesta de Datos

Objetivo:
Enfocarse en la obtención y limpieza de los datos meteorológicos (ESOLMET, RUOA). Preparar la información para que pueda ser almacenada y usada en la webapp.

  1. Importación y manipulación de datos
    • Lectura de formatos CSV, JSON, Parquet (según la fuente).
    • Uso de pandas para exploración inicial y corrección de tipos de datos.
    • Conceptos de datos faltantes y estrategias de limpieza.
  2. Series temporales y data cleaning
    • Ajuste de frecuencias, resampling (por hora, día, etc.).
    • Detección y manejo de valores atípicos.
    • Funciones lambda y scripting para procesar varios archivos.
  3. Documentación del proceso de limpieza
    • Creación de scripts dedicados (data_cleaning.py).
    • Registro de cambios en GitHub (commits con mensajes claros).
    • Buenas prácticas: mantener notebooks o scripts con narración (markdown).

Producto del Bloque 2
- Scripts/notebooks que procesan y limpian los datos de ESOLMET y RUOA.
- Datos listos para ser insertados en una base de datos o consumidos por la webapp.
- Documentación que describa el proceso de limpieza.


Bloque 3: Manejo de Bases de Datos y Persistencia de los Datos

Objetivo:
Aprender a configurar y usar una base de datos para almacenar y consultar los datos procesados; decidir si se utilizará SQLite, DuckDB u otra opción.

  1. Conceptos de bases de datos (relacionales vs. NoSQL)
    • ¿Por qué usar bases de datos en lugar de archivos planos?
    • Concurrencia, escalabilidad, consultas complejas.
  2. Configuración y uso de la base de datos elegida
    • SQLite, DuckDB o MySQL (según necesidad).
    • Creación de tablas y esquemas para ESOLMET y RUOA.
    • Ingesta de los datos limpiados a la base.
  3. Conexión con Python
    • Uso de sqlite3, SQLAlchemy o librerías similares.
    • Ejecución de consultas básicas y actualización de datos.

Producto del Bloque 3
- Base de datos con tablas llenas con los datos meteorológicos limpios.
- Scripts que automatizan la conexión y carga de datos (por ejemplo db_utils.py).
- Documentación sobre la estructura de la BD y su razonamiento.


Bloque 4: Desarrollo de la Webapp (Estructura Shiny y Reactividad)

Objetivo:
Crear la estructura fundamental de la aplicación usando Python Shiny: la interfaz de usuario, el servidor y la lógica de reactividad.

  1. Fundamentos de Shiny (en Python)
    • Estructura ui y server.
    • Flujos de datos dentro de la app (inputs y outputs).
    • Diferencia entre reactividad básica y avanzada (observers, eventos).
  2. Desarrollo de vistas iniciales
    • Inputs para seleccionar fechas, variables meteorológicas, rango de tiempo.
    • Outputs básicos (tablas, texto).
  3. Conexión de la webapp con la base de datos
    • Lectura de datos bajo demanda (según filtros).
    • Manejo de excepciones y validaciones de input.

Producto del Bloque 4
- Prototipo de la aplicación Shiny (Python) con capacidades de consulta sobre ESOLMET y RUOA.
- Filtrado dinámico en la interfaz.
- Código versionado en GitHub con documentación de la arquitectura de la app.


Bloque 5: Cálculos Estadísticos y Visualización Avanzada

Objetivo:
Implementar funciones de análisis y visualización de datos meteorológicos, con cálculos estadísticos y visualizaciones interactivas (Plotly).

  1. Estadísticas descriptivas y manipulación de datos
    • Cálculo de métricas (media, mediana, percentiles, etc.) para radiación solar.
    • Comparaciones entre estaciones (p.ej. ESOLMET vs. RUOA).
    • NumPy para optimización de cálculos y operaciones vectorizadas.
  2. Visualización con Plotly
    • Gráficas interactivas (líneas, barras, histogramas, boxplots, etc.).
    • Plotly Express vs. Plotly “tradicional”.
    • Callbacks e interactividad (zoom, hover, tooltips).
  3. Integración con Shiny
    • Uso de componentes renderPlotly y reactivos para actualizar gráficos en tiempo real.
    • Personalización de layouts para una mejor experiencia de usuario.

Producto del Bloque 5
- Módulo de estadística que calcula métricas clave y las expone a la app.
- Dashboards con gráficas interactivas en la webapp.
- Código comentado en el repositorio con tutoriales de uso.


Bloque 6: Storytelling y Construcción de un Dashboard Final

Objetivo:
Enfatizar la parte de storytelling con datos, estructurando un dashboard narrativo que permita extraer y comunicar insights relevantes de radiación solar y otras variables meteorológicas.

  1. Fundamentos de Storytelling con datos
    • Elementos de narrativa (objetivo, audiencia, contexto).
    • Selección adecuada de gráficas, uso del color y enfoque en la interpretación.
  2. Construcción de un tablero interactivo
    • Integración de varios componentes (gráficas, tablas, texto explicativo).
    • Disposición y diseño enfocados en una lectura secuencial o lógica.
  3. Caso práctico
    • Mostrar en un dashboard la radiación media diaria, comparación entre estaciones, días soleados vs. nublados, etc.
    • Generar insights y conclusiones preliminares.

Producto del Bloque 6
- Dashboard final que narra las principales conclusiones de los datos meteorológicos.
- Documentación orientada a usuarios (manual de uso) y a desarrolladores (descripción técnica).


Bloque 7: Despliegue, Documentación y Presentación del Proyecto

Objetivo:
Cerrar el ciclo del proyecto con el despliegue de la aplicación, la documentación final y la presentación de los resultados.

  1. Despliegue de la aplicación
    • Opciones: shinyapps.io, servidores locales, contenedores Docker.
    • Configuraciones para el entorno de producción.
  2. Documentación final
    • Manual de usuario y guía de instalación.
    • Detalle del proceso de limpieza, base de datos y scripts clave.
    • Informe de las conclusiones encontradas en la investigación.
  3. Presentación del proyecto
    • Demostración en vivo de la webapp (flujo de limpieza -> BD -> visualización -> storytelling).
    • Énfasis en la narrativa y resultados para las variables meteorológicas.

Producto del Bloque 7
- Aplicación web en producción (o lista para que otros la ejecuten fácilmente).
- Documentación completa (Manual de usuario, README técnico, scripts).
- Presentación final que muestre la app y los insights más destacados.