slickdata's picture
Upload 14 files
e08cf32
from fastapi import FastAPI, HTTPException
import uvicorn
import os
import numpy as np
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.impute import SimpleImputer
import joblib
app = FastAPI(debug=True)
def load_model():
cwd = os.getcwd()
destination = os.path.join(cwd, "Assets")
imputer_filepath = os.path.join(destination, "numerical_imputer.joblib")
scaler_filepath = os.path.join(destination, "scaler.joblib")
model_filepath = os.path.join(destination, "Final_01_model.joblib")
num_imputer = joblib.load(imputer_filepath)
scaler = joblib.load(scaler_filepath)
model = joblib.load(model_filepath)
return num_imputer, scaler, model
numerical_imputer, scaler, model = load_model()
@app.get("/")
async def read_root():
return {"message": "Welcome To The Sepsis Prediction API"}
@app.post("/predict_sepsis")
async def predict_sepsis(PRG: float, PL: float, PR: float, SK: float, TS: float, M11: float, BD2: float, Age: float, Insurance: int):
sepsis_data = {
'PRG': PRG,
'PL': PL,
'PR': PR,
'SK': SK,
'TS': TS,
'M11': M11,
'BD2': BD2,
'Age': Age,
'Insurance': Insurance
}
input_data = pd.DataFrame([sepsis_data]) # Create a DataFrame from the dictionary
input_imputed = numerical_imputer.transform(input_data)
input_scaled = scaler.transform(input_imputed)
prediction = model.predict(input_scaled)
sepsis_status = "Positive" if prediction == 1 else "Negative"
probabilities = model.predict_proba(input_scaled)[0]
probability = probabilities[1] if prediction == 1 else probabilities[0]
if prediction == 1:
status_icon = "βœ”"
sepsis_explanation = "Sepsis is a life-threatening condition caused by an infection. A positive prediction suggests that the patient might be exhibiting sepsis symptoms and requires immediate medical attention."
else:
status_icon = "✘"
sepsis_explanation = "Sepsis is a life-threatening condition caused by an infection. A negative prediction suggests that the patient is not currently exhibiting sepsis symptoms."
statement = f"The patient's sepsis status is {sepsis_status} {status_icon} with a probability of {probability:.2f}. {sepsis_explanation}"
user_input_statement = f"Please note this is the user-inputted data: {sepsis_data}"
result = {
'predicted_sepsis': sepsis_status,
'statement': statement,
'user_input_statement': user_input_statement,
'probability': probability
}
return result
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000, reload=True)