Skip to content

Commit

Permalink
add codes
Browse files Browse the repository at this point in the history
  • Loading branch information
leilibrk committed Jul 6, 2022
0 parents commit 393db30
Show file tree
Hide file tree
Showing 22 changed files with 705 additions and 0 deletions.
8 changes: 8 additions & 0 deletions .idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

33 changes: 33 additions & 0 deletions .idea/inspectionProfiles/Project_Default.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/inspectionProfiles/profiles_settings.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions .idea/phase2.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Binary file added __pycache__/defuzzification.cpython-39.pyc
Binary file not shown.
Binary file added __pycache__/final_result.cpython-39.pyc
Binary file not shown.
Binary file added __pycache__/fuzzification.cpython-39.pyc
Binary file not shown.
Binary file added __pycache__/inference.cpython-39.pyc
Binary file not shown.
22 changes: 22 additions & 0 deletions app.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
from flask import Flask, render_template, request
from final_result import ProvideResult

app = Flask(__name__)


@app.route('/')
def main_page():
return render_template('index.html')


@app.route('/result', methods=['GET', 'POST'])
def final_result():
input_dict = request.form.to_dict()
print(input_dict)
provide_result = ProvideResult()
output = provide_result.get_final_result(input_dict=input_dict)
return render_template('result.html', output=output)


if __name__ == '__main__':
app.run(host='127.0.0.1', port=8448, debug=True)
38 changes: 38 additions & 0 deletions defuzzification.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import fuzzification
import numpy as np


def defuzzify(sick1_pow, sick2_pow, sick3_pow, sick4_pow, healthy_pow):
points = np.linspace(0, 4, 5000)
answers = []
for p in points:
out = fuzzification.output_mem(p)
sick1 = out[0]
sick2 = out[1]
sick3 = out[2]
sick4 = out[3]
healthy = out[4]

if sick1 > sick1_pow:
sick1 = sick1_pow
if sick2 > sick2_pow:
sick2 = sick2_pow
if sick3 > sick3_pow:
sick3 = sick3_pow
if sick4 > sick4_pow:
sick4 = sick4_pow
if healthy > healthy_pow:
healthy = healthy_pow
ans = max(sick1, sick2, sick3, sick4, healthy)
answers.append(ans)

dx = points[1] - points[0]
sum1 = 0
sum2 = 0
for i in range(len(points)):
sum1 += (answers[i] * points[i] * dx)
sum2 += (answers[i] * dx)
if sum2 == 0:
return 0
force = sum1/sum2
return force
49 changes: 49 additions & 0 deletions final_result.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import inference
import defuzzification


class ProvideResult(object):
def __new__(cls):
if not hasattr(cls, 'instance'):
cls.instance = super(ProvideResult, cls).__new__(cls)
return cls.instance

@staticmethod
def get_final_result(input_dict: dict) -> str:
chest_pain = input_dict["chest_pain"]
cholestrol = input_dict["cholestrol"]
ecg = input_dict["ecg"]
exercise = input_dict["exercise"]
thallium = input_dict["thallium_scan"]
age = input_dict["age"]
blood_pressure = input_dict["blood_pressure"]
blood_sugar = input_dict["blood_sugar"]
heart_rate = input_dict["heart_rate"]
sex = input_dict["sex"]
old_peak = input_dict["old_peak"]
sick1_mem, sick2_mem, sick3_mem, sick4_mem, healthy_mem = inference.inference(age, blood_pressure, blood_sugar,
cholestrol, heart_rate, ecg,
old_peak, chest_pain, sex,
thallium, exercise)
cmp = defuzzification.defuzzify(sick1_mem, sick2_mem, sick3_mem, sick4_mem, healthy_mem)
res = ''
if cmp < 1.78:
res += 'healthy '
if 1 <= cmp <= 2.51:
if res is not '':
res += '& '
res += 'Sick1 '
if 1.78 <= cmp <= 3.25:
if res is not '':
res += '& '
res += 'Sick2 '
if 1.5 <= cmp <= 4.5:
if res is not '':
res += '& '
res += 'Sick3 '
if cmp > 3.25:
if res is not '':
res += '& '
res += 'Sick4 '
res += ': ' + str(cmp)
return res
201 changes: 201 additions & 0 deletions fuzzification.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,201 @@
def chestPain_mem(chest_pain):
chest_pain = int(chest_pain)
mem_chest_pain = [0 for i in range(4)]
if chest_pain == 1:
mem_chest_pain[0] = 1
if chest_pain == 2:
mem_chest_pain[1] = 1
if chest_pain == 3:
mem_chest_pain[2] = 1
if chest_pain == 4:
mem_chest_pain[3] = 1
return mem_chest_pain


