|
""" |
|
FastAPI script for Sepssis and model prediction |
|
Author: Equity |
|
Date: May.30th 2023 |
|
""" |
|
|
|
|
|
|
|
from fastapi import FastAPI |
|
import pickle |
|
import uvicorn |
|
from pydantic import BaseModel |
|
import pandas as pd |
|
|
|
|
|
|
|
|
|
class model_input(BaseModel): |
|
|
|
PRG: int |
|
PL: int |
|
PR: int |
|
SK: int |
|
TS: int |
|
M11: float |
|
BD2: float |
|
Age: int |
|
Insurance:int |
|
|
|
|
|
app = FastAPI(title = 'Sepssis API', |
|
description = 'An API that takes input and display the predictions', |
|
version = '0.1.0') |
|
|
|
|
|
toolkit = "P6_toolkit" |
|
|
|
def load_toolkit(filepath = toolkit): |
|
with open(toolkit, "rb") as file: |
|
loaded_toolkit = pickle.load(file) |
|
return loaded_toolkit |
|
|
|
toolkit = load_toolkit() |
|
scaler = toolkit["scaler"] |
|
model = toolkit["model"] |
|
|
|
|
|
@app.get("/") |
|
async def hello(): |
|
return "Welcome to our model API" |
|
|
|
|
|
|
|
@app.post("/Sepssis") |
|
async def prediction(input:model_input): |
|
data = { |
|
'PRG': input.PRG, |
|
'PL': input.PL, |
|
'PR': input.PR, |
|
'SK': input.SK, |
|
'TS': input.TS, |
|
'M11': input.M11, |
|
'BD2': input.BD2, |
|
'Age': input.Age, |
|
'Insurance': input.Insurance, |
|
} |
|
|
|
|
|
df = pd.DataFrame(data, index=[0]) |
|
|
|
|
|
|
|
numeric_columns = [ 'PRG', 'PL', 'PR', 'SK', 'TS', 'M11', 'BD2', 'Age','Insurance'] |
|
|
|
|
|
Scaler = scaler.transform(df[numeric_columns]) |
|
Scaled = pd.DataFrame(Scaler) |
|
prediction = model.predict(Scaled).tolist() |
|
probability = model.predict_proba(Scaled) |
|
|
|
|
|
|
|
if (prediction[0] < 0.5): |
|
prediction = "Negative. This person has no Sepssis" |
|
else: |
|
prediction = "Positive. This person has Sepssis" |
|
data['prediction'] = prediction |
|
return data |
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
uvicorn.run("API_app:app",host = '0.0.0.0', port = 7860) |