La siguiente actividad es un proyecto final integrador, porque une diseño experimental, programación modular en Python, Streamlit, análisis estadístico, visualización, documentación y sustentación. Además, evita el simple “ensayo y error”: el diseño de experimentos busca planear pruebas y analizar datos para obtener evidencia objetiva sobre una situación experimental . También es coherente con la idea de que la experimentación debe ser iterativa y secuencial, no un único intento grande al final .
A continuación se proponen una secuencia de prompts para los estudiantes, organizada por etapas.
Cada grupo debe construir una aplicación web en Streamlit para apoyar el aprendizaje y análisis de diseños experimentales. La app debe incluir, como mínimo:
Página de inicio.
Módulo DCA.
Módulo DBCA.
Módulo DCL.
Módulo DPD.
Módulo de diseños factoriales.
Módulo de metodología de superficie de respuesta, con esta estructura:
La documentación actual de Streamlit permite construir apps
multipágina usando una carpeta pages/, donde cada archivo
.py se reconoce como una página y el archivo principal
funciona como página de inicio (Streamlit
Docs). Para el análisis estadístico en Python,
statsmodels.formula.api.ols() permite crear modelos a
partir de fórmulas y dataframes (Statsmodels).
Para la descarga de archivos desde la app puede usarse
st.download_button() (Streamlit Docs), y para
exportar figuras de Plotly a PNG o PDF puede usarse
write_image(), con Kaleido como dependencia de exportación
estática (Plotly).
Actúa como tutor experto en Python, Streamlit y Diseño Experimental.
Soy estudiante de Ingeniería y debo desarrollar como proyecto final una aplicación web en Streamlit para analizar diseños experimentales.
La app debe incluir los siguientes módulos:
1. Página de inicio.
2. DCA: Diseño Completamente al Azar.
3. DBCA: Diseño en Bloques Completamente al Azar.
4. DCL: Diseño en Cuadro Latino.
5. DPD: Diseño en Parcelas Divididas.
6. Diseños factoriales.
7. Metodología de Superficie de Respuesta, con:
- Modelo de primer orden.
- Trayectoria de máximo ascenso.
- Modelo de segundo orden.
- Punto estacionario.
- Superficie 3D.
- Curvas de nivel.
- Exportación de figuras a PNG y PDF.
Antes de escribir código, ayúdame a comprender:
- Qué debe hacer cada módulo.
- Qué entradas debe pedir al usuario.
- Qué cálculos estadísticos debe realizar.
- Qué tablas y gráficas debe mostrar.
- Cómo se podría organizar la app de forma modular.
Respóndeme con un plan claro de desarrollo por etapas.
Ahora necesito crear la estructura inicial del proyecto en VSCode.
Propón una estructura profesional de carpetas y archivos para una app multipágina de Streamlit llamada:
app_diseno_experimental
La estructura debe incluir:
- app.py como página principal.
- Carpeta pages/ para las páginas de cada diseño.
- Carpeta utils/ para funciones reutilizables.
- Carpeta data/ para ejemplos de datos.
- Carpeta assets/ para imágenes o recursos.
- Carpeta exports/ para archivos generados.
- requirements.txt.
- README.md.
- .gitignore.
Explícame la función de cada carpeta y cada archivo.
Luego dame los comandos de terminal necesarios para:
1. Crear el proyecto.
2. Crear el entorno virtual.
3. Activar el entorno virtual en Windows PowerShell.
4. Instalar las librerías necesarias.
5. Ejecutar la app con streamlit run app.py.
requirements.txtAyúdame a crear el archivo requirements.txt para una aplicación de Diseño Experimental en Streamlit.
La app debe usar:
- streamlit.
- pandas.
- numpy.
- scipy.
- statsmodels.
- matplotlib.
- plotly.
- kaleido.
- openpyxl.
- xlsxwriter.
- pingouin, si es útil para algunas pruebas estadísticas.
Indícame:
1. El contenido recomendado del archivo requirements.txt.
2. Para qué sirve cada librería.
3. Qué librerías son obligatorias y cuáles son opcionales.
4. Qué problemas podrían aparecer al instalar kaleido o exportar figuras.
Crea el código completo de app.py para una aplicación multipágina en Streamlit llamada:
App de Diseño Experimental
La página principal debe incluir:
- Título.
- Presentación del propósito de la app.
- Breve explicación del diseño experimental.
- Lista de módulos disponibles:
- DCA.
- DBCA.
- DCL.
- DPD.
- Diseños factoriales.
- Superficie de respuesta.
- Instrucciones para el usuario.
- Advertencia académica: la app apoya el aprendizaje, pero el estudiante debe interpretar los resultados.
El código debe estar bien comentado, ser claro y usar st.set_page_config.
No incluyas todavía los cálculos estadísticos.
Desarrolla la primera página de la app Streamlit para el Diseño Completamente al Azar.
El archivo se llamará:
pages/01_DCA.py
Debe permitir:
1. Cargar un archivo CSV o Excel.
2. Seleccionar la variable de tratamiento.
3. Seleccionar la variable de respuesta.
4. Mostrar la tabla de datos.
5. Ajustar el modelo ANOVA de un factor usando statsmodels.
6. Mostrar la tabla ANOVA.
7. Mostrar medias por tratamiento.
8. Graficar cajas por tratamiento.
9. Realizar prueba de Tukey si el efecto de tratamientos es significativo.
10. Mostrar una interpretación automática en lenguaje sencillo.
Incluye un dataset de ejemplo dentro del mismo código para que la app funcione aunque el usuario no cargue archivo.
El código debe estar bien comentado y ser fácil de entender para estudiantes.
utils/Ya tengo funcionando la página DCA en Streamlit.
Ahora quiero refactorizar el código para hacerlo más profesional.
Crea un módulo:
utils/anova_utils.py
Debe incluir funciones para:
1. Cargar datos.
2. Validar columnas.
3. Ajustar modelo ANOVA con statsmodels.
4. Generar tabla ANOVA.
5. Calcular medias por tratamiento.
6. Ejecutar prueba de Tukey.
7. Generar interpretación básica.
Luego modifica pages/01_DCA.py para que use esas funciones.
Explícame:
- Qué se movió a utils/.
- Por qué es mejor esta estructura.
- Cómo importar correctamente las funciones para evitar errores como ModuleNotFoundError.
Ahora desarrolla el módulo para Diseño en Bloques Completamente al Azar.
El archivo se llamará:
pages/02_DBCA.py
Debe permitir:
1. Cargar CSV o Excel.
2. Seleccionar:
- Variable de bloques.
- Variable de tratamientos.
- Variable de respuesta.
3. Mostrar la tabla de datos.
4. Ajustar el modelo:
respuesta ~ C(tratamiento) + C(bloque)
5. Mostrar la tabla ANOVA.
6. Mostrar medias por tratamiento.
7. Mostrar medias por bloque.
8. Graficar respuesta por tratamiento y por bloque.
9. Hacer prueba de Tukey para tratamientos.
10. Incluir una interpretación automática.
Incluye un dataset de ejemplo de interés en Ingeniería Agrícola o Agroindustrial.
Usa funciones reutilizables desde utils/anova_utils.py cuando sea posible.
Desarrolla el módulo para Diseño en Cuadro Latino.
El archivo será:
pages/03_DCL.py
La app debe permitir:
1. Cargar datos.
2. Seleccionar:
- Variable fila.
- Variable columna.
- Variable tratamiento.
- Variable respuesta.
3. Validar que el diseño tenga estructura de cuadro latino.
4. Mostrar una tabla resumen del diseño.
5. Ajustar el modelo:
respuesta ~ C(fila) + C(columna) + C(tratamiento)
6. Mostrar tabla ANOVA.
7. Mostrar medias por tratamiento.
8. Mostrar gráfica de medias.
9. Mostrar prueba de Tukey para tratamientos.
10. Mostrar una explicación de:
- Qué controla el factor fila.
- Qué controla el factor columna.
- Qué representa el tratamiento.
- Cómo interpretar la significancia de tratamientos.
Incluye un ejemplo aplicado a Ingeniería Agrícola o Agroindustrial.
El código debe ser modular, comentado y compatible con la estructura actual del proyecto.
Este módulo se justifica porque el DCL aparece como diseño con doble control local y se estudia junto con filas, columnas y tratamientos en los textos de diseño experimental .
Desarrolla el módulo para Diseño en Parcelas Divididas.
El archivo será:
pages/04_DPD.py
La app debe trabajar con un experimento donde:
- Factor principal: aplicado a parcelas grandes.
- Factor secundario: aplicado a subparcelas.
- Bloques o repeticiones.
- Variable respuesta.
Debe permitir:
1. Cargar datos.
2. Seleccionar:
- Bloque.
- Factor principal.
- Factor secundario.
- Variable respuesta.
3. Mostrar la estructura del diseño.
4. Ajustar un modelo adecuado para parcelas divididas.
5. Mostrar una tabla ANOVA diferenciando:
- Error de parcela principal.
- Error de subparcela.
6. Mostrar medias por factor principal.
7. Mostrar medias por factor secundario.
8. Mostrar interacción entre factor principal y factor secundario.
9. Graficar la interacción.
10. Generar interpretación automática.
Incluye un ejemplo con riego y dosis de nitrógeno en maíz.
Explica cuidadosamente las limitaciones del análisis en Python y cómo validar los resultados con R si fuera necesario.
Desarrolla el módulo para diseños factoriales.
El archivo será:
pages/05_Factoriales.py
Debe permitir analizar diseños factoriales de dos o más factores.
La app debe permitir:
1. Cargar datos.
2. Seleccionar variable respuesta.
3. Seleccionar dos o más factores.
4. Construir automáticamente la fórmula del modelo con interacciones.
5. Ajustar el modelo usando statsmodels.
6. Mostrar tabla ANOVA.
7. Mostrar efectos principales.
8. Mostrar interacciones.
9. Graficar:
- Medias por factor.
- Gráficas de interacción.
10. Generar una interpretación automática.
Incluye un ejemplo aplicado a Ingeniería Agroindustrial, por ejemplo:
- Temperatura.
- Tiempo.
- Tipo de formulación.
- Rendimiento o calidad del producto.
El código debe estar bien documentado.
Desarrolla el módulo de Metodología de Superficie de Respuesta en Streamlit.
El archivo será:
pages/06_RSM.py
La página debe tener exactamente estas siete secciones principales:
1. Modelo de primer orden.
2. Trayectoria de máximo ascenso.
3. Modelo de segundo orden.
4. Punto estacionario.
5. Superficie 3D.
6. Curvas de nivel.
7. Exportación de figuras a PNG y PDF.
La app debe permitir:
- Cargar datos con variables codificadas x1, x2 y respuesta y.
- Ajustar un modelo de primer orden.
- Calcular la trayectoria de máximo ascenso a partir de los coeficientes lineales.
- Ajustar un modelo de segundo orden con términos cuadráticos e interacción.
- Calcular el punto estacionario.
- Clasificar el punto estacionario si es posible.
- Generar malla de predicción.
- Mostrar superficie 3D con Plotly.
- Mostrar curvas de nivel.
- Exportar las figuras a PNG y PDF.
Incluye un dataset de ejemplo dentro del código.
Usa funciones auxiliares en utils/rsm_utils.py y utils/rsm_plots.py.
El código debe estar muy bien comentado, explicando cada fórmula y cada cálculo.
La RSM debe desarrollarse con especial cuidado porque los textos la presentan como una metodología secuencial: primer modelo, búsqueda de mejora mediante trayectoria de ascenso y posterior análisis de segundo orden cerca del óptimo .
utils/El módulo RSM ya funciona, pero quiero refactorizarlo.
Crea los siguientes archivos:
utils/rsm_coding.py
utils/rsm_models.py
utils/rsm_stationary.py
utils/rsm_mesh.py
utils/rsm_plots.py
utils/rsm_export.py
Cada archivo debe encargarse de:
1. rsm_coding.py:
- Codificación y decodificación de variables.
- Conversión entre valores reales y valores codificados.
2. rsm_models.py:
- Ajuste del modelo de primer orden.
- Ajuste del modelo de segundo orden.
- Extracción de coeficientes.
3. rsm_stationary.py:
- Cálculo del punto estacionario.
- Matriz B de términos cuadráticos.
- Vector b de coeficientes lineales.
- Clasificación básica del punto estacionario.
4. rsm_mesh.py:
- Generación de mallas para superficies y contornos.
5. rsm_plots.py:
- Gráfica 3D.
- Curvas de nivel.
- Trayectoria de máximo ascenso.
6. rsm_export.py:
- Exportación de figuras a PNG.
- Exportación de figuras a PDF.
Luego reescribe pages/06_RSM.py usando esos módulos.
Incluye instrucciones para evitar errores de importación.
Agrega a la app funciones de exportación.
Quiero que cada módulo permita descargar:
1. La tabla ANOVA en Excel.
2. Las medias por tratamiento en Excel.
3. Los resultados de Tukey en Excel, si aplica.
4. Las figuras principales en PNG.
5. Las figuras principales en PDF.
6. Un breve reporte en formato Markdown o TXT con interpretación básica.
Usa st.download_button.
Crea un archivo:
utils/export_utils.py
con funciones reutilizables para convertir dataframes a Excel en memoria usando BytesIO.
Explícame cómo se conectan estas funciones con Streamlit.
Agrega a los módulos DCA, DBCA, DCL y factoriales una sección de diagnóstico de supuestos.
Debe incluir:
1. Residuos vs valores ajustados.
2. Histograma de residuos.
3. QQ plot.
4. Prueba de Shapiro-Wilk para normalidad.
5. Prueba de Levene o Bartlett para homogeneidad de varianzas, cuando aplique.
6. Interpretación sencilla para estudiantes.
Crea funciones reutilizables en:
utils/diagnostics_utils.py
Luego muestra cómo integrar esas funciones en cada página.
Este punto es importante porque la verificación de supuestos, las pruebas de normalidad y las pruebas de homogeneidad de varianzas son parte esencial del análisis posterior al ANOVA .
Quiero mejorar la app para que sea más robusta.
Agrega validaciones para:
1. Archivos vacíos.
2. Columnas no seleccionadas.
3. Variables de respuesta no numéricas.
4. Diseños desbalanceados.
5. Datos faltantes.
6. Nombres de columnas con espacios.
7. Errores al ajustar modelos.
8. Problemas al exportar figuras.
Los mensajes deben ser pedagógicos, no técnicos, para que un estudiante comprenda qué debe corregir.
Crea funciones en:
utils/validation_utils.py
y muestra cómo usarlas en DCA, DBCA, DCL y RSM.
Escribe un README.md completo para el repositorio de GitHub de esta app.
Debe incluir:
1. Título del proyecto.
2. Descripción general.
3. Objetivo académico.
4. Diseños experimentales incluidos.
5. Tecnologías usadas.
6. Estructura del proyecto.
7. Instalación paso a paso.
8. Ejecución local.
9. Ejemplos de uso.
10. Capturas sugeridas.
11. Limitaciones actuales.
12. Posibles mejoras.
13. Créditos del grupo.
14. Referencias bibliográficas básicas.
El tono debe ser académico, claro y profesional.
Ayúdame a preparar el proyecto para subirlo a GitHub.
Necesito:
1. Archivo .gitignore adecuado para Python y Streamlit.
2. Revisión de la estructura de carpetas.
3. Comandos para:
- git init
- git add .
- git commit
- crear repositorio remoto
- git remote add origin
- git push
4. Recomendaciones para escribir buenos mensajes de commit.
5. Recomendaciones para que el profesor pueda revisar fácilmente el repositorio.
Explícame cómo desplegar esta app en Streamlit Community Cloud desde GitHub.
Incluye:
1. Requisitos previos.
2. Archivos obligatorios.
3. Revisión del requirements.txt.
4. Selección del archivo principal app.py.
5. Posibles errores comunes.
6. Cómo corregir errores de dependencias.
7. Qué hacer si la app funciona localmente pero falla en la nube.
8. Cómo compartir el enlace final con el profesor.
Ayúdame a preparar la sustentación final del proyecto.
La presentación debe durar entre 10 y 15 minutos.
Organiza un guion con esta estructura:
1. Presentación del grupo.
2. Problema académico que resuelve la app.
3. Diseños experimentales implementados.
4. Estructura técnica del proyecto.
5. Demostración de la app.
6. Ejemplo de análisis completo.
7. Interpretación estadística.
8. Dificultades encontradas.
9. Mejoras futuras.
10. Conclusión.
Incluye qué debe decir cada integrante del grupo.
Actúa como evaluador del proyecto final.
Voy a pegarte:
1. La estructura de carpetas.
2. El contenido del README.md.
3. El archivo requirements.txt.
4. El código principal de app.py.
5. El código de una o varias páginas.
6. El enlace de GitHub, si lo tengo.
7. El enlace de la app desplegada, si lo tengo.
Revisa:
- Organización del proyecto.
- Calidad del código.
- Modularidad.
- Claridad de los comentarios.
- Correctitud estadística.
- Funcionamiento en Streamlit.
- Posibles errores.
- Mejoras necesarias antes de entregar.
Devuélveme una lista priorizada de correcciones.
Me aparece este error:
ModuleNotFoundError: No module named 'utils.rsm_plots'
Esta es mi estructura de carpetas:
[pego aquí la estructura]
Este es el archivo desde donde intento importar:
[pego aquí el código]
Ayúdame a diagnosticar el problema y corrige los imports. Explícame si debo agregar __init__.py, cambiar la ruta de ejecución o modificar la estructura del proyecto.
La app funciona en mi computador, pero falla en Streamlit Cloud.
Este es el error:
[pego aquí el error completo]
Este es mi requirements.txt:
[pego aquí requirements.txt]
Esta es mi estructura de archivos:
[pego aquí estructura]
Ayúdame a identificar la causa y dame la corrección exacta.
El modelo ANOVA no se ajusta correctamente.
Este es mi dataframe:
[pego las primeras filas]
Esta es la fórmula que estoy usando:
[pego la fórmula]
Este es el error:
[pego el error completo]
Ayúdame a corregir el modelo y explícame qué estaba mal desde el punto de vista estadístico y desde el punto de vista de Python.
Cada grupo debería entregar:
| Criterio | Ponderación |
|---|---|
| Funcionamiento general de la app | 20 % |
| Implementación correcta de los diseños experimentales | 25 % |
| Modularidad y organización del código | 15 % |
| Visualizaciones, tablas e interpretación | 15 % |
| Exportación de resultados y figuras | 10 % |
| README, GitHub y despliegue | 10 % |
| Sustentación oral | 5 % |
Les conviene desarrollar primero una app mínima funcional con DCA, luego extenderla a DBCA y DCL, después incorporar DPD y factoriales, y dejar la superficie de respuesta como módulo avanzado. Así los estudiantes no se bloquean intentando construir todo desde el inicio, sino que avanzan por versiones funcionales sucesivas.
Static image export in Python
”