Python-FastAPI

This commit is contained in:
Moh. Bahrul 'Ulum 2024-07-23 15:35:59 +07:00
parent e947e00c2e
commit 7dba80fd9d
2 changed files with 839 additions and 0 deletions

View File

@ -0,0 +1,7 @@
File yang ada di folder ini adalah 1 file python yang digunakan untuk perhitungan fuzzy mamdani.
Jika file ini ingin kalian jadikan referensi silahkan kalian buat project berbasis python, kemudian kalian buat sebuah file baru dengan nama bebas sesuai keinginan kalian, kemudian isi file dibawah copy/paste ke file yang kalian buat.
Jangan lupa untuk menginstall atau menambahkan library yang digunakan.
Thank You.

View File

@ -0,0 +1,832 @@
# BISMILLAH - TERUJI COCOK
from fastapi import FastAPI
from pydantic import BaseModel
import numpy as np
import skfuzzy as fuzz
import matplotlib.pyplot as plt
app = FastAPI()
class InputData(BaseModel):
usia: float
bb: float
tb: float
jk: str
def countBB_U(usia, bb, jk):
# definiskan domain atau rentang nilai variabel
# VAR INPUT
x_usia = np.arange(0, 60, 1)
x_bb = np.arange(2, 28, 1)
if jk == "L":
x_tb = np.arange(44, 130, 1)
else:
x_tb = np.arange(43, 130, 1)
# VAR OUTPUT
if jk == "L":
x_bb_u = np.arange(3, 30, 1)
x_tb_u = np.arange(45, 130, 1)
x_bb_tb = np.arange(3, 40, 1)
else:
x_bb_u = np.arange(4, 30, 1)
x_tb_u = np.arange(44, 130, 1)
x_bb_tb = np.arange(3, 38, 1)
# membership / keanggotaan USIA
usia_tahap1 = fuzz.trapmf(x_usia, [0, 0, 6, 12])
usia_tahap2 = fuzz.trimf(x_usia, [6, 12, 24])
usia_tahap3 = fuzz.trimf(x_usia, [12, 24, 36])
usia_tahap4 = fuzz.trimf(x_usia, [24, 36, 48])
usia_tahap5 = fuzz.trapmf(x_usia, [36, 48, 60, 60])
# membership / keanggotaan BERAT BADAN
bb_sangat_kurang = fuzz.trapmf(x_bb, [2, 2, 4, 6])
if jk == "L":
bb_kurang = fuzz.trimf(x_bb, [4, 8, 12])
bb_normal = fuzz.trimf(x_bb, [8, 13, 18])
bb_lebih = fuzz.trimf(x_bb, [15, 18, 23])
bb_sangat_lebih = fuzz.trapmf(x_bb, [21, 23, 28, 28])
else:
bb_kurang = fuzz.trimf(x_bb, [4, 8, 11])
bb_normal = fuzz.trimf(x_bb, [9, 13, 18])
bb_lebih = fuzz.trimf(x_bb, [15, 20, 24])
bb_sangat_lebih = fuzz.trapmf(x_bb, [22, 25, 28, 28])
# membership / keanggotaan BB-USIA
if jk == "L":
bb_u_sangat_kurang = fuzz.trapmf(x_bb_u, [3, 3, 6, 8])
bb_u_kurang = fuzz.trimf(x_bb_u, [6, 8, 10])
bb_u_normal = fuzz.trimf(x_bb_u, [8, 12, 18])
bb_u_resiko_bb_lebih = fuzz.trapmf(x_bb_u, [16, 24, 30, 30])
else:
bb_u_sangat_kurang = fuzz.trapmf(x_bb_u, [4, 4, 7, 9])
bb_u_kurang = fuzz.trimf(x_bb_u, [7, 9, 11])
bb_u_normal = fuzz.trimf(x_bb_u, [9, 13, 18])
bb_u_resiko_bb_lebih = fuzz.trapmf(x_bb_u, [16, 23, 30, 30])
fig, (ax0, ax1, ax2) = plt.subplots(nrows=3, figsize=(8, 9))
ax0.plot(x_usia, usia_tahap1, 'b', linewidth=1.5, label="Tahap 1")
ax0.plot(x_usia, usia_tahap2, 'g', linewidth=1.5, label="Tahap 2")
ax0.plot(x_usia, usia_tahap3, 'r', linewidth=1.5, label="Tahap 3")
ax0.plot(x_usia, usia_tahap4, 'm', linewidth=1.5, label="Tahap 4")
ax0.plot(x_usia, usia_tahap5, 'c', linewidth=1.5, label="Tahap 5")
ax0.set_title("---- USIA ----")
ax0.legend()
ax1.plot(x_bb, bb_sangat_kurang, 'b', linewidth=1.5, label="Sangat Kurang")
ax1.plot(x_bb, bb_kurang, 'g', linewidth=1.5, label="Kurang")
ax1.plot(x_bb, bb_normal, 'r', linewidth=1.5, label="Normal")
ax1.plot(x_bb, bb_lebih, 'm', linewidth=1.5, label="Lebih")
ax1.plot(x_bb, bb_sangat_lebih, 'c', linewidth=1.5, label="Sangat Lebih")
ax1.set_title("---- Berat Badan ----")
ax1.legend()
ax2.plot(x_bb_u, bb_u_sangat_kurang, 'b', linewidth=1.5, label="BB Sangat Kurang")
ax2.plot(x_bb_u, bb_u_kurang, 'g', linewidth=1.5, label="BB Kurang")
ax2.plot(x_bb_u, bb_u_normal, 'r', linewidth=1.5, label="BB Normal")
ax2.plot(x_bb_u, bb_u_resiko_bb_lebih, 'm', linewidth=1.5, label="Resiko BB Lebih")
ax2.set_title("---- BB / U ----")
ax2.legend()
for ax in (ax0, ax1, ax2):
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.get_xaxis().tick_bottom()
ax.get_yaxis().tick_left()
plt.tight_layout()
# plt.show()
u_tahap1 = fuzz.interp_membership(x_usia, usia_tahap1, usia)
u_tahap2 = fuzz.interp_membership(x_usia, usia_tahap2, usia)
u_tahap3 = fuzz.interp_membership(x_usia, usia_tahap3, usia)
u_tahap4 = fuzz.interp_membership(x_usia, usia_tahap4, usia)
u_tahap5 = fuzz.interp_membership(x_usia, usia_tahap5, usia)
bb_sk = fuzz.interp_membership(x_bb, bb_sangat_kurang, bb)
bb_k = fuzz.interp_membership(x_bb, bb_kurang, bb)
bb_n = fuzz.interp_membership(x_bb, bb_normal, bb)
bb_l = fuzz.interp_membership(x_bb, bb_lebih, bb)
bb_sl = fuzz.interp_membership(x_bb, bb_sangat_lebih, bb)
print(u_tahap1, u_tahap2, u_tahap3, u_tahap4, u_tahap5) # 5 FASE
print(bb_sk, bb_k, bb_n, bb_l, bb_sl)
drjt_usia = u_tahap1, u_tahap2, u_tahap3, u_tahap4, u_tahap5 # 5 FASE
drjt_bb = bb_sk, bb_k, bb_n, bb_l, bb_sl
# Rule => usia, bb = output aturan # Rule => usia, bb = output aturan
# USIA 5 FASE
rule1 = np.fmin(drjt_usia[0], drjt_bb[0]) # Rule 1 => tahap1, sangat_kurang = kurang
rule2 = np.fmin(drjt_usia[0], drjt_bb[1]) # Rule 2 => tahap1, kurang = normal
rule3 = np.fmin(drjt_usia[0], drjt_bb[2]) # Rule 3 => tahap1, normal = resiko_bb_lebih
rule4 = np.fmin(drjt_usia[0], drjt_bb[3]) # Rule 4 => tahap1, lebih = resiko_bb_lebih
rule5 = np.fmin(drjt_usia[0], drjt_bb[4]) # Rule 5 => tahap1, sangat_lebih = resiko_bb_lebih
# USIA 5 FASE
rule6 = np.fmin(drjt_usia[1], drjt_bb[0]) # Rule 6 => tahap2, sangat_kurang = kurang
rule7 = np.fmin(drjt_usia[1], drjt_bb[1]) # Rule 7 => tahap2, kurang = normal
rule8 = np.fmin(drjt_usia[1], drjt_bb[2]) # Rule 8 => tahap2, normal = normal
rule9 = np.fmin(drjt_usia[1], drjt_bb[3]) # Rule 9 => tahap2, lebih = resiko_bb_lebih
rule10 = np.fmin(drjt_usia[1], drjt_bb[4]) # Rule 10 => tahap2, sangat_lebih = resiko_bb_lebih
# USIA 5 FASE
rule11 = np.fmin(drjt_usia[2], drjt_bb[0]) # Rule 11 => tahap3, sangat_kurang = sangat_kurang
rule12 = np.fmin(drjt_usia[2], drjt_bb[1]) # Rule 12 => tahap3, kurang = kurang
rule13 = np.fmin(drjt_usia[2], drjt_bb[2]) # Rule 13 => tahap3, normal = normal
rule14 = np.fmin(drjt_usia[2], drjt_bb[3]) # Rule 14 => tahap3, lebih = resiko_bb_lebih
rule15 = np.fmin(drjt_usia[2], drjt_bb[4]) # Rule 15 => tahap3, sangat_lebih = resiko_bb_lebih
# USIA 5 FASE
rule16 = np.fmin(drjt_usia[3], drjt_bb[0]) # Rule 16 => tahap4, sangat_kurang = sangat_kurang
rule17 = np.fmin(drjt_usia[3], drjt_bb[1]) # Rule 17 => tahap4, kurang = kurang
rule18 = np.fmin(drjt_usia[3], drjt_bb[2]) # Rule 18 => tahap4, normal = normal
rule19 = np.fmin(drjt_usia[3], drjt_bb[3]) # Rule 19 => tahap4, lebih = resiko_bb_lebih
rule20 = np.fmin(drjt_usia[3], drjt_bb[4]) # Rule 20 => tahap4, sangat_lebih = resiko_bb_lebih
# USIA 5 FASE
rule21 = np.fmin(drjt_usia[4], drjt_bb[0]) # Rule 21 => tahap5, sangat_kurang = sangat_kurang
rule22 = np.fmin(drjt_usia[4], drjt_bb[1]) # Rule 22 => tahap5, kurang = sangat_kurang
rule23 = np.fmin(drjt_usia[4], drjt_bb[2]) # Rule 23 => tahap5, normal = kurang
rule24 = np.fmin(drjt_usia[4], drjt_bb[3]) # Rule 24 => tahap5, lebih = normal
rule25 = np.fmin(drjt_usia[4], drjt_bb[4]) # Rule 25 => tahap5, sangat_lebih = resiko_bb_lebih
# USIA 5 FASE
pk_bb_u_sangat_kurang = np.fmax(rule11, np.fmax(rule16, np.fmax(rule21, rule22)))
pk_bb_u_kurang = np.fmax(rule1, np.fmax(rule6, np.fmax(rule12, np.fmax(rule17, rule23))))
pk_bb_u_normal = np.fmax(rule2, np.fmax(rule7, np.fmax(rule8, np.fmax(rule13, np.fmax(rule18, rule24)))))
pk_bb_u_resiko_bb_lebih = np.fmax(rule3,
np.fmax(rule4, np.fmax(rule5, np.fmax(rule9, np.fmax(rule10, np.fmax(rule14,
np.fmax(
rule15,
np.fmax(
rule19,
np.fmax(
rule20,
rule25)))))))))
print(pk_bb_u_sangat_kurang)
print(pk_bb_u_kurang)
print(pk_bb_u_normal)
print(pk_bb_u_resiko_bb_lebih)
pk_bb_u_sangat_kurang = np.fmin(pk_bb_u_sangat_kurang, bb_u_sangat_kurang)
pk_bb_u_kurang = np.fmin(pk_bb_u_kurang, bb_u_kurang)
pk_bb_u_normal = np.fmin(pk_bb_u_normal, bb_u_normal)
pk_bb_u_resiko_bb_lebih = np.fmin(pk_bb_u_resiko_bb_lebih, bb_u_resiko_bb_lebih)
pk_bb_u_0 = np.zeros_like(x_bb_u)
pk_bb_u_sk = np.zeros_like(bb_u_sangat_kurang)
pk_bb_u_k = np.zeros_like(bb_u_kurang)
pk_bb_u_n = np.zeros_like(bb_u_normal)
pk_bb_u_rbbl = np.zeros_like(bb_u_resiko_bb_lebih)
fig, (ax0, ax1, ax2, ax3, ax4) = plt.subplots(nrows=5, figsize=(8, 9))
ax0.fill_between(x_bb_u, pk_bb_u_sk, pk_bb_u_sangat_kurang, facecolor='b', alpha=0.7)
ax0.plot(x_bb_u, bb_u_sangat_kurang, 'b', linewidth=1.5, linestyle='--', label="BB Sangat Kurang")
ax0.set_title('BB/U')
ax0.legend()
ax1.fill_between(x_bb_u, pk_bb_u_k, pk_bb_u_kurang, facecolor='b', alpha=0.7)
ax1.plot(x_bb_u, bb_u_kurang, 'b', linewidth=1.5, linestyle='--', label="Kurang")
ax1.set_title('BB/U')
ax1.legend()
ax2.fill_between(x_bb_u, pk_bb_u_n, pk_bb_u_normal, facecolor='b', alpha=0.7)
ax2.plot(x_bb_u, bb_u_normal, 'b', linewidth=1.5, linestyle='--', label="Normal")
ax2.set_title('BB/U')
ax2.legend()
ax3.fill_between(x_bb_u, pk_bb_u_rbbl, pk_bb_u_resiko_bb_lebih, facecolor='b', alpha=0.7)
ax3.plot(x_bb_u, bb_u_resiko_bb_lebih, 'b', linewidth=1.5, linestyle='--', label="Resiko BB Lebih")
ax3.set_title('BB/U')
ax3.legend()
ax4.fill_between(x_bb_u, pk_bb_u_0, pk_bb_u_sangat_kurang, facecolor='b', alpha=0.7)
ax4.plot(x_bb_u, bb_u_sangat_kurang, 'b', linewidth=1.5, linestyle='--', label="BB Sangat Kurang")
ax4.fill_between(x_bb_u, pk_bb_u_0, pk_bb_u_kurang, facecolor='g', alpha=0.7)
ax4.plot(x_bb_u, bb_u_kurang, 'g', linewidth=1.5, linestyle='--', label="Kurang")
ax4.fill_between(x_bb_u, pk_bb_u_0, pk_bb_u_normal, facecolor='r', alpha=0.7)
ax4.plot(x_bb_u, bb_u_normal, 'r', linewidth=1.5, linestyle='--', label="Normal")
ax4.fill_between(x_bb_u, pk_bb_u_0, pk_bb_u_resiko_bb_lebih, facecolor='m', alpha=0.7)
ax4.plot(x_bb_u, bb_u_resiko_bb_lebih, 'r', linewidth=1.5, linestyle='--', label="Resiko BB Lebih")
ax4.set_title('Berat Badan / Usia')
ax4.legend()
for ax in (ax0, ax1, ax2, ax3, ax4):
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.get_xaxis().tick_bottom()
ax.get_yaxis().tick_left()
plt.tight_layout()
# plt.show()
komposisi = np.fmax(pk_bb_u_sangat_kurang,
np.fmax(pk_bb_u_kurang, np.fmax(pk_bb_u_normal, pk_bb_u_resiko_bb_lebih)))
berat_badan_per_usia = fuzz.defuzz(x_bb_u, komposisi, 'centroid')
# Calculate membership values for the defuzzified result
bb_u_sangat_kurang_degree = fuzz.interp_membership(x_bb_u, bb_u_sangat_kurang, berat_badan_per_usia)
bb_u_kurang_degree = fuzz.interp_membership(x_bb_u, bb_u_kurang, berat_badan_per_usia)
bb_u_normal_degree = fuzz.interp_membership(x_bb_u, bb_u_normal, berat_badan_per_usia)
bb_u_resiko_bb_lebih_degree = fuzz.interp_membership(x_bb_u, bb_u_resiko_bb_lebih, berat_badan_per_usia)
status_gizi = 'Tidak Terdefinisi'
max_keanggotaan = max(bb_u_sangat_kurang_degree, bb_u_kurang_degree, bb_u_normal_degree,
bb_u_resiko_bb_lebih_degree)
if max_keanggotaan == bb_u_sangat_kurang_degree:
status_gizi = 'Sangat Kurang'
elif max_keanggotaan == bb_u_kurang_degree:
status_gizi = 'Kurang'
elif max_keanggotaan == bb_u_normal_degree:
status_gizi = 'Normal'
elif max_keanggotaan == bb_u_resiko_bb_lebih_degree:
status_gizi = 'Resiko BB Lebih'
# Output result with membership values
results = {
'defuzzified_value': berat_badan_per_usia,
'status gizi': status_gizi,
'bb_u_sangat_kurang_degree': bb_u_sangat_kurang_degree,
'bb_u_kurang_degree': bb_u_kurang_degree,
'bb_u_normal_degree': bb_u_normal_degree,
'bb_u_resiko_bb_lebih_degree': bb_u_resiko_bb_lebih_degree
}
print(results)
plt.plot([berat_badan_per_usia, berat_badan_per_usia],
[0, fuzz.interp_membership(x_bb_u, komposisi, berat_badan_per_usia)], 'k',
linewidth=1.5, alpha=0.9)
# plt.show()
return results
# BELUM DIUBAH - CATATAN
def countTB_U(usia, tb, jk):
# VAR INPUT
x_usia = np.arange(0, 60, 1)
if jk == "L":
x_tb = np.arange(44, 130, 1)
else:
x_tb = np.arange(43, 130, 1)
# VAR OUTPUT
if jk == "L":
x_tb_u = np.arange(45, 130, 1)
else:
x_tb_u = np.arange(44, 130, 1)
usia_bayi = fuzz.trapmf(x_usia, [0, 0, 6, 11])
usia_baduta = fuzz.trimf(x_usia, [9, 16, 23])
usia_balita_1 = fuzz.trimf(x_usia, [21, 31, 41])
usia_balita_2 = fuzz.trapmf(x_usia, [39, 49, 60, 60])
# membership / keanggotaan USIA
usia_tahap1 = fuzz.trapmf(x_usia, [0, 0, 6, 12])
usia_tahap2 = fuzz.trimf(x_usia, [6, 12, 24])
usia_tahap3 = fuzz.trimf(x_usia, [12, 24, 36])
usia_tahap4 = fuzz.trimf(x_usia, [24, 36, 48])
usia_tahap5 = fuzz.trapmf(x_usia, [36, 48, 60, 60])
# membership / keanggotaan TINGGI BADAN
if jk == "L":
tb_sangat_pendek = fuzz.trapmf(x_tb, [44, 44, 48, 56])
tb_pendek = fuzz.trimf(x_tb, [48, 65, 80])
tb_normal = fuzz.trimf(x_tb, [66, 94, 126])
tb_tinggi = fuzz.trapmf(x_tb, [110, 126, 130, 130])
else:
tb_sangat_pendek = fuzz.trapmf(x_tb, [43, 43, 47, 55])
tb_pendek = fuzz.trimf(x_tb, [47, 64, 78])
tb_normal = fuzz.trimf(x_tb, [64, 92, 124])
tb_tinggi = fuzz.trapmf(x_tb, [108, 124, 130, 130])
# membership / keanggotaan TB/U
if jk == "L":
tb_u_sangat_pendek = fuzz.trapmf(x_tb_u, [45, 45, 56, 67])
tb_u_pendek = fuzz.trimf(x_tb_u, [56, 72, 88])
tb_u_normal = fuzz.trimf(x_tb_u, [72, 98, 124])
tb_u_tinggi = fuzz.trapmf(x_tb_u, [112, 124, 130, 130])
else:
tb_u_sangat_pendek = fuzz.trapmf(x_tb_u, [44, 44, 56, 66])
tb_u_pendek = fuzz.trimf(x_tb_u, [56, 72, 86])
tb_u_normal = fuzz.trimf(x_tb_u, [72, 95, 123])
tb_u_tinggi = fuzz.trapmf(x_tb_u, [112, 123, 130, 130])
fig, (ax0, ax1, ax2) = plt.subplots(nrows=3, figsize=(8, 9))
# ax0.plot(x_usia, usia_bayi, 'b', linewidth=1.5, label="Bayi")
# ax0.plot(x_usia, usia_baduta, 'g', linewidth=1.5, label="Baduta")
# ax0.plot(x_usia, usia_balita_1, 'r', linewidth=1.5, label="Balita 1")
# ax0.plot(x_usia, usia_balita_2, 'm', linewidth=1.5, label="Balita ")
# ax0.set_title("---- USIA ----")
# ax0.legend()
ax0.plot(x_usia, usia_tahap1, 'b', linewidth=1.5, label="Tahap 1")
ax0.plot(x_usia, usia_tahap2, 'g', linewidth=1.5, label="Tahap 2")
ax0.plot(x_usia, usia_tahap3, 'r', linewidth=1.5, label="Tahap 3")
ax0.plot(x_usia, usia_tahap4, 'm', linewidth=1.5, label="Tahap 4")
ax0.plot(x_usia, usia_tahap5, 'c', linewidth=1.5, label="Tahap 5")
ax0.set_title("---- USIA ----")
ax0.legend()
ax1.plot(x_tb, tb_sangat_pendek, 'b', linewidth=1.5, label="Sangat Pendek")
ax1.plot(x_tb, tb_pendek, 'g', linewidth=1.5, label="Pendek")
ax1.plot(x_tb, tb_normal, 'r', linewidth=1.5, label="Normal")
ax1.plot(x_tb, tb_tinggi, 'm', linewidth=1.5, label="Tinggi")
ax1.set_title("---- TINGGI BADAN ----")
ax1.legend()
ax2.plot(x_tb_u, tb_u_sangat_pendek, 'b', linewidth=1.5, label="Sangat Pendek")
ax2.plot(x_tb_u, tb_u_pendek, 'g', linewidth=1.5, label="Pendek")
ax2.plot(x_tb_u, tb_u_normal, 'r', linewidth=1.5, label="Normal")
ax2.plot(x_tb_u, tb_u_tinggi, 'm', linewidth=1.5, label="Tinggi")
ax2.set_title("---- TB / U ----")
ax2.legend()
for ax in (ax0, ax1, ax2):
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.get_xaxis().tick_bottom()
ax.get_yaxis().tick_left()
plt.tight_layout()
# u_bayi = fuzz.interp_membership(x_usia, usia_bayi, usia)
# u_baduta = fuzz.interp_membership(x_usia, usia_baduta, usia)
# u_balita_1 = fuzz.interp_membership(x_usia, usia_balita_1, usia)
# u_balita_2 = fuzz.interp_membership(x_usia, usia_balita_2, usia)
u_tahap1 = fuzz.interp_membership(x_usia, usia_tahap1, usia)
u_tahap2 = fuzz.interp_membership(x_usia, usia_tahap2, usia)
u_tahap3 = fuzz.interp_membership(x_usia, usia_tahap3, usia)
u_tahap4 = fuzz.interp_membership(x_usia, usia_tahap4, usia)
u_tahap5 = fuzz.interp_membership(x_usia, usia_tahap5, usia)
tb_sp = fuzz.interp_membership(x_tb, tb_sangat_pendek, tb)
tb_p = fuzz.interp_membership(x_tb, tb_pendek, tb)
tb_n = fuzz.interp_membership(x_tb, tb_normal, tb)
tb_t = fuzz.interp_membership(x_tb, tb_tinggi, tb)
# print(u_bayi, u_baduta, u_balita_1, u_balita_2)
print(u_tahap1, u_tahap2, u_tahap3, u_tahap4, u_tahap5)
print(tb_sp, tb_p, tb_n, tb_t)
# drjt_usia = u_bayi, u_baduta, u_balita_1, u_balita_2
drjt_usia = u_tahap1, u_tahap2, u_tahap3, u_tahap4, u_tahap5
drjt_tb = tb_sp, tb_p, tb_n, tb_t
rule1 = np.fmin(drjt_usia[0], drjt_tb[0]) # Rule 1 => tahap1 & sangat_pendek = PENDEK
rule2 = np.fmin(drjt_usia[0], drjt_tb[1]) # Rule 2 => tahap1 & pendek = NORMAL
rule3 = np.fmin(drjt_usia[0], drjt_tb[2]) # Rule 3 => tahap1 & normal = TINGGI
rule4 = np.fmin(drjt_usia[0], drjt_tb[3]) # Rule 4 => tahap1 & tinggi = TINGGI
rule5 = np.fmin(drjt_usia[1], drjt_tb[0]) # Rule 5 => tahap2 & sangat_pendek = PENDEK
rule6 = np.fmin(drjt_usia[1], drjt_tb[1]) # Rule 6 => tahap2 & pendek = NORMAL
rule7 = np.fmin(drjt_usia[1], drjt_tb[2]) # Rule 7 => tahap2 & normal = TINGGI
rule8 = np.fmin(drjt_usia[1], drjt_tb[3]) # Rule 8 => tahap2 & tinggi = TINGGI
rule9 = np.fmin(drjt_usia[2], drjt_tb[0]) # Rule 9 => tahap3 & sangat_pendek = SANGAT PENDEK
rule10 = np.fmin(drjt_usia[2], drjt_tb[1]) # Rule 10 => tahap3 & pendek = PENDEK
rule11 = np.fmin(drjt_usia[2], drjt_tb[2]) # Rule 11 => tahap3 & normal = NORMAL
rule12 = np.fmin(drjt_usia[2], drjt_tb[3]) # Rule 12 => tahap3 & tinggi = TINGGI
rule13 = np.fmin(drjt_usia[3], drjt_tb[0]) # Rule 9 => tahap4 & sangat_pendek = SANGAT PENDEK
rule14 = np.fmin(drjt_usia[3], drjt_tb[1]) # Rule 10 => tahap4 & pendek = PENDEK
rule15 = np.fmin(drjt_usia[3], drjt_tb[2]) # Rule 11 => tahap4 & normal = NORMAL
rule16 = np.fmin(drjt_usia[3], drjt_tb[3]) # Rule 12 => tahap4 & tinggi = TINGGI
rule17 = np.fmin(drjt_usia[4], drjt_tb[0]) # Rule 9 => tahap5 & sangat_pendek = SANGAT PENDEK
rule18 = np.fmin(drjt_usia[4], drjt_tb[1]) # Rule 10 => tahap5 & pendek = PENDEK
rule19 = np.fmin(drjt_usia[4], drjt_tb[2]) # Rule 11 => tahap5 & normal = NORMAL
rule20 = np.fmin(drjt_usia[4], drjt_tb[3]) # Rule 12 => tahap5 & tinggi = TINGGI
pk_tb_u_sangat_pendek = np.fmax(rule9, np.fmax(rule13, rule17))
pk_tb_u_pendek = np.fmax(rule1, np.fmax(rule5, np.fmax(rule10, np.fmax(rule14, rule18))))
pk_tb_u_normal = np.fmax(rule2, np.fmax(rule6, np.fmax(rule11, np.fmax(rule15, rule19))))
pk_tb_u_tinggi = np.fmax(rule3,
np.fmax(rule4, np.fmax(rule7, np.fmax(rule8, np.fmax(rule12, np.fmax(rule16, rule20))))))
print(pk_tb_u_sangat_pendek)
print(pk_tb_u_pendek)
print(pk_tb_u_normal)
print(pk_tb_u_tinggi)
pk_tb_u_sangat_pendek = np.fmin(pk_tb_u_sangat_pendek, tb_u_sangat_pendek)
pk_tb_u_pendek = np.fmin(pk_tb_u_pendek, tb_u_pendek)
pk_tb_u_normal = np.fmin(pk_tb_u_normal, tb_u_normal)
pk_tb_u_tinggi = np.fmin(pk_tb_u_tinggi, tb_u_tinggi)
pk_tb_u_0 = np.zeros_like(x_tb_u)
pk_tb_u_sp = np.zeros_like(tb_u_sangat_pendek)
pk_tb_u_p = np.zeros_like(tb_u_pendek)
pk_tb_u_n = np.zeros_like(tb_u_normal)
pk_tb_u_t = np.zeros_like(tb_u_tinggi)
fig, (ax0, ax1, ax2, ax3, ax4) = plt.subplots(nrows=5, figsize=(8, 9))
ax0.fill_between(x_tb_u, pk_tb_u_sp, pk_tb_u_sangat_pendek, facecolor='b', alpha=0.7)
ax0.plot(x_tb_u, tb_u_sangat_pendek, 'b', linewidth=1.5, linestyle='--', label="Sangat Pendek")
ax0.set_title('TB/U')
ax0.legend()
ax1.fill_between(x_tb_u, pk_tb_u_p, pk_tb_u_pendek, facecolor='b', alpha=0.7)
ax1.plot(x_tb_u, tb_u_pendek, 'b', linewidth=1.5, linestyle='--', label="Pendek")
ax1.set_title('TB/U')
ax1.legend()
ax2.fill_between(x_tb_u, pk_tb_u_n, pk_tb_u_normal, facecolor='b', alpha=0.7)
ax2.plot(x_tb_u, tb_u_normal, 'b', linewidth=1.5, linestyle='--', label="Normal")
ax2.set_title('TB/U')
ax2.legend()
ax3.fill_between(x_tb_u, pk_tb_u_t, pk_tb_u_normal, facecolor='b', alpha=0.7)
ax3.plot(x_tb_u, tb_u_tinggi, 'b', linewidth=1.5, linestyle='--', label="Tinggi")
ax3.set_title('TB/U')
ax3.legend()
ax4.fill_between(x_tb_u, pk_tb_u_0, pk_tb_u_sangat_pendek, facecolor='b', alpha=0.7)
ax4.plot(x_tb_u, tb_u_sangat_pendek, 'b', linewidth=1.5, linestyle='--', label="Sangat Pendek")
ax4.fill_between(x_tb_u, pk_tb_u_0, pk_tb_u_pendek, facecolor='g', alpha=0.7)
ax4.plot(x_tb_u, tb_u_pendek, 'g', linewidth=1.5, linestyle='--', label="Pendek")
ax4.fill_between(x_tb_u, pk_tb_u_0, pk_tb_u_normal, facecolor='r', alpha=0.7)
ax4.plot(x_tb_u, tb_u_normal, 'r', linewidth=1.5, linestyle='--', label="Normal")
ax4.fill_between(x_tb_u, pk_tb_u_0, pk_tb_u_normal, facecolor='m', alpha=0.7)
ax4.plot(x_tb_u, tb_u_tinggi, 'm', linewidth=1.5, linestyle='--', label="Tinggi")
ax4.set_title('Tinggi Badan / Usia')
ax4.legend()
for ax in (ax0, ax1, ax2, ax3, ax4):
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.get_xaxis().tick_bottom()
ax.get_yaxis().tick_left()
plt.tight_layout()
komposisi = np.fmax(pk_tb_u_sangat_pendek,
np.fmax(pk_tb_u_pendek, np.fmax(pk_tb_u_normal, pk_tb_u_tinggi)))
tinggi_badan_per_usia = fuzz.defuzz(x_tb_u, komposisi, 'centroid')
plt.plot([tinggi_badan_per_usia, tinggi_badan_per_usia],
[0, fuzz.interp_membership(x_tb_u, komposisi, tinggi_badan_per_usia)], 'k',
linewidth=1.5, alpha=0.9)
# Calculate membership values for the defuzzified result
tb_u_sangat_pendek_degree = fuzz.interp_membership(x_tb_u, tb_u_sangat_pendek, tinggi_badan_per_usia)
tb_u_pendek_degree = fuzz.interp_membership(x_tb_u, tb_u_pendek, tinggi_badan_per_usia)
tb_u_normal_degree = fuzz.interp_membership(x_tb_u, tb_u_normal, tinggi_badan_per_usia)
tb_u_tinggi_degree = fuzz.interp_membership(x_tb_u, tb_u_tinggi, tinggi_badan_per_usia)
status_gizi = 'Tidak Terdefinisi'
max_keanggotaan = max(tb_u_sangat_pendek_degree, tb_u_pendek_degree, tb_u_normal_degree,
tb_u_tinggi_degree)
if max_keanggotaan == tb_u_sangat_pendek_degree:
status_gizi = 'Sangat Pendek'
elif max_keanggotaan == tb_u_pendek_degree:
status_gizi = 'Pendek'
elif max_keanggotaan == tb_u_normal_degree:
status_gizi = 'Normal'
elif max_keanggotaan == tb_u_tinggi_degree:
status_gizi = 'Tinggi'
results = {
'defuzzified_value': tinggi_badan_per_usia,
'status_gizi': status_gizi,
'tb_u_sangat_pendek_degree': tb_u_sangat_pendek_degree,
'tb_u_pendek_degree': tb_u_pendek_degree,
'tb_u_normal_degree': tb_u_normal_degree,
'tb_u_tinggi_degree': tb_u_tinggi_degree
}
print(results)
# SHOW PLOT OR GRAPH
# plt.show()
return results
def countBB_TB(bb, tb, jk):
# VAR INPUT
x_bb = np.arange(2, 28, 1)
if jk == "L":
x_tb = np.arange(44, 130, 1)
else:
x_tb = np.arange(43, 130, 1)
# VAR OUTPUT
if jk == "L":
x_bb_tb = np.arange(3, 40, 1)
else:
x_bb_tb = np.arange(3, 38, 1)
# membership / keanggotaan BERAT BADAN
bb_sangat_kurang = fuzz.trapmf(x_bb, [2, 2, 4, 6])
if jk == "L":
bb_kurang = fuzz.trimf(x_bb, [4, 8, 12])
bb_normal = fuzz.trimf(x_bb, [8, 13, 18])
bb_lebih = fuzz.trimf(x_bb, [15, 18, 23])
bb_sangat_lebih = fuzz.trapmf(x_bb, [21, 23, 28, 28])
else:
bb_kurang = fuzz.trimf(x_bb, [4, 8, 11])
bb_normal = fuzz.trimf(x_bb, [9, 13, 18])
bb_lebih = fuzz.trimf(x_bb, [15, 20, 24])
bb_sangat_lebih = fuzz.trapmf(x_bb, [22, 25, 28, 28])
# membership / keanggotaan TINGGI BADAN
if jk == "L":
tb_sangat_pendek = fuzz.trapmf(x_tb, [44, 44, 48, 56])
tb_pendek = fuzz.trimf(x_tb, [48, 65, 80])
tb_normal = fuzz.trimf(x_tb, [66, 94, 126])
tb_tinggi = fuzz.trapmf(x_tb, [110, 126, 130, 130])
else:
tb_sangat_pendek = fuzz.trapmf(x_tb, [43, 43, 47, 55])
tb_pendek = fuzz.trimf(x_tb, [47, 64, 78])
tb_normal = fuzz.trimf(x_tb, [64, 92, 124])
tb_tinggi = fuzz.trapmf(x_tb, [108, 124, 130, 130])
# membership / keanggotaan BB-TB
# Gizi Buruk 3 - 10 3 - 8 3,7,10 3,6,8
# Gizi Kurang 7 - 14 6 - 12 7,12,14 6,9,12
# Gizi Baik 12 - 25 10 - 24 12,19,25 10,16,24
# Beresiko Gizi Lebih 21 - 27 19 - 25 21,23,27 19,22,25
# Gizi Lebih 25 - 29 24 - 28 25,27,29 24,26,28
# Obesitas 28 - 34 28 - 38 28,34,40 28,32,38
if jk == "L":
bb_tb_gizi_buruk = fuzz.trapmf(x_bb_tb, [3, 3, 7, 10])
bb_tb_gizi_kurang = fuzz.trimf(x_bb_tb, [7, 12, 14])
bb_tb_gizi_baik = fuzz.trimf(x_bb_tb, [12, 19, 25])
bb_tb_beresiko_gizi_lebih = fuzz.trimf(x_bb_tb, [21, 23, 27])
bb_tb_gizi_lebih = fuzz.trimf(x_bb_tb, [25, 27, 29])
bb_tb_gizi_obesitas = fuzz.trapmf(x_bb_tb, [28, 34, 40, 40])
else:
bb_tb_gizi_buruk = fuzz.trapmf(x_bb_tb, [3, 3, 6, 8])
bb_tb_gizi_kurang = fuzz.trimf(x_bb_tb, [6, 9, 12])
bb_tb_gizi_baik = fuzz.trimf(x_bb_tb, [10, 16, 24])
bb_tb_beresiko_gizi_lebih = fuzz.trimf(x_bb_tb, [19, 22, 25])
bb_tb_gizi_lebih = fuzz.trimf(x_bb_tb, [24, 26, 28])
bb_tb_gizi_obesitas = fuzz.trapmf(x_bb_tb, [28, 32, 38, 38])
fig, (ax0, ax1, ax2) = plt.subplots(nrows=3, figsize=(8, 9))
ax0.plot(x_bb, bb_sangat_kurang, 'b', linewidth=1.5, label="Sangat Kurang")
ax0.plot(x_bb, bb_kurang, 'g', linewidth=1.5, label="Kurang")
ax0.plot(x_bb, bb_normal, 'r', linewidth=1.5, label="Normal")
ax0.plot(x_bb, bb_lebih, 'm', linewidth=1.5, label="Lebih")
ax0.plot(x_bb, bb_sangat_lebih, 'c', linewidth=1.5, label="Sangat Lebih")
ax0.set_title("---- Berat Badan ----")
ax0.legend()
ax1.plot(x_tb, tb_sangat_pendek, 'b', linewidth=1.5, label="Sangat Pendek")
ax1.plot(x_tb, tb_pendek, 'g', linewidth=1.5, label="Pendek")
ax1.plot(x_tb, tb_normal, 'r', linewidth=1.5, label="Normal")
ax1.plot(x_tb, tb_tinggi, 'm', linewidth=1.5, label="Tinggi")
ax1.set_title("---- TINGGI BADAN ----")
ax1.legend()
ax2.plot(x_bb_tb, bb_tb_gizi_buruk, 'b', linewidth=1.5, label="Gizi Buruk")
ax2.plot(x_bb_tb, bb_tb_gizi_kurang, 'g', linewidth=1.5, label="Gizi Kurang")
ax2.plot(x_bb_tb, bb_tb_gizi_baik, 'r', linewidth=1.5, label="Gizi Baik / Normal")
ax2.plot(x_bb_tb, bb_tb_beresiko_gizi_lebih, 'm', linewidth=1.5, label="Beresiko Gizi Lebih")
ax2.plot(x_bb_tb, bb_tb_gizi_lebih, 'c', linewidth=1.5, label="Gizi Lebih")
ax2.plot(x_bb_tb, bb_tb_gizi_obesitas, 'y', linewidth=1.5, label="Obesitas")
ax2.set_title("---- BB / TB ----")
ax2.legend()
for ax in (ax0, ax1, ax2):
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.get_xaxis().tick_bottom()
ax.get_yaxis().tick_left()
plt.tight_layout()
bb_sk = fuzz.interp_membership(x_bb, bb_sangat_kurang, bb)
bb_k = fuzz.interp_membership(x_bb, bb_kurang, bb)
bb_n = fuzz.interp_membership(x_bb, bb_normal, bb)
bb_l = fuzz.interp_membership(x_bb, bb_lebih, bb)
bb_sl = fuzz.interp_membership(x_bb, bb_sangat_lebih, bb)
tb_sp = fuzz.interp_membership(x_tb, tb_sangat_pendek, tb)
tb_p = fuzz.interp_membership(x_tb, tb_pendek, tb)
tb_n = fuzz.interp_membership(x_tb, tb_normal, tb)
tb_t = fuzz.interp_membership(x_tb, tb_tinggi, tb)
print(bb_sk, bb_k, bb_n, bb_l, bb_sl)
print(tb_sp, tb_p, tb_n, tb_t)
drjt_bb = bb_sk, bb_k, bb_n, bb_l, bb_sl
drjt_tb = tb_sp, tb_p, tb_n, tb_t
# Rule => usia, bb = output aturan # Rule => BERAT BADAN & TINGGI BADAN = OUTPUT RULE
rule1 = np.fmin(drjt_bb[0], drjt_tb[0]) # Rule 1 => sangat_kurang & sangat_pendek = GIZI KURANG
rule2 = np.fmin(drjt_bb[0], drjt_tb[1]) # Rule 2 => sangat_kurang & pendek = GIZI KURANG
rule3 = np.fmin(drjt_bb[0], drjt_tb[2]) # Rule 3 => sangat_kurang & normal = GIZI KURANG
rule4 = np.fmin(drjt_bb[0], drjt_tb[3]) # Rule 4 => sangat_kurang & tinggi = GIZI BURUK
rule5 = np.fmin(drjt_bb[1], drjt_tb[0]) # Rule 5 => kurang & sangat_pendek = GIZI KURANG
rule6 = np.fmin(drjt_bb[1], drjt_tb[1]) # Rule 6 => kurang & pendek = NORMAL
rule7 = np.fmin(drjt_bb[1], drjt_tb[2]) # Rule 7 => kurang & normal = GIZI KURANG
rule8 = np.fmin(drjt_bb[1], drjt_tb[3]) # Rule 8 => kurang & tinggi = GIZI KURANG
rule9 = np.fmin(drjt_bb[2], drjt_tb[0]) # Rule 9 => normal & sangat_pendek = GIZI LEBIH
rule10 = np.fmin(drjt_bb[2], drjt_tb[1]) # Rule 10 => normal & pendek = NORMAL
rule11 = np.fmin(drjt_bb[2], drjt_tb[2]) # Rule 11 => normal & normal = NORMAL
rule12 = np.fmin(drjt_bb[2], drjt_tb[3]) # Rule 12 => normal & tinggi = GIZI KURANG
rule13 = np.fmin(drjt_bb[3], drjt_tb[0]) # Rule 13 => lebih & sangat_pendek = OBESITAS
rule14 = np.fmin(drjt_bb[3], drjt_tb[1]) # Rule 14 => lebih & pendek = GIZI LEBIH
rule15 = np.fmin(drjt_bb[3], drjt_tb[2]) # Rule 15 => lebih & normal = BERESIKO GIZI LEBIH
rule16 = np.fmin(drjt_bb[3], drjt_tb[3]) # Rule 16 => lebih & tinggi = NORMAL
rule17 = np.fmin(drjt_bb[4], drjt_tb[0]) # Rule 13 => sangat_lebih & sangat_pendek = OBESITAS
rule18 = np.fmin(drjt_bb[4], drjt_tb[1]) # Rule 14 => sangat_lebih & pendek = OBESITAS
rule19 = np.fmin(drjt_bb[4], drjt_tb[2]) # Rule 15 => sangat_lebih & normal = BERESIKO GIZI LEBIH
rule20 = np.fmin(drjt_bb[4], drjt_tb[3]) # Rule 16 => sangat_lebih & tinggi = BERESIKO GIZI LEBIH
pk_bb_tb_gz_buruk = rule4
pk_bb_tb_gz_kurang = np.fmax(rule1,
np.fmax(rule2, np.fmax(rule3, np.fmax(rule5, np.fmax(rule7, np.fmax(rule8, rule12))))))
pk_bb_tb_gz_baik_or_normal = np.fmax(rule6, np.fmax(rule10, np.fmax(rule11, rule16)))
pk_bb_tb_gz_beresiko_lebih = np.fmax(rule15, np.fmax(rule19, rule20))
pk_bb_tb_gz_lebih = np.fmax(rule9, rule14)
pk_bb_tb_gz_obesitas = np.fmax(rule13, np.fmax(rule17, rule18))
print(pk_bb_tb_gz_buruk)
print(pk_bb_tb_gz_kurang)
print(pk_bb_tb_gz_baik_or_normal)
print(pk_bb_tb_gz_beresiko_lebih)
print(pk_bb_tb_gz_lebih)
print(pk_bb_tb_gz_obesitas)
pk_bb_tb_gz_buruk = np.fmin(pk_bb_tb_gz_buruk, bb_tb_gizi_buruk)
pk_bb_tb_gz_kurang = np.fmin(pk_bb_tb_gz_kurang, bb_tb_gizi_kurang)
pk_bb_tb_gz_baik_or_normal = np.fmin(pk_bb_tb_gz_baik_or_normal, bb_tb_gizi_baik)
pk_bb_tb_gz_beresiko_lebih = np.fmin(pk_bb_tb_gz_beresiko_lebih, bb_tb_beresiko_gizi_lebih)
pk_bb_tb_gz_lebih = np.fmin(pk_bb_tb_gz_lebih, bb_tb_gizi_lebih)
pk_bb_tb_gz_obesitas = np.fmin(pk_bb_tb_gz_obesitas, bb_tb_gizi_obesitas)
pk_tb_u_0 = np.zeros_like(x_bb_tb)
pk_bb_tb_gz_b = np.zeros_like(bb_tb_gizi_buruk)
pk_bb_tb_gz_k = np.zeros_like(bb_tb_gizi_kurang)
pk_bb_tb_gz_n = np.zeros_like(bb_tb_gizi_baik)
pk_bb_tb_gz_bl = np.zeros_like(bb_tb_beresiko_gizi_lebih)
pk_bb_tb_gz_l = np.zeros_like(bb_tb_gizi_lebih)
pk_bb_tb_gz_ob = np.zeros_like(bb_tb_gizi_obesitas)
fig, (ax0, ax1, ax2, ax3, ax4, ax5, ax6) = plt.subplots(nrows=7, figsize=(8, 9))
ax0.fill_between(x_bb_tb, pk_bb_tb_gz_b, pk_bb_tb_gz_buruk, facecolor='b', alpha=0.7)
ax0.plot(x_bb_tb, bb_tb_gizi_buruk, 'b', linewidth=1.5, linestyle='--', label="Gizi Buruk")
ax0.set_title('BB/TB')
ax0.legend()
ax1.fill_between(x_bb_tb, pk_bb_tb_gz_k, pk_bb_tb_gz_kurang, facecolor='b', alpha=0.7)
ax1.plot(x_bb_tb, bb_tb_gizi_kurang, 'b', linewidth=1.5, linestyle='--', label="Gizi Kurang")
ax1.set_title('BB/TB')
ax1.legend()
ax2.fill_between(x_bb_tb, pk_bb_tb_gz_n, pk_bb_tb_gz_baik_or_normal, facecolor='b', alpha=0.7)
ax2.plot(x_bb_tb, bb_tb_gizi_baik, 'b', linewidth=1.5, linestyle='--', label="Gizi Baik / Normal")
ax2.set_title('BB/TB')
ax2.legend()
ax3.fill_between(x_bb_tb, pk_bb_tb_gz_bl, pk_bb_tb_gz_beresiko_lebih, facecolor='b', alpha=0.7)
ax3.plot(x_bb_tb, bb_tb_beresiko_gizi_lebih, 'b', linewidth=1.5, linestyle='--', label="Beresiko Gizi Lebih")
ax3.set_title('BB/TB')
ax3.legend()
ax4.fill_between(x_bb_tb, pk_bb_tb_gz_l, pk_bb_tb_gz_lebih, facecolor='b', alpha=0.7)
ax4.plot(x_bb_tb, bb_tb_gizi_lebih, 'b', linewidth=1.5, linestyle='--', label="Gizi Lebih")
ax4.set_title('BB/TB')
ax4.legend()
ax5.fill_between(x_bb_tb, pk_bb_tb_gz_ob, pk_bb_tb_gz_obesitas, facecolor='b', alpha=0.7)
ax5.plot(x_bb_tb, bb_tb_gizi_obesitas, 'b', linewidth=1.5, linestyle='--', label="Obesitas")
ax5.set_title('BB/TB')
ax5.legend()
ax6.fill_between(x_bb_tb, pk_bb_tb_gz_b, pk_bb_tb_gz_buruk, facecolor='b', alpha=0.7)
ax6.plot(x_bb_tb, bb_tb_gizi_buruk, 'b', linewidth=1.5, linestyle='--', label="Gizi Buruk")
ax6.fill_between(x_bb_tb, pk_bb_tb_gz_k, pk_bb_tb_gz_kurang, facecolor='g', alpha=0.7)
ax6.plot(x_bb_tb, bb_tb_gizi_kurang, 'g', linewidth=1.5, linestyle='--', label="Gizi Kurang")
ax6.fill_between(x_bb_tb, pk_bb_tb_gz_n, pk_bb_tb_gz_baik_or_normal, facecolor='r', alpha=0.7)
ax6.plot(x_bb_tb, bb_tb_gizi_baik, 'r', linewidth=1.5, linestyle='--', label="Gizi Baik / Normal")
ax6.fill_between(x_bb_tb, pk_bb_tb_gz_bl, pk_bb_tb_gz_beresiko_lebih, facecolor='m', alpha=0.7)
ax6.plot(x_bb_tb, bb_tb_beresiko_gizi_lebih, 'm', linewidth=1.5, linestyle='--', label="Beresiko Gizi Lebih")
ax6.fill_between(x_bb_tb, pk_bb_tb_gz_l, pk_bb_tb_gz_lebih, facecolor='c', alpha=0.7)
ax6.plot(x_bb_tb, bb_tb_gizi_lebih, 'c', linewidth=1.5, linestyle='--', label="Gizi Lebih")
ax6.fill_between(x_bb_tb, pk_bb_tb_gz_ob, pk_bb_tb_gz_obesitas, facecolor='y', alpha=0.7)
ax6.plot(x_bb_tb, bb_tb_gizi_obesitas, 'y', linewidth=1.5, linestyle='--', label="Obesitas")
ax6.set_title('Tinggi Badan / Usia')
ax6.legend()
for ax in (ax0, ax1, ax2, ax3, ax4, ax5, ax6):
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.get_xaxis().tick_bottom()
ax.get_yaxis().tick_left()
plt.tight_layout()
komposisi = np.fmax(pk_bb_tb_gz_buruk, np.fmax(pk_bb_tb_gz_kurang, np.fmax(pk_bb_tb_gz_baik_or_normal,
np.fmax(pk_bb_tb_gz_beresiko_lebih,
np.fmax(pk_bb_tb_gz_lebih,
pk_bb_tb_gz_obesitas)))))
berat_badan_per_tinggi_badan = fuzz.defuzz(x_bb_tb, komposisi, 'centroid')
plt.plot([berat_badan_per_tinggi_badan, berat_badan_per_tinggi_badan],
[0, fuzz.interp_membership(x_bb_tb, komposisi, berat_badan_per_tinggi_badan)], 'k',
linewidth=1.5, alpha=0.9)
# Calculate membership values for the defuzzified result
bb_tb_gizi_buruk_degree = fuzz.interp_membership(x_bb_tb, bb_tb_gizi_buruk, berat_badan_per_tinggi_badan)
bb_tb_gizi_kurang_degree = fuzz.interp_membership(x_bb_tb, bb_tb_gizi_kurang, berat_badan_per_tinggi_badan)
bb_tb_gizi_normal_degree = fuzz.interp_membership(x_bb_tb, bb_tb_gizi_baik, berat_badan_per_tinggi_badan)
bb_tb_brsk_gizi_lebih_degree = fuzz.interp_membership(x_bb_tb, bb_tb_beresiko_gizi_lebih,
berat_badan_per_tinggi_badan)
bb_tb_gizi_lebih_degree = fuzz.interp_membership(x_bb_tb, bb_tb_gizi_lebih, berat_badan_per_tinggi_badan)
bb_tb_gizi_obesitas_degree = fuzz.interp_membership(x_bb_tb, bb_tb_gizi_obesitas, berat_badan_per_tinggi_badan)
status_gizi = 'Tidak Terdefinisi'
max_keanggotaan = max(bb_tb_gizi_buruk_degree, bb_tb_gizi_kurang_degree, bb_tb_gizi_normal_degree,
bb_tb_brsk_gizi_lebih_degree, bb_tb_gizi_lebih_degree, bb_tb_gizi_obesitas_degree)
if max_keanggotaan == bb_tb_gizi_buruk_degree:
status_gizi = 'Gizi Buruk'
elif max_keanggotaan == bb_tb_gizi_kurang_degree:
status_gizi = 'Gizi Kurang'
elif max_keanggotaan == bb_tb_gizi_normal_degree:
status_gizi = 'Gizi Baik / Normal'
elif max_keanggotaan == bb_tb_brsk_gizi_lebih_degree:
status_gizi = 'Beresiko Gizi Lebih'
elif max_keanggotaan == bb_tb_gizi_lebih_degree:
status_gizi = 'Gizi Lebih'
elif max_keanggotaan == bb_tb_gizi_obesitas_degree:
status_gizi = 'Gizi Obesitas'
results = {
'defuzzified_value': berat_badan_per_tinggi_badan,
'status_gizi': status_gizi,
'bb_tb_gizi_buruk_degree': bb_tb_gizi_buruk_degree,
'bb_tb_gizi_kurang_degree': bb_tb_gizi_kurang_degree,
'bb_tb_gizi_normal_degree': bb_tb_gizi_normal_degree,
'bb_tb_brsk_gizi_lebih_degree': bb_tb_brsk_gizi_lebih_degree,
'bb_tb_gizi_lebih_degree': bb_tb_gizi_lebih_degree,
'bb_tb_gizi_obesitas_degree': bb_tb_gizi_obesitas_degree,
}
print(results)
# SHOW PLOT OR GRAPH
# plt.show()
return results
# DATA TEST => usia berat tinggi jk
# Aurio Jalud 32 15.4 94 L
# Aurio Jalud 29 19 87 L
# TES BB/U
print(countBB_U(4, 6.4, "L"))
# TES TB/U
print(countTB_U(4, 65.5, "L"))
# TES TB/U
print(countBB_TB(6.4, 65.5, "L"))
@app.post("/deteksi-gizi")
def deteksi_gizi(input_data: InputData):
result_bb_u = countBB_U(input_data.usia, input_data.bb, input_data.jk)
result_tb_u = countTB_U(input_data.usia, input_data.tb, input_data.jk)
result_bb_tb = countBB_TB(input_data.bb, input_data.tb, input_data.jk)
result = {
'usia': input_data.usia,
'berat_badan': input_data.bb,
'tinggi_badan': input_data.tb,
'hasil': {
'bb_u': result_bb_u,
'tb_u': result_tb_u,
'bb_tb': result_bb_tb
}
}
return result