|
import streamlit as st |
|
import pandas as pd |
|
import pickle |
|
import json |
|
|
|
with open('list_col_num.txt', 'r') as file_1: |
|
list_col_num_if = json.load(file_1) |
|
|
|
with open('list_col_cat.txt', 'r') as file_2: |
|
list_col_cat_if = json.load(file_2) |
|
|
|
with open('model_svc.pkl', 'rb') as file_3: |
|
model_svc = pickle.load(file_3) |
|
|
|
def get_trt_index(trt): |
|
if trt == 'ZDV only': |
|
return 0 |
|
elif trt == 'ZDV + ddl': |
|
return 1 |
|
elif trt == 'ZDV + Zal': |
|
return 2 |
|
else: |
|
return 3 |
|
|
|
def get_yes_no_index(yes_no): |
|
if yes_no == 'no': |
|
return 0 |
|
else: |
|
return 1 |
|
|
|
def get_strat_index(strat): |
|
if strat == 'Antiretroviral Naive': |
|
return 1 |
|
elif strat == 'Antiretroviral <= 52 weeks': |
|
return 2 |
|
else: |
|
return 3 |
|
|
|
def get_symptom_index(symptom): |
|
if symptom == 'asymp': |
|
return 0 |
|
else: |
|
return 1 |
|
|
|
def get_treat_index(treat): |
|
if treat == 'ZDV only': |
|
return 0 |
|
else: |
|
return 1 |
|
|
|
def get_race_index(race): |
|
if race == 'White': |
|
return 0 |
|
else: |
|
return 1 |
|
|
|
def get_gender_index(gender): |
|
if gender == 'Female': |
|
return 0 |
|
else: |
|
return 1 |
|
|
|
def get_str2_index(str2): |
|
if str2 == 'naive': |
|
return 0 |
|
else: |
|
return 1 |
|
|
|
def run(): |
|
with st.form("prediction_form"): |
|
st.write('Personal Information') |
|
time = st.number_input('Input time to failure or censoring', value=100) |
|
trt = st.selectbox('Select Treatment Indicator ', {'ZDV only','ZDV + ddl','ZDV + Zal','ddl only'},index=0) |
|
age = st.number_input('Input age in years', value=20) |
|
wtkg = st.number_input('Input weight in kg', value=40.0) |
|
hemo = st.selectbox('Is patient has hemophilia ?', {'no','yes'},index=0) |
|
homo = st.selectbox('Is patient has experience do homosexuality activity ?', {'no','yes'},index=0) |
|
drugs = st.selectbox('Is patient has history of IV drug use ?', {'no','yes'},index=0) |
|
karnof = st.number_input('Input Karnofsky score (on scale 0 - 100)', value=40, min_value=0, max_value=100,step=1) |
|
oprior = st.selectbox('Is patient is Non-ZDV antiretroviral therapy pre-175 ?', {'no','yes'},index=0) |
|
z30 = st.selectbox('Is patient is ZDV in the 30 days prior to 175 ?', {'no','yes'},index=0) |
|
preanti = st.number_input('Input days pre-175 anti-retroviral therapy', value=40) |
|
race = st.selectbox('Input patient race ?', {'White','non-white'},index=0) |
|
gender = st.selectbox('Select gender ?', {'Female','Male'},index=0) |
|
str2 = st.selectbox('Input antiretroviral history', {'naive','experienced'},index=0) |
|
strat = st.selectbox('Input antiretroviral history stratification', {'Antiretroviral Naive','Antiretroviral <= 52 weeks','Antiretroviral > 52 weeks'},index=0) |
|
symptom = st.selectbox('Input symptomatic indicator', {'asymp','symp'},index=0) |
|
treat = st.selectbox('Input treatment indicator ', {'ZDV only','others'},index=0) |
|
offtrt = st.selectbox('Input indicator of off-trt before 96+/-5 weeks ', {'no','yes'},index=0) |
|
cd40 = st.number_input('Input CD4', value=40.0) |
|
cd420 = st.number_input('Input CD4 at 20+/-5 weeks', value=40.0) |
|
cd80 = st.number_input('Input CD8', value=40.0) |
|
cd820 = st.number_input('Input CD8 at 20+/-5 weeks', value=40.0) |
|
submitted = st.form_submit_button("Submit") |
|
st.write("Outside the form") |
|
|
|
data_inf = { |
|
'time': time, |
|
'trt' : get_trt_index(trt), |
|
'age': age, |
|
'wtkg': wtkg, |
|
'hemo': get_yes_no_index(hemo), |
|
'homo': get_yes_no_index(homo), |
|
'drugs': get_yes_no_index(drugs), |
|
'karnof': karnof, |
|
'oprior': get_yes_no_index(oprior), |
|
'z30': get_yes_no_index(z30), |
|
'preanti': preanti, |
|
'race': get_race_index(race), |
|
'gender': get_gender_index(gender), |
|
'str2': get_str2_index(str2), |
|
'strat': get_strat_index(strat), |
|
'symptom': get_symptom_index(symptom), |
|
'treat': get_treat_index(treat), |
|
'offtrt': get_yes_no_index(offtrt), |
|
'cd40':cd40, |
|
'cd420':cd420, |
|
'cd80':cd80, |
|
'cd820':cd820 |
|
} |
|
|
|
if submitted: |
|
df = pd.DataFrame([data_inf]) |
|
df[list_col_cat_if] = df[list_col_cat_if].astype(object) |
|
df = df[list_col_cat_if + list_col_num_if] |
|
|
|
|
|
predict_result = model_svc.predict(df) |
|
if predict_result[0] == 1 : |
|
predic_result_value = 'yes' |
|
else: |
|
predic_result_value = 'no' |
|
st.write(f'## Is patient infected AIDS: {predic_result_value}') |
|
|
|
|
|
|
|
if __name__ == '__main__': |
|
run() |