Update app.py
Browse files
app.py
CHANGED
@@ -83,13 +83,13 @@ def generar_graficos(df_valid, n_replicas, unidad_medida, palette_puntos, estilo
|
|
83 |
col_desviacion = f"Desviaci贸n Est谩ndar ({unidad_medida})"
|
84 |
|
85 |
# Convertir a num茅rico
|
86 |
-
df_valid
|
87 |
-
df_valid
|
88 |
-
df_valid
|
89 |
|
90 |
# Calcular regresi贸n lineal
|
91 |
slope, intercept, r_value, p_value, std_err = stats.linregress(df_valid[col_predicha_num], df_valid[col_real_promedio])
|
92 |
-
df_valid
|
93 |
|
94 |
# Configurar estilos
|
95 |
sns.set(style="whitegrid")
|
@@ -229,8 +229,8 @@ def generar_informe_completo(df_valid, n_replicas, unidad_medida):
|
|
229 |
col_real_promedio = f"Concentraci贸n Real Promedio ({unidad_medida})"
|
230 |
|
231 |
# Convertir a num茅rico
|
232 |
-
df_valid
|
233 |
-
df_valid
|
234 |
|
235 |
# Calcular estad铆sticas
|
236 |
slope, intercept, r_value, p_value, std_err = stats.linregress(df_valid[col_predicha_num], df_valid[col_real_promedio])
|
@@ -267,22 +267,10 @@ Fecha: {datetime.now().strftime('%d/%m/%Y %H:%M')}
|
|
267 |
"""
|
268 |
return informe, evaluacion['estado']
|
269 |
|
270 |
-
def actualizar_analisis(df, n_replicas, unidad_medida
|
271 |
if df is None or df.empty:
|
272 |
return "Error en los datos", None, "No se pueden generar an谩lisis", df
|
273 |
|
274 |
-
# Actualizar los valores de las r茅plicas desde los cuadros de texto
|
275 |
-
for i, replica in enumerate(replicas):
|
276 |
-
if replica is not None:
|
277 |
-
col_real = f"Concentraci贸n Real {i + 1} ({unidad_medida})"
|
278 |
-
df.loc[0, col_real] = replica
|
279 |
-
|
280 |
-
# Ajustar valores de absorbancia reales por el valor del blanco
|
281 |
-
for i in range(1, n_replicas + 1):
|
282 |
-
col_real = f"Concentraci贸n Real {i} ({unidad_medida})"
|
283 |
-
df.loc[:, col_real] = pd.to_numeric(df[col_real], errors='coerce')
|
284 |
-
df.loc[:, col_real] = df[col_real] - absorbancia_blanco
|
285 |
-
|
286 |
# Calcular promedio y desviaci贸n est谩ndar dependiendo de las r茅plicas
|
287 |
df = calcular_promedio_desviacion(df, n_replicas, unidad_medida)
|
288 |
|
@@ -290,8 +278,8 @@ def actualizar_analisis(df, n_replicas, unidad_medida, absorbancia_blanco, *repl
|
|
290 |
col_real_promedio = f"Concentraci贸n Real Promedio ({unidad_medida})"
|
291 |
|
292 |
# Convertir columnas a num茅rico
|
293 |
-
df
|
294 |
-
df
|
295 |
|
296 |
df_valid = df.dropna(subset=[col_predicha_num, col_real_promedio])
|
297 |
|
@@ -300,7 +288,7 @@ def actualizar_analisis(df, n_replicas, unidad_medida, absorbancia_blanco, *repl
|
|
300 |
|
301 |
# Calcular la regresi贸n y agregar 'Ajuste Lineal'
|
302 |
slope, intercept, r_value, p_value, std_err = stats.linregress(df_valid[col_predicha_num], df_valid[col_real_promedio])
|
303 |
-
df_valid
|
304 |
|
305 |
# Generar gr谩fico con opciones predeterminadas
|
306 |
fig = generar_graficos(
|
@@ -331,8 +319,8 @@ def actualizar_graficos(df, n_replicas, unidad_medida,
|
|
331 |
col_real_promedio = f"Concentraci贸n Real Promedio ({unidad_medida})"
|
332 |
|
333 |
# Convertir columnas a num茅rico
|
334 |
-
df
|
335 |
-
df
|
336 |
|
337 |
df_valid = df.dropna(subset=[col_predicha_num, col_real_promedio])
|
338 |
|
@@ -442,14 +430,14 @@ def exportar_informe_latex(df_valid, informe_md):
|
|
442 |
f.write(informe_tex)
|
443 |
return filename
|
444 |
|
445 |
-
def exportar_word(df, informe_md, unidad_medida
|
446 |
df_valid = df.copy()
|
447 |
col_predicha_num = "Concentraci贸n Predicha Num茅rica"
|
448 |
col_real_promedio = f"Concentraci贸n Real Promedio ({unidad_medida})"
|
449 |
|
450 |
# Convertir columnas a num茅rico
|
451 |
-
df_valid
|
452 |
-
df_valid
|
453 |
|
454 |
df_valid = df_valid.dropna(subset=[col_predicha_num, col_real_promedio])
|
455 |
|
@@ -466,8 +454,8 @@ def exportar_latex(df, informe_md):
|
|
466 |
col_real_promedio = [col for col in df_valid.columns if 'Real Promedio' in col][0]
|
467 |
|
468 |
# Convertir columnas a num茅rico
|
469 |
-
df_valid
|
470 |
-
df_valid
|
471 |
|
472 |
df_valid = df_valid.dropna(subset=[col_predicha_num, col_real_promedio])
|
473 |
|
@@ -478,26 +466,6 @@ def exportar_latex(df, informe_md):
|
|
478 |
|
479 |
return filename # Retornamos el nombre del archivo
|
480 |
|
481 |
-
def limpiar_datos(n_replicas):
|
482 |
-
df = generar_tabla(7, 1.0, "OD", n_replicas)
|
483 |
-
return (
|
484 |
-
1.0, # Concentraci贸n Inicial
|
485 |
-
"OD", # Unidad de Medida
|
486 |
-
7, # N煤mero de filas
|
487 |
-
df, # Tabla Output
|
488 |
-
"", # Estado Output
|
489 |
-
None, # Gr谩ficos Output
|
490 |
-
"" # Informe Output
|
491 |
-
)
|
492 |
-
|
493 |
-
def subir_datos_replica(df, n_replicas, unidad_medida, datos_replica):
|
494 |
-
df = df.copy()
|
495 |
-
for i, dato in enumerate(datos_replica):
|
496 |
-
if dato is not None:
|
497 |
-
col_real = f"Concentraci贸n Real {i + 1} ({unidad_medida})"
|
498 |
-
df.loc[0, col_real] = dato
|
499 |
-
return df
|
500 |
-
|
501 |
# Funciones de ejemplo
|
502 |
def cargar_ejemplo_ufc(n_replicas):
|
503 |
df = generar_tabla(7, 2000000, "UFC", n_replicas)
|
@@ -519,20 +487,32 @@ def cargar_ejemplo_od(n_replicas):
|
|
519 |
df[f"Concentraci贸n Real {i} (OD)"] = valores_reales
|
520 |
return 1.0, "OD", 7, df
|
521 |
|
522 |
-
def
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
523 |
df = df.copy()
|
524 |
col_predicha_num = "Concentraci贸n Predicha Num茅rica"
|
525 |
|
526 |
# Generar datos sint茅ticos para cada r茅plica
|
527 |
for i in range(1, n_replicas + 1):
|
528 |
col_real = f"Concentraci贸n Real {i} ({unidad_medida})"
|
529 |
-
df
|
530 |
desviacion_std = 0.05 * df[col_predicha_num].mean() # 5% de la media como desviaci贸n est谩ndar
|
531 |
valores_predichos = df[col_predicha_num].astype(float).values
|
532 |
datos_sinteticos = valores_predichos + np.random.normal(0, desviacion_std, size=len(valores_predichos))
|
533 |
datos_sinteticos = np.maximum(0, datos_sinteticos) # Asegurar que no haya valores negativos
|
534 |
datos_sinteticos = np.round(datos_sinteticos, 2)
|
535 |
-
df
|
536 |
|
537 |
return df
|
538 |
|
@@ -546,7 +526,7 @@ def actualizar_tabla_evento(df, n_filas, concentracion, unidad, n_replicas):
|
|
546 |
|
547 |
# Reemplazar valores existentes en "Concentraci贸n Real"
|
548 |
for col_new, col_old in zip(col_real_new, col_real_old):
|
549 |
-
df_new
|
550 |
for idx in df_new.index:
|
551 |
if idx in df.index:
|
552 |
df_new.at[idx, col_new] = df.at[idx, col_old]
|
@@ -563,14 +543,14 @@ with gr.Blocks(theme=gr.themes.Soft()) as interfaz:
|
|
563 |
with gr.Tab("馃摑 Datos de Calibraci贸n"):
|
564 |
with gr.Row():
|
565 |
concentracion_input = gr.Number(
|
566 |
-
value=
|
567 |
label="Concentraci贸n Inicial",
|
568 |
-
precision=
|
569 |
)
|
570 |
unidad_input = gr.Textbox(
|
571 |
-
value="
|
572 |
label="Unidad de Medida",
|
573 |
-
placeholder="
|
574 |
)
|
575 |
filas_slider = gr.Slider(
|
576 |
minimum=1,
|
@@ -593,26 +573,17 @@ with gr.Blocks(theme=gr.themes.Soft()) as interfaz:
|
|
593 |
step=1,
|
594 |
label="N煤mero de R茅plicas"
|
595 |
)
|
596 |
-
absorbancia_blanco_input = gr.Number(
|
597 |
-
value=0.0,
|
598 |
-
label="Absorbancia del Blanco",
|
599 |
-
precision=2
|
600 |
-
)
|
601 |
|
602 |
with gr.Row():
|
603 |
calcular_btn = gr.Button("馃攧 Calcular", variant="primary")
|
604 |
limpiar_btn = gr.Button("馃棏 Limpiar Datos", variant="secondary")
|
605 |
ajustar_decimales_btn = gr.Button("馃洜 Ajustar Decimales", variant="secondary")
|
606 |
-
subir_datos_btn = gr.Button("馃摛 Subir Datos de R茅plica", variant="secondary")
|
607 |
|
608 |
with gr.Row():
|
609 |
ejemplo_ufc_btn = gr.Button("馃搵 Cargar Ejemplo UFC", variant="secondary")
|
610 |
ejemplo_od_btn = gr.Button("馃搵 Cargar Ejemplo OD", variant="secondary")
|
611 |
sinteticos_btn = gr.Button("馃И Generar Datos Sint茅ticos", variant="secondary")
|
612 |
|
613 |
-
with gr.Row():
|
614 |
-
replica_inputs = [gr.Textbox(label=f"R茅plica {i + 1}") for i in range(10)]
|
615 |
-
|
616 |
tabla_output = gr.DataFrame(
|
617 |
wrap=True,
|
618 |
label="Tabla de Datos",
|
@@ -690,7 +661,7 @@ with gr.Blocks(theme=gr.themes.Soft()) as interfaz:
|
|
690 |
# Evento al presionar el bot贸n Calcular
|
691 |
calcular_btn.click(
|
692 |
fn=actualizar_analisis,
|
693 |
-
inputs=[tabla_output, replicas_slider, unidad_input
|
694 |
outputs=output_components
|
695 |
)
|
696 |
|
@@ -715,13 +686,6 @@ with gr.Blocks(theme=gr.themes.Soft()) as interfaz:
|
|
715 |
outputs=[concentracion_input, unidad_input, filas_slider, tabla_output, estado_output, graficos_output, informe_output]
|
716 |
)
|
717 |
|
718 |
-
# Evento para subir datos de r茅plica
|
719 |
-
subir_datos_btn.click(
|
720 |
-
fn=subir_datos_replica,
|
721 |
-
inputs=[tabla_output, replicas_slider, unidad_input, *replica_inputs],
|
722 |
-
outputs=tabla_output
|
723 |
-
)
|
724 |
-
|
725 |
# Eventos de los botones de ejemplo
|
726 |
ejemplo_ufc_btn.click(
|
727 |
fn=cargar_ejemplo_ufc,
|
@@ -738,7 +702,7 @@ with gr.Blocks(theme=gr.themes.Soft()) as interfaz:
|
|
738 |
# Evento para generar datos sint茅ticos
|
739 |
sinteticos_btn.click(
|
740 |
fn=generar_datos_sinteticos_evento,
|
741 |
-
inputs=[tabla_output, replicas_slider, unidad_input
|
742 |
outputs=tabla_output
|
743 |
)
|
744 |
|
@@ -801,7 +765,7 @@ with gr.Blocks(theme=gr.themes.Soft()) as interfaz:
|
|
801 |
# Eventos de exportar informes
|
802 |
exportar_word_btn.click(
|
803 |
fn=exportar_word,
|
804 |
-
inputs=[tabla_output, informe_output, unidad_input
|
805 |
outputs=exportar_word_file
|
806 |
)
|
807 |
|
@@ -814,24 +778,23 @@ with gr.Blocks(theme=gr.themes.Soft()) as interfaz:
|
|
814 |
# Inicializar la interfaz con el ejemplo base
|
815 |
def iniciar_con_ejemplo():
|
816 |
n_replicas = 1
|
817 |
-
df = generar_tabla(7,
|
818 |
# Valores reales de ejemplo
|
819 |
-
df[f"Concentraci贸n Real 1 (
|
820 |
-
estado, fig, informe, df = actualizar_analisis(df, n_replicas, "
|
821 |
return (
|
822 |
-
|
823 |
-
"
|
824 |
7,
|
825 |
df,
|
826 |
estado,
|
827 |
fig,
|
828 |
-
informe
|
829 |
-
0.0
|
830 |
)
|
831 |
|
832 |
interfaz.load(
|
833 |
fn=iniciar_con_ejemplo,
|
834 |
-
outputs=[concentracion_input, unidad_input, filas_slider, tabla_output, estado_output, graficos_output, informe_output
|
835 |
)
|
836 |
|
837 |
# Lanzar la interfaz
|
|
|
83 |
col_desviacion = f"Desviaci贸n Est谩ndar ({unidad_medida})"
|
84 |
|
85 |
# Convertir a num茅rico
|
86 |
+
df_valid[col_predicha_num] = df_valid[col_predicha_num].astype(float)
|
87 |
+
df_valid[col_real_promedio] = df_valid[col_real_promedio].astype(float)
|
88 |
+
df_valid[col_desviacion] = df_valid[col_desviacion].fillna(0).astype(float)
|
89 |
|
90 |
# Calcular regresi贸n lineal
|
91 |
slope, intercept, r_value, p_value, std_err = stats.linregress(df_valid[col_predicha_num], df_valid[col_real_promedio])
|
92 |
+
df_valid['Ajuste Lineal'] = intercept + slope * df_valid[col_predicha_num]
|
93 |
|
94 |
# Configurar estilos
|
95 |
sns.set(style="whitegrid")
|
|
|
229 |
col_real_promedio = f"Concentraci贸n Real Promedio ({unidad_medida})"
|
230 |
|
231 |
# Convertir a num茅rico
|
232 |
+
df_valid[col_predicha_num] = df_valid[col_predicha_num].astype(float)
|
233 |
+
df_valid[col_real_promedio] = df_valid[col_real_promedio].astype(float)
|
234 |
|
235 |
# Calcular estad铆sticas
|
236 |
slope, intercept, r_value, p_value, std_err = stats.linregress(df_valid[col_predicha_num], df_valid[col_real_promedio])
|
|
|
267 |
"""
|
268 |
return informe, evaluacion['estado']
|
269 |
|
270 |
+
def actualizar_analisis(df, n_replicas, unidad_medida):
|
271 |
if df is None or df.empty:
|
272 |
return "Error en los datos", None, "No se pueden generar an谩lisis", df
|
273 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
274 |
# Calcular promedio y desviaci贸n est谩ndar dependiendo de las r茅plicas
|
275 |
df = calcular_promedio_desviacion(df, n_replicas, unidad_medida)
|
276 |
|
|
|
278 |
col_real_promedio = f"Concentraci贸n Real Promedio ({unidad_medida})"
|
279 |
|
280 |
# Convertir columnas a num茅rico
|
281 |
+
df[col_predicha_num] = pd.to_numeric(df[col_predicha_num], errors='coerce')
|
282 |
+
df[col_real_promedio] = pd.to_numeric(df[col_real_promedio], errors='coerce')
|
283 |
|
284 |
df_valid = df.dropna(subset=[col_predicha_num, col_real_promedio])
|
285 |
|
|
|
288 |
|
289 |
# Calcular la regresi贸n y agregar 'Ajuste Lineal'
|
290 |
slope, intercept, r_value, p_value, std_err = stats.linregress(df_valid[col_predicha_num], df_valid[col_real_promedio])
|
291 |
+
df_valid['Ajuste Lineal'] = intercept + slope * df_valid[col_predicha_num]
|
292 |
|
293 |
# Generar gr谩fico con opciones predeterminadas
|
294 |
fig = generar_graficos(
|
|
|
319 |
col_real_promedio = f"Concentraci贸n Real Promedio ({unidad_medida})"
|
320 |
|
321 |
# Convertir columnas a num茅rico
|
322 |
+
df[col_predicha_num] = pd.to_numeric(df[col_predicha_num], errors='coerce')
|
323 |
+
df[col_real_promedio] = pd.to_numeric(df[col_real_promedio], errors='coerce')
|
324 |
|
325 |
df_valid = df.dropna(subset=[col_predicha_num, col_real_promedio])
|
326 |
|
|
|
430 |
f.write(informe_tex)
|
431 |
return filename
|
432 |
|
433 |
+
def exportar_word(df, informe_md, unidad_medida):
|
434 |
df_valid = df.copy()
|
435 |
col_predicha_num = "Concentraci贸n Predicha Num茅rica"
|
436 |
col_real_promedio = f"Concentraci贸n Real Promedio ({unidad_medida})"
|
437 |
|
438 |
# Convertir columnas a num茅rico
|
439 |
+
df_valid[col_predicha_num] = pd.to_numeric(df_valid[col_predicha_num], errors='coerce')
|
440 |
+
df_valid[col_real_promedio] = pd.to_numeric(df_valid[col_real_promedio], errors='coerce')
|
441 |
|
442 |
df_valid = df_valid.dropna(subset=[col_predicha_num, col_real_promedio])
|
443 |
|
|
|
454 |
col_real_promedio = [col for col in df_valid.columns if 'Real Promedio' in col][0]
|
455 |
|
456 |
# Convertir columnas a num茅rico
|
457 |
+
df_valid[col_predicha_num] = pd.to_numeric(df_valid[col_predicha_num], errors='coerce')
|
458 |
+
df_valid[col_real_promedio] = pd.to_numeric(df_valid[col_real_promedio], errors='coerce')
|
459 |
|
460 |
df_valid = df_valid.dropna(subset=[col_predicha_num, col_real_promedio])
|
461 |
|
|
|
466 |
|
467 |
return filename # Retornamos el nombre del archivo
|
468 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
469 |
# Funciones de ejemplo
|
470 |
def cargar_ejemplo_ufc(n_replicas):
|
471 |
df = generar_tabla(7, 2000000, "UFC", n_replicas)
|
|
|
487 |
df[f"Concentraci贸n Real {i} (OD)"] = valores_reales
|
488 |
return 1.0, "OD", 7, df
|
489 |
|
490 |
+
def limpiar_datos(n_replicas):
|
491 |
+
df = generar_tabla(7, 2000000, "UFC", n_replicas)
|
492 |
+
return (
|
493 |
+
2000000, # Concentraci贸n Inicial
|
494 |
+
"UFC", # Unidad de Medida
|
495 |
+
7, # N煤mero de filas
|
496 |
+
df, # Tabla Output
|
497 |
+
"", # Estado Output
|
498 |
+
None, # Gr谩ficos Output
|
499 |
+
"" # Informe Output
|
500 |
+
)
|
501 |
+
|
502 |
+
def generar_datos_sinteticos_evento(df, n_replicas, unidad_medida):
|
503 |
df = df.copy()
|
504 |
col_predicha_num = "Concentraci贸n Predicha Num茅rica"
|
505 |
|
506 |
# Generar datos sint茅ticos para cada r茅plica
|
507 |
for i in range(1, n_replicas + 1):
|
508 |
col_real = f"Concentraci贸n Real {i} ({unidad_medida})"
|
509 |
+
df[col_predicha_num] = pd.to_numeric(df[col_predicha_num], errors='coerce')
|
510 |
desviacion_std = 0.05 * df[col_predicha_num].mean() # 5% de la media como desviaci贸n est谩ndar
|
511 |
valores_predichos = df[col_predicha_num].astype(float).values
|
512 |
datos_sinteticos = valores_predichos + np.random.normal(0, desviacion_std, size=len(valores_predichos))
|
513 |
datos_sinteticos = np.maximum(0, datos_sinteticos) # Asegurar que no haya valores negativos
|
514 |
datos_sinteticos = np.round(datos_sinteticos, 2)
|
515 |
+
df[col_real] = datos_sinteticos
|
516 |
|
517 |
return df
|
518 |
|
|
|
526 |
|
527 |
# Reemplazar valores existentes en "Concentraci贸n Real"
|
528 |
for col_new, col_old in zip(col_real_new, col_real_old):
|
529 |
+
df_new[col_new] = None
|
530 |
for idx in df_new.index:
|
531 |
if idx in df.index:
|
532 |
df_new.at[idx, col_new] = df.at[idx, col_old]
|
|
|
543 |
with gr.Tab("馃摑 Datos de Calibraci贸n"):
|
544 |
with gr.Row():
|
545 |
concentracion_input = gr.Number(
|
546 |
+
value=2000000,
|
547 |
label="Concentraci贸n Inicial",
|
548 |
+
precision=0
|
549 |
)
|
550 |
unidad_input = gr.Textbox(
|
551 |
+
value="UFC",
|
552 |
label="Unidad de Medida",
|
553 |
+
placeholder="UFC, OD, etc..."
|
554 |
)
|
555 |
filas_slider = gr.Slider(
|
556 |
minimum=1,
|
|
|
573 |
step=1,
|
574 |
label="N煤mero de R茅plicas"
|
575 |
)
|
|
|
|
|
|
|
|
|
|
|
576 |
|
577 |
with gr.Row():
|
578 |
calcular_btn = gr.Button("馃攧 Calcular", variant="primary")
|
579 |
limpiar_btn = gr.Button("馃棏 Limpiar Datos", variant="secondary")
|
580 |
ajustar_decimales_btn = gr.Button("馃洜 Ajustar Decimales", variant="secondary")
|
|
|
581 |
|
582 |
with gr.Row():
|
583 |
ejemplo_ufc_btn = gr.Button("馃搵 Cargar Ejemplo UFC", variant="secondary")
|
584 |
ejemplo_od_btn = gr.Button("馃搵 Cargar Ejemplo OD", variant="secondary")
|
585 |
sinteticos_btn = gr.Button("馃И Generar Datos Sint茅ticos", variant="secondary")
|
586 |
|
|
|
|
|
|
|
587 |
tabla_output = gr.DataFrame(
|
588 |
wrap=True,
|
589 |
label="Tabla de Datos",
|
|
|
661 |
# Evento al presionar el bot贸n Calcular
|
662 |
calcular_btn.click(
|
663 |
fn=actualizar_analisis,
|
664 |
+
inputs=[tabla_output, replicas_slider, unidad_input],
|
665 |
outputs=output_components
|
666 |
)
|
667 |
|
|
|
686 |
outputs=[concentracion_input, unidad_input, filas_slider, tabla_output, estado_output, graficos_output, informe_output]
|
687 |
)
|
688 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
689 |
# Eventos de los botones de ejemplo
|
690 |
ejemplo_ufc_btn.click(
|
691 |
fn=cargar_ejemplo_ufc,
|
|
|
702 |
# Evento para generar datos sint茅ticos
|
703 |
sinteticos_btn.click(
|
704 |
fn=generar_datos_sinteticos_evento,
|
705 |
+
inputs=[tabla_output, replicas_slider, unidad_input],
|
706 |
outputs=tabla_output
|
707 |
)
|
708 |
|
|
|
765 |
# Eventos de exportar informes
|
766 |
exportar_word_btn.click(
|
767 |
fn=exportar_word,
|
768 |
+
inputs=[tabla_output, informe_output, unidad_input],
|
769 |
outputs=exportar_word_file
|
770 |
)
|
771 |
|
|
|
778 |
# Inicializar la interfaz con el ejemplo base
|
779 |
def iniciar_con_ejemplo():
|
780 |
n_replicas = 1
|
781 |
+
df = generar_tabla(7, 2000000, "UFC", n_replicas)
|
782 |
# Valores reales de ejemplo
|
783 |
+
df[f"Concentraci贸n Real 1 (UFC)"] = [2000000, 1600000, 1200000, 800000, 400000, 200000, 100000]
|
784 |
+
estado, fig, informe, df = actualizar_analisis(df, n_replicas, "UFC")
|
785 |
return (
|
786 |
+
2000000,
|
787 |
+
"UFC",
|
788 |
7,
|
789 |
df,
|
790 |
estado,
|
791 |
fig,
|
792 |
+
informe
|
|
|
793 |
)
|
794 |
|
795 |
interfaz.load(
|
796 |
fn=iniciar_con_ejemplo,
|
797 |
+
outputs=[concentracion_input, unidad_input, filas_slider, tabla_output, estado_output, graficos_output, informe_output]
|
798 |
)
|
799 |
|
800 |
# Lanzar la interfaz
|