diqitalize's picture
aku bisa
2466305
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)