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'Download Dataset CSV File' 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)