ArabovMK commited on
Commit
1500be4
·
verified ·
1 Parent(s): 5a47572

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +62 -17
app.py CHANGED
@@ -1133,30 +1133,50 @@ def create_comparison_visualizations(result_df, selected_models, target_columns,
1133
  st.info("ℹ️ Нет данных для статистического анализа")
1134
 
1135
  with viz_tab3:
1136
- # Детальный анализ
1137
  st.markdown("#### 🔍 Детальный анализ предсказаний")
1138
 
1139
- # Выбор строки для детального анализа
1140
- if len(result_df) > 0:
1141
- # Создаем описания для выпадающего списка
 
 
 
 
1142
  options = []
1143
  for i in range(len(result_df)):
1144
  try:
1145
- sample = str(result_df.iloc[i]['sample'])
1146
- time_min = float(result_df.iloc[i]['time_min'])
1147
- temperature_c = float(result_df.iloc[i]['temperature_c'])
1148
- description = f"Запись {i+1}: {sample} - t={time_min:.1f}мин, T={temperature_c:.1f}°C"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1149
  options.append((i, description))
1150
- except (KeyError, ValueError, TypeError):
1151
- options.append((i, f"Запись {i+1}"))
 
1152
 
 
1153
  selected_row_idx = st.selectbox(
1154
  "Выберите запись для детального анализа:",
1155
  options=[opt[0] for opt in options],
1156
  format_func=lambda x: next((opt[1] for opt in options if opt[0] == x), f"Запись {x+1}")
1157
  )
1158
 
1159
- if selected_row_idx is not None:
1160
  row_data = result_df.iloc[selected_row_idx]
1161
 
1162
  # Создаем график сравнения предсказаний для выбранной строки
@@ -1174,7 +1194,8 @@ def create_comparison_visualizations(result_df, selected_models, target_columns,
1174
  'Значение': float(value),
1175
  'Цвет': AVAILABLE_MODELS[model]['color']
1176
  })
1177
- except (TypeError, ValueError):
 
1178
  continue
1179
 
1180
  if comparison_data:
@@ -1191,34 +1212,58 @@ def create_comparison_visualizations(result_df, selected_models, target_columns,
1191
  )
1192
 
1193
  st.plotly_chart(fig, use_container_width=True)
 
 
1194
 
1195
- # Показываем детальные значения
1196
  st.markdown("#### 📋 Численные значения предсказаний")
1197
  detail_data = []
 
1198
  for target in target_columns:
1199
  try:
1200
  row_detail = {'Целевая переменная': TARGET_DESCRIPTIONS[target]['name']}
 
 
1201
  for model in selected_models:
1202
  col_name = f'{model}_{target}'
1203
  if col_name in result_df.columns:
1204
  value = row_data[col_name]
1205
  if pd.notna(value):
1206
- row_detail[model] = f"{float(value):.2f}"
 
 
 
1207
  else:
1208
  row_detail[model] = 'N/A'
1209
 
1210
  # Добавляем оригинальное значение если есть
1211
  orig_col = f'original_{target}'
1212
  if orig_col in result_df.columns and pd.notna(row_data[orig_col]):
1213
- row_detail['Оригинальное значение'] = f"{float(row_data[orig_col]):.2f}"
 
 
 
1214
 
1215
  detail_data.append(row_detail)
1216
- except (KeyError, TypeError, ValueError):
 
1217
  continue
1218
 
1219
  if detail_data:
1220
  detail_df = pd.DataFrame(detail_data)
1221
  st.dataframe(detail_df, width='stretch')
 
 
 
 
 
 
 
 
 
 
 
 
1222
 
1223
  with viz_tab4:
1224
  # Вкладка с метриками качества
