# -*- 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]}