|
import streamlit as st |
|
import json |
|
import requests |
|
import pandas as pd |
|
import numpy as np |
|
import pickle |
|
|
|
st.set_page_config(layout="wide") |
|
|
|
st.title("Прогнозирование фракции выброса левого желудочка") |
|
|
|
|
|
col1, col2, col3, col4, col5, col6, col7, col8, col9, col10 = st.columns(10) |
|
|
|
vozrast = 57 |
|
pim = 2 |
|
cd = 3 |
|
fp = 2 |
|
nyha = 2 |
|
ckf= 78 |
|
nt = 235 |
|
kcr = 36 |
|
lp = 38 |
|
st2 = 38 |
|
|
|
mod = st.radio( |
|
"Выберите модель", |
|
options=["Линейная", "Нелинейная"] |
|
) |
|
|
|
with col1: |
|
f1 = st.text_input('возраст') |
|
vozrast_check = st.checkbox('возраст', value=True) |
|
with col2: |
|
f2 =st.text_input('ПИМ') |
|
pim_check = st.checkbox('ПИМ', value=True) |
|
with col3: |
|
f3 = st.text_input('СД') |
|
cd_check = st.checkbox('СД', value=True) |
|
with col4: |
|
f4 = st.text_input('ФП') |
|
fp_check = st.checkbox('ФП', value=True) |
|
with col5: |
|
f5 = st.text_input('NYHA') |
|
nyha_check = st.checkbox('NYHA', value=True) |
|
with col6: |
|
f6 = st.text_input('СКФ CKD-EPI') |
|
ckf_check = st.checkbox('СКФ CKD-EPI', value=True) |
|
with col7: |
|
f7 =st.text_input('NT_proBNP') |
|
nt_check = st.checkbox('NT_proBNP', value=True) |
|
with col8: |
|
f8 = st.text_input('КСР') |
|
kcr_check = st.checkbox('КСР', value=True) |
|
with col9: |
|
f9 = st.text_input('ЛП') |
|
lp_check = st.checkbox('ЛП', value=True) |
|
with col10: |
|
f10 = st.text_input('ST2') |
|
st2_check = st.checkbox('ST2', value=True) |
|
|
|
|
|
|
|
filename_model = 'huber2.pickle' |
|
filename_scaler = 'scaler2.pickle' |
|
filename_cat = 'catboost2.pickle' |
|
filename_ohe = 'ohe2.pickle' |
|
|
|
loaded_model = pickle.load(open(filename_model, 'rb')) |
|
loaded_scaler = pickle.load(open(filename_scaler, 'rb')) |
|
loaded_cat = pickle.load(open(filename_cat, 'rb')) |
|
loaded_ohe = pickle.load(open(filename_ohe, 'rb')) |
|
|
|
|
|
cd = 3 |
|
fp = 2 |
|
nyha = 2 |
|
ckf= 78 |
|
nt = 235 |
|
kcr = 36 |
|
lp = 38 |
|
st2 = 38 |
|
|
|
if st.button('OK'): |
|
|
|
if vozrast_check: |
|
if f1 == '': |
|
st.write('Вы не ввели возраст, будет использовано медианное значение') |
|
f1 = vozrast |
|
else: |
|
f1 = 0 |
|
|
|
if pim_check: |
|
if f2 == '': |
|
st.write('Вы не ввели ПИМ, будет использовано медианное значение') |
|
f2 = pim |
|
else: |
|
f2 = 0 |
|
|
|
if cd_check: |
|
if f3 == '': |
|
st.write('Вы не ввели СД, будет использовано медианное значение') |
|
f3 = cd |
|
else: |
|
f3 = 0 |
|
|
|
if fp_check: |
|
if f4 == '': |
|
st.write('Вы не ввели ФП, будет использовано медианное значение') |
|
f4 = fp |
|
else: |
|
f4 = 0 |
|
|
|
if nyha_check: |
|
if f5 == '': |
|
st.write('Вы не ввели NYHA, будет использовано медианное значение') |
|
f5 = nyha |
|
else: |
|
f5 = 0 |
|
|
|
if ckf_check: |
|
if f6 == '': |
|
st.write('Вы не ввели СКФ CKD-EPI, будет использовано медианное значение') |
|
f6 = ckf |
|
else: |
|
f6 = 0 |
|
|
|
if nt_check: |
|
if f7 == '': |
|
st.write('Вы не ввели NT_proBNP, будет использовано медианное значение') |
|
f7 = nt |
|
else: |
|
f7 = 0 |
|
|
|
if kcr_check: |
|
if f8 == '': |
|
st.write('Вы не ввели КСР, будет использовано медианное значение') |
|
f8 = kcr |
|
else: |
|
f8 = 0 |
|
|
|
if lp_check: |
|
if f9 == '': |
|
st.write('Вы не ввели ЛП, будет использовано медианное значение') |
|
f9 = lp |
|
else: |
|
f9 = 0 |
|
|
|
if st2: |
|
if f10 == '': |
|
st.write('Вы не ввели ST2, будет использовано медианное значение') |
|
f10 = st2 |
|
else: |
|
f10 = 0 |
|
|
|
|
|
|
|
line = np.array([[float(f1), str(f2), str(f3), str(f4), str(f5), float(f6), float(f7), float(f8), float(f9), float(f10)]]) |
|
picked_cols = ['возраст', 'ПИМ', 'СД', 'ФП', 'NYHA', 'СКФ CKD-EPI', 'NT_proBNP', 'КСР', 'ЛП', 'ST2'] |
|
categorical_cols = ['ПИМ', 'СД', 'ФП', 'NYHA'] |
|
num_cols = ['возраст', 'СКФ CKD-EPI', 'NT_proBNP', 'КСР', 'ЛП', 'ST2'] |
|
|
|
X = pd.DataFrame(line, columns=picked_cols) |
|
|
|
X_transform = pd.DataFrame(loaded_ohe.transform(X[categorical_cols]).toarray()).set_index(X.index) |
|
X_transform.columns = loaded_ohe.get_feature_names_out() |
|
|
|
X_encode = pd.concat([X_transform, X[num_cols]], axis=1) |
|
|
|
line_norm = loaded_scaler.transform(X_encode) |
|
|
|
if mod == 'Линейная': |
|
res = loaded_model.predict(line_norm)[0] |
|
st.header(int(res)) |
|
else: |
|
res = loaded_cat.predict(line_norm)[0] |
|
st.header(int(res)) |
|
|