|
import streamlit as st |
|
import pandas as pd |
|
import numpy as np |
|
import pickle |
|
import json |
|
|
|
|
|
|
|
|
|
with open('model_rf.pkl', 'rb') as file_1: |
|
model_rf = pickle.load(file_1) |
|
|
|
with open('model_scaler.pkl', 'rb') as file_3: |
|
model_scaler = pickle.load(file_3) |
|
|
|
with open('model_encoder.pkl','rb') as file_4: |
|
model_encoder = pickle.load(file_4) |
|
|
|
with open('list_num_cols.txt', 'r') as file_5: |
|
list_num_cols = json.load(file_5) |
|
|
|
with open('list_cat_cols.txt', 'r') as file_6: |
|
list_cat_cols = json.load(file_6) |
|
|
|
def run(): |
|
|
|
st.title('Heart Failure Prediction') |
|
|
|
|
|
with st.form(key='form_heart_failure'): |
|
age = st.number_input('Age', min_value=1, max_value=100, value=25, step=1, help='in Years Old') |
|
anemia = st.selectbox('Do you have Anemia?', ('Yes', 'No')) |
|
cpk = st.number_input('Level of CPK Enzyme', min_value=10, max_value=8000, value=120, help='in mcg/L, 10-120 considered normal') |
|
diabetes = st.selectbox('Do you have Diabetes?', ('Yes','No')) |
|
ejection_fraction = st.slider('Ejection Fraction', 0,100,50, help='in Percentage (%)') |
|
hypertension = st.selectbox('Do you have Hypertension?', ('Yes','No')) |
|
platelets = st.number_input('Platelets / Trombosit per mL of Blood', min_value=1000, max_value=800000, value=150000,help='150k - 450k is considered normal') |
|
serum_creatinine = st.number_input('Serum Creatinine Level', min_value=.1, max_value=10., value=1.,step=.1, help='in mg/dL, 0.6 - 1.2 is considered normal') |
|
serum_sodium = st.number_input('Serum Sodium Level', min_value=100, max_value=200, value=150, help='in mEq/L, 135 - 145 considered to be normal') |
|
sex = st.selectbox('Are you a male or female?', ('Male','Female')) |
|
smoking = st.selectbox('Do you smoke?', ('Yes','No')) |
|
time = st.number_input('How many days since receiving medical treatment?', min_value=1, max_value=365, value=1) |
|
|
|
submitted = st.form_submit_button('Predict') |
|
|
|
|
|
data_inf = { |
|
'age': age, |
|
'anemia': anemia, |
|
'cpk': cpk, |
|
'diabetes': diabetes, |
|
'ejection_fraction' : ejection_fraction, |
|
'hypertension': hypertension, |
|
'platelets': platelets, |
|
'serum_creatinine': serum_creatinine, |
|
'serum_sodium': serum_sodium, |
|
'sex': sex, |
|
'smoking': smoking, |
|
'time': time |
|
} |
|
|
|
data_inf = pd.DataFrame([data_inf]) |
|
st.dataframe(data_inf) |
|
|
|
data_inf['anemia'] = data_inf['anemia'].replace({'Yes': 1, 'No': 0}) |
|
data_inf['diabetes'] = data_inf['diabetes'].replace({'Yes': 1, 'No': 0}) |
|
data_inf['hypertension'] = data_inf['hypertension'].replace({'Yes': 1, 'No': 0}) |
|
data_inf['smoking'] = data_inf['smoking'].replace({'Yes': 1, 'No': 0}) |
|
data_inf['sex'] = data_inf['sex'].replace({'Male': 1, 'Female': 0}) |
|
|
|
if submitted: |
|
|
|
|
|
data_inf_num = data_inf[list_num_cols] |
|
data_inf_cat = data_inf[list_cat_cols] |
|
|
|
|
|
|
|
data_inf_num_scaled = model_scaler.transform(data_inf_num) |
|
data_inf_cat_encoded = model_encoder.transform(data_inf_cat) |
|
data_inf_final = np.concatenate([data_inf_num_scaled, data_inf_cat_encoded], axis=1) |
|
|
|
|
|
|
|
y_pred_inf = model_rf.predict(data_inf_final) |
|
st.write('Hasil prediksi Model : ', y_pred_inf) |
|
|
|
|
|
''' |
|
Hasil Prediksi 0 = Alive, 1 = Dead |
|
''' |
|
|
|
if __name__ == '__main__': |
|
run() |