def sex_mem(sex):
sex = int(sex)
mem_sex = [0 for i in range(2)]
if sex == 0:
mem_sex[0] = 1
if sex == 1:
mem_sex[1] = 1
return mem_sex


def thallium_mem(thallium):
thallium = int(thallium)
mem_thallium = [0 for i in range(3)]
if thallium == 3:
mem_thallium[0] = 1
if thallium == 6:
mem_thallium[1] = 1
if thallium == 7:
mem_thallium[2] = 1
return mem_thallium


def exercise_mem(exe):
exe = int(exe)
mem_exercise = [0 for i in range(2)]
if exe == 0:
mem_exercise[0] = 1
if exe == 1:
mem_exercise[1] = 1
return mem_exercise


def age_mem(age):
age = int(age)
membership_age = [0 for i in range(4)]
if age < 29:
membership_age[0] = 1
if 29 <= age <= 38:
membership_age[0] = (38 - age) / 9
if 33 <= age <= 38:
membership_age[1] = (age - 33) / 5
if 38 <= age <= 45:
membership_age[1] = (45 - age) / 7
if 40 <= age <= 48:
membership_age[2] = (age - 40) / 8
if 48 <= age <= 58:
membership_age[2] = (58 - age) / 10
if 52 <= age <= 60:
membership_age[3] = (age - 52) / 8
if age >= 58:
membership_age[3] = 1
return membership_age


def blood_pres_mem(blood_pressure):
blood_pressure = int(blood_pressure)
membership_bloodpres = [0 for i in range(4)]
if blood_pressure < 111:
membership_bloodpres[0] = 1
if 111 <= blood_pressure <= 134:
membership_bloodpres[0] = (134 - blood_pressure) / 23
if 127 <= blood_pressure <= 139:
membership_bloodpres[1] = (blood_pressure - 127) / 12
if 139 <= blood_pressure <= 153:
membership_bloodpres[1] = (153 - blood_pressure) / 14
if 142 <= blood_pressure <= 157:
membership_bloodpres[2] = (blood_pressure - 142) / 15
if 157 <= blood_pressure <= 172:
membership_bloodpres[2] = (172 - blood_pressure) / 15
if 154 <= blood_pressure <= 171:
membership_bloodpres[3] = (blood_pressure - 154) / 17
if blood_pressure > 171:
membership_bloodpres[3] = 1
return membership_bloodpres


def blood_sugar_mem(blood_sugar):
blood_sugar = int(blood_sugar)
membership_bloodSugar = [0 for i in range(1)]
if blood_sugar < 105:
membership_bloodSugar[0] = 0
if 105 <= blood_sugar <= 120:
membership_bloodSugar[0] = (blood_sugar - 105) / 15
if blood_sugar > 120:
membership_bloodSugar[0] = 1
return membership_bloodSugar


