|
|
|
|
|
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") |
|
|
|
|
|
@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]} |
|
|
|
|