cheikhmansour commited on
Commit
5aceb5d
·
verified ·
1 Parent(s): dbc76a3

Upload 9 files

Browse files
Car_dataset.csv ADDED
The diff for this file is too large to render. See raw diff
 
app.ipynb ADDED
@@ -0,0 +1 @@
 
 
1
+ {"cells":[{"cell_type":"code","execution_count":1,"id":"5a748a06-f7b7-4862-8e53-1ad85de04892","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"5a748a06-f7b7-4862-8e53-1ad85de04892","executionInfo":{"status":"ok","timestamp":1736724106593,"user_tz":0,"elapsed":14009,"user":{"displayName":"Cheikh mansour Sow","userId":"06761263153221193241"}},"outputId":"5cd35523-1f22-40c1-8386-ac3dcda753f4"},"outputs":[{"output_type":"stream","name":"stdout","text":["Collecting gradio\n"," Downloading gradio-5.12.0-py3-none-any.whl.metadata (16 kB)\n","Collecting aiofiles<24.0,>=22.0 (from gradio)\n"," Downloading aiofiles-23.2.1-py3-none-any.whl.metadata (9.7 kB)\n","Requirement already satisfied: anyio<5.0,>=3.0 in /usr/local/lib/python3.10/dist-packages (from gradio) (3.7.1)\n","Collecting fastapi<1.0,>=0.115.2 (from gradio)\n"," Downloading fastapi-0.115.6-py3-none-any.whl.metadata (27 kB)\n","Collecting ffmpy (from gradio)\n"," Downloading ffmpy-0.5.0-py3-none-any.whl.metadata (3.0 kB)\n","Collecting gradio-client==1.5.4 (from gradio)\n"," Downloading gradio_client-1.5.4-py3-none-any.whl.metadata (7.1 kB)\n","Requirement already satisfied: httpx>=0.24.1 in /usr/local/lib/python3.10/dist-packages (from gradio) (0.28.1)\n","Requirement already satisfied: huggingface-hub>=0.25.1 in /usr/local/lib/python3.10/dist-packages (from gradio) (0.27.1)\n","Requirement already satisfied: jinja2<4.0 in /usr/local/lib/python3.10/dist-packages (from gradio) (3.1.5)\n","Collecting markupsafe~=2.0 (from gradio)\n"," Downloading MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (3.0 kB)\n","Requirement already satisfied: numpy<3.0,>=1.0 in /usr/local/lib/python3.10/dist-packages (from gradio) (1.26.4)\n","Requirement already satisfied: orjson~=3.0 in /usr/local/lib/python3.10/dist-packages (from gradio) (3.10.13)\n","Requirement already satisfied: packaging in /usr/local/lib/python3.10/dist-packages (from gradio) (24.2)\n","Requirement already satisfied: pandas<3.0,>=1.0 in /usr/local/lib/python3.10/dist-packages (from gradio) (2.2.2)\n","Requirement already satisfied: pillow<12.0,>=8.0 in /usr/local/lib/python3.10/dist-packages (from gradio) (11.1.0)\n","Requirement already satisfied: pydantic>=2.0 in /usr/local/lib/python3.10/dist-packages (from gradio) (2.10.4)\n","Collecting pydub (from gradio)\n"," Downloading pydub-0.25.1-py2.py3-none-any.whl.metadata (1.4 kB)\n","Collecting python-multipart>=0.0.18 (from gradio)\n"," Downloading python_multipart-0.0.20-py3-none-any.whl.metadata (1.8 kB)\n","Requirement already satisfied: pyyaml<7.0,>=5.0 in /usr/local/lib/python3.10/dist-packages (from gradio) (6.0.2)\n","Collecting ruff>=0.2.2 (from gradio)\n"," Downloading ruff-0.9.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (25 kB)\n","Collecting safehttpx<0.2.0,>=0.1.6 (from gradio)\n"," Downloading safehttpx-0.1.6-py3-none-any.whl.metadata (4.2 kB)\n","Collecting semantic-version~=2.0 (from gradio)\n"," Downloading semantic_version-2.10.0-py2.py3-none-any.whl.metadata (9.7 kB)\n","Collecting starlette<1.0,>=0.40.0 (from gradio)\n"," Downloading starlette-0.45.2-py3-none-any.whl.metadata (6.3 kB)\n","Collecting tomlkit<0.14.0,>=0.12.0 (from gradio)\n"," Downloading tomlkit-0.13.2-py3-none-any.whl.metadata (2.7 kB)\n","Requirement already satisfied: typer<1.0,>=0.12 in /usr/local/lib/python3.10/dist-packages (from gradio) (0.15.1)\n","Requirement already satisfied: typing-extensions~=4.0 in /usr/local/lib/python3.10/dist-packages (from gradio) (4.12.2)\n","Collecting uvicorn>=0.14.0 (from gradio)\n"," Downloading uvicorn-0.34.0-py3-none-any.whl.metadata (6.5 kB)\n","Requirement already satisfied: fsspec in /usr/local/lib/python3.10/dist-packages (from gradio-client==1.5.4->gradio) (2024.10.0)\n","Requirement already satisfied: websockets<15.0,>=10.0 in /usr/local/lib/python3.10/dist-packages (from gradio-client==1.5.4->gradio) (14.1)\n","Requirement already satisfied: idna>=2.8 in /usr/local/lib/python3.10/dist-packages (from anyio<5.0,>=3.0->gradio) (3.10)\n","Requirement already satisfied: sniffio>=1.1 in /usr/local/lib/python3.10/dist-packages (from anyio<5.0,>=3.0->gradio) (1.3.1)\n","Requirement already satisfied: exceptiongroup in /usr/local/lib/python3.10/dist-packages (from anyio<5.0,>=3.0->gradio) (1.2.2)\n","Collecting starlette<1.0,>=0.40.0 (from gradio)\n"," Downloading starlette-0.41.3-py3-none-any.whl.metadata (6.0 kB)\n","Requirement already satisfied: certifi in /usr/local/lib/python3.10/dist-packages (from httpx>=0.24.1->gradio) (2024.12.14)\n","Requirement already satisfied: httpcore==1.* in /usr/local/lib/python3.10/dist-packages (from httpx>=0.24.1->gradio) (1.0.7)\n","Requirement already satisfied: h11<0.15,>=0.13 in /usr/local/lib/python3.10/dist-packages (from httpcore==1.*->httpx>=0.24.1->gradio) (0.14.0)\n","Requirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from huggingface-hub>=0.25.1->gradio) (3.16.1)\n","Requirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from huggingface-hub>=0.25.1->gradio) (2.32.3)\n","Requirement already satisfied: tqdm>=4.42.1 in /usr/local/lib/python3.10/dist-packages (from huggingface-hub>=0.25.1->gradio) (4.67.1)\n","Requirement already satisfied: python-dateutil>=2.8.2 in /usr/local/lib/python3.10/dist-packages (from pandas<3.0,>=1.0->gradio) (2.8.2)\n","Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.10/dist-packages (from pandas<3.0,>=1.0->gradio) (2024.2)\n","Requirement already satisfied: tzdata>=2022.7 in /usr/local/lib/python3.10/dist-packages (from pandas<3.0,>=1.0->gradio) (2024.2)\n","Requirement already satisfied: annotated-types>=0.6.0 in /usr/local/lib/python3.10/dist-packages (from pydantic>=2.0->gradio) (0.7.0)\n","Requirement already satisfied: pydantic-core==2.27.2 in /usr/local/lib/python3.10/dist-packages (from pydantic>=2.0->gradio) (2.27.2)\n","Requirement already satisfied: click>=8.0.0 in /usr/local/lib/python3.10/dist-packages (from typer<1.0,>=0.12->gradio) (8.1.8)\n","Requirement already satisfied: shellingham>=1.3.0 in /usr/local/lib/python3.10/dist-packages (from typer<1.0,>=0.12->gradio) (1.5.4)\n","Requirement already satisfied: rich>=10.11.0 in /usr/local/lib/python3.10/dist-packages (from typer<1.0,>=0.12->gradio) (13.9.4)\n","Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-dateutil>=2.8.2->pandas<3.0,>=1.0->gradio) (1.17.0)\n","Requirement already satisfied: markdown-it-py>=2.2.0 in /usr/local/lib/python3.10/dist-packages (from rich>=10.11.0->typer<1.0,>=0.12->gradio) (3.0.0)\n","Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /usr/local/lib/python3.10/dist-packages (from rich>=10.11.0->typer<1.0,>=0.12->gradio) (2.18.0)\n","Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests->huggingface-hub>=0.25.1->gradio) (3.4.1)\n","Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests->huggingface-hub>=0.25.1->gradio) (2.3.0)\n","Requirement already satisfied: mdurl~=0.1 in /usr/local/lib/python3.10/dist-packages (from markdown-it-py>=2.2.0->rich>=10.11.0->typer<1.0,>=0.12->gradio) (0.1.2)\n","Downloading gradio-5.12.0-py3-none-any.whl (57.6 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m57.6/57.6 MB\u001b[0m \u001b[31m10.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hDownloading gradio_client-1.5.4-py3-none-any.whl (321 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m321.4/321.4 kB\u001b[0m \u001b[31m22.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hDownloading aiofiles-23.2.1-py3-none-any.whl (15 kB)\n","Downloading fastapi-0.115.6-py3-none-any.whl (94 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m94.8/94.8 kB\u001b[0m \u001b[31m7.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hDownloading MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (25 kB)\n","Downloading python_multipart-0.0.20-py3-none-any.whl (24 kB)\n","Downloading ruff-0.9.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.3 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m11.3/11.3 MB\u001b[0m \u001b[31m57.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hDownloading safehttpx-0.1.6-py3-none-any.whl (8.7 kB)\n","Downloading semantic_version-2.10.0-py2.py3-none-any.whl (15 kB)\n","Downloading starlette-0.41.3-py3-none-any.whl (73 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m73.2/73.2 kB\u001b[0m \u001b[31m5.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hDownloading tomlkit-0.13.2-py3-none-any.whl (37 kB)\n","Downloading uvicorn-0.34.0-py3-none-any.whl (62 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m62.3/62.3 kB\u001b[0m \u001b[31m5.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hDownloading ffmpy-0.5.0-py3-none-any.whl (6.0 kB)\n","Downloading pydub-0.25.1-py2.py3-none-any.whl (32 kB)\n","Installing collected packages: pydub, uvicorn, tomlkit, semantic-version, ruff, python-multipart, markupsafe, ffmpy, aiofiles, starlette, safehttpx, gradio-client, fastapi, gradio\n"," Attempting uninstall: markupsafe\n"," Found existing installation: MarkupSafe 3.0.2\n"," Uninstalling MarkupSafe-3.0.2:\n"," Successfully uninstalled MarkupSafe-3.0.2\n","Successfully installed aiofiles-23.2.1 fastapi-0.115.6 ffmpy-0.5.0 gradio-5.12.0 gradio-client-1.5.4 markupsafe-2.1.5 pydub-0.25.1 python-multipart-0.0.20 ruff-0.9.1 safehttpx-0.1.6 semantic-version-2.10.0 starlette-0.41.3 tomlkit-0.13.2 uvicorn-0.34.0\n"]}],"source":["pip install gradio"]},{"cell_type":"code","source":["import gradio as gr\n","import pandas as pd\n","import joblib\n","\n","# Charger le modèle, le scaler et les encodeurs\n","model = joblib.load(\"/content/drive/MyDrive/ML 2/linear_regression_model.pkl\")\n","scaler = joblib.load(\"/content/drive/MyDrive/ML 2/scaler.pkl\")\n","encoders = joblib.load(\"/content/drive/MyDrive/ML 2/encoders.pkl\")\n","\n","def predict_single(Kms_Driven, Present_Price, Fuel_Type, Seller_Type, Transmission, Age):\n"," \"\"\"\n"," Fonction pour la prédiction d'un seul véhicule.\n"," \"\"\"\n"," try:\n"," # Préparer les données d'entrée\n"," input_data = pd.DataFrame({\n"," \"Kms_Driven\": [Kms_Driven],\n"," \"Present_Price\": [Present_Price],\n"," \"Fuel_Type\": [Fuel_Type],\n"," \"Seller_Type\": [Seller_Type],\n"," \"Transmission\": [Transmission],\n"," \"Age\": [Age],\n"," })\n","\n"," # Encoder les variables catégorielles\n"," for col, encoder in encoders.items():\n"," input_data[col] = encoder.transform(input_data[col])\n","\n"," # Normaliser les données\n"," input_scaled = scaler.transform(input_data)\n","\n"," # Faire la prédiction\n"," prediction = model.predict(input_scaled)[0]\n","\n"," return round(prediction, 2) # Retourne la prédiction arrondie\n","\n"," except Exception as e:\n"," return f\"Erreur : {e}\"\n","\n","\n","def predict_multiple(file):\n"," \"\"\"\n"," Fonction pour la prédiction de multiples véhicules à partir d'un fichier CSV.\n"," \"\"\"\n"," try:\n"," # Lire le fichier CSV\n"," data = pd.read_csv(file)\n","\n"," # Vérifier la structure du fichier\n"," required_columns = [\"Kms_Driven\", \"Present_Price\", \"Fuel_Type\", \"Seller_Type\", \"Transmission\", \"Age\"]\n"," for col in required_columns:\n"," if col not in data.columns:\n"," return f\"Le fichier doit contenir les colonnes suivantes : {required_columns}\"\n","\n"," # Encoder les colonnes catégoriques\n"," for col, encoder in encoders.items():\n"," data[col] = encoder.transform(data[col])\n","\n"," # Normaliser les données\n"," data_scaled = scaler.transform(data)\n","\n"," # Faire les prédictions\n"," predictions = model.predict(data_scaled)\n"," data[\"Predicted_Selling_Price\"] = predictions\n","\n"," return data\n","\n"," except Exception as e:\n"," return f\"Erreur : {e}\"\n","\n","\n","# Interface Gradio\n","with gr.Blocks() as app:\n"," gr.Markdown(\"# Application de Prédiction du Prix de Vente\")\n","\n"," gr.Markdown(\"## Instructions pour les colonnes catégoriques :\")\n"," gr.Markdown(\"\"\"\n"," - **Type de carburant (Fuel_Type)** :\n"," - Petrol = 0\n"," - Diesel = 1\n"," - CNG = 2\n"," - **Type de vendeur (Seller_Type)** :\n"," - Dealer = 0\n"," - Individual = 1\n"," - **Transmission** :\n"," - Manual = 0\n"," - Automatic = 1\n"," \"\"\")\n","\n"," # Section Prédiction Simple\n"," gr.Markdown(\"## Prédiction Simple\")\n"," with gr.Row():\n"," Kms_Driven = gr.Number(label=\"Kilomètres parcourus\")\n"," Present_Price = gr.Number(label=\"Prix actuel (en Lakhs)\")\n"," Fuel_Type = gr.Textbox(label=\"Type de carburant (Petrol, Diesel, CNG)\")\n"," Seller_Type = gr.Textbox(label=\"Type de vendeur (Dealer, Individual)\")\n"," Transmission = gr.Textbox(label=\"Transmission (Manual, Automatic)\")\n"," Age = gr.Number(label=\"Âge du véhicule (en années)\")\n"," predict_btn = gr.Button(\"Prédire\")\n"," output_simple = gr.Textbox(label=\"Prix de vente prédit\")\n","\n"," predict_btn.click(\n"," predict_single,\n"," inputs=[Kms_Driven, Present_Price, Fuel_Type, Seller_Type, Transmission, Age],\n"," outputs=output_simple,\n"," )\n","\n"," # Section Prédiction Multiple\n"," gr.Markdown(\"## Prédiction Multiple\")\n"," gr.Markdown(\"\"\"\n"," Chargez un fichier CSV contenant les colonnes suivantes :\n"," - Kms_Driven, Present_Price, Fuel_Type, Seller_Type, Transmission, Age\n"," \"\"\")\n","\n"," file_input = gr.File(label=\"Uploader un fichier CSV\")\n"," output_multiple = gr.Dataframe(label=\"Résultats avec Prédictions\")\n","\n"," file_input.change(\n"," predict_multiple,\n"," inputs=file_input,\n"," outputs=output_multiple,\n"," )\n","\n","app.launch()\n"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":648},"id":"eOa3lAIu4XxB","executionInfo":{"status":"ok","timestamp":1736724407945,"user_tz":0,"elapsed":7451,"user":{"displayName":"Cheikh mansour Sow","userId":"06761263153221193241"}},"outputId":"bce9dacd-043c-4e8d-e64b-2420cc6917cc"},"id":"eOa3lAIu4XxB","execution_count":4,"outputs":[{"output_type":"stream","name":"stdout","text":["Running Gradio in a Colab notebook requires sharing enabled. Automatically setting `share=True` (you can turn this off by setting `share=False` in `launch()` explicitly).\n","\n","Colab notebook detected. To show errors in colab notebook, set debug=True in launch()\n","* Running on public URL: https://45049290bb1b4bcbd2.gradio.live\n","\n","This share link expires in 72 hours. For free permanent hosting and GPU upgrades, run `gradio deploy` from the terminal in the working directory to deploy to Hugging Face Spaces (https://huggingface.co/spaces)\n"]},{"output_type":"display_data","data":{"text/plain":["<IPython.core.display.HTML object>"],"text/html":["<div><iframe src=\"https://45049290bb1b4bcbd2.gradio.live\" width=\"100%\" height=\"500\" allow=\"autoplay; camera; microphone; clipboard-read; clipboard-write;\" frameborder=\"0\" allowfullscreen></iframe></div>"]},"metadata":{}},{"output_type":"execute_result","data":{"text/plain":[]},"metadata":{},"execution_count":4}]},{"cell_type":"code","source":[],"metadata":{"id":"_PYNGDF10zUY"},"id":"_PYNGDF10zUY","execution_count":null,"outputs":[]},{"cell_type":"code","source":["from google.colab import drive\n","drive.mount('/content/drive')"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"kN8nlvdV03iG","executionInfo":{"status":"ok","timestamp":1736724197537,"user_tz":0,"elapsed":36893,"user":{"displayName":"Cheikh mansour Sow","userId":"06761263153221193241"}},"outputId":"a8ba8770-705b-489a-a236-5a34737183cf"},"id":"kN8nlvdV03iG","execution_count":3,"outputs":[{"output_type":"stream","name":"stdout","text":["Mounted at /content/drive\n"]}]},{"cell_type":"code","source":["import gradio as gr\n","import pandas as pd\n","import joblib\n","\n","# Charger le modèle, le scaler et les encodeurs\n","model = joblib.load(\"/content/drive/MyDrive/ML 2/linear_regression_model.pkl\")\n","scaler = joblib.load(\"/content/drive/MyDrive/ML 2/scaler.pkl\")\n","encoders = joblib.load(\"/content/drive/MyDrive/ML 2/encoders.pkl\")\n","\n","\n","def validate_inputs(Kms_Driven, Present_Price, Age):\n"," \"\"\"Valider les entrées numériques pour éviter des erreurs.\"\"\"\n"," errors = []\n"," if Kms_Driven < 0:\n"," errors.append(\"Les kilomètres parcourus (Kms_Driven) ne peuvent pas être négatifs.\")\n"," if Present_Price < 0:\n"," errors.append(\"Le prix actuel (Present_Price) ne peut pas être négatif.\")\n"," if Age < 0:\n"," errors.append(\"L'âge du véhicule (Age) ne peut pas être négatif.\")\n"," return errors\n","\n","\n","def predict_single(Kms_Driven, Present_Price, Fuel_Type, Seller_Type, Transmission, Age):\n"," try:\n"," # Valider les entrées\n"," errors = validate_inputs(Kms_Driven, Present_Price, Age)\n"," if errors:\n"," return \"\\n\".join(errors)\n","\n"," # Préparer les données d'entrée\n"," input_data = pd.DataFrame({\n"," \"Kms_Driven\": [Kms_Driven],\n"," \"Present_Price\": [Present_Price],\n"," \"Fuel_Type\": [Fuel_Type],\n"," \"Seller_Type\": [Seller_Type],\n"," \"Transmission\": [Transmission],\n"," \"Age\": [Age],\n"," })\n","\n"," # Encoder les variables catégoriques\n"," for col, encoder in encoders.items():\n"," input_data[col] = encoder.transform(input_data[col])\n","\n"," # Normaliser les données\n"," input_scaled = scaler.transform(input_data)\n","\n"," # Faire la prédiction\n"," prediction = model.predict(input_scaled)[0]\n"," return f\"Prix de vente prédit : {round(prediction, 2)} A\"\n"," except Exception as e:\n"," return f\"Erreur : {e}\"\n","\n","\n","def predict_multiple(file):\n"," try:\n"," # Lire le fichier CSV\n"," data = pd.read_csv(file)\n","\n"," # Vérifier la structure du fichier\n"," required_columns = [\"Kms_Driven\", \"Present_Price\", \"Fuel_Type\", \"Seller_Type\", \"Transmission\", \"Age\"]\n"," for col in required_columns:\n"," if col not in data.columns:\n"," return f\"Le fichier doit contenir les colonnes suivantes : {required_columns}\"\n","\n"," # Encoder les colonnes catégoriques\n"," for col, encoder in encoders.items():\n"," data[col] = encoder.transform(data[col])\n","\n"," # Normaliser les données\n"," data_scaled = scaler.transform(data)\n","\n"," # Faire les prédictions\n"," predictions = model.predict(data_scaled)\n"," data[\"Predict_Price\"] = predictions\n","\n"," return data\n"," except Exception as e:\n"," return f\"Erreur : {e}\"\n","\n","\n","# Interface Gradio\n","with gr.Blocks(theme=gr.themes.Monochrome()) as app:\n"," gr.Markdown(\n"," \"\"\"\n"," # 🏎️ Application de Prédiction du Prix de Vente\n"," ## Cheikh Mansour Sow\n","\n"," Prédisez le prix de vente de votre véhicule d'occasion rapidement et facilement !\n"," \"\"\"\n"," )\n","\n"," # Section Prédiction Simple\n"," with gr.Tab(\"Prédiction Simple\"):\n"," gr.Markdown(\"## Remplissez les informations de votre véhicule :\")\n"," with gr.Row():\n"," Kms_Driven = gr.Number(label=\"Kilomètres parcourus\")\n"," Present_Price = gr.Number(label=\"Prix actuel (en Lakhs)\")\n"," Fuel_Type = gr.Dropdown(\n"," label=\"Type de carburant\",\n"," choices=[\"Petrol\", \"Diesel\", \"CNG\"]\n"," )\n"," Seller_Type = gr.Dropdown(\n"," label=\"Type de vendeur\",\n"," choices=[\"Dealer\", \"Individual\"]\n"," )\n"," Transmission = gr.Dropdown(\n"," label=\"Transmission\",\n"," choices=[\"Manual\", \"Automatic\"]\n"," )\n"," Age = gr.Number(label=\"Âge du véhicule\")\n","\n"," predict_btn = gr.Button(\"Prédire\", variant=\"primary\")\n"," output_simple = gr.Textbox(label=\"Résultat\")\n","\n"," predict_btn.click(\n"," predict_single,\n"," inputs=[Kms_Driven, Present_Price, Fuel_Type, Seller_Type, Transmission, Age],\n"," outputs=output_simple,\n"," )\n","\n"," # Section Prédiction Multiple\n"," with gr.Tab(\"Prédiction Multiple\"):\n"," gr.Markdown(\"## Uploadez un fichier CSV avec les colonnes suivantes :\")\n"," gr.Markdown(\"- `Kms_Driven`, `Present_Price`, `Fuel_Type`, `Seller_Type`, `Transmission`, `Age`\")\n","\n"," file_input = gr.File(label=\"Uploader un fichier CSV\")\n"," output_multiple = gr.Dataframe(label=\"Résultats avec Prédictions\")\n","\n"," file_input.change(\n"," predict_multiple,\n"," inputs=file_input,\n"," outputs=output_multiple,\n"," )\n","\n","# Lancer l'application\n","app.launch()\n"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":648},"id":"BUTIH41-057A","executionInfo":{"status":"ok","timestamp":1736724997631,"user_tz":0,"elapsed":4193,"user":{"displayName":"Cheikh mansour Sow","userId":"06761263153221193241"}},"outputId":"57cb964d-a8c9-463f-8a6f-d5400e09461e"},"id":"BUTIH41-057A","execution_count":5,"outputs":[{"output_type":"stream","name":"stdout","text":["Running Gradio in a Colab notebook requires sharing enabled. Automatically setting `share=True` (you can turn this off by setting `share=False` in `launch()` explicitly).\n","\n","Colab notebook detected. To show errors in colab notebook, set debug=True in launch()\n","* Running on public URL: https://93dabdc570dcdbfabe.gradio.live\n","\n","This share link expires in 72 hours. For free permanent hosting and GPU upgrades, run `gradio deploy` from the terminal in the working directory to deploy to Hugging Face Spaces (https://huggingface.co/spaces)\n"]},{"output_type":"display_data","data":{"text/plain":["<IPython.core.display.HTML object>"],"text/html":["<div><iframe src=\"https://93dabdc570dcdbfabe.gradio.live\" width=\"100%\" height=\"500\" allow=\"autoplay; camera; microphone; clipboard-read; clipboard-write;\" frameborder=\"0\" allowfullscreen></iframe></div>"]},"metadata":{}},{"output_type":"execute_result","data":{"text/plain":[]},"metadata":{},"execution_count":5}]},{"cell_type":"code","source":["import gradio as gr\n","import pandas as pd\n","import joblib\n","\n","# Charger le modèle, le scaler et les encodeurs\n","model = joblib.load(\"/content/drive/MyDrive/ML 2/linear_regression_model.pkl\")\n","scaler = joblib.load(\"/content/drive/MyDrive/ML 2/scaler.pkl\")\n","encoders = joblib.load(\"/content/drive/MyDrive/ML 2/encoders.pkl\")\n","\n","\n","def validate_inputs(Kms_Driven, Present_Price, Age):\n"," \"\"\"Valider les entrées numériques pour éviter des erreurs.\"\"\"\n"," errors = []\n"," if Kms_Driven < 0:\n"," errors.append(\"⚠️ Les kilomètres parcourus (Kms_Driven) ne peuvent pas être négatifs.\")\n"," if Present_Price < 0:\n"," errors.append(\"⚠️ Le prix actuel (Present_Price) ne peut pas être négatif.\")\n"," if Age < 0:\n"," errors.append(\"⚠️ L'âge du véhicule (Age) ne peut pas être négatif.\")\n"," return errors\n","\n","\n","def predict_single(Kms_Driven, Present_Price, Fuel_Type, Seller_Type, Transmission, Age):\n"," try:\n"," # Valider les entrées\n"," errors = validate_inputs(Kms_Driven, Present_Price, Age)\n"," if errors:\n"," return \"\\n\".join(errors) # Affiche les erreurs si elles existent\n","\n"," # Préparer les données d'entrée\n"," input_data = pd.DataFrame({\n"," \"Kms_Driven\": [Kms_Driven],\n"," \"Present_Price\": [Present_Price],\n"," \"Fuel_Type\": [Fuel_Type],\n"," \"Seller_Type\": [Seller_Type],\n"," \"Transmission\": [Transmission],\n"," \"Age\": [Age],\n"," })\n","\n"," # Encoder les variables catégoriques\n"," for col, encoder in encoders.items():\n"," input_data[col] = encoder.transform(input_data[col])\n","\n"," # Normaliser les données\n"," input_scaled = scaler.transform(input_data)\n","\n"," # Faire la prédiction\n"," prediction = model.predict(input_scaled)[0]\n"," return f\"✅ Prix de vente prédit : {round(prediction, 2)} \"\n"," except Exception as e:\n"," return f\"Erreur : {e}\"\n","\n","\n","def predict_multiple(file):\n"," try:\n"," # Lire le fichier CSV\n"," data = pd.read_csv(file)\n","\n"," # Vérifier la structure du fichier\n"," required_columns = [\"Kms_Driven\", \"Present_Price\", \"Fuel_Type\", \"Seller_Type\", \"Transmission\", \"Age\"]\n"," for col in required_columns:\n"," if col not in data.columns:\n"," return f\"Le fichier doit contenir les colonnes suivantes : {required_columns}\"\n","\n"," # Encoder les colonnes catégoriques\n"," for col, encoder in encoders.items():\n"," data[col] = encoder.transform(data[col])\n","\n"," # Normaliser les données\n"," data_scaled = scaler.transform(data)\n","\n"," # Faire les prédictions\n"," predictions = model.predict(data_scaled)\n"," data[\"Predict_Price\"] = predictions\n","\n"," return data\n"," except Exception as e:\n"," return f\"Erreur : {e}\"\n","\n","\n","# Interface Gradio\n","with gr.Blocks(theme=gr.themes.Monochrome()) as app:\n"," gr.Markdown(\n"," \"\"\"\n"," # 🏎️ Application de Prédiction du Prix de Vente\n"," ## Cheikh Mansour Sow\n","\n"," Prédisez le prix de vente de votre véhicule d'occasion rapidement et facilement !\n"," \"\"\"\n"," )\n","\n"," # Section Prédiction Simple\n"," with gr.Tab(\"Prédiction Simple\"):\n"," gr.Markdown(\"## Remplissez les informations de votre véhicule :\")\n"," with gr.Row():\n"," Kms_Driven = gr.Number(label=\"Kilomètres parcourus\")\n"," Present_Price = gr.Number(label=\"Prix actuel \")\n"," Fuel_Type = gr.Dropdown(\n"," label=\"Type de carburant\",\n"," choices=[\"Petrol\", \"Diesel\", \"CNG\"]\n"," )\n"," Seller_Type = gr.Dropdown(\n"," label=\"Type de vendeur\",\n"," choices=[\"Dealer\", \"Individual\"]\n"," )\n"," Transmission = gr.Dropdown(\n"," label=\"Transmission\",\n"," choices=[\"Manual\", \"Automatic\"]\n"," )\n"," Age = gr.Number(label=\"Âge du véhicule\")\n","\n"," predict_btn = gr.Button(\"Prédire\", variant=\"primary\")\n"," output_simple = gr.Textbox(label=\"Résultat\")\n","\n"," predict_btn.click(\n"," predict_single,\n"," inputs=[Kms_Driven, Present_Price, Fuel_Type, Seller_Type, Transmission, Age],\n"," outputs=output_simple,\n"," )\n","\n"," # Section Prédiction Multiple\n"," with gr.Tab(\"Prédiction Multiple\"):\n"," gr.Markdown(\"## Uploadez un fichier CSV avec les colonnes suivantes :\")\n"," gr.Markdown(\"- `Kms_Driven` - `Present_Price` - `Fuel_Type` - `Seller_Type` - `Transmission` - `Age`\")\n","\n"," file_input = gr.File(label=\"Uploader un fichier CSV\")\n"," output_multiple = gr.Dataframe(label=\"Résultats avec Prédictions\")\n","\n"," file_input.change(\n"," predict_multiple,\n"," inputs=file_input,\n"," outputs=output_multiple,\n"," )\n","\n","# Lancer l'application\n","app.launch()\n"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":648},"id":"RdW7Yu8T4FOm","executionInfo":{"status":"ok","timestamp":1736725716419,"user_tz":0,"elapsed":2831,"user":{"displayName":"Cheikh mansour Sow","userId":"06761263153221193241"}},"outputId":"9a248741-9ec8-4270-8ac6-873d5098d29d"},"id":"RdW7Yu8T4FOm","execution_count":8,"outputs":[{"output_type":"stream","name":"stdout","text":["Running Gradio in a Colab notebook requires sharing enabled. Automatically setting `share=True` (you can turn this off by setting `share=False` in `launch()` explicitly).\n","\n","Colab notebook detected. To show errors in colab notebook, set debug=True in launch()\n","* Running on public URL: https://53e4a64c6e25377d50.gradio.live\n","\n","This share link expires in 72 hours. For free permanent hosting and GPU upgrades, run `gradio deploy` from the terminal in the working directory to deploy to Hugging Face Spaces (https://huggingface.co/spaces)\n"]},{"output_type":"display_data","data":{"text/plain":["<IPython.core.display.HTML object>"],"text/html":["<div><iframe src=\"https://53e4a64c6e25377d50.gradio.live\" width=\"100%\" height=\"500\" allow=\"autoplay; camera; microphone; clipboard-read; clipboard-write;\" frameborder=\"0\" allowfullscreen></iframe></div>"]},"metadata":{}},{"output_type":"execute_result","data":{"text/plain":[]},"metadata":{},"execution_count":8}]},{"cell_type":"code","source":[],"metadata":{"id":"R-Lppvwn6Fuk"},"id":"R-Lppvwn6Fuk","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3 (ipykernel)","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.11.5"},"colab":{"provenance":[]}},"nbformat":4,"nbformat_minor":5}
df_test.csv ADDED
The diff for this file is too large to render. See raw diff
 
encoders.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d10264a887b6c47be965e791492a669f7840a51d02ebfdf92438c4adb148405d
3
+ size 1166
encoders_lr.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d10264a887b6c47be965e791492a669f7840a51d02ebfdf92438c4adb148405d
3
+ size 1166
linear_regression_model.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b16d8175dbd67ebabed2217910098789e9efb836ff7d949ca4ca70fffb32d79e
3
+ size 648
scaler.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:3ee31af9402c5d0759890823b2c6b4268d1a0be1dbe79d5f9cc4967da14da53d
3
+ size 1159
scaler_lr.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:3ee31af9402c5d0759890823b2c6b4268d1a0be1dbe79d5f9cc4967da14da53d
3
+ size 1159
test.ipynb ADDED
@@ -0,0 +1 @@
 
 
1
+ {"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"provenance":[],"mount_file_id":"1OTe5fLFOcKMl35flt1IZryI-TYh_Xfp5","authorship_tag":"ABX9TyMtd1Z/o84vVHvQ++o/uWbV"},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"}},"cells":[{"cell_type":"code","source":["pip install gradio"],"metadata":{"id":"5nu3RwfcmEx4"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["from sklearn.linear_model import LinearRegression\n","from sklearn.model_selection import train_test_split\n","from sklearn.preprocessing import LabelEncoder, StandardScaler\n","import pandas as pd\n","import joblib\n","\n","# Charger les données d'entraînement\n","data = pd.read_csv(\"/content/drive/MyDrive/ML 2/Car_dataset.csv\") # Adaptez le chemin\n","\n","# Encoder les variables catégorielles\n","encoders = {\n"," \"Fuel_Type\": LabelEncoder(),\n"," \"Seller_Type\": LabelEncoder(),\n"," \"Transmission\": LabelEncoder()\n","}\n","\n","for col, encoder in encoders.items():\n"," data[col] = encoder.fit_transform(data[col])\n","\n","# Séparer les caractéristiques et la cible\n","X = data[[\"Kms_Driven\", \"Present_Price\", \"Fuel_Type\", \"Seller_Type\", \"Transmission\", \"Age\"]]\n","y = data[\"Selling_Price\"]\n","\n","# Normaliser les données\n","scaler = StandardScaler()\n","X_scaled = scaler.fit_transform(X)\n","\n","# Diviser les données en jeu d'entraînement et de test\n","X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)\n","\n","# Entraîner un modèle de régression linéaire\n","model = LinearRegression()\n","model.fit(X_train, y_train)\n","\n","# Sauvegarder le modèle, le scaler et les encodeurs\n","joblib.dump(model, \"/content/drive/MyDrive/ML 2/linear_regression_model.pkl\")\n","joblib.dump(scaler, \"/content/drive/MyDrive/ML 2/scaler_lr.pkl\")\n","joblib.dump(encoders, \"/content/drive/MyDrive/ML 2/encoders_lr.pkl\")\n","\n","print(\"Modèle et preprocessors sauvegardés avec succès !\")\n","\n","# Tester les prédictions avec des valeurs extrêmes\n","test_cases = [\n"," {\"Kms_Driven\": 1000, \"Present_Price\": 20, \"Fuel_Type\": \"Petrol\", \"Seller_Type\": \"Dealer\", \"Transmission\": \"Manual\", \"Age\": 1},\n"," {\"Kms_Driven\": 200000, \"Present_Price\": 1, \"Fuel_Type\": \"Diesel\", \"Seller_Type\": \"Individual\", \"Transmission\": \"Automatic\", \"Age\": 15},\n"," {\"Kms_Driven\": 50000, \"Present_Price\": 10, \"Fuel_Type\": \"CNG\", \"Seller_Type\": \"Dealer\", \"Transmission\": \"Manual\", \"Age\": 5},\n","]\n","\n","# Charger les encodeurs et le scaler pour transformer les données d'entrée\n","scaler = joblib.load(\"/content/drive/MyDrive/ML 2/scaler_lr.pkl\")\n","encoders = joblib.load(\"/content/drive/MyDrive/ML 2/encoders_lr.pkl\")\n","model = joblib.load(\"/content/drive/MyDrive/ML 2/linear_regression_model.pkl\")\n","\n","# Préparer les données de test\n","input_df = pd.DataFrame(test_cases)\n","\n","# Encoder les variables catégorielles\n","for col, encoder in encoders.items():\n"," input_df[col] = encoder.transform(input_df[col])\n","\n","# Normaliser les données\n","input_scaled = scaler.transform(input_df)\n","\n","# Faire des prédictions\n","predictions = model.predict(input_scaled)\n","input_df[\"Predicted_Selling_Price\"] = predictions\n","\n","print(\"\\nRésultats avec prédictions :\")\n","print(input_df)\n"],"metadata":{"id":"bTF694rSjL-S"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["import gradio as gr\n","import pandas as pd\n","import joblib\n","\n","# Charger le modèle, le scaler et les encodeurs\n","model = joblib.load(\"/content/drive/MyDrive/ML 2/linear_regression_model.pkl\")\n","scaler = joblib.load(\"/content/drive/MyDrive/ML 2/scaler.pkl\")\n","encoders = joblib.load(\"/content/drive/MyDrive/ML 2/encoders.pkl\")\n","\n","def predict_single(Kms_Driven, Present_Price, Fuel_Type, Seller_Type, Transmission, Age):\n"," \"\"\"\n"," Fonction pour la prédiction d'un seul véhicule.\n"," \"\"\"\n"," try:\n"," # Préparer les données d'entrée\n"," input_data = pd.DataFrame({\n"," \"Kms_Driven\": [Kms_Driven],\n"," \"Present_Price\": [Present_Price],\n"," \"Fuel_Type\": [Fuel_Type],\n"," \"Seller_Type\": [Seller_Type],\n"," \"Transmission\": [Transmission],\n"," \"Age\": [Age],\n"," })\n","\n"," # Encoder les variables catégorielles\n"," for col, encoder in encoders.items():\n"," input_data[col] = encoder.transform(input_data[col])\n","\n"," # Normaliser les données\n"," input_scaled = scaler.transform(input_data)\n","\n"," # Faire la prédiction\n"," prediction = model.predict(input_scaled)[0]\n","\n"," return round(prediction, 2) # Retourne la prédiction arrondie\n","\n"," except Exception as e:\n"," return f\"Erreur : {e}\"\n","\n","\n","def predict_multiple(file):\n"," \"\"\"\n"," Fonction pour la prédiction de multiples véhicules à partir d'un fichier CSV.\n"," \"\"\"\n"," try:\n"," # Lire le fichier CSV\n"," data = pd.read_csv(file)\n","\n"," # Vérifier la structure du fichier\n"," required_columns = [\"Kms_Driven\", \"Present_Price\", \"Fuel_Type\", \"Seller_Type\", \"Transmission\", \"Age\"]\n"," for col in required_columns:\n"," if col not in data.columns:\n"," return f\"Le fichier doit contenir les colonnes suivantes : {required_columns}\"\n","\n"," # Encoder les colonnes catégoriques\n"," for col, encoder in encoders.items():\n"," data[col] = encoder.transform(data[col])\n","\n"," # Normaliser les données\n"," data_scaled = scaler.transform(data)\n","\n"," # Faire les prédictions\n"," predictions = model.predict(data_scaled)\n"," data[\"Predicted_Selling_Price\"] = predictions\n","\n"," return data\n","\n"," except Exception as e:\n"," return f\"Erreur : {e}\"\n","\n","\n","# Interface Gradio\n","with gr.Blocks() as app:\n"," gr.Markdown(\"# Application de Prédiction du Prix de Vente\")\n","\n"," gr.Markdown(\"## Instructions pour les colonnes catégoriques :\")\n"," gr.Markdown(\"\"\"\n"," - **Type de carburant (Fuel_Type)** :\n"," - Petrol = 0\n"," - Diesel = 1\n"," - CNG = 2\n"," - **Type de vendeur (Seller_Type)** :\n"," - Dealer = 0\n"," - Individual = 1\n"," - **Transmission** :\n"," - Manual = 0\n"," - Automatic = 1\n"," \"\"\")\n","\n"," # Section Prédiction Simple\n"," gr.Markdown(\"## Prédiction Simple\")\n"," with gr.Row():\n"," Kms_Driven = gr.Number(label=\"Kilomètres parcourus\")\n"," Present_Price = gr.Number(label=\"Prix actuel (en Lakhs)\")\n"," Fuel_Type = gr.Textbox(label=\"Type de carburant (Petrol, Diesel, CNG)\")\n"," Seller_Type = gr.Textbox(label=\"Type de vendeur (Dealer, Individual)\")\n"," Transmission = gr.Textbox(label=\"Transmission (Manual, Automatic)\")\n"," Age = gr.Number(label=\"Âge du véhicule (en années)\")\n"," predict_btn = gr.Button(\"Prédire\")\n"," output_simple = gr.Textbox(label=\"Prix de vente prédit\")\n","\n"," predict_btn.click(\n"," predict_single,\n"," inputs=[Kms_Driven, Present_Price, Fuel_Type, Seller_Type, Transmission, Age],\n"," outputs=output_simple,\n"," )\n","\n"," # Section Prédiction Multiple\n"," gr.Markdown(\"## Prédiction Multiple\")\n"," gr.Markdown(\"\"\"\n"," Chargez un fichier CSV contenant les colonnes suivantes :\n"," - Kms_Driven, Present_Price, Fuel_Type, Seller_Type, Transmission, Age\n"," \"\"\")\n","\n"," file_input = gr.File(label=\"Uploader un fichier CSV\")\n"," output_multiple = gr.Dataframe(label=\"Résultats avec Prédictions\")\n","\n"," file_input.change(\n"," predict_multiple,\n"," inputs=file_input,\n"," outputs=output_multiple,\n"," )\n","\n","app.launch()\n"],"metadata":{"id":"ip7H-tSczcDr"},"execution_count":null,"outputs":[]}]}