Spaces:
Runtime error
Runtime error
import streamlit as st | |
import pandas as pd | |
import numpy as np | |
import pickle | |
import base64 | |
import seaborn as sns | |
import matplotlib.pyplot as plt | |
st.write(""" | |
# Diabetes Melitus Detection App | |
Diabetes Melitus merupakan salah satu penyakit yang tidak menular (Velia & Saputro, 2020). | |
Penyakit ini ditandai dengan tingginya jumlah gula (glukosa) dalam darah, yang disebabkan oleh | |
ketidakmampuan pankreas untuk menghasilkan hormon insulin (Alfita et al., 2020). | |
Dataset ini berisi 21 fitur yang berisi 70.692 data (35.346 data no diabetes melitus dan | |
35.346 data diabetes melitus) tanggapan survei terhadap The Behavioral Risk Factor Surveillance System | |
(BRFSS) padatahun 2015 oleh Centers for Disease Control (CDC). | |
Variabel target Diabetes_binary memiliki 2 kelas yaitu : | |
* no diabetes melitus | |
* diabetes melitus | |
### Keterangan Fitur | |
1. HighBP / hipertensi : Apakah seseorang yang tidak mengalami/memiliki riwayat hipertensi ? | |
* 0.0 = tidak; 1.0 = ya | |
2. HighChol / Kolesterol tinggi : Apakah seseorang yang tidak mengalami/memiliki riwayat Kolesterol tinggi ? | |
* 0.0 = tidak; 0.0 = ya | |
3. CholCheck : Apakah seseorang yang tidak melakukan pengecekan kolesterol dalam 5 tahun terakhir ? | |
* 0.0 = tidak; 1.0 = ya | |
4. BMI / Body Mass Index (index masa tubuh) | |
* BMI adalah suatu ukuran yang digunakan untuk menunjukkan kategori berat badan seseorang. | |
5. Smoker : Apakah Anda merokok setidaknya 100 batang sepanjang hidup Anda? [Catatan: 5 bungkus = 100 batang] | |
* 0.0 = tidak; 1.0 = ya | |
6. Stroke : Apakah seseorang yang tidak (pernah) mengalami stroke ? | |
* 0.0 = tidak; 1.0 = ya | |
7. HeartDiseaseorAttack / penyakit serangan jantung : Apakah memiliki penyakit jantung koroner (PJK) ? | |
* 0.0 = tidak; 1.0 = ya | |
8. PhysActivity : Apakah melakukan aktivitas fisik apa pun dalam 30 hari terakhir ? | |
* 0.0 = tidak; 1.0 = ya | |
9. Fruits : apakah mengkonsumsi Buah 1 kali atau lebih per hari ? | |
* 0.0 = tidak; 1.0 = ya | |
10. Veggies : apakah Mengkonsumsi Sayur 1 kali atau lebih per hari ? | |
* 0.0 = tidak; 1.0 = ya | |
11. HvyAlcoholConsump : apakah (pria dewasa >=14 minuman per minggu dan wanita dewasa>=7 minuman per minggu) ? | |
* 0.0 = tidak; 1.0 = ya | |
12. AnyHealthcare : apakah Memiliki segala jenis jaminan perawatan kesehatan, termasuk asuransi kesehatan ? | |
* 0.0 = 0 = Tidak; 1.0 = ya | |
13. NoDocbcCost : apakah terkendala biaya ke dokter dalam 12 bulan terakhir ? | |
* 0.0 = = tidak; 1.0 = ya | |
14. GenHlth : mengenai keadaan kesehatan secara umum dalam skala 1-5 | |
* skala 1 = bagus sekali; skala 2 = sangat baik; skala 3 = baik; skala 4 = cukup; skala 5 = buruk | |
15. MentHlth : berapa hari mengalamai kesehatan mental yang buruk ? | |
* skala 1-30 hari | |
16. PhysHlth : berapa kali mengalami sakit atau cedera fisik dalam 30 hari terakhir ? | |
* skala 1-30 | |
17. DiffWalk : apakah mengalami kesulitan serius berjalan atau menaiki tangga ? | |
* 0.0 = tidak; 0.0 = ya | |
18. Sex | |
* 0.0 = pria; 1.0 = wanita | |
19. Age / Usia : Kategori usia 13 tingkat | |
* kategori 1 untuk usia 18-24; kategori 9 untuk usia 60-64; kategori 13 untuk usia 80 atau lebih | |
20. Education / Tingkat pendidikan : skala 1-6 | |
* skala 1 = Tidak pernah sekolah atau hanya TK; skala 2 = SD dst. | |
21. Income (Skala pendapatan skala 1-8) | |
* skala 1 = kurang dari 10,000 USD; skala 5 = kurang dari 35,000 USD; skala 8 = 75.000 USD atau lebih | |
""") | |
url_dataset = f'<a href="diabetes_melitus.csv">Download Dataset CSV File</a>' | |
st.markdown(url_dataset, unsafe_allow_html=True) | |
def user_input_features() : #kalau 2 pilihan berati selectbox, kalau banyak pake sider | |
HighBP = st.sidebar.selectbox('HighBP',('0.0','1.0')) #0= No HighBP, 1=HighBP | |
Fruits = st.sidebar.selectbox ('Fruits',('0.0','1.0')) | |
CholCheck = st.sidebar.selectbox ('CholCheck',('0.0','1.0')) | |
BMI = st.sidebar.slider ('BMI', 12.0, 98.0) | |
Smoker = st.sidebar.selectbox ('Smoker',('0.0','1.0')) | |
#0 = tidak merokok setidaknya 100 batang sepanjang hidup | |
#1 = merokok setidaknya 100 batang sepanjang hidup | |
Stroke = st.sidebar.selectbox('Stroke',('0.0', '1.0')) #0 = tidak terkena stroke, 1 = terkena stroke | |
HeartDiseaseorAttack = st.sidebar.selectbox('HeartDiseaseorAttack',('0.0', '1.0')) | |
#0 = tidak memiliki penyakit jantung koroner (PJK) | |
#1 = memiliki penyakit jantung koroner (PJK) | |
PhysActivity = st.sidebar.selectbox ('PhysActivity',('0.0','1.0')) | |
#0 = tidak melakukan aktivitas fisik apa pun dalam 30 hari terakhir | |
#1 = beraktivitas fisik apa pun dalam 30 hari terakhir | |
HighChol = st.sidebar.selectbox ('HighChol',('0.0', '1.0')) | |
Veggies = st.sidebar.selectbox ('Veggies',('0.0','1.0')) | |
HvyAlcoholConsump = st.sidebar.selectbox ('HvyAlcoholConsump',('0.0','1.0')) | |
AnyHealthcare = st.sidebar.selectbox ('AnyHealthcare',('0.0', '1.0')) | |
#0 = Tidak Memiliki segala jenis jaminan perawatan kesehatan, termasuk asuransi kesehatan | |
#1 = Memiliki segala jenis jaminan perawatan kesehatan, termasuk asuransi kesehatan | |
NoDocbcCost = st.sidebar.selectbox ('NoDocbcCost',('0.0','1.0')) | |
#0 = tidak terkendala biaya ke dokter dalam 12 bulan terakhir | |
#1 = terkendala biaya ke dokter dalam 12 bulan terakhir | |
GenHlth = st.sidebar.slider ('GenHlth', 1.0, 5.0) #keadaan kesehatan secara umum dalam skala 1-5, 1 = sangat baik 2 = sangat baik 3 = baik 4 = cukup 5 = buruk | |
MentHlth = st.sidebar.slider ('MentHlth', 0.0, 30.0) #berapa hari mengalami kesehatan mental yang buruk, dalam skala 1-30 hari | |
PhysHlth = st.sidebar.slider ('PhysHlth', 0.0, 30.0) #sakit atau cedera fisik dalam 30 hari terakhir dalam skala 1-30 | |
DiffWalk = st.sidebar.selectbox('DiffWalk',('0.0', '1.0')) | |
#0 = tidak mengalami kesulitan serius berjalan atau menaiki tangga, | |
#1 = mengalami kesulitan serius berjalan atau menaiki tangga | |
Sex = st.sidebar.selectbox('Sex',('0.0','1.0')) | |
Age = st.sidebar.slider ('Age', 1.0, 13.0) #Kategori usia 13 tingkat 1= 18-24, 9= 60-64, 13= 80 atau lebih | |
Education = st.sidebar.slider ('Education', 1.0, 6.0) | |
Income = st.sidebar.slider ('Income', 1.0, 8.0) #Skala pendapatan skala 1-8. 1= kurang dari $10,000, 5= kurang dari $35,000, 8 = $75.000 atau lebih | |
data = {'HighBP':[HighBP], | |
'HighChol' : [HighChol], | |
'CholCheck' : [CholCheck], | |
'BMI' : [BMI], | |
'Smoker' : [Smoker], | |
'Stroke':[Stroke], | |
'HeartDiseaseorAttack':[HeartDiseaseorAttack], | |
'PhysActivity' : [PhysActivity], | |
'Fruits' : [Fruits], | |
'Veggies' : [Veggies], | |
'HvyAlcoholConsump' : [HvyAlcoholConsump], | |
'AnyHealthcare' : [AnyHealthcare], | |
'NoDocbcCost' : [NoDocbcCost], | |
'GenHlth' : [GenHlth], | |
'MentHlth' : [MentHlth], | |
'PhysHlth' : [PhysHlth], | |
'DiffWalk':[DiffWalk], | |
'Sex' : [Sex], | |
'Age' : [Age], | |
'Education' : [Education], | |
'Income' : [Income] | |
} | |
features = pd.DataFrame(data) | |
return features | |
input_df = user_input_features() | |
DM_raw = pd.read_csv('diabetes_melitus.csv') | |
DM_raw.fillna(0, inplace=True) | |
DM = DM_raw.drop(columns=['Diabetes_binary']) | |
df = pd.concat([input_df, DM],axis=0) | |
df = df[:1] # Selects only the first row (the user input data) | |
df.fillna(0, inplace=True) | |
features = ['HighBP', 'HighChol', 'GenHlth', 'CholCheck', 'BMI', 'Smoker', 'Sex','Age', | |
'Stroke', 'HeartDiseaseorAttack', 'PhysActivity', 'Fruits', 'Veggies', 'HvyAlcoholConsump', | |
'AnyHealthcare', 'NoDocbcCost', 'MentHlth', 'PhysHlth', 'DiffWalk','Education','Income'] | |
df = df[features] | |
st.subheader('User Input features') | |
st.write(df) | |
load_clf = pickle.load(open('DM_clf.pkl', 'rb')) | |
detection = load_clf.predict(df) | |
detection_proba = load_clf.predict_proba(df) | |
DM_labels = np.array(['No Diabetes Melitus', 'Diabetes Melitus']) | |
st.subheader('Detection') | |
st.write(DM_labels[int(detection)]) | |
st.subheader('Detetction Probability') | |
df_prob = pd.DataFrame(data = detection_proba, | |
index = ['Probability'], | |
columns = DM_labels) | |
st.write(df_prob) | |