C2MV commited on
Commit
01d2cba
1 Parent(s): 69b2dd2

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +28 -62
app.py CHANGED
@@ -528,7 +528,7 @@ def cargar_ejemplo_ufc(n_replicas):
528
  valores_reales = [2000000 - (i - 1) * 10000, 1600000 - (i - 1) * 8000, 1200000 - (i - 1) * 6000,
529
  800000 - (i - 1) * 4000, 400000 - (i - 1) * 2000, 200000 - (i - 1) * 1000,
530
  100000 - (i - 1) * 500]
531
- df[f"Concentración Real {i} ({unidad_medida})"] = valores_reales
532
  return 2000000, "UFC", 7, df
533
 
534
  def cargar_ejemplo_od(n_replicas):
@@ -538,7 +538,7 @@ def cargar_ejemplo_od(n_replicas):
538
  valores_reales = [1.000 - (i - 1) * 0.050, 0.800 - (i - 1) * 0.040, 0.600 - (i - 1) * 0.030,
539
  0.400 - (i - 1) * 0.020, 0.200 - (i - 1) * 0.010, 0.100 - (i - 1) * 0.005,
540
  0.050 - (i - 1) * 0.002]
541
- df[f"Concentración Real {i} ({unidad_medida})"] = valores_reales
542
  return 1.000, "OD", 7, df
543
 
544
  def limpiar_datos(n_replicas):
