File size: 8,542 Bytes
f8dc58b dfd59f2 f8dc58b dfd59f2 ac1b0b8 dfd59f2 ac1b0b8 bc9ae60 ac1b0b8 dfd59f2 ac1b0b8 bc9ae60 ac1b0b8 dfd59f2 ac1b0b8 bc9ae60 ac1b0b8 dfd59f2 ac1b0b8 bc9ae60 ac1b0b8 dfd59f2 ac1b0b8 bc9ae60 ac1b0b8 dfd59f2 ac1b0b8 bc9ae60 ac1b0b8 dfd59f2 ac1b0b8 bc9ae60 ac1b0b8 dfd59f2 f8dc58b ac1b0b8 bc9ae60 ac1b0b8 f8dc58b dfd59f2 |
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 212 213 214 215 |
import json
import streamlit as st
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestClassifier
with open("random_forest_model.json", "r") as f:
params = json.load(f)
model = RandomForestClassifier(**params)
del(params)
with open("scaler.json", "r") as f:
params = json.load(f)
scaler = StandardScaler(**params)
del(params)
def calculate_bmi(weight, height):
# Calculate BMI
bmi = weight / (height ** 2)
return bmi
def is_number(text):
try:
# Try to convert the text to a float
float(text)
return True
except ValueError:
# If conversion fails, it's not a number
return False
def diabetic_pedigree_function(mother, father, siblings):
"""
Calculate a scaled Diabetic Pedigree Function (DPF) for an individual,
aiming for an output range of approximately (0.078, 2.42).
Parameters:
mother (int): 1 if the mother has diabetes, 0 otherwise.
father (int): 1 if the father has diabetes, 0 otherwise.
siblings (list): A list of 0s and 1s representing siblings' diabetes status.
Returns:
float: The scaled diabetic pedigree function score.
"""
# Assign weights to each family member
mother_weight = 0.5
father_weight = 0.5
sibling_weight = 0.25
# Calculate the weighted contributions
family_history = (mother * mother_weight) + (father * father_weight) + (sum(siblings) * sibling_weight)
# Add a scaling factor to shift the range
scaling_factor = 1.2
bias = 0.078 # Minimum value in the desired range
# Final scaled DPF score
dpf_score = family_history * scaling_factor + bias
return round(dpf_score, 3) # Rounded for clarity
if "question_no" not in st.session_state:
st.session_state.question_no = 1
st.title(f"{st.session_state.question_no}Know your diabetic status")
if st.session_state.question_no == 1:
name = st.text_input(f"{st.session_state.question_no}What is your name?", key=st.session_state.question_no,placeholder="Type your answer here")
if st.button("Next->"):
if name:
st.session_state.name = name
else:
st.session_state.name = "Anonymous user"
st.session_state.question_no += 1
elif st.session_state.question_no == 2:
st.write(f"""
Name = {st.session_state.name}
""")
age = st.number_input(f"{st.session_state.question_no}How old are you?", key=st.session_state.question_no, placeholder="Type your answer")
if st.button("Next->"):
if not is_number(age):
st.warning("Please enter a valid age")
else:
st.session_state.age = int(age)
st.session_state.question_no += 1
elif st.session_state.question_no == 3:
st.write(f"""
Name = {st.session_state.name}\n
Age = {st.session_state.age}
""")
gender = st.selectbox(f"{st.session_state.question_no}What is your gender?", ["Male", "Female", "Other"], key=st.session_state.question_no)
if st.button("Next->"):
st.session_state.gender = gender
if gender == "Male":
st.session_state.pregnancies = 0
st.session_state.question_no += 2
else:
st.session_state.question_no += 1
elif st.session_state.question_no == 4:
st.write(f"""
Name = {st.session_state.name}\n
Age = {st.session_state.age}\n
Gender = {st.session_state.gender}
""")
pregnancies = st.number_input(f"{st.session_state.question_no}How many times have you been pregnant?", key=st.session_state.question_no)
if st.button("Next->"):
st.session_state.pregnancies = int(pregnancies)
st.session_state.question_no += 1
elif st.session_state.question_no == 5:
st.write(f"""
Name = {st.session_state.name}\n
Age = {st.session_state.age}\n
Gender = {st.session_state.gender}\n
No of pregnancies = {st.session_state.pregnancies}
""")
glucose = st.number_input(f"{st.session_state.question_no}Enter your glucose level", key=st.session_state.question_no)
if st.button("Next->"):
st.session_state.glucose = int(glucose)
st.session_state.question_no += 1
elif st.session_state.question_no == 6:
st.write(f"""
Name = {st.session_state.name}\n
Age = {st.session_state.age}\n
Gender = {st.session_state.gender}\n
No of pregnancies = {st.session_state.pregnancies}\n
Glucose Level = {st.session_state.glucose}
""")
bp = st.number_input(f"{st.session_state.question_no}Enter your blood pressure", key=st.session_state.question_no)
if st.button("Next->"):
st.session_state.bp = int(bp)
st.session_state.question_no += 1
elif st.session_state.question_no == 7:
st.write(f"""
Name = {st.session_state.name}\n
Age = {st.session_state.age}\n
Gender = {st.session_state.gender}\n
No of pregnancies = {st.session_state.pregnancies}\n
Glucose Level = {st.session_state.glucose}\n
BT Level = {st.session_state.bp}
""")
height = st.number_input(f"{st.session_state.question_no}Enter your height in cm:")
if st.button("Next->"):
st.session_state.height = float(height/100)
st.session_state.question_no += 1
elif st.session_state.question_no == 8:
st.write(f"""
Name = {st.session_state.name}\n
Age = {st.session_state.age}\n
Gender = {st.session_state.gender}\n
No of pregnancies = {st.session_state.pregnancies}\n
Glucose Level = {st.session_state.glucose}\n
BT Level = {st.session_state.bp}\n
Height = {st.session_state.height}
""")
weight = st.number_input(f"{st.session_state.question_no}Enter your weight in KG")
if st.button("Next->"):
st.session_state.weight = float(weight)
st.session_state.bmi = calculate_bmi(st.session_state.weight, st.session_state.height)
st.session_state.question_no += 1
elif st.session_state.question_no == 9:
st.write(f"""
Name = {st.session_state.name}\n
Age = {st.session_state.age}\n
Gender = {st.session_state.gender}\n
No of pregnancies = {st.session_state.pregnancies}\n
Glucose Level = {st.session_state.glucose}\n
BT Level = {st.session_state.bp}\n
Height = {st.session_state.height}\n
Weight = {st.session_state.weight}\n
BMI = {st.session_state.bmi}
""")
st.write("Select the members with diabetes in your family")
diabeticMother = st.checkbox("Mother")
diabeticFather = st.checkbox("Father")
diabeticSibling = st.number_input("Enter the number of diabetic siblings in your family", key=st.session_state.question_no)
if st.button("Next->"):
st.session_state.diabeticMother = 1 if diabeticMother else 0
st.session_state.diabeticFather = 1 if diabeticFather else 0
st.session_state.diabeticSibling = int(diabeticSibling)
st.session_state.dpf = diabetic_pedigree_function(st.session_state.diabeticMother, st.session_state.diabeticFather, st.session_state.diabeticSibling, st.session_state.diabeticSibling)
st.session_state.question_no += 1
elif st.session_state.question_no == 10:
st.write(f"""
Name = {st.session_state.name}\n
Age = {st.session_state.age}\n
Gender = {st.session_state.gender}\n
No of pregnancies = {st.session_state.pregnancies}\n
Glucose Level = {st.session_state.glucose}\n
BT Level = {st.session_state.bp}\n
Height = {st.session_state.height}\n
Weight = {st.session_state.weight}\n
BMI = {st.session_state.bmi}\n
Diabetic Mother = {st.session_state.diabeticMother}\n
Diabetic Father = {st.session_state.diabeticFather}\n
Diabetic Sibling Number = {st.session_state.diabeticSibling}\n
Diabetes Pedigree Function = {st.session_state.dpf}
""")
out = model.predict([st.session_state.pregnancies, st.session_state.glucose, st.session.state.bp, st.bmi, st.dpf])
st.write(out)
|