Mykes commited on
Commit
18cb658
·
verified ·
1 Parent(s): b5f54c4

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +104 -7
app.py CHANGED
@@ -94,6 +94,94 @@ categorical_defaults = data['categorical_defaults']
94
  # Основной заголовок
95
  st.title('Классификатор пациентов')
96
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
97
  # Описание в основной части
98
  with st.container():
99
  st.markdown("""
@@ -120,6 +208,9 @@ with st.sidebar:
120
 
121
  input_data = {}
122
 
 
 
 
123
  with tab1:
124
  # Числовые признаки
125
  for i in range(0, len(numeric_features), 2):
@@ -127,22 +218,22 @@ with st.sidebar:
127
  with col1:
128
  if i < len(numeric_features):
129
  feature = numeric_features[i]
130
- default_value = float(numeric_defaults[feature])
131
  input_data[feature] = st.number_input(
132
  f'{feature}',
133
  value=default_value,
134
  format="%.2f",
135
- help=f"Среднее: {default_value:.2f}"
136
  )
137
  with col2:
138
  if i + 1 < len(numeric_features):
139
  feature = numeric_features[i + 1]
140
- default_value = float(numeric_defaults[feature])
141
  input_data[feature] = st.number_input(
142
  f'{feature}',
143
  value=default_value,
144
  format="%.2f",
145
- help=f"Среднее: {default_value:.2f}"
146
  )
147
 
148
  with tab2:
@@ -153,7 +244,8 @@ with st.sidebar:
153
  if i < len(categorical_features):
154
  feature = categorical_features[i]
155
  options = categorical_options[feature]
156
- default_idx = options.index(categorical_defaults[feature]) if categorical_defaults[feature] in options else 0
 
157
  input_data[feature] = st.selectbox(
158
  f'{feature}',
159
  options,
@@ -164,7 +256,8 @@ with st.sidebar:
164
  if i + 1 < len(categorical_features):
165
  feature = categorical_features[i + 1]
166
  options = categorical_options[feature]
167
- default_idx = options.index(categorical_defaults[feature]) if categorical_defaults[feature] in options else 0
 
168
  input_data[feature] = st.selectbox(
169
  f'{feature}',
170
  options,
@@ -289,7 +382,11 @@ if 'prediction' in st.session_state:
289
  - При уверенности ниже 50% рекомендуется дополнительное обследование
290
  - Результаты модели носят рекомендательный характер
291
  """)
292
-
 
 
 
 
293
  # Добавляем footer
