Update app.py
Browse files
app.py
CHANGED
@@ -5,16 +5,23 @@ import pandas as pd
|
|
5 |
import numpy as np
|
6 |
import pickle
|
7 |
|
|
|
|
|
8 |
st.title("Прогнозирование фракции выброса левого желудочка")
|
9 |
|
10 |
|
11 |
-
col1, col2, col3, col4, col5 = st.columns(
|
12 |
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
nyha = 2
|
|
|
|
|
|
|
|
|
|
|
18 |
|
19 |
mod = st.radio(
|
20 |
"Выберите модель",
|
@@ -22,51 +29,150 @@ mod = st.radio(
|
|
22 |
)
|
23 |
|
24 |
with col1:
|
25 |
-
f1 = st.text_input('
|
|
|
26 |
with col2:
|
27 |
-
f2 =st.text_input('
|
|
|
28 |
with col3:
|
29 |
-
f3 = st.text_input('
|
|
|
30 |
with col4:
|
31 |
-
f4 = st.text_input('
|
|
|
32 |
with col5:
|
33 |
-
f5 = st.text_input('NYHA')
|
34 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
35 |
|
36 |
-
filename_model = '
|
37 |
-
filename_scaler = '
|
38 |
-
filename_cat = '
|
|
|
39 |
|
40 |
loaded_model = pickle.load(open(filename_model, 'rb'))
|
41 |
loaded_scaler = pickle.load(open(filename_scaler, 'rb'))
|
42 |
loaded_cat = pickle.load(open(filename_cat, 'rb'))
|
|
|
|
|
43 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
44 |
|
45 |
if st.button('OK'):
|
46 |
|
47 |
-
if
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
62 |
|
63 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
64 |
|
65 |
if mod == 'Линейная':
|
66 |
-
line_norm = loaded_scaler.transform(line)
|
67 |
res = loaded_model.predict(line_norm)[0]
|
68 |
st.header(int(res))
|
69 |
else:
|
70 |
-
res = loaded_cat.predict(
|
71 |
st.header(int(res))
|
72 |
|
|
|
5 |
import numpy as np
|
6 |
import pickle
|
7 |
|
8 |
+
st.set_page_config(layout="wide")
|
9 |
+
|
10 |
st.title("Прогнозирование фракции выброса левого желудочка")
|
11 |
|
12 |
|
13 |
+
col1, col2, col3, col4, col5, col6, col7, col8, col9, col10 = st.columns(10)
|
14 |
|
15 |
+
vozrast = 57
|
16 |
+
pim = 2
|
17 |
+
cd = 3
|
18 |
+
fp = 2
|
19 |
+
nyha = 2
|
20 |
+
ckf= 78
|
21 |
+
nt = 235
|
22 |
+
kcr = 36
|
23 |
+
lp = 38
|
24 |
+
st2 = 38
|
25 |
|
26 |
mod = st.radio(
|
27 |
"Выберите модель",
|
|
|
29 |
)
|
30 |
|
31 |
with col1:
|
32 |
+
f1 = st.text_input('возраст')
|
33 |
+
vozrast_check = st.checkbox('возраст', value=True)
|
34 |
with col2:
|
35 |
+
f2 =st.text_input('ПИМ')
|
36 |
+
pim_check = st.checkbox('ПИМ', value=True)
|
37 |
with col3:
|
38 |
+
f3 = st.text_input('СД')
|
39 |
+
cd_check = st.checkbox('СД', value=True)
|
40 |
with col4:
|
41 |
+
f4 = st.text_input('ФП')
|
42 |
+
fp_check = st.checkbox('ФП', value=True)
|
43 |
with col5:
|
44 |
+
f5 = st.text_input('NYHA')
|
45 |
+
nyha_check = st.checkbox('NYHA', value=True)
|
46 |
+
with col6:
|
47 |
+
f6 = st.text_input('СКФ CKD-EPI')
|
48 |
+
ckf_check = st.checkbox('СКФ CKD-EPI', value=True)
|
49 |
+
with col7:
|
50 |
+
f7 =st.text_input('NT_proBNP')
|
51 |
+
nt_check = st.checkbox('NT_proBNP', value=True)
|
52 |
+
with col8:
|
53 |
+
f8 = st.text_input('КСР')
|
54 |
+
kcr_check = st.checkbox('КСР', value=True)
|
55 |
+
with col9:
|
56 |
+
f9 = st.text_input('ЛП')
|
57 |
+
lp_check = st.checkbox('ЛП', value=True)
|
58 |
+
with col10:
|
59 |
+
f10 = st.text_input('ST2')
|
60 |
+
st2_check = st.checkbox('ST2', value=True)
|
61 |
+
|
62 |
+
|
63 |
|
64 |
+
filename_model = 'huber2.pickle'
|
65 |
+
filename_scaler = 'scaler2.pickle'
|
66 |
+
filename_cat = 'catboost2.pickle'
|
67 |
+
filename_ohe = 'ohe2.pickle'
|
68 |
|
69 |
loaded_model = pickle.load(open(filename_model, 'rb'))
|
70 |
loaded_scaler = pickle.load(open(filename_scaler, 'rb'))
|
71 |
loaded_cat = pickle.load(open(filename_cat, 'rb'))
|
72 |
+
loaded_ohe = pickle.load(open(filename_ohe, 'rb'))
|
73 |
+
|
74 |
|
75 |
+
cd = 3
|
76 |
+
fp = 2
|
77 |
+
nyha = 2
|
78 |
+
ckf= 78
|
79 |
+
nt = 235
|
80 |
+
kcr = 36
|
81 |
+
lp = 38
|
82 |
+
st2 = 38
|
83 |
|
84 |
if st.button('OK'):
|
85 |
|
86 |
+
if vozrast_check:
|
87 |
+
if f1 == '':
|
88 |
+
st.write('Вы не ввели возраст, будет использовано медианное значение')
|
89 |
+
f1 = vozrast
|
90 |
+
else:
|
91 |
+
f1 = 0
|
92 |
+
|
93 |
+
if pim_check:
|
94 |
+
if f2 == '':
|
95 |
+
st.write('Вы не ввели ПИМ, будет использовано медианное значение')
|
96 |
+
f2 = pim
|
97 |
+
else:
|
98 |
+
f2 = 0
|
99 |
+
|
100 |
+
if cd_check:
|
101 |
+
if f3 == '':
|
102 |
+
st.write('Вы не ввели СД, будет использовано медианное значение')
|
103 |
+
f3 = cd
|
104 |
+
else:
|
105 |
+
f3 = 0
|
106 |
+
|
107 |
+
if fp_check:
|
108 |
+
if f4 == '':
|
109 |
+
st.write('Вы не ввели ФП, будет использовано медианное значение')
|
110 |
+
f4 = fp
|
111 |
+
else:
|
112 |
+
f4 = 0
|
113 |
+
|
114 |
+
if nyha_check:
|
115 |
+
if f5 == '':
|
116 |
+
st.write('Вы не ввели NYHA, будет использовано медианное значение')
|
117 |
+
f5 = nyha
|
118 |
+
else:
|
119 |
+
f5 = 0
|
120 |
|
121 |
+
if ckf_check:
|
122 |
+
if f6 == '':
|
123 |
+
st.write('Вы не ввели СКФ CKD-EPI, будет использовано медианное значение')
|
124 |
+
f6 = ckf
|
125 |
+
else:
|
126 |
+
f6 = 0
|
127 |
+
|
128 |
+
if nt_check:
|
129 |
+
if f7 == '':
|
130 |
+
st.write('Вы не ввели NT_proBNP, будет использовано медианное значение')
|
131 |
+
f7 = nt
|
132 |
+
else:
|
133 |
+
f7 = 0
|
134 |
+
|
135 |
+
if kcr_check:
|
136 |
+
if f8 == '':
|
137 |
+
st.write('Вы не ввели КСР, будет использовано медианное значение')
|
138 |
+
f8 = kcr
|
139 |
+
else:
|
140 |
+
f8 = 0
|
141 |
+
|
142 |
+
if lp_check:
|
143 |
+
if f9 == '':
|
144 |
+
st.write('Вы не ввели ЛП, будет использовано медианное значение')
|
145 |
+
f9 = lp
|
146 |
+
else:
|
147 |
+
f9 = 0
|
148 |
+
|
149 |
+
if st2:
|
150 |
+
if f10 == '':
|
151 |
+
st.write('Вы не ввели ST2, будет использовано медианное значение')
|
152 |
+
f10 = st2
|
153 |
+
else:
|
154 |
+
f10 = 0
|
155 |
+
|
156 |
+
# line = np.array([[float(f1), str(f2), str(f3), str(f4), str(f5), float(f6), float(f7), float(f8), float(f9), float(f10)]])
|
157 |
+
|
158 |
+
line = np.array([[float(f1), str(f2), str(f3), str(f4), str(f5), float(f6), float(f7), float(f8), float(f9), float(f10)]])
|
159 |
+
picked_cols = ['возраст', 'ПИМ', 'СД', 'ФП', 'NYHA', 'СКФ CKD-EPI', 'NT_proBNP', 'КСР', 'ЛП', 'ST2']
|
160 |
+
categorical_cols = ['ПИМ', 'СД', 'ФП', 'NYHA']
|
161 |
+
num_cols = ['возраст', 'СКФ CKD-EPI', 'NT_proBNP', 'КСР', 'ЛП', 'ST2']
|
162 |
+
|
163 |
+
X = pd.DataFrame(line, columns=picked_cols)
|
164 |
+
|
165 |
+
X_transform = pd.DataFrame(loaded_ohe.transform(X[categorical_cols]).toarray()).set_index(X.index)
|
166 |
+
X_transform.columns = loaded_ohe.get_feature_names_out()
|
167 |
+
|
168 |
+
X_encode = pd.concat([X_transform, X[num_cols]], axis=1)
|
169 |
+
|
170 |
+
line_norm = loaded_scaler.transform(X_encode)
|
171 |
|
172 |
if mod == 'Линейная':
|
|
|
173 |
res = loaded_model.predict(line_norm)[0]
|
174 |
st.header(int(res))
|
175 |
else:
|
176 |
+
res = loaded_cat.predict(line_norm)[0]
|
177 |
st.header(int(res))
|
178 |
|