Gazconso / app.py
Docfile's picture
Update app.py
132bab2 verified
# -*- coding: utf-8 -*-
import pandas as pd
from pycaret.regression import load_model, predict_model
from fastapi import FastAPI
from fastapi.responses import RedirectResponse
from pydantic import BaseModel, Field
import uvicorn
app = FastAPI(
title="API de Prédiction de la Consommation de Gaz Naturel",
description="Cette API permet de prédire la consommation de gaz naturel basée sur plusieurs paramètres tels que l'état, le code de l'état, l'année, les prix de l'énergie, les degrés-jours de chauffage et le revenu.",
version="1.0.0",
docs_url="/docs"
)
model = load_model("best_pipeline")
class InputModel(BaseModel):
state: str = Field(..., example="TX", description="État (par exemple, 'TX' pour Texas)")
statecode: int = Field(..., example=44, description="Code de l'état (par exemple, 44)")
year: int = Field(..., example=1980, description="Année (par exemple, 1980)")
price: float = Field(..., example=3.4, description="Prix du gaz naturel")
eprice: float = Field(..., example=4.87, description="Prix ajusté de l'énergie")
oprice: float = Field(..., example=37.92, description="Prix de l'énergie autre que le gaz naturel")
lprice: float = Field(..., example=3.21, description="Prix du gaz naturel en dollars constants")
heating: int = Field(..., example=2145, description="Degrés-jours de chauffage")
income: float = Field(..., example=11393.46, description="Revenu moyen")
class OutputModel(BaseModel):
prediction: float = Field(..., example=224800, description="Prédiction de la consommation de gaz naturel")
@app.get("/", include_in_schema=False)
def root():
return RedirectResponse(url="/docs")
# Define predict function
@app.post("/predict", response_model=OutputModel, summary="Prédire la Consommation de Gaz Naturel", description="Prédit la consommation de gaz naturel basée sur les paramètres fournis.")
def predict(data: InputModel):
"""
Paramètres d'entrée :
- state : État (par exemple, 'GA' pour Gabon)
- statecode : Code de l'état (par exemple, 44)
- year : Année (par exemple, 1980)
- price : Prix du gaz naturel
- eprice : Prix ajusté de l'énergie
- oprice : Prix de l'énergie autre que le gaz naturel
- lprice : Prix du gaz naturel en dollars constants
- heating : Degrés-jours de chauffage
- income : Revenu moyen
Sortie :
- prediction : Prédiction de la consommation de gaz naturel
"""
data = pd.DataFrame([data.dict()])
predictions = predict_model(model, data=data)
return {"prediction": predictions["prediction_label"].iloc[0]}