# 🚀 Aplicación Web Gradio - Visualizaciones ODS ## 📋 Descripción **App Gradio Interactiva** para explorar las 10 visualizaciones de análisis de similaridad ODS a través de una interfaz web profesional y amigable. ### ✨ Características Principales - ✅ **Interfaz web interactiva** con diseño profesional - ✅ **10 pestañas** con cada visualización completa - ✅ **Explicaciones integradas** para público general - ✅ **Visualizaciones dinámicas** (Plotly) y estáticas (PNG) - ✅ **Estadísticas en tiempo real** con análisis detallado - ✅ **Dashboard de inicio** con métricas clave - ✅ **Responsive design** adaptable a cualquier pantalla - ✅ **Sin necesidad de conocimientos técnicos** para usar --- ## 🎯 ¿Para quién es esta aplicación? ### 👥 Público General - Explorar visualizaciones de forma intuitiva - Entender qué ODS son más relevantes - Identificar indicadores clave sin código ### 👔 Ejecutivos y Tomadores de Decisión - Presentaciones interactivas - Análisis rápido de alineación ODS - Métricas clave de un vistazo ### 🔬 Analistas e Investigadores - Exploración profunda de datos - Validación de correlaciones - Exportación de visualizaciones ### 👨‍💻 Desarrolladores - Referencia de implementación - Base para personalización - Integración con otros sistemas --- ## 🛠️ Instalación y Configuración ### Requisitos Previos ```bash # Python 3.8 o superior python --version # Librerías necesarias pip install pandas numpy matplotlib seaborn plotly gradio ``` ### Instalación Completa ```bash # 1. Instalar todas las dependencias pip install pandas numpy matplotlib seaborn plotly gradio --break-system-packages # 2. Verificar instalación python -c "import gradio; print(f'Gradio {gradio.__version__} instalado correctamente')" ``` --- ## 🚀 Ejecución de la Aplicación ### Método 1: Ejecución Directa ```bash # Navegar al directorio cd /ruta/donde/está/app_gradio_ods.py # Ejecutar la aplicación python app_gradio_ods.py ``` **Resultado esperado:** ``` ====================================================================== INICIANDO APLICACIÓN GRADIO - VISUALIZACIONES ODS ====================================================================== ✓ Datos cargados correctamente: 244 registros ✓ ODS únicos: 17 ====================================================================== CREANDO APLICACIÓN... ====================================================================== ✓ Aplicación creada exitosamente ====================================================================== INICIANDO SERVIDOR WEB... ====================================================================== 🌐 La aplicación se abrirá en tu navegador automáticamente 📍 URL local: http://127.0.0.1:7860 🌍 URL pública: Se generará si share=True 💡 Presiona Ctrl+C para detener el servidor Running on local URL: http://127.0.0.1:7860 ``` ### Método 2: Ejecución en Background ```bash # Para mantener la app corriendo en segundo plano nohup python app_gradio_ods.py > app.log 2>&1 & # Ver los logs tail -f app.log # Detener la aplicación pkill -f app_gradio_ods.py ``` ### Método 3: Compartir Públicamente Editar el archivo `app_gradio_ods.py` en la línea final: ```python # Cambiar de: app.launch(share=False) # A: app.launch(share=True) ``` Esto generará una URL pública accesible desde cualquier lugar por 72 horas. --- ## 📱 Uso de la Aplicación ### Pantalla de Inicio Al abrir la aplicación, verás: 1. **Título principal** con descripción 2. **Estadísticas generales** en tarjeta destacada 3. **Top 3 ODS** más relevantes 4. **Top 5 indicadores** en tabla 5. **Guía de uso** paso a paso ### Navegación por Pestañas #### 🏠 **Inicio** - Dashboard con resumen ejecutivo - Métricas clave del análisis - Recomendaciones de exploración #### 📦 **1. Box Plot** - Distribución de similaridad por ODS - Clic en "🔄 Generar Visualización" - Explicación a la derecha - Gráfico interactivo a la izquierda #### 🔥 **2. Heatmap** - Mapa de calor ODS × Ranking - Imagen estática de alta resolución - Interpretación de colores #### 🌐 **3. Scatter 3D** - Exploración tridimensional - **Rotar**: Arrastra con el mouse - **Zoom**: Scroll o rueda del mouse - **Hover**: Ver detalles de cada punto #### 🕸️ **4. Radar Chart** - Perfil circular de ODS - Dos polígonos superpuestos - Ideal para presentaciones #### ☀️ **5. Sunburst** - Jerarquía ODS → Indicadores - **Clic**: Zoom en segmento - Tamaño proporcional a similaridad #### 🏆 **6. Top Indicadores** - Top 5 por cada ODS - 17 paneles (uno por ODS) - Scroll vertical para explorar todos #### 🌊 **7. Stream Graph** - Evolución de contribución - Áreas apiladas al 100% - Cambios de dominancia #### 🎻 **8. Violin Plot** - Distribución detallada - Densidad de probabilidad - Detecta patrones complejos #### 📊 **9. Dashboard** - 4 paneles integrados - Vista 360° del análisis - Validación del sistema #### 🔀 **10. Matriz Transición** - Presencia por cuartiles - Consistencia de ODS - Análisis de dominancia #### 📈 **Estadísticas** - Análisis estadístico completo - Tablas detalladas por ODS - Validación de correlaciones --- ## 🎨 Personalización ### Cambiar Colores Editar en `app_gradio_ods.py`: ```python # Línea ~35 - Tema de colores theme=gr.themes.Soft( primary_hue="blue", # Cambiar a: "green", "red", "purple", etc. secondary_hue="cyan", # Cambiar a: "teal", "orange", "pink", etc. neutral_hue="slate" # Cambiar a: "gray", "zinc", "stone", etc. ) ``` ### Cambiar Puerto ```python # Línea final - Configuración del servidor app.launch( server_port=7860, # Cambiar a: 8000, 8080, 3000, etc. ) ``` ### Agregar Autenticación ```python # Línea final - Añadir usuario/contraseña app.launch( auth=("usuario", "contraseña"), # Credenciales de acceso auth_message="Ingrese sus credenciales para acceder" ) ``` ### Modificar Explicaciones Editar las funciones `tab_vizN()` en el archivo: ```python def tab_viz1(): # ... explicacion = """ ## Tu título personalizado Tu texto explicativo aquí... """ # ... ``` --- ## 🔧 Solución de Problemas ### Problema 1: "ModuleNotFoundError: No module named 'gradio'" **Solución:** ```bash pip install gradio --break-system-packages ``` ### Problema 2: "Address already in use" **Causa:** El puerto 7860 ya está siendo usado **Solución A - Cambiar puerto:** ```python app.launch(server_port=8080) # Usar otro puerto ``` **Solución B - Cerrar proceso existente:** ```bash lsof -ti:7860 | xargs kill -9 ``` ### Problema 3: "⚠️ Error: No se pudieron cargar los datos" **Causa:** Ruta incorrecta del archivo de datos **Solución:** ```python # Editar línea ~49 en app_gradio_ods.py RUTA_DATOS = '/ruta/correcta/a/indicadores_markdown.txt' ``` ### Problema 4: Las visualizaciones no se cargan **Causa:** Falta el archivo `visualizaciones_ods.py` **Solución:** ```bash # Asegurarse de tener ambos archivos en el mismo directorio ls -la app_gradio_ods.py visualizaciones_ods.py ``` ### Problema 5: Error de memoria con muchos datos **Solución - Limitar datos:** ```python # Editar en cargar_datos() df = df.sample(n=1000) # Muestra de 1000 registros ``` ### Problema 6: La app no se abre automáticamente **Solución:** ```bash # Abrir manualmente en navegador google-chrome http://127.0.0.1:7860 # Chrome firefox http://127.0.0.1:7860 # Firefox open http://127.0.0.1:7860 # macOS ``` --- ## 📊 Capturas de Pantalla ### Vista del Dashboard de Inicio ``` ┌─────────────────────────────────────────────────────┐ │ 📊 Sistema de Visualización ODS │ │ Análisis de Similaridad de Indicadores │ │ │ │ 📈 Estadísticas Generales │ │ ┌──────────────────────────────────────────────┐ │ │ │ Total indicadores: 244 │ │ │ │ ODS cubiertos: 17/17 (100%) │ │ │ │ Similaridad promedio: 0.9050 │ │ │ │ Correlación: -0.9837 ✅ │ │ │ └──────────────────────────────────────────────┘ │ │ │ │ 🏆 Top 3 ODS Más Relevantes │ │ 1. ODS 17: 0.9223 │ │ 2. ODS 16: 0.9183 │ │ 3. ODS 9: 0.9199 │ └─────────────────────────────────────────────────────┘ ``` ### Vista de Visualización Individual ``` ┌─────────────────────────────────────────────────────┐ │ [Pestaña] 📦 1. Box Plot │ ├─────────────────────┬───────────────────────────────┤ │ │ ## 📦 Diagrama de Caja │ │ [Gráfico │ │ │ Interactivo │ ### ¿Qué muestra? │ │ Plotly] │ Esta visualización... │ │ │ │ │ │ ### ¿Cómo leerlo? │ │ │ - Línea central: Mediana │ │ [🔄 Generar] │ - Caja: Rango IQR │ └─────────────────────┴───────────────────────────────┘ ``` --- ## 🌐 Compartir y Colaborar ### Opción 1: Compartir en Red Local ```python # Permite acceso desde otras computadoras en la misma red app.launch( server_name="0.0.0.0", # Ya está configurado por defecto ) ``` **Acceso desde otra computadora:** ``` http://[IP-DEL-SERVIDOR]:7860 ``` ### Opción 2: Compartir Públicamente (72 horas) ```python app.launch(share=True) ``` **Resultado:** ``` Running on local URL: http://127.0.0.1:7860 Running on public URL: https://abc123xyz.gradio.live This share link expires in 72 hours. ``` ### Opción 3: Deployar en la Nube #### **Hugging Face Spaces** (Gratis) 1. Crear cuenta en huggingface.co 2. Crear nuevo Space 3. Subir archivos: - `app_gradio_ods.py` - `visualizaciones_ods.py` - `indicadores_markdown.txt` - `requirements.txt` **requirements.txt:** ``` gradio==5.49.1 pandas numpy matplotlib seaborn plotly ``` 4. Tu app estará en: `https://huggingface.co/spaces/[tu-usuario]/[nombre-app]` --- ## 📚 Estructura de Archivos ``` proyecto/ │ ├── app_gradio_ods.py # ⭐ Aplicación principal ├── visualizaciones_ods.py # Funciones de visualización ├── indicadores_markdown.txt # Datos de entrada │ ├── GUIA_APP_GRADIO.md # 📖 Esta guía ├── README.md # Índice general │ └── outputs/ # Visualizaciones generadas ├── viz1_boxplot_ods.html ├── viz2_heatmap.png └── ... ``` --- ## 🎓 Casos de Uso Avanzados ### Caso 1: Integrar con otros datos ```python # En app_gradio_ods.py, añadir nuevo tab with gr.Tab("📁 Cargar Datos"): file_upload = gr.File(label="Subir archivo CSV/TXT") btn_load = gr.Button("Cargar") def cargar_nuevos_datos(file): df = pd.read_csv(file.name) # Procesar y visualizar return "✓ Datos cargados" btn_load.click(cargar_nuevos_datos, file_upload, output_text) ``` ### Caso 2: Exportar visualizaciones ```python # Añadir botones de descarga with gr.Row(): btn_download_html = gr.Button("📥 Descargar HTML") btn_download_png = gr.Button("📥 Descargar PNG") def exportar_viz(fig, formato): if formato == "html": fig.write_html("visualizacion.html") return "visualizacion.html" else: fig.write_image("visualizacion.png") return "visualizacion.png" ``` ### Caso 3: Filtros dinámicos ```python # Añadir controles interactivos with gr.Row(): ods_select = gr.Dropdown( choices=list(range(1, 18)), label="Filtrar por ODS", multiselect=True ) slider_sim = gr.Slider( minimum=0.85, maximum=0.95, value=0.90, label="Umbral de similaridad" ) def filtrar_datos(ods_list, umbral): df_filtrado = df_global[ (df_global['ods_id'].isin(ods_list)) & (df_global['similaridad_cos'] >= umbral) ] return generar_visualizacion(df_filtrado) ``` --- ## 🔐 Seguridad y Buenas Prácticas ### Recomendaciones 1. ✅ **No exponer datos sensibles** en la app pública 2. ✅ **Usar autenticación** si compartes públicamente 3. ✅ **Limitar acceso** a redes confiables 4. ✅ **Validar inputs** del usuario 5. ✅ **Mantener actualizado** Gradio y dependencias ### Autenticación Básica ```python app.launch( auth=[("usuario1", "pass1"), ("usuario2", "pass2")], auth_message="Acceso restringido - Ingrese credenciales" ) ``` ### Variables de Entorno ```python import os # Usar variables de entorno para credenciales usuario = os.getenv("APP_USERNAME", "admin") password = os.getenv("APP_PASSWORD", "secret") app.launch(auth=(usuario, password)) ``` --- ## 📞 Soporte y Recursos ### Documentación Oficial - **Gradio**: https://www.gradio.app/docs - **Plotly**: https://plotly.com/python/ - **Pandas**: https://pandas.pydata.org/docs/ ### Comunidad - **Gradio Discord**: https://discord.gg/gradio - **Hugging Face Forums**: https://discuss.huggingface.co/ ### Archivos Relacionados - `README.md` - Índice general del proyecto - `GUIA_VISUALIZACIONES_ODS.md` - Explicación de visualizaciones - `DOCUMENTACION_TECNICA_CODIGO.md` - Código técnico explicado - `GUIA_USO_RAPIDO.md` - Casos prácticos --- ## 🎉 Características Futuras (Roadmap) ### En Desarrollo - [ ] Comparación de múltiples iniciativas - [ ] Exportación de reportes en PDF - [ ] Análisis de series temporales - [ ] Integración con APIs de ODS oficiales ### Planeado - [ ] Modo oscuro / claro - [ ] Internacionalización (ES, EN, FR) - [ ] Chat con IA para interpretación - [ ] Dashboard personalizable --- ## 📄 Licencia Este proyecto es de código abierto. Consulta el archivo LICENSE para más detalles. --- ## 🙏 Agradecimientos Desarrollado con: - **Python** - Lenguaje de programación - **Gradio** - Framework de aplicaciones web - **Plotly** - Visualizaciones interactivas - **Pandas** - Análisis de datos - **Matplotlib/Seaborn** - Gráficos estáticos --- ## 📬 Contacto ¿Preguntas? ¿Sugerencias? ¿Encontraste un bug? - 📧 Email: [tu-email@ejemplo.com] - 💬 Issues: [URL del repositorio] - 📖 Wiki: [URL de la wiki] --- **¡Disfruta explorando las visualizaciones ODS! 📊🌍✨** --- *Última actualización: Noviembre 2025*