import streamlit as st import pandas as pd import numpy as np import pickle import json # Load All Files 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: # Split between Numerical Columns and Categorical Columns data_inf_num = data_inf[list_num_cols] data_inf_cat = data_inf[list_cat_cols] # Feature Scaling and Feature Encoding 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) # Predict using Model 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()