Kwasiasomani's picture
Update API_app.py
6d42868
"""
FastAPI script for Sepssis and model prediction
Author: Equity
Date: May.30th 2023
"""
# The library for the API Code
from fastapi import FastAPI
import pickle
import uvicorn
from pydantic import BaseModel
import pandas as pd
# Declare the data with its components and their type
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')
# Load the saved data
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,
}
# prepare the data as a dataframe
df = pd.DataFrame(data, index=[0])
#numerical features
numeric_columns = [ 'PRG', 'PL', 'PR', 'SK', 'TS', 'M11', 'BD2', 'Age','Insurance']
#scaling
Scaler = scaler.transform(df[numeric_columns])
Scaled = pd.DataFrame(Scaler)
prediction = model.predict(Scaled).tolist()
probability = model.predict_proba(Scaled)
# Labelling Model output
if (prediction[0] < 0.5):
prediction = "Negative. This person has no Sepssis"
else:
prediction = "Positive. This person has Sepssis"
data['prediction'] = prediction
return data
# Launch the app
if __name__ == "__main__":
uvicorn.run("API_app:app",host = '0.0.0.0', port = 7860)