Update app.py
Browse files
app.py
CHANGED
@@ -111,8 +111,8 @@ def generar_graficos(df_valid, n_replicas, unidad_medida):
|
|
111 |
fmt='o',
|
112 |
color='blue',
|
113 |
ecolor='lightgray',
|
114 |
-
elinewidth=
|
115 |
-
capsize=
|
116 |
label='Datos Reales'
|
117 |
)
|
118 |
else:
|
@@ -262,7 +262,7 @@ Fecha: {datetime.now().strftime('%d/%m/%Y %H:%M')}
|
|
262 |
|
263 |
def actualizar_analisis(df, n_replicas, unidad_medida):
|
264 |
if df is None or df.empty:
|
265 |
-
return "Error en los datos", None, "No se pueden generar an谩lisis"
|
266 |
|
267 |
col_predicha_num = "Concentraci贸n Predicha Num茅rica"
|
268 |
col_real_promedio = f"Concentraci贸n Real Promedio ({unidad_medida})"
|
@@ -277,7 +277,7 @@ def actualizar_analisis(df, n_replicas, unidad_medida):
|
|
277 |
df_valid = df.dropna(subset=[col_predicha_num, col_real_promedio])
|
278 |
|
279 |
if len(df_valid) < 2:
|
280 |
-
return "Se necesitan m谩s datos", None, "Se requieren al menos dos valores reales para el an谩lisis"
|
281 |
|
282 |
# Calcular la regresi贸n y agregar 'Ajuste Lineal'
|
283 |
slope, intercept, r_value, p_value, std_err = stats.linregress(df_valid[col_predicha_num], df_valid[col_real_promedio])
|
@@ -286,7 +286,7 @@ def actualizar_analisis(df, n_replicas, unidad_medida):
|
|
286 |
fig = generar_graficos(df_valid, n_replicas, unidad_medida)
|
287 |
informe, estado = generar_informe_completo(df_valid, n_replicas, unidad_medida)
|
288 |
|
289 |
-
return estado, fig, informe
|
290 |
|
291 |
def exportar_informe_word(df_valid, informe_md, unidad_medida):
|
292 |
# Crear documento Word
|
@@ -463,6 +463,9 @@ def generar_datos_sinteticos_evento(df, n_replicas, unidad_medida):
|
|
463 |
datos_sinteticos = np.round(datos_sinteticos, 2)
|
464 |
df[col_real] = datos_sinteticos
|
465 |
|
|
|
|
|
|
|
466 |
return df
|
467 |
|
468 |
def actualizar_tabla_evento(df, n_filas, concentracion, unidad, n_replicas):
|
@@ -470,8 +473,8 @@ def actualizar_tabla_evento(df, n_filas, concentracion, unidad, n_replicas):
|
|
470 |
df_new = generar_tabla(n_filas, concentracion, unidad, n_replicas)
|
471 |
|
472 |
# Mapear columnas
|
473 |
-
col_real_new = [col for col in df_new.columns if 'Concentraci贸n Real' in col]
|
474 |
-
col_real_old = [col for col in df.columns if 'Concentraci贸n Real' in col]
|
475 |
|
476 |
# Reemplazar valores existentes en "Concentraci贸n Real"
|
477 |
for col_new, col_old in zip(col_real_new, col_real_old):
|
@@ -480,6 +483,9 @@ def actualizar_tabla_evento(df, n_filas, concentracion, unidad, n_replicas):
|
|
480 |
if idx in df.index:
|
481 |
df_new.at[idx, col_new] = df.at[idx, col_old]
|
482 |
|
|
|
|
|
|
|
483 |
return df_new
|
484 |
|
485 |
# Interfaz Gradio
|
@@ -555,7 +561,7 @@ with gr.Blocks(theme=gr.themes.Soft()) as interfaz:
|
|
555 |
|
556 |
# Eventos
|
557 |
input_components = [tabla_output]
|
558 |
-
output_components = [estado_output, graficos_output, informe_output]
|
559 |
|
560 |
# Evento al presionar el bot贸n Calcular
|
561 |
calcular_btn.click(
|
@@ -666,7 +672,9 @@ with gr.Blocks(theme=gr.themes.Soft()) as interfaz:
|
|
666 |
df = generar_tabla(7, 2000000, "UFC", n_replicas)
|
667 |
# Valores reales de ejemplo
|
668 |
df[f"Concentraci贸n Real 1 (UFC)"] = [2000000, 1600000, 1200000, 800000, 400000, 200000, 100000]
|
669 |
-
|
|
|
|
|
670 |
return (
|
671 |
2000000,
|
672 |
"UFC",
|
|
|
111 |
fmt='o',
|
112 |
color='blue',
|
113 |
ecolor='lightgray',
|
114 |
+
elinewidth=2,
|
115 |
+
capsize=3,
|
116 |
label='Datos Reales'
|
117 |
)
|
118 |
else:
|
|
|
262 |
|
263 |
def actualizar_analisis(df, n_replicas, unidad_medida):
|
264 |
if df is None or df.empty:
|
265 |
+
return "Error en los datos", None, "No se pueden generar an谩lisis", df
|
266 |
|
267 |
col_predicha_num = "Concentraci贸n Predicha Num茅rica"
|
268 |
col_real_promedio = f"Concentraci贸n Real Promedio ({unidad_medida})"
|
|
|
277 |
df_valid = df.dropna(subset=[col_predicha_num, col_real_promedio])
|
278 |
|
279 |
if len(df_valid) < 2:
|
280 |
+
return "Se necesitan m谩s datos", None, "Se requieren al menos dos valores reales para el an谩lisis", df
|
281 |
|
282 |
# Calcular la regresi贸n y agregar 'Ajuste Lineal'
|
283 |
slope, intercept, r_value, p_value, std_err = stats.linregress(df_valid[col_predicha_num], df_valid[col_real_promedio])
|
|
|
286 |
fig = generar_graficos(df_valid, n_replicas, unidad_medida)
|
287 |
informe, estado = generar_informe_completo(df_valid, n_replicas, unidad_medida)
|
288 |
|
289 |
+
return estado, fig, informe, df
|
290 |
|
291 |
def exportar_informe_word(df_valid, informe_md, unidad_medida):
|
292 |
# Crear documento Word
|
|
|
463 |
datos_sinteticos = np.round(datos_sinteticos, 2)
|
464 |
df[col_real] = datos_sinteticos
|
465 |
|
466 |
+
# Calcular promedio y desviaci贸n est谩ndar
|
467 |
+
df = calcular_promedio_desviacion(df, n_replicas, unidad_medida)
|
468 |
+
|
469 |
return df
|
470 |
|
471 |
def actualizar_tabla_evento(df, n_filas, concentracion, unidad, n_replicas):
|
|
|
473 |
df_new = generar_tabla(n_filas, concentracion, unidad, n_replicas)
|
474 |
|
475 |
# Mapear columnas
|
476 |
+
col_real_new = [col for col in df_new.columns if 'Concentraci贸n Real' in col and 'Promedio' not in col and 'Desviaci贸n' not in col]
|
477 |
+
col_real_old = [col for col in df.columns if 'Concentraci贸n Real' in col and 'Promedio' not in col and 'Desviaci贸n' not in col]
|
478 |
|
479 |
# Reemplazar valores existentes en "Concentraci贸n Real"
|
480 |
for col_new, col_old in zip(col_real_new, col_real_old):
|
|
|
483 |
if idx in df.index:
|
484 |
df_new.at[idx, col_new] = df.at[idx, col_old]
|
485 |
|
486 |
+
# Recalcular promedio y desviaci贸n est谩ndar
|
487 |
+
df_new = calcular_promedio_desviacion(df_new, n_replicas, unidad)
|
488 |
+
|
489 |
return df_new
|
490 |
|
491 |
# Interfaz Gradio
|
|
|
561 |
|
562 |
# Eventos
|
563 |
input_components = [tabla_output]
|
564 |
+
output_components = [estado_output, graficos_output, informe_output, tabla_output]
|
565 |
|
566 |
# Evento al presionar el bot贸n Calcular
|
567 |
calcular_btn.click(
|
|
|
672 |
df = generar_tabla(7, 2000000, "UFC", n_replicas)
|
673 |
# Valores reales de ejemplo
|
674 |
df[f"Concentraci贸n Real 1 (UFC)"] = [2000000, 1600000, 1200000, 800000, 400000, 200000, 100000]
|
675 |
+
# Calcular promedio y desviaci贸n est谩ndar
|
676 |
+
df = calcular_promedio_desviacion(df, n_replicas, "UFC")
|
677 |
+
estado, fig, informe, df = actualizar_analisis(df, n_replicas, "UFC")
|
678 |
return (
|
679 |
2000000,
|
680 |
"UFC",
|