C2MV commited on
Commit
65a427d
1 Parent(s): ee18ffc

Update UI.py

Browse files
Files changed (1) hide show
  1. UI.py +91 -32
UI.py CHANGED
@@ -1,54 +1,113 @@
1
  import gradio as gr
2
  import pandas as pd
 
 
 
 
3
 
4
  def create_interface(process_fn):
5
  with gr.Blocks() as demo:
6
  gr.Markdown("# Interfaz de Usuario para el Procesamiento de Datos de Bioproceso")
7
 
8
- # **Inputs de Archivo y Parámetros**
9
  file_input = gr.File(label="Subir archivo Excel con los datos", file_types=[".xls", ".xlsx"])
10
 
11
- # Botón para Procesar
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
  process_button = gr.Button("Procesar")
13
 
14
  # Salida
15
- output_image = gr.Image(label="Gráfico Generado")
16
  output_text = gr.Textbox(label="Análisis Generado", lines=10)
17
 
18
  # Conectar el botón con la función de procesamiento
19
  process_button.click(
20
  fn=process_fn,
21
- inputs=[file_input], # Solo necesitamos el archivo aquí
22
- outputs=[output_image, output_text]
 
 
23
  )
24
 
25
  return demo
26
 
27
- def process_and_plot(file):
 
28
  # Leer el archivo Excel proporcionado
29
- combined_data = read_excel_data(file.name)
30
-
31
- # Aquí puedes procesar los datos como lo has hecho anteriormente
32
- # Procesamiento y visualización de los resultados, basado en los datos leídos
33
-
34
- # Retornar gráficos generados y análisis
35
- # Para fines de ejemplo, solo mostramos una vista previa de los datos
36
- return combined_data.head(), "Análisis de los datos realizados"
37
-
38
- # Aquí se define la función que limpia y procesa los datos
39
- def read_excel_data(file_path):
40
- excel_data = pd.ExcelFile(file_path)
41
- all_data = []
42
-
43
- for sheet in excel_data.sheet_names:
44
- df = pd.read_excel(excel_data, sheet_name=sheet)
45
-
46
- # Eliminar columnas innecesarias y renombrar las importantes
47
- df_clean = df.iloc[:, :4] # Las primeras 4 columnas contienen datos importantes
48
- df_clean.columns = ['Tiempo', 'Biomasa', 'Sustrato', 'Producto']
49
-
50
- all_data.append(df_clean)
51
-
52
- combined_data = pd.concat(all_data, ignore_index=True)
53
-
54
- return combined_data
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import gradio as gr
2
  import pandas as pd
3
+ import io
4
+ from PIL import Image
5
+ from matplotlib import pyplot as plt
6
+ from bioprocess_model import BioprocessModel # Asegúrate de que BioprocessModel esté en su propio archivo
7
 
8
  def create_interface(process_fn):
9
  with gr.Blocks() as demo:
10
  gr.Markdown("# Interfaz de Usuario para el Procesamiento de Datos de Bioproceso")
11
 
12
+ # Inputs de archivo y parámetros
13
  file_input = gr.File(label="Subir archivo Excel con los datos", file_types=[".xls", ".xlsx"])
14
 
