Llegamos al puente perfecto entre el análisis de datos puros y el desarrollo de aplicaciones. En la Semana 11, uniremos el poder de Pandas (Semana 10) con las interfaces interactivas de Streamlit (Semanas 6-8).

Esta semana es crucial porque los estudiantes aprenderán a construir lo que en la industria se conoce como un Dashboard (Tablero de Control), una herramienta que usarán constantemente para presentar informes dinámicos de suelos, clima o procesos agroindustriales.

Aquí tienes el contenido limpio, diseñado para funcionar directamente en las celdas de Google Colab:


Celda 1: Texto (Markdown)

# SEMANA 11: Visualización Estadística Interactiva (Dashboards)

**Asignatura:** Programación de Computadores con Python
**Programas:** Ingeniería Agrícola, Civil y Agroindustrial

En las semanas anteriores aprendimos a crear interfaces web con Streamlit y a manipular datos tabulares con Pandas. Hoy uniremos esos dos superpoderes. 

En la ingeniería moderna, no basta con tener los datos; hay que saber comunicarlos. Aprenderemos a construir un **Dashboard interactivo**, es decir, una aplicación web donde el usuario pueda cargar una tabla de datos, filtrarla con botones y ver cómo los gráficos cambian en tiempo real.

**Objetivos de Aprendizaje:**
* Integrar la librería Pandas dentro de un script de Streamlit.
* Mostrar tablas completas y resúmenes estadísticos en una interfaz web.
* Utilizar selectores de Streamlit para filtrar un DataFrame interactivamente.
* Generar gráficos dinámicos integrados en la aplicación web.

Celda 2: Texto (Markdown)

## SESIÓN 1: Construyendo el Tablero de Control

En Colab, recuerda que usamos el comando mágico `%%writefile app_datos.py` para guardar el código de nuestra aplicación en un archivo, el cual luego ejecutaremos en la nube.

Vamos a crear una aplicación que simula el control de calidad de materiales o productos. La app mostrará la base de datos, permitirá seleccionar un material específico usando una caja desplegable (`st.selectbox`), y graficará los resultados automáticamente.

Ejecuta la siguiente celda para escribir el código de tu aplicación:

Celda 3: Código (Python)

%%writefile app_datos.py
import streamlit as st
import pandas as pd
import numpy as np

# 1. Configuración de la página
st.set_page_config(page_title="Dashboard de Ingeniería", layout="wide")
st.title("📊 Tablero de Control de Laboratorio")
st.write("Análisis interactivo de ensayos de resistencia y humedad.")

# 2. Creación de datos simulados (En un proyecto real usaríamos pd.read_csv)
datos = {
    "Muestra": ["M1", "M2", "M3", "M4", "M5", "M6"],
    "Material": ["Concreto", "Madera", "Suelo", "Concreto", "Madera", "Suelo"],
    "Resistencia_MPa": [25.4, 12.5, 0.0, 28.1, 14.2, 0.0],
    "Humedad_Porcentaje": [5.2, 15.0, 35.5, 4.8, 12.3, 42.1]
}
df = pd.DataFrame(datos)

# 3. Mostrar la tabla de datos completa
st.subheader("Base de Datos Original")
st.dataframe(df, use_container_width=True)

# 4. Interactividad: Filtrar por material
st.divider()
st.subheader("🔍 Filtro Dinámico")

# Obtenemos los materiales únicos para el menú desplegable
lista_materiales = df["Material"].unique()
material_seleccionado = st.selectbox("Seleccione el material a analizar:", lista_materiales)

# Filtramos el DataFrame según la selección del usuario
df_filtrado = df[df["Material"] == material_seleccionado]

# Mostramos los datos filtrados
st.write("Datos correspondientes a:", material_seleccionado)
st.dataframe(df_filtrado)

# 5. Gráfico interactivo
st.subheader(f"📈 Gráfico de Humedad para {material_seleccionado}")
# Streamlit tiene gráficos rápidos incorporados basados en Pandas
st.bar_chart(data=df_filtrado, x="Muestra", y="Humedad_Porcentaje")