@@ -1339,7 +1384,7 @@ def create_comparison_visualizations(result_df, selected_models, target_columns,
1339
  st.error("**Детали ошибки:**")
1340
  st.code(traceback.format_exc())
1341
  st.markdown('</div>', unsafe_allow_html=True)
1342
-
1343
  # Также обновите функцию display_metrics_dashboard:
1344
 
1345
  def display_metrics_dashboard(all_metrics, selected_models):
 
1133
  st.info("ℹ️ Нет данных для статистического анализа")
1134
 
1135
  with viz_tab3:
1136
+ # Детальный анализ - ИСПРАВЛЕННАЯ ВЕРСИЯ
1137
  st.markdown("#### 🔍 Детальный анализ предсказаний")
1138
 
1139
+ # Проверяем, что result_df не пустой и есть данные для анализа
1140
+ if len(result_df) == 0:
1141
+ st.info("ℹ️ Нет данных для детального анализа")
1142
+ return
1143
+
1144
+ try:
1145
+ # Создаем безопасные описания для выпадающего списка
1146
  options = []
1147
  for i in range(len(result_df)):
1148
  try:
1149
+ # Безопасное извлечение данных с проверкой наличия колонок
1150
+ sample = "Неизвестно"
1151
+ time_min = "N/A"
1152
+ temperature_c = "N/A"
1153
+
1154
+ if 'sample' in result_df.columns:
1155
+ sample_val = result_df.iloc[i]['sample']
1156
+ sample = str(sample_val) if pd.notna(sample_val) else "Неизвестно"
1157
+
1158
+ if 'time_min' in result_df.columns:
1159
+ time_val = result_df.iloc[i]['time_min']
1160
+ time_min = f"{float(time_val):.1f}" if pd.notna(time_val) else "N/A"
1161
+
1162
+ if 'temperature_c' in result_df.columns:
1163
+ temp_val = result_df.iloc[i]['temperature_c']
1164
+ temperature_c = f"{float(temp_val):.1f}" if pd.notna(temp_val) else "N/A"
1165
+
1166
+ description = f"Запись {i+1}: {sample} - t={time_min}мин, T={temperature_c}°C"
1167
  options.append((i, description))
1168
+ except Exception as e:
1169
+ # Если произошла ошибка, создаем базовое описание
1170
+ options.append((i, f"Запись {i+1} (ошибка формата)"))
1171
 
1172
+ # Создаем выпадающий список
1173
  selected_row_idx = st.selectbox(
1174
  "Выберите запись для детального анализа:",
1175
  options=[opt[0] for opt in options],
1176
  format_func=lambda x: next((opt[1] for opt in options if opt[0] == x), f"Запись {x+1}")
1177
  )
1178
 
1179
+ if selected_row_idx is not None and 0 <= selected_row_idx < len(result_df):
1180
  row_data = result_df.iloc[selected_row_idx]
1181
 
1182
  # Создаем график сравнения предсказаний для выбранной строки
 
1194
  'Значение': float(value),
1195
  'Цвет': AVAILABLE_MODELS[model]['color']
1196
  })
1197
+ except (TypeError, ValueError) as e:
1198
+ st.warning(f"Не удалось преобразовать значение для {model}_{target}: {value}")
1199
  continue
1200
 
1201
  if comparison_data:
 
1212
  )
1213
 
1214
  st.plotly_chart(fig, use_container_width=True)
1215
+ else:
1216
+ st.info("ℹ️ Нет данных предсказаний для выбранной записи")
1217
 
1218
+ # Показываем детальные значения в таблице
1219
  st.markdown("#### 📋 Численные значения предсказаний")
1220
  detail_data = []
1221
+
1222
  for target in target_columns:
1223
  try:
1224
  row_detail = {'Целевая переменная': TARGET_DESCRIPTIONS[target]['name']}
1225
+
1226
+ # Добавляем предсказания каждой модели
1227
  for model in selected_models:
1228
  col_name = f'{model}_{target}'
1229
  if col_name in result_df.columns:
1230
  value = row_data[col_name]
1231
  if pd.notna(value):
1232
+ try:
1233
+ row_detail[model] = f"{float(value):.2f}"
1234
+ except (TypeError, ValueError):
1235
+ row_detail[model] = 'Ошибка'
1236
  else:
1237
  row_detail[model] = 'N/A'
1238
 
1239
  # Добавляем оригинальное значение если есть
1240
  orig_col = f'original_{target}'
1241
  if orig_col in result_df.columns and pd.notna(row_data[orig_col]):
1242
+ try:
1243
+ row_detail['Оригинальное значение'] = f"{float(row_data[orig_col]):.2f}"
1244
+ except (TypeError, ValueError):
1245
+ row_detail['Оригинальное значение'] = 'Ошибка'
1246
 
1247
  detail_data.append(row_detail)
1248
+ except Exception as e:
1249
+ st.warning(f"Ошибка обработки целевой переменной {target}: {e}")
1250
  continue
1251
 
1252
  if detail_data:
1253
  detail_df = pd.DataFrame(detail_data)
1254
  st.dataframe(detail_df, width='stretch')
1255
+ else:
1256
+ st.info("ℹ️ Нет детальных данных для отображения")
1257
+
1258
+ else:
1259
+ st.error("❌ Выбрана некорректная запись для анализа")
1260
+
1261
+ except Exception as e:
1262
+ st.error(f"❌ Ошибка в детальном анализе: {str(e)}")
1263
+ st.markdown('<div class="error-box">', unsafe_allow_html=True)
1264
+ st.error("**Детали ошибки:**")
1265
+ st.code(traceback.format_exc())
1266
+ st.markdown('</div>', unsafe_allow_html=True)
1267
 
1268
  with viz_tab4:
1269
  # Вкладка с метриками качества
 
1384
  st.error("**Детали ошибки:**")
1385
  st.code(traceback.format_exc())
1386
  st.markdown('</div>', unsafe_allow_html=True)
1387
+
1388
  # Также обновите функцию display_metrics_dashboard:
1389
 
1390
  def display_metrics_dashboard(all_metrics, selected_models):