File size: 8,564 Bytes
2466305
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
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)