FVLG / app.py
zendeer's picture
Update app.py
c62dbf7
raw
history blame
5.21 kB
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)]])
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))