def cholesterol_mem(cholesterol):
cholesterol = int(cholesterol)
membership_chol = [0 for i in range(4)]
if cholesterol < 151:
membership_chol[0] = 1
if 151 <= cholesterol <= 197:
membership_chol[0] = (197 - cholesterol) / 46
if 188 <= cholesterol <= 215:
membership_chol[1] = (cholesterol - 188) / 27
if 215 <= cholesterol <= 250:
membership_chol[1] = (250 - cholesterol) / 35
if 217 <= cholesterol <= 263:
membership_chol[2] = (cholesterol - 217) / 46
if 263 <= cholesterol <= 307:
membership_chol[2] = (307 - cholesterol) / 44
if 281 <= cholesterol <= 347:
membership_chol[3] = (cholesterol - 281) / 66
if cholesterol > 347:
membership_chol[3] = 1
return membership_chol


def maximum_heart_rate_mem(maximum_heart_rate):
maximum_heart_rate = int(maximum_heart_rate)
membership_heartRate = [0 for i in range(3)]
if maximum_heart_rate < 100:
membership_heartRate[0] = 1
if 100 <= maximum_heart_rate <= 141:
membership_heartRate[0] = (141 - maximum_heart_rate) / 41
if 111 <= maximum_heart_rate <= 152:
membership_heartRate[1] = (maximum_heart_rate - 111) / 41
elif 152 <= maximum_heart_rate <= 194:
membership_heartRate[1] = (194 - maximum_heart_rate) / 42
if 152 <= maximum_heart_rate <= 210:
membership_heartRate[2] = (maximum_heart_rate - 152) / 58
if maximum_heart_rate > 210:
membership_heartRate[2] = 1
return membership_heartRate


def ecg_mem(ECG):
ECG = float(ECG)
membership_ECG = [0 for i in range(3)]
if ECG < 0:
membership_ECG[0] = 1
if 0 <= ECG <= 0.4:
membership_ECG[0] = (0.4 - ECG) / 0.4
if 0.2 <= ECG <= 1:
membership_ECG[1] = (ECG - 0.2) / 0.8
elif 1 <= ECG <= 1.8:
membership_ECG[1] = (1.8 - ECG) / 0.8
if 1.4 <= ECG <= 1.9:
membership_ECG[2] = (ECG - 1.4) / 0.5
if ECG > 1.9:
membership_ECG[2] = 1
return membership_ECG


def oldpeak_mem(oldPeak):
oldPeak = float(oldPeak)
membership_oldPeak = [0 for i in range(3)]
if oldPeak < 1:
membership_oldPeak[0] = 1
if 1 <= oldPeak <= 2:
membership_oldPeak[0] = (2 - oldPeak) / 1
if 1.5 <= oldPeak <= 2.8:
membership_oldPeak[1] = (oldPeak - 1.5) / 1.3
elif 2.8 <= oldPeak <= 4.2:
membership_oldPeak[1] = (4.2 - oldPeak) / 1.4
if 2.5 <= oldPeak <= 4:
membership_oldPeak[2] = (oldPeak - 2.5) / 1.5
if oldPeak > 4:
membership_oldPeak[2] = 1
return membership_oldPeak


def output_mem(outputSick):
membership_outputSick = [0 for i in range(5)]
if outputSick < 0.25:
membership_outputSick[4] = 1
if 0.25 <= outputSick <= 1:
membership_outputSick[4] = (1 - outputSick) / 0.75
if 0 <= outputSick <= 1:
membership_outputSick[0] = (outputSick - 0) / 1
elif 1 <= outputSick <= 2:
membership_outputSick[0] = (2 - outputSick) / 1
if 1 <= outputSick <= 2:
membership_outputSick[1] = (outputSick - 1) / 1
elif 2 <= outputSick <= 3:
membership_outputSick[1] = (3 - outputSick) / 1
if 2 <= outputSick <= 3:
membership_outputSick[2] = (outputSick - 2) / 1
elif 3 <= outputSick <= 4:
membership_outputSick[2] = (4 - outputSick) / 1
if 3 <= outputSick <= 3.75:
membership_outputSick[3] = (outputSick - 3) / 0.75
if outputSick > 3.75:
membership_outputSick[3] = 1
return membership_outputSick
Loading

0 comments on commit 393db30

Please sign in to comment.