Milestone / app.py
AlselloDM's picture
Upload 4 files
6af0c80
import streamlit as st
import pandas as pd
import pickle
# Title
st.write("""
# DEATH PREDICTION APP
This app predicts the likelihood of a patient's **Death** .
""")
@st.cache_data
def fetch_data():
df = pd.read_csv('h8dsft_P1G3_AlselloDM.csv')
return df
df = fetch_data()
st.sidebar.title("Patient's Medical Records")
st.sidebar.write('Please enter the condition here')
st.sidebar.title("Prediction Form📋")
def user_input_features():
# Age of the patient
age = st.sidebar.number_input("Age of the patient", 1,100)
# Decrease of red blood cells or hemoglobin
anaemia = st.sidebar.selectbox('Have Anaemia? (1 : True | 0 : False)',(1,0))
# Level of the CPK enzyme in the blood
creatinine_phosphokinase = st.sidebar.slider('How much is the Creatinine_Phosphokinase(CP) in the body?',20,8000,3000)
# If the patient has diabetes
diabetes = st.sidebar.selectbox('If the patient has diabetes (1 : True | 0 : False)',(1,0))
# Heart capability
ejection_fraction = st.sidebar.slider('What is the Ejection Fraction?',0,150,75)
# If the patient has hypertension
high_blood_pressure = st.sidebar.selectbox('If the patient has hypertension (1 : True | 0 : False)',(1,0))
# Platelets in the blood
platelets = st.sidebar.number_input("What is the Blood Platelets count? (kiloplatelets/mL)",0.0,100000.0)
# Level of creatinine in the blood
serum_creatinine = st.sidebar.slider('What is the level of serum creatinine in the bloodstream?',0.5,10.0,0.5)
# Level of sodium in the blood
serum_sodium = st.sidebar.slider('What is the level of Serum_Sodium in the Body?',50,200,50)
# Male or Female
sex = st.sidebar.selectbox('Gender',('Male','Female'))
# If the patient smokes
smoking = st.sidebar.selectbox('If the patient smokes (1 : True | 0 : False)',(1,0))
# Follow-up period
time = st.sidebar.slider('Follow-up period',0,400,20)
data = {'age': age,'anaemia':anaemia,'creatinine_phosphokinase':creatinine_phosphokinase,
'diabetes':diabetes,'ejection_fraction':ejection_fraction,
'high_blood_pressure':high_blood_pressure,'platelets':platelets,
'serum_creatinine':serum_creatinine,'serum_sodium':serum_sodium,
'sex':sex,'smoking':smoking,'time':time}
#
features = pd.DataFrame(data,index=[0])
return features
input_df = user_input_features()
st.subheader('Medical Data📋')
st.write(input_df)
with open('death_pred.pkl', 'rb') as file:
load_model = pickle.load(file)
# Access the individual models
model_xgboost = load_model['model_xgboost']
if st.button('Predict'):
try:
prediction = model_xgboost.predict(input_df)
prediction_proba = model_xgboost.predict_proba(input_df)
st.subheader('DIAGNOSIS')
for i in range(len(prediction)):
if prediction[i] == 0:
st.success("The patient is in good condition")
else:
st.error("This Patient is at **Risk of Death**")
st.subheader('Probability')
st.write("0 : No | 1 : Yes")
st.write(prediction_proba)
except ValueError:
st.header("Insufficient Medical Data")