avraux commited on
Commit
0f6bede
1 Parent(s): 56b2ff1

import project

Browse files
README.md CHANGED
@@ -1,12 +1,84 @@
1
- ---
2
- title: Co2pred
3
- emoji: 📚
4
- colorFrom: indigo
5
- colorTo: indigo
6
- sdk: gradio
7
- sdk_version: 5.8.0
8
- app_file: app.py
9
- pinned: false
10
- ---
11
-
12
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Mon Modèle Scikit-learn
2
+ Ce modèle a été entraîné avec scikit-learn pour prédire les émissions en CO2 d'une voiture.
3
+
4
+ L'entrainement du modèle a été fait avec Google Collab : https://colab.research.google.com/drive/1n1Vtx6873e06c0WYG9JKIJ_ZLTMkptcX#scrollTo=_eLI1udbyDT3
5
+
6
+ La documentation sur l'entraînement du modèle est la suivante : https://docs.google.com/spreadsheets/d/1oBshoNy2NJZQreOEbBfcWCCg2wo0PQDo/edit?gid=1220399676#gid=1220399676
7
+
8
+ # Input Data
9
+ Les données d'entrée du modèle sont les suivantes :
10
+ - puiss_admin_98
11
+ - conso_urb
12
+ - conso_exurb
13
+ - masse_ordma_max
14
+ - lib_mrq_BMW
15
+ - lib_mrq_MERCEDES
16
+ - lib_mrq_VOLKSWAGEN
17
+ - typ_boite_nb_rapp_A 5
18
+ - typ_boite_nb_rapp_A 6
19
+ - champ_v9_"715/2007*195/2013EURO5
20
+ - champ_v9_"715/2007*195/2013EURO6
21
+ - champ_v9_"715/2007*566/2011EURO5
22
+ - champ_v9_"715/2007*630/2012EURO5
23
+ - champ_v9_715/2007*195/2013EURO5
24
+ - Carrosserie_BREAK
25
+ - Carrosserie_COUPE
26
+ - Carrosserie_MINIBUS
27
+ - Carrosserie_TS TERRAINS/CHEMINS
28
+ - gamme_INFERIEURE
29
+ - gamme_LUXE
30
+ - gamme_MOY-INFERIEURE
31
+ - gamme_MOY-SUPER
32
+ - gamme_SUPERIEURE
33
+
34
+ Pour faciliter la réception d'information, on va demander des informations plus concises puis on va recréer l'ensemble de ses champs. On s'attends à un JSON de la forme :
35
+
36
+ {
37
+ "puiss_admin_98": 7,
38
+ "conso_urb": 5.6,
39
+ "conso_exurb": 4.3,
40
+ "masse_ordma_max": 1500,
41
+ "marque": "BMW",
42
+ "typ_boite": "A 5",
43
+ "champ_v9": "715/2007*195/2013EURO5",
44
+ "carrosserie": "COUPE",
45
+ "gamme": "LUXE"
46
+ }
47
+
48
+ puiss_admin_98 : Puissance administrative de la voiture (Entier)
49
+ conso_urb : Consommation d'essence en ville L/1OOkm (Entier à 1 décimale)
50
+ conso_exurb : Consommation d'essence en campagne L/1OOkm (Entier à 1 décimale)
51
+ masse_ordma_max : Masse du véhicule
52
+ marque : Marque du véhicule parmi
53
+ ["BMW", "MERCEDES", "VOLKSWAGEN"]
54
+ typ_boite : Type de boite de vitesse parmi
55
+ ["A 5", "A 6", "A 7", "A 8", "M 5", "M 6"]
56
+ champ_v9 : type de norme parmi
57
+ ["715/2007*195/2013EURO5", "715/2007*630/2012EURO5", "715/2007*692/2008EURO5"]
58
+ carrosserie : type de carrosserie parmi
59
+ ["BREAK", "COUPE", "MINIBUS", "TS TERRAINS/CHEMINS"]
60
+ gamme : gamme du véhicule parmi
61
+ ["INFERIEURE", "LUXE", "MOY-INFERIEURE", "MOY-SUPER", "SUPERIEURE"]
62
+
63
+ ## Exemple d'utilisation
64
+ ```python
65
+ import joblib
66
+ import numpy as np
67
+
68
+ # Charger le modèle
69
+ model = joblib.load("model.joblib")
70
+
71
+ # Effectuer une prédiction
72
+ input_data = {
73
+ "puiss_admin_98": 7,
74
+ "conso_urb": 5.6,
75
+ "conso_exurb": 4.3,
76
+ "masse_ordma_max": 1500,
77
+ "marque": "BMW",
78
+ "typ_boite": "A 5",
79
+ "champ_v9": "715/2007*195/2013EURO5"
80
+ "carrosserie": "COUPE",
81
+ "gamme": "LUXE"
82
+ }
83
+ prediction = model.predict([input_data])
84
+ print(f"Prédiction : {prediction}")
__pycache__/app.cpython-313.pyc ADDED
Binary file (1.17 kB). View file
 
__pycache__/inference.cpython-313.pyc ADDED
Binary file (2.85 kB). View file
 
app.py ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from fastapi import FastAPI
2
+ from pydantic import BaseModel
3
+ from inference import preprocess_and_predict
4
+
5
+ # Définir l'API
6
+ app = FastAPI()
7
+
8
+ # Définir un modèle d'entrée
9
+ class InputData(BaseModel):
10
+ puiss_admin_98: int
11
+ conso_urb: float
12
+ conso_exurb: float
13
+ masse_ordma_max: float
14
+ marque: str
15
+ typ_boite: str
16
+ champ_v9 : str
17
+ carrosserie: str
18
+ gamme: str
19
+
20
+ # Endpoint pour prédiction
21
+ @app.post("/predict")
22
+ def predict(data: InputData):
23
+ input_json = data.dict()
24
+ result = preprocess_and_predict(input_json)
25
+ return result
inference.py ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pandas as pd
2
+ import joblib
3
+
4
+ # Charger le modèle scikit-learn
5
+ model = joblib.load("model.joblib")
6
+
7
+ def preprocess_and_predict(input_json):
8
+ """
9
+ Fonction pour traiter les données JSON entrantes, calculer les champs dérivés,
10
+ et prédire à l'aide d'un modèle scikit-learn.
11
+
12
+ Args:
13
+ input_json (dict): Données simplifiées fournies par l'utilisateur. Exemple :
14
+ {
15
+ "puiss_admin_98": 7,
16
+ "conso_urb": 5.6,
17
+ "conso_exurb": 4.3,
18
+ "masse_ordma_max": 1500,
19
+ "marque": "BMW",
20
+ "typ_boite": "A 5",
21
+ "champ_v9": 715/2007*195/2013EURO5,
22
+ "carrosserie": "COUPE",
23
+ "gamme": "LUXE"
24
+ }
25
+
26
+ Returns:
27
+ dict: Prédiction du modèle.
28
+ """
29
+
30
+ # Mapper les catégories aux colonnes du modèle
31
+ marque_mapping = ["BMW", "MERCEDES", "VOLKSWAGEN"]
32
+ typ_boite_mapping = ["A 5", "A 6", "A 7", "A 8", "M 5", "M 6"]
33
+ carrosserie_mapping = ["BREAK", "COUPE", "MINIBUS", "TS TERRAINS/CHEMINS"]
34
+ gamme_mapping = ["INFERIEURE", "LUXE", "MOY-INFERIEURE", "MOY-SUPER", "SUPERIEURE"]
35
+ champ_v9_mapping = ["\"715/2007*195/2013EURO5", "\"715/2007*195/2013EURO6", "\"715/2007*566/2011EURO5", "\"715/2007*630/2012EURO5", "715/2007*195/2013EURO5", "715/2007*630/2012EURO5", "715/2007*692/2008EURO5"]
36
+
37
+ # Initialiser un dictionnaire pour construire les colonnes nécessaires
38
+ processed_data = {
39
+ "puiss_admin_98": input_json.get("puiss_admin_98", 0),
40
+ "conso_urb": input_json.get("conso_urb", 0.0),
41
+ "conso_exurb": input_json.get("conso_exurb", 0.0),
42
+ "masse_ordma_max": input_json.get("masse_ordma_max", 0.0)
43
+ }
44
+
45
+ # Variables indicatrices pour la marque
46
+ for marque in marque_mapping:
47
+ processed_data[f"lib_mrq_{marque}"] = 1 if input_json.get("marque") == marque else 0
48
+
49
+ # Variables indicatrices pour le type de boîte
50
+ for typ_boite in typ_boite_mapping:
51
+ processed_data[f"typ_boite_nb_rapp_{typ_boite}"] = 1 if input_json.get("typ_boite") == typ_boite else 0
52
+
53
+ # Variables indicatrices pour la norme champ
54
+ for champ_v9 in champ_v9_mapping:
55
+ processed_data[f"champ_v9_{champ_v9}"] = 1 if input_json.get("champ_v9") == champ_v9 else 0
56
+
57
+ # Variables indicatrices pour la carrosserie
58
+ for carrosserie in carrosserie_mapping:
59
+ processed_data[f"Carrosserie_{carrosserie}"] = 1 if input_json.get("carrosserie") == carrosserie else 0
60
+
61
+ # Variables indicatrices pour la gamme
62
+ for gamme in gamme_mapping:
63
+ processed_data[f"gamme_{gamme}"] = 1 if input_json.get("gamme") == gamme else 0
64
+
65
+ # Convertir en DataFrame pour correspondre au format attendu par le modèle
66
+ input_dataframe = pd.DataFrame([processed_data])
67
+
68
+ # Faire une prédiction
69
+ prediction = model.predict(input_dataframe)
70
+ return {"prediction": prediction.tolist()}
model.joblib ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:67758c44ac783c45468857aec2cc3fb1b58309d2aa0b2a5cf211f91053c4d73d
3
+ size 236318305
requirements.txt ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ fastapi
2
+ uvicorn
3
+ pandas
4
+ numpy
5
+ scikit-learn
6
+ joblib