Spaces:
Build error
Build error
#pip install streamlit | |
#pip install pandas | |
#pip install sklearn | |
# IMPORT STATEMENTS | |
import streamlit as st | |
import pandas as pd | |
from PIL import Image | |
import numpy as np | |
import matplotlib.pyplot as plt | |
import plotly.figure_factory as ff | |
from sklearn.metrics import accuracy_score | |
from sklearn.ensemble import RandomForestClassifier | |
from sklearn.model_selection import train_test_split | |
import seaborn as sns | |
df = pd.read_csv(r'/Users/rusiththarindu/Desktop/Final Year Project/diabetes.csv') | |
# HEADINGS | |
st.title('Diabetes Checkup') | |
st.sidebar.header('Patient Data') | |
st.subheader('Training Data Stats') | |
st.write(df.describe()) | |
# X AND Y DATA | |
x = df.drop(['Outcome'], axis = 1) | |
y = df.iloc[:, -1] | |
x_train, x_test, y_train, y_test = train_test_split(x,y, test_size = 0.2, random_state = 0) | |
# FUNCTION | |
def user_report(): | |
pregnancies = st.sidebar.slider('Pregnancies', 0,17, 3 ) | |
glucose = st.sidebar.slider('Glucose', 0,200, 120 ) | |
bp = st.sidebar.slider('Blood Pressure', 0,122, 70 ) | |
skinthickness = st.sidebar.slider('Skin Thickness', 0,100, 20 ) | |
insulin = st.sidebar.slider('Insulin', 0,846, 79 ) | |
bmi = st.sidebar.slider('BMI', 0,67, 20 ) | |
dpf = st.sidebar.slider('Diabetes Pedigree Function', 0.0,2.4, 0.47 ) | |
age = st.sidebar.slider('Age', 21,88, 33 ) | |
user_report_data = { | |
'pregnancies':pregnancies, | |
'glucose':glucose, | |
'bp':bp, | |
'skinthickness':skinthickness, | |
'insulin':insulin, | |
'bmi':bmi, | |
'dpf':dpf, | |
'age':age | |
} | |
report_data = pd.DataFrame(user_report_data, index=[0]) | |
return report_data | |
# PATIENT DATA | |
user_data = user_report() | |
st.subheader('Patient Data') | |
st.write(user_data) | |
# MODEL | |
rf = RandomForestClassifier() | |
rf.fit(x_train, y_train) | |
user_result = rf.predict(user_data) | |
# VISUALISATIONS | |
st.title('Visualised Patient Report') | |
# COLOR FUNCTION | |
if user_result[0]==0: | |
color = 'blue' | |
else: | |
color = 'red' | |
# Age vs Pregnancies | |
st.header('Pregnancy count Graph (Others vs Yours)') | |
fig_preg = plt.figure() | |
ax1 = sns.scatterplot(x = 'Age', y = 'Pregnancies', data = df, hue = 'Outcome', palette = 'Greens') | |
ax2 = sns.scatterplot(x = user_data['age'], y = user_data['pregnancies'], s = 150, color = color) | |
plt.xticks(np.arange(10,100,5)) | |
plt.yticks(np.arange(0,20,2)) | |
plt.title('0 - Healthy & 1 - Unhealthy') | |
st.pyplot(fig_preg) | |
# Age vs Glucose | |
st.header('Glucose Value Graph (Others vs Yours)') | |
fig_glucose = plt.figure() | |
ax3 = sns.scatterplot(x = 'Age', y = 'Glucose', data = df, hue = 'Outcome' , palette='magma') | |
ax4 = sns.scatterplot(x = user_data['age'], y = user_data['glucose'], s = 150, color = color) | |
plt.xticks(np.arange(10,100,5)) | |
plt.yticks(np.arange(0,220,10)) | |
plt.title('0 - Healthy & 1 - Unhealthy') | |
st.pyplot(fig_glucose) | |
# Age vs Bp | |
st.header('Blood Pressure Value Graph (Others vs Yours)') | |
fig_bp = plt.figure() | |
ax5 = sns.scatterplot(x = 'Age', y = 'BloodPressure', data = df, hue = 'Outcome', palette='Reds') | |
ax6 = sns.scatterplot(x = user_data['age'], y = user_data['bp'], s = 150, color = color) | |
plt.xticks(np.arange(10,100,5)) | |
plt.yticks(np.arange(0,130,10)) | |
plt.title('0 - Healthy & 1 - Unhealthy') | |
st.pyplot(fig_bp) | |
# Age vs St | |
st.header('Skin Thickness Value Graph (Others vs Yours)') | |
fig_st = plt.figure() | |
ax7 = sns.scatterplot(x = 'Age', y = 'SkinThickness', data = df, hue = 'Outcome', palette='Blues') | |
ax8 = sns.scatterplot(x = user_data['age'], y = user_data['skinthickness'], s = 150, color = color) | |
plt.xticks(np.arange(10,100,5)) | |
plt.yticks(np.arange(0,110,10)) | |
plt.title('0 - Healthy & 1 - Unhealthy') | |
st.pyplot(fig_st) | |
# Age vs Insulin | |
st.header('Insulin Value Graph (Others vs Yours)') | |
fig_i = plt.figure() | |
ax9 = sns.scatterplot(x = 'Age', y = 'Insulin', data = df, hue = 'Outcome', palette='rocket') | |
ax10 = sns.scatterplot(x = user_data['age'], y = user_data['insulin'], s = 150, color = color) | |
plt.xticks(np.arange(10,100,5)) | |
plt.yticks(np.arange(0,900,50)) | |
plt.title('0 - Healthy & 1 - Unhealthy') | |
st.pyplot(fig_i) | |
# Age vs BMI | |
st.header('BMI Value Graph (Others vs Yours)') | |
fig_bmi = plt.figure() | |
ax11 = sns.scatterplot(x = 'Age', y = 'BMI', data = df, hue = 'Outcome', palette='rainbow') | |
ax12 = sns.scatterplot(x = user_data['age'], y = user_data['bmi'], s = 150, color = color) | |
plt.xticks(np.arange(10,100,5)) | |
plt.yticks(np.arange(0,70,5)) | |
plt.title('0 - Healthy & 1 - Unhealthy') | |
st.pyplot(fig_bmi) | |
# Age vs Dpf | |
st.header('DPF Value Graph (Others vs Yours)') | |
fig_dpf = plt.figure() | |
ax13 = sns.scatterplot(x = 'Age', y = 'DiabetesPedigreeFunction', data = df, hue = 'Outcome', palette='YlOrBr') | |
ax14 = sns.scatterplot(x = user_data['age'], y = user_data['dpf'], s = 150, color = color) | |
plt.xticks(np.arange(10,100,5)) | |
plt.yticks(np.arange(0,3,0.2)) | |
plt.title('0 - Healthy & 1 - Unhealthy') | |
st.pyplot(fig_dpf) | |
# OUTPUT | |
st.subheader('Your Report: ') | |
output='' | |
if user_result[0]==0: | |
output = 'You are not Diabetic' | |
else: | |
output = 'You are Diabetic' | |
st.title(output) | |
st.subheader('Accuracy: ') | |
st.write(str(accuracy_score(y_test, rf.predict(x_test))*100)+'%') | |