Celda 4: Texto (Markdown)

## SESIÓN 2: Despliegue y Pruebas del Dashboard

El código de nuestro dashboard ya está guardado en el archivo `app_datos.py`. Ahora abriremos un túnel local para interactuar con él desde nuestro navegador, tal como hicimos en la Semana 6.

**Instrucciones de ejecución:**
1. Ejecuta la celda de abajo.
2. Copia la contraseña numérica (IP) que aparecerá en pantalla.
3. Haz clic en el enlace azul de `localtunnel`.
4. Pega la contraseña y haz clic en "Submit".
5. ¡Interactúa con el menú desplegable de tu aplicación y observa cómo cambia el gráfico en tiempo real!

Celda 5: Código (Python)

import urllib
# Obtenemos la IP para usarla como contraseña de seguridad
password = urllib.request.urlopen('https://ipv4.icanhazip.com').read().decode('utf8').strip()
print("-------------------------------------------------------------")
print(f"🔑 COPIA ESTA CONTRASEÑA ANTES DE ABRIR EL ENLACE: {password}")
print("-------------------------------------------------------------")

# Instalamos las herramientas necesarias
!pip install streamlit pandas numpy -q
!npm install localtunnel -g &> /dev/null

# Corremos la nueva aplicación en segundo plano
!streamlit run app_datos.py &> /dev/null &

# Creamos el túnel público
!npx localtunnel --port 8501

Celda 6: Texto (Markdown)

---
### Interacción con el Tutor IA 🤖

Aprovechemos nuestro asistente para entender a profundidad la lógica de los dashboards:

> **PROMPT DE APRENDIZAJE - SEMANA 11:**
> Actúa como un Científico de Datos Senior. He construido mi primer Dashboard interactivo usando Streamlit y Pandas.
> 1) Explícame por qué los Dashboards son una herramienta tan importante en la toma de decisiones en ingeniería.
> 2) En el código usamos `st.dataframe()`. ¿Cuál es la diferencia entre usar `st.dataframe()` y `st.table()` en Streamlit?
> 3) Explícame cómo funciona la lógica detrás de la línea de código que filtra los datos: `df_filtrado = df[df["Material"] == material_seleccionado]`
> 4) Menciona 2 tipos de "widgets" (controles interactivos) adicionales que Streamlit ofrece (aparte de selectbox) que serían útiles para filtrar datos numéricos, como por ejemplo un rango de fechas o de temperaturas.
> Después hazme 3 preguntas para verificar mi comprensión sobre la creación de tableros de control interactivos.

Celda 7: Texto (Markdown)

---
## ACTIVIDAD FINAL: Hoja "Estudia y Aprende"

Consolida los conocimientos de este módulo común generando tu resumen final:

> **PROMPT GLOBAL DE CIERRE:**
> Actúa como tutor experto en Desarrollo de Software Científico. Elabora un RESUMEN BREVE que cumpla estas condiciones:
> 1. Debe caber en UNA SOLA HOJA escrita a mano.
> 2. Lenguaje claro, técnico y aplicado a la ingeniería.
> 3. Debe incluir: El concepto de Dashboard interactivo, cómo se integra Pandas con Streamlit, la utilidad de los selectores (widgets) para filtrar datos en tiempo real, y la facilidad de crear gráficos dinámicos con `st.bar_chart()`.
> 4. Pensado para que yo lo escriba comprendiendo lo esencial.
> Al final agrega una frase de reflexión sobre el poder de presentar datos de forma visual e interactiva al usuario final.

**Instrucción para el estudiante:** En el reverso de tu hoja, dibuja el esquema o boceto de un Dashboard ideal para tu carrera. Identifica qué datos mostraría la tabla principal, qué filtro o botón desplegable le pondrías al usuario, y qué variable iría en el gráfico de barras.

¡Con esto cerramos el ciclo de fundamentos compartidos! Los estudiantes ya saben lógica, versionamiento web, manipulación de datos y visualización interactiva.