Diabetic_Predictor / prediction.py
Andika Atmanegara Putra
Update prediction.py
18c354a
raw
history blame contribute delete
No virus
3.47 kB
import streamlit as st
import pandas as pd
import numpy as np
import pickle
import json
from PIL import Image
# load all files
with open('ab_model.pkl', 'rb') as file_1:
ab_model = pickle.load(file_1)
# Pre-processing
with open('scale_feat.pkl', 'rb') as file_2:
scale_feat = pickle.load(file_2)
with open('winsoriser.pkl', 'rb') as file_3:
winsoriser = pickle.load(file_3)
# List Numeric & Category
with open('num_cols_sc.txt', 'r') as file_4:
num_cols_sc = json.load(file_4)
with open('num_cols_nsc.txt', 'r') as file_5:
num_cols_nsc = json.load(file_5)
def run():
with st.form(key='from_diabetes'):
st.title('Prediction Page')
# sub header
st.subheader('We calculate your metrics to calculate diabetes')
# add pic
image = Image.open('diabetes2.png')
st.image(image)
st.write('Columns below are parameter we would like to use to predict if a patient have a diabetes or not.')
st.write('*`Please fill columns below to predict`*')
gender = st.selectbox('Gender', [0,1], help='0 = Female, 1 = Male')
age = st.number_input('Age', min_value=25, max_value=80,
value=45, step=1, help='Usia Pasien')
hypertension = st.number_input('Hypertension', min_value=0, max_value=1 , value=0,
step=1, help='have hypertension?')
heart_disease = st.number_input('Heart Disease', min_value=0, max_value=1 , value=0,
step=1, help='have heart disease?')
bmi = st.number_input('Body Mass Index', min_value=5, max_value=80,
value=30, step=5, help='Amount of BMI')
HbA1c_level = st.number_input('Hemogloblin Level', min_value= 3, max_value= 10,
value= 6, help='Level of Hemogloblin 3-10')
blood_glucose_level = st.slider('Glucose Level', 0, 400, 150, step=10,
help='Glucose amount in blood stream')
st.markdown('---')
submitted = st.form_submit_button('Predict')
data_inf = {
'age': age,
'bmi': bmi,
'hemoglobin_level': HbA1c_level,
'blood_glucose_level': blood_glucose_level,
'gender': gender,
'hypertension': hypertension,
'heart_disease': heart_disease,
}
data_inf = pd.DataFrame([data_inf])
st.dataframe(data_inf)
if submitted:
data_inf_sc = data_inf[num_cols_sc]
data_inf_nsc = data_inf[num_cols_nsc]
# scalling
data_inf_sc = scale_feat.transform(data_inf_sc)
data_inf_sc = pd.DataFrame(data_inf_sc, columns=num_cols_sc)
# Reset Index
data_inf_sc.reset_index(drop= True, inplace= True)
data_inf_nsc.reset_index(drop = True, inplace = True)
data_final = pd.concat([data_inf_sc, data_inf_nsc], axis= 1)
# modeling
y_pred_inf = ab_model.predict(data_final)
if y_pred_inf[0] == 1:
st.write('# **`Prediction: You Have Diabetes`**')
else:
st.write('# **`Prediction: You do not Have Diabetes`**')
if __name__ == '__main__':
run()