294
  st.markdown("""
295
  ---
 
94
  # Основной заголовок
95
  st.title('Классификатор пациентов')
96
 
97
+ ## Примеры:
98
+ # Примеры типичных случаев
99
+ st.header('Примеры типичных случаев')
100
+
101
+ # Создаем примеры для каждой группы (замените значения на реальные типичные случаи)
102
+ example_cases = {
103
+ 'контр': {
104
+ 'title': 'Пример контрольной группы',
105
+ 'description': 'Типичный случай для контрольной группы',
106
+ 'values': {
107
+ # Заполните типичными значениями для контрольной группы
108
+ 'age': 45,
109
+ 'Шкала_ПВА 0': 15,
110
+ 'HADS_Тревога 0': 8,
111
+ 'HADS_Депрессия 0': 7,
112
+ # ... добавьте остальные значения
113
+ }
114
+ },
115
+ 'топирамат': {
116
+ 'title': 'Пример группы топирамата',
117
+ 'description': 'Типичный случай для группы топирамата',
118
+ 'values': {
119
+ # Заполните типичными значениями для группы топирамата
120
+ 'age': 42,
121
+ 'Шкала_ПВА 0': 18,
122
+ 'HADS_Тревога 0': 10,
123
+ 'HADS_Депрессия 0': 9,
124
+ # ... добавьте остальные значения
125
+ }
126
+ },
127
+ 'леветирацетам': {
128
+ 'title': 'Пример группы леветирацетама',
129
+ 'description': 'Типичный случай для группы леветирацетама',
130
+ 'values': {
131
+ # Заполните типичными значениями для группы леветирацетама
132
+ 'age': 38,
133
+ 'Шкала_ПВА 0': 20,
134
+ 'HADS_Тревога 0': 12,
135
+ 'HADS_Депрессия 0': 11,
136
+ # ... добавьте остальные значения
137
+ }
138
+ }
139
+ }
140
+
141
+ # Отображение примеров в виде карточек
142
+ col1, col2, col3 = st.columns(3)
143
+
144
+ def create_example_card(title, description, values, key):
145
+ with st.container():
146
+ st.markdown(f"""
147
+ <div style="
148
+ padding: 1rem;
149
+ border-radius: 0.5rem;
150
+ border: 1px solid #e0e0e0;
151
+ margin: 0.5rem 0;
152
+ background-color: white;
153
+ box-shadow: 0 2px 4px rgba(0,0,0,0.1);">
154
+ <h3>{title}</h3>
155
+ <p>{description}</p>
156
+ </div>
157
+ """, unsafe_allow_html=True)
158
+ if st.button('Применить этот пример', key=key):
159
+ st.session_state['current_example'] = values
160
+
161
+ with col1:
162
+ create_example_card(
163
+ example_cases['контр']['title'],
164
+ example_cases['контр']['description'],
165
+ example_cases['контр']['values'],
166
+ 'example_control'
167
+ )
168
+
169
+ with col2:
170
+ create_example_card(
171
+ example_cases['топирамат']['title'],
172
+ example_cases['топирамат']['description'],
173
+ example_cases['топирамат']['values'],
174
+ 'example_topirama'
175
+ )
176
+
177
+ with col3:
178
+ create_example_card(
179
+ example_cases['леветирацетам']['title'],
180
+ example_cases['леветирацетам']['description'],
181
+ example_cases['леветирацетам']['values'],
182
+ 'example_levetiracetam'
183
+ )
184
+
185
  # Описание в основной части
186
  with st.container():
187
  st.markdown("""
 
208
 
209
  input_data = {}
210
 
211
+ # Получаем значения из примера, если он выбран
212
+ current_example = st.session_state.get('current_example', {})
213
+
214
  with tab1:
215
  # Числовые признаки
216
  for i in range(0, len(numeric_features), 2):
 
218
  with col1:
219
  if i < len(numeric_features):
220
  feature = numeric_features[i]
221
+ default_value = current_example.get(feature, float(numeric_defaults[feature]))
222
  input_data[feature] = st.number_input(
223
  f'{feature}',
224
  value=default_value,
225
  format="%.2f",
226
+ help=f"Среднее: {numeric_defaults[feature]:.2f}"
227
  )
228
  with col2:
229
  if i + 1 < len(numeric_features):
230
  feature = numeric_features[i + 1]
231
+ default_value = current_example.get(feature, float(numeric_defaults[feature]))
232
  input_data[feature] = st.number_input(
233
  f'{feature}',
234
  value=default_value,
235
  format="%.2f",
236
+ help=f"Среднее: {numeric_defaults[feature]:.2f}"
237
  )
238
 
239
  with tab2:
 
244
  if i < len(categorical_features):
245
  feature = categorical_features[i]
246
  options = categorical_options[feature]
247
+ default_value = current_example.get(feature, categorical_defaults[feature])
248
+ default_idx = options.index(default_value) if default_value in options else 0
249
  input_data[feature] = st.selectbox(
250
  f'{feature}',
251
  options,
 
256
  if i + 1 < len(categorical_features):
257
  feature = categorical_features[i + 1]
258
  options = categorical_options[feature]
259
+ default_value = current_example.get(feature, categorical_defaults[feature])
260
+ default_idx = options.index(default_value) if default_value in options else 0
261
  input_data[feature] = st.selectbox(
262
  f'{feature}',
263
  options,
 
382
  - При уверенности ниже 50% рекомендуется дополнительное обследование
383
  - Результаты модели носят рекомендательный характер
384
  """)
385
+ # Добавьте кнопку сброса примера
386
+ if st.session_state.get('current_example'):
387
+ if st.button('Сбросить пример'):
388
+ del st.session_state['current_example']
389
+ st.experimental_rerun()
390
  # Добавляем footer
391
  st.markdown("""
392
  ---