petermutwiri/Sepsis_API
0
1from fastapi.responses import RedirectResponse2from fastapi import FastAPI, Request, HTTPException, APIRouter, Depends3from fastapi.openapi.docs import get_swagger_ui_html4from fastapi import FastAPI5from pydantic import BaseModel6import joblib7import pandas as pd8import numpy as np9from sklearn.preprocessing import StandardScaler10from sklearn.impute import SimpleImputer11from sklearn.compose import ColumnTransformer12from sklearn.pipeline import Pipeline13from sklearn.linear_model import LogisticRegression14 15app = FastAPI()16 17# Load the entire pipeline18pipeline_filepath = "pipeline.joblib"19pipeline = joblib.load(pipeline_filepath)20 21class PatientData(BaseModel):22 Plasma_glucose : float23 Blood_Work_Result_1: float24 Blood_Pressure : float25 Blood_Work_Result_2 : float26 Blood_Work_Result_3 : float27 Body_mass_index : float28 Blood_Work_Result_4: float29 Age: float30 Insurance: int31 32 33@app.get("/")34async def root():35 return RedirectResponse(url="/docs")36 37 #swagger ui38@app.get("/docs")39async def get_swagger_ui_html():40 return get_swagger_ui_html(openapi_url="/openapi.json", title="API docs")41 42@app.post("/predict")43def get_data_from_user(data: PatientData):44 user_input = data.dict()45 46 input_df = pd.DataFrame([user_input])47 48 # Make predictions using the loaded pipeline49 prediction = pipeline.predict(input_df)50 probabilities = pipeline.predict_proba(input_df)51 52 53 probability_of_positive_class = probabilities[0][1]54 55 # Calculate the prediction56 sepsis_status = "Positive" if prediction[0] == 1 else "Negative"57 sepsis_explanation = "A positive prediction suggests that the patient might be exhibiting sepsis symptoms and requires immediate medical attention." if prediction[0] == 1 else "A negative prediction suggests that the patient is not currently exhibiting sepsis symptoms."58 59 result = {60 'predicted_sepsis': sepsis_status,61 'probability': probability_of_positive_class,62 'sepsis_explanation': sepsis_explanation63 }64 return result65 