@@ -592,46 +592,28 @@ def actualizar_tabla_evento(df, n_filas, concentracion, unidad, n_replicas, deci
592
 
593
  def cargar_excel(file):
594
  # Leer el archivo Excel
595
- df_excel = pd.read_excel(file.name)
596
 
597
- # Identificar las columnas de Concentración Predicha y Absorbancias
598
- col_conc_predicha = [col for col in df_excel.columns if 'Concentración Predicha' in col][0]
599
- col_absorbancias = [col for col in df_excel.columns if 'Absorbancia' in col or 'Concentración Real' in col]
600
 
601
- # Obtener las opciones de absorbancia para el Dropdown
602
- absorbancia_options = col_absorbancias.copy()
603
-
604
- # Número de filas
605
- n_filas = len(df_excel)
606
- # Número de réplicas (inicialmente 1, ya que seleccionaremos una absorbancia)
607
- n_replicas = 1
608
-
609
- # Obtener concentración inicial
610
- concentracion_inicial = df_excel[col_conc_predicha].max()
611
- # Unidad de medida, podríamos extraerla del nombre de la columna
612
- unidad_medida = col_conc_predicha.split('(')[-1].split(')')[0] if '(' in col_conc_predicha else 'Unidad'
613
 
614
  # Generar la tabla base
615
  df_base = generar_tabla(n_filas, concentracion_inicial, unidad_medida, n_replicas)
616
 
617
- # Reemplazar la columna de Concentración Predicha Numérica con la del Excel
618
- df_base["Concentración Predicha Numérica"] = df_excel[col_conc_predicha].values
619
- df_base[f"Concentración Predicha ({unidad_medida})"] = df_excel[col_conc_predicha].values.round(3).astype(str)
620
-
621
- # Actualizar el Dropdown de absorbancia
622
- absorbancia_dropdown_update = gr.update(choices=absorbancia_options, value=absorbancia_options[0] if absorbancia_options else None)
623
-
624
- return concentracion_inicial, unidad_medida, n_filas, n_replicas, df_base, "", None, "", absorbancia_dropdown_update
625
-
626
- def actualizar_absorbancia_seleccionada(df, absorbancia_seleccionada, unidad_medida):
627
- if df is None or absorbancia_seleccionada is None:
628
- return df
629
-
630
- # Reemplazar la columna de Concentración Real 1 con la absorbancia seleccionada
631
- col_real = f"Concentración Real 1 ({unidad_medida})"
632
- df[col_real] = df[absorbancia_seleccionada].values
633
 
634
- return df
635
 
636
  def calcular_regresion_tabla_principal(df, unidad_medida, filas_seleccionadas_regresion,
637
  palette_puntos, estilo_puntos,
@@ -850,14 +832,6 @@ with gr.Blocks(theme=gr.themes.Soft()) as interfaz:
850
  type="pandas",
851
  )
852
 
853
- with gr.Row():
854
- absorbancia_dropdown = gr.Dropdown(
855
- label="Seleccione la columna de Absorbancia a utilizar",
856
- choices=[],
857
- value=None,
858
- interactive=True
859
- )
860
-
861
  with gr.Tab("📊 Análisis y Reporte"):
862
  estado_output = gr.Textbox(label="Estado", interactive=False)
863
  graficos_output = gr.Plot(label="Gráficos de Análisis")
@@ -1097,14 +1071,7 @@ with gr.Blocks(theme=gr.themes.Soft()) as interfaz:
1097
  cargar_excel_btn.upload(
1098
  fn=cargar_excel,
1099
  inputs=[cargar_excel_btn],
1100
- outputs=[concentracion_input, unidad_input, filas_slider, replicas_slider, tabla_output, estado_output, graficos_output, informe_output, absorbancia_dropdown]
1101
- )
1102
-
1103
- # Evento al seleccionar una absorbancia del Dropdown
1104
- absorbancia_dropdown.change(
1105
- fn=actualizar_absorbancia_seleccionada,
1106
- inputs=[tabla_output, absorbancia_dropdown, unidad_input],
1107
- outputs=tabla_output
1108
  )
1109
 
1110
  # Evento al presionar el botón Ajustar Decimales
@@ -1191,21 +1158,20 @@ with gr.Blocks(theme=gr.themes.Soft()) as interfaz:
1191
  filas_seleccionadas_inicial = [f"Fila {i+1}" for i in df.index]
1192
  estado, fig, informe, df = actualizar_analisis(df, n_replicas, "UFC", filas_seleccionadas_inicial, 3)
1193
  return (
1194
- 2000000, # concentracion_input
1195
- "UFC", # unidad_input
1196
- 7, # filas_slider
1197
- df, # tabla_output
1198
- estado, # estado_output
1199
- fig, # graficos_output
1200
- informe, # informe_output
1201
- filas_seleccionadas_inicial, # filas_seleccionadas
1202
- 3, # decimales_slider
1203
- gr.update(choices=[], value=None) # absorbancia_dropdown
1204
  )
1205
 
1206
  interfaz.load(
1207
  fn=iniciar_con_ejemplo,
1208
- outputs=[concentracion_input, unidad_input, filas_slider, tabla_output, estado_output, graficos_output, informe_output, filas_seleccionadas, decimales_slider, absorbancia_dropdown]
1209
  )
1210
 
1211
  # Evento al presionar el botón de calcular regresión
 
528
  valores_reales = [2000000 - (i - 1) * 10000, 1600000 - (i - 1) * 8000, 1200000 - (i - 1) * 6000,
529
  800000 - (i - 1) * 4000, 400000 - (i - 1) * 2000, 200000 - (i - 1) * 1000,
530
  100000 - (i - 1) * 500]
531
+ df[f"Concentración Real {i} (UFC)"] = valores_reales
532
  return 2000000, "UFC", 7, df
533
 
534
  def cargar_ejemplo_od(n_replicas):
 
538
  valores_reales = [1.000 - (i - 1) * 0.050, 0.800 - (i - 1) * 0.040, 0.600 - (i - 1) * 0.030,
539
  0.400 - (i - 1) * 0.020, 0.200 - (i - 1) * 0.010, 0.100 - (i - 1) * 0.005,
540
  0.050 - (i - 1) * 0.002]
541
+ df[f"Concentración Real {i} (OD)"] = valores_reales
542
  return 1.000, "OD", 7, df
543
 
544
  def limpiar_datos(n_replicas):
 
592
 
593
  def cargar_excel(file):
594
  # Leer el archivo Excel
595
+ df = pd.read_excel(file.name, sheet_name=None)
596
 
597
+ # Verificar que el archivo tenga al menos dos pestañas
598
+ if len(df) < 2:
599
+ return "El archivo debe tener al menos dos pestañas.", None, None, None, None, None, None
600
 
601
+ # Obtener la primera pestaña como referencia
602
+ primera_pestaña = next(iter(df.values()))
603
+ concentracion_inicial = primera_pestaña.iloc[0, 0]
604
+ unidad_medida = primera_pestaña.columns[0].split('(')[-1].split(')')[0]
605
+ n_filas = len(primera_pestaña)
606
+ n_replicas = len(df)
 
 
 
 
 
 
607
 
608
  # Generar la tabla base
609
  df_base = generar_tabla(n_filas, concentracion_inicial, unidad_medida, n_replicas)
610
 
611
+ # Llenar la tabla con los datos de cada pestaña
612
+ for i, (sheet_name, sheet_df) in enumerate(df.items(), start=1):
613
+ col_real = f"Concentración Real {i} ({unidad_medida})"
614
+ df_base[col_real] = sheet_df.iloc[:, 1].values
 
 
 
 
 
 
 
 
 
 
 
 
615
 
616
+ return concentracion_inicial, unidad_medida, n_filas, n_replicas, df_base, "", None, ""
617
 
618
  def calcular_regresion_tabla_principal(df, unidad_medida, filas_seleccionadas_regresion,
619
  palette_puntos, estilo_puntos,
 
832
  type="pandas",
833
  )
834
 
 
 
 
 
 
 
 
 
835
  with gr.Tab("📊 Análisis y Reporte"):
836
  estado_output = gr.Textbox(label="Estado", interactive=False)
837
  graficos_output = gr.Plot(label="Gráficos de Análisis")
 
1071
  cargar_excel_btn.upload(
1072
  fn=cargar_excel,
1073
  inputs=[cargar_excel_btn],
1074
+ outputs=[concentracion_input, unidad_input, filas_slider, replicas_slider, tabla_output, estado_output, graficos_output, informe_output]
 
 
 
 
 
 
 
1075
  )
1076
 
1077
  # Evento al presionar el botón Ajustar Decimales
 
1158
  filas_seleccionadas_inicial = [f"Fila {i+1}" for i in df.index]
1159
  estado, fig, informe, df = actualizar_analisis(df, n_replicas, "UFC", filas_seleccionadas_inicial, 3)
1160
  return (
1161
+ 2000000,
1162
+ "UFC",
1163
+ 7,
1164
+ df,
1165
+ estado,
1166
+ fig,
1167
+ informe,
1168
+ filas_seleccionadas_inicial,
1169
+ 3 # Número de decimales
 
1170
  )
1171
 
1172
  interfaz.load(
1173
  fn=iniciar_con_ejemplo,
1174
+ outputs=[concentracion_input, unidad_input, filas_slider, tabla_output, estado_output, graficos_output, informe_output, filas_seleccionadas, decimales_slider]
1175
  )
1176
 
1177
  # Evento al presionar el botón de calcular regresión