C2MV commited on
Commit
ececa78
verified
1 Parent(s): d2a5333

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +37 -20
app.py CHANGED
@@ -47,16 +47,16 @@ def generar_tabla(n_filas, concentracion_inicial, unidad_medida, n_replicas):
47
 
48
  def ajustar_decimales_evento(df, decimales):
49
  df = df.copy()
50
- # Identificar la columna de Concentraci贸n Predicha Num茅rica y la de visualizaci贸n
51
- col_predicha_num = "Concentraci贸n Predicha Num茅rica"
52
- col_predicha = [col for col in df.columns if 'Concentraci贸n Predicha (' in col][0]
53
-
54
- # Redondear la columna num茅rica al n煤mero de decimales especificado
55
- df[col_predicha_num] = df[col_predicha_num].astype(float).round(decimales)
56
-
57
- # Actualizar la columna de visualizaci贸n con el formato deseado
58
- df[col_predicha] = df[col_predicha_num].apply(lambda x: f"{x:.{decimales}f}")
59
-
60
  return df
61
 
62
  def calcular_promedio_desviacion(df, n_replicas, unidad_medida):
@@ -77,7 +77,7 @@ def calcular_promedio_desviacion(df, n_replicas, unidad_medida):
77
 
78
  return df
79
 
80
- def generar_graficos(df_valid, n_replicas, unidad_medida):
81
  col_predicha_num = "Concentraci贸n Predicha Num茅rica"
82
  col_real_promedio = f"Concentraci贸n Real Promedio ({unidad_medida})"
83
  col_desviacion = f"Desviaci贸n Est谩ndar ({unidad_medida})"
@@ -95,6 +95,16 @@ def generar_graficos(df_valid, n_replicas, unidad_medida):
95
  sns.set(style="whitegrid")
96
  plt.rcParams.update({'figure.autolayout': True})
97
 
 
 
 
 
 
 
 
 
 
 
98
  fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 6))
99
 
100
  # Gr谩fico de dispersi贸n con l铆nea de regresi贸n
@@ -105,8 +115,8 @@ def generar_graficos(df_valid, n_replicas, unidad_medida):
105
  df_valid[col_real_promedio],
106
  yerr=df_valid[col_desviacion],
107
  fmt='o',
108
- color='blue',
109
- ecolor='lightgray',
110
  elinewidth=2,
111
  capsize=3,
112
  label='Datos Reales'
