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)