EndangW commited on
Commit
0b4c3a2
·
1 Parent(s): dc85ac6

Add application file

Browse files
Files changed (6) hide show
  1. DM_clf.pkl +3 -0
  2. Procfile +1 -0
  3. app.py +210 -0
  4. diabetes_melitus.csv +0 -0
  5. requirements.txt +6 -0
  6. setup.sh +11 -0
DM_clf.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d81a3769ef8ad097d1f44d6c7b0c395a3bfa7d2d3f7de992a7f40fd6ee3c3072
3
+ size 280486101
Procfile ADDED
@@ -0,0 +1 @@
 
 
1
+ web: sh setup.sh && streamlit run diabetes_app.py
app.py ADDED
@@ -0,0 +1,210 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import pandas as pd
3
+ import numpy as np
4
+ import pickle
5
+ import base64
6
+ import seaborn as sns
7
+ import matplotlib.pyplot as plt
8
+
9
+ st.write("""
10
+ # Diabetes Melitus Detection App
11
+
12
+ Diabetes Melitus merupakan salah satu penyakit yang tidak menular (Velia & Saputro, 2020).
13
+ Penyakit ini ditandai dengan tingginya jumlah gula (glukosa) dalam darah, yang disebabkan oleh
14
+ ketidakmampuan pankreas untuk menghasilkan hormon insulin (Alfita et al., 2020).
15
+
16
+ Dataset ini berisi 21 fitur yang berisi 70.692 data (35.346 data no diabetes melitus dan
17
+ 35.346 data diabetes melitus) tanggapan survei terhadap The Behavioral Risk Factor Surveillance System
18
+ (BRFSS) padatahun 2015 oleh Centers for Disease Control (CDC).
19
+
20
+ Variabel target Diabetes_binary memiliki 2 kelas yaitu :
21
+
22
+ * no diabetes melitus
23
+ * diabetes melitus
24
+
25
+
26
+ ### Keterangan Fitur
27
+
28
+ 1. HighBP / hipertensi : Apakah seseorang yang tidak mengalami/memiliki riwayat hipertensi ?
29
+
30
+ * 0.0 = tidak; 1.0 = ya
31
+
32
+ 2. HighChol / Kolesterol tinggi : Apakah seseorang yang tidak mengalami/memiliki riwayat Kolesterol tinggi ?
33
+
34
+ * 0.0 = tidak; 0.0 = ya
35
+
36
+ 3. CholCheck : Apakah seseorang yang tidak melakukan pengecekan kolesterol dalam 5 tahun terakhir ?
37
+
38
+ * 0.0 = tidak; 1.0 = ya
39
+
40
+ 4. BMI / Body Mass Index (index masa tubuh)
41
+
42
+ * BMI adalah suatu ukuran yang digunakan untuk menunjukkan kategori berat badan seseorang.
43
+
44
+ 5. Smoker : Apakah Anda merokok setidaknya 100 batang sepanjang hidup Anda? [Catatan: 5 bungkus = 100 batang]
45
+
46
+ * 0.0 = tidak; 1.0 = ya
47
+
48
+ 6. Stroke : Apakah seseorang yang tidak (pernah) mengalami stroke ?
49
+
50
+ * 0.0 = tidak; 1.0 = ya
51
+
52
+ 7. HeartDiseaseorAttack / penyakit serangan jantung : Apakah memiliki penyakit jantung koroner (PJK) ?
53
+
54
+ * 0.0 = tidak; 1.0 = ya
55
+
56
+ 8. PhysActivity : Apakah melakukan aktivitas fisik apa pun dalam 30 hari terakhir ?
57
+
58
+ * 0.0 = tidak; 1.0 = ya
59
+
60
+ 9. Fruits : apakah mengkonsumsi Buah 1 kali atau lebih per hari ?
61
+
62
+ * 0.0 = tidak; 1.0 = ya
63
+
64
+ 10. Veggies : apakah Mengkonsumsi Sayur 1 kali atau lebih per hari ?
65
+
66
+ * 0.0 = tidak; 1.0 = ya
67
+
68
+ 11. HvyAlcoholConsump : apakah (pria dewasa >=14 minuman per minggu dan wanita dewasa>=7 minuman per minggu) ?
69
+
70
+ * 0.0 = tidak; 1.0 = ya
71
+
72
+ 12. AnyHealthcare : apakah Memiliki segala jenis jaminan perawatan kesehatan, termasuk asuransi kesehatan ?
73
+
74
+ * 0.0 = 0 = Tidak; 1.0 = ya
75
+
76
+ 13. NoDocbcCost : apakah terkendala biaya ke dokter dalam 12 bulan terakhir ?
77
+
78
+ * 0.0 = = tidak; 1.0 = ya
79
+
80
+ 14. GenHlth : mengenai keadaan kesehatan secara umum dalam skala 1-5
81
+
82
+ * skala 1 = bagus sekali; skala 2 = sangat baik; skala 3 = baik; skala 4 = cukup; skala 5 = buruk
83
+
84
+ 15. MentHlth : berapa hari mengalamai kesehatan mental yang buruk ?
85
+
86
+ * skala 1-30 hari
87
+
88
+ 16. PhysHlth : berapa kali mengalami sakit atau cedera fisik dalam 30 hari terakhir ?
89
+
90
+ * skala 1-30
91
+
92
+ 17. DiffWalk : apakah mengalami kesulitan serius berjalan atau menaiki tangga ?
93
+
94
+ * 0.0 = tidak; 0.0 = ya
95
+
96
+ 18. Sex
97
+
98
+ * 0.0 = pria; 1.0 = wanita
99
+
100
+ 19. Age / Usia : Kategori usia 13 tingkat
101
+
102
+ * kategori 1 untuk usia 18-24; kategori 9 untuk usia 60-64; kategori 13 untuk usia 80 atau lebih
103
+
104
+ 20. Education / Tingkat pendidikan : skala 1-6
105
+
106
+ * skala 1 = Tidak pernah sekolah atau hanya TK; skala 2 = SD dst.
107
+
108
+ 21. Income (Skala pendapatan skala 1-8)
109
+
110
+ * skala 1 = kurang dari 10,000 USD; skala 5 = kurang dari 35,000 USD; skala 8 = 75.000 USD atau lebih
111
+
112
+
113
+ """)
114
+
115
+ url_dataset = f'<a href="diabetes_melitus.csv">Download Dataset CSV File</a>'
116
+ st.markdown(url_dataset, unsafe_allow_html=True)
117
+
118
+ def user_input_features() : #kalau 2 pilihan berati selectbox, kalau banyak pake sider
119
+ HighBP = st.sidebar.selectbox('HighBP',('0.0','1.0')) #0= No HighBP, 1=HighBP
120
+ Fruits = st.sidebar.selectbox ('Fruits',('0.0','1.0'))
121
+ CholCheck = st.sidebar.selectbox ('CholCheck',('0.0','1.0'))
122
+ BMI = st.sidebar.slider ('BMI', 12.0, 98.0)
123
+ Smoker = st.sidebar.selectbox ('Smoker',('0.0','1.0'))
124
+ #0 = tidak merokok setidaknya 100 batang sepanjang hidup
125
+ #1 = merokok setidaknya 100 batang sepanjang hidup
126
+ Stroke = st.sidebar.selectbox('Stroke',('0.0', '1.0')) #0 = tidak terkena stroke, 1 = terkena stroke
127
+ HeartDiseaseorAttack = st.sidebar.selectbox('HeartDiseaseorAttack',('0.0', '1.0'))
128
+ #0 = tidak memiliki penyakit jantung koroner (PJK)
129
+ #1 = memiliki penyakit jantung koroner (PJK)
130
+ PhysActivity = st.sidebar.selectbox ('PhysActivity',('0.0','1.0'))
131
+ #0 = tidak melakukan aktivitas fisik apa pun dalam 30 hari terakhir
132
+ #1 = beraktivitas fisik apa pun dalam 30 hari terakhir
133
+ HighChol = st.sidebar.selectbox ('HighChol',('0.0', '1.0'))
134
+ Veggies = st.sidebar.selectbox ('Veggies',('0.0','1.0'))
135
+ HvyAlcoholConsump = st.sidebar.selectbox ('HvyAlcoholConsump',('0.0','1.0'))
136
+ AnyHealthcare = st.sidebar.selectbox ('AnyHealthcare',('0.0', '1.0'))
137
+ #0 = Tidak Memiliki segala jenis jaminan perawatan kesehatan, termasuk asuransi kesehatan
138
+ #1 = Memiliki segala jenis jaminan perawatan kesehatan, termasuk asuransi kesehatan
139
+ NoDocbcCost = st.sidebar.selectbox ('NoDocbcCost',('0.0','1.0'))
140
+ #0 = tidak terkendala biaya ke dokter dalam 12 bulan terakhir
141
+ #1 = terkendala biaya ke dokter dalam 12 bulan terakhir
142
+ 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
143
+ MentHlth = st.sidebar.slider ('MentHlth', 0.0, 30.0) #berapa hari mengalami kesehatan mental yang buruk, dalam skala 1-30 hari
144
+ PhysHlth = st.sidebar.slider ('PhysHlth', 0.0, 30.0) #sakit atau cedera fisik dalam 30 hari terakhir dalam skala 1-30
145
+ DiffWalk = st.sidebar.selectbox('DiffWalk',('0.0', '1.0'))
146
+ #0 = tidak mengalami kesulitan serius berjalan atau menaiki tangga,
147
+ #1 = mengalami kesulitan serius berjalan atau menaiki tangga
148
+ Sex = st.sidebar.selectbox('Sex',('0.0','1.0'))
149
+ Age = st.sidebar.slider ('Age', 1.0, 13.0) #Kategori usia 13 tingkat 1= 18-24, 9= 60-64, 13= 80 atau lebih
150
+ Education = st.sidebar.slider ('Education', 1.0, 6.0)
151
+ 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
152
+
153
+ data = {'HighBP':[HighBP],
154
+ 'HighChol' : [HighChol],
155
+ 'CholCheck' : [CholCheck],
156
+ 'BMI' : [BMI],
157
+ 'Smoker' : [Smoker],
158
+ 'Stroke':[Stroke],
159
+ 'HeartDiseaseorAttack':[HeartDiseaseorAttack],
160
+ 'PhysActivity' : [PhysActivity],
161
+ 'Fruits' : [Fruits],
162
+ 'Veggies' : [Veggies],
163
+ 'HvyAlcoholConsump' : [HvyAlcoholConsump],
164
+ 'AnyHealthcare' : [AnyHealthcare],
165
+ 'NoDocbcCost' : [NoDocbcCost],
166
+ 'GenHlth' : [GenHlth],
167
+ 'MentHlth' : [MentHlth],
168
+ 'PhysHlth' : [PhysHlth],
169
+ 'DiffWalk':[DiffWalk],
170
+ 'Sex' : [Sex],
171
+ 'Age' : [Age],
172
+ 'Education' : [Education],
173
+ 'Income' : [Income]
174
+ }
175
+
176
+ features = pd.DataFrame(data)
177
+ return features
178
+
179
+ input_df = user_input_features()
180
+
181
+
182
+ DM_raw = pd.read_csv('diabetes_melitus.csv')
183
+ DM_raw.fillna(0, inplace=True)
184
+ DM = DM_raw.drop(columns=['Diabetes_binary'])
185
+ df = pd.concat([input_df, DM],axis=0)
186
+
187
+ df = df[:1] # Selects only the first row (the user input data)
188
+ df.fillna(0, inplace=True)
189
+
190
+ features = ['HighBP', 'HighChol', 'GenHlth', 'CholCheck', 'BMI', 'Smoker', 'Sex','Age',
191
+ 'Stroke', 'HeartDiseaseorAttack', 'PhysActivity', 'Fruits', 'Veggies', 'HvyAlcoholConsump',
192
+ 'AnyHealthcare', 'NoDocbcCost', 'MentHlth', 'PhysHlth', 'DiffWalk','Education','Income']
193
+
194
+ df = df[features]
195
+
196
+
197
+ st.subheader('User Input features')
198
+ st.write(df)
199
+
200
+ load_clf = pickle.load(open('DM_clf.pkl', 'rb'))
201
+ detection = load_clf.predict(df)
202
+ detection_proba = load_clf.predict_proba(df)
203
+ DM_labels = np.array(['No Diabetes Melitus', 'Diabetes Melitus'])
204
+ st.subheader('Detection')
205
+ st.write(DM_labels[int(detection)])
206
+ st.subheader('Detetction Probability')
207
+ df_prob = pd.DataFrame(data = detection_proba,
208
+ index = ['Probability'],
209
+ columns = DM_labels)
210
+ st.write(df_prob)
diabetes_melitus.csv ADDED
The diff for this file is too large to render. See raw diff
 
requirements.txt ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ matplotlib==3.5.1
2
+ numpy==1.21.5
3
+ pandas==1.4.2
4
+ seaborn==0.11.2
5
+ streamlit==1.14.0
6
+ sklearn
setup.sh ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ mkdir -p ~/.streamlit/
2
+ echo "\
3
+ [general]\n\
4
+ email = \"your-email@domain.com\"\n\
5
+ " > ~/.streamlit/credentials.toml
6
+ echo "\
7
+ [server]\n\
8
+ headless = true\n\
9
+ enableCORS=false\n\
10
+ port = $PORT\n\
11
+ " > ~/.streamlit/config.toml