@@ -115,7 +125,7 @@ def generar_graficos(df_valid, n_replicas, unidad_medida):
115
  ax1.scatter(
116
  df_valid[col_predicha_num],
117
  df_valid[col_real_promedio],
118
- color='blue',
119
  s=100,
120
  label='Datos Reales',
121
  marker='o'
@@ -125,7 +135,7 @@ def generar_graficos(df_valid, n_replicas, unidad_medida):
125
  ax1.plot(
126
  df_valid[col_predicha_num],
127
  df_valid['Ajuste Lineal'],
128
- color='green',
129
  label='Ajuste Lineal',
130
  linewidth=2
131
  )
@@ -163,7 +173,7 @@ def generar_graficos(df_valid, n_replicas, unidad_medida):
163
  ax2.scatter(
164
  df_valid[col_predicha_num],
165
  residuos,
166
- color='purple',
167
  s=100,
168
  marker='D',
169
  label='Residuos'
@@ -251,7 +261,7 @@ Fecha: {datetime.now().strftime('%d/%m/%Y %H:%M')}
251
  """
252
  return informe, evaluacion['estado']
253
 
254
- def actualizar_analisis(df, n_replicas, unidad_medida):
255
  if df is None or df.empty:
256
  return "Error en los datos", None, "No se pueden generar an谩lisis", df
257
 
@@ -274,7 +284,7 @@ def actualizar_analisis(df, n_replicas, unidad_medida):
274
  slope, intercept, r_value, p_value, std_err = stats.linregress(df_valid[col_predicha_num], df_valid[col_real_promedio])
275
  df_valid['Ajuste Lineal'] = intercept + slope * df_valid[col_predicha_num]
276
 
277
- fig = generar_graficos(df_valid, n_replicas, unidad_medida)
278
  informe, estado = generar_informe_completo(df_valid, n_replicas, unidad_medida)
279
 
280
  return estado, fig, informe, df
@@ -524,6 +534,13 @@ with gr.Blocks(theme=gr.themes.Soft()) as interfaz:
524
  ejemplo_od_btn = gr.Button("馃搵 Cargar Ejemplo OD", variant="secondary")
525
  sinteticos_btn = gr.Button("馃И Generar Datos Sint茅ticos", variant="secondary")
526
 
 
 
 
 
 
 
 
527
  tabla_output = gr.DataFrame(
528
  wrap=True,
529
  label="Tabla de Datos",
@@ -551,7 +568,7 @@ with gr.Blocks(theme=gr.themes.Soft()) as interfaz:
551
  # Evento al presionar el bot贸n Calcular
552
  calcular_btn.click(
553
  fn=actualizar_analisis,
554
- inputs=[tabla_output, replicas_slider, unidad_input],
555
  outputs=output_components
556
  )
557
 
@@ -657,7 +674,7 @@ with gr.Blocks(theme=gr.themes.Soft()) as interfaz:
657
  df = generar_tabla(7, 2000000, "UFC", n_replicas)
658
  # Valores reales de ejemplo
659
  df[f"Concentraci贸n Real 1 (UFC)"] = [2000000, 1600000, 1200000, 800000, 400000, 200000, 100000]
660
- estado, fig, informe, df = actualizar_analisis(df, n_replicas, "UFC")
661
  return (
662
  2000000,
663
  "UFC",
 
47
 
48
  def ajustar_decimales_evento(df, decimales):
49
  df = df.copy()
50
+ # Ajustar decimales en todas las columnas num茅ricas
51
+ for col in df.columns:
52
+ if df[col].dtype in [np.float64, np.int64, float, int]:
53
+ df[col] = df[col].round(decimales)
54
+ else:
55
+ # Intentar convertir a num茅rico y luego redondear
56
+ try:
57
+ df[col] = pd.to_numeric(df[col], errors='ignore').round(decimales)
58
+ except:
59
+ pass
60
  return df
61
 
62
  def calcular_promedio_desviacion(df, n_replicas, unidad_medida):
 
77
 
78
  return df
79
 
80
+ def generar_graficos(df_valid, n_replicas, unidad_medida, estilo_grafico):
81
  col_predicha_num = "Concentraci贸n Predicha Num茅rica"
82
  col_real_promedio = f"Concentraci贸n Real Promedio ({unidad_medida})"
83
  col_desviacion = f"Desviaci贸n Est谩ndar ({unidad_medida})"
 
95
  sns.set(style="whitegrid")
96
  plt.rcParams.update({'figure.autolayout': True})
97
 
98
+ # Definir estilos de gr谩ficos
99
+ estilos = {
100
+ "Estilo 1": {"color_puntos": "blue", "color_linea": "green", "color_error": "lightgray"},
101
+ "Estilo 2": {"color_puntos": "red", "color_linea": "orange", "color_error": "pink"},
102
+ "Estilo 3": {"color_puntos": "purple", "color_linea": "cyan", "color_error": "gray"},
103
+ "Estilo 4": {"color_puntos": "black", "color_linea": "yellow", "color_error": "darkgray"}
104
+ }
105
+
106
+ estilo = estilos.get(estilo_grafico, estilos["Estilo 1"])
107
+
108
  fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 6))
109
 
110
  # Gr谩fico de dispersi贸n con l铆nea de regresi贸n
 
115
  df_valid[col_real_promedio],
116
  yerr=df_valid[col_desviacion],
117
  fmt='o',
118
+ color=estilo["color_puntos"],
119
+ ecolor=estilo["color_error"],
120
  elinewidth=2,
121
  capsize=3,
122
  label='Datos Reales'
 
125
  ax1.scatter(
126
  df_valid[col_predicha_num],
127
  df_valid[col_real_promedio],
128
+ color=estilo["color_puntos"],
129
  s=100,
130
  label='Datos Reales',
131
  marker='o'
 
135
  ax1.plot(
136
  df_valid[col_predicha_num],
137
  df_valid['Ajuste Lineal'],
138
+ color=estilo["color_linea"],
139
  label='Ajuste Lineal',
140
  linewidth=2
141
  )
 
173
  ax2.scatter(
174
  df_valid[col_predicha_num],
175
  residuos,
176
+ color=estilo["color_puntos"],
177
  s=100,
178
  marker='D',
179
  label='Residuos'
 
261
  """
262
  return informe, evaluacion['estado']
263
 
264
+ def actualizar_analisis(df, n_replicas, unidad_medida, estilo_grafico):
265
  if df is None or df.empty:
266
  return "Error en los datos", None, "No se pueden generar an谩lisis", df
267
 
 
284
  slope, intercept, r_value, p_value, std_err = stats.linregress(df_valid[col_predicha_num], df_valid[col_real_promedio])
285
  df_valid['Ajuste Lineal'] = intercept + slope * df_valid[col_predicha_num]
286
 
287
+ fig = generar_graficos(df_valid, n_replicas, unidad_medida, estilo_grafico)
288
  informe, estado = generar_informe_completo(df_valid, n_replicas, unidad_medida)
289
 
290
  return estado, fig, informe, df
 
534
  ejemplo_od_btn = gr.Button("馃搵 Cargar Ejemplo OD", variant="secondary")
535
  sinteticos_btn = gr.Button("馃И Generar Datos Sint茅ticos", variant="secondary")
536
 
537
+ with gr.Row():
538
+ estilo_grafico_dropdown = gr.Dropdown(
539
+ choices=["Estilo 1", "Estilo 2", "Estilo 3", "Estilo 4"],
540
+ value="Estilo 1",
541
+ label="Estilo del Gr谩fico"
542
+ )
543
+
544
  tabla_output = gr.DataFrame(
545
  wrap=True,
546
  label="Tabla de Datos",
 
568
  # Evento al presionar el bot贸n Calcular
569
  calcular_btn.click(
570
  fn=actualizar_analisis,
571
+ inputs=[tabla_output, replicas_slider, unidad_input, estilo_grafico_dropdown],
572
  outputs=output_components
573
  )
574
 
 
674
  df = generar_tabla(7, 2000000, "UFC", n_replicas)
675
  # Valores reales de ejemplo
676
  df[f"Concentraci贸n Real 1 (UFC)"] = [2000000, 1600000, 1200000, 800000, 400000, 200000, 100000]
677
+ estado, fig, informe, df = actualizar_analisis(df, n_replicas, "UFC", "Estilo 1")
678
  return (
679
  2000000,
680
  "UFC",