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) | |