Spaces:
Sleeping
Sleeping
File size: 4,290 Bytes
75889cb 9f51c76 75889cb |
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 |
from fastapi import FastAPI
from asgiref.wsgi import WsgiToAsgi
from flask import Flask, request, render_template
import pickle, os
from fastapi.middleware.wsgi import WSGIMiddleware
# Initialize Flask app
flask_app = Flask(__name__)
def validasi_inputan(form_data):
errors = {}
# Validasi untuk field Age, TB, Alkphos, Sgpt, A/G Ratio
if not form_data.get("Age"):
errors["Age"] = "Age tidak boleh kosong."
else:
try:
Age = int(form_data.get("Age"))
except ValueError:
errors["Age"] = "Age harus berupa angka."
if form_data.get("Gender") not in ["0", "1"]:
errors["Gender"] = "Gender harus 0 (Female) atau 1 (Male)."
if not form_data.get("TB"):
errors["TB"] = "TB tidak boleh kosong."
else:
try:
TB = float(form_data.get("TB"))
except ValueError:
errors["TB"] = "TB harus berupa angka."
if not form_data.get("Alkphos"):
errors["Alkphos"] = "Alkphos tidak boleh kosong."
else:
try:
Alkphos = float(form_data.get("Alkphos"))
except ValueError:
errors["Alkphos"] = "Alkphos harus berupa angka."
if not form_data.get("Sgpt"):
errors["Sgpt"] = "Sgpt tidak boleh kosong."
else:
try:
Sgpt = float(form_data.get("Sgpt"))
except ValueError:
errors["Sgpt"] = "Sgpt harus berupa angka."
if not form_data.get("AG_Ratio"):
errors["AG_Ratio"] = "A/G Ratio tidak boleh kosong."
else:
try:
AG_Ratio = float(form_data.get("AG_Ratio"))
except ValueError:
errors["AG_Ratio"] = "A/G Ratio harus berupa angka."
return errors
def validate_data(record):
errors = {}
# Menambahkan batasan nilai untuk beberapa input
if record["Age"] < 0 or record["Age"] > 150:
errors["Age"] = "Age harus antara 0 dan 150."
if record["TB"] < 0 or record["TB"] > 100:
errors["TB"] = "TB harus antara 0 dan 100."
if record["Alkphos"] < 0 or record["Alkphos"] > 1000:
errors["Alkphos"] = "Alkphos harus antara 0 dan 1000."
if record["Sgpt"] < 0 or record["Sgpt"] > 1000:
errors["Sgpt"] = "Sgpt harus antara 0 dan 1000."
if record["AG_Ratio"] < 0 or record["AG_Ratio"] > 2:
errors["AG_Ratio"] = "A/G Ratio harus antara 0 dan 2."
return errors
# Load models
linear_model_load = pickle.load(open('model.sav', 'rb'))
scaler_load = pickle.load(open('scaler.sav', 'rb'))
# Flask route
@flask_app.route("/", methods=["GET", "POST"])
def index():
prediction = None
errors = {}
if request.method == "POST":
# Validasi inputan tidak boleh kosong
errors = validasi_inputan(request.form)
if not errors:
record = {
"Age": int(request.form.get("Age")),
"Gender": int(request.form.get("Gender")), # Gender (0 = Female, 1 = Male)
"TB": float(request.form.get("TB")),
"Alkphos": float(request.form.get("Alkphos")),
"Sgpt": float(request.form.get("Sgpt")),
"AG_Ratio": float(request.form.get("AG_Ratio"))
}
errors = validate_data(record)
if not errors:
# Data input untuk prediksi
input_data = [
record["Age"],
record["Gender"],
record["TB"],
record["Alkphos"],
record["Sgpt"],
record["AG_Ratio"]
]
# Normalisasi input data
input_data_normalized = scaler_load.transform([input_data])
# Membuat prediksi dari model
predicted_value_normalized = linear_model_load.predict(input_data_normalized)
# Menyesuaikan bentuk data untuk inverse_transform
# Mengambil elemen prediksi pertama sebagai hasil akhir
prediction = int(predicted_value_normalized)
return render_template('index.html', prediction=prediction, errors=errors, record=request.form)
# FastAPI app to mount Flask app
app = FastAPI()
# Mount Flask app inside FastAPI using WSGIMiddleware
app.mount("/", WSGIMiddleware(flask_app)) |