15
+ with gr.Row():
16
+ with gr.Column():
17
+ legend_position = gr.Radio(
18
+ choices=["upper left", "upper right", "lower left", "lower right", "best"],
19
+ label="Posición de la leyenda",
20
+ value="best"
21
+ )
22
+ show_legend = gr.Checkbox(label="Mostrar Leyenda", value=True)
23
+
24
+ with gr.Column():
25
+ params_positions = ["upper left", "upper right", "lower left", "lower right", "outside right"]
26
+ params_position = gr.Radio(
27
+ choices=params_positions,
28
+ label="Posición de los parámetros",
29
+ value="upper right"
30
+ )
31
+ show_params = gr.Checkbox(label="Mostrar Parámetros", value=True)
32
+
33
+ # Parámetros adicionales
34
+ model_type = gr.Radio(["logistic", "luedeking-piret"], label="Tipo de Modelo", value="logistic")
35
+ mode = gr.Radio(["independent", "average", "combinado"], label="Modo de Análisis", value="independent")
36
+
37
+ # Estilo gráfico
38
+ styles = ['white', 'dark', 'whitegrid', 'darkgrid', 'ticks']
39
+ style_dropdown = gr.Dropdown(choices=styles, label="Selecciona el estilo de gráfico", value='whitegrid')
40
+
41
+ line_color_picker = gr.ColorPicker(label="Color de la línea", value='#0000FF')
42
+ point_color_picker = gr.ColorPicker(label="Color de los puntos", value='#000000')
43
+
44
+ line_style_options = ['-', '--', '-.', ':']
45
+ line_style_dropdown = gr.Dropdown(choices=line_style_options, label="Estilo de línea", value='-')
46
+
47
+ marker_style_options = ['o', 's', '^', 'v', 'D', 'x', '+', '*']
48
+ marker_style_dropdown = gr.Dropdown(choices=marker_style_options, label="Estilo de punto", value='o')
49
+
50
+ # Botón de Procesar
51
  process_button = gr.Button("Procesar")
52
 
53
  # Salida
54
+ output_gallery = gr.Gallery(label="Gráfico Generado", columns=2, height='auto')
55
  output_text = gr.Textbox(label="Análisis Generado", lines=10)
56
 
57
  # Conectar el botón con la función de procesamiento
58
  process_button.click(
59
  fn=process_fn,
60
+ inputs=[file_input, legend_position, params_position, model_type, mode, style_dropdown,
61
+ line_color_picker, point_color_picker, line_style_dropdown, marker_style_dropdown,
62
+ show_legend, show_params],
63
+ outputs=[output_gallery, output_text]
64
  )
65
 
66
  return demo
67
 
68
+ def process_and_plot(file, legend_position, params_position, model_type, mode, style,
69
+ line_color, point_color, line_style, marker_style, show_legend, show_params):
70
  # Leer el archivo Excel proporcionado
71
+ excel_data = pd.ExcelFile(file.name)
72
+ figures = []
73
+ model = BioprocessModel()
74
+ model.fit_model(model_type)
75
+
76
+ for sheet_name in excel_data.sheet_names:
77
+ df = pd.read_excel(excel_data, sheet_name=sheet_name)
78
+ model.process_data(df)
79
+
80
+ # Obtener los datos de tiempo, biomasa, sustrato y producto
81
+ time = model.time
82
+ biomass = model.dataxp[-1]
83
+ substrate = model.datasp[-1]
84
+ product = model.datapp[-1]
85
+
86
+ # Generar los gráficos
87
+ fig = model.plot_combined_results(time, biomass, substrate, product,
88
+ model.dataxp[-1], model.datasp[-1], model.datapp[-1],
89
+ model.datax_std[-1], model.datas_std[-1], model.datap_std[-1],
90
+ experiment_name=sheet_name, legend_position=legend_position,
91
+ params_position=params_position, show_legend=show_legend,
92
+ show_params=show_params, style=style, line_color=line_color,
93
+ point_color=point_color, line_style=line_style,
94
+ marker_style=marker_style)
95
+ figures.append(fig)
96
+
97
+ # Convertir los gráficos en imágenes
98
+ image_list = []
99
+ for fig in figures:
100
+ buf = io.BytesIO()
101
+ fig.savefig(buf, format='png')
102
+ buf.seek(0)
103
+ image = Image.open(buf)
104
+ image_list.append(image)
105
+
106
+ # Análisis básico generado
107
+ analysis = f"Se han procesado {len(excel_data.sheet_names)} hojas con el modelo {model_type}."
108
+
109
+ return image_list, analysis
110
+
111
+ # Crear y lanzar la interfaz
112
+ demo = create_interface(process_and_plot)
113
+ demo.launch(share=True)