diff --git a/notebooks/notebook-connexion-mlflow.ipynb b/notebooks/notebook-connexion-mlflow.ipynb
index ad64a96..479ba6a 100644
--- a/notebooks/notebook-connexion-mlflow.ipynb
+++ b/notebooks/notebook-connexion-mlflow.ipynb
@@ -1 +1 @@
-{"cells":[{"cell_type":"markdown","metadata":{"id":"fm2J3uruLfrX"},"source":["# Connexion au serveur MLFlow - Test et Configuration Locale\n","\n","Ce notebook permet de **tester la connexion à un serveur MLFlow déployé localement via Docker sur un NAS/Serveur personnel**. Il est conçu pour vérifier que toutes les configurations sont correctes et que nous pouvons commencer à suivre nos expériences de machine learning\n",".\n","## Prérequis\n","\n","Avant d'exécuter ce notebook, assurez-vous d'avoir :\n","- Un serveur MLFlow déployé localement via Docker sur votre NAS. Il sera important d'installer dans le conteneur la librairie boto3 pour que MLFlow puisse échanger avec un serveur de type AWS pour le stockage des artefacts.\n","- Un serveur MinIO (compatible S3) déployé localement via Docker pour le stockage des artefacts et qui remplacera les Amazon Web Services (AWS).\n","- Les informations de connexion nécessaires (URI de tracking, identifiants MinIO).\n","- Les ports 5000 (MLFlow) et 9000 (MinIO API) correctement exposés et/ou gérés par un reverse proxy (SWAG).\n","\n","## Configuration des variables d'environnement dans Jupyter Notebook / Google Collab\n","\n","Pour une connexion réussie, vous devez définir les variables d'environnement dans un fichier `.env` qui sera chargé via la librairie dotenv dans le répertoire courant. Ces variables seront utilisées par la bibliothèque MLflow pour communiquer avec vos services.\n","\n","Voici les variables essentielles à configurer (urls locaux en guise d'exemple) :\n","\n","```\n","MLFLOW_TRACKING_URI=http://mlflow:5000\n","MLFLOW_S3_ENDPOINT_URL=http://minio:9000\n","AWS_ACCESS_KEY_ID=minioadmin\n","AWS_SECRET_ACCESS_KEY=minioadminpassword\n","```\n","\n","Remplacez les valeurs par vos propres informations de connexion.\n","\n","Note : minio possède deux ports :\n","- 9001 pour accéder à l'interface web et gérer le stockage / nettoyage d'artefacts\n","- 9000 qui est l'api qui sera requêté pour l'envoi de buckets S3 par la librairie mlflow\n","\n","## Étapes du test\n","\n","Ce notebook effectue les opérations suivantes :\n","1. Chargement des variables d'environnement depuis le fichier `.env`\n","2. Configuration de MLFlow avec ces variables\n","3. Tentative de connexion au serveur MLFlow\n","4. Récupération de la liste des expériences existantes\n","5. Création d'une expérience si elle n'existe pas déjà\n","6. Enregistrement de métriques test pour vérifier le bon fonctionnement\n","\n","## Résolution des problèmes courants\n","\n","Notez que si vous utilisez des notebooks Google Collab, il est **nécessaire** que votre serveur MLFlow ainsi que l'API de MinIO soient accessibles via un lien public. Vous pouvez simplement ouvrir les ports de votre modem ou, pour plus de sécurité, configurer un reverse proxy (type SWAG pour la gestion et délivrance automatique de certificats SSL). Cette étape ne sera pas développée ici.\n","\n","Notez également que si vous désactivez votre docker MLFlow et le réactivez (par exemple suite à un redémarrage), les expériences seront par défaut perdues. Pour qu'elles soient persistantes, il faudra rajouter dans le yaml du docker l'argument de commande ainsi que le volume suivants :\n","- ` - --backend-store-uri ` \\\n"," ` - sqlite:////mlflow/mlflow.db # <-- pointe vers le volume monté `\n","- ` - ./mlflow-data:/mlflow # Monte un volume local pour préserver mlflow.db`\n","\n","Si vous rencontrez des erreurs lors de la connexion, vérifiez :\n","- Que l'URI de tracking est correct et accessible\n","- Que vos identifiants AWS sont valides (si applicable)\n","- Que le serveur MLFlow est bien en cours d'exécution\n","- Vos paramètres réseau (pare-feu, VPN, etc.)"]},{"cell_type":"code","source":["!pip install mlflow boto3 dotenv --quiet"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"wPht9-36CMzs","executionInfo":{"status":"ok","timestamp":1751542010740,"user_tz":-120,"elapsed":41337,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"935698fd-27a9-49db-d3e4-f147de546faa"},"execution_count":1,"outputs":[{"output_type":"stream","name":"stdout","text":["\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m24.7/24.7 MB\u001b[0m \u001b[31m39.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.9/1.9 MB\u001b[0m \u001b[31m44.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m139.9/139.9 kB\u001b[0m \u001b[31m7.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m242.7/242.7 kB\u001b[0m \u001b[31m8.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m13.8/13.8 MB\u001b[0m \u001b[31m42.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m147.8/147.8 kB\u001b[0m \u001b[31m6.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m114.9/114.9 kB\u001b[0m \u001b[31m6.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m85.0/85.0 kB\u001b[0m \u001b[31m5.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m85.2/85.2 kB\u001b[0m \u001b[31m5.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m733.8/733.8 kB\u001b[0m \u001b[31m26.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m203.4/203.4 kB\u001b[0m \u001b[31m6.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m65.8/65.8 kB\u001b[0m \u001b[31m3.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m118.5/118.5 kB\u001b[0m \u001b[31m2.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m196.2/196.2 kB\u001b[0m \u001b[31m10.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25h"]}]},{"cell_type":"code","source":["from google.colab import drive\n","drive.mount('/content/drive')\n","import os\n","drive_folder= \"/content/drive/MyDrive/Colab_Notebooks/Project_7/notebooks\"\n","os.chdir(drive_folder)\n","# os.listdir()"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"XkhsbZ5Xc3De","executionInfo":{"status":"ok","timestamp":1751542100896,"user_tz":-120,"elapsed":90100,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"e23991d5-db2e-46ae-f517-6646c5de02f0"},"execution_count":5,"outputs":[{"output_type":"stream","name":"stdout","text":["Mounted at /content/drive\n"]}]},{"cell_type":"code","execution_count":6,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"4DKFKUC8LfrY","executionInfo":{"status":"ok","timestamp":1751542110660,"user_tz":-120,"elapsed":9750,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"a69aee9b-155c-4ec2-fc4b-e2688e3721f1"},"outputs":[{"output_type":"stream","name":"stdout","text":["MLflow Tracking URI: https://mlflow.greg-madman-nas.duckdns.org/\n","Identifiants AWS configurés\n","Tentative de connexion à MLflow...\n","Connexion à MLflow réussie! Nombre d'expériences existantes: 3\n"," - Demo PC (ID: 2)\n"," - OC Projet 7 (ID: 1)\n"," - Default (ID: 0)\n","Expérience existante trouvée: 'Demo PC' (ID: 2)\n","Démarrage d'un run MLflow de test...\n","Métrique de test enregistrée avec succès!\n","🏃 View run test_connexion_simple at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/2/runs/4191b30977fd4d618f6409044817034e\n","🧪 View experiment at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/2\n","Test terminé avec succès. Vous pouvez vérifier les résultats sur: https://mlflow.greg-madman-nas.duckdns.org/\n"]}],"source":["import os\n","import mlflow\n","from dotenv import load_dotenv\n","\n","# Charger les variables d'environnement depuis le fichier .env\n","load_dotenv()\n","\n","# Configuration de MLflow avec les variables d'environnement\n","mlflow_tracking_uri = os.getenv(\"MLFLOW_TRACKING_URI\")\n","mlflow_s3_endpoint_url = os.getenv(\"MLFLOW_S3_ENDPOINT_URL\")\n","aws_access_key_id = os.getenv(\"AWS_ACCESS_KEY_ID\")\n","aws_secret_access_key = os.getenv(\"AWS_SECRET_ACCESS_KEY\")\n","\n","print(f\"MLflow Tracking URI: {mlflow_tracking_uri}\")\n","\n","# Configuration explicite des identifiants AWS pour MLflow\n","os.environ[\"MLFLOW_S3_ENDPOINT_URL\"] = mlflow_s3_endpoint_url\n","os.environ[\"AWS_ACCESS_KEY_ID\"] = aws_access_key_id\n","os.environ[\"AWS_SECRET_ACCESS_KEY\"] = aws_secret_access_key\n","print(\"Identifiants AWS configurés\")\n","\n","# Configuration de MLflow\n","try:\n"," print(\"Tentative de connexion à MLflow...\")\n"," mlflow.set_tracking_uri(mlflow_tracking_uri)\n","\n"," # Liste des expériences pour vérifier la connexion\n"," exps = mlflow.search_experiments()\n"," print(f\"Connexion à MLflow réussie! Nombre d'expériences existantes: {len(exps)}\")\n"," for exp in exps:\n"," print(f\" - {exp.name} (ID: {exp.experiment_id})\")\n","\n"," # Définir le nom de l'expérience\n"," experiment_name = \"Demo PC\"\n","\n"," # Obtenir ou créer l'expérience\n"," experiment = mlflow.get_experiment_by_name(experiment_name)\n"," if experiment is None:\n"," experiment_id = mlflow.create_experiment(experiment_name)\n"," print(f\"Nouvelle expérience créée: '{experiment_name}' (ID: {experiment_id})\")\n"," else:\n"," experiment_id = experiment.experiment_id\n"," print(f\"Expérience existante trouvée: '{experiment_name}' (ID: {experiment_id})\")\n","\n"," # Démarrer un simple run et enregistrer une métrique\n"," with mlflow.start_run(experiment_id=experiment_id, run_name=\"test_connexion_simple\"):\n"," print(\"Démarrage d'un run MLflow de test...\")\n"," mlflow.log_param(\"test_param\", \"valeur_test\")\n"," mlflow.log_metric(\"test_metric\", 1.0)\n"," print(\"Métrique de test enregistrée avec succès!\")\n","\n"," print(f\"Test terminé avec succès. Vous pouvez vérifier les résultats sur: {mlflow_tracking_uri}\")\n","\n","except Exception as e:\n"," print(f\"Erreur lors de la connexion à MLflow: {e}\")\n"," print(\"\\nConseils de débogage:\")\n"," print(\"1. Vérifiez que l'URI de tracking est correct et accessible\")\n"," print(\"2. Vérifiez que vos identifiants AWS sont valides si vous utilisez S3\")\n"," print(\"3. Vérifiez que le serveur MLflow est en cours d'exécution\")\n"," print(\"4. Vérifiez les paramètres réseau (pare-feu, VPN, etc.)\")"]},{"cell_type":"code","execution_count":7,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"nPI-3ULPLfrZ","executionInfo":{"status":"ok","timestamp":1751542115791,"user_tz":-120,"elapsed":5130,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"78751c89-62c2-443d-c73a-cff3ccbb2427"},"outputs":[{"output_type":"stream","name":"stdout","text":["MLflow Tracking URI: https://mlflow.greg-madman-nas.duckdns.org/\n","Identifiants AWS configurés\n","Output directory created: ./content/mlflow_test/\n"]}],"source":["import os\n","import mlflow\n","from mlflow.models import infer_signature\n","from mlflow import MlflowClient\n","from dotenv import load_dotenv\n","\n","import pandas as pd\n","import numpy as np\n","from sklearn import datasets\n","from sklearn.model_selection import train_test_split\n","from sklearn.linear_model import LogisticRegression\n","from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, confusion_matrix\n","import matplotlib.pyplot as plt\n","import seaborn as sns\n","\n","# Charger les variables d'environnement depuis le fichier .env\n","load_dotenv()\n","\n","# Configuration de MLflow avec les variables d'environnement\n","mlflow_tracking_uri = os.getenv(\"MLFLOW_TRACKING_URI\")\n","mlflow_s3_endpoint_url = os.getenv(\"MLFLOW_S3_ENDPOINT_URL\")\n","aws_access_key_id = os.getenv(\"AWS_ACCESS_KEY_ID\")\n","aws_secret_access_key = os.getenv(\"AWS_SECRET_ACCESS_KEY\")\n","\n","# Configuration explicite de MLflow\n","mlflow.set_tracking_uri(mlflow_tracking_uri)\n","print(f\"MLflow Tracking URI: {mlflow_tracking_uri}\")\n","\n","# Configuration explicite des identifiants AWS\n","os.environ[\"MLFLOW_S3_ENDPOINT_URL\"] = mlflow_s3_endpoint_url\n","os.environ[\"AWS_ACCESS_KEY_ID\"] = aws_access_key_id\n","os.environ[\"AWS_SECRET_ACCESS_KEY\"] = aws_secret_access_key\n","print(\"Identifiants AWS configurés\")\n","\n","# Create a new MLflow Experiment\n","mlflow.set_experiment(\"Demo PC\")\n","\n","# Define the output directory\n","output_dir = \"./content/mlflow_test/\"\n","\n","# Create the output directory if it doesn't exist\n","if not os.path.exists(output_dir):\n"," os.makedirs(output_dir)\n"," print(f\"Output directory created: {output_dir}\")"]},{"cell_type":"code","execution_count":8,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"OC0vEu6HLfra","executionInfo":{"status":"ok","timestamp":1751542137286,"user_tz":-120,"elapsed":21496,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"0d75b3fc-1786-47a9-e871-2e31381d9691"},"outputs":[{"output_type":"stream","name":"stdout","text":["Chargement du dataset Iris...\n","Aperçu du dataset:\n"," sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) \\\n","0 5.1 3.5 1.4 0.2 \n","1 4.9 3.0 1.4 0.2 \n","2 4.7 3.2 1.3 0.2 \n","3 4.6 3.1 1.5 0.2 \n","4 5.0 3.6 1.4 0.2 \n","\n"," target \n","0 0.0 \n","1 0.0 \n","2 0.0 \n","3 0.0 \n","4 0.0 \n","Dimensions du dataset: (150, 5)\n","Taille de l'ensemble d'entraînement: (120, 4)\n","Taille de l'ensemble de test: (30, 4)\n","Démarrage du run MLflow avec l'ID: cc590cff72a8406caa6cdb70810071ae\n","Entraînement du modèle de régression logistique...\n","Métriques: Accuracy=1.0000, Precision=1.0000, Recall=1.0000, F1=1.0000\n"]},{"output_type":"stream","name":"stderr","text":["2025/07/03 11:28:45 WARNING mlflow.models.model: `artifact_path` is deprecated. Please use `name` instead.\n"]},{"output_type":"stream","name":"stdout","text":["Modèle enregistré: models:/m-32c677ad4e6c4b6fa24cfa41d5723d03\n","🏃 View run iris_classification at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/2/runs/cc590cff72a8406caa6cdb70810071ae\n","🧪 View experiment at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/2\n","\n","🏃 MLflow Run Infos :\n","⚗️ run_id: cc590cff72a8406caa6cdb70810071ae\n","⚡ artifacts: ['model/MLmodel', 'model/conda.yaml', 'model/input_example.json', 'model/model.pkl', 'model/python_env.yaml', 'model/requirements.txt', 'model/serving_input_example.json']\n","⚙️ params: {'solver': 'lbfgs', 'max_iter': '1000', 'random_state': '8888'}\n","📝 metrics: {'accuracy': 1.0, 'precision': 1.0, 'recall': 1.0, 'f1_score': 1.0}\n","🏷️ tags: {'model_type': 'LogisticRegression', 'dataset': 'Iris', 'description': 'Classification multiclasse des fleurs Iris'}\n","\n"]}],"source":["# Fonction pour afficher les informations du run MLflow\n","def print_logged_info(r):\n"," print(\"\")\n"," print(\"🏃 MLflow Run Infos :\")\n"," tags = {k: v for k, v in r.data.tags.items() if not k.startswith(\"mlflow.\")}\n"," artifacts = [f.path for f in MlflowClient().list_artifacts(r.info.run_id, \"model\")]\n"," print(f\"⚗️ run_id: {r.info.run_id}\")\n"," print(f\"⚡ artifacts: {artifacts}\")\n"," print(f\"⚙️ params: {r.data.params}\")\n"," print(f\"📝 metrics: {r.data.metrics}\")\n"," print(f\"🏷️ tags: {tags}\")\n"," print()\n","\n","# Chargement du dataset Iris\n","print(\"Chargement du dataset Iris...\")\n","iris = datasets.load_iris()\n","X, y = iris.data, iris.target\n","\n","# Conversion en DataFrame pour une meilleure visualisation\n","iris_df = pd.DataFrame(data=np.c_[iris['data'], iris['target']],\n"," columns=iris['feature_names'] + ['target'])\n","print(f\"Aperçu du dataset:\\n{iris_df.head()}\")\n","print(f\"Dimensions du dataset: {iris_df.shape}\")\n","\n","# Créer une figure pour visualiser la distribution des classes\n","plt.figure(figsize=(8, 6))\n","sns.countplot(x='target', data=iris_df)\n","plt.title('Distribution des classes du dataset Iris')\n","# Save the figure in the output directory\n","plt.savefig(os.path.join(output_dir, 'iris_class_distribution.png'))\n","plt.close()\n","\n","# Division en ensembles d'entraînement et de test\n","X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n","print(f\"Taille de l'ensemble d'entraînement: {X_train.shape}\")\n","print(f\"Taille de l'ensemble de test: {X_test.shape}\")\n","\n","# Définition des hyperparamètres du modèle\n","params = {\n"," \"solver\": \"lbfgs\",\n"," \"max_iter\": 1000,\n"," \"random_state\": 8888,\n","}\n","\n","# Démarrer un run MLflow\n","with mlflow.start_run(run_name=\"iris_classification\") as run:\n"," print(f\"Démarrage du run MLflow avec l'ID: {run.info.run_id}\")\n","\n"," # Enregistrer les hyperparamètres\n"," mlflow.log_params(params)\n","\n"," # Entraîner le modèle\n"," print(\"Entraînement du modèle de régression logistique...\")\n"," lr = LogisticRegression(**params)\n"," lr.fit(X_train, y_train)\n","\n"," # Prédire sur l'ensemble de test\n"," y_pred = lr.predict(X_test)\n","\n"," # Calculer les métriques\n"," accuracy = accuracy_score(y_test, y_pred)\n"," precision = precision_score(y_test, y_pred, average='weighted')\n"," recall = recall_score(y_test, y_pred, average='weighted')\n"," f1 = f1_score(y_test, y_pred, average='weighted')\n","\n"," # Enregistrer les métriques\n"," mlflow.log_metric(\"accuracy\", accuracy)\n"," mlflow.log_metric(\"precision\", precision)\n"," mlflow.log_metric(\"recall\", recall)\n"," mlflow.log_metric(\"f1_score\", f1)\n","\n"," print(f\"Métriques: Accuracy={accuracy:.4f}, Precision={precision:.4f}, Recall={recall:.4f}, F1={f1:.4f}\")\n","\n"," # Générer une matrice de confusion\n"," cm = confusion_matrix(y_test, y_pred)\n"," plt.figure(figsize=(8, 6))\n"," sns.heatmap(cm, annot=True, fmt='d', cmap='Blues',\n"," xticklabels=iris.target_names,\n"," yticklabels=iris.target_names)\n"," plt.title('Matrice de confusion')\n"," plt.xlabel('Prédiction')\n"," plt.ylabel('Réalité')\n"," plt.tight_layout()\n"," # Save the figure in the output directory\n"," plt.savefig(os.path.join(output_dir, 'confusion_matrix.png'))\n"," plt.close()\n","\n"," # Enregistrer la matrice de confusion comme artifact\n"," mlflow.log_artifact(os.path.join(output_dir, \"confusion_matrix.png\"))\n"," mlflow.log_artifact(os.path.join(output_dir, \"iris_class_distribution.png\"))\n","\n"," # Définir des tags pour ce run\n"," mlflow.set_tag(\"model_type\", \"LogisticRegression\")\n"," mlflow.set_tag(\"dataset\", \"Iris\")\n"," mlflow.set_tag(\"description\", \"Classification multiclasse des fleurs Iris\")\n","\n"," # Inférer la signature du modèle\n"," signature = infer_signature(X_train, lr.predict(X_train))\n","\n"," # Enregistrer le modèle avec sa signature\n"," model_info = mlflow.sklearn.log_model(\n"," sk_model=lr,\n"," artifact_path=\"model\", # This is the path within the MLflow run artifact storage\n"," signature=signature,\n"," input_example=X_train[:5]\n"," )\n","\n"," print(f\"Modèle enregistré: {model_info.model_uri}\")\n","\n","# Récupérer et afficher les informations du run terminé\n","run_info = mlflow.get_run(run_id=run.info.run_id)\n","print_logged_info(run_info)"]},{"cell_type":"code","execution_count":9,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":116,"referenced_widgets":["eddf895fb0a74bd7a4c9925db6b725f0","71ce2c5075b541d3b8852565cafde9a8","55ba641d2db142258928f9b5a492da51","5de512b8ab7a43dc8adc0f1e65eb191d","c0558b1492a64704a0afe4cf0df4b8a6","e011abd56d3f49a8b0070d59ed725ea6","9d24a3f85a724ff9886aa7329ee80bca","7826ae3e1a834a64b66a111a3468120d","bfd92edcee3b4c8ead45581ef43f5ba2","49e8dcdb37614faab8e688eb352f6814","bca0022d06c54493ad073df725ba0084","d06773291bd24b908ba790c486079768","8daacd31a0124102b87b03257bcae524","3a7e63bb88b94c5dbca6e56a3ea07086","c3c7664225e645239053cd5ff99eb75c","1348333c1f2b40508c4fa5814856c6b6","eb6ba09068ab4c4e8ff1e1fd982167d4","d8d6fa0812f3400c84bd1b8ac4698405","29462d1746ba415ca6266fcc09ae0927","d46451c444da4a0dbb8310d28c0e9cf4","8dc6e4646bca4c29ba72689c70a74597","533a671937cb43afb74a942a5e93e368"]},"id":"bvmWVVraLfra","executionInfo":{"status":"ok","timestamp":1751542152007,"user_tz":-120,"elapsed":14719,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"9476e005-dcbc-4e5d-dd53-789432da2eda"},"outputs":[{"name":"stdout","output_type":"stream","text":["Please enter your 🏃 RUN ID : cc590cff72a8406caa6cdb70810071ae\n"]},{"output_type":"display_data","data":{"text/plain":["Downloading artifacts: 0%| | 0/1 [00:00, ?it/s]"],"application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"eddf895fb0a74bd7a4c9925db6b725f0"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":["Downloading artifacts: 0%| | 0/7 [00:00, ?it/s]"],"application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"d06773291bd24b908ba790c486079768"}},"metadata":{}},{"output_type":"stream","name":"stdout","text":["🚀 Model : LogisticRegression(max_iter=1000, random_state=8888)\n"]}],"source":["# %%\n","# Prompts user with the Run ID from MLflow run\n","# You can find run ID in the Tracking UI\n","while True:\n"," run_id = input('Please enter your 🏃 RUN ID : ')\n"," if run_id.strip() != '':\n"," break\n","\n","artifact_path = \"model\"\n","\n","# Download artifact via the tracking server\n","mlflow_artifact_uri = f\"runs:/{run_id}/{artifact_path}\"\n","\n","try:\n"," # Specify the local directory to download artifacts to\n"," local_path = mlflow.artifacts.download_artifacts(mlflow_artifact_uri, dst_path=output_dir)\n"," # Load the model\n"," model = mlflow.sklearn.load_model(local_path)\n","\n"," # If the model prints, everything works!\n"," print(f\"🚀 Model : {model}\")\n","except:\n"," print(\"❌ Invalid Run ID.\")"]}],"metadata":{"kernelspec":{"display_name":".venv","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.10.12"},"colab":{"provenance":[]},"widgets":{"application/vnd.jupyter.widget-state+json":{"eddf895fb0a74bd7a4c9925db6b725f0":{"model_module":"@jupyter-widgets/controls","model_name":"HBoxModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HBoxView","box_style":"","children":["IPY_MODEL_71ce2c5075b541d3b8852565cafde9a8","IPY_MODEL_55ba641d2db142258928f9b5a492da51","IPY_MODEL_5de512b8ab7a43dc8adc0f1e65eb191d"],"layout":"IPY_MODEL_c0558b1492a64704a0afe4cf0df4b8a6"}},"71ce2c5075b541d3b8852565cafde9a8":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_e011abd56d3f49a8b0070d59ed725ea6","placeholder":"","style":"IPY_MODEL_9d24a3f85a724ff9886aa7329ee80bca","value":"Downloading artifacts: 0%"}},"55ba641d2db142258928f9b5a492da51":{"model_module":"@jupyter-widgets/controls","model_name":"FloatProgressModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatProgressModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ProgressView","bar_style":"danger","description":"","description_tooltip":null,"layout":"IPY_MODEL_7826ae3e1a834a64b66a111a3468120d","max":1,"min":0,"orientation":"horizontal","style":"IPY_MODEL_bfd92edcee3b4c8ead45581ef43f5ba2","value":0}},"5de512b8ab7a43dc8adc0f1e65eb191d":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_49e8dcdb37614faab8e688eb352f6814","placeholder":"","style":"IPY_MODEL_bca0022d06c54493ad073df725ba0084","value":" 0/1 [00:00<?, ?it/s]"}},"c0558b1492a64704a0afe4cf0df4b8a6":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"e011abd56d3f49a8b0070d59ed725ea6":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"9d24a3f85a724ff9886aa7329ee80bca":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"7826ae3e1a834a64b66a111a3468120d":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"bfd92edcee3b4c8ead45581ef43f5ba2":{"model_module":"@jupyter-widgets/controls","model_name":"ProgressStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ProgressStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","bar_color":null,"description_width":""}},"49e8dcdb37614faab8e688eb352f6814":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"bca0022d06c54493ad073df725ba0084":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"d06773291bd24b908ba790c486079768":{"model_module":"@jupyter-widgets/controls","model_name":"HBoxModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HBoxView","box_style":"","children":["IPY_MODEL_8daacd31a0124102b87b03257bcae524","IPY_MODEL_3a7e63bb88b94c5dbca6e56a3ea07086","IPY_MODEL_c3c7664225e645239053cd5ff99eb75c"],"layout":"IPY_MODEL_1348333c1f2b40508c4fa5814856c6b6"}},"8daacd31a0124102b87b03257bcae524":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_eb6ba09068ab4c4e8ff1e1fd982167d4","placeholder":"","style":"IPY_MODEL_d8d6fa0812f3400c84bd1b8ac4698405","value":"Downloading artifacts: 100%"}},"3a7e63bb88b94c5dbca6e56a3ea07086":{"model_module":"@jupyter-widgets/controls","model_name":"FloatProgressModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatProgressModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ProgressView","bar_style":"success","description":"","description_tooltip":null,"layout":"IPY_MODEL_29462d1746ba415ca6266fcc09ae0927","max":7,"min":0,"orientation":"horizontal","style":"IPY_MODEL_d46451c444da4a0dbb8310d28c0e9cf4","value":7}},"c3c7664225e645239053cd5ff99eb75c":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_8dc6e4646bca4c29ba72689c70a74597","placeholder":"","style":"IPY_MODEL_533a671937cb43afb74a942a5e93e368","value":" 7/7 [00:00<00:00, 10.78it/s]"}},"1348333c1f2b40508c4fa5814856c6b6":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"eb6ba09068ab4c4e8ff1e1fd982167d4":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"d8d6fa0812f3400c84bd1b8ac4698405":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"29462d1746ba415ca6266fcc09ae0927":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"d46451c444da4a0dbb8310d28c0e9cf4":{"model_module":"@jupyter-widgets/controls","model_name":"ProgressStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ProgressStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","bar_color":null,"description_width":""}},"8dc6e4646bca4c29ba72689c70a74597":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"533a671937cb43afb74a942a5e93e368":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}}}}},"nbformat":4,"nbformat_minor":0}
\ No newline at end of file
+{"cells":[{"cell_type":"markdown","metadata":{"id":"fm2J3uruLfrX"},"source":["# Connexion au serveur MLFlow - Test et Configuration Locale\n","\n","Ce notebook permet de **tester la connexion à un serveur MLFlow déployé localement via Docker sur un NAS/Serveur personnel**. Il est conçu pour vérifier que toutes les configurations sont correctes et que nous pouvons commencer à suivre nos expériences de machine learning\n",".\n","## Prérequis\n","\n","Avant d'exécuter ce notebook, assurez-vous d'avoir :\n","- Un serveur MLFlow déployé localement via Docker sur votre NAS. Il sera important d'installer dans le conteneur la librairie boto3 pour que MLFlow puisse échanger avec un serveur de type AWS pour le stockage des artefacts.\n","- Un serveur MinIO (compatible S3) déployé localement via Docker pour le stockage des artefacts et qui remplacera les Amazon Web Services (AWS).\n","- Les informations de connexion nécessaires (URI de tracking, identifiants MinIO).\n","- Les ports 5000 (MLFlow) et 9000 (MinIO API) correctement exposés et/ou gérés par un reverse proxy (SWAG).\n","\n","## Configuration des variables d'environnement dans Jupyter Notebook / Google Collab\n","\n","Pour une connexion réussie, vous devez définir les variables d'environnement dans un fichier `.env` qui sera chargé via la librairie dotenv dans le répertoire courant. Ces variables seront utilisées par la bibliothèque MLflow pour communiquer avec vos services.\n","\n","Voici les variables essentielles à configurer (urls locaux en guise d'exemple) :\n","\n","```\n","MLFLOW_TRACKING_URI=http://mlflow:5000\n","MLFLOW_S3_ENDPOINT_URL=http://minio:9000\n","AWS_ACCESS_KEY_ID=minioadmin\n","AWS_SECRET_ACCESS_KEY=minioadminpassword\n","```\n","\n","Remplacez les valeurs par vos propres informations de connexion.\n","\n","Note : minio possède deux ports :\n","- 9001 pour accéder à l'interface web et gérer le stockage / nettoyage d'artefacts\n","- 9000 qui est l'api qui sera requêté pour l'envoi de buckets S3 par la librairie mlflow\n","\n","## Étapes du test\n","\n","Ce notebook effectue les opérations suivantes :\n","1. Chargement des variables d'environnement depuis le fichier `.env`\n","2. Configuration de MLFlow avec ces variables\n","3. Tentative de connexion au serveur MLFlow\n","4. Récupération de la liste des expériences existantes\n","5. Création d'une expérience si elle n'existe pas déjà\n","6. Enregistrement de métriques test pour vérifier le bon fonctionnement\n","\n","## Résolution des problèmes courants\n","\n","Notez que si vous utilisez des notebooks Google Collab, il est **nécessaire** que votre serveur MLFlow ainsi que l'API de MinIO soient accessibles via un lien public. Vous pouvez simplement ouvrir les ports de votre modem ou, pour plus de sécurité, configurer un reverse proxy (type SWAG pour la gestion et délivrance automatique de certificats SSL). Cette étape ne sera pas développée ici.\n","\n","Notez également que si vous désactivez votre docker MLFlow et le réactivez (par exemple suite à un redémarrage), les expériences seront par défaut perdues. Pour qu'elles soient persistantes, il faudra rajouter dans le yaml du docker l'argument de commande ainsi que le volume suivants :\n","- ` - --backend-store-uri ` \\\n"," ` - sqlite:////mlflow/mlflow.db # <-- pointe vers le volume monté `\n","- ` - ./mlflow-data:/mlflow # Monte un volume local pour préserver mlflow.db`\n","\n","Si vous rencontrez des erreurs lors de la connexion, vérifiez :\n","- Que l'URI de tracking est correct et accessible\n","- Que vos identifiants AWS sont valides (si applicable)\n","- Que le serveur MLFlow est bien en cours d'exécution\n","- Vos paramètres réseau (pare-feu, VPN, etc.)"]},{"cell_type":"code","source":["!pip install mlflow boto3 dotenv --quiet"],"metadata":{"id":"wPht9-36CMzs"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["from google.colab import drive\n","drive.mount('/content/drive')\n","import os\n","drive_folder= \"/content/drive/MyDrive/Colab_Notebooks/Project_7/notebooks\"\n","os.chdir(drive_folder)\n","# os.listdir()"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"XkhsbZ5Xc3De","executionInfo":{"status":"ok","timestamp":1751547034150,"user_tz":-120,"elapsed":953,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"7d340543-c848-47da-f5cd-4360a62f5571"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n"]}]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"4DKFKUC8LfrY","executionInfo":{"status":"ok","timestamp":1751547035465,"user_tz":-120,"elapsed":1313,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"a2c423b4-6e57-4f78-9839-3beed6c39ea1"},"outputs":[{"output_type":"stream","name":"stdout","text":["MLflow Tracking URI: https://mlflow.greg-madman-nas.duckdns.org/\n","Identifiants AWS configurés\n","Tentative de connexion à MLflow...\n","Connexion à MLflow réussie! Nombre d'expériences existantes: 3\n"," - Demo PC (ID: 2)\n"," - OC Projet 7 (ID: 1)\n"," - Default (ID: 0)\n","Expérience existante trouvée: 'Demo PC' (ID: 2)\n","Démarrage d'un run MLflow de test...\n","Métrique de test enregistrée avec succès!\n","🏃 View run test_connexion_simple at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/2/runs/3127176c596441c48e34590d27494b56\n","🧪 View experiment at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/2\n","Test terminé avec succès. Vous pouvez vérifier les résultats sur: https://mlflow.greg-madman-nas.duckdns.org/\n"]}],"source":["import os\n","import mlflow\n","from dotenv import load_dotenv\n","\n","# Charger les variables d'environnement depuis le fichier .env\n","load_dotenv(dotenv_path='../.env')\n","\n","# Configuration de MLflow avec les variables d'environnement\n","mlflow_tracking_uri = os.getenv(\"MLFLOW_TRACKING_URI\")\n","mlflow_s3_endpoint_url = os.getenv(\"MLFLOW_S3_ENDPOINT_URL\")\n","aws_access_key_id = os.getenv(\"AWS_ACCESS_KEY_ID\")\n","aws_secret_access_key = os.getenv(\"AWS_SECRET_ACCESS_KEY\")\n","\n","print(f\"MLflow Tracking URI: {mlflow_tracking_uri}\")\n","\n","# Configuration explicite des identifiants AWS pour MLflow\n","os.environ[\"MLFLOW_S3_ENDPOINT_URL\"] = mlflow_s3_endpoint_url\n","os.environ[\"AWS_ACCESS_KEY_ID\"] = aws_access_key_id\n","os.environ[\"AWS_SECRET_ACCESS_KEY\"] = aws_secret_access_key\n","print(\"Identifiants AWS configurés\")\n","\n","# Configuration de MLflow\n","try:\n"," print(\"Tentative de connexion à MLflow...\")\n"," mlflow.set_tracking_uri(mlflow_tracking_uri)\n","\n"," # Liste des expériences pour vérifier la connexion\n"," exps = mlflow.search_experiments()\n"," print(f\"Connexion à MLflow réussie! Nombre d'expériences existantes: {len(exps)}\")\n"," for exp in exps:\n"," print(f\" - {exp.name} (ID: {exp.experiment_id})\")\n","\n"," # Définir le nom de l'expérience\n"," experiment_name = \"Demo PC\"\n","\n"," # Obtenir ou créer l'expérience\n"," experiment = mlflow.get_experiment_by_name(experiment_name)\n"," if experiment is None:\n"," experiment_id = mlflow.create_experiment(experiment_name)\n"," print(f\"Nouvelle expérience créée: '{experiment_name}' (ID: {experiment_id})\")\n"," else:\n"," experiment_id = experiment.experiment_id\n"," print(f\"Expérience existante trouvée: '{experiment_name}' (ID: {experiment_id})\")\n","\n"," # Démarrer un simple run et enregistrer une métrique\n"," with mlflow.start_run(experiment_id=experiment_id, run_name=\"test_connexion_simple\"):\n"," print(\"Démarrage d'un run MLflow de test...\")\n"," mlflow.log_param(\"test_param\", \"valeur_test\")\n"," mlflow.log_metric(\"test_metric\", 1.0)\n"," print(\"Métrique de test enregistrée avec succès!\")\n","\n"," print(f\"Test terminé avec succès. Vous pouvez vérifier les résultats sur: {mlflow_tracking_uri}\")\n","\n","except Exception as e:\n"," print(f\"Erreur lors de la connexion à MLflow: {e}\")\n"," print(\"\\nConseils de débogage:\")\n"," print(\"1. Vérifiez que l'URI de tracking est correct et accessible\")\n"," print(\"2. Vérifiez que vos identifiants AWS sont valides si vous utilisez S3\")\n"," print(\"3. Vérifiez que le serveur MLflow est en cours d'exécution\")\n"," print(\"4. Vérifiez les paramètres réseau (pare-feu, VPN, etc.)\")"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"nPI-3ULPLfrZ","executionInfo":{"status":"ok","timestamp":1751547035628,"user_tz":-120,"elapsed":159,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"fcc2197b-0474-4365-8122-f116dff4f562"},"outputs":[{"output_type":"stream","name":"stdout","text":["MLflow Tracking URI: https://mlflow.greg-madman-nas.duckdns.org/\n","Identifiants AWS configurés\n"]}],"source":["import os\n","import mlflow\n","from mlflow.models import infer_signature\n","from mlflow import MlflowClient\n","from dotenv import load_dotenv\n","\n","import pandas as pd\n","import numpy as np\n","from sklearn import datasets\n","from sklearn.model_selection import train_test_split\n","from sklearn.linear_model import LogisticRegression\n","from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, confusion_matrix\n","import matplotlib.pyplot as plt\n","import seaborn as sns\n","\n","# Charger les variables d'environnement depuis le fichier .env\n","load_dotenv()\n","\n","# Configuration de MLflow avec les variables d'environnement\n","mlflow_tracking_uri = os.getenv(\"MLFLOW_TRACKING_URI\")\n","mlflow_s3_endpoint_url = os.getenv(\"MLFLOW_S3_ENDPOINT_URL\")\n","aws_access_key_id = os.getenv(\"AWS_ACCESS_KEY_ID\")\n","aws_secret_access_key = os.getenv(\"AWS_SECRET_ACCESS_KEY\")\n","\n","# Configuration explicite de MLflow\n","mlflow.set_tracking_uri(mlflow_tracking_uri)\n","print(f\"MLflow Tracking URI: {mlflow_tracking_uri}\")\n","\n","# Configuration explicite des identifiants AWS\n","os.environ[\"MLFLOW_S3_ENDPOINT_URL\"] = mlflow_s3_endpoint_url\n","os.environ[\"AWS_ACCESS_KEY_ID\"] = aws_access_key_id\n","os.environ[\"AWS_SECRET_ACCESS_KEY\"] = aws_secret_access_key\n","print(\"Identifiants AWS configurés\")\n","\n","# Create a new MLflow Experiment\n","mlflow.set_experiment(\"Demo PC\")\n","\n","# Define the output directory\n","output_dir = \"./content/mlflow_test/\"\n","\n","# Create the output directory if it doesn't exist\n","if not os.path.exists(output_dir):\n"," os.makedirs(output_dir)\n"," print(f\"Output directory created: {output_dir}\")"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"OC0vEu6HLfra","executionInfo":{"status":"ok","timestamp":1751547053654,"user_tz":-120,"elapsed":18024,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"10d22f5d-eb1e-47e2-ea3f-61e8307536db"},"outputs":[{"output_type":"stream","name":"stdout","text":["Chargement du dataset Iris...\n","Aperçu du dataset:\n"," sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) \\\n","0 5.1 3.5 1.4 0.2 \n","1 4.9 3.0 1.4 0.2 \n","2 4.7 3.2 1.3 0.2 \n","3 4.6 3.1 1.5 0.2 \n","4 5.0 3.6 1.4 0.2 \n","\n"," target \n","0 0.0 \n","1 0.0 \n","2 0.0 \n","3 0.0 \n","4 0.0 \n","Dimensions du dataset: (150, 5)\n","Taille de l'ensemble d'entraînement: (120, 4)\n","Taille de l'ensemble de test: (30, 4)\n","Démarrage du run MLflow avec l'ID: c9e768a9ca904c55a963f03568e43ecb\n","Entraînement du modèle de régression logistique...\n","Métriques: Accuracy=1.0000, Precision=1.0000, Recall=1.0000, F1=1.0000\n"]},{"output_type":"stream","name":"stderr","text":["2025/07/03 12:50:45 WARNING mlflow.models.model: `artifact_path` is deprecated. Please use `name` instead.\n"]},{"output_type":"stream","name":"stdout","text":["Modèle enregistré: models:/m-abf8c8b98d6f4d60aa9898de7ee6a795\n","🏃 View run iris_classification at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/2/runs/c9e768a9ca904c55a963f03568e43ecb\n","🧪 View experiment at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/2\n","\n","🏃 MLflow Run Infos :\n","⚗️ run_id: c9e768a9ca904c55a963f03568e43ecb\n","⚡ artifacts: ['model/MLmodel', 'model/conda.yaml', 'model/input_example.json', 'model/model.pkl', 'model/python_env.yaml', 'model/requirements.txt', 'model/serving_input_example.json']\n","⚙️ params: {'solver': 'lbfgs', 'max_iter': '1000', 'random_state': '8888'}\n","📝 metrics: {'accuracy': 1.0, 'precision': 1.0, 'recall': 1.0, 'f1_score': 1.0}\n","🏷️ tags: {'model_type': 'LogisticRegression', 'dataset': 'Iris', 'description': 'Classification multiclasse des fleurs Iris'}\n","\n"]}],"source":["# Fonction pour afficher les informations du run MLflow\n","def print_logged_info(r):\n"," print(\"\")\n"," print(\"🏃 MLflow Run Infos :\")\n"," tags = {k: v for k, v in r.data.tags.items() if not k.startswith(\"mlflow.\")}\n"," artifacts = [f.path for f in MlflowClient().list_artifacts(r.info.run_id, \"model\")]\n"," print(f\"⚗️ run_id: {r.info.run_id}\")\n"," print(f\"⚡ artifacts: {artifacts}\")\n"," print(f\"⚙️ params: {r.data.params}\")\n"," print(f\"📝 metrics: {r.data.metrics}\")\n"," print(f\"🏷️ tags: {tags}\")\n"," print()\n","\n","# Chargement du dataset Iris\n","print(\"Chargement du dataset Iris...\")\n","iris = datasets.load_iris()\n","X, y = iris.data, iris.target\n","\n","# Conversion en DataFrame pour une meilleure visualisation\n","iris_df = pd.DataFrame(data=np.c_[iris['data'], iris['target']],\n"," columns=iris['feature_names'] + ['target'])\n","print(f\"Aperçu du dataset:\\n{iris_df.head()}\")\n","print(f\"Dimensions du dataset: {iris_df.shape}\")\n","\n","# Créer une figure pour visualiser la distribution des classes\n","plt.figure(figsize=(8, 6))\n","sns.countplot(x='target', data=iris_df)\n","plt.title('Distribution des classes du dataset Iris')\n","# Save the figure in the output directory\n","plt.savefig(os.path.join(output_dir, 'iris_class_distribution.png'))\n","plt.close()\n","\n","# Division en ensembles d'entraînement et de test\n","X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n","print(f\"Taille de l'ensemble d'entraînement: {X_train.shape}\")\n","print(f\"Taille de l'ensemble de test: {X_test.shape}\")\n","\n","# Définition des hyperparamètres du modèle\n","params = {\n"," \"solver\": \"lbfgs\",\n"," \"max_iter\": 1000,\n"," \"random_state\": 8888,\n","}\n","\n","# Démarrer un run MLflow\n","with mlflow.start_run(run_name=\"iris_classification\") as run:\n"," print(f\"Démarrage du run MLflow avec l'ID: {run.info.run_id}\")\n","\n"," # Enregistrer les hyperparamètres\n"," mlflow.log_params(params)\n","\n"," # Entraîner le modèle\n"," print(\"Entraînement du modèle de régression logistique...\")\n"," lr = LogisticRegression(**params)\n"," lr.fit(X_train, y_train)\n","\n"," # Prédire sur l'ensemble de test\n"," y_pred = lr.predict(X_test)\n","\n"," # Calculer les métriques\n"," accuracy = accuracy_score(y_test, y_pred)\n"," precision = precision_score(y_test, y_pred, average='weighted')\n"," recall = recall_score(y_test, y_pred, average='weighted')\n"," f1 = f1_score(y_test, y_pred, average='weighted')\n","\n"," # Enregistrer les métriques\n"," mlflow.log_metric(\"accuracy\", accuracy)\n"," mlflow.log_metric(\"precision\", precision)\n"," mlflow.log_metric(\"recall\", recall)\n"," mlflow.log_metric(\"f1_score\", f1)\n","\n"," print(f\"Métriques: Accuracy={accuracy:.4f}, Precision={precision:.4f}, Recall={recall:.4f}, F1={f1:.4f}\")\n","\n"," # Générer une matrice de confusion\n"," cm = confusion_matrix(y_test, y_pred)\n"," plt.figure(figsize=(8, 6))\n"," sns.heatmap(cm, annot=True, fmt='d', cmap='Blues',\n"," xticklabels=iris.target_names,\n"," yticklabels=iris.target_names)\n"," plt.title('Matrice de confusion')\n"," plt.xlabel('Prédiction')\n"," plt.ylabel('Réalité')\n"," plt.tight_layout()\n"," # Save the figure in the output directory\n"," plt.savefig(os.path.join(output_dir, 'confusion_matrix.png'))\n"," plt.close()\n","\n"," # Enregistrer la matrice de confusion comme artifact\n"," mlflow.log_artifact(os.path.join(output_dir, \"confusion_matrix.png\"))\n"," mlflow.log_artifact(os.path.join(output_dir, \"iris_class_distribution.png\"))\n","\n"," # Définir des tags pour ce run\n"," mlflow.set_tag(\"model_type\", \"LogisticRegression\")\n"," mlflow.set_tag(\"dataset\", \"Iris\")\n"," mlflow.set_tag(\"description\", \"Classification multiclasse des fleurs Iris\")\n","\n"," # Inférer la signature du modèle\n"," signature = infer_signature(X_train, lr.predict(X_train))\n","\n"," # Enregistrer le modèle avec sa signature\n"," model_info = mlflow.sklearn.log_model(\n"," sk_model=lr,\n"," artifact_path=\"model\", # This is the path within the MLflow run artifact storage\n"," signature=signature,\n"," input_example=X_train[:5]\n"," )\n","\n"," print(f\"Modèle enregistré: {model_info.model_uri}\")\n","\n","# Récupérer et afficher les informations du run terminé\n","run_info = mlflow.get_run(run_id=run.info.run_id)\n","print_logged_info(run_info)"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":116,"referenced_widgets":["5077141fe2354e538f2728680d165abd","f5679722fc2e419b9eb658ee30c3684d","a5e14ad79a71402ab6f93f67fe2894cb","0a21fa27119c467f84595be0992d481b","b1a3c1bde6854e179dd0ecba4ac0ac19","e294e746a37246f082f8bf2b70367ce3","4713d02de5c44de69db461e8ab6cade1","36e6d82d6909479d9359dd82f6d56d92","fd2489b6f3154eb988b6d987e9445dc4","c5e2cc8df51146d1b61ac06e65cbc9ec","9878155a8ac14ded9f73699160a3da0c","3f94687e5cd24458a1f8cd6b123bbdf7","d7a0ada0295647049b45e572d4167d8d","12bd24eef53d4390a6e12b89d4baa563","06490fc029bf4f1eab964d977a262c73","90eb86a1891848cba01284e60c971dcc","a4b1626a86d64e30a04552da9fda8eb1","0e190cce3832467686ab21f7a226f15b","c95599130eb44eeb98d7013340f55bef","870a99030b7541dd977e4261f025f495","e4a45ed5c60e49c9b4392012805fd903","1bf723dec07d4385b6eb2e423ac81416"]},"id":"bvmWVVraLfra","executionInfo":{"status":"ok","timestamp":1751547076141,"user_tz":-120,"elapsed":22478,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"d50a7a94-7edf-4406-bafb-5384c86a90eb"},"outputs":[{"name":"stdout","output_type":"stream","text":["Please enter your 🏃 RUN ID : c9e768a9ca904c55a963f03568e43ecb\n"]},{"output_type":"display_data","data":{"text/plain":["Downloading artifacts: 0%| | 0/1 [00:00, ?it/s]"],"application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"5077141fe2354e538f2728680d165abd"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":["Downloading artifacts: 0%| | 0/7 [00:00, ?it/s]"],"application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"3f94687e5cd24458a1f8cd6b123bbdf7"}},"metadata":{}},{"output_type":"stream","name":"stdout","text":["🚀 Model : LogisticRegression(max_iter=1000, random_state=8888)\n"]}],"source":["# %%\n","# Prompts user with the Run ID from MLflow run\n","# You can find run ID in the Tracking UI\n","while True:\n"," run_id = input('Please enter your 🏃 RUN ID : ')\n"," if run_id.strip() != '':\n"," break\n","\n","artifact_path = \"model\"\n","\n","# Download artifact via the tracking server\n","mlflow_artifact_uri = f\"runs:/{run_id}/{artifact_path}\"\n","\n","try:\n"," # Specify the local directory to download artifacts to\n"," local_path = mlflow.artifacts.download_artifacts(mlflow_artifact_uri, dst_path=output_dir)\n"," # Load the model\n"," model = mlflow.sklearn.load_model(local_path)\n","\n"," # If the model prints, everything works!\n"," print(f\"🚀 Model : {model}\")\n","except:\n"," print(\"❌ Invalid Run ID.\")"]}],"metadata":{"kernelspec":{"display_name":".venv","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.10.12"},"colab":{"provenance":[]},"widgets":{"application/vnd.jupyter.widget-state+json":{"5077141fe2354e538f2728680d165abd":{"model_module":"@jupyter-widgets/controls","model_name":"HBoxModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HBoxView","box_style":"","children":["IPY_MODEL_f5679722fc2e419b9eb658ee30c3684d","IPY_MODEL_a5e14ad79a71402ab6f93f67fe2894cb","IPY_MODEL_0a21fa27119c467f84595be0992d481b"],"layout":"IPY_MODEL_b1a3c1bde6854e179dd0ecba4ac0ac19"}},"f5679722fc2e419b9eb658ee30c3684d":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_e294e746a37246f082f8bf2b70367ce3","placeholder":"","style":"IPY_MODEL_4713d02de5c44de69db461e8ab6cade1","value":"Downloading artifacts: 0%"}},"a5e14ad79a71402ab6f93f67fe2894cb":{"model_module":"@jupyter-widgets/controls","model_name":"FloatProgressModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatProgressModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ProgressView","bar_style":"danger","description":"","description_tooltip":null,"layout":"IPY_MODEL_36e6d82d6909479d9359dd82f6d56d92","max":1,"min":0,"orientation":"horizontal","style":"IPY_MODEL_fd2489b6f3154eb988b6d987e9445dc4","value":0}},"0a21fa27119c467f84595be0992d481b":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_c5e2cc8df51146d1b61ac06e65cbc9ec","placeholder":"","style":"IPY_MODEL_9878155a8ac14ded9f73699160a3da0c","value":" 0/1 [00:00<?, ?it/s]"}},"b1a3c1bde6854e179dd0ecba4ac0ac19":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"e294e746a37246f082f8bf2b70367ce3":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"4713d02de5c44de69db461e8ab6cade1":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"36e6d82d6909479d9359dd82f6d56d92":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"fd2489b6f3154eb988b6d987e9445dc4":{"model_module":"@jupyter-widgets/controls","model_name":"ProgressStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ProgressStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","bar_color":null,"description_width":""}},"c5e2cc8df51146d1b61ac06e65cbc9ec":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"9878155a8ac14ded9f73699160a3da0c":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"3f94687e5cd24458a1f8cd6b123bbdf7":{"model_module":"@jupyter-widgets/controls","model_name":"HBoxModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HBoxView","box_style":"","children":["IPY_MODEL_d7a0ada0295647049b45e572d4167d8d","IPY_MODEL_12bd24eef53d4390a6e12b89d4baa563","IPY_MODEL_06490fc029bf4f1eab964d977a262c73"],"layout":"IPY_MODEL_90eb86a1891848cba01284e60c971dcc"}},"d7a0ada0295647049b45e572d4167d8d":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_a4b1626a86d64e30a04552da9fda8eb1","placeholder":"","style":"IPY_MODEL_0e190cce3832467686ab21f7a226f15b","value":"Downloading artifacts: 100%"}},"12bd24eef53d4390a6e12b89d4baa563":{"model_module":"@jupyter-widgets/controls","model_name":"FloatProgressModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatProgressModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ProgressView","bar_style":"success","description":"","description_tooltip":null,"layout":"IPY_MODEL_c95599130eb44eeb98d7013340f55bef","max":7,"min":0,"orientation":"horizontal","style":"IPY_MODEL_870a99030b7541dd977e4261f025f495","value":7}},"06490fc029bf4f1eab964d977a262c73":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_e4a45ed5c60e49c9b4392012805fd903","placeholder":"","style":"IPY_MODEL_1bf723dec07d4385b6eb2e423ac81416","value":" 7/7 [00:01<00:00, 4.03it/s]"}},"90eb86a1891848cba01284e60c971dcc":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"a4b1626a86d64e30a04552da9fda8eb1":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"0e190cce3832467686ab21f7a226f15b":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"c95599130eb44eeb98d7013340f55bef":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"870a99030b7541dd977e4261f025f495":{"model_module":"@jupyter-widgets/controls","model_name":"ProgressStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ProgressStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","bar_color":null,"description_width":""}},"e4a45ed5c60e49c9b4392012805fd903":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"1bf723dec07d4385b6eb2e423ac81416":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}}}}},"nbformat":4,"nbformat_minor":0}
\ No newline at end of file
diff --git a/notebooks/p07_01-notebook-analyse-exploratoire.ipynb b/notebooks/p07_01-notebook-analyse-exploratoire.ipynb
index ea5e4cd..83371b8 100644
--- a/notebooks/p07_01-notebook-analyse-exploratoire.ipynb
+++ b/notebooks/p07_01-notebook-analyse-exploratoire.ipynb
@@ -1 +1 @@
-{"cells":[{"cell_type":"markdown","metadata":{"id":"kRoif7EaWjI6"},"source":["# Partie 1 : 🔬 Analyse exploratoire des données Sentiment140\n","\n","Dans le cadre du projet pour Air Paradis visant à développer un **système de détection de sentiment sur les tweets**, nous allons d'abord explorer et comprendre en profondeur le jeu de données **Sentiment140**. Cette analyse exploratoire est une étape fondamentale qui nous permettra de mieux appréhender les caractéristiques des données et d'orienter efficacement nos choix de prétraitement et de modélisation.\n","\n","Le jeu de données Sentiment140 contient **1,6 million de tweets annotés** avec leur polarité (négative ou positive), ainsi que des métadonnées comme l'identifiant du tweet, la date, la requête utilisée pour collecter le tweet, et l'utilisateur ayant posté le message. Cette richesse d'information nous permet non seulement d'analyser le contenu textuel des tweets, mais également d'explorer les dimensions temporelles et comportementales associées.\n","\n","Cette étape d'exploration nous guidera vers les **techniques de prétraitement** les plus adaptées et nous aidera à sélectionner les **approches de modélisation** les plus prometteuses, des méthodes classiques aux architectures de deep learning avancées comme BERT, conformément aux exigences du projet formulées par Marc."]},{"cell_type":"markdown","metadata":{"id":"HMvSNBQbWjI7"},"source":["## Importation des bibliothèques"]},{"cell_type":"code","source":["from google.colab import drive\n","drive.mount('/content/drive')\n","import os\n","drive_folder= \"/content/drive/MyDrive/Colab_Notebooks/Project_7/notebooks\"\n","os.chdir(drive_folder)\n","# os.listdir()"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":0},"id":"0vLhVG6jXaib","executionInfo":{"status":"ok","timestamp":1751537385444,"user_tz":-120,"elapsed":8041,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"32f1e8c2-3863-41f2-9b0b-32c371ae7739"},"execution_count":2,"outputs":[{"output_type":"stream","name":"stdout","text":["Mounted at /content/drive\n"]}]},{"cell_type":"code","execution_count":3,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":0},"id":"-YwmQE9SWjI8","executionInfo":{"status":"ok","timestamp":1751537391119,"user_tz":-120,"elapsed":5662,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"966f92fd-9219-4836-d130-4399a8890793"},"outputs":[{"output_type":"stream","name":"stderr","text":["[nltk_data] Downloading package punkt to /root/nltk_data...\n","[nltk_data] Unzipping tokenizers/punkt.zip.\n","[nltk_data] Downloading package stopwords to /root/nltk_data...\n","[nltk_data] Unzipping corpora/stopwords.zip.\n","[nltk_data] Downloading package wordnet to /root/nltk_data...\n"]}],"source":["import pandas as pd\n","import numpy as np\n","import matplotlib.pyplot as plt\n","import seaborn as sns\n","import requests\n","import zipfile\n","import os\n","import re\n","import datetime\n","import warnings\n","import string\n","\n","# Télécharger les ressources NLTK nécessaires\n","import nltk\n","nltk.download('punkt')\n","nltk.download('stopwords')\n","nltk.download('wordnet')\n","from nltk.corpus import stopwords\n","from nltk.tokenize import word_tokenize\n","from nltk.util import ngrams\n","from collections import Counter\n","from wordcloud import WordCloud\n","from nltk.stem import WordNetLemmatizer\n","\n","plt.style.use('ggplot')\n","plt.rcParams['figure.figsize'] = (12, 8)\n","plt.rcParams['font.family'] = 'DejaVu Sans'\n","warnings.filterwarnings('ignore')"]},{"cell_type":"markdown","metadata":{"id":"JaM_tOMwWjI8"},"source":["## 💾 Jeu de données : Sentiment140\n","\n","Le jeu de données [Sentiment140 dataset with 1.6 million tweets](https://www.kaggle.com/datasets/kazanova/sentiment140) est une ressource majeure pour l'analyse de sentiment sur Twitter, comprenant **1,6 million de tweets** extraits via l'API Twitter. Ces tweets ont été automatiquement annotés selon leur polarité sentimentale, offrant une base solide pour développer des modèles de classification de sentiment.\n","\n","Le jeu de données est organisé en 6 colonnes distinctes :\n","\n","1. **target** : La polarité du sentiment exprimé dans le tweet.\n"," - 0 = sentiment négatif\n"," - 2 = sentiment neutre\n"," - 4 = sentiment positif\n","2. **ids** : L'identifiant unique du tweet (exemple : *2087*)\n","3. **date** : La date et l'heure de publication du tweet.\n","4. **flag** : La requête utilisée pour obtenir le tweet.\n"," - Exemple : *lyx*\n"," - Si aucune requête n'a été utilisée : *NO_QUERY*\n","5. **user** : Le nom d'utilisateur de l'auteur du tweet.\n","6. **text** : Le contenu textuel du tweet."]},{"cell_type":"markdown","source":["Téléchargement et extraction de l'archive."],"metadata":{"id":"JMtFQ45vA9uT"}},{"cell_type":"code","execution_count":4,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":0},"id":"71OroFSlWjI8","executionInfo":{"status":"ok","timestamp":1751537391139,"user_tz":-120,"elapsed":18,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"be17dab2-3084-45ad-e067-16f331a004f2"},"outputs":[{"output_type":"stream","name":"stdout","text":["CPU times: user 242 µs, sys: 32 µs, total: 274 µs\n","Wall time: 448 µs\n"]}],"source":["%%time\n","\n","# Define the URL and the local file path\n","url = \"https://s3-eu-west-1.amazonaws.com/static.oc-static.com/prod/courses/files/AI+Engineer/Project+7%C2%A0-+D%C3%A9tectez+les+Bad+Buzz+gr%C3%A2ce+au+Deep+Learning/sentiment140.zip\"\n","local_zip_path = \"./content/data/sentiment140.zip\"\n","extract_path = \"./content/data\"\n","\n","if not os.path.exists(extract_path):\n","\n"," # Create the directory if it doesn't exist\n"," os.makedirs(extract_path, exist_ok=True)\n","\n"," # Download the zip file\n"," response = requests.get(url)\n"," with open(local_zip_path, 'wb') as file:\n"," file.write(response.content)\n","\n"," # Extract the contents of the zip file\n"," with zipfile.ZipFile(local_zip_path, 'r') as zip_ref:\n"," zip_ref.extractall(extract_path)\n","\n"," # Delete the zip file\n"," os.remove(local_zip_path)"]},{"cell_type":"markdown","source":["Paramétrage de pandas + affichage premières lignes et informations générales"],"metadata":{"id":"z8Ul66EvBC13"}},{"cell_type":"code","execution_count":5,"metadata":{"id":"eHAXkFpMWjI9","executionInfo":{"status":"ok","timestamp":1751537391155,"user_tz":-120,"elapsed":1,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["pd.set_option('display.max_columns', None)\n","pd.set_option('display.expand_frame_repr', False)"]},{"cell_type":"code","execution_count":6,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":379},"id":"O7Kp1AD0WjI9","executionInfo":{"status":"ok","timestamp":1751537402047,"user_tz":-120,"elapsed":10891,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"ebcc83c8-de04-4a87-d5d1-fdd4da4bcce8"},"outputs":[{"output_type":"execute_result","data":{"text/plain":[" target ids date flag user text\n","0 0 1467810369 Mon Apr 06 22:19:45 PDT 2009 NO_QUERY _TheSpecialOne_ @switchfoot http://twitpic.com/2y1zl - Awww, t...\n","1 0 1467810672 Mon Apr 06 22:19:49 PDT 2009 NO_QUERY scotthamilton is upset that he can't update his Facebook by ...\n","2 0 1467810917 Mon Apr 06 22:19:53 PDT 2009 NO_QUERY mattycus @Kenichan I dived many times for the ball. Man...\n","3 0 1467811184 Mon Apr 06 22:19:57 PDT 2009 NO_QUERY ElleCTF my whole body feels itchy and like its on fire \n","4 0 1467811193 Mon Apr 06 22:19:57 PDT 2009 NO_QUERY Karoli @nationwideclass no, it's not behaving at all...."],"text/html":["\n","
\n","
\n","\n","
\n"," \n","
\n","
\n","
target
\n","
ids
\n","
date
\n","
flag
\n","
user
\n","
text
\n","
\n"," \n"," \n","
\n","
0
\n","
0
\n","
1467810369
\n","
Mon Apr 06 22:19:45 PDT 2009
\n","
NO_QUERY
\n","
_TheSpecialOne_
\n","
@switchfoot http://twitpic.com/2y1zl - Awww, t...
\n","
\n","
\n","
1
\n","
0
\n","
1467810672
\n","
Mon Apr 06 22:19:49 PDT 2009
\n","
NO_QUERY
\n","
scotthamilton
\n","
is upset that he can't update his Facebook by ...
\n","
\n","
\n","
2
\n","
0
\n","
1467810917
\n","
Mon Apr 06 22:19:53 PDT 2009
\n","
NO_QUERY
\n","
mattycus
\n","
@Kenichan I dived many times for the ball. Man...
\n","
\n","
\n","
3
\n","
0
\n","
1467811184
\n","
Mon Apr 06 22:19:57 PDT 2009
\n","
NO_QUERY
\n","
ElleCTF
\n","
my whole body feels itchy and like its on fire
\n","
\n","
\n","
4
\n","
0
\n","
1467811193
\n","
Mon Apr 06 22:19:57 PDT 2009
\n","
NO_QUERY
\n","
Karoli
\n","
@nationwideclass no, it's not behaving at all....
\n","
\n"," \n","
\n","
\n","
\n","\n","
\n"," \n","\n"," \n","\n"," \n","
\n","\n","\n","
\n"," \n","\n","\n","\n"," \n","
\n","\n","
\n","
\n"],"application/vnd.google.colaboratory.intrinsic+json":{"type":"dataframe","variable_name":"raw_data"}},"metadata":{},"execution_count":6}],"source":["# Define the path to the CSV file\n","csv_file_path = os.path.join(extract_path, 'training.1600000.processed.noemoticon.csv')\n","\n","# Define the column names\n","column_names = ['target', 'ids', 'date', 'flag', 'user', 'text']\n","\n","# Load the dataset into a pandas DataFrame\n","raw_data = pd.read_csv(csv_file_path, encoding='latin-1', names=column_names)\n","\n","# Display the first few rows of the DataFrame\n","raw_data.head()"]},{"cell_type":"code","source":["raw_data['target'].unique()"],"metadata":{"id":"6pTUMokI-Q6W","executionInfo":{"status":"ok","timestamp":1751537402048,"user_tz":-120,"elapsed":9,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"9e15e051-7e09-4848-ca8c-358ac2cb4c23","colab":{"base_uri":"https://localhost:8080/","height":0}},"execution_count":7,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([0, 4])"]},"metadata":{},"execution_count":7}]},{"cell_type":"code","execution_count":8,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":0},"id":"rIaUk5ZxWjI9","executionInfo":{"status":"ok","timestamp":1751537402069,"user_tz":-120,"elapsed":21,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"8e4f9c92-f907-468c-de97-f6edb040398c"},"outputs":[{"output_type":"stream","name":"stdout","text":["Ce dataframe contient 1600000 lignes et 6 colonnes.\n"]}],"source":["print(f\"Ce dataframe contient {raw_data.shape[0]} lignes et {raw_data.shape[1]} colonnes.\")"]},{"cell_type":"markdown","metadata":{"id":"GG5bQh5xWjI-"},"source":["## 🔬 Analyse exploratoire des données Sentiment140\n","\n","Pour bien comprendre votre jeu de données Sentiment140 et optimiser votre modèle d'analyse de sentiment, je vous propose une analyse exploratoire complète qui couvre les aspects suivants :\n","\n","- **Analyse quantitative:**\n","\n","1. **Informations générales sur le jeu de données** \n"," - Étude de la répartition des classes de sentiment \n"," - Vérification des valeurs manquantes ainsi que des doublons \n"," - Examen de la structure générale du DataFrame \n","\n","2. **Analyse de la distribution des sentiments** \n"," - Visualisation de l’équilibre ou du déséquilibre des classes \n"," - Répartition des sentiments positifs et négatifs \n","\n","3. **Analyse temporelle** \n"," - Répartition des tweets dans le temps \n"," - Identification des patterns temporels selon le sentiment \n"," - Analyse détaillée par heure, jour et mois \n","\n","4. **Analyse des mots fréquents** \n"," - Nuages de mots spécifiques à chaque classe de sentiment \n"," - Détection des mots discriminants entre sentiments positifs et négatifs \n"," - Identification des n-grammes les plus fréquents \n","\n","5. **Analyse des utilisateurs** \n"," - Étude de la distribution des tweets par utilisateur \n"," - Analyse des tendances de sentiment propres aux utilisateurs \n","\n","6. **Analyse des requêtes (flag)** \n"," - Impact des requêtes sur la distribution des sentiments \n"," - Identification des requêtes les plus fréquentes \n","\n","7. **Analyse de la longueur des tweets** \n"," - Visualisation de la distribution des longueurs des tweets \n"," - Gestion des caractères HTML dans les tweets \n"," - Nettoyage des tweets trop longs et souvent difficilement compréhensibles \n","\n","- **Analyse qualitative:**\n","\n","8. **Analyse de caracteristiques distinctives et de l'impact de tokens spécifiques** \n"," - Étude de la longueur des tweets en termes de caractères et de mots \n"," - Répartition des longueurs en fonction du sentiment \n"," - Analyse de l’utilisation de la ponctuation \n"," - Calcul du ratio de majuscules \n"," - Présence d’émoticônes et de symboles \n","\n","9. **Stratégie de prétraitement pour la détection de sentiment dans les tweets** \n"," - Nettoyage des textes \n"," - Tokenisation adaptée aux spécificités de Twitter \n"," - Gestion des mentions, hashtags et URLs \n","\n","10. **Recommandations pour la modélisation** \n"," - Approches recommandées pour la vectorisation \n"," - Modèles à privilégier \n"," - Stratégies d’évaluation adaptées \n","\n","### Points clés à explorer \n","\n","**Distribution des sentiments :** \n","La première étape consiste à vérifier si les classes sont équilibrées. En cas de déséquilibre, des techniques telles que le sur- ou sous-échantillonnage, ou la pondération des classes, pourront être envisagées.\n","\n","**Caractéristiques linguistiques :** \n","L’analyse des mots les plus fréquents et des caractéristiques propres aux tweets positifs et négatifs permettra d’identifier des features pertinentes pour le modèle.\n","\n","**Prétraitement recommandé :** \n","Le code fournit des recommandations précises concernant : \n","- La gestion des URLs, mentions et hashtags \n","- La normalisation des textes \n","- Une tokenisation adaptée au langage propre à Twitter \n","\n","**Approches de modélisation :** \n","Différentes approches sont proposées, allant des modèles classiques (SVM, Naive Bayes) aux architectures plus avancées (LSTM, BERT), chacune avec ses avantages et ses limites.\n"]},{"cell_type":"code","execution_count":9,"metadata":{"id":"SIq2dc2NWjI-","executionInfo":{"status":"ok","timestamp":1751537402191,"user_tz":-120,"elapsed":121,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["df = raw_data.copy()"]},{"cell_type":"markdown","source":["### Analyse quantitative"],"metadata":{"id":"s8Gu4vmG0pWw"}},{"cell_type":"markdown","metadata":{"id":"NCnc8jyaWjI-"},"source":["#### 1. Informations générales sur le jeu de données\n","\n","- Étude de la répartition des classes de sentiment \n","- Vérification des valeurs manquantes ainsi que des doublons \n","- Examen de la structure générale du DataFrame "]},{"cell_type":"code","execution_count":10,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":0},"id":"UkDlv1zIWjI-","executionInfo":{"status":"ok","timestamp":1751537405677,"user_tz":-120,"elapsed":3488,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"ad26c4e0-01bf-426f-fc52-4a3aaecfa2aa"},"outputs":[{"output_type":"stream","name":"stdout","text":["1. APERÇU GÉNÉRAL DU JEU DE DONNÉES\n","--------------------------------------------------\n","Nombre total d'entrées: 1,600,000\n","Nombre de colonnes: 6\n","\n","Colonnes présentes:\n","- target\n","- ids\n","- date\n","- flag\n","- user\n","- text\n","\n","Types de données:\n","target int64\n","ids int64\n","date object\n","flag object\n","user object\n","text object\n","dtype: object\n","\n","Valeurs manquantes par colonne:\n","target 0\n","ids 0\n","date 0\n","flag 0\n","user 0\n","text 0\n","dtype: int64\n","\n","Nombre de lignes dupliquées: 0 (0.00%)\n"]}],"source":["def afficher_info_generales(df):\n"," \"\"\"Affiche les informations générales sur le DataFrame\"\"\"\n"," print(\"1. APERÇU GÉNÉRAL DU JEU DE DONNÉES\")\n"," print(\"-\" * 50)\n"," print(f\"Nombre total d'entrées: {df.shape[0]:,}\")\n"," print(f\"Nombre de colonnes: {df.shape[1]}\")\n"," print(\"\\nColonnes présentes:\")\n"," for col in df.columns:\n"," print(f\"- {col}\")\n","\n"," print(\"\\nTypes de données:\")\n"," print(df.dtypes)\n","\n"," print(\"\\nValeurs manquantes par colonne:\")\n"," print(df.isnull().sum())\n","\n"," # Vérifier les doublons\n"," duplicates = df.duplicated().sum()\n"," print(f\"\\nNombre de lignes dupliquées: {duplicates:,} ({duplicates/len(df)*100:.2f}%)\")\n","\n","afficher_info_generales(df)"]},{"cell_type":"markdown","metadata":{"id":"WWbOMBHvWjI-"},"source":["#### 2. Analyse de la distribution des sentiments\n","\n","- Visualisation de l’équilibre ou du déséquilibre des classes \n","- Répartition des sentiments positifs et négatifs\n"]},{"cell_type":"code","execution_count":11,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":680},"id":"xdnAqsI9WjI-","executionInfo":{"status":"ok","timestamp":1751537411107,"user_tz":-120,"elapsed":5432,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"bdfefe03-349e-404e-e4b3-fcb263503c60"},"outputs":[{"output_type":"stream","name":"stdout","text":["\n","2. Distribution des sentiments (cible)\n","--------------------------------------------------\n","sentiment\n","Négatif 800000\n","Positif 800000\n","Name: count, dtype: int64\n","\n","Pourcentage par catégorie:\n","sentiment\n","Négatif 50.00%\n","Positif 50.00%\n","Name: proportion, dtype: object\n"]},{"output_type":"display_data","data":{"text/plain":["
"],"image/png":"iVBORw0KGgoAAAANSUhEUgAAA90AAAJOCAYAAACqS2TfAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAat5JREFUeJzt3XlcVmX+//H3zSabgIqoiIIEuCJobmmFWrlXmk6uaW6ToznznWrKVnPSUSunmrTRUUzJKTVTyyW3Ulu0cskUXHDfDUhvEFHhlvP7wx9nvAMTkROLr+fjcT/ynOs61/25b3jMmTfXdc6xGYZhCAAAAAAAFDuXki4AAAAAAIDyitANAAAAAIBFCN0AAAAAAFiE0A0AAAAAgEUI3QAAAAAAWITQDQAAAACARQjdAAAAAABYhNANAAAAAIBFCN0AAAAAAFiE0A0AuCGbzeb0cnd3V2BgoKKjo/X444/rk08+kcPh+M3jw8LCfr+CC/Dqq6/KZrNpzpw5Tvvbtm0rm82mI0eOlEhdeY4cOSKbzaa2bduWaB03a8OGDbLZbHr88cdLuhQnixcvVpcuXRQUFGT+vjZs2FCPPfaYZs2apezs7JIusUCl5fcRAFB8CN0AgEIbNGiQBg0apL59+6pNmzZyOBxKSEhQr169VL9+ff3www+WvO+cOXNks9n06quvWjL+76E8fIayYujQoerZs6c+//xzhYSEqHv37mrbtq1yc3M1b948DR8+XGfPni2R2krDH6B+T/wRAQAkt5IuAABQdvx6lliSDh48qBdeeEELFy5Uu3bt9O233yo2Ntapz549e+Tu7v77FHkdTz75pPr06aMaNWqUaB3XU7NmTe3Zs0fe3t4lXUqZtnjxYs2ePVv+/v5auXKlWrdu7dR+5MgRxcfHq0KFCiVU4W9LSEhQVlaWatasWdKlAACKCaEbAHBL7rjjDi1YsEAVK1ZUfHy8hgwZou3btzv1qVevXglV9z+BgYEKDAws6TKuy93dvVR8T2XdJ598IunqH1l+HbglKSwsTK+99trvXVah1a5du6RLAAAUM5aXAwCKxZQpU+Tj46Mff/xR33zzjVPb9ZbUbtq0Sd27d1doaKgqVKig6tWrq0WLFhozZowyMzMlXV2eOnjwYEnSuHHjnK4tz5t5v/a64jNnzmjYsGEKCQmRm5ub3n77bUnXv6b7WvPmzdOdd94pb29vBQUFadCgQTp58mS+fo8//rhsNps2bNhQ4Di//ryF+Qw3uqb7gw8+0N133y0/Pz95e3urcePGmjhxoi5duvSb9X311Vdq3769KlasKD8/P3Xt2lW7d+++7ndwPUlJSerevbsqVaqkihUr6p577tGqVat+8xjDMPTRRx+pffv2qlSpkjw9PVW/fn29+uqrysrKytc/MzNTEydOVExMjPz9/eXr66s77rhDf/jDH7R69epC1ZmamipJqlq16k1/xrNnz+r5559XgwYN5OXlJX9/f7Vv317Lly/P1/fan9fFixc1ZswY8/c4IiJCkydPlmEYZv+8ywsk6ejRo06/A9f+zK+3HDvvd8rhcOi1115TRESEvLy8VL9+fb3//vtmvy+//FLt2rWTn5+fKlWqpIEDB+qXX34p8PM6HA79+9//1l133SU/Pz95eXkpNjZWb7/9doH3aAgLCzM/w6xZs9S4cWN5eXmpevXqeuKJJ2S32/N9Pxs3bpQk1alTx+kz58nOztZ7772n5s2bq0qVKvL29lZYWJi6deum+fPnX+cnBQBlCzPdAIBi4e/vr86dO2vRokVav3697r777t/sv2zZMnXv3l2GYahFixZq3bq17Ha79u/fr8mTJ2vEiBHy9fVVp06d5HA49O233yomJsZp6XpERITTmKmpqWrevLkcDofuvvtuXbp0qdDLtd9880299957uueee/Twww/ru+++U0JCgr788ktt3rxZISEhN/2d5LmZz1CQJ554Qv/5z3/k6emp9u3by9vbWxs2bNALL7ygZcuWad26dQV+zmXLlumdd95Rs2bN1KVLF+3YsUMrV67U999/r8TERFWvXr1Q9W/dulXt2rVTZmamGjVqpEaNGmn//v3q0qWL/vSnPxV4TG5urgYMGKCPPvpIvr6+atasmSpVqqStW7dq3Lhx+vzzz7VhwwZ5eXlJkq5cuaL7779f33//vQIDA9W2bVt5enrqxIkTWrlypXx8fNSxY8cb1lqrVi1JV5dpDx06VL6+voX6jMnJybr//vt1/PhxhYWFqWPHjjp//ry+++47Pfjgg3rjjTf0zDPP5DsuOztbHTp00O7du9W2bVtduHBBGzdu1JgxY3T+/HmNHz9e0tWf86BBgzR37lz5+PioV69e5hg3s8Lh0UcfNYP1HXfcoY0bN2rIkCGSpIoVK6pv375q1aqVOnbsqM2bN+uDDz7Q4cOH9dVXXzmF3YsXL6pr165av369KleurFatWsnT01Pff/+9/vrXv2r9+vVasmSJXFzyz888++yzeuedd9S2bVtFRETo22+/1X/+8x/t2bNHGzdulM1mk6+vrwYNGqRVq1bp559/Vs+ePQv8WfTv31+LFi0y/5Dj5+enkydP6ptvvlFmZqb69OlT6O8GAEotAwCAG5BkFOaUMX78eEOS0bdv33zHh4aGOu279957DUnGokWL8o3zww8/GBkZGeb2+++/b0gyxo4dW+D7rl+/3qyxR48exsWLF/P1GTt2rCHJeP/99532x8XFGZIMNzc3Y8WKFeb+7Oxso3///oYk4+GHH3Y6ZtCgQYYkY/369QXWU9DnvdFnOHz4sCHJiIuLc9q/aNEiQ5IRHBxsJCcnm/vtdrtx9913G5KMp59+usD6XFxcjCVLlpj7HQ6H0bNnT0OS8fLLLxdYx6/l5uYaDRo0MCQZr7zyilPbtGnTzO990KBBTm2vv/66Iclo27atcfr0aXP/5cuXjaFDhxqSjOeee87c/+WXXxqSjObNm+f7+aWnpxtbt24tVL3ffPON4eLiYkgyqlataowYMcJISEgwkpKSjNzc3AKPcTgcRnR0tCHJeP31140rV66Ybfv37zfq1KljuLq6Grt27TL35/288n5m6enpZtuWLVsMV1dXw9vb2zh//rzTexX0u3GtvN/Hw4cP5ztOktGoUSMjJSXF3J/3vdWoUcOoUqWKsXz5crMtPT3daNiwoSHJ+PLLL53GGzlypCHJ6N27t2G32839GRkZRpcuXQxJxr///W+nY0JDQw1JRvXq1Y29e/ea+1NTU42IiAhDkvHFF18U6vMYhmEcOnTI/D7S0tKc2i5evGhs2rTput8TAJQlLC8HABSbvGumz507d8O+ecuA77///nxtzZs3V8WKFW/6/StUqKB3331Xnp6eN33so48+qi5dupjb7u7ueuedd+Tt7a3PPvtMx48fv+kxi8O//vUvSdLYsWMVGRlp7vf399e0adNks9k0Y8aMApeZ9+3bV927dze3XV1d9fzzz0uSvvrqq0K9/4YNG7R7926Fh4frlVdecWobOXKkWrZsme8Yh8Oh119/XT4+Ppo/f77TjLqHh4feffddVa9eXf/5z3+Um5sr6X+/D23atMn38/Pz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AACA8qBIobthw4bauHGjrly5kq/Nbrfriy++UExMzC0XBwAAAABAWVak0N23b1+dPXtWzz//vNauXStJ2rFjh+bPn6+nn35aktSrV6/iqxIAAAAAgDLIrSgHBQcH6+9//7vmzJmjBQsWSJKWLVsmSWrQoIGGDh2qoKCg4qsSAAAAAIAyqEihW5Jq1aqll19+WZmZmTpz5owMw1C1atXk5+dXnPUBAAAAAFBmFTl05/H19VVERERx1AIAAAAAQLlSqNC9cePGIg0eFxdXpOMAAAAAACgPChW633vvvSINTugGAAAAANzOChW6p06d6rR94cIFTZs2Td7e3urcubOCg4MlSSdPntSqVat08eJFjRo1qvirBQAAAACgDClU6K5atarT9scffyw/Pz+99NJLstls5v7atWurZcuWmjBhglasWKGRI0cWb7UAAAAAAJQhRXpO95YtW9SiRQunwG0O6OKiFi1aaMuWLbdcHAAAAAAAZVmRQrdhGDp58uR120+cOFHkggAAAAAAKC+KFLqbN2+utWvXavny5bp8+bK5//Lly1q2bJnWrVunZs2aFVuRAAAAAACURUV6TvfgwYOVkpKiDz74QB9++KEqVaokSTp37pyuXLmiunXr6vHHHy/OOgEAAAAAKHOKFLq9vb01btw4bdmyRT/++KPS0tIkSTExMWratKnuvPPOAq/3BgAAAADgdlKk0J2nefPmat68eXHVAgAAAABAuVKka7oBAAAAAMCN3dJMt5WWLl2qDz/8UF26dDGvD8/OzlZCQoI2bdqknJwcxcTEaNiwYQoICDCPS0tL08yZM5WUlCRPT0/FxcWpX79+cnV1NfskJSUpISFBx48fV5UqVdSzZ0+1bdvW6f1XrVqlZcuWyW63KzQ0VEOGDFFERITZXphaAAAAAAC3t1I5033gwAGtXbtWoaGhTvvnzp2rbdu26amnntK4ceN07tw5TZkyxWzPzc3VxIkT5XA4NH78eI0aNUobNmzQggULzD4pKSmaNGmSGjZsqNdff11du3bV9OnTtWPHDrPPpk2blJCQoF69emny5MkKDQ3VhAkTlJ6eXuhaAAAAAAAodaH70qVLevfdd/XEE0/Ix8fH3J+VlaUvv/xSgwYNUqNGjRQeHq6RI0dq3759Sk5OliT99NNPOnHihEaPHq2wsDA1adJEvXv31urVq+VwOCRJ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flu1apWWLVsmu92u0NBQDRkyxOkxaYWpBQAAAABweyv0TLevr68qVqx4w9eVK1d0/PhxHTt27KaLqVy5svr166dJkyZp4sSJatSokV5//XUdP35ckjR37lxt27ZNTz31lMaNG6dz585pypQp5vG5ubmaOHGiHA6Hxo8fr1GjRmnDhg1asGCB2SclJUWTJk1Sw4YN9frrr6tr166aPn26duzYYfbZtGmTEhIS1KtXL02ePFmhoaGaMGGC0tPTzT43qgUAAAAAgELPdL/66qu/2W6327V06VLt379fLi4uuueee266mGbNmjlt9+3bV2vWrNH+/ftVpUoVffnll/rLX/6iRo0aSZJGjhypv/71r0pOTlZUVJR++uknnThxQi+//LICAgIUFham3r1767///a8effRRubm5ac2aNQoKCtLAgQMlXZ1N37t3r1asWKHY2FhJ0vLly3XfffepXbt2kqThw4dr+/btWr9+vbp3766srKwb1gIAAAAAwC3dSE36X9j+4osv5HA4dM899+iRRx5R9erVb2nc3Nxcbd68WZcvX1ZUVJQOHTqkK1euKDo62uxTs2ZNBQYGmkE3OTlZtWvXdlriHRsbq1mzZun48eOqU6eO9u/f7zSGJMXExGjOnDmSJIfDoUOHDql79+5mu4uLi6Kjo5WcnCxJhaqlIDk5OcrJyTG3bTabvLy8zH8DAHAjnC8AAOVZeTzPFTl0FxS2e/bsqWrVqt1SQceOHdOLL76onJwceXp66plnnlFISIiOHDkiNzc3+fj4OPX39/eX3W43a/r1NdX+/v5mW95/8/Zd2+fixYvKzs5WZmamcnNz840TEBCgU6dOmWPcqJaCLFmyRIsWLTK369Spo8mTJ6tq1aq/9ZUAAGCqUaNGSZcAAIBlyuN57qZD96/D9r333quePXsqKCioWAoKDg7WG2+8oaysLH333XeaNm2axo0bVyxjl7QePXqoW7du5nbeX3FSU1PlcDhKqiwAQBly+vTpki4BAADLlKXznJubW6EmUAsdus+dO2eG7StXriguLk6PPPJIsYVtsyA3N3Npenh4uA4ePKiVK1eqdevWcjgcunDhgtMMc3p6ujkrHRAQoAMHDjiNl3fzs2v7XHtDtLw+Xl5e8vDwkJ+fn1xcXPLNWF87ix4QEHDDWgri7u4ud3f3AtsMw7jucQAA5OF8AQAo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\n"},"metadata":{}}],"source":["def analyser_distribution_sentiment(df):\n"," \"\"\"Analyse la distribution des sentiments\"\"\"\n"," print(\"\\n2. Distribution des sentiments (cible)\")\n"," print(\"-\" * 50)\n","\n"," # Convertir les codes (0, 4) en catégories (négatif, positif)\n"," sentiment_map = {0: 'Négatif', 2: 'Neutre', 4: 'Positif'}\n"," df['sentiment'] = df['target'].map(sentiment_map)\n","\n"," # Afficher le compte\n"," sentiment_counts = df['sentiment'].value_counts()\n"," print(sentiment_counts)\n"," print(\"\\nPourcentage par catégorie:\")\n"," print(df['sentiment'].value_counts(normalize=True).map(lambda x: f\"{x*100:.2f}%\"))\n","\n"," # Visualiser la distribution\n"," plt.figure(figsize=(10, 6))\n"," sns.countplot(x='sentiment', hue='sentiment', data=df, palette='viridis')\n"," plt.title('Distribution des Sentiments', fontsize=15)\n"," plt.xlabel('Sentiment')\n"," plt.ylabel('Nombre de Tweets')\n"," plt.tight_layout()\n"," plt.show()\n","\n","analyser_distribution_sentiment(df)"]},{"cell_type":"markdown","metadata":{"id":"dLP_05CaWjI_"},"source":["#### 3. Analyse temporelle\n","\n","- Répartition des tweets dans le temps \n","- Identification des patterns temporels selon le sentiment \n","- Analyse détaillée par heure, jour et mois "]},{"cell_type":"code","execution_count":12,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":1000},"id":"gbTaWRiNWjI_","executionInfo":{"status":"ok","timestamp":1751537421449,"user_tz":-120,"elapsed":10341,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"7939105d-4449-4d04-f432-99a474db2e4e"},"outputs":[{"output_type":"stream","name":"stdout","text":["\n","3. ANALYSE TEMPORELLE\n","--------------------------------------------------\n","Période couverte: de 2009-04-06 22:19:45 à 2009-06-25 10:28:31\n"]},{"output_type":"display_data","data":{"text/plain":["
"],"image/png":"iVBORw0KGgoAAAANSUhEUgAABKUAAAJOCAYAAABm7rQwAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3Xd4VGX+/vH3OZlkUmZSIQQIJFQBkaYCNqoKInbX2FbsbdctrqvsfnXVXXddu/50beCq2MDFiqLCClgAEUVQkN47pM9kkkkm5/n9EZIlJmAISSYJ9+u6uCBzzpy5p5wh85nn+TyWMcYgIiIiIiIiIiLShOxwBxARERERERERkSOPilIiIiIiIiIiItLkVJQSEREREREREZEmp6KUiIiIiIiIiIg0ORWlRERERERERESkyakoJSIiIiIiIiIiTU5FKRERERERERERaXIqSomIiIiIiIiISJNTUUpERERERERERJqcilIiItLiWZZV7U9kZCRt2rThmGOO4corr+Stt94iFAod9PqZmZlNF7gW99xzD5Zl8dJLL1W7fMSIEViWxaZNm8KSq9KmTZuwLIsRI0aENcehmjdvHpZlceWVV4Y7SjVvv/0248aNIzU1ter1evTRR/PLX/6SyZMnU1paGu6ItWour0dpeJXP7bx58w64T+X7QLjfL0VEpPVQUUpERFqNCRMmMGHCBC655BJOOukkQqEQU6ZM4cILL6R37958/fXXjXK7L730EpZlcc899zTK8ZtCa7gPLcU111zDBRdcwEcffUR6ejrnnnsuI0aMwHEcXn31Va677jpyc3PDku1IKzioyCYiIhJernAHEBERaSg/HWUEsH79ev785z/z5ptvMnLkSObPn8+AAQOq7bNy5UoiIyObJuQB/PrXv+biiy+mffv2Yc1xIB07dmTlypXExsaGO0qL9vbbb/Pvf/+bhIQEZs6cyYknnlht+6ZNm3jhhRdwu91hSnhwU6ZMIRAI0LFjx3BHERERkVZARSkREWnVunXrxrRp0/B6vbzwwgtcffXVLFmypNo+vXr1ClO6/2nTpg1t2rQJd4wDioyMbBaPU0v31ltvARVFyJ8WpAAyMzP529/+1tSx6qxz587hjiAiIiKtiKbviYjIEeGRRx4hLi6O7777ji+//LLatgNNWVqwYAHnnnsuGRkZuN1u0tLSGDx4MBMnTsTv9wMV03+uuuoqAO69995qva0qR27t39do165dXHvttaSnp+NyuXj88ceBA/eU2t+rr77KscceS2xsLKmpqUyYMIHt27fX2O/KK688aG+Yn97futyHn+sp9corr3DyyScTHx9PbGws/fr14/7776ekpOSg+T7//HNGjRqF1+slPj6eM888kx9//PGAj8GBrFixgnPPPZekpCS8Xi+nnHIKH3/88UGvY4zhjTfeYNSoUSQlJREdHU3v3r255557CAQCNfb3+/3cf//99O/fn4SEBDweD926deMXv/gFn3zySZ1y7t27F4C2bdse8n3Mzc3lT3/6E3369CEmJoaEhARGjRrFBx98UGPf/Z+v4uJiJk6cWPU67t69Ow888ADGmKr9K6dvAmzevLnaa2D/5/xA090qX1OhUIi//e1vdO/enZiYGHr37s2LL75Ytd+cOXMYOXIk8fHxJCUlccUVV5CTk1Pr/Q2FQjzzzDOccMIJxMfHExMTw4ABA3j88cdr7RGXmZlZdR8mT55Mv379iImJIS0tjRtuuIH8/Pwaj89nn30GQJcuXard50qlpaU8/fTTHH/88aSkpBAbG0tmZibjx49n6tSpB3imDvxcFBYW8tvf/pZOnTpVvd4ee+wxHMepcb2lS5dy++23c+yxx9K2bVvcbjddu3bl5ptvZseOHT97O7feeitdunQhMjKS3/3ud3XKerhWrlzJlVdeSadOnXC73bRr146LL76YFStW1Nj3597z9n8+K9XlvRRg69at/PrXv6Zbt25ER0eTnJzM+PHjWbBgQUPeXRERaQAaKSUiIkeEhIQEzjjjDKZPn87cuXM5+eSTD7r/jBkzOPfcczHGMHjwYE488UTy8/NZu3YtDzzwADfeeCMej4exY8cSCoWYP38+/fv3rzY1sHv37tWOuXfvXo4//nhCoRAnn3wyJSUldZ4O9/DDD/P0009zyimncM455/DVV18xZcoU5syZw8KFC0lPTz/kx6TSodyH2txwww08//zzREdHM2rUKGJjY5k3bx5//vOfmTFjBv/9739rvZ8zZszgiSee4LjjjmPcuHEsXbqUmTNnsmjRIpYvX05aWlqd8n/zzTeMHDkSv99P37596du3L2vXrmXcuHHcdNNNtV7HcRwuv/xy3njjDTweD8cddxxJSUl888033HvvvXz00UfMmzePmJgYAMrLyzn11FNZtGgRbdq0YcSIEURHR7Nt2zZmzpxJXFwcY8aM+dmsnTp1AiqmwV1zzTV4PJ463cc1a9Zw6qmnsnXrVjIzMxkzZgw+n4+vvvqKs846i4ceeojbbrutxvVKS0s5/fTT+fHHHxkxYgRFRUV89tlnTJw4EZ/Px3333QdUPM8TJkzg5ZdfJi4ujgsvvLDqGIcyQu6iiy6qKjx169aNzz77jKuvvhoAr9fLJZdcwtChQxkzZgwLFy7klVdeYePGjXz++efVChDFxcWceeaZzJ07l+TkZIYOHUp0dDSLFi3i97//PXPnzuWdd97Btmt+v3r77bfzxBNPMGLECLp37878+fN5/vnnWblyJZ999hmWZeHxeJgwYQIff/wxu3fv5oILLqj1ubjsssuYPn16VaEzPj6e7du38+WXX+L3+7n44ovr/NgEg0FGjRrF+vXrGTVqFKWlpXz66afceuutLFu2rEZx5p///CdvvfUW/fr1q3q/Wrp0Kc888wzvvvsu33zzDR06dKhxO8XFxQwfPpzNmzczfPhwBg0aRFJSUp1z1te7777LxRdfTDAYZMCAAQwdOpStW7fy5ptvMmPGDD766COGDRvWILd1sPfShQsXcuaZZ5KXl8dRRx3FmWeeyd69e/nkk0/4+OOPee2118jKymqQHCIi0gCMiIhICweYuvyXdt999xnAXHLJJTWun5GRUe2yYcOGGcBMnz69xnG+/vprU1hYWPXziy++aABz991313q7c+fOrcp43nnnmeLi4hr73H333QYwL774YrXLhw8fbgDjcrnMhx9+WHV5aWmpueyyywxgzjnnnGrXmTBhggHM3Llza81T2/39ufuwceNGA5jhw4dXu3z69OkGMB06dDBr1qypujw/P9+cfPLJBjB/+MMfas1n27Z55513qi4PhULmggsuMIC56667as3xU47jmD59+hjA/OUvf6m27V//+lfV4z5hwoRq2x588EEDmBEjRpidO3dWXR4MBs0111xjAHPHHXdUXT5nzhwDmOOPP77G81dQUGC++eabOuX98ssvjW3bBjBt27Y1N954o5kyZYpZsWKFcRyn1uuEQiFzzDHHGMA8+OCDpry8vGrb2rVrTZcuXUxERIT54Ycfqi6vfL4qn7OCgoKqbYsXLzYREREmNjbW+Hy+ardV22tjf5Wvx40bN9a4HmD69u1r9uzZU3V55ePWvn17k5KSYj744IOqbQUFBeboo482gJkzZ0614918880GMFlZWSY/P7/q8sLCQjNu3DgDmGeeeabadTIyMgxg0tLSzKpVq6ou37t3r+nevbsBzKefflqn+2OMMRs2bKh6PLKzs6ttKy4uNgsWLDjg47S//Z+Lfv36mb1791ZtW7dunenQoYMBqp0LxlQ8drt27ap2WXl5ubn33nsNYK666qoD3s4JJ5xg8vLy6pSvUuVjcaD3jf1v46evkY0bN5q4uDjj8XjM7Nmzq2376KOPTGRkpOnUqZMJBoNVlx/oPa9S5fO5v597Ly0oKDDt27c3ERER5tVXX622bfHixSYpKcl4PJ5qr1EREQkvFaVERKTFq2tR6tlnnzWAGTt2bI3r//RDVu/evQ1Q7QPxgdS1KOV2u822bdtq3efnilKXXnppjetkZ2eb2NhYY1mW2bJlS9XlTVmUqizePffcczWus2zZMmNZlvF4PNU+PFbmu+yyy2pc55tvvqn1dg6ksujRtWtXEwqFamwfMmRIjaJUWVmZadOmjYmLi6vxod8YYwKBgElLSzNJSUlVBaBp06YZwPzud7+rU66Def31101KSkrV67byT7t27czEiRNrvObeeecdA5gLLrig1uO9/fbbBjC/+c1vqi6rfL5s265WoKk0fvz4Wl8jh1uU+u9//1vjOgMHDjSAufzyy2tse+KJJ2q87nbv3l1VxAgEAjWus3PnThMVFWX69etX7fLKIsakSZNqXOfhhx+u9fV9sKLUokWLDGDOPffcGtsOxf7FolmzZtXY/swzzxjAjB49us7H7Nixo0lJSTng7SxevPiQc1Y+FnX589PXyG9/+1sDmCeffLLWY//mN78xgHn77berLjucotSB3ksfe+yxWgvhlR599FEDmEcfffQgj4SIiDQl9ZQSEZEjhtnXQ+enfUpqc+yxxwLwy1/+ksWLF9fa8+VQDRo0qN6rltU2TSglJYXTTz8dY0yNPllNoaysjK+++gqomOb0U/369aNfv374/X6WLl1aY/vpp59e47KePXsCsHPnzjpl+OKLLwC48MILiYiIqLH9kksuqXHZkiVLyM7O5sQTT6Rdu3Y1tsfExHDssceSl5fH2rVrARgwYAC2bfPiiy8yadKkA/ZBqotLLrmEzZs38+qrr3LVVVfRt29fLMti9+7d/POf/+S4445jz549VfvPmjULgPPPP7/W451yyikAfP311zW2ZWRkcNRRR9W4/FAf57qIjIystedY165dgdqf78pt++eYN28eZWVljB07tmr65P7S0tLo0aMHP/zwA8XFxTW2N8TrCiqmLcbFxfHhhx/y0EMP1drH6VAkJydz2mmn1bi88jW6YMGCGu8zOTk5vPjii/zhD3/gmmuu4corr+TKK6+krKyMnJwccnNzaxyvffv2HHfccfXOOWbMGCZMmFDrnwsuuKDW6xzOa7Q+DvRe2tQ5RETk8KmnlIiIHDGys7OBig+HP+cf//gHP/zwAzNmzGDGjBkkJSVx8sknc/bZZ3P55ZcTHR19yLd/OCuXZWRk1Hp5ZcPyw/3AXB85OTmUlpbSpk0b4uLiat0nMzOTZcuW1dqQvbY+WF6vF6jov1MXlff75x6f/VU26Z49e/bPFiizs7M56qij6NmzJw8++CB/+tOfuP7667nxxhvp27cvo0eP5sorr6Rfv351ylspLi6Oyy67rKqYt3v3bl588UX++te/sm7dOv7v//6PSZMmVcu7//4HyvpTB+o1dqiPc12kpaXVWhis7NVUWxGhctv+OSrv76RJk6oegwPJzc2tcdyGeF0BxMfHM2nSJK6//npuv/12br/9dnr27MnIkSP55S9/yUknnVTnY8GBX6MJCQkkJiaSn59PXl4eKSkpALzxxhtcf/31VYsq1Mbn89V4PzvcFRInTpx4wAUNNm3aVLWC5E8vh9qf4/3V9hqtjwPdx8ocP/fcNFQOERE5fCpKiYjIEeO7774DoE+fPj+7b6dOnfjmm2+YM2cOH3zwAZ999llVgerBBx9k4cKFVR8e66o+hayG1hAjvg7FwYo+tTWpbgqVj0H37t1/9sPr/s/xH/7wBy666CLeffddZs+ezRdffMFjjz3G448/zmOPPcZvf/vbemdq164dEydOJDY2lt/+9rd8+OGHNfKOHTu21pFdldq0aVPjsqZ8jH/utuqapfL+DhgwgP79+x90X7fbXe/bqYtLLrmEU089lffee49Zs2bx2Wef8dxzz/Hcc89x66238sgjjzTYbe1v8+bNXHnllQA8/vjjnHnmmXTs2LFq5NiJJ57IwoULq62gWCkc7zOVz9mECRMOut+QIUMO+Zi1OdB9rLzOhRdeeMBCORxa834REWlcKkqJiMgRoaCggE8++QSAkSNH1uk6LpeL008/vWo60ObNm7n66quZM2cODzzwAA8++GCj5f2pzZs31zoaZ/PmzQDVVuGKiooCqHWExdatWxssU0pKClFRUWRnZ1NUVFTrh8C6jqCor/bt2wP/exx+qrbLK0fS9OrV64DL0R9Ip06duOWWW7jlllsIhUJMnTqVq666ittvv50rrrjisFc5GzVqFFB9JEdl3muvvfaA06dak8r7e/LJJ/Pkk0+GOQ20bduWa6+9lmuvvRZjDJ988glZWVk8+uijXH311Rx99NF1Os6WLVtqvbywsJD8/HxiYmJITEwEYObMmZSWlnLbbbfVWuzcsGFDve9PY0hPT2f9+vU88sgjdS7WH+x9qry8nF27dtUrx+rVq5k4cWLVFGwREWne1FNKRESOCH/4wx8oKiri+OOP54QTTqjXMTIyMrjjjjsAWL58edXllR+uQqHQ4Qc9gDfffLPGZbm5ucyaNQvLsqqN+Kks1KxZs6bGdWbPnl3r8etzHyIjIxk6dCgAU6dOrbF9+fLlLFu2DI/Hw4ABA+p83ENR2SPmrbfeqnVkRW25jj/+eBISEvjss89q7clTVy6Xi8svv5zjjz+e0tLSqv5TB1PbyJb9rVu3DqhexKvsQ/TOO+/UO2tdRUZGNurruC5GjhxJREQEH3zwAWVlZY16W4f6urcsi7Fjx3LmmWcCsGLFijrfVk5ODp9++mmNyytfoyeccELV9Me8vDyg9qmIn3/+Obt3767z7TaF+rxGD/Y+NXfu3Ho99015roiISMNQUUpERFq1DRs2kJWVxQsvvEBcXBwvvPBCna732GOP1fpN/cyZM4GKETOVKkcprV69ugES127atGlVI72g4kP073//e4qKihg/fny1HivDhw8H4JlnnqnWkHvp0qX85S9/qfX49b0Pt9xyCwD33HNPtdEbPp+PX//61xhjuOGGGxptStGIESPo1asX69ev57777qu27bnnnmPhwoU1ruN2u7n99tvx+Xycf/75tY462b59O6+88krVz3PnzuW///1vjcLXxo0bWblyJZZlHbB/0/6uvfZa7rvvvlp7gK1evZo//OEPQMX0o0oXXHABffr04bXXXuNvf/tbjb5Ixhjmz5/P/Pnzf/b2f06HDh3YvXs3+fn5h32s+urYsSNXX301mzZt4pJLLqm1ALNu3bpaexsdqoO97r/77jvefvttSktLq12em5vLokWLgOrvA3Vx2223VTsnN27cyF//+lcAfvWrX1VdXtmY/dVXX6WoqKjq8u3bt3PjjTce0m02hT/84Q/ExMRw22238fbbb9fYHgwGmT59Otu2bau6bNiwYUDFfawcUQkVj8lvfvObeuW44YYbSE1N5cEHH+T555+vcb6GQiE++eSTal8qiIhIeGn6noiItBqVPVgcx6GwsJA1a9awatUqjDH06NGD119/nWOOOaZOx7r33nu57bbb6N+/Pz169MAYw7Jly1izZg3JycncdtttVfsOHTqU1NRUpk+fzogRI+jatSu2bXP11Vdz4oknNsh9u/766znjjDMYNmwY7du3Z9GiRWzcuJEOHTrw1FNPVdt35MiRDB8+nM8++4w+ffpw0kknkZ2dzaJFi/jNb37Dww8/XOP49b0PF154Iddffz3PP/88ffv2ZdSoUcTGxjJv3jz27t3L0KFDqz50NwbbtnnppZcYPXo0d999N9OnT6dv376sW7eOb775hptvvpmnn366xvUmTpzIqlWreOWVV+jduzcDBw6kS5culJaWsnr1an788Uf69evHL3/5SwCWLVvG73//e9q2bcuxxx5LSkoKe/fu5bPPPiMYDHLLLbdUm0J5IDk5Ofz73//m7rvv5uijj6Znz55ERESwefPmqlUeBw8ezF133VV1HZfLxbvvvsuYMWP4y1/+wlNPPUW/fv1ITU0lOzubpUuXsmfPHh577LFDbr79U2effTZPPvkkgwYN4sQTTyQ6OpqjjjqKP/7xj4d13EP1xBNPVDXV/vjjjxkwYACdO3emqKiIH3/8kXXr1nHOOecc9nTGs88+m5dffplLL72U008/nYSEBAAmT57M5s2bueCCC0hISOC4444jLS2N/Px8Pv/8c3w+H2edddYhjbocOnQopaWldO/enVGjRlFWVsann35KIBDg8ssvr7Zi3Nlnn83RRx/NN998U9X7rKSkhLlz5zJgwABOPPFEFixYcFj3vSF1796dN954g0svvZQLLriA7t2707t3b+Li4ti+fTtLliyhqKiI7777rqp4261bN6644gqmTJnCgAEDGDZsGIFAgK+++opx48YRCAQOOC33QBITE3nvvfc466yzuOGGG7jvvvvo27cvSUlJ7Nq1iyVLlpCfn88777xD3759G+OhEBGRQ2VERERaOKDaH5fLZZKTk03fvn3NhAkTzNtvv21CodBBr5+RkVHtsilTpphLL73UHHXUUcbr9Rqv12v69Oljbr31VrNt27Yax1i8eLE57bTTTEJCgrEsywDmxRdfNMYYM3fuXAOYCRMmHDDD3XffXe06lYYPH24As3HjRvPiiy+aAQMGmOjoaJOSkmJ++ctfmq1bt9Z6vPz8fHPjjTeadu3aGbfbbY4++mjzzDPPHPD+/tx92LhxowHM8OHDa729KVOmmBNPPNF4PB4THR1tjj76aPP3v//dBAKBGvtOmDDBAGbu3Lm1HutA+Q7m+++/N2eddZZJSEgwcXFx5oQTTjAffPDBzz727733njnzzDNNamqqiYyMNKmpqebYY481t99+u/n222+r9lu7dq258847zUknnWTat29voqKiTMeOHc3o0aPNW2+9ZRzHqVPObdu2mUmTJpkLL7zQ9OnTxyQmJhqXy2Xatm1rRo8ebZ599llTWlpa63Xz8/PNfffdZwYNGlT1OGdmZpoxY8aYf/3rX2bv3r1V+/7c83Wg15vf7ze//vWvTadOnYzL5apxjP1fj/s72HN2sOf7YM9PKBQyL7/8shk1apRJTk42kZGRpkOHDuaEE04w9957r1m9enW1/TMyMsyBfrU92O089thjpk+fPsbtdle9hxhjzM6dO819991nRo0aZdLT001UVJRp166dOemkk8y///3vAz5PP7X/c5Gfn29uvvlm06FDBxMVFWWOOuoo8/DDD9f6/pSbm2tuuukmk5mZadxut+natau54447TFFRUa3Pw8895z+n8pgHOi/3v40DPdfr1q0zN998s+nRo4eJjo42Xq/XHHXUUebiiy82b775pgkGg9X2DwaDZuLEiaZTp04mKirKdOvWzdx3330mFArV+nzW5b3UmIrn7vbbbzdHH320iY2NNbGxsaZbt27mnHPOMS+99JLx+Xx1eUhERKQJWMb8THMDERERERGpl02bNtGlSxeGDx/OvHnzwh1HRESkWVFPKRERERERERERaXIqSomIiIiIiIiISJNTUUpERERERERERJqcekqJiIiIiIiIiEiT00gpERERERERERFpcipKiYiIiIiIiIhIk1NRSkREREREREREmpyKUiIiIiIiIiIi0uRc4Q7Q2uXl5REKhcId47C0bduWvXv3hjuGSKuk80uk8ej8Emk8Or9EGo/OL2kNXC4XSUlJP79fE2Q5ooVCIcrKysIdo94sywIq7ocWahRpWDq/RBqPzi+RxqPzS6Tx6PySI42m74mIiIiIiIiISJNTUUpERERERERERJqcilIiIiIiIiIiItLkVJQSEREREREREZEmp6KUiIiIiIiIiIg0ORWlRERERERERESkyakoJSIiIiIiIiIiTU5FKRERERERERERaXIqSomIiIiIiIiISJNTUUpERERERERERJqcilIiIiIiIiIiItLkVJQSEREREREREZEmp6KUiIiIiIiIiIg0ORWlRERERERERESkyakoJSIiIiIiIiIiTU5FKTko27ar/S0iIiIiIiIi0hBc4Q4gzZPL5SIq1kNstJvcQClJKW0IlAQpDfgJhULhjiciIiIiIiLS6ti2jW3bOI6D4zjhjtPoVJSSGlwuF/FJyby8aAvTlmzDFwzhdbvIGpTOhCGdKczLVWFKREREREREpIHsPzDEVxIiMdp1RAwMUVFKaoiK9fDyoi1MXrip6jJfMFT1c9aANEKF+WHJJiIiIiIiItKaHMkDQ9QoSKqxbZvYaDfTlmyrdfu0JduIjXarx5SIiIiIiIhIA9h/YIgvWFF8qhwY8vKiLUTFesKcsPGosiDV2LaNryRUdSL8lC8YIidQxnur8vh2u5+SUOuf4yoiIiIiIiLSGI70gSHNdvreu+++y+uvv864ceO48sorAbjnnnv48ccfq+136qmncv3111f9nJ2dzaRJk1ixYgXR0dEMHz6cSy+9lIiIiKp9VqxYwZQpU9i6dSspKSlccMEFjBgxotpxP/74Y2bMmEF+fj4ZGRlcffXVdO/evdHub3PhOA6J0S68blethSmv20VidCTTl2eTX1yGy4ZebWLo3z6OAWlxdEuOJsK2wpBcREREREREpGWpy8AQfzBU1fy8tWmWRal169Yxe/ZsMjIyamwbPXo0WVlZVT9HRUVV/dtxHO6//34SExO57777yMvL46mnniIiIoJLL70UgD179vDPf/6T0047jVtuuYXly5fz7LPPkpiYyIABAwBYsGABU6ZM4brrrqNHjx58+OGH/P3vf+fxxx8nISGhce98mDmOQ6AkSNag9Go9pSplDUpnd0ERx3eIZdmuIvYUhVi+p5jle4p5bVk2niibY9rFMaB9LAPS4kjzRtW8ERERERER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MABmzpzJhg0bOHr0KDt37mTz5s2kpKTUu7+EhATKysrYtGkTBQUFlJeXN+XTEREREZFfcTgc2IoLsebnEWoxY83Pw1ZcpISUiIhcMFVKeaDm2sTzxRdfZObMmUycOBG73U6/fv1466238Pb2BmrK6GfMmEFmZiYBAQEMGjSIp59+ut599e7dmwkTJvCnP/0Jq9XKtGnTeOihh5rw2YiIiIhIfU5Oi9T0SBERuVgGl8vlcncQLVlubi5VVac2HC8uLiYoKOii9280GmuX322sCwNvb+96n0NL01Dvici5MhgMxMbGkpmZiX4VizQsnV8ijUfnl0jj0fklLYW3tzeRkZFnHadKKQ+nJp4iIiIiIiIi4onUU0pERERERERERJqcklIiIiIiIiIiItLklJQSEREREREREZEmp6SUiIiIiIiIiIg0OSWl3EQrKTQ/ek9EREREREREmo6SUm5iMpkoKytTIqQZcLlclJWVYTJpMUoRERERERGRpqK/wt3E39+fyspKSkpK3B3KWZnNZux2u7vDaFQ+Pj74+Pi4OwwRERERERGRS4aSUm7kCYkQg8FAbGwsmZmZquoSERERERERkQaj6XsiIiIiIiIiItLklJQSEREREREREZEmp6SUiIiIiIiIiIg0OSWlRERERERERESkyanReSMzmVrGS9xSnodIc6TzS6Tx6PwSaTw6v0Qaj84v8XTn+jNscGlJNRERERERERERaWKavidnVF5ezqOPPkp5ebm7QxFpcXR+iTQenV8ijUfnl0jj0fkllxolpeSMXC4X6enpqKBOpOHp/BJpPDq/RBqPzi+RxqPzSy41SkqJiIiIiIiIiEiTU1JKRERERERERESanJJSckbe3t6MGjUKb29vd4ci0uLo/BJpPDq/RBqPzi+RxqPzSy41Wn1PRERERERERESanCqlRERERERERESkySkpJSIiIiIiIiIiTU5JKRERERERERERaXJKSomIiIiIiIiISJMzuTsAab7Wrl3Lhx9+SGFhIa1bt+bOO+8kJSXF3WGJeLS0tDRWrFhRZ1tcXBwvv/yyewIS8WB79uxh1apVpKenY7Vaefjhh+nTp0/t/S6Xi7S0ND799FPKysro2LEjd999N7GxsW6MWsQznO38euWVV/jiiy/qPKZ79+7MmDGjqUMV8TgrV67km2++4cSJE5jNZtq3b8/4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2GOPnfbxQ4cOZe3atSxYsIBDhw4RGhrKxo0b8fHxadDj/JrFYqFTp06sWrWK6upqwsLC2LFjBzk5Oee8j18bP3488+bN48knn2Tw4MHY7XbWrl2LxWJhzJgxteMGDBjA22+/zQsvvMB1111HZWUl69atIzY2lvT09As+fn0sFguTJk3i73//O48++igDBgwgKCiIvLw8tm3bRocOHbjrrruAmkb6Tz31FA8//DBDhw4lKiqKoqIi9u/fT0FBAc8//3yDxiYiIiJ1KSklIiIiLcINN9xAbGwsq1evZvny5UBNU+xu3brRq1ev2nGpqancfvvtfPTRRyxevJjk5GQee+wxlixZcs7H6tKlC3PnzmXFihV88sknVFRUEBISQkpKCtdcc80ZH+vj48PMmTNZtGgRa9euxWw2c9VVV5Gamsqzzz7bYMepz9SpU1m0aBGffPIJLpeLbt268cQTT3DPPfec976A2senpaWRlpaGl5cXnTt35rbbbqvTrDwwMJBHHnmExYsXs3TpUqKiorj11lvJzMxs8KQUwJVXXkloaCgffPABq1atoqqqirCwMDp16sTgwYNrxyUkJPDcc8+xfPlyNmzYQElJCcHBwSQlJXHzzTc3eFwiIiJSl8H16xpuEREREZFfycrK4v7772fKlCn85je/cXc4IiIi0gKop5SIiIiInFVhYSEAQUFB7g1EREREWgxN3xMRERGRM/rss8/4/PPP8fHxoV27du4OR0RERFoIVUqJiIiIyBn97//+L6WlpTz44IP4+/u7OxwRERFpIdRTSkREREREREREmpwqpUREREREREREpMkpKSUiIiIiIiIiIk1OSSkREREREREREWlySkqJiIiIiIiIiEiTU1JKRERERERERESanJJSIiIiIiIiIiLS5JSUEhERERERERGRJqeklIiIiIiIiIiINDklpUREREREREREpMn9f/DT27dY5KVHAAAAAElFTkSuQmCC\n"},"metadata":{}}],"source":["def analyser_temporalite(df):\n"," \"\"\"Analyse la distribution temporelle des tweets\"\"\"\n"," print(\"\\n3. ANALYSE TEMPORELLE\")\n"," print(\"-\" * 50)\n","\n"," # Convertir la colonne 'date' en format datetime\n"," df['date_obj'] = pd.to_datetime(df['date'], errors='coerce')\n","\n"," # Extraire les composantes de date\n"," df['year'] = df['date_obj'].dt.year\n"," df['month'] = df['date_obj'].dt.month\n"," df['day'] = df['date_obj'].dt.day\n"," df['hour'] = df['date_obj'].dt.hour\n"," df['weekday'] = df['date_obj'].dt.dayofweek\n","\n"," # Afficher la plage temporelle\n"," print(f\"Période couverte: de {df['date_obj'].min()} à {df['date_obj'].max()}\")\n","\n"," # Distribution par mois\n"," plt.figure(figsize=(12, 6))\n"," monthly_counts = df.groupby(['month', 'sentiment']).size().reset_index(name='count')\n"," sns.barplot(x='month', y='count', hue='sentiment', data=monthly_counts)\n"," plt.title('Distribution des Tweets par Mois', fontsize=15)\n"," plt.xlabel('Mois')\n"," plt.ylabel('Nombre de Tweets')\n"," plt.tight_layout()\n"," plt.show()\n","\n"," # Distribution par jour de la semaine\n"," plt.figure(figsize=(12, 6))\n"," weekday_sentiment = df.groupby(['weekday', 'sentiment']).size().reset_index(name='count')\n"," sns.barplot(x='weekday', y='count', hue='sentiment', data=weekday_sentiment)\n"," plt.title('Distribution des Sentiments par Jour de la Semaine', fontsize=15)\n"," plt.xlabel('Jour de la Semaine')\n"," plt.ylabel('Nombre de Tweets')\n"," plt.xticks(ticks=[0, 1, 2, 3, 4, 5, 6], labels=['Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi', 'Dimanche'])\n"," plt.tight_layout()\n"," plt.show()\n","\n"," # Distribution par heure de la journée\n"," plt.figure(figsize=(12, 6))\n"," hourly_sentiment = df.groupby(['hour', 'sentiment']).size().reset_index(name='count')\n"," sns.lineplot(x='hour', y='count', hue='sentiment', data=hourly_sentiment, marker='o')\n"," plt.title('Distribution des Sentiments par Heure', fontsize=15)\n"," plt.xlabel('Heure de la journée')\n"," plt.ylabel('Nombre de Tweets')\n"," plt.tight_layout()\n"," plt.show()\n","\n","analyser_temporalite(df)"]},{"cell_type":"markdown","metadata":{"id":"lETyJsrVWjI_"},"source":["#### 4. Analyse des mots fréquents\n","\n","- Nuages de mots spécifiques à chaque classe de sentiment \n","- Détection des mots discriminants entre sentiments positifs et négatifs \n","- Identification des n-grammes les plus fréquents "]},{"cell_type":"code","execution_count":13,"metadata":{"id":"E3WHO2pgWjI_","executionInfo":{"status":"ok","timestamp":1751537421459,"user_tz":-120,"elapsed":4,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["def analyser_mots_frequents(df, sentiment, n_range=(1, 2, 3)):\n"," \"\"\"\n"," Analyse les mots et N-grammes les plus fréquents pour un sentiment donné.\n","\n"," Paramètres:\n"," - df: DataFrame contenant les tweets\n"," - sentiment: valeur de sentiment à filtrer ('Positif' ou 'Négatif')\n"," - n_range: tuple indiquant les valeurs de N à analyser (par défaut: unigrammes, bigrammes et trigrammes)\n"," \"\"\"\n"," # Filtrer par sentiment\n"," texts = df[df['sentiment'] == sentiment]['text'].astype(str)\n","\n"," # Télécharger les stopwords si nécessaire\n"," stop_words = set(stopwords.words('english'))\n","\n"," # Fonction pour nettoyer et tokenizer le texte\n"," def preprocess_text(text):\n"," # Convertir en minuscules et supprimer caractères spéciaux\n"," text = re.sub(r'[^\\w\\s]', '', text.lower())\n"," # Tokenizer manuellement\n"," tokens = text.split()\n"," # Supprimer les stopwords\n"," tokens = [word for word in tokens if word not in stop_words and len(word) > 1]\n"," return tokens\n","\n"," # Traiter tous les textes (liste de liste de tokens)\n"," all_tokens = []\n"," for text in texts:\n"," all_tokens.append(preprocess_text(text))\n","\n"," # Analyser les unigrammes (liste de mots individuels)\n"," all_words = []\n"," for tokens in all_tokens:\n"," all_words.extend(tokens)\n","\n"," # Compter les occurrences des mots (liste de couples)\n"," word_counts = Counter(all_words)\n"," most_common_words = word_counts.most_common(20)\n","\n"," # Créer un nuage de mots pour les unigrammes\n"," wordcloud = WordCloud(width=800, height=400, background_color='white').generate_from_frequencies(dict(word_counts))\n","\n"," plt.figure(figsize=(12, 8))\n"," plt.imshow(wordcloud, interpolation='bilinear')\n"," plt.axis('off')\n"," plt.title(f'Nuage de mots pour les tweets {sentiment.lower()}s', fontsize=15)\n"," plt.tight_layout()\n"," plt.show()\n","\n"," # Afficher les résultats pour les unigrammes\n"," # print(f\"\\nMots les plus fréquents pour les tweets {sentiment.lower()}s:\")\n"," # for word, count in most_common_words:\n"," # print(f\"- {word}: {count:,}\")\n","\n"," # Visualiser les mots les plus fréquents avec un barplot\n"," plt.figure(figsize=(12, 8))\n"," word_df = pd.DataFrame(most_common_words, columns=['Mot', 'Fréquence'])\n"," sns.barplot(x='Fréquence', y='Mot', data=word_df, palette='coolwarm')\n"," plt.title(f'Mots les plus fréquents pour les tweets {sentiment.lower()}s', fontsize=15)\n"," plt.xlabel('Fréquence', fontsize=12)\n"," plt.ylabel('Mot', fontsize=12)\n"," plt.tight_layout()\n"," plt.show()\n","\n"," for n in range(n_range[0] + 1, n_range[1] + 1): # Commencer à 2-grammes si n_range commence à 1\n"," all_ngrams = []\n"," for tokens in all_tokens:\n"," if len(tokens) >= n: # Vérifier que le texte est assez long pour former un n-gramme\n"," all_ngrams.extend(list(ngrams(tokens, n)))\n","\n"," # Convertir les tuples en chaînes pour une meilleure lisibilité\n"," all_ngrams_str = [' '.join(gram) for gram in all_ngrams]\n","\n"," # Compter les occurrences des n-grammes\n"," ngram_counts = Counter(all_ngrams_str)\n"," most_common_ngrams = ngram_counts.most_common(20)\n","\n"," # Afficher les résultats pour les n-grammes\n"," # print(f\"\\n{n}-grammes les plus fréquents pour les tweets {sentiment.lower()}s:\")\n"," # for ngram, count in most_common_ngrams:\n"," # print(f\"- \\\"{ngram}\\\": {count:,}\")\n","\n"," # Visualiser les n-grammes les plus fréquents avec un graphique à barres\n"," plt.figure(figsize=(12, 8))\n","\n"," # Créer un DataFrame pour le graphique\n"," ngram_df = pd.DataFrame(most_common_ngrams, columns=['N-gramme', 'Fréquence'])\n","\n"," # Créer un graphique à barres horizontales\n"," color = 'royalblue' if sentiment == 'Positif' else 'red'\n"," sns.barplot(x='Fréquence', y='N-gramme', data=ngram_df.sort_values('Fréquence', ascending=False), color=color)\n"," plt.title(f'Top {n}-grammes pour les tweets {sentiment.lower()}s', fontsize=15)\n"," plt.xlabel('Fréquence', fontsize=12)\n"," plt.ylabel('N-gramme', fontsize=12)\n"," plt.tight_layout()\n"," plt.show()\n"]},{"cell_type":"code","execution_count":14,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":1000},"id":"GgsXlsTqWjI_","executionInfo":{"status":"ok","timestamp":1751537440633,"user_tz":-120,"elapsed":19173,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"eaa7039b-0008-469e-8702-d95e02f9a239"},"outputs":[{"output_type":"display_data","data":{"text/plain":["
"],"image/png":"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f39/TZkyRR999FGx+8zPz9e3335bJNy40r188MEHOnDgQLH933zzjaSyj82y+Mc//qGCggINHjxY27ZtK3b8+PHj+vjjj63bnp6eeuCBB5Sfn68nn3yyyDPbvn27pk2bVmI/jRs31smTJ/Xll18W2T916lTrBy5c6mrGQFlNnTpVR44cKbbfFs8aAKoqXt8DAOASH374oTp37qzPPvtMSUlJ6tixo44dO6bExERdvHhR//rXv6wzVf4qODhYLVq0ULNmzXT77bfL2dlZa9asUXZ2trp3714sGCjN9OnTrTMl6tSpU+prX2+//XaR9Wgu54EHHtCiRYu0ePFiRURE6Pbbb5ejo6PWrl2r8PBw3XLLLfrxxx/LFH45OTlp/PjxevHFF9W1a1f16NFDtWrV0k8//aSjR49qzJgxio+Pv+rrVRYNGzbUF198ofvvv1+DBw9Ww4YN1bRpU9WoUUPp6enaunWrzp49q19++UX16tVTXl6ennzyST377LNq06aNQkNDlZeXp82bN+v3339XaGioHnnkkTLV8OCDD6pDhw7q0aOHatasqe+//15HjhxRs2bN9OqrrxZpO2nSJP34449atWqVwsLC1LVrV509e1Zr1qxRbm6uxo0bp759+xY55/nnn9fChQv17rvvKjExUeHh4dq5c6d+//13jR49WjNmzCj3c7waL7zwglJTUzVnzhw1bdpUrVu3VoMGDZSXl6c9e/YoJSVFLVq0sH6K4Pbt2/W3v/1Nfn5+atOmjWrXrq1jx44pKSlJFy5c0BNPPHFVr8iGhoaqRYsW+vnnn9W+fXs1a9ZMjo6O6tevX5FPF+zatavWrVun3NzcYq/nFa4rVfjvSzk5Oemrr75Sr1699PLLL2v69Olq0aKF/P39lZWVpW3btumPP/7Q1KlTrWtq+fj46Ouvv1bfvn316KOP6rXXXlPz5s3l6+urI0eOaOvWrcrOztbixYutn2h3pXv54IMP9PjjjysyMlJNmzaVk5OTUlNTtX37drm5uenll1++lm/dVbn//vuVnJysN954Q23atFGrVq0UHh4uwzC0f/9+7dixQ56ennr44Yet57z55ptKSkrSV199pfDwcHXq1EnZ2dlas2aNHn30UU2fPr3Y76kJEybowQcf1NChQxUfH6969epp+/btSk1N1d/+9jdNnTq1WG19+/bVP//5Tz37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AAAAqCyqbCjl4eGh0NBQJScnKzw8XMnJyerTp48WLlyo3NxcnTt3TkeOHFFkZGSJ52dlZalv374KCgqSpGLB0MWLF/Xwww8rICBAktS7d28tXLiw1HpWrlwpDw8PPfXUU3Jy+vOxBgYGWo8vXbpU/fv312233SZJevDBB5WcnKzly5dr1KhR1/QMvvnmG3Xv3l09evSQJA0dOlQ7d+5UXl5eqedYLBZZLBbrtslkkru7+zX1DwAAAAAAcK2qbCglSZGRkUpJSVHfvn2Vmpqq+++/Xxs3blRqaqpycnLk6+tb6iykPn366MMPP9QPP/ygm266Sbfccos1gJIkV1fXItu+vr46ffp0qbUcPHhQERER1kDqr86dO6eTJ08qIiKiyP4mTZro4MGDZb1tq/T0dPXs2bPIvkaNGik5ObnUcxYvXlwkXGvQoIEmT558zTUAAAAAAABciyodSjVr1kxr167VwYMH5ejoqKCgIDVr1kzJyck6e/ZsqbOkJCk6OlqdOnXS1q1btW3bNi1YsEBPPfWU2rdvL0lFXuUrZBhGqddzdnYu172YTKZifeTn55frmiUZOHCgoqKiivULAAAAAABgSw72LqA8IiIidP78eS1btswaQBXOnkpOTlazZs0ue35gYKCioqL00ksvqX379lq7du011xISEqLU1NQSgyQPDw/5+voqNTW1yP49e/aoXr16kmRdoDw7O9t6PC0t7bJ9BgUFad++fUX2Xbp9KWdnZ3l4eFi/eHUPAAAAAADYQ5UOpTw9PRUSEqJ169YVCaV+++03ZWZmljpTKi8vT59++qmSk5N17Ngxpaamav/+/db1pa5F7969df78eb377rvav3+/MjMz9f333ysjI0OS1K9fP3399dfasGGDMjIyNG/ePKWlpenuu++WJAUEBKh27dpasGCBMjMztXXrVi1btuyyfd59991au3at1q5dq4yMDC1YsECHDx++5nsAAAAAAACwlSr9+p70ZwiVlpZmnRXl6empevXq6dSpU0UWGv8rBwcHnTlzRtOnT9epU6fk5eWlDh06KDo6+prr8PLy0ssvv6y5c+cqLi5ODg4OCg0NVZMmTSRJd911l86dO6fPPvtMp06dUr169fT8889b17xycnLSk08+qU8++UTPPvusGjZsqKFDh+qdd94ptc9bb71VR44c0dy5c2WxWNShQwf1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AAAAAAD+qlxrSrm6uqpx48ZasmSJ/ve//5Xa7ssvvyxPNwAAAAAAALjBlCuU+vTTT7V69Wo1btxYDRs25NP3LiMuLk6hoaGKiYmxdykAAAAAAAB2V65QauPGjerSpYvGjBlTUfVUSgRKAAAAAAAAFatca0o5OjqqUaNGFVULAAAAAAAAqolyzZS69dZbtWXLFt15550VVU+ZFRQUaOnSpfruu+90/Phx1axZUz179tSgQYMkSXPnztXmzZt1/Phx+fj4qFOnThoyZIicnP689QULFmjz5s3q27evvvzyS+Xk5Kh169Z69NFH5e7urvj4eKWkpCglJUXffPONJGn69Ony9/cvVsu3336r5cuX6/jx4/Lw8FBERISeeeaZEuu2WCz64osvtH79ep07d07169fXAw88oGbNmlnbpKam6vPPP9f+/fvl7e2tdu3a6f7775ebm5skacyYMerevbsOHz6sLVu2yMPDQwMHDlTv3r0r9BkDAAAAAABUtHKHUrNmzdKkSZPUvXt31alTRw4OxSdfhYWFlaeby/r888+1evVqjRgxQhEREcrOzlZ6err1uLu7u0aPHi1fX18dOnRIH374odzd3dW/f39rm6NHj2rTpk16/vnndfbsWU2dOlVfffWV7rvvPsXGxiozM1P169fXvffeK0ny9vYuVsf+/fs1a9YsjR07Vk2aNFFOTo52795dat2ffvqp0tPT9dRTT8nX11ebNm3SG2+8obfffltms1lHjhzR66+/rqFDh+rxxx/X6dOnNXPmTM2cOVOjR4+2Xmfp0qUaOHCgoqOjtX37diUkJCgwMFAtWrSoiMcLAAAAAABwXZQrlJo4caL139u2bSu13fX69L3z589rxYoVeuihh9StWzdJUkBAgCIiIqxtBg8ebP23v7+/MjIytGHDhiKhlGEYGjNmjNzd3SVJXbp00a5duyRJHh4ecnJykqurq3x8fEqtJSsrS66urmrTpo3c3d3l5+enBg0alNo2MTFRM2bMUK1atSRJ/fr10/bt27V27Vrdf//9+uqrr9S5c2f16dNHkmQ2mxUbG6uJEydq1KhRcnFxkSQ1adJEAwYMkCQFBgZqz549Wr58eamhlMVikcVisW6bTCbrfQMAAAAAANhKuUKpxx9/vKLquCbp6emyWCy66aabSm2zYcMGrVixQkeOHFFubq4KCgqKhTB+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sm5XppluAAAAAACg+ihXKJWUlHTZ4yaTSc7Ozqpdu7YaNGhQ4npTFa1Zs2Zau3atDh48KEdHRwUFBalZs2ZKTk7W2bNnrbOkJGnJkiVasWKFRowYoeDgYLm5uSkhIUH5+flFrunkVPwxGYZRZNvR0bHItslksrZZv3695syZo+HDh6tx48Zyd3fXkiVLtG/fvoq67avm7Oxsk+8DAAAAAADA5ZQrlJoxY8ZVt/Xw8NCAAQOs6zldLxERETp//ryWLVtmDaAiIyP19ddfKycnp8gi4KmpqWrbtq26dOki6c+ZU5mZmQoKCqrQmvbs2aMmTZqoV69e1n1Hjx697DmBgYH65Zdfiuz79ddfi2wHBQVpz549xfoKDAwscZYUAAAAAABAZVGuUGrKlCmKj4+Xl5eXevXqpYCAAElSZmamvv32W509e1YjR45Udna2Vq5cqc8//1zu7u668847K6T4knh6eiokJETr1q3TQw89JOnPUGrq1Km6ePFikZlSZrNZP/74o/bs2aMaNWpo2bJlys7OrvBQKiAgQElJSdq2bZv8/f31/fff69dff5W/v3+p5/Ts2VPLli3T3Llz1aNHD6WlpVlnphW+chcVFaUJEyZo4cKF1oXOV65cqVGjRlVo/QAAAAAAABWtXKHU8uXLVbNmTb344otF9gcHB6t9+/Z64403tGbNGj322GNq27atJk6cqG+//fa6hlLSnyFUWlqamjVrJunPoKpevXo6deqUAgMDre0GDx6so0eP6vXXX5erq6tuv/12tWvXTufOnavQenr27Km0tDS9++67MplMuu2229SrV69iM6H+yt/fX88884w+++wzrVixQo0bN9bAgQP1ySefWF8nDAsL09/+9jctWLBA//3vf+Xr66vo6OhSFzkHAAAAAACoLEzGpYsjlUFsbKzuu+++UkOmb7/9VvPnz9esWbMk/flpcV988YXmzZt3rV1Wa4sWLdKqVav073//u8KvnREVpbzk5Aq/LgAAKM5l/Xp7l1ClmUwmmc1mZWZmFlvnE7gU4wVlwXhBWTFmSubs7Cw/P78rtivXTKmCggJlZGSUejw9Pb3IN8XJyanYJ9uhdN9++63Cw8Pl5eWlPXv2aMmSJerdu7e9ywIAAAAAACi3coVSbdu21bfffquAgAD16NHDGjjl5eVp9erVWrVqlW699VZr+71791rX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mTJF//3vf91dFmqYoqIizZ49W88//3yt/iCOP+70FyZIUtOmTZ0h1bp16+ghnMFut6tZs2bO9XwiIyOVm5urzz//nIWlcU5ffvml2rRpowYNGri7lFqD2/dqIX9/f3l4eDhT29OqSnhRu5z++x89etRl/9GjR53HrFarjh075nL85MmTOnHihMuYqvrrt9fAlWPmzJnavHmzXnzxRV1zzTXO/VarVZWVlSopKXEZ//t++X0vnO6v346pqucsFgv/R+MKZDabFRwcrKioKPXr108RERFavnw5/QIXe/bs0dGjR/XMM8+oT58+6tOnj7KysrRixQr16dNH9evXp19wTnXr1lVoaKgKCwt5f8EZAgICFBYW5rIvLCzMecsnn3lRlV9++UU//fSTunTp4tzH+8vlRyhVC5nNZkVFRSkjI8O5z263KyMjQy1atHBjZXC3oKAgWa1Wbd261bmvtLRUu3btcvZGixYtVFJSoj179jjHZGRkyOFwKDo62jlm27ZtqqysdI756aefFBoayjTmK4jD4dDMmTO1ceNGvfDCC2dMT4+KipKnp6dLv+Tn56uoqMilX3Jzc13+Ef7pp59ksVicHxabN2/uco7TY3g/ujrY7XbZbDb6BS7i4+M1YcIEvfLKK86fZs2aqUOHDs7f6RecS3l5uTOQ4v0FvxcTE3PGsiT5+fkKDAyUxGdeVO3LL79U/fr1dd111zn38f5y+RFK1VIJCQlavXq11qxZo/3792vGjBn69ddfmc5aC5SXlysnJ0c5OTmSTt1zn5OTo6KiIplMJt1xxx36+OOP9d133yk3N1eTJ09WQECA/vKXv0g69V+Z2rRpo+nTp2vXrl3avn273n33Xd10003Oaa4dOnSQ2WzWtGnTtG/fPq1du1YrVqxQQkKCu542LsDMmTP1zTff6NFHH5XFYlFxcbGKi4tVUVEh6dSCoJ07d9bcuXOVkZGhPXv2aOrUqWrRooXzH9jWrVsrLCxMkydPVk5Ojn744QfNnz9ft912m7y8vCRJ3bp108GDB5WSkqK8vDx9+umnWrdunbp37+62544L8/777ysrK0sHDx5Ubm6uc/vmm2+mX+DCYrEoPDzc5adOnTry8/NTeHg4/YIzzJ071/n+kp2drVdffVUeHh7q0KED/YIzdO/eXTt37tTHH3+swsJCffvtt1q9erVuu+02SeIz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\n"},"metadata":{}}],"source":["analyser_mots_frequents(df, 'Négatif')"]},{"cell_type":"markdown","metadata":{"id":"yvXJwMNOWjJA"},"source":["#### 5. Analyse des utilisateurs\n","\n","- Étude de la distribution des tweets par utilisateur \n","- Analyse des tendances de sentiment propres aux utilisateurs "]},{"cell_type":"code","execution_count":16,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":0},"id":"K2GstxOKWjJA","executionInfo":{"status":"ok","timestamp":1751537469471,"user_tz":-120,"elapsed":4209,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"c9a0bd79-380b-4049-ed32-e62a48d8aa3f"},"outputs":[{"output_type":"stream","name":"stdout","text":["\n","6. ANALYSE DES UTILISATEURS\n","--------------------------------------------------\n","Nombre d'utilisateurs uniques: 659,775\n","\n","Top 10 des utilisateurs par nombre de tweets:\n","- lost_dog: 549 tweets\n","- webwoke: 345 tweets\n","- tweetpet: 310 tweets\n","- SallytheShizzle: 281 tweets\n","- VioletsCRUK: 279 tweets\n","- mcraddictal: 276 tweets\n","- tsarnick: 248 tweets\n","- what_bugs_u: 246 tweets\n","- Karen230683: 238 tweets\n","- DarkPiano: 236 tweets\n","\n","Parmi les utilisateurs avec au moins 5 tweets:\n","Ratio positif moyen: 51.23%\n","Ratio négatif moyen: 48.77%\n","\n","Utilisateurs les plus positifs:\n","- 007wisdom: 100.00% positif (6 tweets)\n","- LongandLoud: 100.00% positif (6 tweets)\n","- LoopNashville: 100.00% positif (8 tweets)\n","- Looyda: 100.00% positif (5 tweets)\n","- LoraNorton: 100.00% positif (5 tweets)\n","\n","Utilisateurs les plus négatifs:\n","- zombiemovies: 100.00% négatif (5 tweets)\n","- zombiecommand: 100.00% négatif (5 tweets)\n","- zzkim: 100.00% négatif (5 tweets)\n","- 1284forever: 100.00% négatif (6 tweets)\n","- 123katie123: 100.00% négatif (5 tweets)\n"]}],"source":["def analyser_utilisateurs(df):\n"," \"\"\"Analyse la distribution des utilisateurs\"\"\"\n"," print(\"\\n6. ANALYSE DES UTILISATEURS\")\n"," print(\"-\" * 50)\n","\n"," # Nombre total d'utilisateurs uniques\n"," unique_users = df['user'].nunique()\n"," print(f\"Nombre d'utilisateurs uniques: {unique_users:,}\")\n","\n"," # Top utilisateurs par nombre de tweets\n"," top_users = df['user'].value_counts().head(10)\n"," print(\"\\nTop 10 des utilisateurs par nombre de tweets:\")\n"," for user, count in top_users.items():\n"," print(f\"- {user}: {count} tweets\")\n","\n"," # Distribution des sentiments par utilisateur (pour les utilisateurs avec plus de X tweets)\n"," min_tweets = 5\n"," user_sentiment = df.groupby('user')['sentiment'].value_counts().unstack().fillna(0)\n"," user_sentiment = user_sentiment[user_sentiment.sum(axis=1) >= min_tweets]\n","\n"," # Calculer les ratios\n"," user_sentiment['total'] = user_sentiment.sum(axis=1)\n"," user_sentiment['pos_ratio'] = user_sentiment['Positif'] / user_sentiment['total']\n"," user_sentiment['neg_ratio'] = user_sentiment['Négatif'] / user_sentiment['total']\n","\n"," # Afficher quelques statistiques\n"," print(f\"\\nParmi les utilisateurs avec au moins {min_tweets} tweets:\")\n"," print(f\"Ratio positif moyen: {user_sentiment['pos_ratio'].mean():.2%}\")\n"," print(f\"Ratio négatif moyen: {user_sentiment['neg_ratio'].mean():.2%}\")\n","\n"," # Utilisateurs les plus positifs/négatifs\n"," most_positive = user_sentiment.sort_values('pos_ratio', ascending=False).head(5)\n"," most_negative = user_sentiment.sort_values('neg_ratio', ascending=False).head(5)\n","\n"," print(\"\\nUtilisateurs les plus positifs:\")\n"," for user, row in most_positive.iterrows():\n"," print(f\"- {user}: {row['pos_ratio']:.2%} positif ({int(row['total'])} tweets)\")\n","\n"," print(\"\\nUtilisateurs les plus négatifs:\")\n"," for user, row in most_negative.iterrows():\n"," print(f\"- {user}: {row['neg_ratio']:.2%} négatif ({int(row['total'])} tweets)\")\n","\n","analyser_utilisateurs(df)"]},{"cell_type":"markdown","metadata":{"id":"FFo_xU7uWjJA"},"source":["#### 6. Analyse des requêtes (flag)\n","\n","- Impact des requêtes sur la distribution des sentiments \n","- Identification des requêtes les plus fréquentes "]},{"cell_type":"code","execution_count":17,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":146},"id":"mfq4kgglWjJA","executionInfo":{"status":"ok","timestamp":1751537469612,"user_tz":-120,"elapsed":141,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"e6d59106-48f9-4043-f59a-1ec3ac4e836c"},"outputs":[{"output_type":"execute_result","data":{"text/plain":["flag\n","NO_QUERY 1600000\n","Name: count, dtype: int64"],"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
count
\n","
\n","
\n","
flag
\n","
\n","
\n"," \n"," \n","
\n","
NO_QUERY
\n","
1600000
\n","
\n"," \n","
\n","
"]},"metadata":{},"execution_count":17}],"source":["df['flag'].value_counts()"]},{"cell_type":"markdown","metadata":{"id":"u6Ux57gmWjJA"},"source":["#### 7. Analyse de la longueur des tweets (caractères et mots)\n"," - Visualisation de la distribution des longueurs des tweets \n"," - Gestion des caractères HTML dans les tweets \n"," - Nettoyage des tweets trop longs et souvent difficilement compréhensibles "]},{"cell_type":"code","execution_count":18,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":363},"id":"c4zSoFysWjJA","executionInfo":{"status":"ok","timestamp":1751537483698,"user_tz":-120,"elapsed":14085,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"f80a862b-e45d-416c-966c-524de732b6c5"},"outputs":[{"output_type":"stream","name":"stdout","text":["Longueur moyenne des tweets: 74.09 caractères\n","Nombre moyen de mots par tweet: 13.18 mots\n"]},{"output_type":"display_data","data":{"text/plain":["
"],"image/png":"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3FPiPsPCwtS5c2e9/fbbxe6TvJq8usowQAWQZEpzug0aNMhIMs8//3yR5zdp0sRj24cffmjsdrux2WymU6dOZsiQIeaOO+4wzZs3N5LMjz/+aIwxZurUqebmm282kkxcXJwZPny49d9XX31ljDHmyy+/NJJM7969TcOGDU29evXMoEGDTN++fc0///lPY4wxzz33nJFk3nzzTY84unbtaiSZcePGGZvNZm699VYzZMgQEx0dbSSZhg0bmgMHDng8Z/jw4UaS+fLLL0t8vy483tIcw48//mgkma5duxbZ3+jRo40kExwcbHr37m0GDRpkHA6HkWRuvPFGc+rUqWLje+yxx4yfn5/p1KmTSUxMNE6n00gytWrVMocPHy429uKsX7/ehIWFGUmmbdu2ZsiQISYhIcHYbDYzduxYI8kMHz682PfV/Tle6GLHWpImTZoYSeaJJ54wgYGBpmfPnqZ///6mTp06RpK55ZZbjMvl8njOwYMHTbNmzYwk07hxYzN48GDTvXt34+fnZySZ1157rcjruD+7/v37m4iICHPPPfeYnj17mqCgICPJvPHGG2bBggXG39/fdOnSxQwaNMhERUUZSaZLly5FYijL+eU+Vx988EETEBBg2rRpY4YMGWJuvfVWs3nzZmOMMTNmzDB2u93Y7XbTqVMnc++995rY2FgjydSuXdts37691O9tWT7fc+fOmaFDhxpJJiwszHTr1s3079/fNGrUyEgyHTt2NHl5eaV6fff5cOONN5pOnTqZOnXqmEGDBplu3boZu91u/Pz8zIoVK8xrr71m/P39zW233Wb69+9vatWqZSSZYcOGFdlnamqq9TvSsmVLM2TIEHPTTTcZScbf398kJydbfRcvXmwGDhxoJJm6det6/H7OmjXLGGPM/v37Tc2aNY0kc91115mBAweae+65x8THxxubzVbkulIS92c7atQoExgYaFq3bm2GDBlirr/+eiPJBAYGms8++8zjOadPn7Z+b2+55RYzePBgc/vtt5vQ0NBiP5sLX+di51BxZs2aZXr16mUkmebNm3u8F4sXLzbGGHPrrbcW+d0+d+6cqVGjhnUMF16TsrOzjd1uN23atPF4rV27dlnnS3R0tOnXr5/p3r27dVyvvvpqkfi++eYb63VatmxpBgwYYG655Rbj7+9v/Pz8zPvvv39ZxwLAt5Bvkm+Sb5Jv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mjNnTqme99e//lVHjhwpsn3ZsmWS/vvNovTfb8d27dpVDhEXb/78+dbIDen8xeh3v/udTp06pb59+3rMYeO+UM6cOVM///yztX3Tpk169tlni91/WY9hwoQJkqTJkyd7fPt34sQJjR8/XsYYPfLII1f1do2YmBj98MMPevHFFz3a/vnPf+rbb78t9nnu92jatGnKy8uztq9cuVJ/+9vfrkqsF2rWrJn69OmjEydO6Le//a0KCgqstm+//VYzZ86Un5+fxo0bd9VjkS7v/LqUiRMnym6368EHH/SYmN7t5MmTeuONN4qdj+qXyvL5BgUF6cknn9SJEyc0YMCAYr+VzsjI0Lx580p9TOWpW7duateunfbu3atnn33WIyldvHixFi1apLCwMD300EPWdofDoYCAAP3www/FJn3z5s0rNoH85JNPZIzxuF6Vxt69ezVlyhSPbf/617/07bffqm7duh7fkrsXPvnHP/7h0X/hwoWaO3fuZb1uaZTmWuWef2vfvn1avny5Ne+WW7du3bRu3Tpt2rRJMTExRW7VGjhwoFq3bq13331XL7zwQpG5+Ywx+vrrr/X1119b2x555BHVqVNHr7zyiv71r38V+aOvsLBQn332mcfnVBH/dgCoGOSb5JvFId/0RL5ZspEjR8rhcOiTTz7R3/72tyJFy++++04//fSTpPNTMtjtdq1cudJjUaozZ87o0UcfLXMRuSw53VNPPSVJeuyxx5SamurRdubMmSIF5AYNGujo0aPFfonQqVMn9ejRQ+vXr9eoUaOK7ZOSkqKPP/64tIdk7fPrr7/WuHHjlJubW6TP5s2b9emnn1qPyas9kVdf4wxQASQZSWb48OFm+PDh5oEHHjD9+vUzrVq1MjabzUgy1113nVm/fn2Jz2/SpInHtoiICGO32018fLxJTEw09957r3E6nUaSqVmzpklLS7P6nj592tSpU8dIMl27djUPPvigefjhh83XX39tjDHmyy+/tOIryXPPPWckmTfffNNje9euXY0kM27cOGOz2UzXrl3NkCFDTNOmTY0k06BBA7Nv3z6P57hcLut5derUMf379ze33HKLCQwMNI8//nixx3upY/jxxx+ttl8aPXq0kWRCQkJMnz59zL333mtq165tJJnOnTubU6dOefQfPny4kWS+/PLLYt+L4uK7mO+++85Uq1bNSDLt2rUz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grR//35t3rzZaqtRo4ZCQkJ09uxZa0ojwBso2gIAAOCa98UXX6hr164aNmyYTpw4UaS9SZMm2rRp02XvNzk5+aLtDodDU6ZMueR+ateuraeffvqyXx+42tzzPtarV0+HDh3Sli1brLZatWqpXr16OnLkiHbt2qVWrVp5MVIAKL309HS5XC6dPn1ap0+f9mg7fvy4Rz/mtIW3lGvR9ujRoyooKGDuLQAAAPiUn3/+WU6ns8T2oKAg5eXlVWBEQOWwc+dOSecXzouLi9MjjzyiqKgoZWRkaOnSpdbotJ07d1K0BVBpXFiYLY9+wNVQpqLtsmXLlJaWpv/5n/+xtr3++utavXq1JKlp06Z6+umnmfsDAIBrTGFhoVauXKnMzEzVrl1b3bt3l78/N+7A94WHh3ssoPRLe/bskcPhqMCIgMrBGCNJat68ucaPH29NgeB+PHXqVO3Zs8fqBwCVQW5urvWzn5+frr/+ekVHR2vv3r3asGGDzp07V6QfUNHKNOnQypUrPQqymzZt0urVq3X77bfroYce0tGjR7VgwYJyCxIAAHhfcnKyxowZo/nz52vlypWaP3++xowZc8nbwwFf0KlTJ61YsUJHjx4t0rZ582atWrVKN954oxciA3xbtWrVJElnz54ttt293d0PACqDC4uxr732mqKjo5WZmano6Gi99tprxfYDKlqZhsZkZmYqKirKevztt9+qTp06GjVqlCQpOztb//nPf8onQgAA4HXJycn67LPPFB4erv79+ys2NlapqalavHixPvvsM0lSYmKil6MESpaYmKht27bpySeftOamW7JkiebPn6+0tDQ1bdpU/fv393KUgO8JDw+XJB08eFBJSUnq3bu3NT3CsmXLlJGR4dEPACqD7du3Wz//9re/9WibP39+sf2AilYu9zOmpqbq+uuvtx7Xrl1b2dnZ5bFrAADgZYWFhVqxYoXCw8P16quvWtMh3Hrrrbrpppv0xBNPaMWKFRowYABTJcBnhYaG6qWXXtJHH32k7777ToGBgdq+fbvq1aune++9V3fffbcCAwO9HSbgc2rUqGH9vGPHDo8V1i/8nbmwHwD4OpvN5vHzhVO8XPj4wn5ARSvTX1b169fX+vXr1bNnT23atEnHjh1TfHy81X7s2DFujwEA4BqxcuVKuVwu9e/fv0hR1t/fX/369dO8efO0cuVK9ezZ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7bJG2P7www86d+6cGjVqpLZt2yoxMZE7YYBiuFyucu0HAL7gwi+dYmJidOLECZ06dUrVqlVT9erVtXPnziL9gIpWpqJtv3799Le//U1PP/20evXqZY1OOHTokFasWKF9+/bpd7/7XbkGCvg6p9Mph8OhpUuXesxpK51PYpctWyaHw8E3dQAqncTERH355Zdavny57rrrLo8pEvLz861byxMTE70VInBJDz/8sCSpWbNmatWqle6++27FxMQoLCzMy5EBvm3Xrl3Wz23btrVWXA8NDVV+fr62bt1q9WvTpo23wgSAy7JixQrr5z179ig/P1/S+WlfLsx1V6xYodjY2AqPD5DKWLS98cYbdfbsWb377ruaNWuWR1t4eLjGjBmjzp07l0uAQGVht9uVmJiomTNnKikpSb1791ZUVJQyMjK0bNkypaamasyYMSxCBqDSCQwMVPv27bVp0yaNHz9eLVq0UGRkpLKzs5Wenq5z586pffv2LEIGnxYUFKTTp08rJydH2dnZysnJUW5uLkVb4BLcc9a2atVK27dv9xhRa7fbFRMTo507d3osUAYAvs698FjPnj21YcMGHTt2zGoLCwtTQkKCVqxYUeICZUBFsBljTFmffO7cOf3www/W/F8Oh0PNmzcvMkG9L8rMzFRBQYG3w8A1KCUlRcnJyR7z4jkcDiUmJiohIcGLkQHAlXnqqaeUmZlZZHvt2rX15z//2QsR4VoXEBCg2rVrl8u+jDHat2+fdu7caU2RkJ2drfDwcLVs2VKtWrVSTExMsVMcVSbkuChvH3zwgZYtWyZJio2NVbt27RQYGKj8/Hxt2bJFqampkqTevXsXO4UOAPiiefPmadWqVdb17Jfc27t166YHHnjACxHiWlbaHLdMI23d/Pz85HQ6ud0buEBCQoLi4+OVlpamnJwcRUREyOl0MsIWQKWWnJyszMxMhYWFeSy4mJGRoczMTCUnJzM9AnyazWZTdHS0oqOjdccdd0iSjhw5oi1btmjZsmVav369bDab3n//fS9HCviWmJgYq2grSY0bN7buJtuyZYtHPwCoLAYPHqxVq1YVW7CVZG0fPHhwRYYFeCh10fbkyZOXvXNuN0NV5b5VDACuBYWFhVqxYoXCw8P16quveixCWlhYqCeeeEIrVqzQgAEDiixQCviaM2fOKC0tTTt27NCOHTuUnp6ugoIC2e12NW3a1NvhAT7nwoEH27dvt0bWSvK45jNAAQCA8lXqv6zcizdcjvnz51/2cwAAgG9ZuXKlXC6X+vfvX6Qo6+/vr379+mnevHlauXKlevbs6aUogaIGDx6sCRMmqEuXLpo7d6527NihvXv3yuVyKTAwUNddd53uvvtutWrVSk6nU0FBQd4OGfA5ubm51s+FhYUebRc+vrAfAPi69957r9T9hg8ffpWjAYp3WcNhAgMDFR8fr0aNGl2teAAAgI9xz2Nb0sq5cXFxmjdvXrHz3QK+YvXq1WrZsqVuuukmtWrVSk2bNq0U6zAA3hYREWH9HBAQ4DFn8oVzQV7YDwB83Y4dO6yfq1WrJn9/f+Xn5yswMFCFhYXWAmQX9gMqWqmLtvfcc4+++eYbrV27VocPH1aXLl108803y+FwXM34AACAl7knyU9NTdWtt95apH3z5s0e/QBfNGfOHG+HAFRKLVq0kN1uV1hYmKZOnar//Oc/yszMVO3atXXrrbfq6aef1smTJ9WiRQtvhwoApZaTk2P97C7QStLp06dL7AdUtFIXbYcOHaqhQ4dq165dWrNmjT7++GO99957atmypbp06aIbb7yROWyB/y8/P1/Jyck6evSo6tatq8TERAUGBno7LAAok+7du2vBggVavHixbrrppiJz2i5ZskR2u13du3f3YpQAgKshPT1dLpdLubm5+t3vfuexaM/ixYutx+np6azpAKBSstlsatSokXX3wIEDB2SM8XZYwOVNjyBJLVu2VMuWLfXggw9q06ZNWrNmjebNm6c333xTsbGxGjhwoK677rqrEStQKUyfPl2bNm2yHm/fvl1ffvml2rdvrwkTJngvMAAoI39/f/Xo0UOfffaZnnjiCfXr109xcXHavHmzlixZotzcXPXq1YtFyOCTFi1apC+++KJUfW02m5599tmrHBFQuZR2lBmj0QBUJtWqVbO+dDLGaP/+/SX2A7ylzH9d2e12dejQQR06dFBWVpZmzJih77//Xi1atKBoiyrLXbD19/dXz5491aVLF61Zs0bLly/Xpk2bNH36dAq3ACqlxMRESdKKFSs0b948zZs3T9L5fKBXr15WO+BrTp8+LZvN5u0wgEorPDxc0vlpEp544gmlp6crJydHERERatGihV599VWlp6db/QCgMoiIiNDx48dL1Q/wljIXbc+ePav169dr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OWV6r476/vvvNX/+fN9yUVGRpOP9cm5urn766Sd98cUXqqurU+/evTVs2DBNmzatxdQGd911lwoLC7VgwQJZLBaNHj1at912m1/rBAAAQNfSrtB28uTJOnTokFavXq3Vq1crJCREknxfNcvMzNSkSZP8VyUAAADQAT169GjTDR/O1dChQ1VcXHza7Q8++OBZj+FwOHT33Xf7sywAAAB0ce0KbUNCQpSfn6+srCxt2rRJFRUVkqSYmBiNGDFCiYmJfi0SAAAA6IixY8dq7dq1+s1vfmN0KQAAAMBZtSu0PSExMZGAFgAAAKZ3ySWXaPv27SooKNCECRPUp08f37fFTnbiZmAAAACAkToU2gIAAABdwdy5c30/b968+bT7vfXWW4EoBwAAADijNoe2c+bMOacDWywW/elPfzrnggAAAAB/u/POO40uAQAAAGizNoe2DodDFovlrPu5XC4dOHCgQ0UBAAAA/jRu3DijSwAAAADarM2h7bx588643eVyaeXKldq1a5dCQkI0duzYjtYGAAAA+F19fb0qKyslSdHR0erZs6fBFQEAAAAtdXhO2xNh7erVq+XxeDR27FhNnjxZcXFx/qgPAAAA8Ivdu3frtdde03fffafm5mZJUkhIiFJTU5Wdna0LL7zQ4AoBAACA49od2rYW1t5www06//zz/VkfAAAA0GG7du3SvHnzZLVaNX78ePXt21eStH//fv33f/+3HnnkEc2bN0/JyckGVwoAAAC0I7T997D217/+tW644QbFxsZ2Rn0AAABAh7355pvq3bu3Hn30UTmdzhbbbrzxRj388MN644039PDDDxtTIAAAAHCSNoe2VVVVvrC2qalJmZmZmjx5MmEtAAAATG/Xrl2aMmXKKYGtJDmdTk2YMEFvv/124AsDAAAAWtHm0PYPf/iD3G63kpKSNGnSJMXGxqq2tla1tbWnfczAgQP9UiQAAADQERaLRU1NTafd3tzcLIvFEsCKAAAAgNNrc2jrdrslSXv37tVf/vKXNj3mrbfeal9VAAAAgB8NHjxYf/3rX3XZZZcpJiamxbbKykp98sknSk1NNag6AAAAoKU2h7Z33nlnZ9YBAAAAdJqbbrpJjzzyiO655x5lZGQoPj5eknTgwAGtX79eoaGhuummmwyuEgAAADiuzaHtuHHjOrEMAAAAoPMMGDBAjz/+uN544w2t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MJEQowsAAAAAAAAAAPwLoS0AAAAAAAAAmAihLQAAAAAAAACYCKEtAAAAAAAAAJgIoS0AAAAAAAAAmAihLQB0QUuWLFF+fr7RZQAAAAB+Q48LAP9iNboAAOgKfvrpJ61YsULff/+9qqur5XA41K9fP40cOVJXXXVVp5zzyJEj+vTTT5WRkaGkpKROOUdnamho0LvvvquhQ4dq6NChRpcDAACAf0OPe+7ocQEECqEtAJzFjh07NH/+fEVHR+uKK66Q0+nU4cOHtWvXLn344Yed1tBWVVWppKREsbGxpzS0t99+u7xeb6ec118aGhpUUlIiSTS0AAAAJkOP2z70uAAChdAWAM7inXfeUXh4uBYuXKiIiIgW26qrqw2pyWpl+AYAAED70eMCgLlZvGb/GAsADHbPPfeoV69eeuSRR86675dffqlVq1Zp3759stvtSk9PV3Z2tqKjo337zJs3T0ePHtV//ud/qrCwULt27VJERISuvvpqXXfddZKkbdu2af78+accPy8vT+PGjdOSJUu0fft2LVmyRJJUXl6u2bNnKzs7W3a7XR988IFcLpdSU1N1xx13qE+fPnr77bf16aef6ujRo0pPT1deXp4cDkeL42/atEmlpaX64YcfZLFYNGTIEGVnZ+uCCy7w7bNkyRL9z//8j55++mm99NJL2rJli+x2uzIzM5Wdna2QkBBfPf9uypQpmjp1att+8QAAAOg09Lj0uADMjRuRAcBZxMTEaM+ePfrpp5/OuN8777yjJUuWKD4+XjNnztQ111yjLVu26JFHHlFdXV2LfWtra1VQUKDExETdeuut6tu3r1577TVt2rRJktS3b19f4zdhwgTNnj1bs2fP1pAhQ85Yw1dffaVPPvlEv/3tb5WVlaXt27frL3/5i9588019++23uu666zRhwgRt2LBBRUVFLR775Zdf6oknnlDPnj11yy236IYbbtC+ffs0d+5clZeXt9i3ublZBQUFOu+88zRjxgxddNFF+uCDD/Tpp59KkiIjI5WTkyNJysjI8NU/evTos/y2AQAAEAj0uPS4AMyN7x4AwFlce+21evzxx3XvvfcqOTlZqampSktL09ChQ31f4aqoqFBxcbGmTZumyZMn+x6bkZGh++67T3/9619brK+qqtLs2bP161//WpI0fvx45eXl6bPPPtOIESPkdDo1YsQIFRcXKyUlxbff2Rw5ckTPPPOMwsPDJR1vPFeuXKnGxkY98cQTCg0NlSTV1NToq6++Um5urmw2m+rr6/Xyyy9r/Pjxuv32233Hy8zM1D333KPS0tIW691ut371q19pypQpkqSJEyfqvvvu02effaaJEyeqZ8+euuSSS/TSSy+pf//+ba4fAAAAgUGPS48LwNy40hYAzmLYsGF67LHHNHLkSP3444967733VFBQoDvuuEPr16+XJP3zn/+U1+vVpZdeqpqaGt9/TqdTcXFx2rZtW4tj9uzZU2PHjvUtW61WJScnn/Jp/7m65JJLfM2sJA0aNEiSNHbsWF8ze2K9x+PRkSNHJEmbN29WXV2dxowZ06L+kJAQDRo06JT6peNN7MlSU1N16NChDtUPAACAwKDHpccFYG5caQsAbZCcnKw5c+bI4/Fo7969Wrt2rVatWqXFixfrT3/6k8rKyuT1enXXXXe1+vh/v6lCnz59ZLFYWqyLiIjQjz/+2KE6T55XTJKvuT3d+hNfaTt48KAkacGCBa0eNywsrMWyzWZTZGRki3URERGnfEUOAAAA5kWPS48LwLwIbQHgHJy4WiA5OVkJCQl6/vnn9fXXX6u5uVkWi0X333+/QkJO/RJDz549Wyy3to8/nO64p1t/4l6UJ/6dPXu2nE7nKfudfAXDmY4HAACAroce98zHAwAjENoCQDsNHDhQ0vG5u+Li4uT1ehUbG6uEhAS/HP/fr1LoTOeff74kKSoqSsOGDfPLMQNZPwAAAPyDHvfM6HEBBAofIwHAWWzdutX3Kf3JTtwFNyEhQRkZGQoJCVFJSckp+3q9Xh09evScz9ujRw9JCsjXsdLT0xUWFqbS0lJ5PJ5TttfU1JzzMU/Uf+zYsQ7XBwAAAP+ix6XHBWBuXGkLAGfx8ssvq6GhQRkZGUpISJDH49HOnTu1Zs0axcTE6PLLL1dERISmT5+u119/XRUVFRo1apR69uyp8vJyrVu3TldccYX+4z/+45zOe/755ysiIkJ/+9vfFBYWph49emjQoEGKjY31+3MMDw9Xbm6unn32Wd13330aM2aMIiMjVVlZqY0bN2rw4MH6/e9/f07HtNvt6tevn9asWaP4+Hg5HA5dcMEF6t+/v9/rBwAAwLmhx6XHBWBuhLYAcBYzZszQ119/rU2bNunTTz+Vx+NRdHS0Jk6cqBtuuEERERGSpOuvv17x8fFatWqVVqxYIen4zRGGDRumkSNHnvN5rVar8vPz9frrr+vFF19UU1OT8vLyOqWhlaTLLrtMvXr10sqVK/Xee+/J7Xard+/eGjJkiC6//PJ2HfOOO+7QsmXL9Morr8jj8WjKlCk0tAAAACZAj0uPC8DcLN7Wvg8BAAAAAAAAADAEc9oCAAAAAAAAgIkQ2gIAAAAAAACAiRDaAgAAAAAAAICJENoCAAAAAAAAgIkQ2gIAAAAAAACAiRDaAgAAAAAAAICJENoCAAAAAAAAgIkQ2gIAAAAAAACAiRDaAgAAAAAAAICJENoCAAAAAAAAgIkQ2gIAAAAAAACAiRDaAgAAAAAAAICJENoCAAAAAAAAgIn8H9tk6dtSUiotAAAAAElFTkSuQmCC\n"},"metadata":{}}],"source":["def analyser_texte_tweets(df):\n"," \"\"\"Analyse les caractéristiques textuelles des tweets\"\"\"\n"," # Calcul de la longueur des tweets\n"," df['text_length'] = df['text'].apply(len)\n"," df['word_count'] = df['text'].apply(lambda x: len(str(x).split()))\n","\n"," print(f\"Longueur moyenne des tweets: {df['text_length'].mean():.2f} caractères\")\n"," print(f\"Nombre moyen de mots par tweet: {df['word_count'].mean():.2f} mots\")\n","\n"," # Afficher word_count et text_length côte à côte avec seaborn\n"," plt.figure(figsize=(14, 6))\n","\n"," # Distribution de la longueur des tweets par sentiment\n"," plt.subplot(1, 2, 2)\n"," sns.boxplot(x='sentiment', y='text_length', data=df, hue='sentiment')\n"," plt.title('Distribution du nombre de caractères par tweet', fontsize=15)\n"," plt.xlabel('Sentiment')\n"," plt.ylabel('Longueur du Tweet')\n","\n"," # Distribution du nombre de mots par sentiment\n"," plt.subplot(1, 2, 1)\n"," sns.boxplot(x='sentiment', y='word_count', data=df, hue='sentiment')\n"," plt.title('Distribution du nombre de mots par tweet', fontsize=15)\n"," plt.xlabel('Sentiment')\n"," plt.ylabel('Nombre de Mots')\n","\n"," plt.tight_layout()\n"," plt.show()\n","\n","analyser_texte_tweets(df)"]},{"cell_type":"code","source":["more_than_140_ch_before_htmlunescape = df[df['text_length'] > 140]['text']\n","print('More than 140 characters before html process:', len(more_than_140_ch_before_htmlunescape))\n","more_than_140_ch_before_htmlunescape.head(10).values"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":0},"id":"vjIRh70ycDG1","executionInfo":{"status":"ok","timestamp":1751537483733,"user_tz":-120,"elapsed":32,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"bfd13510-3f50-4460-b2f9-6a99f23a1574"},"execution_count":19,"outputs":[{"output_type":"stream","name":"stdout","text":["More than 140 characters before html process: 17174\n"]},{"output_type":"execute_result","data":{"text/plain":["array([\"Awwh babs... you look so sad underneith that shop entrance of "Yesterday's Musik" O-: I like the look of the new transformer movie \",\n"," 'Tuesday�ll start with reflection �n then a lecture in Stress reducing techniques. That sure might become very useful for us accompaniers ',\n"," \"Whinging. My client&boss don't understand English well. Rewrote some text unreadable. It's written by v. good writer&reviewed correctly. \",\n"," '@TheLeagueSF Not Fun & Furious? The new mantra for the Bay 2 Breakers? It was getting 2 rambunctious;the city overreacted & clamped down ',\n"," \"#3 woke up and was having an accident - "It's pushing, it's pushing!" he was crying because he couldn't stop from wetting his pants. \",\n"," 'My bathtub drain is fired: it haz 1 job 2 do, & it iz FAIL. I got all Drano on its ass, & iz STILL NOT DRAINING. I wanna shower, dangit!! ',\n"," \"pears & Brie, bottle of Cabernet, and "Win a Date With Tad Hamilton"... oh gawwd my life flashed forward to when I'm 40 with my 75 cats \",\n"," 'Have an invite for "Healthy Dining" session at Ashok Hotel today with Exec Chef R.Chopra but damn workload - will have to skip it! ',\n"," 'Damnit I was really digging this season of Reaper http://www.tv.com/story/13720.html?ref_story_id=13720&ref_type=1101&ref_name=story',\n"," \"Why do I keep looking...I know that what I read is gonna hurt but I still look! I guess it's just a girl thing & I need to get over him. \"],\n"," dtype=object)"]},"metadata":{},"execution_count":19}]},{"cell_type":"markdown","source":["Il est assez clair que l'on rencontre un problème d'encodage html ce qui augmente artificiellement la longueur des tweets dans notre dataset."],"metadata":{"id":"jU4bygO9hhXj"}},{"cell_type":"code","source":["import html\n","# Exemple de nettoyage d'une colonne 'text' dans votre DataFrame\n","df[df['text_length'] > 140]['text'].apply(html.unescape).head(10).values"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":0},"id":"7fvM0aAUfZ_l","executionInfo":{"status":"ok","timestamp":1751537483811,"user_tz":-120,"elapsed":77,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"29977ed3-8334-43cd-fc8b-4b111fbb66ed"},"execution_count":20,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array(['Awwh babs... you look so sad underneith that shop entrance of \"Yesterday\\'s Musik\" O-: I like the look of the new transformer movie ',\n"," 'Tuesday�ll start with reflection �n then a lecture in Stress reducing techniques. That sure might become very useful for us accompaniers ',\n"," \"Whinging. My client&boss don't understand English well. Rewrote some text unreadable. It's written by v. good writer&reviewed correctly. \",\n"," '@TheLeagueSF Not Fun & Furious? The new mantra for the Bay 2 Breakers? It was getting 2 rambunctious;the city overreacted & clamped down ',\n"," '#3 woke up and was having an accident - \"It\\'s pushing, it\\'s pushing!\" he was crying because he couldn\\'t stop from wetting his pants. ',\n"," 'My bathtub drain is fired: it haz 1 job 2 do, & it iz FAIL. I got all Drano on its ass, & iz STILL NOT DRAINING. I wanna shower, dangit!! ',\n"," 'pears & Brie, bottle of Cabernet, and \"Win a Date With Tad Hamilton\"... oh gawwd my life flashed forward to when I\\'m 40 with my 75 cats ',\n"," 'Have an invite for \"Healthy Dining\" session at Ashok Hotel today with Exec Chef R.Chopra but damn workload - will have to skip it! ',\n"," 'Damnit I was really digging this season of Reaper http://www.tv.com/story/13720.html?ref_story_id=13720&ref_type=1101&ref_name=story',\n"," \"Why do I keep looking...I know that what I read is gonna hurt but I still look! I guess it's just a girl thing & I need to get over him. \"],\n"," dtype=object)"]},"metadata":{},"execution_count":20}]},{"cell_type":"code","source":["df['text'] = df['text'].apply(html.unescape)"],"metadata":{"id":"BoGtOFgUg-en","executionInfo":{"status":"ok","timestamp":1751537484338,"user_tz":-120,"elapsed":527,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"execution_count":21,"outputs":[]},{"cell_type":"code","source":["analyser_texte_tweets(df)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":363},"id":"nE0cJqRHhq1c","executionInfo":{"status":"ok","timestamp":1751537498442,"user_tz":-120,"elapsed":14105,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"1fad0b6a-c11d-46d7-83c6-272bd0d03a6d"},"execution_count":22,"outputs":[{"output_type":"stream","name":"stdout","text":["Longueur moyenne des tweets: 73.70 caractères\n","Nombre moyen de mots par tweet: 13.18 mots\n"]},{"output_type":"display_data","data":{"text/plain":["
"],"image/png":"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y9xncHCwunTporfffrvUfTKuZlxdYxigCkgy5TndBg8ebCSZF154ocT9mzVr5rbto48+Mlar1VgsFtO5c2czdOhQc/vtt5vo6Ggjyfz888/GGGOmTp1qbrjhBiPJxMfHmxEjRrj+W7t2rTHGmC+++MJIMn369DGNGzc2kZGRZvDgwaZfv37m//7v/4wxxjz//PNGknnzzTfd4ujevbuRZMaPH28sFou56aabzNChQ03z5s2NJNO4cWOzf/9+t/uMGDHCSDJffPFFmc/X+cdbnmP4+eefjSTTvXv3EvsbM2aMkWQCAwNNnz59zODBg43NZjOSzPXXX29OnjxZanyPPfaY8fHxMZ07dzZJSUnGbrcbSaZevXrml19+KTX20mzcuNEEBwcbSaZdu3Zm6NChJjEx0VgsFjNu3DgjyYwYMaLU59X5Op7vQsdalmbNmhlJ5oknnjD+/v6mV69eZsCAAaZ+/fpGkrnxxhuNw+Fwu8+BAwdMy5YtjSTTtGlTM2TIENOzZ0/j4+NjJJnXX3+9xOM4X7sBAwaYsLAwc/fdd5tevXqZgIAAI8m88cYbZsGCBcbX19d069bNDB482ERFRRlJplu3biViqMj55TxXH3jgAePn52fatm1rhg4dam666SazefNmY4wxM2bMMFar1VitVtO5c2dzzz33mLi4OCPJREREmG3btpX7ua3I63v27FkzbNgwI8kEBwebHj16mAEDBpgmTZoYSaZTp06moKCgXI/vPB+uv/5607lzZ1O/fn0zePBg06NHD2O1Wo2Pj49ZuXKlef31142vr6+55ZZbzIABA0y9evWMJDN8+PAS+0xPT3e9R1q1amWGDh1qunbtaiQZX19fk5qa6uq7ePFiM2jQICPJNGjQwO39OWvWLGOMMfv27TN169Y1ksw111xjBg0aZO6++26TkJBgLBZLic+Vsjhf29GjRxt/f3/Tpk0bM3ToUHPttdcaScbf3998+umnbvc5deqU63174403miFDhphbb73VBAUFlfranP84FzqHSjNr1izTu3dvI8lER0e7PReLFy82xhhz0003lXhvnz171tSpU8d1DOd/JuXm5hqr1Wratm3r9lg7d+50nS/Nmzc3/fv3Nz179nQd12uvvVYivq+//tr1OK1atTIDBw40N954o/H19TU+Pj7m/fffv6RjAeBdGG8y3mS8yXjz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OXPmqHbt2pozZ0657ve3v/1Nhw4dKrF92bJlkv77y6L031/Hdu7cWQkRl27+/PmumRvSuQ+jP/7xjzp58qT69evnVsPG+UGZkpKiI0eOuLZv2rRJzz33XKn7r+gxPProo5KkyZMnu/36d/z4cU2YMEHGGD388MNX9HKN2NhY7dq1Sy+99JJb2//93//pm2++KfV+zudo2rRpKigocG1ftWqV/v73v1+RWM/XsmVL9e3bV8ePH9cf/vAHFRUVudq++eYbpaSkyMfHR+PHj7/isUiXdn5dzMSJE2W1WvXAAw+4FaZ3OnHihN54441S61H9VkVe34CAAD355JM6fvy4Bg4cWOqv0llZWZo3b165j6ky9ejRQ+3bt9eePXv03HPPuQ1KFy9erEWLFik4OFgPPviga7vNZpOfn5927dpV6qBv3rx5pQ4gP/nkExlj3D6vymPPnj2aMmWK27Z//etf+uabb9SgQQO3X8mdC5/885//dOu/cOFCzZ0795IetzzK81nlrL+1d+9erVixwlV3y6lHjx7asGGDNm3apNjY2BKXag0aNEht2rTRu+++qxdffLFEbT5jjL766it99dVXrm0PP/yw6tevr1dffVX/+te/SnzpKy4u1qeffur2OlXFvx0AqgbjTcabpWG86Y7xZtlGjRolm82mTz75RH//+99LJC2//fZb/frrr5LOlWSwWq1atWqV26JUp0+f1iOPPFLhJHJFxnRPPfWUJOmxxx5Tenq6W9vp06dLJJAbNWqkw4cPl/ojQufOnXXbbbdp48aNGj16dKl90tLStGTJkvIekmufX331lcaPH6/8/PwSfTZv3qzly5e7bjOudse4+ipngCogyUgyI0aMMCNGjDD333+/6d+/v2ndurWxWCxGkrnmmmvMxo0by7x/s2bN3LaFhYUZq9VqEhISTFJSkrnnnnuM3W43kkzdunVNRkaGq++pU6dM/fr1jSTTvXt388ADD5iHHnrIfPXVV8YYY7744gtXfGV5/vnnjSTz5ptvum3v3r27kWTGjx9vLBaL6d69uxk6dKhp0aKFkWQaNWpk9u7d63Yfh8Phul/9+vXNgAEDzI033mj8/f3N448/XurxXuwYfv75Z1fbb40ZM8ZIMrVq1TJ9+/Y199xzj4mIiDCSTJcuXczJkyfd+o8YMcJIMl988UWpz0Vp8V3It99+a2rXrm0kmfbt25thw4aZ6667zlgsFjNu3LhSn/uCggLTqlUrI8k0bdrUDBo0yHTu3NlYrVbXc1TasZalWbNmpqyPvLJe/wMHDrhex2bNmpmhQ4eaW265xfj4+BhJZtq0aSX2daHn5kLPa1kxVOT8KutcPV9KSorrONq1a2cGDhxohgwZYjp37mwCAgKMJHPs2LEy73++iry+Z8+eNffff7+RZPz9/U3nzp3N0KFDzcCBA03btm2NxWIx8fHx5Xr8C537xvz3Ofz5559LtL355ptGknn++efdtqenp5t69eoZSaZ169Zm2LBh5oYbbjCSjK+vr5k/f36Jfd15551Gkmnbtq25//77zUMPPWTeeOMNY4wx/fv3N5JMdHS0ufvuu82wYcNMly5djMViMVar1aSmppbrWJ2v7ejRo42fn59p27at6/mWZPz8/Mwnn3zidp81a9a4XuvExEQzbNgwc+211xpJZb6XynMOXUhcXJyRZK677jozcuRI89BDD5kPP/zQrc/EiRNd/za89tprbm3O10WSeeSRR0p9jIyMDNf7oH79+ubWW281w4cPN7169XJ9Vv7tb39zu88333xjbDabkWSaNGli7rjjDjN8+HDTs2dPEx4ebiSZxYsXX/KxAPAOjDcZbzLeZLx5vsocbxpz7vkLCQkxkkyLFi1MUlKSufPOO01MTIyRZH744QdX39GjR7u9HwYPHmwaNGhgbDabGTlyZKnP3YXOH2MqNqYzxphHH33USDI+Pj6mW7duZtiwYaZHjx4mPDy8xPE7+7Zo0cLce++95qGHHjKvvvqqq/3w4cMmISHBSDJhYWGme/fuZvjw4aZv376mcePGRpL5wx/+4LbPi72Xz99neHi46dGjh2ufTZo0KbFPxtWMq2sSkraoEs4PCed/vr6+pm7duqZdu3ZmxIgRZtGiRaa4uPiC9//tB/3cuXPN8OHDTatWrUxISIgJCQkxbdq0MY899pg5cOBAiX1s3LjR3HbbbSYsLMw1cHd+cFbGIPrnn382b775punQoYMJDAw09erVM/fff7/Zv39/qfvLzc01jzzyiGnQoIEJCAgwbdu2NSkpKWUe78WO4WKJq7lz55quXbua4OBgExgYaNq2bWtefvllU1BQUKJvZQ+ijTmXBLvzzjtNWFiYqV27trn++uvNkiVLLvjcHzhwwAwbNszUqVPH1KpV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9PR0JSUluRYoA4DqoLyLj7JIKTypQjNtb7jhBoWEhOj7779X7dq11bt3b/n4+EiSTpw4oeDgYN14442VGigAAPCMiIgISefKId10000l2jdv3uzWD/BWGzdu1LvvvqtffvlFkjRp0iS1a9dO+fn5eumllzR48GB16tTJw1EC3icxMVG9evXSypUrXZ/50rmEbq9evZSYmOjB6ADg0u3evbtS+wFXQoULz8XFxZU64yY4OFiPP/74ZQUFAAC8R8+ePbVgwQItXrxYXbt2dSuRUFxcrA8//FBWq1U9e/b0YJTAhX333Xf661//Krvdrm7dumnBggWuttDQUNWtW1erV68maQuUIi0tTStWrFC7du3UoEEDFRUVyc/PT4cPH9aKFSsUHR1N4hZAtXLmzJlK7QdcCRW6hmXIkCFat25dme1ff/21hgwZUuGgJOk///mPkpKS9NZbb7m2FRYWavbs2XrwwQd1//33669//SsLngEAcIX5+vrqtttuU35+vp544gmtXr1ax44d0+rVq/XEE08oPz9ft912G4uQwat98MEHatOmjV588UX17t27RLvdbtfPP//sgcgA7+ZwOJSamqqmTZvq4MGD+uyzz7RmzRp99tlnOnjwoJo2barU1FQ5HA5PhwoA5fbbkp6BgYHy8/NTYGDgBfsBVemKfLtyOByXtcJeZmamVq5cWaLg89tvv63vv/9ejz32mIKCgjRnzhxNmzZNL7744uWGDAAALiApKUmStHLlSs2bN0/z5s2TdO7S2N69e7vaAW+1b98+jRgxosz2sLAw5efnV2FEQPWQkZGhnJwc5eTkKD4+Xg8//LCioqKUlZWlpUuXusolZGRkKDY21sPRAkD51KpVy+22s859UVHRBfsBVanSq8UXFBRo06ZNCgkJqdD9T58+renTp+vhhx9W7dq13fa7atUqjRgxQu3atVPLli01btw47dy5UxkZGZUVPgAAKENSUpJSUlI0ZMgQ9ezZU0OGDFFKSgoJW1QLAQEBF1x47PDhwwoODq7CiIDq4dixY5Kk9u3ba8KECYqOjlZgYKCio6M1YcIEtWvXzq0fAFQH27dvr9R+wJVQ7pm2CxYs0MKFC123p0+frunTp5fZ/4477qhQQLNnz1ZCQoLi4uK0aNEi1/bdu3fr7Nmzat++vWtbVFSUbDabMjIyZLfbS91fUVGR2y8l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AQAAAJVqyJAhF2y32WwaNWpUFUUDAAAAXFiFkradO3dWUVGR/vCHP6h9+/aqW7eurFarWx+LxaIHHnigUoIEAAAALsegQYNksVjctlksFtWuXVsNGjRQfHy8fHx8PBQdAAAA4K5CSdtt27Zp1qxZKiwsVFpaWpn9SNoCAADAGyQlJXk6BAAAAKDcKpS0feONNxQUFKQ//elPiomJUVBQUGXHBQAAAAAAAAA1UoWStocOHdLw4cMVFxdX2fEAAAAAlW7mzJkXbLdYLPLz81O9evXUtm1b2e32KooMAAAAKKlCSdsmTZqooKCgsmMBAAAArogff/xRhYWFys/PlyTVrl1bknTy5ElJUmhoqBwOh06cOCFJ6tChgx577DEFBAR4JmAAAADUaBVK2t5///363//9X3Xo0EExMTGVHRMAAABQqZ5++mm9/PLLuueee3T77bcrODhYknTixAl98sknWr16tSZOnKjw8HAtWbJEH3zwgebPn6/f/e53Ho4cAAAANVGFkrYff/yxatWqpYkTJ6px48ay2WyyWq1ufSwWi5588slKCRIAAAC4HG+88YYSEhI0ePBgt+3BwcG65557dOzYMb3xxht69tlnlZSUpF9++UXffvstSVsAAAB4RIWStvv27ZMk2Ww2nT59WgcOHCjRx2KxXF5kAAAAQCX56aef1KVLlzLbmzdvrrVr17put279/7V371FR1/kfx18DMygwwahAgCZoiJghuqvYZi5m5m5Fv9JMrTDXFk4FbvXb469ON1OLzLO5281OnsKM0xUpzLLaNttq+9lvvZYXTl5S6+cFAWVAMGAG5veHP2ZlxRsM8/3CPB/ndOR7me/3PRzmM+9e853Pd4jWrVt31uOWlpZq1apV2rt3r6qqqjRnzhylp6d7ty9ZskRffvllq8ekpaXp4Ycf9i7X1tZq2bJl2rhxoywWi0aPHq1Zs2apZ8+e5/MUAQAA0I20K7RdsmSJr+sAAAAAOk1YWJi+++47TZw4sc3t3377rcLCwrzL9fX1Cg0NPetxGxoalJiYqPHjx+vpp59uc5/hw4crNzfXu2y1tm7Bn3vuOVVVVemRRx5RU1OTXnzxRS1dulT33nvvuTw1AAAAdEPtCm0BAACAruSqq67Su+++q8WLF2vixImKjY2VJJWVlenTTz/Vxo0bddNNN3n337x5sxITE8963BEj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pia5XC41NDR4Jy0HgM60adMmzZgxQ01NTfJ4PBozZoxGjx6tTZs2adCgQd79LrjgAsXHx+vAgQOSpGuuuUavvPKKtmzZotTUVI0ePVoJCQlGPQ0AwHmgxwXQ3dHjorsitAX+3yWXXKK0tDS9+eabGjdunHd9fX29JkyYoGuvvfaUx0RFRenQoUNnPXZ5ebkWLVqkq6++WtOnT5fdbtf333+vl156SW63m4YWgF8MHTpUOTk5slqt6tWrl4KDg7Vhw4azPu6qq65SWlqaNm3apC1btqikpES33367rrnmGj9UDQDoCHpcAN0dPS66K6ZHAE5y2223aePGjdq5c6d33YABA3TgwAHFxsae8p/ValV8fLyampq0b98+72PKyspUV1fnXd6zZ4+am5t1++23Kzk5WfHx8aqqqmp1bqvVqubm5k5/jgACV48ePRQbG6uoqCgFBwdLkvr27aumpibt2rXLu9+xY8d08OBB9evXz7suKipKEydO1Jw5c3T99ddrzZo1bZ6DsQwAzIceF0B3Ro+L7orQFjhJ//79NXbsWH388cfedTfccIN27NihgoIC7du3T4cOHdL69etVUFAg6cSbQWpqqpYuXardu3dr7969Wrp0qUJCQmSxWCSd+CpZU1OTPvnkEx0+fFhfffWV/va3v7U6d3R0tOrr67V161bV1NSooaHBf08cQMCKi4vTyJEjtXTpUn3//ffat2+fnn/+efXu3VsjR46UJC1fvlzffvutysvLtWfPHm3fvl19+/Zt83iMZQBgPvS4AAINPS66A6ZHAP7N1KlTtXbtWu9yQkKC5s2bp7fffltz586Vx+NRbGysfvWrX3n3mT17tl566SU99thjcjgcuuWWW7R//37ZbDZJUmJiom6//Xa9//77evPNNzVkyBDdeuuteuGFF7zHGDx4sK6++mo988wzOnbsmKZMmaKpU6f674kDCFi5ublavny5nnrqKbndbg0ZMkQPPvigrNYTbUJzc7MKCgp09OhRhYaGavjw4Zo5c2abx2IsAwBzoscFEGjocdHVWTwej8foIoDu5siRI7r77rv16KOPKjU11ehyAAAAgA6jxwUAwH+40hbwgW3btqm+vl79+/dXVVWVXn/9dUVHR2vIkCFGlwYAAAC0Cz0uAADGIbQFfMDtduutt97S4cOHFRoaquTkZN1zzz3er10AAAAA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\n"},"metadata":{}}]},{"cell_type":"code","source":["print('More than 140 characters after html process:', len(df[df['text_length'] > 140]['text']))"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":0},"id":"oqTsuGn1qcXa","executionInfo":{"status":"ok","timestamp":1751537498443,"user_tz":-120,"elapsed":8,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"eb34b09c-d1dc-4ebd-aff9-409f13d10cf4"},"execution_count":23,"outputs":[{"output_type":"stream","name":"stdout","text":["More than 140 characters after html process: 687\n"]}]},{"cell_type":"code","source":["df[df['text_length'] > 140]['text'].head(10).values"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":0},"id":"DH_s2HfR1EED","executionInfo":{"status":"ok","timestamp":1751537498450,"user_tz":-120,"elapsed":7,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"ce2ab598-c2cc-4e9b-bad7-d0e2e2ff6609"},"execution_count":24,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array(['Tuesday�ll start with reflection �n then a lecture in Stress reducing techniques. That sure might become very useful for us accompaniers ',\n"," \"When I get mine I�m going to do a tour of Copenhagen with it �;) Hmmph I can't top that .. must get thinking .. http://tinyurl.com/c2trgj\",\n"," 'http://tr.im/imOv �i, b�c H?i Tho?i th? l� gi� t? cu?c ??i r?i ( M�nh v?n c�n nh? c�i nh� t?p th? b� t� c?a b�c � ? ch? Tr?i ',\n"," '@NguyenNoir ??c h?t c? b? r?i. Th?ng Starr ?y l�c ??u m�nh r?t tr�ng ??i n� s? l� lo?i villain c?ng c?a, ai d� c�ng v? sau c�ng pathetic. ',\n"," 'Saturday�s Graze box finally arrived today. The grapes were mouldy after 3 days in GPO I�m considering cancelling my account altogether.',\n"," 'Buzz.vn: \\tTin t?c - ??c B�o : hjxhjx l�m th?t kh? n?y nh�n th�i l� m�n �i r?i ch? ??ng n�i g� ?.. http://tinyurl.com/dztqfo',\n"," 'Photo: ???? (Sweetness in the Salt) C� ai coi phim n�y ch?a, hay v� c?m ??ng ghia. Lyrics c?a nh?c th?t... http://tumblr.com/xmi1mmhzu',\n"," 'evdeyim cumartesi g�n� biraz hastay?m grip , at home at saturday cuz I m ill , flu , hapshuuuu , I cleaned my home eat lunch hi everybody',\n"," '@leokun87 Tao c?ng ?� v? BK, d� kh�ng y�u, nh?ng v?n c�n h?n Th??ng-H?i-s�nh-?i?u. M?t ?t z?i L?i h?t $ l�m t�c z?i. ??u t�c x?u qu�!!!',\n"," '1 ng�y m?t m?i v?t l?n v?i c�i Eclipse. Cu?i c�ng c?ng xong. Ch�n m?y b�c plugin, update m� kh�ng th�m test hay sao l�m queo m�y m�nh '],\n"," dtype=object)"]},"metadata":{},"execution_count":24}]},{"cell_type":"code","source":["# Filtrer les lignes où 'text_length' est supérieur à 140 et supprimer ces lignes\n","df = df[df['text_length'] <= 140].copy()\n","\n","# Afficher la nouvelle taille du DataFrame pour confirmation\n","print(f\"Nouvelle taille du DataFrame après suppression: {df.shape[0]} lignes, {df.shape[1]} colonnes.\")"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":0},"id":"WoIRCbHWqz8W","executionInfo":{"status":"ok","timestamp":1751537499391,"user_tz":-120,"elapsed":940,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"fe74a02f-f104-41df-f5bb-08f207a6aad4"},"execution_count":25,"outputs":[{"output_type":"stream","name":"stdout","text":["Nouvelle taille du DataFrame après suppression: 1599313 lignes, 15 colonnes.\n"]}]},{"cell_type":"markdown","source":["### Analyse Qualitative"],"metadata":{"id":"J8p054tk0X-B"}},{"cell_type":"markdown","metadata":{"id":"cnrONvWyWjJA"},"source":["#### 8. Analyse de caractéristiques distinctives et de l’impact de tokens spécifiques\n","\n","Cette section met en évidence plusieurs éléments textuels pouvant aider à différencier les sentiments exprimés dans les tweets. Ces observations peuvent être utilisées **à la fois comme features explicites** dans les modèles classiques ou **comme éléments à conserver dans les phases de prétraitement** pour les modèles profonds.\n","\n","---\n","\n","##### **1. Majuscules**\n","- Le ratio de majuscules est généralement [plus élevé/plus faible] dans les tweets [positifs/négatifs]. \n"," → Peut indiquer de l’**intensité émotionnelle** (ex. colère, enthousiasme). \n"," ✅ **À exploiter comme feature explicite** ; ne pas convertir systématiquement en minuscules.\n","\n","---\n","\n","##### **2. Ponctuation expressive**\n","- `!` plus fréquents dans les tweets [positifs/négatifs] \n","- `?` plus fréquents dans les tweets [positifs/négatifs] \n","- `...` plus fréquents dans les tweets [positifs/négatifs] \n"," ✅ **À conserver dans le texte**, et/ou compter comme feature.\n","\n","---\n","\n","##### **3. Symboles spécifiques à Twitter**\n","- `#hashtags`, `@mentions`, `http` apparaissent avec des fréquences différentes selon le sentiment. \n"," ✅ Peuvent être **encodés comme des indicateurs binaires** ou **remplacés par des tokens spéciaux** (``, ``, etc.)\n","\n","---\n","\n","##### **4. Émoticônes**\n","- Émoticônes positives (`:)`, `:D`) bien plus fréquentes dans les tweets positifs \n","- Émoticônes négatives (`:(`, `:(`) plus fréquentes dans les tweets négatifs \n"," ✅ **Fort pouvoir discriminant** : à traiter comme **tokens spécifiques**, voire à compter comme **features auxiliaires**.\n","\n","---\n","\n","##### **5. Pronoms personnels**\n","- \"I\" (je) et \"we\" (nous) ont des fréquences différenciées selon le sentiment \n"," ✅ Peut être un **signal intéressant sur le ton ou l’implication personnelle** → feature textuelle potentielle.\n","\n","---\n","\n","##### **6. Lexique émotionnel**\n","- Mots comme \"love\", \"hate\", \"lol\", \"omg\" sont fortement corrélés à certaines classes \n"," ✅ **Indicateurs lexicaux directs** : peuvent être **utilisés comme features ou marqués via une lexicon-based approach.**\n","\n","---\n","\n","##### **En résumé : stratégies recommandées**\n","- ✅ **Ne pas supprimer** systématiquement la ponctuation expressive ni convertir les majuscules \n","- ✅ **Traiter** les émoticônes et tokens spécifiques comme des signaux explicites \n","- ✅ **Enrichir** la vectorisation (TF-IDF, embeddings) avec des **caractéristiques structurelles** (ponctuation, casse, ratio d’émoticônes, etc.)\n"]},{"cell_type":"code","execution_count":26,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":0},"id":"ctBSKs_QWjJA","executionInfo":{"status":"ok","timestamp":1751537506318,"user_tz":-120,"elapsed":6919,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"bfd821ea-c8ba-4fe7-c5f5-c279d0f4b26e"},"outputs":[{"output_type":"stream","name":"stdout","text":["Moyenne des caractéristiques par sentiment:\n","Caractéristique 'text_length':\n"," - Tweets négatifs: 73.96\n"," - Tweets positifs: 73.38\n"," - Différence relative: -0.79%\n","\n","Caractéristique 'word_count':\n"," - Tweets négatifs: 13.58\n"," - Tweets positifs: 12.77\n"," - Différence relative: -5.92%\n","\n","Caractéristique 'capitals_ratio':\n"," - Tweets négatifs: 0.04\n"," - Tweets positifs: 0.05\n"," - Différence relative: 16.98%\n","\n","Caractéristique 'exclamation_count':\n"," - Tweets négatifs: 0.48\n"," - Tweets positifs: 0.66\n"," - Différence relative: 38.19%\n","\n","Caractéristique 'question_count':\n"," - Tweets négatifs: 0.15\n"," - Tweets positifs: 0.16\n"," - Différence relative: 7.62%\n","\n","Caractéristique 'ellipsis_count':\n"," - Tweets négatifs: 0.21\n"," - Tweets positifs: 0.15\n"," - Différence relative: -26.07%\n","\n","Caractéristique 'hashtag_count':\n"," - Tweets négatifs: 0.02\n"," - Tweets positifs: 0.03\n"," - Différence relative: 42.58%\n","\n","Caractéristique 'mention_count':\n"," - Tweets négatifs: 0.41\n"," - Tweets positifs: 0.60\n"," - Différence relative: 46.87%\n","\n","Caractéristique 'url_count':\n"," - Tweets négatifs: 0.03\n"," - Tweets positifs: 0.06\n"," - Différence relative: 88.16%\n","\n","Caractéristique 'positive_emoticon':\n"," - Tweets négatifs: 0.00\n"," - Tweets positifs: 0.00\n"," - Différence relative: inf%\n","\n","Caractéristique 'negative_emoticon':\n"," - Tweets négatifs: 0.00\n"," - Tweets positifs: 0.00\n"," - Différence relative: 100.00%\n","\n","Caractéristiques structurelles des tweets par sentiment :\n"," Négatif (moyenne) Positif (moyenne) Différence Relative\n","Emoticone Positive 0.0 0.00001 inf\n","Emoticone Negative 0.00024 0.00048 100.0\n","Nombre URLs 0.03014 0.05671 88.155275\n","Nombre Mentions 0.40579 0.59599 46.871535\n","Nombre Hashtags 0.0233 0.03322 42.575107\n","Nombre Exclamations 0.47932 0.66237 38.189518\n","Ratio Majuscules 0.042984 0.050284 16.984226\n","Nombre Questions 0.14796 0.15924 7.623682\n","Longueur Texte 73.96162 73.37764 -0.789572\n","Nombre Mots 13.57711 12.77396 -5.915471\n","Nombre Ellipses 0.20901 0.15453 -26.065738\n"]}],"source":["def analyser_caracteristiques_distinctives(df):\n"," \"\"\"Analyse les caractéristiques distinctives et les tokens spécifiques dans les tweets\"\"\"\n","\n"," # Créer un échantillon équilibré pour l'analyse\n"," sample_size = min(100000, df[df['sentiment'] == 'Négatif'].shape[0], df[df['sentiment'] == 'Positif'].shape[0])\n"," neg_samples = df[df['sentiment'] == 'Négatif'].sample(sample_size, random_state=42)\n"," pos_samples = df[df['sentiment'] == 'Positif'].sample(sample_size, random_state=42)\n","\n"," balanced_df = pd.concat([neg_samples, pos_samples])\n","\n"," # Calculer des caractéristiques supplémentaires\n"," balanced_df['capitals_ratio'] = balanced_df['text'].apply(\n"," lambda x: sum(1 for c in str(x) if c.isupper()) / len(str(x)) if len(str(x)) > 0 else 0\n"," )\n","\n"," balanced_df['exclamation_count'] = balanced_df['text'].apply(\n"," lambda x: str(x).count('!')\n"," )\n","\n"," balanced_df['question_count'] = balanced_df['text'].apply(\n"," lambda x: str(x).count('?')\n"," )\n","\n"," balanced_df['ellipsis_count'] = balanced_df['text'].apply(\n"," lambda x: str(x).count('...')\n"," )\n","\n"," balanced_df['hashtag_count'] = balanced_df['text'].apply(\n"," lambda x: str(x).count('#')\n"," )\n","\n"," balanced_df['mention_count'] = balanced_df['text'].apply(\n"," lambda x: str(x).count('@')\n"," )\n","\n"," balanced_df['url_count'] = balanced_df['text'].apply(\n"," lambda x: 1 if 'http' in str(x).lower() else 0\n"," )\n","\n"," balanced_df['positive_emoticon'] = balanced_df['text'].apply(\n"," lambda x: str(x).count(':)') + str(x).count(':-)') + str(x).count(':D') + str(x).count('=)')\n"," )\n","\n"," balanced_df['negative_emoticon'] = balanced_df['text'].apply(\n"," lambda x: str(x).count(':(') + str(x).count(':-(') + str(x).count(':(') + str(x).count('=(')\n"," )\n","\n"," # Comparer les moyennes\n"," features = ['text_length', 'word_count', 'capitals_ratio', 'exclamation_count',\n"," 'question_count', 'ellipsis_count', 'hashtag_count', 'mention_count',\n"," 'url_count', 'positive_emoticon', 'negative_emoticon']\n","\n"," # Calculer les statistiques par sentiment\n"," stats = balanced_df.groupby('sentiment')[features].mean().round(4)\n","\n"," # Renommer les colonnes en français\n"," stats.columns = ['Longueur Texte', 'Nombre Mots', 'Ratio Majuscules', 'Nombre Exclamations',\n"," 'Nombre Questions', 'Nombre Ellipses', 'Nombre Hashtags', 'Nombre Mentions',\n"," 'Nombre URLs', 'Emoticone Positive', 'Emoticone Negative']\n","\n"," print(\"Moyenne des caractéristiques par sentiment:\")\n"," for feature in features:\n"," neg_mean = balanced_df[balanced_df['sentiment'] == 'Négatif'][feature].mean()\n"," pos_mean = balanced_df[balanced_df['sentiment'] == 'Positif'][feature].mean()\n"," diff = (pos_mean - neg_mean) / neg_mean * 100 if neg_mean != 0 else float('inf')\n","\n"," print(f\"Caractéristique '{feature}':\")\n"," print(f\" - Tweets négatifs: {neg_mean:.2f}\")\n"," print(f\" - Tweets positifs: {pos_mean:.2f}\")\n"," print(f\" - Différence relative: {diff:.2f}%\")\n"," print()\n","\n","\n"," # Créer un DataFrame pour stocker les différence relatives\n"," diff_df = pd.DataFrame(index=features, columns=['neg_mean', 'pos_mean', 'diff_pct'])\n","\n"," for feature in features:\n"," neg_mean = balanced_df[balanced_df['sentiment'] == 'Négatif'][feature].mean()\n"," pos_mean = balanced_df[balanced_df['sentiment'] == 'Positif'][feature].mean()\n","\n"," # Éviter division par zéro\n"," if neg_mean != 0:\n"," diff_pct = (pos_mean - neg_mean) / abs(neg_mean) * 100\n"," else:\n"," diff_pct = float('inf') if pos_mean > 0 else 0\n","\n"," diff_df.loc[feature, 'neg_mean'] = neg_mean\n"," diff_df.loc[feature, 'pos_mean'] = pos_mean\n"," diff_df.loc[feature, 'diff_pct'] = diff_pct\n","\n"," # Trier par différence relative\n"," diff_df_sorted = diff_df.sort_values('diff_pct', ascending=False)\n","\n"," # Renommer les index en français avec des espaces et des majuscules\n"," feature_mapping = {\n"," 'text_length': 'Longueur Texte',\n"," 'word_count': 'Nombre Mots',\n"," 'capitals_ratio': 'Ratio Majuscules',\n"," 'exclamation_count': 'Nombre Exclamations',\n"," 'question_count': 'Nombre Questions',\n"," 'ellipsis_count': 'Nombre Ellipses',\n"," 'hashtag_count': 'Nombre Hashtags',\n"," 'mention_count': 'Nombre Mentions',\n"," 'url_count': 'Nombre URLs',\n"," 'positive_emoticon': 'Emoticone Positive',\n"," 'negative_emoticon': 'Emoticone Negative'\n"," }\n"," diff_df_sorted.index = diff_df_sorted.index.map(feature_mapping)\n","\n"," # Renommer les colonnes en français avec des majuscules et des espaces\n"," diff_df_sorted.columns = ['Négatif (moyenne)', 'Positif (moyenne)', 'Différence Relative']\n","\n"," return stats, diff_df_sorted\n","\n","stats, diff_df_sorted = analyser_caracteristiques_distinctives(df)\n","\n","print(\"Caractéristiques structurelles des tweets par sentiment :\")\n","print(diff_df_sorted)"]},{"cell_type":"code","execution_count":27,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":434},"id":"sZawfr7CWjJA","executionInfo":{"status":"ok","timestamp":1751537506881,"user_tz":-120,"elapsed":550,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"91164da9-80a3-4fde-eed4-b244c6c87a4d"},"outputs":[{"output_type":"display_data","data":{"text/plain":["
"],"image/png":"iVBORw0KGgoAAAANSUhEUgAABW0AAAMWCAYAAACKoqSLAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAg1pJREFUeJzs3Xl4VdXZP+4nIQlhCmGeZXRCcMQJQUCcQUVAi6CFamm11qHa0qqvlTq8LVqnOrR9tXWuilisKOJQQUFUHHDAalFRUREFMVLmhOzfH/7I1zRBwyGQLbnv6+p1cdZea+1nn7OzPf1kZ+2sJEmSAAAAAAAgFbJrugAAAAAAAP4foS0AAAAAQIoIbQEAAAAAUkRoCwAAAACQIkJbAAAAAIAUEdoCAAAAAKSI0BYAAAAAIEWEtgAAAAAAKSK0BQAAAABIkZyaLgAAoCb84Q9/iC+++CJ++tOfRrNmzWq6HAAAgDLutAUAap0bb7wxzjrrrCguLhbYAgAAqSO0BYBt1MqVK+Oqq66KAQMGRKtWrSIvLy+aNGkS+++/f/z617+OhQsX1nSJNWLevHlx7rnnxrBhw+KSSy7JaI4ZM2ZEVlZWjBkzpnqL+5pbb701srKyYvz48VtsH99FW+O9h+8iPxsAsG0R2gLANmj27NnRrVu3OPfcc2POnDnRo0ePGD58ePTu3TvefffduOSSS2KHHXaIJ554oqZL3WxZWVnRqVOnKvVdvXp1jBgxInbZZZe4/fbbIysra8sW9w3GjBkTWVlZMWPGjBqrgc23LQVl29KxbIvGjx8fWVlZceutt9Z0KVuF8xGA2s6atgCwjXnllVdi4MCBsWbNmvjlL38ZF154YTRo0KBse2lpaTzwwAMxbty4+Oijj2qw0q3vjTfeiOHDh8ePfvSjqF+/fsbz7LPPPvHmm29G48aNq7G68o499tjYb7/9onnz5ltsH8C2Y2tclwCArUdoCwDbkCRJ4qSTToo1a9bE+PHj46KLLqrQJzs7O4YOHRoDBw6MDz/8sAaqrDm9evWKXr16bfY89evXj5122qkaKtq4xo0bC1+AKtsa1yUAYOuxPAIAbEOmTZsW8+bNi/bt28cFF1zwjX0bN24cPXr0KHv9ySefxOWXXx79+vWLdu3aRV5eXrRu3TqGDh0aL7zwQqVzdOrUKbKysiJJkrjuuutit912i/r168fuu+8eEV+FyHfffXeMGDEidthhh2jQoEE0atQo9tlnn7jxxhujtLT0G4/l6KOPjlatWkXdunWjQ4cOMXjw4Lj//vsj4v+t+RoR8cEHH0RWVlbZ//r3719urlWrVsVvf/vb2GOPPaJhw4bRsGHD2G+//eK2226rdN8bllxYt25dXHzxxbHTTjtF3bp1Y8iQIRGx8T/bTZIk7rrrrujTp0+0atUq8vPzo0OHDnHwwQfHDTfcUG7+DfseMGBAudrff//9csdX2Zq2y5Yti5/+9KfRtm3byM/Pj+7du8e1114bSZJUulzEt/1Z9YbPsTJvvvlmjBkzJjp06BB169aNVq1axYgRI+KNN96otP/UqVPjkEMOiXbt2kXdunWjbdu20adPn/jNb35Taf+NeeONN2LIkCHRpEmTaNSoUfTt2zemTZv2jWM2nG8HHXRQNGnSJPLz82PnnXeO8ePHx6pVqyr0X7FiRfz2t7+N3XbbLRo3bhwNGzaMrl27xnHHHRePPvrot9Y4ZsyYGDBgQERE3HbbbeU+x/Hjx8eaNWsiPz+/0uU7hgwZEllZWdGnT58K23r16hXZ2dmxZMmScu3Lli2L8847L7p37x716tWLxo0bx0EHHRQPPfTQRmv88MMP46c//Wl07do18vPzo2nTpjF48OCYPXv2Jh3LBvPmzYsTTzwxunTpEvn5+dGiRYvYfffd4+yzz45PPvnkW9+zDfvasDTII488En369ImGDRtGkyZNYujQofHWW29VGLNmzZr4y1/+Esccc0x06dIl6tWrF4WFhXHggQfGPffc8637efTRR2PAgAFRWFgYWVlZUVRU9K11buq5PG3atBg0aFC0aNEi6tatG126dIlzzjknPv/882+s7emnn46DDjooGjVqFAUFBTFo0KD417/+Va5/p06dyvb7gx/8oNzns2GJlY1dl77+8//SSy/FEUccEYWFhdG0adM4/vjjy/7iYuXKlTFu3Ljo1KlT5OfnR48ePWLSpEkbfX825drw9evZwoULY+TIkdGiRYuoV69e9OrVK6ZMmVLh/anK+QgA2zJ32gLANuThhx+OiIjjjjsucnI27T/z//jHP+KXv/xl7LjjjrHrrrtGQUFBvP322zF58uR46KGH4qGHHopDDz200rGnnnpq3HLLLdGvX7/YeeedY926dRERsXbt2hg5cmQ0a9YsunfvHnvuuWd8/vnnMXv27Dj99NNjzpw5lQaJ5557blx11VWRnZ0d+++/f2y33XaxaNGieOaZZ+Kjjz6KYcOGRbdu3WL06NFx2223RYMGDWL48OFl479+t9lnn30WhxxySLz22mvRunXr6NevXyRJErNnz44xY8bEiy++GNddd12FGkpLS2PIkCHx9NNPR79+/WLXXXeNZs2afeN7OG7cuPj9738fdevWjQMPPDCaN28eixcvjtdeey3eeeedOP300yMiYvTo0TFr1qx4991347DDDovWrVuXzdGwYcNv3McXX3wRffr0iTfffDNat24dxxxzTCxbtix+/vOfxzvvvPONYzfVAw88ECNGjIi1a9fG7rvvHvvtt198+OGHMXHixJgyZUo88sgjceCBB5b1v+GGG+KnP/1p1KlTJw444IDo169fLF26NN58882N3vldmRdffDEGDBgQK1asiB49ekSPHj3i7bffjiOPPDJOO+20SseUlpbGiSeeGHfffXc0bNgwevXqFU2aNIkXX3wxfvOb38QjjzwSM2bMiHr16kVExPr16+Pggw+O559/Ppo3bx79+/eP/Pz8+Oijj2Lq1KnRoEGDOOyww76xzj59+sTixYvj0Ucfja5du5YLYHfffffIz8+PfffdN55++ul4//33y8Lb0tLSePrppyMi4oUXXohVq1aVLdfx5Zdfxty5c6N79+7RokWLsvnmz58fBx98cHz44YfRqVOnOOyww+I///lPPPfcc3HUUUfFFVdcET//+c/L1ffss8/GoEGD4osvvogdd9wxBg0aFEuWLIlHH300pk2bFnfddVd873vfq9KxRES89NJL0adPn1izZk3suuuuccwxx8SqVatiwYIFce2118aQIUOiTZs23/bxlrnvvvvij3/8Y/Tq1SuOOuqoeO2112Ly5Mnx5JNPxlNPPRW77bZbWd/3338/fvjDH0bbtm1jxx13jH322ScWL14cs2fPjpkzZ8Zbb7210TDvb3/7W9x8883Rq1evOOKII+Ldd9/91vWsN/Vc/tWvfhUTJkyIvLy82HvvvaNNmzbx6quvxtVXXx0PPvhgPPPMM9GqVasK+5kyZUpce+210atXrzjyyCPjlVdeialTp8bzzz8f8+bNK7s2DB8+PJ544ol49dVX44ADDohu3bqVzfH168c3ef755+PUU0+NHj16xGGHHRYvv/xy3HffffHqq6/GnDlz4pBDDokPPvggDjzwwFi6dGk89dRTcfzxx8cjjzxS4WdhU68NG7z//vux9957R6NGjWLgwIGxcOHCePbZZ2PIkCHxyCOPlP03pirnIwBs8xIAYJtxwAEHJBGR3HHHHZs89rXXXkvmzZtXoX3atGlJXl5e0rVr16S0tLTcto4dOyYRkTRv3rzSscXFxcnkyZOTdevWlWv/7LPPkl69eiURkTz11FPltt1xxx1JRCRt27ZN5s6dW27bqlWrkscee6xcW0QkHTt23OhxHXnkkUlEJGeddVayZs2asvbFixeX1fDII49UmDMikm7duiUfffRRhTmnT5+eREQyevTosrbVq1cndevWTRo1apQsWLCgwvvw9NNPl2sbPXp0EhHJ9OnTK637lltuSSIiueiii8q1n3rqqUlEJIcffniycuXKsvbnn38+adiwYaXvx0UXXZRERHLLLbdUuq8Nn+PXvffee0mDBg2Shg0bJo8//ni5bY888kiSm5ubdOjQIVm7dm1Z+3bbbZdkZWUlL7zwQrn+paWlGz3O/1ZaWpp07949iYjk17/+dbltN9xwQ9ln8/X3PkmS5PLLL08iIunfv3/yySeflLWvXbs2OeWUU5KISH75y1+WtT/55JNJRCR77713snr16nJzffnll8mLL75YpXorOxe+7te//nWF9/7ll19OIiLZZZddkogo9/4++OCDSUQkp59+ellbSUlJ0rNnzyQikssvvzxZv3592ba333476dy5c1KnTp3k9ddfL3cMbdq0SerUqZPceeed5Wp64YUXkiZNmiQNGzZMPvvssyofy/e///0kIpLf//73Fba9+eabyaJFiyod9982nPsRkfzf//1fWXtpaWnyy1/+MomIZPfddy83ZunSpcnjjz9e4Rq0YMGCpFOnTkl2dnby3nvvbXQ/99xzT5Vq22BTzuWJEycmEZH06NEjefvtt8v13fD5f+9736u0tuzs7GTy5Mll7SUlJcmwYcOSiEguvPDCcmO+7ed4Y5/fhnERkfzxj38sa1+3bl1y8MEHJxGRdO/ePTnooIOSFStWlG2/+eabk4hIDjzwwHLzZXJt2HA9i4jk3HPPLXcOX3311UlEJH379q3S8QBAbSG0BYBtyE477ZRERDJt2rRqnXfUqFFJRCSvvfZaufYNYd8VV1yxyXM+/vjjSUQk55xzTrn2nXfeeZNClm8KbefOnVsWzH09JNhgQ3h29NFHV5gzIpL77ruv0nkrCxM+/fTTSsOmjckktF2xYkVSr169JDs7O3nnnXcqjNkQeFVHaHvWWWclEZFcd911lY4588wzk4hI/v73v5e11atXL2nSpEml/atqQ5japUuXpKSkpML2fffdt8J7X1xcnDRv3jxp0KBBsnjx4gpjVq1albRu3Tpp0qRJ2Xlw7733JhGRnH322ZtV77cFSxuO5+vbr7rqqiQiymq44IILyradc845SUQkEydOLGubPHlyEhHJsGHDKt3H3//+9yQikjPPPLOsbUMQdu6551Y6ZkMNV111VZWP5YgjjkgiInnllVcq3V5VG8793r17V9i2bt26pH379klEJDNnzqzSfDfddFMSEckf/vCHSvczaNCgTa5xU87l3XbbLYmIcqH5BqWlpcnuu++e1KlTJ1myZEmF2kaNGlVhzIsvvphERNKvX79y7Zsb2vbp06fCmH/84x9l4fG///3vcttKSkqS5s2bJ7m5ueV+8ZbJtWHD9axz587lwtwk+ernt0mTJklubm65bUJbAGo7a9oCAGXWrl0b//jHP+KCCy6IH/3oRzFmzJgYM2ZMvP766xER8fbbb1c67uijj/7GeV955ZW4/PLL4/TTT48f/OAHMWbMmPjjH/9YYc5FixbFm2++GYWFhXH88cdv9vE89thjEfHV+qHZ2RW/9mxY43bOnDkVtmVlZcVRRx1V5X21bNky2rdvH6+88kr86le/igULFmRe+Ea89NJLsXr16ujVq1d07dq1wvYTTjih2va14b0bOnRopdv79u0bEVHuvdtrr73iiy++iFNOOWWja95+m5kzZ0bEV38OXqdOnQrbKzvGl19+OZYuXRq9e/eu9E/Q69WrV1bbhvNt9913j+zs7LjlllvipptuqnTd0eqw3377Rd26dcvWHY34au3RRo0axbBhw6Jjx44VtkVEuXWZM/ksMhnzbfbaa6+IiDj99NNjxowZUVJSUuWxlRkxYkSFttzc3LKlTjacC183a9asuPTSS+O0004ru5bcd999EZH59akyVT2XP/vss3j11Vdj++23L7dG+AZZWVlxwAEHxPr16+Oll16qsL2yJWd22GGHiIgqrxFcVZXtq0uXLhHx1Zq5G/a7QZ06daJjx45RXFwcS5cuLWvfnHOrf//+kZeXV64tJycnOnfuHMXFxVvs5xAAvousaQsA25ANa67+9wOMquL111+Po48+uuxBWJX5z3/+U2n7dtttV2n7unXrYsyYMXH33XdXac4PP/wwIr4KEr5tzcmq2HAsF1xwwTc+mG3NmjUV2lq2bBl169bdpP3ddtttMWLEiJgwYUJMmDAhOnbsGP369YsRI0bEEUccsUlzVWbRokUREdGxY8dKt1f2wKtMbXjv2rVr9439vh7m3HDDDTFkyJD461//Gn/961+jVatW0a9fvxg6dOhGQ9j/lskxbqj18ccf/9bzZunSpbHjjjvGDjvsEJdffnmcd9558aMf/ahsrc+BAwfGmDFjYtddd/3WWquiXr16sc8++8TMmTPj/fffj+222y5mzpwZffv2jTp16kT//v3j7rvvjlWrVkVxcXG88sorFdaz3XB8o0aNilGjRn3jsf33mAMOOOAb6/v6mG/zi1/8ImbNmhUzZsyIAQMGRMOGDWP//fePQYMGxZgxY6Jx48ZVnivi2z/jDedCxFdr/Q4dOjSefPLJjc63qdenb1LVc3nD+/z2229X6dz7b+3bt6/Q1qhRo4j46pdo1amyn+UNa2hv7Od8w/av15LJtWGDyo43YssdMwB8lwltAWAbsvvuu8czzzwTL7/8cpx44olVHpckSRx//PHx/vvvx6mnnhqnnnpqdOnSJRo2bBhZWVlx/vnnx29/+9tIkqTS8fn5+ZW2X3XVVXH33XdHz5494/LLL48999wzmjRpErm5uTF//vzYcccdNzpndSgtLY2Irx5qU9mdqd9kY8f0TQ466KB455134qGHHopp06bFjBkz4vbbb4/bb789hg0b9o1PYq9JG96nytpGjx79jWP33Xffsn/vuuuu8a9//SumTZsWU6dOjRkzZsTEiRNj4sSJsf/++8eMGTMq3GVXHTbU2q1bt28NKb/+MLlzzz03jj/++HjggQfi8ccfj5kzZ8bVV18d11xzTVx99dVx1llnVUt9/fv3j5kzZ8aMGTNit912iy+++KLsTtr+/fvHbbfdFrNnz47Vq1dHaWlp9OvXr9LjO/zwwyu9k3iD5s2bVxgzfPjwaNCgwUbHfP2hfd+moKAgnnzyyXjmmWdiypQpMWPGjHjyySfj8ccfj9/+9rcxc+bM2H777as836b45S9/GU8++WT069cvfvOb30SPHj2isLAw6tSpE4899lgcdthhm3x9+iZVPZc3vM+tW7f+1gfXVRZSV/YXAFvKN+1rU+rI5NqQyX4AoLYT2gLANmTQoEFxww03xH333ReXX3555ORU7T/1b731Vrz11lvRq1evsmULvi7TP/WfPHlyRETcfffdscsuu3zrnB06dCjbliTJZt9tu+GuriFDhsS55567WXNVVUFBQYwcOTJGjhwZERHPPfdcHHfccXH//ffH1KlT48gjj8x47jZt2kRExAcffFDp9o21bwhKV6xYUWHb+vXrY/HixRXa27dvH++++25ceeWV5YLOb5Ofnx9DhgyJIUOGRETEG2+8ESNHjoxnn302br755vjJT37yjeMzOcYNn/NOO+0Ut956a5VrjfjqnDvjjDPijDPOiJKSkrjnnnviBz/4QYwbNy6+//3vR5MmTTZpvsr069cvLrnkkpgxY0Z88cUXERHlQtuIr5ZFWL16dbm2DTYc3w9/+MMYNmxYlfbZvn37+Pe//x2/+tWvypY1qA5ZWVnRp0+f6NOnT0R8tTzA2WefHXfffXdccMEFMXHixCrP9W2fcdu2bcvaJk+eHHXq1IkHH3wwCgoKyvXfEkuRRFTtXN7w2TRv3nyTz73vqkyvDQDApvGrTgDYhhx++OGxyy67xEcffRSXXXbZN/Zdvnx52VqNG4Kkyv509YsvvojHH388o3q+ad7Kwp22bdvGzjvvHEVFRWXrVH6b3Nzcja6tecghh0TE/wuPa8J+++0XJ510UkREzJs3r6x9Q5C6KeuC7rXXXlGvXr146aWXKg2q7rnnnkrHbQhC58+fX2Hb9OnTo7i4uEJ7db13u+yyS5x++ukRUf74N2bDepj3339/pXcAV3aMe++9dzRu3DieeuqpWLZsWca15uTkxIknnhh77713rFu3bqNrpH5dVT7H3r17R15eXsyYMSNmzJgRBQUFseeee0bEV0sBbFjXdsN6tv99p20mn0UmYzI5J1u2bBnjx4+PiKp9vl9X2TWgpKQk7r///oiIsmA44qtrSUFBQYXAdmPzbAmVncvt27ePnXbaKf71r39V+vNVnTL5fLaErXVdTcvxAkBNEdoCwDYkKysr7rzzzsjPz4/x48fHeeedFytXrizXJ0mSePDBB6NXr17xwgsvRMRXf1aenZ0dTz75ZLmgas2aNXHqqadmHIRteLDNn/70p3LtkyZNittvv73SMb/61a8iIuKcc86J1157rdy2NWvWVAiQ27ZtG59++mkUFRVVmGvfffeNQw45JJ555pk4/fTTY/ny5RX6vPrqqzFt2rQqH9PGLFy4MG699dZYtWpVhZqnT58eEf/vTuINdUdE/Pvf/67yPho2bBgnnXRSrF+/Ps4444yyOzMjIl588cW4/vrrKx134IEHRkTEnXfeWW7N4vfeey/OPPPMSsece+65Ua9evfj5z38ef//73ytsX7t2bUyaNCk++uijiIhYtWpV/OEPf6jwOZSWlpa9v18//o3p379/7LTTTvHuu+/GpZdeWm7bn//853j22WcrjKlbt26MGzcu/vOf/8TQoUMrDbQ//vjjuOOOO8peT58+PZ544okKwfB7770Xb775ZmRlZW10/c2vq8rnuGFd2w8++CAee+yxsvVsv37Mc+bMiVdeeSV22mmnCksgDBs2LLp37x533XVXXHLJJRXW/UySJJ555pl45plnytp+/OMfR8uWLePyyy+P//u//6twnCUlJfHoo4+WC1q/7Vj+9Kc/xXvvvVehferUqRFRtc/362bNmhV//etfy7VddNFFsXDhwth1113LAvyIr64lX3zxRdx7773l+l999dVlP1/VZVPP5QsvvDBKS0tj2LBh8corr1SY7/PPP4+bbrpps+vK5JqxJWzqtSFTaTleAKgxCQCwzZk1a1bSqlWrJCKS+vXrJwMHDkxGjhyZDBo0qKw9Pz8/eeKJJ8rGjB07NomIpF69esmgQYOS4cOHJ61atUqaN2+ejBkzJomI5JZbbim3n44dOybf9HXiqaeeSurUqZNERLLXXnslJ5xwQtKrV68kIpKf//znSUQk/fr1qzDujDPOSCIiqVOnTtKnT5/khBNOSPr3758UFhYmu+22W6V9O3funIwaNSo55ZRTkssvv7xs+6effprsscceSUQkhYWFSf/+/cveiw4dOiQRkZx11lnl5oyIpGPHjhs9runTpycRkYwePbqsbe7cuWXv94EHHpiMHDkyOeaYY5IWLVokEZH06tUrWbNmTVn/F198McnKykry8/OTY445JjnllFOSU045JVm6dGmSJElyyy23JBGRXHTRReX2/fnnnyc77rhjEhFJmzZtku9973vJoYcemuTk5CSnn376Rmv//ve/n0RE0rhx4+Soo45KBg4cmDRo0CA57rjjNvo5PvDAA0n9+vWTiEi6deuWHHXUUcmIESOSvn37Jg0aNEgiIpk7d26SJEnyxRdfJBGR5ObmJvvtt18yYsSIZOjQoWXvcadOncqO7ds899xzZfP37NkzOeGEE5K99947ycrKSn7yk59UeO+TJEnWr1+fnHTSSUlEJHl5ecm+++5bVsMuu+ySZGVllTt3rr766iQikhYtWiSHH354MmrUqOTQQw9N6tatm0REcsYZZ1Sp1iRJkl133TWJiGTvvfdOxowZk5xyyinJP/7xj3J9LrjggiQikohIrrjiinLbNnzWEZGceuqple5j/vz5SefOnZOISFq2bJkcfPDByciRI5NDDz00admyZRIRydVXX11uzLPPPps0b948iYikQ4cOyRFHHJGMHDkyOeigg5LCwsIkIpLJkydX+Vh22223JCKS7t27J8OGDUu+973vlbXl5+cns2bNqtL7NXr06CQiktNOOy3JyspK9tlnn+SEE05IdtlllyQikoKCguTll18uN+bOO+8se4/69u2bnHDCCUn37t2T7Ozs5Gc/+1ml58SG/UyfPr1KdW2Qybl8/vnnJxGRZGdnJ3vuuWdy3HHHJcOHD0/22GOPpE6dOknjxo03qbbKfo4//vjjJD8/P6lTp05y+OGHJyeffHJyyimnJG+99VaSJJVfl5IkSS666KJKr99JkiTvvffeRq/DSZIk/fr1SyIiee+998q1b8q1IUk2fj37tv1U5WcLALZVQlsA2Eb95z//SX7/+98n/fr1S1q0aJHk5OQkhYWFyb777ptcdNFFyYcffliuf0lJSXLllVcm3bt3T/Lz85NWrVolo0aNSt5///2N/p/+bwttk+Sr4Oiggw5KmjRpkjRq1Cjp3bt3cv/9939rWPCPf/wjOeyww5KmTZsmeXl5Sfv27ZPBgwcnf//738v1W7FiRfLTn/406dChQ5KTk1PpnKtXr07+8Ic/JL17904aN26c5OXlJR06dEj69euXXHHFFRXei0xC2+XLlydXXnllcuSRRyadOnVK8vPzk2bNmiW9evVKrr766mTlypUV5rnrrruSPffcM6lXr15ZILUhtPimkGPp0qXJaaedlrRu3TqpW7dustNOOyW///3vk9LS0o3Wvnbt2uRXv/pV0qFDhyQvLy/p2rVrcumllyYlJSXf+Dm+8847yU9+8pNk++23T/Lz85NGjRolO+64YzJixIhk4sSJydq1a5MkSZLi4uLkhhtuSIYOHZp07do1qV+/flJYWJjsuuuuyW9+85vk888/3+j7WZnXXnstOeqoo5LGjRsnDRo0SPbff//koYce2mgwtcE//vGPZNCgQUnLli2T3NzcpGXLlslee+2VjBs3LnnppZfK+r399tvJ//zP/yQHHHBA0qZNmyQvLy9p165dMnDgwOT+++9PSktLq1zr22+/nQwZMiRp1qxZkp2dXenn9vjjj5d9xi+88EK5bRt+FiIiueeeeza6n6KiouTSSy9N9txzz6Rhw4ZJfn5+0qlTp+Swww5LbrjhhmTJkiUVxnzyySfJuHHjkl122SWpX79+Ur9+/aRr167JMccck9x6663Jf/7znyofy4MPPpicfPLJyS677JIUFhYm9evXT3bYYYfkhz/8YVlwWBVfDyynTJmS7L///kn9+vWTxo0bJ8ccc0zyxhtvVDru4YcfTvbbb7+kUaNGSWFhYXLwwQcnM2bM2Og5kWlom+m5/NRTTyXHHXdc0rZt2yQ3Nzdp1qxZsuuuuyY//elPk6eeemqTatvYz/Gjjz6aHHDAAUnDhg3LzpkNc2zN0DZJqn5tSJLMQ9uq/GwBwLYqK0m24CObAQDYqrKysqJjx47llkGANBkzZkzcdtttMX369AoPXQMA4CvWtAUAAAAASBGhLQAAAABAightAQAAAABSxJq2AAAAAAAp4k5bAAAAAIAUEdoCAAAAAKSI0BYAAAAAIEWEtgAAAAAAKZJT0wWkxRdffBElJSU1XQYAAAAAsI3KycmJJk2afHu/rVDLd0JJSUkUFxfXdBkAAAAAQC1neQQAAAAAgBQR2gIAAAAApIjQFgAAAAAgRYS2AAAAAAAp4kFkAAAAAPAdV1JSEqtWrarpMoiI+vXrR07O5sWuQlsAAAAA+A4rKSmJlStXRqNGjSI72x/W16TS0tL4z3/+Ew0aNNis4NanCAAAAADfYatWrRLYpkR2dnY0atRos+969kkCAAAAwHecwDY9quOz8GkCAAAAAKSI0BYAAAAAqBGzZ8+Odu3axZdfflnTpaSK0BYAAAAAarnPP/88fvWrX8Xee+8dnTt3jt133z1GjhwZL7zwQrXtY/jw4fHrX/+6XFuvXr1i7ty5UVBQUG37ydTZZ58dJ598ck2XERERmT/CDAAAAADYJowdOzbWrVsX11xzTXTs2DGWLFkSs2bNii+++GKL7jcvLy9atmy5RffxXeROWwAAAACoxb788st4/vnn44ILLogDDjgg2rdvH3vssUecccYZceihh5b1+fnPfx49e/aMHXfcMY477rh44403yua48sor45BDDolJkybFvvvuGzvttFOcdtppsWLFioj46i7WZ599Nv7yl79Eu3btol27dvHhhx9WWB7h3nvvjZ133jkef/zx6Nu3b3Tt2jXGjh0bq1evjokTJ8a+++4b3bt3jwsvvDDWr19ftv+1a9fGxRdfHHvttVd069YtBg8eHLNnzy7bvmHeGTNmRL9+/WL77bePUaNGxaefflpW/3333RePPvpoWX1fH7+1CW0BAAAAoBZr0KBBNGjQIKZNmxZr166ttM+Pf/zjWLp0adx5553xyCOPRM+ePeN73/teuTtxP/jgg3j00Ufjtttui9tuuy2ee+65uP766yMiygLVUaNGxdy5c2Pu3LnRtm3bSve1evXq+Otf/xp//OMf46677opnn302TjnllHjyySfjjjvuiGuvvTbuvPPOeOihh8rG/M///E+89NJLceONN8YTTzwRgwcPjhNPPDEWLFhQbt4//elP8Yc//CH+/ve/x8cffxyXXHJJRESceuqpcdRRR8WAAQPK6uvVq9dmv7eZsjwCAAAAANRiOTk5cfXVV8e4cePizjvvjB49esR+++0XxxxzTHTv3j3mzJkTr7zySrz66qtRt27diIj49a9/HY8++mg8/PDDceKJJ0ZERGlpaVx99dXRsGHDiIgYNmxYzJo1KyIiCgoKIi8vL/Lz8791OYTi4uL47W9/G506dYqIiEGDBsX9998fr776ajRo0CB22GGH6N27d8yePTuOOeaY+Pjjj+Pee++NOXPmROvWrSPiqxB2+vTpce+998Z5551XNu/vfve7snnHjBkT11xzTUR8FVzn5+fHunXrUrFcg9AWAAAAAGq5QYMGxcCBA2POnDnx0ksvxfTp0+OPf/xjXHHFFbF69epYuXJl9OjRo9yYNWvWxAcffFD2ukOHDmWBbUREy5Yt4/PPP9/kWurVq1cWrEZEtGjRIjp06BANGjQoa2vevHnZ3G+++WasX78++vbtW26edevWRZMmTTY6b6tWrWLp0qWbXN/WILQFAAAAACI/Pz8OPPDAOPDAA+NnP/tZ/PznP48rr7wyRo8eHS1btoxJkyZVGNO4ceOyf+fklI8as7KyorS0dJPryM3NrTDPN829cuXKqFOnTjzyyCNRp06dcv2+HvRWNm+SJJtc39YgtAUAAAAAKth+++1j2rRp0bNnz1iyZEnk5OREhw4dMp4vNzc3oxD32/To0SPWr18fn3/+eey7774Zz5OXl1fu4WY1yYPIAAAAAKAWW7ZsWRx33HFx//33x7/+9a9YuHBhTJkyJf74xz/GYYcdFn379o299torTj755Hjqqafiww8/jBdeeCF+97vfxauvvlrl/XTo0CHmzp0bH374YSxbtqzaAtyuXbvG0KFD46yzzoqpU6fGwoULY+7cuXHdddfFE088UeV52rdvH2+++Wa88847sWzZsiguLq6W+jLhTlsAAAAAqMUaNGgQe+65Z9x0003xwQcfRHFxcbRt2zZGjhwZZ5xxRmRlZcUdd9wREyZMiHPOOSc+//zzaNGiRey3337RvHnzKu/nxz/+cZx99tnRv3//WLNmTTz33HPVdgxXXXVVXHvttXHxxRfH4sWLo2nTprHnnnvGwQcfXOU5Ro0aFc8++2wceeSRsXLlyrjvvvuid+/e1VbjpshK0rpww1a2ZMmSGk3PAQAAACATy5cvj4KCgpoug6/Z2GeSm5sbLVq0+NbxlkcAAAAAAEgRoS0AAAAAQIoIbQEAAAAAUkRoCwAAAACQIkJbAAAAAIAUEdoCAAAAAKSI0BYAAAAAIEWEtgAAAAAAKSK0BQAAAABIkZyaLgCoPcbc9mxNl7DV3Dp6/5ouAQAAALY5s2fPjrfffjtGjx5d06VsUe60BQAAAABS74MPPogzzjgjdt999622z3333TduuummstefffZZjBgxIrp16xY777zzFtuvO20BAAAAYBv0yS9+uFX31+aKmzep/9lnnx333XdfnHfeefHTn/60rH3atGlxyimnxMcff1zWtnbt2vjJT34SV1xxRey2227VVvMG9957b4wfPz7efPPNcu1Tp06N+vXrl72+6aab4rPPPovHHnssCgoKqr2ODYS2AAAAAECNyM/PjxtvvDFOPPHEKCws3Gi/unXrxsMPP7z1Cvv/NWvWrNzr999/P3r27BldunTZovu1PAIAAAAAUCP69OkTLVq0iOuvv36jfebMmRPHHntsdO3aNXr16hUXXnhhrFq1qmz7p59+GieddFJ07do19ttvv5g8eXKFZQ3+/Oc/x8CBA6Nbt27Rq1evOO+882LlypUR8dU6ueecc04sX7482rVrF+3atYsrr7wyIsovj7DvvvvG1KlTY9KkSdGuXbs4++yzt8A78hWhLQAAAABQI+rUqRO/+tWv4pZbbolFixZV2P7+++/HqFGj4sgjj4zHH388/vjHP8acOXPiggsuKOtz1llnxaeffhr33Xdf3HTTTXHXXXfF0qVLy82TnZ0dF198cUyfPj2uueaaeOaZZ+LSSy+NiIhevXrFb37zm2jUqFHMnTs35s6dG6eeemqFWqZOnRoDBgyIo446KubOnRsXX3xxNb8bX6t3i80MAAAAAPAtjjjiiOjevXvZ3a1fd/3118exxx4bY8eOjS5dusTee+8dl1xySUyaNCnWrFkT77zzTsycOTOuuOKK2HPPPaNnz55xxRVXxJo1a8rNM3bs2DjggAOiQ4cO0adPnxg3blxMmTIlIiLy8vKiUaNGkZWVFS1btoyWLVtGgwYNKtTSrFmzyMvLi/z8/GjZsqU1bQEAAACAbdcFF1wQxx9/fIU7XP/1r3/Fm2++GZMnTy5rS5IkSktL48MPP4wFCxZETk5O9OzZs2x7586dK6yP+/TTT8f1118f7777bvznP/+J9evXx5o1a2L16tVRr169LXpsmRDaAgAAAAA1ar/99ot+/frFb3/72zj++OPL2leuXBknnnhinHzyyRXGtGvXLhYsWPCtc3/44YcxZsyYOOmkk+KXv/xlFBYWxgsvvBDnnnturFu3TmgLAAAAAFCZ888/Pw499NDo2rVrWVvPnj1j/vz50blz50rHdO3aNUpKSmLevHmx6667RkTEe++9F0VFRWV9XnvttSgtLY2LLroosrO/Wi12w9IIG+Tl5cX69eur+YgyZ01bAAAAAKDG7bzzznHsscfGX//617K2n/zkJ/Hiiy/GBRdcEPPmzYsFCxbEo48+WvYgsm7dukXfvn1j3LhxMXfu3Jg3b16MGzcu8vPzIysrKyIiOnXqFMXFxfHXv/41Pvjgg5g0aVLccccd5fbdvn37WLlyZcycOTOWLVsWq1ev3noHXgmhLQAAAACQCr/4xS+itLS07HX37t3j/vvvjwULFsTQoUPjsMMOiyuuuCJatWpV1ufaa6+NFi1axLBhw+KUU06JUaNGRcOGDaNu3boREbHLLrvERRddFDfeeGMcdNBBMXny5DjvvPPK7XfvvfeOk046KU477bTo2bNn3HjjjVvngDciK0mSpEYrSIklS5ZEcXFxTZcB27Qxtz1b0yVsNbeO3r+mSwAAAKCWWL58eRQUFNR0GamxaNGi2HvvveOee+6Jvn371kgNG/tMcnNzo0WLFt863pq2AAAAAMB31qxZs2LVqlWx0047xaeffhqXXXZZdOjQIfbbb7+aLi1jQlsAAAAA4DurpKQkfve738UHH3wQDRs2jF69esX1118fubm5NV1axoS2AAAAAMB3Vv/+/aN///41XUa18iAyAAAAAIAUEdoCAAAAAKSI0BYAAAAAIEWEtgAAAAAAKSK0BQAAAABIEaEtAAAAAECKCG0BAAAAgG3G7Nmzo127dvHll19+Y7999903brrpprLXn332WYwYMSK6desWO++885Yu8xvl1OjeAQAAAIAtYsxtz27V/d06ev9N6n/22WfHfffdFxERubm50a5duxg+fHicccYZkZOTeWzZq1evmDt3bhQUFERExL333hvjx4+PN998s1y/qVOnRv369cte33TTTfHZZ5/FY489Vja2pghtAQAAAIAaMWDAgLjqqqti3bp18c9//jMuuOCCyMnJiTPOOCPjOfPy8qJly5bf2q9Zs2blXr///vvRs2fP6NKlS8b7ri6WRwAAAAAAasSGgLV9+/YxevTo6Nu3bzz22GNRVFQUZ555ZnTv3j26du0aJ554YixYsKBs3EcffRSjR4+O7t27R7du3WLAgAHxz3/+MyLKL48we/bsOOecc2L58uXRrl27aNeuXVx55ZURUX55hH333TemTp0akyZNinbt2sXZZ5+91d+Lr3OnLQAAAACQCvn5+fHFF1/Ez372s3jvvffilltuiYYNG8b//u//xkknnRQzZsyI3NzcOP/886O4uDjuv//+qF+/fsyfPz8aNGhQYb5evXrFb37zm/j9738fTz/9dEREpf2mTp0aZ511VjRs2DAuvvjiyM/P3+LH+k2EtgAAAABAjUqSJGbOnBlPPfVUDBgwIKZNmxYPPPBA7L333hERcd1118Xee+8d06ZNi6OOOioWLVoURx55ZNkDwzp27FjpvHl5edGoUaPIysr6xiUTmjVrFnl5eZGfn1+lpRW2NKEtAAAAAFAjnnjiidh+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Z8Vee+1VYXuXLl3iww8/3OziAAAAAABqm4xC28WLF8cee+yx0e0NGzaMFStWZFwUAAAAAEBtlVFoW79+/Vi+fPlGt3/00UdRWFiYaU0AAAAAALVWRqHtHnvsEf/85z9j5cqVFbZ9+OGH8c9//rPSZRMAAAAAAPhmOZkMGjFiRFxwwQVx7rnnloWzM2bMiCeffDKef/75aNKkSQwfPrxaCwUAAAAAqA0yCm2bNm0av/vd7+Luu++O2bNnR0TEzJkzIz8/Pw444IAYNWpUFBQUVGuhAAAAAAC1QUahbURE48aN49RTT41TTz01li9fHqWlpVFQUBDZ2RmtuAAAAAAAQGS4pu3s2bNj3bp1Za8LCgqisLBQYAsAAAAAsJkyutP22muvjXr16sW+++4bffv2jR49elR3XQAAAAAAtVJGoe3FF18cM2fOjOeeey5mzJgRTZs2jT59+kTfvn1ju+22q+4aAQAAAABqjYxC2x133DF23HHH+MEPfhCvvPJKzJw5M6ZNmxYPPvhgbLfddnHggQdGnz59okmTJtVdLwAAAADANi3jB5FFRNSpUyf22muv2GuvvWLNmjUxZ86cmDFjRtx5553xt7/9Lbp37x79+vWL3r17R07OZu0KAAAAAKBWqLYnhy1cuDDeeeedWLhwYUREtG3bNlasWBE33HBDnHHGGfHWW29V164AAAAAALZZm3X766JFi2LWrFkxa9as+PTTT6OgoCD69OkTBx54YHTp0iUiIt59993405/+FDfddFNceeWV1VI0AAAAAMC2KqPQdurUqTFz5sxYsGBB5Obmxl577RVjxoyJ3XffPbKzy9+827Vr1xg0aFD86U9/qpaCAQAAAAC2ZRmFtrfddlvsuOOOMXbs2Ojdu3fUr1//G/t37do1hg0bllGBAAAAAAC1SUah7XXXXRctW7ascv8OHTpEhw4dMtkVAAAAAECtklFo+/XAds2aNbF06dKIiGjevHnk5+dXT2UAAAAAALVQxg8ie+edd+Kuu+6Kt956K0pLSyMiIjs7O3baaac48cQTo2vXrtVWJAAAAABAbZFRaPv222/H+PHjIycnJw466KBo165dRER8/PHH8cwzz8RFF10U48ePj27dulVrsQAAAAAA27qMQtt77rknmjZtGpdcckkUFhaW23bcccfFhRdeGHfffXdceOGF1VEjAAAAAECtkZ3JoLfffjsOOeSQCoFtRERhYWEcfPDB8fbbb29ubQAAAAAAtU5GoW1WVlasX79+o9tLS0sjKysr46IAAAAAAGqrjELbHXfcMR599NFYsmRJhW1Lly6Nxx57LHbaaafNLg4AAAAAoLbJaE3bE044IS666KI4++yzY5999ok2bdpERMSiRYvixRdfjDp16sQJJ5xQrYUCAAAAANQGGYW2nTt3jv/93/+Nu+++O1588cVYt25dRETk5eXF7rvvHiNGjIj27dtXa6EAAAAAALVBRqFtRET79u3jF7/4RZSWlsby5csjIqKgoCCyszNacQEAAAAAgNiM0HaD7OzsKCwsrIZSAAAAAADIOLRds2ZNPP/88/Hpp5/GypUrI0mSctuzsrLiBz/4wWYXCAAAAABQm2QU2r7++utx1VVXxapVq76xn9AWAAAAAGDTZBTa/uUvf4n8/Pz42c9+Ft26dYv69etXd10AAAAAALVSRk8NW7p0aRx99NGx6667CmwBAAAAAKpRRqFtx44dv3VpBAAAAAAANl1Goe2oUaPisccei3fffbe66wEAAAAAqNUyWtO2e/fuMXr06Pif//mfaNeuXTRr1iyys8vnv1lZWTFu3LhqKRIAAAAAoLbIKLR97rnn4rrrrovS0tL4/PPPY/Xq1RX6ZGVlbXZxAAAAAAC1TUah7d/+9rdo27ZtnHvuudG2bdvqrgkAAAAAoNbKaE3bL774Ig499FCBLQAAAABANcsotO3atWssXbq0umsBAAAAAKj1MgptTz755Jg9e3bMnj27uusBAAAAAKjVMlrT9g9/+EOsX78+rr322vjzn/8czZo1i+zs8vlvVlZWXHHFFdVSJAAAAABAbZFRaNuwYcNo1KhRtGnTprrrAQAAAACo1TIKbcePH1/NZQAAAAAAEJHhmrYAAAAAAGwZQlsAAAAAgBQR2gIAAAAApIjQFgAAAAAgRYS2AAAAAAApssmh7bp162Lq1Knxr3/9a0vUAwAAAABQq21yaJuXlxd33XVXLFq0aEvUAwAAAABQq2W0PMJ2220XS5Ysqe5aAAAAAABqvYxC2xEjRsQTTzwRr732WnXXAwAAAABQq+VkMmjatGnRsGHDuOyyy6Jly5bRsmXLyMvLK9cnKysrxo0bVy1FAgAAAADUFhmFtgsXLoyIiObNm0dpaWksXry4Qp+srKzNqwwAAAAAoBbKKLS94YYbqrsOAAAAAAAiwzVtAQAAAADYMjK603bp0qVV6te8efNMpgcAAAAAqLUyCm1PP/30KvW79957M5keAAAAAKDWyii0Pe200yq0lZaWxpIlS+Lpp5+OgoKCOOywwza7OAAAAACA2iaj0LZ///4b3XbMMcfEBRdcEKtWrcq0JgAAAACAWqvaH0SWn58f/fv3j4cffri6pwYAAAAA2OZVe2gbEZEkSRQVFW2JqQEAAAAAtmkZLY+wMatWrYo333wzHnzwwejcuXN1Tg0AAAAAUCtkFNp+73vf+8btzZs3jx/+8IcZFQQAAAAAUJtlFNoOGzYssrKyyrVlZWVFgwYNolWrVrHbbrtFnTp1qqVAAAAAAIDaJKPQ9vjjj6/uOgAAAAAAiGp4ENkXX3wR77//fqxZs6Y66gEAAAAAqNUyDm1feOGFOPvss+PUU0+NX/7yl/HOO+9ERMTy5ctj3LhxMWfOnGorEgAAAACgtsgotH3xxRfj97//fTRq1CiOO+64ctsKCgqiadOmMWPGjOqoDwAAAACgVskotL3//vuje/fucckll8Rhhx1WYfsOO+wQ77333mYXBwAAAABQ22QU2i5cuDD233//jW5v3LhxLF++POOiAAAAAABqq4xC27p1637jg8c+/fTTaNiwYcZFAQAAAADUVhmFtrvssks89dRTsX79+grbioqK4p///Gfstttum10cAAAAAEBtk1Foe8IJJ8SyZcvivPPOi8cffzwiIl555ZW455574txzz42IiOHDh1dflQAAAAAAtUROJoPatm0bF198cdx6661x7733RkTElClTIiKie/fuccopp0TLli2rr0oAAAAAgFoio9A2IqJDhw5x4YUXxooVK2Lx4sWRJEm0atUqCgoKNruoadOmxZQpU6KoqCg6duwYJ598cnTr1q3Svs8//3xMnjw5Fi9eHOvXr4/WrVvHUUcdFQceeOBm1wEAAAAAsLVlHNpu0LBhw40GqpmYPXt23H777TF27NjYfvvt4+GHH47LLrssrrnmmmjcuHGl+x86dGi0bds2cnJy4uWXX44bb7wxCgoKYvfdd6+2ugAAAAAAtoYqhbZPPfVURpP369dvk8c89NBDMXDgwBgwYEBERIwdOzZefvnlmD59egwZMqRC/1122aXc6yOPPDKeeuqpeOutt4S2AAAAAMB3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g4MRERGB//znP7C0tMSkSZMgEomwe/fuTj2Pvb19p/uYOHEiRCIRjh49iu+//x6GhoZ4/PHHMXXqVHWbSZMmIScnB3K5HDExMbCxsYG7uzsEAgFWrlyJmJgYnDp1ComJiTA2NoZEIsFzzz0HOzu7Lr9HJiYmmDx5MpKTk5GQkACVSgWpVIpFixZh0qRJHWZqy8iRIxEcHIxDhw7h22+/hUQiQVBQEBITE5Genq7R9tVXX0VjYyOOHz8OoVCIcePGYf78+Vi+fLlGOwcHB3z00Uf47rvvIJfLcefOHVhYWMDJyQkvvPBCl183EREREXWNQVPLa8OIiIiIiOihEBYWhvT0dISFhek6ChERERF1Ede0JSIiIiIiIiIiItIjLNoSERERERERERER6REWbYmIiIiIiIiIiIj0CNe0JSIiIiIiIiIiItIjnGlLREREREREREREpEdYtCUiIiIiIiIiIiLSIyzaEhEREREREREREekRFm2JiIiIiIiIiIiI9AiLtkRERERERERERER6hEVbIiIiIiIiIiIiIj3Coi0RERERERERERGRHmHRloiIiIiIiIiIiEiPsGhLREREREREREREpEf+D33efUw7nwIXAAAAAElFTkSuQmCC\n"},"metadata":{}}],"source":["# Plot the statistics with bar plots and hue 'sentiment'\n","plt.figure(figsize=(14, 8))\n","\n","cols = ['Ratio Majuscules', 'Nombre Exclamations', 'Nombre Questions', 'Nombre Ellipses',\n"," 'Nombre Hashtags', 'Nombre Mentions', 'Nombre URLs', 'Emoticone Positive', 'Emoticone Negative']\n","\n","# Melt the DataFrame to long format for easier plotting with seaborn\n","stats_melted = stats[cols].reset_index().melt(id_vars='sentiment', value_name='Valeur', var_name='Caractéristique')\n","\n","# Rename columns for better readability\n","stats_melted['Caractéristique'] = stats_melted['Caractéristique'].replace({\n"," 'Nombre Exclamations': '!',\n"," 'Nombre Questions': '?',\n"," 'Nombre Ellipses': '...',\n"," 'Nombre Hashtags': '#',\n"," 'Nombre Mentions': '@',\n"," 'Nombre URLs': 'http',\n"," 'Emoticone Positive': ':)',\n"," 'Emoticone Negative': ':('\n","})\n","\n","# Create the bar plot\n","sns.barplot(x='Caractéristique', y='Valeur', hue='sentiment', data=stats_melted)\n","\n","# Customize the plot\n","plt.title('Caractéristiques des tweets par sentiment', fontsize=15)\n","plt.xlabel('Caractéristique', fontsize=12)\n","plt.ylabel('Valeur moyenne', fontsize=12)\n","plt.legend(title='Sentiment')\n","plt.tight_layout()\n","plt.show()"]},{"cell_type":"code","execution_count":28,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":505},"id":"81wLmor1WjJB","executionInfo":{"status":"ok","timestamp":1751537507241,"user_tz":-120,"elapsed":358,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"1b3d59be-0754-4802-d825-299053434ed0"},"outputs":[{"output_type":"display_data","data":{"text/plain":["
"],"image/png":"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sGnTJtO/f39TqVIlRw0jRowwv/32W46/nX2b+O6770zPnj1NRESEkWR++OEHY0zOddnu0KFDZvTo0aZOnTomMDDQlC1b1jRo0MD86U9/Mr/88otT+7n9N2TIEEdb9vnLzcKFC02rVq1MYGCgiYiIMPHx8WbPnj15bs9X7++zy96PV8vIyDD//ve/TatWrUyZMmVMQECAadq0qZkyZYrJyMjIMf2pU6fM+PHjTf369U1wcLAJDQ01derUMffdd5/57rvvcv37eXG1z3788UfTq1cvEx4eboKCgky7du3M+vXrnaa3919en3fGGLNq1SpHnxw/ftyMGDHCVKlSxXh7e5spU6Y42jp8+LAZM2aMqVmzpvH39zdly5Y1PXv2zPE3ryWvWuzrWF59dObMGWOz2Ywk89577zmN27lzp5FkevbseUPL1i6/nyvXmxdj/tgvffLJJ6ZNmzYmMjLS+Pv7m+joaHPHHXeYN998s0DLLSYmxqSnp5tnn33W0Qc1atQwzzzzjLl48WKu7zt9+rR57LHHTO3atR191q1bN/P111/nOn1+tuura7K71rFV9v4syPvsy9ET21tB9ru5yb7vnD9/vmnZsqUJCgoyZcuWNQkJCeb333/P9X0F/cw3xpiDBw+agQMHmvLly5ugoCBz8803m88//9wcPHgwx/GJMcacO3fOvP7666Zr166mWrVqxs/Pz0RERJhu3bqZZcuW5Wj7Wuu63dX75Gu9L/v+/8svvzSdO3c2lStXNn5+fiYqKsq0adPGTJw48brLGCgOCKOAYi4/YZQxxvTv399IMn//+99zvD/7gc97771nhgwZ4givhgwZ4vhv7dq1ZsiQIaZp06ZGkmnTpo1jnP1LpzHGjB8/3kgyfn5+pk2bNqZ///6mTp06RpKpVauWOXHihFMN9oOtUaNGGZvNZlq0aGESEhJMixYtTFJS0g21+de//tV4e3ubli1bmnvuucfExsYaSaZcuXLm+PHjOZbTX//6VyPJeHl5mTZt2piBAwea9u3bm/DwcNO0aVOnaffs2WOqVq1qJJnq1aub3r17m06dOpmgoCAjybz88stO02/dutUEBAQYSaZJkybmnnvuMXFxcaZBgwb5PoArrOWV15fX8ePHG5vNZho3bmzi4uJMv379TP369Y0kExoaanbs2OGY1r5+SDLBwcFO684///lPx3S5fYHv3r27kZQjGLEbMGCAkWTmzp3rGHblyhUzcOBAI8mEhISYDh06mL59+zr65NZbbzVpaWmO6TMzM03Lli2NJFO+fHlz1113mXvuuce0bt3aBAUFOR0AXo99+fr6+pquXbuau+++20RGRppq1aqZXr165dqfnlpfMjMzzd133+1YHzp27GgSEhJMmzZtTFBQkOndu7fT9BUrVjShoaGmdevW5p577jHdunUzZcuWNZJMp06dTGZmptP09i/ICQkJJjQ01NSoUcMMGDDAdO3a1SxevNixvPK7Htn99NNPJjo62kgylSpVMn379jV9+/Y1DRs2NJIc+5xHH300133SkCFDzM8//+xo76233jJeXl7Gy8vLtGzZ0tx9992mSZMmRpKpUKGC+emnn5z+vn2bGDZsmPH19TUNGzY0CQkJpl27do56c1uXDx8+7Ait6tSpY/r162f69Oljmjdvbmw2m2Mbmz9/vunXr5+R5Agz7f9lDxTyCqPefvttI8nYbDbTrl07M2DAABMTE2PCwsLMvffe67YwKi0tzXTs2NFIMhEREaZLly6OsF6Sueuuu5xC5JSUFFOjRg0jyVStWtX06dPH9O/f39x6663G19c317ArL6722ZgxY0xQUJBp3LixGTBggGP9CAgIMDt37nRM/89//tO0adPGSDJNmzbN8XlnzP/CqB49epjo6GhTqVIl079/fxMXF2feeecdY4wxGzZscGwjdevWNfHx8eb22283Pj4+xtvb28ycOTNf8ztkyBBTq1YtI8l069bNqZ7ExERz4MCBXL88z5s3z3EsMHjwYKdxr7/+eq77l4IuW2MK9rlyvXkxxpjHHnvMSDL+/v6mS5cuZuDAgaZjx46mQoUKea6nuZFkqlWrZuLi4kxgYKCJi4sz8fHxjh9p7rjjjhz7rSNHjpiaNWs63jtgwADTqVMn4+3tbSSZ1157zWn6/G7X2Wu6+tiqW7dujmWVfXlkP34qyDFZYmKix7a3/O5382Lfd/7tb38z3t7epkOHDqZ///6Oz8g6deo4fX4bU/DPfGP++CGkQoUKRpKpXbu2Yx9us9nMQw89lOv29NVXXzk+p7t06WIGDBhgbrvtNmOz2YzNZjPTpk1zTJuYmGiGDBliKlasaCSZfv36OS0Lu6uPsezvy23/Y9//v/nmm0aS8fb2Nu3atTMDBw40Xbp0cXwuAiUBazJQzOU3jHruueeMJDNw4MAc78/toO9av8bnFVwYY8zs2bONJNOoUSOzb98+x/CsrCzz7LPPGklmwIABTu/J/stfbgftN9Kml5eX04FeZmam4wvgM8884/Sejz/+2EgylStXdpz5YJeWlub0i1hmZqZp3LixkWReeuklpy9j+/btMzVq1DDe3t5OX3zuv/9+I8m88sorOebx559/LvCZUe5cXnn16caNG82BAwdy/I0PPvjASDIdO3bMMe5aX3iNyf0LvH3ZDx8+PMf0KSkpJjAw0ISFhTmdmfPSSy8ZSaZDhw5OwWJ6eroZMWKEkWTGjx/vGP7NN98YSaZFixY5filPTk42W7duzbPm7DZu3GhsNpsJCwsz33//vWP4+fPnTadOnRx9kz0s8uT68o9//MNIMg0aNMjRl0lJSWb16tVOwxYsWJDjgD4lJcXExcUZSWbGjBlO47KfETd27NgcX/qMKfh6lJGRYerWrWskmYcfftikp6c7jd+1a5fZv3+/4/W19kn2v+/t7W2qVKmSo5/ff/99I8m0bNnSaXj2M5cmT56ca7u5rcv2bWzs2LE5pv/tt9+c6s7rl/nsctsXHzp0yAQEBBhfX1+nM/ouX75sBg8e7KjbHWHUAw884Nhn2MNuY/5YJ3r06GEkmbffftsx3N6nV4dUxvxxBkf2dfxabrTP/vWvfzmNe/jhh40kc9999+Vrvu3sYZT0x5mZue07oqKijLe3t/nkk0+cxm3ZssWULVvWhISEmFOnTuVrvq91ZqUxf6wP/v7+TnX83//9n5FkGjZsaKKjo52mj4+PN5LMli1bHMNcWbY38jmc27xcvHjR+Pv7mzJlyuTYN2RkZJhvv/021/nPjb1/oqOjza+//uoYfurUKdOoUSMjyeksNmOMY382aNAgp/3L2rVrTVBQkPH29nY6DijIdm2v6eptLftZdteal4IckxWF7S2v/e612PedQUFBZsOGDY7hFy5cMK1btzaSnEIfYwr+mW+MMXfccYeRZEaPHu302bR06VLj6+ub6/73wIEDZuPGjTlq/v777014eLgJDQ0158+fz3V+rj5L1i6vZXWt/U+1atWMzWZz2naN+WOby++PUUBRRxgFFHP5DaP+85//GEmme/fuOd7vzjDK/ktZbgdAWVlZplmzZsbb29vxy6gx/ztgze0yghtt8+pfiY35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4YcfJP1x5kZhycrKkvTHr+V5/bpml9uXqICAALe36eVVOCeA2uvq3r17rr/S2WV/lG9oaKi++eYbrV+/XosWLdLq1av1zTffaPny5frnP/+ptWvXqk6dOvmuoTCWV3apqam65557dPbsWT377LNKSEhQTEyMAgMDZbPZNGjQIH3++ed5hhYF1bVrV1WoUEFffvmlkpOTFRYWppkzZ+rKlSsaOHCgU1/a57N27drX/RJYrlw5x78fffRR3XPPPVqwYIGWL1+utWvXasqUKZo6daqmTJmihx56yC3zcrWisL7kx6xZs/Taa6+patWqmjJlim677TZVqFBBvr6+unz5svz9/fPs79zWR8n69ehq9mUfEhKifv36XXPahg0b5hiW13zlxdvbW7NmzdLjjz+uhQsX6ptvvtF3332ntWvX6sUXX9TSpUvVunXrArVpBftyym1Ys2bNcj3jLzt/f3/Hv1977TX9+c9/1sKFC7VixQqtX79emzdv1ksvvaTPP//8uv1wo31WGPv9vNYDe639+/dXcHBwnu+vV6+eW+qoWbOmqlatqk2bNunSpUtOgVNAQIBatWqlNWvWSPpfYGU/myp7vQVZtu78XMmuU6dO2r9/vxYvXqylS5dq9erV+uijj/TRRx+pX79+mjNnTr7bcqfcwo6ivF17enu7EfndVl39zHfFyJEjtWPHDvXr10/jxo1T3bp1VaZMGXl5eendd9/Vn//850L7vMquSZMm+umnn7R06VItWbJEq1ev1uzZszV79mzddtttWr169XXDQ6CoI4wCSoHk5GR9/fXXkqSOHTsW2t+x/8JVvnx5TZ8+vci2mRv7L2cHDhyQMea6v7zZ6xo5cuR1D96ys9lsatu2rdq2bSvpj8sfHn74YX3++ed66qmnNHv2bBfnwLkudyyvtWvX6syZM+rfv78mTZqUY7w7LqvIzsfHRwMGDNCbb76puXPnavjw4bleoif9bz7r1atX4PmsWrWqHnzwQT344IPKzMzUzJkzNWzYMI0bN07333+/ypYte833R0VF6dChQ/rtt99Uv379HON/++23HMM8tb7Y1+v8Xko5f/58SdLbb7+tnj17Oo1ztb9dWY8KWve1lC9fXgEBAY5LNAvzUuXsmjdvrubNm2vixIlKSUnRxIkTNWXKFD388MM3fKlLVFSU9uzZo99++y3XHxhyWwcl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5s2bl2PapKQk89xzz5mbbrrJhISEmICAAFO9enXTrVs389Zbb5nExETHtF988YUZPny4adiwoQkPDzdBQUEmNjbWjBw5Ml8Hb/mdN7uCLK+8+jQtLc089dRTpk6dOsbf399UrVrVjB492pw+fTrPOlJTU83YsWNN1apVjY+PT46DyuuFUXv27HGsz+3atbvu8li4cKHp2bOniYyMNL6+viYyMtLcfPPNZty4cWbbtm2O6fbt22eefvpp06ZNGxMVFWX8/PxMlSpVzB133GHmzp1rsrKyrvu3snvvvfdMkyZNjL+/v4mMjDT33nuvOXr06DX7xxPrizF/HMRPnz7dtGvXzoSFhRl/f39TvXp1c8899+So8+effza9evUykZGRJigoyDRv3ty8++67xpjct5v8hFGurEfGGHPy5Enz2GOPmdjYWBMQEGDCwsJM48aNzfjx483x48edpv36669NmzZtTEhIiGP9ubrNH374wQwZMsTExMQYPz8/Ex4ebho2bGiGDx9uFi9e7LQOuBpGrVmzxowZM8Y0a9bMlCtXzgQEBJiaNWuahISEXH8UOHnypLnvvvtMpUqVHF8Eswcf19oXz58/37Rs2dIEBgaasmXLmt69e5uff/75mrVv3LjRdOjQwQQFBZnQ0FBz5513mu3bt1+zHzMzM82MGTNMp06dTEREhPH19TWVK1c2t912m5k0aZLZs2eP0zJ+9NFHTYsWLUxkZKTx9/c3MTExplevXmbFihV5Lsu8uLPP8lqWW7ZsMV26dDFhYWGOH3HsbeQnjDLGmOPHj5tx48aZhg0bmqCgIBMUFGRq1aplevfubaZPn27Onz+f73n+9NNPzU033eQIDnPbX9oDx4YNG+Z4v305hISE5AhhsivIsrUryOfKteYlJSXFvPrqq6ZHjx6mevXqJiAgwJQrV87ccsstZsqUKebChQv5Xl72/dKlS5fMk08+aapXr278/PxMTEyMeeqpp0xaWlqu7zt9+rR59NFHTa1atRzz37VrV/P111/nOt8F2a7zOsbYt2+f6dOnjylXrpzx8vLKsc0V9JjMk9ubMfnb7+bGlTDKLr+f+XYHDhwwAwcONOXKlTOBgYGmefPm5uOPPzbr1q0zkkxCQkKO98yYMcM0b97cBAUFmXLlypnevXubHTt2XHM/OWXKFNOgQQNHcJe9vwoaRmVkZJi3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jz7KAW4Rk5mZqcDAQNWqVUspKSlatWqVfvjhBx08eFDVq1dXfHw8l4LfgKSkJEVFRSkmJkbHjx/X999/r2XLlikrK0s333yzhg4dyjZRBKSlpTnOEvn555/1448/avny5fL19VXr1q1133330U8uunLliry9vR2vjTHy9vZWbGysNm7cqLffflvDhg1T+/btlZ6erl27dqlu3br8IHiDsgdK2fvg/Pnz8vf3V9u2bXXlyhWtXr1a69at05EjR1S3bl099thjrOtFhL+/v7y9vXXixAnt3r1bq1at0m+//SYvLy8dOXJEaWlp6tatm9v+HmEULGffUdl3UpcvX1a5cuWUnp6uSZMmqXnz5ho5cqQkafv27Tp06JC6du1aaNeq4n/sX/JOnTqlyMhIpaen6+LFi1q6dKlmzZqlQYMGOc7mOXDggNauXauKFSsSRhVAeHi4Dh8+rGnTpungwYOqVq2a6tevry5duujDDz9Uy5YtCaOKqCtXrsjf319z587VoUOHVKtWLTVt2lSNGjXSu+++q02bNumuu+7ydJklVvZ7RK1bt06NGjVSeHi4GjVqpO+//14ffvih4uLi1KxZM8XGxuqzzz7T2bNnOcAtggIDA3XmzBl9/vnn+v3331WvXj01b95cd999tz744AMdPXqUMCqfcjubwM/PT8nJyZo6daoOHz6smJgYtWnTRqGhoZozZ446derE54zFrg7Ss7KyFBAQoNOnT+vvf/+7zp07p3r16ikhIUFpaWn6+uuvdeedd6p8+fIerLp4yszMdFxCv3v3btWoUUNXrlzRpUuXtHr1as2YMcPpeHbfvn2O41nCKNfZ90UpKSkKCAiQn5+ffvzxRwUHB8vf318+Pj56/fXXdfLkSVWoUEFVq1ZVr169NHnyZK1bt05t27b19CyUOrmdERgQEKCqVavq22+/1cGDB3XnnXdq8ODBqlevnl5//XW3P2yBMAqWs9ls2rFjh86cOaNOnTopOjpa7733njZt2qQ777xT9957r2ParVu3Kjk5mS8TFtq4caPef/99vf/++6pdu7YaNWqkDz/8UAMGDFD37t0l/XG6/8KFC+Xl5cVNUa9y9Y49+xeFrKwslS9fXv/4xz+0bNkytW/fXu3atXOcTbNs2TKlp6d7pG44s/fb2bNndenSJVWuXFnR0dFKSEjQ/v37Vb9+fbVv315ly5aVJIWFhRGYF6Ls21VSUpLeeOMNtWzZUqNHj1aPHj3Upk0bZWRkOH1xO3DgAJd7FQH2benUqVPKysqSj4+PYz/47bffqkWLFmrbtq3KlCkjm82miIgIXblyxdNlFwvZt4vk5GSlp6crMjJSHTt21KVLl7R3717FxcWpYcOGqlixovbt26fIyEgFBgZ6uPLSJXs/nT59WpJUvnx5de/eXQEBATp06JD69OmjatWqKTw8XFu2bFG5cuXk5+fnybKLpe3bt2vmzJl68cUX9dFHH2nXrl169tlnFRsbq+rVq+vtt9/Wfffd53Q8u3jxYvn4+HDz+BtkD6Jef/111ahRQzExMXrjjTf0xBNPqFmzZurevbv27t2r5s2bq127doqOjtbly5dVr149QkAPuPppxCdPnpSvr68aN26sMWPG6Pfff1dmZqZq1qzpeM/58+fl6+vr1joIo+ARP//8s5YuXapbbrlF9erV0+DBgzV79mxVrlxZly9fVkpKipYtW6aNGzdq0qRJHDhZqGnTpgoNDdUXX3yh3r17q3fv3kpOTtbChQvl5+enixcv6pdfflFSUpImT54sLy8vrrXPxsvLS8ePH9eqVas0aNAgp+vgvby8ZIxRbGysateu7bTMPvvsMx0/fpynixQRNptNmzZt0owZMyT98UvRiBEj1KhRIzVp0sQxXUZGhubOnatjx46pUaNGniq3RMt+RtSsWbOUnJysyMhIxyV5Y8eOdZydmZaWpiNHjui///2vkpKS9MQTTzja4EcNz7DfuPb9999XYGCg0tPT9ac//Uk333yz+vfv7+jbzMxMzZ49W4cOHdKIESM8XHXRl327mD17tnbv3u243LtBgwa66667HJ/NxhhdunRJ8+bNU3BwsMqVK+fh6kuP7P00depU/f7770pMTFSPHj0UFxenHj16OKbNysrS6dOn9d///lc1a9bMcUNzXJt9WWdkZGjs2LG6cOGCJk+e7Ag6+vfvr/Pnz2vRokUKCAhQWlqafvzxR507d47jWTfx8/NTbGys1q9fry+//FJ//vOf1axZM0lS586d1alTJ8fyNcZowYIFSkxMVHR0tAerLp2yP+xi7dq1io2NVWpqquMJt507d5Ykpaen68yZM/rwww+Vnp6uXr16ubUOwih4RIcOHbR7925t3rxZnTt3VqtWrZSamqp33nlH8+fPV0BA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jTcURImIiIj8hhRGSb1h2dGwffv2HDhwgK1btwKwcOFCsrKyWLRoEXZ2dto1T0REDCaTiby8PF588UX27dtnLOd2d3fH09OTxMREY6yNjQ2tW7fG1taWc+fOGWMdHBysUruIiIjI7UphlNQrlhlS7dq1Iy4ujokTJ3L27FkWLlxoBFG2trbWLlNERG4hJpOJgIAA/vGPfxAXFwdcDp7atWtHQkICBw8erDa2cePGODs7U1VVpd6DIiIiIjeBekZJvZSbm8tHH31EQUEBM2fOVBAlIiKGmgKkvLw8IiMj2bFjB9OnT6dnz54UFBSwdOlSiouLufvuu+nQoQNHjx7lq6++4s0336Rly5ZWegQiIiIitzeFUVJvFRYW4uzsjI2NjYIoEREBMHZWLS0txWw24+zsbBzLyclh8+bNfP7550ydOpXevXtTUFBAVFQUycnJFBQU4O7uzrPPPlutl5SIiIiI/LYURkm9Z3njISIiApCRkcHixYtxdHQkKCgId3d3unbtCkBFRQUffvghO3fu5OWXX6ZPnz5cunQJk8lEYWEhDg4OODo6WvkRiIiIiNze7KxdgMj/SkGUiIhYmM1mYmJiSE1Nxd7enqKiIsrLy3F1daVt27YMHDiQwMBAGjZsyJIlS3BycqJbt24AuLm5Wbd4ERERkTuEZkaJiIjIbSU3N5eoqCiysrJo3rw5wcHB7N27l6NHj5KWloarqyvNmjXj5MmT5OfnM2fOHPz9/a1dtoiIiMgdQzOjRERE5Lbi7u7O8OHD2bx5M0lJSbRo0YLHHnsMgOPHj5OTk8Pu3btp1KgR+fn5mhElIiIiUsc0M0pERERuS5aG5cePH6dHjx6MHDnSOFZZWUlVVRXFxcU0atTIilWKiIiI3HkURomIiMhtKzc3l8jISFJSUujRowehoaEA2oVVRERExIoURomIiMhtzRJInTp1invuuYewsDBrlyQiIiJyR9M2ZCIiInJbc3d3Z+TIkbRo0YLk5GQKCgqsXZKIiIjIHU0zo0REROSOkJubC1wOp0RERETEehRGiYiIiIiIiIhIndEyPRERERERERERqTMKo0REREREREREpM4ojBIRERERERERkTqjMEpEREREREREROqMwigREREREREREakzCqNERERERERERKTOKIwSERERuQV99913REVFUVlZae1SRERERH5TCqNE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\n"},"metadata":{}}],"source":["# Plot the differences in characteristics between positive and negative tweets\n","plt.figure(figsize=(12, 8))\n","sns.barplot(x=diff_df_sorted.index, y='Différence Relative', data=diff_df_sorted, palette='coolwarm')\n","plt.title('Différences relatives des caractéristiques entre tweets positifs et négatifs', fontsize=15)\n","plt.xlabel('Caractéristiques')\n","plt.ylabel('Différence Relative (%)')\n","plt.xticks(rotation=45)\n","plt.tight_layout()\n","plt.show()"]},{"cell_type":"code","execution_count":29,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":2656},"id":"73Tukj7VWjJC","executionInfo":{"status":"ok","timestamp":1751537533960,"user_tz":-120,"elapsed":26718,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"3394f45a-f5b7-41c6-c942-749fd25bd662"},"outputs":[{"output_type":"stream","name":"stdout","text":["Analyse de 63 tokens spécifiques...\n","\n","Tokens les plus discriminants entre tweets positifs et négatifs:\n","Token 'I':\n"," - Dans tweets positifs: 35.47%\n"," - Dans tweets négatifs: 49.62%\n"," - Différence absolue: 14.15%\n"," - Orientation: Négatif (-33.3%)\n","\n","Token 'you':\n"," - Dans tweets positifs: 19.80%\n"," - Dans tweets négatifs: 10.60%\n"," - Différence absolue: 9.21%\n"," - Orientation: Positif (60.6%)\n","\n","Token 'my':\n"," - Dans tweets positifs: 14.27%\n"," - Dans tweets négatifs: 21.13%\n"," - Différence absolue: 6.86%\n"," - Orientation: Négatif (-38.7%)\n","\n","Token 'not':\n"," - Dans tweets positifs: 3.94%\n"," - Dans tweets négatifs: 9.00%\n"," - Différence absolue: 5.06%\n"," - Orientation: Négatif (-78.2%)\n","\n","Token 'good':\n"," - Dans tweets positifs: 7.48%\n"," - Dans tweets négatifs: 3.56%\n"," - Différence absolue: 3.92%\n"," - Orientation: Positif (71.0%)\n","\n","Token 'no':\n"," - Dans tweets positifs: 2.67%\n"," - Dans tweets négatifs: 6.51%\n"," - Différence absolue: 3.83%\n"," - Orientation: Négatif (-83.5%)\n","\n","Token 'love':\n"," - Dans tweets positifs: 5.62%\n"," - Dans tweets négatifs: 2.05%\n"," - Différence absolue: 3.58%\n"," - Orientation: Positif (93.3%)\n","\n","Token 'sad':\n"," - Dans tweets positifs: 0.18%\n"," - Dans tweets négatifs: 3.38%\n"," - Différence absolue: 3.21%\n"," - Orientation: Négatif (-180.0%)\n","\n","Token 'can't':\n"," - Dans tweets positifs: 2.46%\n"," - Dans tweets négatifs: 5.51%\n"," - Différence absolue: 3.05%\n"," - Orientation: Négatif (-76.5%)\n","\n","Token 'don't':\n"," - Dans tweets positifs: 2.76%\n"," - Dans tweets négatifs: 5.52%\n"," - Différence absolue: 2.75%\n"," - Orientation: Négatif (-66.5%)\n","\n","Token 'your':\n"," - Dans tweets positifs: 5.17%\n"," - Dans tweets négatifs: 2.44%\n"," - Différence absolue: 2.73%\n"," - Orientation: Positif (71.6%)\n","\n","Token 'so':\n"," - Dans tweets positifs: 7.65%\n"," - Dans tweets négatifs: 10.27%\n"," - Différence absolue: 2.62%\n"," - Orientation: Négatif (-29.3%)\n","\n","Token 'me':\n"," - Dans tweets positifs: 8.54%\n"," - Dans tweets négatifs: 10.90%\n"," - Différence absolue: 2.36%\n"," - Orientation: Négatif (-24.3%)\n","\n","Token 'great':\n"," - Dans tweets positifs: 3.03%\n"," - Dans tweets négatifs: 1.03%\n"," - Différence absolue: 2.00%\n"," - Orientation: Positif (98.6%)\n","\n","Token 'bad':\n"," - Dans tweets positifs: 0.71%\n"," - Dans tweets négatifs: 2.63%\n"," - Différence absolue: 1.92%\n"," - Orientation: Négatif (-114.6%)\n","\n"]},{"output_type":"display_data","data":{"text/plain":["
"],"image/png":"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kdVqdep35swZbd68WdK1YUky48knn3R62OChQ4f00ksvScrYMenj46NGjRrpzJkzeuuttxztSUlJGjt2rA4dOpRmnuzarsOGDZMkxcTEON11nvq8yqipU6e6vAP0q6++kuS8XceNGyeLxaLY2Fh9++23Tv2TkpIc8xRk9gc3/vvf/3Y6v9evX68pU6Zk23rsd4G7Km5L0rvvvuvyGHO139Jj/0Jv69atLqfbh8EYM2aM00MTT5w44TjWXD2PIivGjh0rf39/Pfnkk1qyZEma6VevXtXixYvdDs+VUTfatlnZxzdapjv27fvCCy843eV+4cIFjRw5UsYYPfbYY1keEulmlStXToMHD9bhw4fVt29f/fXXX2n67N+/X5999tkNl2Xfru+//77TZ4i4uDjHl3bXy+p2tevXr58sFos+/fRTt0O5SDf33nrlyhXt3LlTFSpUUERERJbiBAAgwwwAALhlDBw40EgyMTExTu3Hjh0zERERRpIJDw83ffr0Mffcc4/x9PQ0kszrr7+eZlmSzG233WY6depkAgICTOfOnU337t1NcHCwkWRatmxpbDZbhuKaNm2akWQkmW7dupmBAwe6/Dl58mSaeUePHm0kmYCAANOlSxfTvn174+XlZTw9Pc3SpUsztX1GjRplJJmIiAjzwAMPmIcffti8+uqrjuk7duwwJUqUMJJMtWrVTN++fU2TJk2MJOPl5WUWLFjgtLxDhw4ZSaZ58+ZO7fHx8SYqKspIMs8++6yj/a+//jJ169Y1kkxwcLBp0aKF6devn+nYsaOpUKGCkWRGjx7ttCz7PnNlzpw5afa3fXuVK1fOdOrUyfTr18+0aNEi3X3tyrfffmskmYEDB6aZNn78eCPJeHh4mDvuuMP07NnT9OjRw9StW9d4enqaYsWKOfouXbrUSDLFihUz99xzj3nggQdMx44dTVBQkJFkOnfunKF47Nu6YcOG5o477jDBwcGme/fupnPnziYgIMBIMv37908zX/PmzY0kc+jQIaf21atXGw8PDyPJNGrUyHTr1s3cdtttpmTJko7zaM6cOY7+2bVdjTGmZ8+eRpIpUqSIue+++xzn1R133GEaNmzoMl5Xx0GxYsWMh4eHqVu3runVq5fp2bOniYyMNJJMSEiI2bt3r1P/KVOmGIvFYiSZO++80/Tt29e0adPGlC5d2mmfGWNMeHi4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Vrt375Z07W7zOnXqKCgoSM2bN9eRI0ckSUuXLlWpUqXUtGnT3EkIKGQoogMAAAAAAAA5bObMmapatapq166tuLg4DR482GW/oUOHavHixUpMTNSJEye0YsUKtWnTRpIUHR2t7du369y5c1q/fr2io6OVkJCgGTNmaMKECbmZDlCo5OsHi8bFxWnZsmU6dOiQzp49qyeffFINGjRwTDfGaOHChVq7dq0uXbqk6OhoDRkyRKGhoY4+Fy9e1OzZs/Xzzz/LYrHorrvu0qBBg/jTFwAAAAAAAGSbkSNHauTIkdq3b5+WLFmiUqVKuezXsmVLjRkzRpGRkUpOTla7du3Up08fSVJUVJSGDBmiHj16KCwsTJMmTdLEiRM1fPhw7du3T6+99posFkuaGhmAm5Ov70S/evWqKlasqIcfftjl9C+++EIrVqzQI488okmTJsnX11exsbFOD2548803dfToUT333HN65plntHv3bs2aNSu3UgAAAAAAAEAhUrVqVVWvXl3/+Mc/0kxLSEhQnz591K9fPx04cEBnzpxRQECARo0a5egzaNAgrV69WnPnztXRo0d1/Phxde/eXSNGjNBrr72mV199VSNHjpQxJjfTAgq0fH0net26dVW3bl2X04wx+uqrr9S9e3fVr19f0rVv/B555BFt3bpVTZo00bFjx7Rt2za98sorqly5siRp8ODBeuWVVzRgwACFhITkWi4AAAAAAAAoHJKSklyOiX7kyBFduXJFDz/8sDw8PFS8eHENGDBADzzwQJq+VqtVMTExevfdd3X69GklJycrPDxckmSz2XT69GmVLFkyx3MprNq3X5kr6/H29pbNZsvRdaxY0S5Hl18Q5Os70dPz999/KyEhQbVr13a0BQQEqEqVKtq7d68kae/evSpSpIijgC5JtWrVksVi0f79+3M9ZgAAAAAAABQsly5d0oIFC3Tu3DkZY7R7925Nnz5dLVq0SNO3SpUqKlKkiObOnaukpCRduHBBn3zyiWrWrJmm78yZM9WpUydFREQoJCREVqtVu3btUlxcnKxWq4oXL54L2QGFQ76+Ez09CQkJkqRixYo5tRcrVswxLSEhQUWLFnWa7unpqcDAQEcfV2w2m9M3QBaLRf7+/tkSNwAAAAAAAAoOi8WipUuX6qWXXpLValXJkiXVoUMHPfnkk5Kk/v37q0GDBnr88cdV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AAAAAAAAAAB5JctjokdGRmrVqlUqV66ctm3bJqvVqvr16zumx8fHO92pDgAAAAAAAABAfpPlO9H79+8vT09Pvf7661q7dq06deqkChUqSJJSUlK0adMmVatWLdsCBQAAAAAAAAAgt2X5TvSyZctq2rRpOnbsmAICAlS6dGnHtKtXr2rw4MEKDw/PliABAAAAALjVVPvPf3J8HRaLRaGhoYqPj5cxJsfXBwAA0spyEV2SvLy8VLFixTTt/v7+TkO7AAAAAAAAAACQH91UET0lJUXff/+9fvnlF506dUqSVLJkSdWrV0/NmjWTh0eWR4sBAAAAAAAAACDPZbmIfvnyZcXGxmr//v3y9/dXmTJlJEk7d+7U5s2btWrVKj377LMKCAjItmABAAAAAAAAAMhNWS6iz5s3TwcPHtTgwYN1zz33yMvr2qKSkpL0zTffaM6cOZo/f74GDx6cbcECAAAAAAAAAJCbsjzeypYtW9S2bVvde++9jgK6dG2c9LZt26pNmzbavHlztgQJAAAAAAAAAEBeyHIR/eLFiwoLC3M7vVy5crp48WJWFw8AAAAAAAAAQJ7LchG9bNmy+umnn9xO/+mnnxzjpAMAAAAAAAAAkB9luYjetm1b7dixQ6+88oq2b9+uv//+W3///be2bdumV155RTt27FC7du2yM1YAAAAAAAAAAHJVlh8seu+99+rcuXP64osvtG3bNueFenmpR48eatu27c3GBwAAAAAAAABAnslyEV2SevXqpXbt2mnHjh06deqUJKlUqVKqVauWihYtmi0BAgAAAABuTdX+858cXb7FYlFoaKji4+NljMnRdQEAALhzU0V0SSpatKiaNm2aHbEAAAAAAAAAAHBLueki+s8//6xff/1VJ0+elHTtTvS6deuqXr16Nx0cAAAAAAAAAAB5KctF9EuXLum1115TXFycPDw8VLx4cUnSjh07tHr1alWrVk1PPfWUihQpkm3BAgAAAAAAAACQm7JcRJ8zZ452796tBx54QG3btpWfn58k6cqVK1q1apU+/fRTzZkzRyNHjsy2YAEAAAAAAAAAyE1ZLqJv3bpVbdu21X333efU7ufnp/vuu0+nTp3Sd999d9MBAgAAAAAAAACQVzyyOqOXl5fCwsLcTg8LC5OX100PuQ4AAAAAAAAAQJ7JchH9rrvu0qZNm5SSkpJmWnJysjZu3KiGDRveVHAAAAAAAAAAAOSlLN8q3qxZM82ePVvPPfecWrdurbJly0qS4uPjtWbNGiUlJalZs2Y6ePCg03yVKlW6uYgBAAAA4BZR7T//ydHlWywWhYaGKj4+XsaYHF0Xctbhw4f13HPP6ZdffpG/v78efvhhDR8+PE2/48ePq0WLFk5tV69eVatWrfTBBx9Ikl5++WXNnz9foaGhevvttxUZGSlJOnLkiIYMGaLly5c7nlsGAABuXpaL6C+88ILj/wcOHHDZJyYmJk3bggULsrpKAAAAAADyneTkZA0aNEj33nuv5syZoyNHjqhv374KDQ1Vt27dnPqWK1dO+/btc7y22WyqV6+eunTpIknatm2bVq5cqU2bNmnhwoWKjY3V3LlzJUnjx49XTEwMBXQAALJZlovow4YNy844AAAAAAAokA4cOKADBw5ozJgx8vb2VpUqVdS3b1998sknaYro11u5cqVSUlLUoUMHSdfuNq9Tp46CgoLUvHlzffTRR5KkpUuXqlSpUmratGmO5wMAQGGT5SL69X9eBgAAAAAA0rI/Syz1kDwpKSnavXv3DeedN2+eHnjgAfn5+ckYo+joaL366qs6d+6c1q9fr+joaCUkJGjGjBlavHhxjuUAAEBhluUHiwIAAAAAgBurXLmyKlSooNdee01Xr17Vnj17NH/+fF24cCHd+Y4dO6b169dryJAhjraoqCgNGTJEPXr00Lp16/T8889r4sSJGj58uPbt26eePXuqV69e2rJlS06nBQBAoZHlO9EBAAAAAMCNeXt7a/bs2XrhhRdUr149hYaGqnfv3vr444/TnW/BggWqWbOm6tSpo/j4eEf7oEGDNGjQIEnSpk2bdPz4cXXv3l0NGjTQZ599JmOMevXqpc2bN8tiseRobgAAFAYU0QEAAAAAyGFRUVGaN2+e43VsbKwaNmzotn9KSooWLFigUaNGue1jtVoVExOjd999V6dPn1ZycrLCw8MlXXsg6enTp1WyZMnsSwIAgEKKIjoAAAAAADksLi5OFStWlJeXl9asWaP58+drwYIFbvt///33OnPmjLp27eq2z8yZM9WpUydFREQoOTlZVqtVu3btksVikdVqVfHixXMgEwAACh+K6AAAAAAA5LDly5frww8/1NWrV1W9enXNnj1b1atXlyT1799fDRo00OOPP+7oP2/ePHXs2FFFixZ1ubz9+/dr9erVWrZsmSTJ09NTkyZN0oABA2SxWDR58mR5enrmfGIAABQCFNEBAAAAAMhh48aN07hx41xOczU2+qxZs9JdXpUqVbRixQqnti5duqhLly5ZDxIAALjkkR0LSU5O1qJFizR69GgNGDBAo0aN0qeffiqr1ZodiwcAAAAA5HOHDx9W//79Vb16ddWrV09vv/22274XLlzQiBEjFBkZqTJlymjq1KlO019++WXVqFFDrVu31t69ex3tR44cUZs2bXTlypUcywMAABQ+2XIn+ocffqgdO3aoW7duKl68uI4dO6YlS5YoISFBw4cPz45VAAAAALjFVPvPf3J8HRaLRaGhoYqPj5cxJsfXh5yRnJysQYMG6d5779WcOXN05MgR9e3bV6GhoerWrVua/s8995wSEhK0detWeXh4qGXLlipXrpx69uypbdu2aeXKldq0aZMWLlyo2NhYzZ07V5I0fvx4xcTEyM/PL7dTBAAABVim7kRP/Q1/alu2bNGIESPUokUL1alTRx07dlT37t31008/ZUuQAAAAAID868CBAzpw4IDGjBkjb29vValSRX379tUnn3ySpm9iYqKWLVump59+WsWKFVNkZKQGDx6s+fPnS7p2t3mdOnUUFBSk5s2b68iRI5KkpUuXqlSpUmratGmu5gYAAAq+TBXRJ06cqBkzZujs2bNO7SEhIdq1a5fjdUpKivbu3avg4OBsCRIAAAAAkH+lpKRIktNfE6SkpGj37t1p+h44cEBWq1U1atRwtNWoUcPRNzo6Wtu3b9e5c+e0fv16RUdHKyEhQTNmzNCECRNyOBMAAFAYZaqIPnXqVCUnJ+uJJ57QkiVLZLPZJEkDBgzQ0qVLNWrUKD3//PN67LHH9Msvv2jgwIE5EjQAAAAAIP+oXLmyKlSooNdee01Xr17Vnj17NH/+fF24cCFN30uXLikgIEBeXv8bfbRYsWK6ePGiJCkqKkpDhgxRjx49tG7dOj3//POaOHGihg8frn379qlnz57q1auXtmzZkmv5AQCAgi1TY6KXKFFCTzzxhH7//Xd98MEHWrt2rQYMGKCGDRtq5syZ+uWXX3T27FkVK1ZMd9xxh4oWLZpTcQMAAAAA8glvb2/Nnj1bL7zwgurVq6fQ0FD17t1bH3/8cZq+RYoUUWJiopKSkuTt7S1JOn/+vAIDAx19Bg0apEGDBkmSNm3apOPHj6t79+5q0KCBPvvsMxlj1KtXL23evFkWiyV3kgQAAAVWlh4sGh0drVdeeUVr167V+++/rxUrVmjQoEG6++67szs+AAAAAEABEBUVpXnz5jlex8bGqmHDhmn6Va5cWd7e3oqLi1OdOnUkSbt27VJ0dHSavlarVTExMXr33Xd1+vRpJScnKzw8XJJks9l0+vRplSxZMocyAgAAhUWmhnNJzWKxqHXr1po+fboqVaqkZ599Vv/+979d/jkeAAAAAKBwi4uL0+XLl2W1WvXVV19p/vz5Gj16dJp+/v7+6ty5s6ZMmaLz589r3759mj17tvr27Zum78yZM9WpUydFREQoJCREVqtVu3btUlxcnKxWq4oXL54bqQEAgAIu00X0DRs26M0339SUKVP0+eefy9PTUwMHDtSrr76qU6dO6fHHH9eXX36p5OTknIgXAAAAAPKVxMRENWnSRNWqVZMknTp1SiNHjlS9evUUFRWltm3batWqVekuo0GDBqpcubKqVq2qqlWrOpYlScnJyRo1apSqVaumrl276sSJE45pW7duVY8ePZwe6JlXli9frvr166t69ep69913NXv2bFWvXl2S1L9/f7355puOvrGxsQoKClK9evXUpEkT9e3bVz179nRa3v79+7V69WoNHTpUkuTp6alJkyZpwIABGjBggCZPnixPT8/cSxAAABRYmRrOZcmSJfrss8/UpEkTBQcHa8WKFdq+fbtiYmJUrlw5jR8/Xj///LM+/PBDrVmzRg8++KDuuOOOnIodAAAAAG55r732msqVK6czZ85IuvbgzJo1a2r8+PEqW7as1qxZo+HDh+urr75SZGSk2+W89dZbateuXZr2r776SseOHdO2bdv0r3/9SzNnztTEiRNls9n0/PPPa+bMmbfEuODjxo3TuHHjXE67fmz0oKAgvf3227JYLAoNDVV8fHyaLwKqVKmiFStWOLV16dJFXbp0yd7AAQBAoZepO9FXr16tLl26aPjw4XrwwQc1duxYxcXF6fjx444+9erV0+uvv65WrVo53UkAAAAAAIXNjh07tG7dOo0YMcLRFh4erqFDhyosLEweHh5q27atKleurF9++SVL6/jjjz/UoEED+fr66u6779aRI0ckSe+8847atGmjKlWqZEsuAAAAhVWmiug2m03+/v6O135+fpKkpKQkp35eXl667777NH369GwIEQAAAADyn6SkJD311FOKjY2Vt7e3236nTp3S/v37nYZocWXcuHGqWbOmOnfurLVr1zrao6OjtXnzZiUmJuqHH35QdHS0Dh06pC+//FIjR47MtnwAAAAKq0wN59K4cWMtWbJENptNAQEBWrNmjSpUqKAKFSq47F+sWLFsCRIAAAAA8pt33nlHNWvWVMOGDbVhwwaXfaxWq4YNG6ZOnTqpTp06bpc1Y8YM1apVSx4eHvrqq6/06KOP6rPPPtPtt9+ue+65Rz/99JM6d+6sqKgoxcbGatiwYXrppZe0Zs0azZkzR35+foqJiVHVqlVzKl0AAIACK1NF9AcffFDFihXTzz//LKvVqipVqqhXr17y8Mj080kBAAAAoMA6dOiQPvroI3399ddu+1itVj366KPy9/fXlClT0l3eXXfd5RgTvFu3blq5cqW++uor3X777ZKcxxtfvHixypUrp6ioKLVu3Vpr165VXFycxowZo+XLl2dPggAAAIVIporoXl5euv/++3X//ffnVDwAAAAAkO9t2bJFp06dUrNmzSRdG9rl4sWLqlmzpj788EPVrFlTjz32mGw2m2bPni0fH59MLd/djUxnzpzR22+/rSVLlujgwYMKCwtTcHCw6tWrp7i4uJvOCwAAoDDKVBEdAAAAAHBj9913n6OALkk///yznnrqKa1atUolSpTQ0KFDdfnyZc2dO1e+vr7pLuuPP/7Qzz//rNtvv10eHh5asWKFVq1apYULF6bp+/LLL+vxxx9XcHCwypcvr4MHDyo+Pl6//fabKlasmN1pAgAAFAoZLqLHxsaqW7duql69eqZW8Ntvv+mLL77Qs88+m+ngAAAAACA/8vf3l7+/v+P14cOHZbFYFBYWpo0bN+rrr7+Wn5+fatWq5egzatQoPf7445Kkli1batSoUbr//vt18eJFPffcczp8+LC8vLxUqVIlvfPOO6pXr57TOjds2KCTJ0+qa9eukqTSpUvriSeeUNu2bRUUFKQ33ngj5xMHAAAogDJcRC9TpowmTpyoMmXKqFGjRqpVq5YiIiLk5+fn1C8xMVEHDx7Uzp07tXHjRp06dUotW7bM9sABAAAAIL9o3Lixdu/eLUlq1KiRjh8/nm7/b7/91vH/6tWra82aNY4x0dNbR+PGjZ3aHnnkET3yyCNZjBoAAABSJoroQ4YM0X333aevvvpKq1at0meffSaLxaLAwEAVKVJEknTx4kVdunRJxhgFBgaqWbNm6tChg0qXLp1jCQAAAAAAAAAAkFMyNSZ66dKl9dBDD2nAgAHavXu39u7dqz///FMXLlyQJAUFBSksLEyRkZGKjo6Wl1feDrk+YsQInTx50qmtX79+jj9vlKQjR47o/fff14EDB1S0aFG1a9dOXbp0yeVIAQAAgIJlzpw5WrhwoX7//Xe1bNlSs2fPliQdP35cLVq0cOp79epVtWrVSh988EGa5Rw7dkxVq1Z1ugv7+v4vv/yy5s+fr9DQUL399tuKjIyUdO2z/pAhQ7R8+fI0f0ELAAAAZFSWqtyenp6qWbOmatasmd3xZLtevXqpdevWjtepPzxfvnxZEydOVK1atfTII4/ojz/+0DvvvKMiRYo4zQMAAAAgc8qUKaPRo0dr/fr1io+Pd7SXK1dO+/btc7y2Wq2644473N7IUr58eV28eFHx8fEyxqTpv23bNq1cuVKbNm3SwoULFRsbq7lz50qSxo8fr5iYGAroAAAAuCl5e6t4LvD391dwcLDLaT/88IOSkpI0fPhweXl5qUKFCjp8+LC+/PJLiugAAADATejQoYMkadeuXU5F9OutXLlSxhi1b98+Q8u9vv+RI0dUp04dBQUFqXnz5vroo48kSUuXLlWpUqXUtGnTm8wEAAAAhZ1HXgeQ0z7//HMNHjxYTz/9tJYtW6bk5GTHtL1796patWpOw87UqVNHf/75py5evOh2mTabTZcvX3b8JCYm5mgOAAAAQEE1f/58devWLcN3i1/fPzo6Wtu3b9e5c+e0fv16RUdHKyEhQTNmzNCECRNyMnQAAAAUEgX6TvT27dsrIiJCgYGB2rNnj+bNm6ezZ89q4MCBkqSEhIQ0Dz2137WekJCgwMBAl8tdunSpFi9e7HgdERGhyZMny9vbWx4e176XSE5OVlJSkry8vOTp6enom5SUpOTkZKe+qdt9fHxksVgc7TabTSkpKfL19XWKwWq1yhiTpv3q1auyWCzy8fFJ0+7h4SFvb29Hm/3PYT09PZ2+SEhJSZHNZkvT7i4nWSySMU5xS5K5tpK07f8/nmVm2yXJ4uEh/f/rdPtbLHJuTb899TJ8fX0zvZ8c8WVTrm7bU+WfmZykdPbHde32Yyozx57FYslaTpnYTy6XkcGcMhTL/7enziuj55N9eTd77N0wpxvEnh3tqfPP6DUi9bJu5thLN8ZU/8+WXN3sj4xe91JfI5zyz0xOmWm/bnp2X/dSx56V96frj4GbytVV7P8/zXGtyebr3vWxZPY9N6eue46c7Pl7eFzrm4Pvufa2zHyOyNHrnqttkJKSqZwy0+7j45Ppz0Yul52RnDIT4/+fk/bPATn1nuvr65sjn2E9PT3l4eEhX1/fNOfT0aNHtX79ej377LPpHnv2+P744w9Hf/v+qF27toYOHaqePXsqNDRUkydP1qRJkzR69GgdPnxYQ4cOlSSNGzdOjRs3zpacUsvpz+VJSUmO/O37uDD9rmE/z65/z83POWV2P7k6BvJ7Tpn9XcP+b0HJyR57Zn7XkFRgcpIy/7uGl5eXbDZbgcjJLiP7yd7u6+srm81WIHLK6u8avr6+unr1aoHIKbUb7Sd7u/09oCDkdKvtp4w+0zPfFdE/+eQTffHFF+n2mTp1qsqVK6dOnTo52sLDw+Xl5aX33ntP/fr1c9oxmdWtWzenZdsPIJvNJpvN5tQ3KSnJ8aEntev72VmtVpftV69ezXC7/aS6XkpKisv25ORkpzv0b9SeJqfritqu4smOdkmOX5xv2N8YuVyKm/brH1Rll9n9lNPbwFX+GckpM+3XHyMZOfZSLzNT672J/ZRT7dfnm5HzyWl5t2BOmWnPyjXi+mXlSIzGSP//Rpgty3ezPzJ83ft/NpvN5fKzfRukyt9t/2w69rLy/pRj28Ae+//nn3p75OT5lNn33By/7tnzT/UekJPXgsx+jsiV614ubQP7cZ7Zz0a58v5/Xf6ZXk4G9lPq/Zudn2GTk5PTHD/2/3/00UeqWbOmatSoke6xZ58ndf/U+2PAgAEaMGCAJGnTpk06evSoOnfurAYNGuizzz6TMUa9evXS5s2b03zJcKt/LrfH6+p6Wxh+10j9u5arYzs/5mSX0f2U3jFgb7/erZ5TerFf3576hpWCkpNdRnJKfc0qKDmldqOc7Pnb8ygIOV0vvZzs7anP//yekyvp5eTqGpjfc8poe+qcUudfUHJKLS9zSq8OmVq+K6J37txZLVq0SLdPmTJlXLZXrVpVycnJOnnypMLCwhQcHKyEhASnPvbX7sZRl67dBXEzRXgAAACgsEtJSdGCBQs0cuTIbOtvtVoVExOjd999V6dPn1ZycrLCw8MlXfvl6fTp0ypZsmS2xA8AAIDCI98V0YsWLaqiRYtmad7Dhw/LYrE45o+MjNS8efMct/tL0o4dOxQWFuZ2KBcAAADArtp//pPj67BYLAoNDVV8fHyG75S5FdjvBEpKSlJKSoquXLkiDw8Px5/wfv/99zpz5oy6du2aoeVlpP/MmTPVqVMnRUREKDk5WVarVbt27ZLFYpHValXx4sWzITMAAAAUNjdVRE9JSdHGjRu1a9cunTt3Tr1799Ztt92my5cva+fOnYqKikr3ju6ctHfvXu3bt081atSQv7+/9u7dq7lz56pZs2aOAnnTpk21aNEivfvuu+rSpYuOHj2qFStWOMZMBwAAAJA106dP1xtvvOF4XblyZTVq1MjxbKF58+apY8eOLm+Q6d+/vxo0aKDHH3/c0ZZef0nav3+/Vq9erWXLlkm6NnbwpEmTNGDAAFksFk2ePNn5uT4AAABABmW5iH7p0iVNmjRJ+/fvl5+fn65cuaL27dtLkvz8/DRnzhzdfffd6tevX7YFmxleXl7asGGDFi1aJJvNptKlS6tjx45OY5kHBAToueee0/vvv69nnnlGQUFBuv/++9W6des8iRkAAAAoKMaOHauxY8e6nT5r1iy30z7++GOX/dO7E79KlSpasWKFU1uXLl3UpUuXDEQLAAAAuJflIvonn3yio0eP6tlnn1XFihX1yCOPOKZ5eHioYcOG+vXXX/OsiF6pUiXFxsbesF94eLheeumlXIgIAAAAAAAAAJDfeGR1xq1bt6pdu3aqXbt2mifcS1JoaKhOnjx5U8EBAAAAAAAAAJCXslxEv3z5skqXLu12enJyspKTk7O6eAAAAAAAAAAA8lyWi+hly5bVoUOH3E7fvn27ypcvn9XFAwAAAAAAAACQ57JcRG/VqpW+/fZbbdiwwekBPzabTfPmzdO2bdvUpk2bbAkSAAAAAAAAAIC8kOUHi3bo0EFHjx7V9OnTFRAQIEl68803deHCBaWkpKh169Zq1apVtgUKAAAAAAAAAEBuy3IR3WKxaOjQoWrRooU2bdqk+Ph4GWNUpkwZNWrUSNWrV8/OOAEAAAAAAAAAyHVZLqLbRUdHKzo6OjtiAQAAAAAAAADglpLlMdHfeOMNbdmyRTabLTvjAQAAAAAAAADglpHlO9H37NmjzZs3y8/PT3feeacaN26sOnXqyMvrpm9uBwAAAAAAAADglpDlive7776r3bt3a8OGDdq8ebN++OEHBQQEqEGDBmrcuLFq1aolD48s3+gOAAAAAAAAAECeu6kHi1avXl3Vq1fX4MGDtWvXLm3cuFFbtmzRunXrFBgYqLvuukuPPvpodsYLAAAAAAAAAECuyZZbxT08PFSrVi09+uij+ve//61HHnlESUlJWrt2bXYsHgAAAAAAAACAPJFtA5ifPXtWGzdu1MaNG7V3715JUlRUVHYtHgAAAAAAAACAXHdTd6KfO3dOX3/9tWJiYjRs2DDNnTtXKSkpGjBggN555x299NJL2RUnAAAAkO8999xzuvPOOxUVFaV69eppwoQJslqtLvteuHBBI0aM0P+xd+dxUZXtH8e/M4AgiuIG4pbmhltqmrnvmppbivtSWpqPe5lZlpGalkupaS7tFrnikvueuYtKuJsruAQPIqEi4LDM7w9/Mw+oY0ggMnzer5cvmfvcc+a6zpnlzDX3uU+5cuXk6empGTNmpFg+ceJEVapUSc2bN7cOYpGkkJAQtWjRQnFxcRmaCwAAAJBdpHkk+oQJE3T69GklJSWpZMmS6t69u+rWrSsPD4/0jA8AAACwG6+++qrGjh0rV1dXRUZGauDAgZo7d65Gjhz5QN8PP/xQUVFROnTokIxGo5o0aaKiRYuqS5cuCgoK0qZNm3TgwAEtW7ZMkyZN0sKFCyVJY8eOla+vr1xcXJ5wdgAAAIB9SnMR/ebNm/Lx8VHdunXl5eWVnjEBAAAAdqls2bLWv81ms4xGoy5duvRAv9jYWK1Zs0arV69W3rx55eXlpf79+2vJkiXq0qWLQkJCVLVqVbm5ualRo0b6+eefJUmrVq1SoUKFVL9+/SeWEwAAAGDv0jydy+eff67OnTtTQAcAAAAew5w5c1S2bFk999xzOnXqlPr37/9AnwsXLshkMqlSpUrWtkqVKun06dOSJG9vbx09elQ3b97U7t275e3traioKM2ePVsfffTRE8sFAAAAyA7+1ZzoAAAAAB7P0KFDde7cOe3cuVN9+vRRoUKFHuhz584dubq6ytHxfyeO5s2bV9HR0ZKk8uXL64033pCPj4927typcePG6ZNPPtHgwYN17tw5denSRV27dlVAQMATywsAAACwV6mezqVbt24yGAzy8/OTo6OjunXr9o/3MRgMWrJkyb8KEAAAALBHZcuWVcWKFfXWW29p6dKlKZblypVLsbGxSkhIkJOTkyTp1q1byp07t7VPv3791K9fP0nSgQMHdO3aNXXq1Em1atXSihUrZDab1bVrVx08eFAGg+HJJQYAAADYmVQX0Tt37iyDwSCj0ZjiNgAAAIC0SUhIeOic6KVLl5aTk5NOnTqlqlWrSpJOnjwpb2/vB/qaTCb5+vpq/vz5unHjhhITE/XMM89IkuLj43Xjxg0VLFgwYxMBAAAA7Fiqi+hdu3Z95G0AAAAAtt25c0fr1q1Tq1atlCdPHp05c0azZs1S48aNH+ibM2dOtWvXTtOmTdPcuXMVHR2t77//XqNHj36g75w5c9S2bVuVKlVKiYmJMplMOnnypAwGg0wmk/Lly/cEsgMAAADsV5rnRPf399fly5dtLr9y5Yr8/f3TunoAAADArhgMBq1atUp169ZVuXLl1L9/fzVr1kzjx4+XJPXu3Vtffvmltf+kSZPk5uamGjVqqF69eurRo4e6dOmSYp3nz5/X1q1bNWjQIEmSg4ODJk+erD59+qhPnz6aMmWKHBwcnlySAAAAgB1K9Uj0+y1fvlyFCxdWiRIlHrr8ypUrWr58uXx8fNIcHAAAAGAvXF1dH3m9ID8/vxS33dzcNHfuXBkMBnl5eSk0NFRmszlFnzJlymjjxo0p2jp06KAOHTqkX+AAAABANpfmkej/JDo6Wo6Oaa7RAwAAAAAAAACQ6R6ryn3q1CmdOnXKevvgwYMKCwt7oN+dO3e0b98+m6PUAQAAAAAAAADICh6riH7y5MkU85wHBAQoICDgoX2LFSum/v37/7voAAAAAAAAAADIRI9VRO/QoYNatWols9msAQMGaMCAAXrxxRdT9DEYDMqRI4dy5MiRroECAADg6VPh228z/DEeNSc4AAAAAGS0xyqiJy+Oz5kzR3ny5JGzs3OGBAYAAAAAAAAAQGZL85U/CxUqlJ5xAAAAAAAAAADw1ElzEV2SQkJCtHHjRl26dEkxMTEPnF5rMBg0e/bsfxUgAAAAAAAAAACZxZjWO548eVJjx45VYGCg8uXLp/DwcHl6eipfvny6fv26XFxcVKFChfSMFQAAAAAAAACAJyrNI9GXLVsmDw8PTZo0SQkJCRowYIBeeeUVVa5cWefOndPkyZPVq1ev9IwVAAAAAAAAAIAnKs0j0S9evKimTZvK1dVVRuO91SQlJUmSypYtqxYtWmjp0qXpEyUAAAAAAAAAAJkgzUV0BwcH5cyZU5KUK1cuOTg46ObNm9blHh4eunr16r+PEAAAAAAAAACATJLmInrhwoUVGhoq6d4FRIsWLaqAgADr8sDAQLm7u//rAAEAAAAAAAAAyCxpLqJXr15de/fuVWJioiTp5ZdfVkBAgIYPH67hw4fryJEjat68eboFCgAAAAAAAADAk5bmC4t27txZbdq0sc6H3rhxYxmNRh08eFBGo1GdOnVS48aN0ytOAAAAAAAAAACeuDQX0R0dHeXm5pairWHDhmrYsOG/DgoAAAAAAAAAgKdBmqdzAQAAAAAAAADA3qV6JPr48eMfe+UGg0EfffTRY98PAAAAAAAAAICnQapHopvN5sdeeVruAwAAAAAAAADA0yLVI9E//vjjDAwDAAAAAAAAAICnD3OiAwAAAAAAAABgQ6pHoj9MUlKS9u/fr5MnT+rmzZvq1q2bSpQooZiYGB0/flzly5eXu7t7OoUKAAAAAAAAAMCTleaR6Hfu3NG4ceP05Zdfau/evTp8+LBu3bolSXJxcdEPP/ygDRs2pFugAAAAsA+xsbGqV6+eKlSoYLPP1KlT1axZM5UoUeKBC9UnJiZq2LBhqlChgjp27KiwsDDrskOHDsnHx4dr8wAAAABIN2kuov/yyy+6cuWKPvjgA82ePTvlSo1G1a5dW3/88ce/DhAAAAD2Zfr06SpatOgj+5QsWVIffPCBWrZs+cCyDRs26OrVqwoKClL16tU1Z84cSVJ8fLzGjRunzz77TAaDIUNiBwAAAJD9pHk6l0OHDqlVq1Z67rnndPv27QeWe3l5aefOnf8mNgAAgKdehW+/zdD1GwwGeXl5KTQ01C5GVx87dkw7d+7URx99pEGDBtns17VrV0nSmjVrHlh2+fJl1apVS87OzmrYsKG+//57SdK8efPUokULlSlTJmOCBwAAAJAtpXkkekxMjDw8PGwuT0xMVGJiYlpXDwAAADuTkJCg0aNHa9KkSXJyckrzery9vXXw4EHFxsZqz5498vb21qVLl7Ru3ToNHTo0HSMGAAAAgH9RRC9cuLAuXbpkc/nRo0dVrFixtK4eAAAAdmbevHmqXLmyateu/a/W06xZM9WpU0ft2rVTWFiYhgwZorFjx2rChAnatm2bfHx81Lt3b507dy6dIgcAAACQnaV5OpemTZvql19+UaVKlVS5cmVre3x8vPz9/RUUFKQ333wzXYIEAABPL6YzQWpcunRJP//8szZv3pwu6xszZozGjBkjSfL391fRokVVvnx5NW/eXNu3b9epU6f09ttva+3atenyeAAAAACyrzQX0du0aaMrV65o1qxZcnV1lSR9+eWXun37tpKSktS8eXM1bdo03QIFAABA1hUQEKCIiAg1aNBA0r2pXaKjo1W5cmX99NNPev7559O03sjISM2dO1crV67UxYsXVaRIEbm7u6tGjRo6depUeqYAAAAAIJtKcxHdYDBo0KBBaty4sQ4cOGAdHebp6ak6deqoYsWK6RknAAAAsrD27dtbC+iSdOTIEY0ePVpbtmxRwYIFH+gfHx9vvcZOYmKi4uLiFB8fL0fHlIevEydO1PDhw+Xu7q5ixYrp4sWLCg0N1YkTJ1SyZMmMTgsAAABANpCmIvrdu3c1e/Zsvfjii2rQoIG8vb3TOy4AAADYkZw5cypnzpzW28HBwTIYDCpSpIgkqXfv3qpVq5aGDx8uSRo9erSWL19u7f/DDz+oa9eumjFjhrVt3759un79ujp27ChJ8vDw0MiRI9WyZUu5ubnpiy++eAKZAQAAALB3aSqiOzs76/jx46pWrVo6hwMAAIDsoG7dujp9+rT1tp+fX4rlM2fO1MyZMyXZnhe/bt26qlu3bor7DRgwQAMGDMi4wAEAAABkO8a03tHb21tnz55Nz1gAAAAAAAAAAHiqpLmI3r9/f505c0ZLlizRjRs30jMmAAAAAAAAAACeCmm+sOjo0aOVmJioVatWadWqVXJwcJCTk9MD/RYuXPivAgQAAAAAAAAAILOkuYj+4osvymAwpGcsAAAAAAAAAAA8VdJcRB8yZEh6xgEAAAAAAAAAwFMnzXOiAwAAAAAAAABg79I8Eh0AAEgVvv02wx/DYDDIy8tLoaGhMpvNGf54AAAAAADgfxiJDgAAAAAAAACADRTRAQAAAAAAAACwgSI6AAAAAAAAAAA2UEQHAAB4wmJjY1WvXj1VqFDBZp/bt29ryJAhKleunDw9PTVjxowUyydOnKhKlSqpefPmOnv2rLU9JCRELVq0UFxcXIbFDwAAAADZyb++sGhsbKyuX7+uO3fuPPRiZxUrVvy3DwEAAGBXpk+frqJFiyoyMtJmnw8//FBRUVE6dOiQjEajmjRpoqJFi6pLly4KCgrSpk2bdODAAS1btkyTJk3SwoULJUljx46Vr6+vXFxcnlQ6AAAAAGDX0lxEv337tr777jsdPHhQSUlJNvstXbo0rQ8BAABgd44dO6adO3fqo48+0qBBgx7aJzY2VmvWrNHq1auVN29eeXl5qX///lqyZIm6dOmikJAQVa1aVW5ubmrUqJF+/vlnSdKqVatUqFAh1a9f/0mmBAAAAAB2Lc1F9AULFujIkSNq3bq1vL29lTt37vSMCwAA2KktW7Zo2rRpunTpkvLkyaORI0eqb9++D/Tz8fHRkSNH5OjoKIPBILPZrN27d6tw4cKS7k1nsmTJEnl5eWnu3LkqV66cpHvTmbzxxhtau3btUzcaOyEhQaNHj9akSZMeOQjhwoULMplMqlSpkrWtUqVKmj17tiTJ29tbU6dO1c2bN7V79255e3srKipKs2fPlr+/f4bnAQAAAADZSZqL6EePHtXLL7+s3r17p2c8AADAjv322296//33NXv2bL344ou6ffu2IiIibPYfO3asBg4cKC8vL4WGhlqnjsuq05nMmzdPlStXVu3atbVv3z6b/e7cuSNXV1c5Ov7vUC1v3ryKjo6WJJUvX15vvPGGfHx8VKRIEU2ePFmffPKJBg8erHPnzmn69OkyGAx65513VKtWrQzPCwAAAADsWZqL6M7OzipUqFB6xgIAAOzctGnT9NZbb6lu3bqSJHd3d7m7uz/2erLidCaXLl3Szz//rM2bN/9j31y5cik2NlYJCQlycnKSJN26dSvFmX/9+vVTv379JEkHDhzQtWvX1KlTJ9WqVUsrVqyQ2WxW165ddfDgQRkMhoxJCgAAAACyAWNa79igQQMFBASkZywAAMCOxcTE6NixYwoLC1P9+vVVrVo1DRw4UP/9739t3mfWrFmqWLGiqlevruXLl1vbvb29dfTo0YdOZ/LRRx89iXQeW0BAgCIiItSgQQNVrlxZ/fv31+3bt1W5cmUFBgam6Fu6dGk5OTnp1KlT1raTJ0/K29v7gfWaTCb5+vpq8uTJunHjhhITE/XMM8+oZMmSio+P140bNzI8NwAAAACwZ2keiV67dm2dOnVKkyZNUvPmzVWgQAEZjQ/W5J999tl/FSAAALAPUVFRMpvN2rRpk5YsWaJ8+fLpvffe07Bhw7Rs2bIH+r/33nsqV66cXF1ddfr0aXXp0kW5cuVS69ats+R0Ju3bt1eDBg2st48cOaLRo0dry5YtKliwYIq+OXPmVLt27TRt2jTNnTtX0dHR+v777zV69OgH1jtnzhy1bdtWpUqVUmJiokwmk06ePCmDwSCTyaR8+fJleG4AAAAAYM/SXERPPsrr2LFjNvstXbo0rQ8BAADsSK5cuSRJr7/+uooVKyZJGjVqlOrXr6+YmBi5urqm6F+zZk1JksFg0EsvvaTevXtrzZo1at26taSsN51Jzpw5lTNnTuvt4OBgGQwGFSlSRJLUu3dv1apVS8OHD5ckTZo0SWPGjFGNGjXk6uqqV199VV26dEmxzvPnz2vr1q1as2aNJMnBwUGTJ09Wnz59ZDAYNGXKFDk4ODyhDAEAAADAPqW5iP6f//wnPeMAAAB2Lm/evCpatOhDl1kuGPooDzvjTfrfdCbz589PMZ2JJOt0JveP9H4a1K1bV6dPn7be9vPzS7Hczc1Nc+fOlcFgeODCqhZlypTRxo0bU7R16NBBHTp0yLjAAQAAACCbSXMRvXHjxukYBgAAyA569eql77//Xo0bN5a7u7tmzJih+vXrW0epW9y8eVOHDx9W3bp15ezsrO3bt+vnn3/W1KlTH1gn05kAAAAAADJSmovoycXFxSkiIkKSVLBgQbm4uKTHagEAgJ0ZOnSooqKi1KJFC0n3RmN/+eWXklJOZ5KQkKAZM2Zo8ODBkqRSpUrJ19dX7dq1S7E+pjMBAAAAAGS0f1VEP3/+vH755RedOXNGSUlJku6dau3t7a3evXurdOnS6RIkAACwDw4ODvL19ZWvr+8Dy5JPZ1KgQAGtW7dOkpjOBAAAAACQqdJcRD937pw+/vhjOTo6qmnTptY5Tq9du6a9e/fK19dXH3/8scqUKZNuwQIAAAAAAAAA8CQ9/ApdqbBkyRLlz59fs2bN0oABA9SmTRu1adNGAwYM0MyZM5UvXz4tXrw4PWMFAMBuxMbGql69eqpQocIj+y1atMg6Z3itWrW0efNmSVJiYqKGDRumChUqqGPHjgoLC7Pe59ChQ/Lx8UnVxToBAAAAAMCj/auR6D4+PnJ3d39gmbu7u5o3b64VK1b8m9gAAFlAhW+/zfDHeNR0HlnV9OnTVbRoUUVGRtrs4+fnp2+++Ubz5s1TixYtdPz4cd25c0eStGHDBl29elVBQUH67LPPNGfOHH3yySeKj4/XuHHjNGfOHBkMhieVDgAAAAAAdivNI9ENBoMSExNtLk9KSuLLOwAAD3Hs2DHt3LlTQ4YMsdknMTFR06dP14QJE1SlShUZDAYVKlRIzzzzjCTp8uXLqlWrlpydndWwYUOFhIRIkrXgznRqAAAAAACkjzQX0cuXL6/Nmzfr+vXrDyyLiIjQli1b5O3t/a+CAwDA3iQkJGj06NGaNGmSnJycbPa7cOGCrl+/ruPHj6tWrVoqVqyY3nnnHd2+fVuS5O3trYMHDyo2NlZ79uyRt7e3Ll26pHXr1mno0KFPKh0AAAAAAOxemovoPXr0UExMjEaOHKlZs2Zp2bJlWrZsmWbOnKmRI0cqJiZGPXr0SM9YAQDI8ubNm6fKlSurdu3aj+wXFRUlSdq9e7c2btyooKAgXb58WR9//LEkqVmzZqpTp47atWunsLAwDRkyRGPHjtWECRO0bds2+fj4qHfv3jp37lwGZwQAAAAAgH1L85zopUqV0uTJk7V48WIdPnxYJpNJkpQjRw5Vq1ZN3bt3V7FixdItUAAAsrpLly7p559/tl4c9FFcXV0lSUOHDlWBAgVUsGBBDRs2TIMHD7b2GTNmjMaMGSNJ8vf3V9GiRVW+fHk1b95c27dv16lTp/T2229r7dq1GZMQAAAAAADZQJqL6JJUrFgxjR49WklJSbp165YkKU+ePDIa0zzAHQAAuxUQEKCIiAg1aNBA0r2pXaKjo1W5cmX99NNPev755619S5cuLRcXl1StNzIyUnPnztXKlSt18eJFFSlSRO7u7qpRo4ZOnTqVIbkAAAAAAJBd/KsiuoXRaJS7u3t6rAoAALvVvn17awFdko4cOaLRo0dry5YtKliwYIq+OXPmVKdOnTR37lw999xzypkzp7766iu99NJLD6x34sSJGj58uNzd3VWsWDFdvHhRoaGhOnHihEqWLJnRaQEAAAAAYNdSXUT39/eXJHXq1ElGo9F6+5/4+PikLTIAAOxMzpw5lTNnTuvt4OBgGQwGFSlSRJLUu3dv1apVS8OHD5ckjR8/XmPHjlXt2rXl4uKi5s2by9fXN8U69+3bp+vXr6tjx46SJA8PD40cOVItW7aUm5ubvvjiiyeTHAAAAAAAdirVRfTly5dLkjp27Cij0Wi9/U8oogMA8HB169bV6dOnrbf9/PxSLHd1ddXMmTNlMBjk5eWl0NBQmc3mB9ZRt27dFG0DBgzQgAEDMi5wAAAAAACykVQX0ZcuXfrI25lh5cqVCgwMVHBwsBwdHfXjjz8+0CciIkLffPONTp48KRcXFzVq1Eg9e/aUg4ODtc/Jkyf1008/6cqVKypQoIA6d+6sxo0bP7lEAAAAAAAAAABPpSx9BdCEhATVrl1bLVu2fOjypKQkffrpp0pISNAnn3yiIUOGaOfOnSl+AAgPD9dnn32mSpUqaerUqXr55Zc1f/58BQUFPaEsAAAAAAAAAABPqzQX0bt166Y9e/bYXL5v3z5169YtratPla5du6pt27YqUaLEQ5cfPXpUV69e1bBhw1SyZElVr15d3bp10+bNm5WQkCBJ2rJlizw8PNS3b18VK1ZMrVq1Uu3atbV+/foMjR0AAAAAAAAA8PTLsJHoSUlJMhgMGbX6VDl79qxKlCghd3d3a1u1atUUGxurK1euSJLOnTunKlWqpLhf1apVdfbs2ScZKgAAAAAAAADgKZTqOdEfR0xMjIKCguTm5pYRq0+1qKioFAV0ScqbN691meV/S1vyPrGxsTKZTMqRI8cD642Pj1d8fLz1tsFgUM6cOdM3eAAAAAAAAABApnusIvry5cvl7+9vvT179mzNnj3bZv/WrVs/dkC//PKLfv3110f2mTFjhooWLfrY604vq1atSrEdSpUqpSlTpsjJyUlG473B/YmJiUpISJCjo2OKi5gmJCQoMTExRd/k7Tly5Egxgj8+Pl5JSUlydnZOEYPJZJLZbH6g/e7duzIYDA8U/+/evSuj0SgnJydrm9lslslkkoODgxwd//dUSEpKUnx8/APttnKSwSCZzQ+ceWC+9yAPtpvN/3+3x2uXJIPRKP3/7Uf2Nxh0/3kQj2pPvg5nZ+fH3k/W+NIpV5vtyfJ/nJykR+yP+9otz6nHee4ZDIa05fQY++mh60hlTqmK5f/bk+eV2teTZX3/9rn3jzn9Q+zp0Z48//R6j0iP9737X6PJZcb73pN+L0++LnvJKXn7P+VkeVwnJ6eH5poVc7JIzX6ytDs7Oys+Pt4ucnrc/WRpd3Z2lslksouc0rKfnJ2dZTab7Sqn5LE/Kqfk+dtLTqndT5ZpKC3520NOj7OfEhMTJd37DEgee1bO6XH308OeA1k9p8f9rmH5315yssT+ON81JNlNTlLq95MlHkdHR8XHx9tFThap2U+W9uTHgVk9p8fdT8lrFXfv3rWLnJL7p/30sOPArJ7T07afkq/nUR6riF6mTBm99NJLMpvN2rJli5577jl5eXk90M/FxUXPPvusatWq9TirlyS1a9dOjRs3fmQfT0/PVK3L3d1d58+fT9F28+ZN6zLL/5a25H1y5sz50FHokvTKK6+obdu21tuWJ9D9I9SlezvFctCT3P39LEwm00Pb7969m+p2y4vqfklJSQ9tT0xMtB6cpqb9gZzuK2o/LJ70aJckc1JS6vqbzXroWmy0J19H8m30uPspo7fBw/JPTU6P037/cyQ1z73k63ysx/0X+ymj2u/PNzWvpxTrewpzepz2DHmP+H//5n0v+Qf1U/G+9/+e1Ht58vztJafk/imn5J+zydvvl5VySm275eDO8viW125Wz+lx95PlOZB8G2T1nFIbe/L25PnbS07JPSony32Sf35l9ZxSu58e9vy3yKo5Par9/pySfwY87PglK+Zkkdr99KjngKX9fk97To+K/f725ANW7CUni9TklPw40F5ySu6fcrLkb8nDHnK636NysrQnf/1n9Zwe5lE5pfY4MCvllNr25Dklz99eckouM3N6VB0yuccqolevXl3Vq1eXdG9DtGjRQmXLln2cVfyjPHnyKE+ePOmyrnLlymnlypW6efOmdcqWY8eOKWfOnCpWrJgkqWzZsvrjjz9S3O/YsWMqV66czfU6OTml+HUEAAAAAAAAAGCf0nxh0cGDB6d7Af1xRUREKDg4WBEREUpKSlJwcLCCg4MVFxcn6d4FQosVK6Y5c+YoODhYQUFBWrJkiV566SVrEbxly5YKDw+Xn5+frl27ps2bN2v//v16+eWXMzM1AAAAAAAAAMBT4F9fWPTGjRu6dOmSYmJiHjr8vVGjRv/2IWxaunSpfv/9d+vtd999V5Lk6+urSpUqyWg06r333tO3336rDz/8UM7OzmrUqJG6detmvY+Hh4fee+89LVy4UBs2bFCBAgU0aNAgVatWLcPiBoDs6ocfftCyZct05swZNWnSRN9///0j+y9atEjz5s1TaGioPDw85Ovrq5deekmJiYkaOXKktm3bpvLly2v+/PkqXLiwJOnQoUOaMmWKli9f/tBrFwAAAAAAADyONBfRTSaTvvrqKx08ePCRc8dkZBF9yJAhGjJkyCP7FCpUSO+///4j+1SqVElTp05Nz9AAAA/h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iZGHh0eWfx4kl3xbbNmyRdeuXVNsbKwaNWqkSpUqKTY2Vps3b9batWtVrFgxeXp6Ki4uTpcuXdLMmTOt2yAr1EWyIoroyFQmk0lz5syRl5eXevToobt37yoqKkr79+9XmTJltGrVKgUHBytXrlyKiYnR2LFj9eyzz2Z22BkiIiJC8+bNU40aNdSmTRtFRkZq3LhxypUrl0JCQtS/f3+99NJL1v73X2zEXlhOw7O8+V+5ckWffPKJSpQooeHDh8vNzS3FB4Hl76zyhToqKkoffvihKlasqM6dOys+Pl4ffPCBOnToIKPRqIiICO3YsUOvvfaaSpQoIV9fXzVq1EhxcXE6fvy4Jk6caLdFVcs+jIuLU0BAgL766is1aNBAPj4+1jNPHlU8sieXLl3SN998Iw8PD3Xp0kVFixbN7JAyhKV4YJkLPvnIicOHD2v9+vXKlSuXfHx87LaAIv3vfSwwMFAbN25UZGSkihYtqkaNGqlGjRpKTEzU3r17tXXrVrm5uek///lPihHp9sCyDY4cOaK1a9fq9u3bcnV1Vdu2bVWtWjUlJSVp1apV2rx5s/r27atmzZpldsgZZtGiRfr999/VokULeXp6au7cuWrSpInatWtn/QFp4cKF2rBhg8aNG6fKlStncsT/TkhIiL744gsVKlRIffv2TTHaeMuWLfr+++/Vv3//FGchwP6ZTCZduHBBhQoVso7ItVeWwkeePHk0YMCAB14DCxcu1CuvvKJXXnnFLgpEtsTExGj+/Plyd3dX//79deLECa1du1YhISHKnTu38ubNq/fffz/F9R/sycqVK7V+/Xq99tpryps3r3777TeFhISocePGat++vc6ePauQkBBdvHhRnp6eateunXUKE3t5Xhw4cEA///yzPv/8c+sP6TExMdq+fbv27dunESNGPHA2elZ+LiQ/K3/WrFmqUaOGDAaDjh07pkqVKql58+YppmW7fv26AgICVL16desgI3uQfB/+/fffypUrl958802NHz9eN2/e1LRp09S7d2+1bNlSJpNJq1evVt26dVN8J87Kz4Pkkufh5+en7du3q0KFCoqNjdWZM2fUsWNHtWvXTgaDQZs3b9bWrVvl6uqqPn36WK8hZU/vCU8jiujIVCaTSb6+vipbtqy6du2qZcuW6fLly/rrr7/k5OSkdu3aWQ+cS5QokSVOS06rv//+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/keqRBcRERERERERERG5BdTS786kJLqIiIiIiIiIiIjILaKWfnceve4QERERERERERERuUWUQL/zKIkuIiIiIiIiIiIiIlIDJdFFRERERERERERERGqgJLqIiIiIiIiIiIiISA2URBcRERERERERERERqYGS6CIiIiIiIiIiIiIiNVASXURERERE7J544gni4uIcHYaIiIiIyG3D7OgARERERETk/+eJJ574rz738ssv065du1qORkRERETEWJREFxERERG5w02ZMqXa1ykpKRw7duyG7S1btryVYYmIiIiIGIKS6CIiIiIid7iePXtW+zozM5Njx47dsF1ERERERP53SqKLiIiIiNQBZWVlbNq0ic8++4yioiK8vLx46KGHGDx4ME5OTj977HvvvcemTZsYM2YMAwYMACA9PZ3ExESys7NxcnLi3nvvZdSoUbRu3dp+3PLly/n888954403ePvtt/nnP/+Js7MzvXr1YtSoUZhMWqJJRERERG5/GrWKiIiIiBiczWbj9ddfJykpiQ4dOvDkk0/SokUL4uPjWbdu3c8eu3HjRjZt2sSECRPsCfSUlBQWLlyIi4sL0dHRDB06lLy8PObOncuZM2eqHW+1Wpk/fz6NGjVi9OjRtG3blu3bt5OcnFxr5ysiIiIicjOpEl1ERERExOBSU1M5fvw4I0aMICoqCoD+/fvz5z//mZ07d9K/f398fHxuOG79+vUkJSUxefJkevfuDVytaF+zZg19+/Zl4sSJ9s/26tWLGTNmkJiYWG17RUUF3bp1Y9iwYQBERkYye/ZsPv74YyIjI2vxrEVEREREbg5VoouIiIiIGFx6ejomk8leSV7l4Ycfxmaz8cUXX1TbbrPZiIuLY+fOnUydOtWeQAc4duwYly5dIjw8nOLiYvsfk8lEUFAQJ06cuOH7X58sDw0N5ccff7xp5yciIiIiUptUiS4iIiIiYnBnz56lSZMmNGjQoNr2Vq1a2fdfKyUlhbKyMsaPH09ERES1ff/6178AmDdv3k9+r+u/R/369XF3d6+2rWHDhly6dOl/PxEREREREQdQEl1ERERERKoJCQkhJyeH3bt30717d9zc3Oz7bDYbAFOmTKFx48Y3HFuvXr1qX2vxUBERERG502lEKyIiIiJicF5eXly4cIHLly9X23769Gn7/mv5+PgwZ84czp8/z/z586sd16xZMwA8PDxo3779DX/atWtXy2cjIiIiInJrKYkuIiIiImJw999/P1arlV27dlXbnpSUhJOTEx07drzhGD8/P1544QVOnz5NTEwM5eXlAHTo0IEGDRqQmJiIxWK54bji4uJaOQcREREREUdROxcREREREYPr1KkT7dq1Y+PGjZw9exY/Pz++/PJLUlNTGThwID4+Pj95XHBwMLNmzWLBggUsWbKE3/3ud7i6ujJhwgSWLVvG7NmzCQ8Px93dnYKCAtLS0ggJCWHcuHG3+AxFRERERGqPkugiIiIiIgZnMpmYPXs27777LgcPHmTv3r14e3szatQoBg8e/LPHhoWF8eyzz7JkyRJiY2OZNm0aERERNGnShA8++ICtW7dSUVGBp6cn9957L3369LlFZyUiIiIicms42apWBhIRERERERERERERkWrUE11EREREREREREREpAZKoouIiIiIiIiIiIiI1EBJdBERERERERERERGRGiiJLiIiIiIiIiIiIiJSAyXRRURERERERERERERqoCS6iIiIiIiIiIiIiEgNlEQXEREREREREREREamBkugiIiIiIiIiIiIiIjVQEl1EREREREREREREpAZKoouIiIiIiIiIiIiI1EBJdBERERERERERERGRGiiJLiIiIiIiIiIiIiJSAyXRRURERERERERERERq8H+X2rvN9TuLgAAAAABJRU5ErkJggg==\n"},"metadata":{}}],"source":["def analyser_tokens(df, tokens_to_analyze=None):\n"," \"\"\"Analyse les tokens spécifiques et leur relation avec le sentiment\"\"\"\n","\n"," # Liste par défaut de tokens intéressants à analyser si non spécifiée\n"," if tokens_to_analyze is None:\n"," tokens_to_analyze = [\n"," # Pronoms\n"," 'I', 'you', 'we', 'they', 'me', 'my', 'your', 'our', 'their',\n","\n"," # Mots de sentiment positif\n"," 'love', 'good', 'great', 'best', 'happy', 'awesome', 'amazing', 'excellent', 'wonderful', 'perfect',\n","\n"," # Mots de sentiment négatif\n"," 'hate', 'bad', 'worst', 'sad', 'terrible', 'awful', 'horrible', 'sorry', 'disappointed', 'annoyed',\n","\n"," # Expressions internet\n"," 'lol', 'wtf', 'omg', 'bro', 'lmao', 'rofl', 'yolo', 'idk', 'smh', 'btw', 'imo', 'tbh',\n","\n"," # Intensificateurs\n"," 'very', 'really', 'so', 'too', 'absolutely', 'completely', 'totally',\n","\n"," # Négations\n"," 'not', 'no', 'never', \"don't\", \"can't\", \"won't\", \"didn't\",\n","\n"," # Émoticônes\n"," ':)', ':(', ':D', ';)', ':-)', ':-(', ':-D', ';-)'\n"," ]\n","\n"," print(f\"Analyse de {len(tokens_to_analyze)} tokens spécifiques...\")\n","\n"," # Créer un échantillon équilibré pour l'analyse\n"," sample_size = min(100000, df[df['sentiment'] == 'Négatif'].shape[0], df[df['sentiment'] == 'Positif'].shape[0])\n"," neg_samples = df[df['sentiment'] == 'Négatif'].sample(sample_size, random_state=42)\n"," pos_samples = df[df['sentiment'] == 'Positif'].sample(sample_size, random_state=42)\n","\n"," balanced_df = pd.concat([neg_samples, pos_samples])\n","\n"," # Analyser les tokens spécifiques\n"," results = {}\n"," for token in tokens_to_analyze:\n"," # Vérifier présence du token dans l'échantillon équilibré\n"," token_lower = token.lower() if isinstance(token, str) else \"\"\n","\n"," if token in [\"don't\", \"can't\", \"won't\", \"didn't\"]:\n"," # Cas spécial pour les contractions\n"," has_token = balanced_df['text'].astype(str).apply(\n"," lambda x: token.lower() in x.lower() or token.lower().replace(\"'\", \"\") in x.lower()\n"," )\n"," elif token in [':)', ':(', ':D', ';)', ':-)', ':-(', ':-D', ';-)']:\n"," # Cas exact pour les émoticônes\n"," has_token = balanced_df['text'].astype(str).apply(\n"," lambda x: token in x\n"," )\n"," else:\n"," # Recherche standard\n"," has_token = balanced_df['text'].astype(str).apply(\n"," lambda x: token_lower in x.lower() and\n"," (not token_lower.isalnum() or\n"," re.search(r'\\b' + re.escape(token_lower) + r'\\b', x.lower()) is not None)\n"," )\n","\n"," balanced_df[f'has_{token}'] = has_token\n","\n"," # Calculer les pourcentages par sentiment\n"," pos_with = balanced_df[(balanced_df['sentiment'] == 'Positif') & (balanced_df[f'has_{token}'] == True)].shape[0]\n"," pos_total = balanced_df[balanced_df['sentiment'] == 'Positif'].shape[0]\n"," pos_pct = pos_with / pos_total * 100 if pos_total > 0 else 0\n","\n"," neg_with = balanced_df[(balanced_df['sentiment'] == 'Négatif') & (balanced_df[f'has_{token}'] == True)].shape[0]\n"," neg_total = balanced_df[balanced_df['sentiment'] == 'Négatif'].shape[0]\n"," neg_pct = neg_with / neg_total * 100 if neg_total > 0 else 0\n","\n"," # Calculer le ratio de présence pos/neg (valeur positive = plus présent dans les tweets positifs)\n"," ratio = (pos_pct - neg_pct) / ((pos_pct + neg_pct) / 2) * 100 if (pos_pct + neg_pct) > 0 else 0\n","\n"," # Calculer la significativité (fréquence moyenne)\n"," avg_frequency = (pos_pct + neg_pct) / 2\n","\n"," results[token] = {\n"," 'pos_pct': pos_pct,\n"," 'neg_pct': neg_pct,\n"," 'diff': abs(pos_pct - neg_pct),\n"," 'ratio': ratio,\n"," 'avg_freq': avg_frequency,\n"," 'orientation': 'Positif' if ratio > 0 else 'Négatif'\n"," }\n","\n"," # Créer un dataframe pour faciliter la visualisation\n"," tokens_df = pd.DataFrame(results).T\n"," tokens_df['token'] = tokens_df.index\n","\n"," # Trier par différence absolue et afficher les plus discriminants\n"," most_discriminative = tokens_df.sort_values('diff', ascending=False)\n","\n"," print(\"\\nTokens les plus discriminants entre tweets positifs et négatifs:\")\n"," for token, row in most_discriminative.head(15).iterrows():\n"," print(f\"Token '{token}':\")\n"," print(f\" - Dans tweets positifs: {row['pos_pct']:.2f}%\")\n"," print(f\" - Dans tweets négatifs: {row['neg_pct']:.2f}%\")\n"," print(f\" - Différence absolue: {row['diff']:.2f}%\")\n"," print(f\" - Orientation: {row['orientation']} ({row['ratio']:.1f}%)\")\n"," print()\n","\n"," # Classification des tokens\n"," categories = {\n"," 'Pronoms': ['I', 'you', 'we', 'they', 'me', 'my', 'your', 'our', 'their'],\n"," 'Sentiment positif': ['love', 'good', 'great', 'best', 'happy', 'awesome', 'amazing', 'excellent', 'wonderful', 'perfect'],\n"," 'Sentiment négatif': ['hate', 'bad', 'worst', 'sad', 'terrible', 'awful', 'horrible', 'sorry', 'disappointed', 'annoyed'],\n"," 'Expressions internet': ['lol', 'wtf', 'omg', 'bro', 'lmao', 'rofl', 'yolo', 'idk', 'smh', 'btw', 'imo', 'tbh'],\n"," 'Intensificateurs': ['very', 'really', 'so', 'too', 'absolutely', 'completely', 'totally'],\n"," 'Négations': ['not', 'no', 'never', \"don't\", \"can't\", \"won't\", \"didn't\"],\n"," 'Émoticônes': [':)', ':(', ':D', ';)', ':-)', ':-(', ':-D', ';-)']\n"," }\n","\n"," # Créer des visuels par catégorie\n"," for category, cat_tokens in categories.items():\n"," # Filtrer les tokens de cette catégorie qui sont présents dans l'analyse\n"," valid_tokens = [t for t in cat_tokens if t in tokens_df.index]\n"," if not valid_tokens:\n"," continue\n","\n"," cat_df = tokens_df.loc[valid_tokens]\n","\n"," if len(cat_df) > 0:\n"," plt.figure(figsize=(12, 6))\n","\n"," # Trier par ratio\n"," cat_df_sorted = cat_df.sort_values('ratio')\n","\n"," # Créer des couleurs basées sur l'orientation (positif/négatif)\n"," colors = ['firebrick' if r < -20 else 'indianred' if r < 0 else 'royalblue' if r < 20 else 'darkblue'\n"," for r in cat_df_sorted['ratio']]\n","\n"," # Calculer les tailles mais utiliser un alpha fixe\n"," sizes = np.clip(cat_df_sorted['avg_freq'] / cat_df_sorted['avg_freq'].max() * 0.8 + 0.2, 0.3, 1.0)\n","\n"," # Créer le graphique\n"," bars = plt.bar(cat_df_sorted.index, cat_df_sorted['ratio'], color=colors,\n"," alpha=0.8, linewidth=1)\n","\n"," # Ajouter les valeurs d'occurrence moyenne\n"," for bar, freq in zip(bars, cat_df_sorted['avg_freq']):\n"," plt.text(bar.get_x() + bar.get_width()/2, bar.get_height() + (5 if bar.get_height() > 0 else -15),\n"," f\"{freq:.1f}%\", ha='center', va='bottom', fontsize=9, color='black')\n","\n"," plt.axhline(y=0, color='black', linestyle='-', alpha=0.3)\n"," plt.title(f'Orientation des tokens - {category}', fontsize=15)\n"," plt.xlabel('Token')\n"," plt.ylabel('Orientation (% relatif)')\n"," plt.ylim(min(cat_df_sorted['ratio'].min() * 1.2, -100), max(cat_df_sorted['ratio'].max() * 1.2, 100))\n"," plt.xticks(rotation=45)\n"," plt.grid(axis='y', linestyle='--', alpha=0.3)\n"," plt.tight_layout()\n"," plt.show()\n","\n"," # Visualisation globale des tokens les plus discriminants et les plus fréquents\n"," plt.figure(figsize=(15, 8))\n","\n"," # Sélectionner les top tokens par discrimination et fréquence\n"," top_tokens = tokens_df.sort_values('diff', ascending=False).head(20)\n","\n"," # Trier par ratio\n"," top_tokens = top_tokens.sort_values('ratio')\n","\n"," # Créer des couleurs basées sur l'orientation (positif/négatif)\n"," colors = ['firebrick' if r < -20 else 'indianred' if r < 0 else 'royalblue' if r < 20 else 'darkblue'\n"," for r in top_tokens['ratio']]\n","\n"," # Calculer les tailles mais utiliser un alpha fixe\n"," sizes = np.clip(top_tokens['avg_freq'] / top_tokens['avg_freq'].max() * 0.8 + 0.2, 0.3, 1.0)\n","\n"," # Créer le graphique\n"," bars = plt.bar(top_tokens.index, top_tokens['ratio'], color=colors,\n"," alpha=0.8, linewidth=1)\n","\n"," # Ajouter les valeurs d'occurrence moyenne\n"," for bar, freq in zip(bars, top_tokens['avg_freq']):\n"," plt.text(bar.get_x() + bar.get_width()/2, bar.get_height() + (5 if bar.get_height() > 0 else -15),\n"," f\"{freq:.1f}%\", ha='center', va='bottom', fontsize=9, color='black')\n","\n"," plt.axhline(y=0, color='black', linestyle='-', alpha=0.3)\n"," plt.title('Top 20 tokens les plus discriminants (orientation relative)', fontsize=15)\n"," plt.xlabel('Token')\n"," plt.ylabel('Orientation relative (% positif vs négatif)')\n"," plt.ylim(min(top_tokens['ratio'].min() * 1.2, -100), max(top_tokens['ratio'].max() * 1.2, 100))\n"," plt.xticks(rotation=45)\n"," plt.grid(axis='y', linestyle='--', alpha=0.3)\n"," plt.tight_layout()\n"," plt.show()\n","\n"," return tokens_df\n","\n","# Pour utiliser la fonction\n","tokens_df = analyser_tokens(df)"]},{"cell_type":"markdown","source":["#### 9. Stratégie de prétraitement pour la détection de sentiment dans les tweets\n","\n","Les résultats présents ici proposent une stratégie relativement exhaustive (bien qu'elle ne prétende pas l'être complètement) de traitement des tweets et de l'importance que l'on peut donner ou non à certains éléments textuels.\n","Toutes les méthodes proposées n'ont pas forcément été implémentées dans la fonction de prétraitement `preprocess_tweet` utilisée dans les notebooks d'entraînement de modèles prédictifs (pour des raisons de timings à respecter dans la réalisation de ce projet).\n","\n","Les pictogrammes suivants permettent d'identifier les fonctionnalités implémentées ou non :\n","✅ Implémenté dans `preprocess_tweet`\n","⚠️ Non implémenté (proposé mais pas utilisé)\n","\n","\n","##### Différences entre tweets positifs et négatifs\n","\n","Les résultats montrent des différences significatives dans la structure des tweets selon leur sentiment :\n","\n","- Les tweets positifs contiennent **93% plus d'URLs** que les négatifs\n","- Les tweets positifs contiennent **48% plus de mentions (@)**\n","- Les tweets positifs utilisent **39% plus de hashtags (#)**\n","- Les tweets positifs utilisent **39% plus de points d'exclamation (!)**\n","- Les tweets négatifs contiennent **24% plus d'ellipses (...)**\n","- Les tweets négatifs sont légèrement plus longs et contiennent plus de mots\n","\n","##### Stratégie de prétraitement recommandée\n","\n","Voici une stratégie de prétraitement complète basée sur ces observations :\n","\n","1. **Nettoyage de base** :\n"," - ⚠️ Correction des fautes d'orthographe courantes → *Non implémentée*\n"," - ✅ Suppression des caractères spéciaux non significatifs\n"," - ✅ Conversion en minuscules\n"," - ✅ Conversion des caractères HTML (`html.unescape`)\n"," - ⚠️ Conservation d'une feature sur le **ratio de majuscules** → *Non implémentée* (la casse est supprimée)\n","\n","2. **Traitement des éléments spéciaux** :\n"," - ✅ **URLs** : Remplacées par un token spécial \"``\"\n"," - ✅ **Mentions (@)** : Remplacées par un token \"``\"\n"," - ✅ **Hashtags (#)** : Hashtag séparé du mot et conservé sous forme \"# happy\"\n","\n","3. **Feature engineering** :\n"," - ⚠️ Création de features numériques pour :\n"," - Nombre d'URLs\n"," - Mentions\n"," - Hashtags\n"," - Points d'exclamation, de question, ellipses\n"," → *Non implémenté*\n"," - ⚠️ Calcul du ratio de majuscules → *Non implémenté*\n"," - ⚠️ Détection et classification des émoticônes → *Non implémenté*\n","\n","4. **Tokenisation et normalisation** :\n"," - ✅ Tokenisation (`nltk.word_tokenize`)\n"," - ✅ Lemmatisation (`WordNetLemmatizer`)\n"," - ✅ Suppression des stopwords, en conservant les négations importantes (`no`, `not`, etc.)\n","\n","##### Influence des éléments spécifiques sur le sentiment\n","\n","- **Présence de 'http'** : Très significatif (93% de différence). \n"," ✅ Remplacé par `` \n"," ⚠️ *Pas de feature numérique pour le comptage*\n","\n","- **Présence de '#'** : Significatif (39% de différence). \n"," ✅ Hashtag conservé via token `#` et mot séparé \n"," ⚠️ *Pas de feature de comptage du nombre de hashtags*\n","\n","- **Présence de '@'** : Très significatif (48% de différence). \n"," ✅ Remplacé par `` \n"," ⚠️ *Pas de feature de comptage du nombre de mentions*\n","\n","##### Traitement recommandé pour les éléments spéciaux\n","\n","- **URLs** : \n"," ✅ Remplacement par `` \n"," ⚠️ *Pas de feature numérique associée*\n","\n","- **Mentions (@)** : \n"," ✅ Remplacement par `` \n"," ⚠️ *Pas de feature numérique associée*\n","\n","- **Hashtags (#)** : \n"," ✅ Séparation du `#` et du mot qui suit \n"," ⚠️ *Pas de feature de comptage du nombre de `#`*\n","\n","---\n","\n","#### ⚙️ Bilan\n","\n","La fonction de prétraitement actuelle implémente **les opérations textuelles de base** et le **traitement structurel des éléments Twitter (URLs, mentions, hashtags)**.\n","\n","En revanche, les stratégies suivantes **n'ont pas encore été mises en œuvre** :\n","- Création de **features numériques structurées** (longueur, nombre de ponctuations, etc.)\n","- Conservation et exploitation de la **casse** (ratio de majuscules)\n","- Traitement spécifique des **émoticônes**\n","- **Correction orthographique**\n","\n","Ces éléments pourraient enrichir les modèles classiques (avec `TF-IDF`) ou être injectés comme **features auxiliaires** dans des modèles plus avancés (LSTM, BERT).\n"],"metadata":{"id":"akVkIiD4AplZ"}},{"cell_type":"markdown","metadata":{"id":"fUfJHL0rWjJC"},"source":["##### Exemple de prétraitement"]},{"cell_type":"code","execution_count":30,"metadata":{"id":"zMCpAoskWjJC","executionInfo":{"status":"ok","timestamp":1751537534024,"user_tz":-120,"elapsed":62,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["df = raw_data.copy()"]},{"cell_type":"code","execution_count":31,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":379},"id":"f0NIpj9hWjJC","executionInfo":{"status":"ok","timestamp":1751537534039,"user_tz":-120,"elapsed":7,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"3beee82f-3685-480b-80e6-801fb7d2e06a"},"outputs":[{"output_type":"execute_result","data":{"text/plain":[" target ids date flag user text\n","0 0 1467810369 Mon Apr 06 22:19:45 PDT 2009 NO_QUERY _TheSpecialOne_ @switchfoot http://twitpic.com/2y1zl - Awww, t...\n","1 0 1467810672 Mon Apr 06 22:19:49 PDT 2009 NO_QUERY scotthamilton is upset that he can't update his Facebook by ...\n","2 0 1467810917 Mon Apr 06 22:19:53 PDT 2009 NO_QUERY mattycus @Kenichan I dived many times for the ball. Man...\n","3 0 1467811184 Mon Apr 06 22:19:57 PDT 2009 NO_QUERY ElleCTF my whole body feels itchy and like its on fire \n","4 0 1467811193 Mon Apr 06 22:19:57 PDT 2009 NO_QUERY Karoli @nationwideclass no, it's not behaving at all...."],"text/html":["\n","
\n","
\n","\n","
\n"," \n","
\n","
\n","
target
\n","
ids
\n","
date
\n","
flag
\n","
user
\n","
text
\n","
\n"," \n"," \n","
\n","
0
\n","
0
\n","
1467810369
\n","
Mon Apr 06 22:19:45 PDT 2009
\n","
NO_QUERY
\n","
_TheSpecialOne_
\n","
@switchfoot http://twitpic.com/2y1zl - Awww, t...
\n","
\n","
\n","
1
\n","
0
\n","
1467810672
\n","
Mon Apr 06 22:19:49 PDT 2009
\n","
NO_QUERY
\n","
scotthamilton
\n","
is upset that he can't update his Facebook by ...
\n","
\n","
\n","
2
\n","
0
\n","
1467810917
\n","
Mon Apr 06 22:19:53 PDT 2009
\n","
NO_QUERY
\n","
mattycus
\n","
@Kenichan I dived many times for the ball. Man...
\n","
\n","
\n","
3
\n","
0
\n","
1467811184
\n","
Mon Apr 06 22:19:57 PDT 2009
\n","
NO_QUERY
\n","
ElleCTF
\n","
my whole body feels itchy and like its on fire
\n","
\n","
\n","
4
\n","
0
\n","
1467811193
\n","
Mon Apr 06 22:19:57 PDT 2009
\n","
NO_QUERY
\n","
Karoli
\n","
@nationwideclass no, it's not behaving at all....
\n","
\n"," \n","
\n","
\n","
\n","\n","
\n"," \n","\n"," \n","\n"," \n","
\n","\n","\n","
\n"," \n","\n","\n","\n"," \n","
\n","\n","
\n","
\n"],"application/vnd.google.colaboratory.intrinsic+json":{"type":"dataframe","variable_name":"df"}},"metadata":{},"execution_count":31}],"source":["df.head()"]},{"cell_type":"code","execution_count":32,"metadata":{"id":"OkZs7W-nWjJC","executionInfo":{"status":"ok","timestamp":1751537534086,"user_tz":-120,"elapsed":40,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["def example_preprocess_tweet(tweet):\n"," # Features numériques\n"," features = {\n"," 'url_count': tweet.lower().count('http'),\n"," 'mention_count': tweet.count('@'),\n"," 'hashtag_count': tweet.count('#'),\n"," 'exclamation_count': tweet.count('!'),\n"," 'question_count': tweet.count('?'),\n"," 'ellipsis_count': tweet.count('...'),\n"," 'capitals_ratio': sum(1 for c in tweet if c.isupper()) / len(tweet) if len(tweet) > 0 else 0\n"," }\n","\n"," # Prétraitement du texte\n"," processed_text = tweet\n","\n"," # Remplacer les URLs\n"," processed_text = re.sub(r'https?://\\S+', '', processed_text)\n","\n"," # Traiter les mentions\n"," processed_text = re.sub(r'@\\w+', '', processed_text)\n","\n"," # Traiter les hashtags (séparer # du mot)\n"," processed_text = re.sub(r'#(\\w+)', r'# \\1', processed_text)\n","\n"," # Traiter le langage html\n"," processed_text = html.unescape(processed_text)\n","\n"," # Tokenisation simple (split par espaces)\n"," tokens = processed_text.lower().split()\n","\n"," # Autres étapes de nettoyage...\n","\n"," return processed_text, features"]},{"cell_type":"code","execution_count":33,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":0},"id":"PMJiRgr3WjJC","executionInfo":{"status":"ok","timestamp":1751537534120,"user_tz":-120,"elapsed":71,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"864b28f5-cc48-43e2-ee70-4e355ec66cdc"},"outputs":[{"output_type":"stream","name":"stdout","text":["Tweet prétraité: I'm SO frustrated w/ flight # delayed AGAIN!!\n"," 😡 Their customer service doesn't care :( Check this horrible experience: \n"," Can't wait to fly with \"someone\" else next time!\n","\n","Caractéristiques extraites:\n","- url_count: 1\n","- mention_count: 1\n","- hashtag_count: 1\n","- exclamation_count: 3\n","- question_count: 0\n","- ellipsis_count: 1\n","- capitals_ratio: 0.06422018348623854\n"]}],"source":["# Exemple de tweet\n","tweet_example = \"\"\"I'm SO frustrated w/ @AirParadis flight #delayed AGAIN!!\n"," 😡 Their customer service doesn't care :( Check this horrible experience: http://bit.ly/2xYz...\n"," Can't wait to fly with "someone" else next time!\"\"\"\n","\n","# Prétraitement\n","processed_tweet, tweet_features = example_preprocess_tweet(tweet_example)\n","print(\"Tweet prétraité:\", processed_tweet)\n","print(\"\\nCaractéristiques extraites:\")\n","for feature, value in tweet_features.items():\n"," print(f\"- {feature}: {value}\")"]},{"cell_type":"code","execution_count":34,"metadata":{"id":"1tP38oGLWjJC","executionInfo":{"status":"ok","timestamp":1751537534157,"user_tz":-120,"elapsed":36,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["import pandas as pd\n","import numpy as np\n","import re\n","import string\n","from tqdm import tqdm\n","\n","def pretraiter_tweets_dataframe(df, colonne_texte='text', afficher_progression=True, optimiser=True):\n"," \"\"\"\n"," Fonction complète pour prétraiter tous les tweets d'un DataFrame.\n","\n"," Args:\n"," df (pd.DataFrame): DataFrame contenant les tweets\n"," colonne_texte (str): Nom de la colonne contenant les tweets à prétraiter\n"," afficher_progression (bool): Afficher une barre de progression\n"," optimiser (bool): Si True, ne conserve que les colonnes utiles à l'entraînement\n","\n"," Returns:\n"," tuple: (DataFrame prétraité, liste des noms de features)\n"," - DataFrame avec les tweets prétraités et les features extraites\n"," - Liste des noms de features extraites pour faciliter l'analyse\n"," \"\"\"\n"," # Dictionnaire pour les contractions\n"," contractions = {\n"," \"ain't\": \"am not\", \"aren't\": \"are not\", \"can't\": \"cannot\",\n"," \"couldn't\": \"could not\", \"didn't\": \"did not\", \"doesn't\": \"does not\",\n"," \"don't\": \"do not\", \"hadn't\": \"had not\", \"hasn't\": \"has not\",\n"," \"haven't\": \"have not\", \"he'd\": \"he would\", \"he'll\": \"he will\",\n"," \"he's\": \"he is\", \"i'd\": \"i would\", \"i'll\": \"i will\", \"i'm\": \"i am\",\n"," \"i've\": \"i have\", \"isn't\": \"is not\", \"it's\": \"it is\",\n"," \"let's\": \"let us\", \"shouldn't\": \"should not\", \"that's\": \"that is\",\n"," \"there's\": \"there is\", \"they'd\": \"they would\", \"they'll\": \"they will\",\n"," \"they're\": \"they are\", \"they've\": \"they have\", \"wasn't\": \"was not\",\n"," \"we'd\": \"we would\", \"we're\": \"we are\", \"we've\": \"we have\",\n"," \"weren't\": \"were not\", \"what's\": \"what is\", \"where's\": \"where is\",\n"," \"who's\": \"who is\", \"won't\": \"will not\", \"wouldn't\": \"would not\",\n"," \"you'd\": \"you would\", \"you'll\": \"you will\", \"you're\": \"you are\",\n"," \"you've\": \"you have\", \"gonna\": \"going to\", \"wanna\": \"want to\"\n"," }\n","\n"," # Dictionnaire pour les émoticônes\n"," emoticons = {\n"," # Positifs\n"," ':)': '', ':-)': '',\n"," ':D': '', '=)': '',\n"," ':-D': '', ':p': '',\n"," ':-p': '', ';)': '',\n"," ';-)': '', ':3': '',\n"," '<3': '',\n","\n"," # Négatifs\n"," ':(': '', ':-(': '',\n"," '=(': '', ':-(': '',\n"," ':\\'(': '', ':/': '',\n"," ':\\\\': '', ':|': '',\n"," ':-|': '', '>:(': '',\n"," 'D:': ''\n"," }\n","\n"," # Liste simplifiée de stopwords en anglais\n"," english_stopwords = {\n"," 'a', 'an', 'the', 'and', 'but', 'if', 'or', 'because', 'as', 'until', 'while', 'of', 'at', 'by',\n"," 'for', 'with', 'about', 'against', 'between', 'into', 'through', 'during', 'before', 'after',\n"," 'above', 'below', 'to', 'from', 'up', 'down', 'in', 'out', 'on', 'off', 'over', 'under', 'again',\n"," 'further', 'then', 'once', 'here', 'there', 'when', 'where', 'why', 'how', 'all', 'any', 'both',\n"," 'each', 'few', 'more', 'most', 'other', 'some', 'such', 'only', 'own', 'same', 'so',\n"," 'than', 'too', 'very', 'can', 'will', 'just', 'should', 'now'\n"," }\n"," # Conserver les négations\n"," negations = {'no', 'not', 'none', 'nor', 'never', 'neither'}\n"," english_stopwords = english_stopwords - negations\n","\n"," # Définir la liste des noms de features\n"," feature_names = ['text_length', 'word_count', 'url_count', 'mention_count',\n"," 'hashtag_count', 'exclamation_count', 'question_count',\n"," 'ellipsis_count', 'capitals_ratio', 'positive_emoticon',\n"," 'negative_emoticon']\n","\n"," # Fonction pour prétraiter un tweet individuel\n"," def preprocess_tweet(tweet):\n"," if pd.isna(tweet) or not isinstance(tweet, str):\n"," # Gérer les valeurs NaN/None ou non-string\n"," return \"\", {\n"," 'text_length': 0, 'word_count': 0, 'url_count': 0, 'mention_count': 0,\n"," 'hashtag_count': 0, 'exclamation_count': 0, 'question_count': 0,\n"," 'ellipsis_count': 0, 'capitals_ratio': 0, 'positive_emoticon': 0,\n"," 'negative_emoticon': 0\n"," }\n","\n"," # Extraction des features numériques\n"," features = {\n"," 'text_length': len(tweet),\n"," 'word_count': len(tweet.split()),\n"," 'url_count': tweet.lower().count('http'),\n"," 'mention_count': tweet.count('@'),\n"," 'hashtag_count': tweet.count('#'),\n"," 'exclamation_count': tweet.count('!'),\n"," 'question_count': tweet.count('?'),\n"," 'ellipsis_count': tweet.count('...'),\n"," 'capitals_ratio': sum(1 for c in tweet if c.isupper()) / len(tweet) if len(tweet) > 0 else 0,\n"," 'positive_emoticon': sum(tweet.count(emot) for emot in [':)', ':D', '=)', ':-)', ':-D']),\n"," 'negative_emoticon': sum(tweet.count(emot) for emot in [':(', '=(', ':-(', ':\\'(', ':-(']),\n"," }\n","\n"," # Prétraitement initial du texte\n"," processed_text = tweet\n","\n"," # Remplacer les émoticônes par des tokens spéciaux\n"," for emoticon, replacement in emoticons.items():\n"," processed_text = processed_text.replace(emoticon, ' ' + replacement + ' ')\n","\n"," # Remplacer les URLs\n"," processed_text = re.sub(r'https?://\\S+', ' ', processed_text)\n","\n"," # Traiter les mentions\n"," processed_text = re.sub(r'@\\w+', ' ', processed_text)\n","\n"," # Traiter les hashtags (séparer # du mot)\n"," processed_text = re.sub(r'#(\\w+)', r' # \\1 ', processed_text)\n","\n"," # Traiter le langage html\n"," processed_text = html.unescape(processed_text)\n","\n"," # Convertir les contractions\n"," words = processed_text.split()\n"," processed_words = []\n"," for word in words:\n"," word_lower = word.lower()\n"," # Vérifier les contractions\n"," if word_lower in contractions:\n"," processed_words.append(contractions[word_lower])\n"," else:\n"," processed_words.append(word)\n"," processed_text = ' '.join(processed_words)\n","\n"," # Tokenisation simple (split par espaces)\n"," tokens = processed_text.lower().split()\n","\n"," # Conserver les tokens spéciaux\n"," special_tokens = ['', '', '', '', '#']\n","\n"," # Suppression des stopwords\n"," tokens = [token for token in tokens if token.lower() not in english_stopwords or token.lower() in special_tokens]\n","\n"," # Nettoyer la ponctuation (sauf pour les tokens spéciaux)\n"," cleaned_tokens = []\n"," for token in tokens:\n"," if token.lower() in special_tokens:\n"," cleaned_tokens.append(token)\n"," else:\n"," # Supprimer la ponctuation\n"," cleaned_token = ''.join(c for c in token if c not in string.punctuation)\n"," if cleaned_token: # Vérifier que le token n'est pas vide\n"," cleaned_tokens.append(cleaned_token)\n","\n"," # Reconstruire le texte traité\n"," processed_text = ' '.join(cleaned_tokens)\n","\n"," # Nettoyer les espaces multiples\n"," processed_text = re.sub(r'\\s+', ' ', processed_text).strip()\n","\n"," return processed_text, features\n","\n"," # Créer une copie du DataFrame pour éviter de modifier l'original\n"," df_processed = df.copy()\n","\n"," # Initialiser les colonnes pour les features et le texte prétraité\n"," for feature in feature_names:\n"," df_processed[feature] = np.nan\n","\n"," df_processed['processed_text'] = ''\n","\n"," # Afficher les informations sur le DataFrame avant prétraitement\n"," print(f\"DataFrame original : {df.shape[0]} lignes × {df.shape[1]} colonnes\")\n","\n"," # Appliquer le prétraitement à chaque tweet\n"," if afficher_progression:\n"," print(\"Prétraitement des tweets en cours...\")\n"," tqdm.pandas(desc=\"Progression\")\n"," processed_data = df_processed[colonne_texte].progress_apply(preprocess_tweet)\n"," else:\n"," processed_data = df_processed[colonne_texte].apply(preprocess_tweet)\n","\n"," # Extraire le texte prétraité et les features\n"," for i, (processed_text, features) in enumerate(processed_data):\n"," df_processed.at[i, 'processed_text'] = processed_text\n"," for feature, value in features.items():\n"," df_processed.at[i, feature] = value\n","\n"," print(f\"Prétraitement terminé. {len(df_processed)} tweets ont été traités.\")\n","\n"," # Si optimisation demandée, ne garder que les colonnes utiles\n"," if optimiser:\n"," # Identifier les colonnes à conserver : target (si elle existe) + processed_text + features\n"," colonnes_utiles = ['processed_text'] + feature_names\n","\n"," # Ajouter la colonne target si elle existe (différents noms possibles)\n"," target_cols = ['target', 'sentiment', 'label']\n"," for target_col in target_cols:\n"," if target_col in df_processed.columns:\n"," colonnes_utiles.append(target_col)\n","\n"," # Créer un DataFrame optimisé\n"," colonnes_avant = df_processed.shape[1]\n"," df_optimise = df_processed[colonnes_utiles].copy()\n"," colonnes_apres = df_optimise.shape[1]\n","\n"," print(f\"DataFrame optimisé : {colonnes_avant - colonnes_apres} colonnes supprimées\")\n"," print(f\"Nouvelles dimensions : {df_optimise.shape[0]} lignes × {df_optimise.shape[1]} colonnes\")\n","\n"," return df_optimise, feature_names\n","\n"," return df_processed, feature_names"]},{"cell_type":"code","execution_count":35,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":0},"id":"KFTu3YlGWjJD","executionInfo":{"status":"ok","timestamp":1751537536475,"user_tz":-120,"elapsed":2317,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"9db8d046-4061-4cf9-b016-965ad0eaa1a6"},"outputs":[{"output_type":"stream","name":"stdout","text":["Distribution des sentiments dans l'échantillon : target\n","0 5000\n","4 5000\n","Name: count, dtype: int64\n","DataFrame original : 10000 lignes × 6 colonnes\n","Prétraitement des tweets en cours...\n"]},{"output_type":"stream","name":"stderr","text":["Progression: 100%|██████████| 10000/10000 [00:00<00:00, 21211.54it/s]\n"]},{"output_type":"stream","name":"stdout","text":["Prétraitement terminé. 10000 tweets ont été traités.\n","DataFrame optimisé : 5 colonnes supprimées\n","Nouvelles dimensions : 10000 lignes × 13 colonnes\n"]}],"source":["# Après avoir chargé le DataFrame complet\n","# Assurez-vous d'avoir des exemples des deux classes\n","df_complet = raw_data.copy()\n","\n","# Échantillonnage stratifié pour avoir des tweets des deux sentiments\n","df_negatifs = df_complet[df_complet['target'] == 0].sample(5000, random_state=42)\n","df_positifs = df_complet[df_complet['target'] == 4].sample(5000, random_state=42)\n","df_echantillon = pd.concat([df_negatifs, df_positifs]).reset_index(drop=True)\n","\n","print(f\"Distribution des sentiments dans l'échantillon : {df_echantillon['target'].value_counts()}\")\n","\n","# Prétraiter l'échantillon équilibré\n","df_optimise, feature_names = pretraiter_tweets_dataframe(df_echantillon, colonne_texte='text')"]},{"cell_type":"code","execution_count":36,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":765},"id":"4WOZMce9WjJI","executionInfo":{"status":"ok","timestamp":1751537536525,"user_tz":-120,"elapsed":47,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"51cab5f2-f204-4cd2-839c-4a12474030fb"},"outputs":[{"output_type":"execute_result","data":{"text/plain":[" processed_text text_length word_count url_count mention_count hashtag_count exclamation_count question_count ellipsis_count capitals_ratio positive_emoticon negative_emoticon target\n","0 oh no did u order from that is horrible 59.0 10.0 0.0 1.0 0.0 1.0 1.0 0.0 0.000000 0.0 0.0 0\n","1 great hard training weekend is over couple day... 121.0 25.0 0.0 0.0 0.0 1.0 0.0 0.0 0.016529 0.0 0.0 0\n","2 right work 5 hours go i am free xd 56.0 13.0 0.0 0.0 0.0 0.0 0.0 0.0 0.071429 0.0 0.0 0\n","3 i am craving japanese food 31.0 6.0 0.0 0.0 0.0 0.0 0.0 0.0 0.032258 0.0 0.0 0\n","4 jean michel jarre concert tomorrow gotta work ... 65.0 10.0 0.0 0.0 0.0 0.0 0.0 0.0 0.046154 0.0 0.0 0\n","5 dammiitt i wish i had mtv 45.0 7.0 0.0 1.0 0.0 2.0 0.0 0.0 0.133333 0.0 0.0 0\n","6 you knowits really sad that u know t... 112.0 18.0 0.0 1.0 0.0 0.0 0.0 0.0 0.035714 0.0 0.0 0\n","7 i know 23.0 3.0 0.0 1.0 0.0 0.0 0.0 0.0 0.086957 0.0 0.0 0\n","8 i wish i had that much say 44.0 9.0 0.0 1.0 0.0 0.0 0.0 0.0 0.045455 0.0 0.0 0\n","9 ow i cannot move my neck my back hurts much i ... 76.0 18.0 0.0 0.0 0.0 0.0 0.0 0.0 0.013158 0.0 0.0 0"],"text/html":["\n","
\n","
\n","\n","
\n"," \n","
\n","
\n","
processed_text
\n","
text_length
\n","
word_count
\n","
url_count
\n","
mention_count
\n","
hashtag_count
\n","
exclamation_count
\n","
question_count
\n","
ellipsis_count
\n","
capitals_ratio
\n","
positive_emoticon
\n","
negative_emoticon
\n","
target
\n","
\n"," \n"," \n","
\n","
0
\n","
<mention> oh no did u order from that is horrible
\n","
59.0
\n","
10.0
\n","
0.0
\n","
1.0
\n","
0.0
\n","
1.0
\n","
1.0
\n","
0.0
\n","
0.000000
\n","
0.0
\n","
0.0
\n","
0
\n","
\n","
\n","
1
\n","
great hard training weekend is over couple day...
\n","
121.0
\n","
25.0
\n","
0.0
\n","
0.0
\n","
0.0
\n","
1.0
\n","
0.0
\n","
0.0
\n","
0.016529
\n","
0.0
\n","
0.0
\n","
0
\n","
\n","
\n","
2
\n","
right work 5 hours go i am free xd
\n","
56.0
\n","
13.0
\n","
0.0
\n","
0.0
\n","
0.0
\n","
0.0
\n","
0.0
\n","
0.0
\n","
0.071429
\n","
0.0
\n","
0.0
\n","
0
\n","
\n","
\n","
3
\n","
i am craving japanese food
\n","
31.0
\n","
6.0
\n","
0.0
\n","
0.0
\n","
0.0
\n","
0.0
\n","
0.0
\n","
0.0
\n","
0.032258
\n","
0.0
\n","
0.0
\n","
0
\n","
\n","
\n","
4
\n","
jean michel jarre concert tomorrow gotta work ...
\n","
65.0
\n","
10.0
\n","
0.0
\n","
0.0
\n","
0.0
\n","
0.0
\n","
0.0
\n","
0.0
\n","
0.046154
\n","
0.0
\n","
0.0
\n","
0
\n","
\n","
\n","
5
\n","
<mention> dammiitt i wish i had mtv
\n","
45.0
\n","
7.0
\n","
0.0
\n","
1.0
\n","
0.0
\n","
2.0
\n","
0.0
\n","
0.0
\n","
0.133333
\n","
0.0
\n","
0.0
\n","
0
\n","
\n","
\n","
6
\n","
<mention> you knowits really sad that u know t...
\n","
112.0
\n","
18.0
\n","
0.0
\n","
1.0
\n","
0.0
\n","
0.0
\n","
0.0
\n","
0.0
\n","
0.035714
\n","
0.0
\n","
0.0
\n","
0
\n","
\n","
\n","
7
\n","
<mention> i know
\n","
23.0
\n","
3.0
\n","
0.0
\n","
1.0
\n","
0.0
\n","
0.0
\n","
0.0
\n","
0.0
\n","
0.086957
\n","
0.0
\n","
0.0
\n","
0
\n","
\n","
\n","
8
\n","
<mention> i wish i had that much say
\n","
44.0
\n","
9.0
\n","
0.0
\n","
1.0
\n","
0.0
\n","
0.0
\n","
0.0
\n","
0.0
\n","
0.045455
\n","
0.0
\n","
0.0
\n","
0
\n","
\n","
\n","
9
\n","
ow i cannot move my neck my back hurts much i ...
\n","
76.0
\n","
18.0
\n","
0.0
\n","
0.0
\n","
0.0
\n","
0.0
\n","
0.0
\n","
0.0
\n","
0.013158
\n","
0.0
\n","
0.0
\n","
0
\n","
\n"," \n","
\n","
\n","
\n","\n","
\n"," \n","\n"," \n","\n"," \n","
\n","\n","\n","
\n"," \n","\n","\n","\n"," \n","
\n","\n","
\n","
\n"],"application/vnd.google.colaboratory.intrinsic+json":{"type":"dataframe","variable_name":"df_optimise","summary":"{\n \"name\": \"df_optimise\",\n \"rows\": 10000,\n \"fields\": [\n {\n \"column\": \"processed_text\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 9892,\n \"samples\": [\n \"we are going see flamenco dance fire sand tatiana garrido 900 pm dar alassad opera house damascus i cannot take my camera\",\n \" looks like you are having fun that pic you are amazing i cannot wait see you wrestling soon take care \\u00e2\\u0099\\u00a5\",\n \"belated rip great advocate friend jim stephenson nc coastal federation http bitlylpfm2\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"text_length\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 36.46088940159834,\n \"min\": 8.0,\n \"max\": 282.0,\n \"num_unique_values\": 151,\n \"samples\": [\n 34.0,\n 98.0,\n 51.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"word_count\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 6.967032850839397,\n \"min\": 1.0,\n \"max\": 34.0,\n \"num_unique_values\": 34,\n \"samples\": [\n 19.0,\n 5.0,\n 4.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"url_count\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.21370570187224106,\n \"min\": 0.0,\n \"max\": 2.0,\n \"num_unique_values\": 3,\n \"samples\": [\n 0.0,\n 1.0,\n 2.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mention_count\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.5909474781164555,\n \"min\": 0.0,\n \"max\": 8.0,\n \"num_unique_values\": 9,\n \"samples\": [\n 7.0,\n 0.0,\n 4.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"hashtag_count\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.19936831436432761,\n \"min\": 0.0,\n \"max\": 8.0,\n \"num_unique_values\": 5,\n \"samples\": [\n 1.0,\n 8.0,\n 2.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"exclamation_count\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 1.2836116257968069,\n \"min\": 0.0,\n \"max\": 35.0,\n \"num_unique_values\": 20,\n \"samples\": [\n 1.0,\n 25.0,\n 14.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"question_count\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.7557943056832718,\n \"min\": 0.0,\n \"max\": 45.0,\n \"num_unique_values\": 14,\n \"samples\": [\n 6.0,\n 16.0,\n 1.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"ellipsis_count\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.5081963954590616,\n \"min\": 0.0,\n \"max\": 7.0,\n \"num_unique_values\": 8,\n \"samples\": [\n 7.0,\n 4.0,\n 0.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"capitals_ratio\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.07180467551206295,\n \"min\": 0.0,\n \"max\": 0.875,\n \"num_unique_values\": 992,\n \"samples\": [\n 0.07476635514018691,\n 0.07092198581560284,\n 0.30612244897959184\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"positive_emoticon\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.02448877232522874,\n \"min\": 0.0,\n \"max\": 1.0,\n \"num_unique_values\": 2,\n \"samples\": [\n 1.0,\n 0.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"negative_emoticon\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.03462195644366273,\n \"min\": 0.0,\n \"max\": 1.0,\n \"num_unique_values\": 2,\n \"samples\": [\n 1.0,\n 0.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"target\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 2,\n \"min\": 0,\n \"max\": 4,\n \"num_unique_values\": 2,\n \"samples\": [\n 4,\n 0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}"}},"metadata":{},"execution_count":36}],"source":["df_optimise.head(10)"]},{"cell_type":"code","execution_count":37,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":0},"id":"RRKMq2yvWjJI","executionInfo":{"status":"ok","timestamp":1751537536543,"user_tz":-120,"elapsed":17,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"b6e781e1-3e70-479e-ece9-6adb4c3d9bfe"},"outputs":[{"output_type":"stream","name":"stdout","text":["Tweet 1 : oh no did u order from that is horrible\n","Tweet 2 : great hard training weekend is over couple days rest lets do it again lots computer time put\n","Tweet 3 : right work 5 hours go i am free xd\n","Tweet 4 : i am craving japanese food\n","Tweet 5 : jean michel jarre concert tomorrow gotta work 73 though\n","Tweet 6 : dammiitt i wish i had mtv\n","Tweet 7 : you knowits really sad that u know that ur classmate do not care you sad memories tt\n","Tweet 8 : i know\n","Tweet 9 : i wish i had that much say\n","Tweet 10 : ow i cannot move my neck my back hurts much i do not know \n"]}],"source":["for row in enumerate(df_optimise['processed_text'].head(10)):\n"," print(f\"Tweet {row[0] + 1} : {row[1]}\")"]},{"cell_type":"code","execution_count":38,"metadata":{"id":"FjgFb1bJWjJI","executionInfo":{"status":"ok","timestamp":1751537536549,"user_tz":-120,"elapsed":5,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["def analyser_differences_sentiments(df, feature_names):\n"," \"\"\"\n"," Analyse les différences de features entre tweets positifs et négatifs.\n"," Affiche les résultats avec les features en lignes et les sentiments en colonnes.\n","\n"," Args:\n"," df (pd.DataFrame): DataFrame prétraité avec colonne 'target'\n"," feature_names (list): Liste des noms de features à analyser\n"," \"\"\"\n"," # Convertir les valeurs numériques de target en catégories lisibles\n"," sentiment_mapping = {0: 'Négatif', 4: 'Positif'}\n"," if 'target' in df.columns:\n"," df['sentiment'] = df['target'].map(sentiment_mapping)\n","\n"," # Compter le nombre de tweets par sentiment\n"," sentiment_counts = df['sentiment'].value_counts()\n"," print(f\"\\nDistribution des sentiments : {sentiment_counts.to_dict()}\")\n","\n"," # Vérifier si les deux sentiments sont présents\n"," if 'Négatif' in sentiment_counts and 'Positif' in sentiment_counts:\n"," # Calculer les moyennes par sentiment\n"," neg_means = df[df['sentiment'] == 'Négatif'][feature_names].mean()\n"," pos_means = df[df['sentiment'] == 'Positif'][feature_names].mean()\n","\n"," # Calculer la différence relative (en pourcentage)\n"," epsilon = 0.0001 # Pour éviter division par zéro\n"," diff_pct = ((pos_means - neg_means) / neg_means.replace(0, epsilon) * 100)\n","\n"," # Créer un DataFrame complet avec toutes les statistiques\n"," stats_df = pd.DataFrame({\n"," 'Négatif': neg_means,\n"," 'Positif': pos_means,\n"," 'Différence (%)': diff_pct.round(1)\n"," }).round(4)\n","\n"," # Ajouter les tendances avant de renommer les index\n"," stats_df['Tendance'] = stats_df['Différence (%)'].apply(\n"," lambda x: '↑' if x > 0 else ('↓' if x < 0 else '−')\n"," )\n","\n"," # Trier par valeur absolue de la différence\n"," # Nous utilisons sort_values() directement sur le DataFrame au lieu de iloc\n"," stats_df = stats_df.reindex(stats_df['Différence (%)'].abs().sort_values(ascending=False).index)\n","\n"," # Renommer les index pour plus de clarté (après le tri)\n"," stats_df.index = [f.replace('_', ' ').title() for f in stats_df.index]\n","\n"," # Réorganiser les colonnes\n"," stats_df = stats_df[['Négatif', 'Positif', 'Différence (%)', 'Tendance']]\n","\n"," # Afficher le tableau des statistiques\n"," print(\"\\nMoyennes des features par sentiment (triées par impact) :\")\n"," print(stats_df)\n","\n"," # Afficher un résumé des features les plus discriminantes\n"," print(\"\\nFeatures les plus discriminantes entre sentiments positifs et négatifs :\")\n","\n"," for i, (feature, row) in enumerate(stats_df.iterrows()):\n"," # if i >= 5: # Limiter à 5 features\n"," # break\n","\n"," diff = row['Différence (%)']\n"," if abs(diff) > 1000: # Pour éviter les valeurs extrêmes\n"," print(f\"{feature}: {row['Tendance']} très significatif\")\n"," else:\n"," print(f\"{feature}: {row['Tendance']} {abs(diff):.1f}%\")\n"," else:\n"," print(\"\\nAttention : Les deux sentiments (positif et négatif) ne sont pas représentés dans l'échantillon.\")\n"," print(\"L'analyse comparative ne peut pas être effectuée.\")\n","\n"," if 'Négatif' in sentiment_counts:\n"," print(\"\\nStatistiques pour les tweets négatifs uniquement :\")\n"," neg_stats = df[df['sentiment'] == 'Négatif'][feature_names].mean().round(4)\n"," # Renommer les index pour plus de clarté\n"," neg_stats.index = [f.replace('_', ' ').title() for f in neg_stats.index]\n"," print(neg_stats)\n"," elif 'Positif' in sentiment_counts:\n"," print(\"\\nStatistiques pour les tweets positifs uniquement :\")\n"," pos_stats = df[df['sentiment'] == 'Positif'][feature_names].mean().round(4)\n"," # Renommer les index pour plus de clarté\n"," pos_stats.index = [f.replace('_', ' ').title() for f in pos_stats.index]\n"," print(pos_stats)"]},{"cell_type":"code","execution_count":39,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":0},"id":"v5xMFoR2WjJI","executionInfo":{"status":"ok","timestamp":1751537536600,"user_tz":-120,"elapsed":47,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"c40bbf14-0ff4-4fd7-fd4b-107fb22a747a"},"outputs":[{"output_type":"stream","name":"stdout","text":["\n","Distribution des sentiments : {'Négatif': 5000, 'Positif': 5000}\n","\n","Moyennes des features par sentiment (triées par impact) :\n"," Négatif Positif Différence (%) Tendance\n","Url Count 0.0280 0.0644 130.0 ↑\n","Positive Emoticon 0.0008 0.0004 -50.0 ↓\n","Mention Count 0.4012 0.5908 47.3 ↑\n","Exclamation Count 0.4792 0.6580 37.3 ↑\n","Negative Emoticon 0.0014 0.0010 -28.6 ↓\n","Ellipsis Count 0.2074 0.1496 -27.9 ↓\n","Hashtag Count 0.0250 0.0300 20.0 ↑\n","Capitals Ratio 0.0428 0.0491 14.8 ↑\n","Word Count 13.5776 12.8846 -5.1 ↓\n","Question Count 0.1524 0.1570 3.0 ↑\n","Text Length 74.2904 74.5670 0.4 ↑\n","\n","Features les plus discriminantes entre sentiments positifs et négatifs :\n","Url Count: ↑ 130.0%\n","Positive Emoticon: ↓ 50.0%\n","Mention Count: ↑ 47.3%\n","Exclamation Count: ↑ 37.3%\n","Negative Emoticon: ↓ 28.6%\n","Ellipsis Count: ↓ 27.9%\n","Hashtag Count: ↑ 20.0%\n","Capitals Ratio: ↑ 14.8%\n","Word Count: ↓ 5.1%\n","Question Count: ↑ 3.0%\n","Text Length: ↑ 0.4%\n"]}],"source":["analyser_differences_sentiments(df_optimise, feature_names)"]},{"cell_type":"markdown","metadata":{"id":"2cOCpJN4WjJI"},"source":["#### 10. Recommandations de modélisation\n","\n","- Approches recommandées pour la vectorisation \n","- Modèles à privilégier \n","- Stratégies d’évaluation adaptées "]},{"cell_type":"markdown","source":["##### Recommandations générales (aspects théoriques)\n","\n","1. Approches classiques de Machine Learning:\n"," - Modèles basés sur les sacs de mots (BoW) ou TF-IDF avec classifieurs comme Régression Logistique, SVM, Random Forest ou Naive Bayes\n"," - Avantages: rapides à entraîner, interprétables\n"," - Inconvénients: ne capturent pas la sémantique et l'ordre des mots\n","\n","2. Word Embeddings + Classifieurs:\n"," - Utiliser des embeddings pré-entraînés (Word2Vec, GloVe, FastText) avec des classifieurs ML\n"," - Avantages: capture la sémantique des mots, gère les mots hors vocabulaire (FastText)\n"," - Inconvénients: perd l'information de séquence\n","\n","3. Réseaux de neurones récurrents (RNN, **LSTM**, GRU):\n"," - Avantages: capture l'information séquentielle, efficace pour le texte\n"," - Inconvénients: temps d'entraînement plus long, risque de surapprentissage\n","\n","4. Modèles transformers (BERT, Sentence Transformers, RoBERTa, DistilBERT):\n"," - Fine-tuning de modèles pré-entraînés spécifiques à Twitter comme BERTweet\n"," - Avantages: état de l'art en NLP, capture le contexte bidirectionnel\n"," - Inconvénients: coûteux en ressources, complexe à déployer\n","\n","5. Approches d'ensemble:\n"," - Combiner plusieurs modèles pour obtenir de meilleures performances\n"," - Avantages: souvent meilleures performances, plus robuste\n"," - Inconvénients: complexité accrue, temps d'inférence plus long\n","\n","Considérations importantes:\n","\n","1. Déséquilibre des classes: utiliser des techniques comme SMOTE, sous-échantillonnage, ou pondération des classes\n","2. Validation croisée: essentielle pour évaluer correctement les performances\n","3. Métriques d'évaluation: ne pas se limiter à l'accuracy, utiliser F1-score, précision, rappel, et AUC-ROC\n","4. Interprétabilité: pour certaines applications, privilégier des modèles interprétables ou utiliser SHAP/LIME\n","5. Dépendance temporelle: considérer l'évolution du langage sur Twitter au fil du temps"],"metadata":{"id":"I2LPvavPLiie"}},{"cell_type":"markdown","source":["##### Ce que nous ferons:\n","\n","- **Analyse classique** : \n"," - Solutions retenues : vectorisation par **BoW** et **BoW+TF-IDF**, avec classification par **Naive Bayes**, **Random Forest**, **SVM** et **Régression Logistique**. \n"," - Raisons : \n"," - Ces modèles sont des classiques éprouvés en classification supervisée de texte, offrant un bon équilibre entre simplicité, rapidité d’entraînement, et robustesse. \n"," - **Naive Bayes** est simple et efficace sur des données textuelles où l’indépendance conditionnelle approximative est acceptable. \n"," - **SVM linéaire** est souvent performant pour la classification de texte, capable de gérer des espaces de grande dimension avec des marges maximales. \n"," - **Régression logistique** est facilement interprétable et probabiliste, ce qui est utile pour estimer la confiance des prédictions. \n"," - **Random Forest** apporte une approche non-linéaire, robuste au bruit, et peut capter des interactions complexes. \n"," - Ce choix restreint permet une comparaison claire des performances tout en évitant la surcomplexité. \n"," - Cette étape sert de base pour évaluer les performances des modèles classiques avant de passer à des méthodes plus sophistiquées.\n","\n","- **Classification par word embeddings** : \n"," - Solutions retenues : utilisation d’embeddings pré-entraînés **Word2Vec** et **GloVe 300d**, combinés à un modèle Deep Learning intégrant un **layer LSTM**. \n"," - Raisons : \n"," - Les embeddings capturent la sémantique des mots de manière dense et continue, bien plus informative que BoW/TF-IDF. \n"," - Le choix du **LSTM** (Long Short-Term Memory) s’explique par sa capacité à gérer efficacement la dépendance à long terme dans les séquences, un problème où les réseaux RNN classiques échouent souvent à cause du gradient qui disparaît ou explose. \n"," - Comparé au GRU (Gated Recurrent Unit), le LSTM est plus éprouvé et offre souvent une meilleure gestion des dépendances complexes, même si GRU est plus léger. \n"," - Cette architecture permet ainsi de tirer parti à la fois des représentations vectorielles riches des mots et de la dynamique temporelle des textes (l’ordre des mots). \n"," - Ce compromis performance/complexité est bien adapté à la ressource machine disponible et à l’objectif du projet.\n","\n","- **Exploration du modèle BERT** : \n"," - Solutions retenues : expérimentation avec un modèle **DistillBERT** pour classification binaire. \n"," - Raisons : modèle Transformer plus récent et efficace, permettant de mesurer un éventuel gain de performance. \n"," - Cette étape vise à évaluer le rapport coût/performance en termes de précision et de ressources nécessaires.\n","\n","\n"],"metadata":{"id":"FJr9Hww7IGI_"}},{"cell_type":"markdown","source":["# Enregistrement de dépendances"],"metadata":{"id":"-KIwrBGntpka"}},{"cell_type":"code","source":["!pip freeze > requirements_analyse_exploratoire.txt"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":0},"id":"R50V0pO8IKUE","executionInfo":{"status":"ok","timestamp":1751540223044,"user_tz":-120,"elapsed":5745,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"0a1bc19a-87ec-4b66-ef94-acdbf3817699"},"execution_count":2,"outputs":[{"output_type":"stream","name":"stdout","text":["INFO: Not scanning for jupyter notebooks.\n","INFO: Successfully saved requirements file in ./requirements.txt\n"]}]}],"metadata":{"kernelspec":{"display_name":"Python 3","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.10.12"},"colab":{"provenance":[],"toc_visible":true}},"nbformat":4,"nbformat_minor":0}
\ No newline at end of file
+{"cells":[{"cell_type":"markdown","metadata":{"id":"kRoif7EaWjI6"},"source":["# Partie 1 : 🔬 Analyse exploratoire des données Sentiment140\n","\n","Dans le cadre du projet pour Air Paradis visant à développer un **système de détection de sentiment sur les tweets**, nous allons d'abord explorer et comprendre en profondeur le jeu de données **Sentiment140**. Cette analyse exploratoire est une étape fondamentale qui nous permettra de mieux appréhender les caractéristiques des données et d'orienter efficacement nos choix de prétraitement et de modélisation.\n","\n","Le jeu de données Sentiment140 contient **1,6 million de tweets annotés** avec leur polarité (négative ou positive), ainsi que des métadonnées comme l'identifiant du tweet, la date, la requête utilisée pour collecter le tweet, et l'utilisateur ayant posté le message. Cette richesse d'information nous permet non seulement d'analyser le contenu textuel des tweets, mais également d'explorer les dimensions temporelles et comportementales associées.\n","\n","Cette étape d'exploration nous guidera vers les **techniques de prétraitement** les plus adaptées et nous aidera à sélectionner les **approches de modélisation** les plus prometteuses, des méthodes classiques aux architectures de deep learning avancées comme BERT, conformément aux exigences du projet formulées par Marc."]},{"cell_type":"markdown","metadata":{"id":"HMvSNBQbWjI7"},"source":["## Importation des bibliothèques"]},{"cell_type":"code","source":["from google.colab import drive\n","drive.mount('/content/drive')\n","import os\n","drive_folder= \"/content/drive/MyDrive/Colab_Notebooks/Project_7/notebooks\"\n","os.chdir(drive_folder)\n","# os.listdir()"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":0},"id":"0vLhVG6jXaib","executionInfo":{"status":"ok","timestamp":1751537385444,"user_tz":-120,"elapsed":8041,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"32f1e8c2-3863-41f2-9b0b-32c371ae7739"},"execution_count":2,"outputs":[{"output_type":"stream","name":"stdout","text":["Mounted at /content/drive\n"]}]},{"cell_type":"code","execution_count":3,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":0},"id":"-YwmQE9SWjI8","executionInfo":{"status":"ok","timestamp":1751537391119,"user_tz":-120,"elapsed":5662,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"966f92fd-9219-4836-d130-4399a8890793"},"outputs":[{"output_type":"stream","name":"stderr","text":["[nltk_data] Downloading package punkt to /root/nltk_data...\n","[nltk_data] Unzipping tokenizers/punkt.zip.\n","[nltk_data] Downloading package stopwords to /root/nltk_data...\n","[nltk_data] Unzipping corpora/stopwords.zip.\n","[nltk_data] Downloading package wordnet to /root/nltk_data...\n"]}],"source":["import pandas as pd\n","import numpy as np\n","import matplotlib.pyplot as plt\n","import seaborn as sns\n","import requests\n","import zipfile\n","import os\n","import re\n","import datetime\n","import warnings\n","import string\n","\n","# Télécharger les ressources NLTK nécessaires\n","import nltk\n","nltk.download('punkt')\n","nltk.download('stopwords')\n","nltk.download('wordnet')\n","from nltk.corpus import stopwords\n","from nltk.tokenize import word_tokenize\n","from nltk.util import ngrams\n","from collections import Counter\n","from wordcloud import WordCloud\n","from nltk.stem import WordNetLemmatizer\n","\n","plt.style.use('ggplot')\n","plt.rcParams['figure.figsize'] = (12, 8)\n","plt.rcParams['font.family'] = 'DejaVu Sans'\n","warnings.filterwarnings('ignore')"]},{"cell_type":"markdown","metadata":{"id":"JaM_tOMwWjI8"},"source":["## 💾 Jeu de données : Sentiment140\n","\n","Le jeu de données [Sentiment140 dataset with 1.6 million tweets](https://www.kaggle.com/datasets/kazanova/sentiment140) est une ressource majeure pour l'analyse de sentiment sur Twitter, comprenant **1,6 million de tweets** extraits via l'API Twitter. Ces tweets ont été automatiquement annotés selon leur polarité sentimentale, offrant une base solide pour développer des modèles de classification de sentiment.\n","\n","Le jeu de données est organisé en 6 colonnes distinctes :\n","\n","1. **target** : La polarité du sentiment exprimé dans le tweet.\n"," - 0 = sentiment négatif\n"," - 2 = sentiment neutre\n"," - 4 = sentiment positif\n","2. **ids** : L'identifiant unique du tweet (exemple : *2087*)\n","3. **date** : La date et l'heure de publication du tweet.\n","4. **flag** : La requête utilisée pour obtenir le tweet.\n"," - Exemple : *lyx*\n"," - Si aucune requête n'a été utilisée : *NO_QUERY*\n","5. **user** : Le nom d'utilisateur de l'auteur du tweet.\n","6. **text** : Le contenu textuel du tweet."]},{"cell_type":"markdown","source":["Téléchargement et extraction de l'archive."],"metadata":{"id":"JMtFQ45vA9uT"}},{"cell_type":"code","execution_count":4,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":0},"id":"71OroFSlWjI8","executionInfo":{"status":"ok","timestamp":1751537391139,"user_tz":-120,"elapsed":18,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"be17dab2-3084-45ad-e067-16f331a004f2"},"outputs":[{"output_type":"stream","name":"stdout","text":["CPU times: user 242 µs, sys: 32 µs, total: 274 µs\n","Wall time: 448 µs\n"]}],"source":["%%time\n","\n","# Define the URL and the local file path\n","url = \"https://s3-eu-west-1.amazonaws.com/static.oc-static.com/prod/courses/files/AI+Engineer/Project+7%C2%A0-+D%C3%A9tectez+les+Bad+Buzz+gr%C3%A2ce+au+Deep+Learning/sentiment140.zip\"\n","local_zip_path = \"./content/data/sentiment140.zip\"\n","extract_path = \"./content/data\"\n","\n","if not os.path.exists(extract_path):\n","\n"," # Create the directory if it doesn't exist\n"," os.makedirs(extract_path, exist_ok=True)\n","\n"," # Download the zip file\n"," response = requests.get(url)\n"," with open(local_zip_path, 'wb') as file:\n"," file.write(response.content)\n","\n"," # Extract the contents of the zip file\n"," with zipfile.ZipFile(local_zip_path, 'r') as zip_ref:\n"," zip_ref.extractall(extract_path)\n","\n"," # Delete the zip file\n"," os.remove(local_zip_path)"]},{"cell_type":"markdown","source":["Paramétrage de pandas + affichage premières lignes et informations générales"],"metadata":{"id":"z8Ul66EvBC13"}},{"cell_type":"code","execution_count":5,"metadata":{"id":"eHAXkFpMWjI9","executionInfo":{"status":"ok","timestamp":1751537391155,"user_tz":-120,"elapsed":1,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["pd.set_option('display.max_columns', None)\n","pd.set_option('display.expand_frame_repr', False)"]},{"cell_type":"code","execution_count":6,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":206},"id":"O7Kp1AD0WjI9","executionInfo":{"status":"ok","timestamp":1751537402047,"user_tz":-120,"elapsed":10891,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"ebcc83c8-de04-4a87-d5d1-fdd4da4bcce8"},"outputs":[{"output_type":"execute_result","data":{"text/plain":[" target ids date flag user text\n","0 0 1467810369 Mon Apr 06 22:19:45 PDT 2009 NO_QUERY _TheSpecialOne_ @switchfoot http://twitpic.com/2y1zl - Awww, t...\n","1 0 1467810672 Mon Apr 06 22:19:49 PDT 2009 NO_QUERY scotthamilton is upset that he can't update his Facebook by ...\n","2 0 1467810917 Mon Apr 06 22:19:53 PDT 2009 NO_QUERY mattycus @Kenichan I dived many times for the ball. Man...\n","3 0 1467811184 Mon Apr 06 22:19:57 PDT 2009 NO_QUERY ElleCTF my whole body feels itchy and like its on fire \n","4 0 1467811193 Mon Apr 06 22:19:57 PDT 2009 NO_QUERY Karoli @nationwideclass no, it's not behaving at all...."],"text/html":["\n","
\n","
\n","\n","
\n"," \n","
\n","
\n","
target
\n","
ids
\n","
date
\n","
flag
\n","
user
\n","
text
\n","
\n"," \n"," \n","
\n","
0
\n","
0
\n","
1467810369
\n","
Mon Apr 06 22:19:45 PDT 2009
\n","
NO_QUERY
\n","
_TheSpecialOne_
\n","
@switchfoot http://twitpic.com/2y1zl - Awww, t...
\n","
\n","
\n","
1
\n","
0
\n","
1467810672
\n","
Mon Apr 06 22:19:49 PDT 2009
\n","
NO_QUERY
\n","
scotthamilton
\n","
is upset that he can't update his Facebook by ...
\n","
\n","
\n","
2
\n","
0
\n","
1467810917
\n","
Mon Apr 06 22:19:53 PDT 2009
\n","
NO_QUERY
\n","
mattycus
\n","
@Kenichan I dived many times for the ball. Man...
\n","
\n","
\n","
3
\n","
0
\n","
1467811184
\n","
Mon Apr 06 22:19:57 PDT 2009
\n","
NO_QUERY
\n","
ElleCTF
\n","
my whole body feels itchy and like its on fire
\n","
\n","
\n","
4
\n","
0
\n","
1467811193
\n","
Mon Apr 06 22:19:57 PDT 2009
\n","
NO_QUERY
\n","
Karoli
\n","
@nationwideclass no, it's not behaving at all....
\n","
\n"," \n","
\n","
\n","
\n","\n","
\n"," \n","\n"," \n","\n"," \n","
\n","\n","\n","
\n"," \n","\n","\n","\n"," \n","
\n","\n","
\n","
\n"],"application/vnd.google.colaboratory.intrinsic+json":{"type":"dataframe","variable_name":"raw_data"}},"metadata":{},"execution_count":6}],"source":["# Define the path to the CSV file\n","csv_file_path = os.path.join(extract_path, 'training.1600000.processed.noemoticon.csv')\n","\n","# Define the column names\n","column_names = ['target', 'ids', 'date', 'flag', 'user', 'text']\n","\n","# Load the dataset into a pandas DataFrame\n","raw_data = pd.read_csv(csv_file_path, encoding='latin-1', names=column_names)\n","\n","# Display the first few rows of the DataFrame\n","raw_data.head()"]},{"cell_type":"code","source":["raw_data['target'].unique()"],"metadata":{"id":"6pTUMokI-Q6W","executionInfo":{"status":"ok","timestamp":1751537402048,"user_tz":-120,"elapsed":9,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"9e15e051-7e09-4848-ca8c-358ac2cb4c23","colab":{"base_uri":"https://localhost:8080/","height":0}},"execution_count":7,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([0, 4])"]},"metadata":{},"execution_count":7}]},{"cell_type":"code","execution_count":8,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":0},"id":"rIaUk5ZxWjI9","executionInfo":{"status":"ok","timestamp":1751537402069,"user_tz":-120,"elapsed":21,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"8e4f9c92-f907-468c-de97-f6edb040398c"},"outputs":[{"output_type":"stream","name":"stdout","text":["Ce dataframe contient 1600000 lignes et 6 colonnes.\n"]}],"source":["print(f\"Ce dataframe contient {raw_data.shape[0]} lignes et {raw_data.shape[1]} colonnes.\")"]},{"cell_type":"markdown","metadata":{"id":"GG5bQh5xWjI-"},"source":["## 🔬 Analyse exploratoire des données Sentiment140\n","\n","Pour bien comprendre votre jeu de données Sentiment140 et optimiser votre modèle d'analyse de sentiment, je vous propose une analyse exploratoire complète qui couvre les aspects suivants :\n","\n","- **Analyse quantitative:**\n","\n","1. **Informations générales sur le jeu de données** \n"," - Étude de la répartition des classes de sentiment \n"," - Vérification des valeurs manquantes ainsi que des doublons \n"," - Examen de la structure générale du DataFrame \n","\n","2. **Analyse de la distribution des sentiments** \n"," - Visualisation de l’équilibre ou du déséquilibre des classes \n"," - Répartition des sentiments positifs et négatifs \n","\n","3. **Analyse temporelle** \n"," - Répartition des tweets dans le temps \n"," - Identification des patterns temporels selon le sentiment \n"," - Analyse détaillée par heure, jour et mois \n","\n","4. **Analyse des mots fréquents** \n"," - Nuages de mots spécifiques à chaque classe de sentiment \n"," - Détection des mots discriminants entre sentiments positifs et négatifs \n"," - Identification des n-grammes les plus fréquents \n","\n","5. **Analyse des utilisateurs** \n"," - Étude de la distribution des tweets par utilisateur \n"," - Analyse des tendances de sentiment propres aux utilisateurs \n","\n","6. **Analyse des requêtes (flag)** \n"," - Impact des requêtes sur la distribution des sentiments \n"," - Identification des requêtes les plus fréquentes \n","\n","7. **Analyse de la longueur des tweets** \n"," - Visualisation de la distribution des longueurs des tweets \n"," - Gestion des caractères HTML dans les tweets \n"," - Nettoyage des tweets trop longs et souvent difficilement compréhensibles \n","\n","- **Analyse qualitative:**\n","\n","8. **Analyse de caracteristiques distinctives et de l'impact de tokens spécifiques** \n"," - Étude de la longueur des tweets en termes de caractères et de mots \n"," - Répartition des longueurs en fonction du sentiment \n"," - Analyse de l’utilisation de la ponctuation \n"," - Calcul du ratio de majuscules \n"," - Présence d’émoticônes et de symboles \n","\n","9. **Stratégie de prétraitement pour la détection de sentiment dans les tweets** \n"," - Nettoyage des textes \n"," - Tokenisation adaptée aux spécificités de Twitter \n"," - Gestion des mentions, hashtags et URLs \n","\n","10. **Recommandations pour la modélisation** \n"," - Approches recommandées pour la vectorisation \n"," - Modèles à privilégier \n"," - Stratégies d’évaluation adaptées \n","\n","### Points clés à explorer \n","\n","**Distribution des sentiments :** \n","La première étape consiste à vérifier si les classes sont équilibrées. En cas de déséquilibre, des techniques telles que le sur- ou sous-échantillonnage, ou la pondération des classes, pourront être envisagées.\n","\n","**Caractéristiques linguistiques :** \n","L’analyse des mots les plus fréquents et des caractéristiques propres aux tweets positifs et négatifs permettra d’identifier des features pertinentes pour le modèle.\n","\n","**Prétraitement recommandé :** \n","Le code fournit des recommandations précises concernant : \n","- La gestion des URLs, mentions et hashtags \n","- La normalisation des textes \n","- Une tokenisation adaptée au langage propre à Twitter \n","\n","**Approches de modélisation :** \n","Différentes approches sont proposées, allant des modèles classiques (SVM, Naive Bayes) aux architectures plus avancées (LSTM, BERT), chacune avec ses avantages et ses limites.\n"]},{"cell_type":"code","execution_count":9,"metadata":{"id":"SIq2dc2NWjI-","executionInfo":{"status":"ok","timestamp":1751537402191,"user_tz":-120,"elapsed":121,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["df = raw_data.copy()"]},{"cell_type":"markdown","source":["### Analyse quantitative"],"metadata":{"id":"s8Gu4vmG0pWw"}},{"cell_type":"markdown","metadata":{"id":"NCnc8jyaWjI-"},"source":["#### 1. Informations générales sur le jeu de données\n","\n","- Étude de la répartition des classes de sentiment \n","- Vérification des valeurs manquantes ainsi que des doublons \n","- Examen de la structure générale du DataFrame "]},{"cell_type":"code","execution_count":10,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":0},"id":"UkDlv1zIWjI-","executionInfo":{"status":"ok","timestamp":1751537405677,"user_tz":-120,"elapsed":3488,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"ad26c4e0-01bf-426f-fc52-4a3aaecfa2aa"},"outputs":[{"output_type":"stream","name":"stdout","text":["1. APERÇU GÉNÉRAL DU JEU DE DONNÉES\n","--------------------------------------------------\n","Nombre total d'entrées: 1,600,000\n","Nombre de colonnes: 6\n","\n","Colonnes présentes:\n","- target\n","- ids\n","- date\n","- flag\n","- user\n","- text\n","\n","Types de données:\n","target int64\n","ids int64\n","date object\n","flag object\n","user object\n","text object\n","dtype: object\n","\n","Valeurs manquantes par colonne:\n","target 0\n","ids 0\n","date 0\n","flag 0\n","user 0\n","text 0\n","dtype: int64\n","\n","Nombre de lignes dupliquées: 0 (0.00%)\n"]}],"source":["def afficher_info_generales(df):\n"," \"\"\"Affiche les informations générales sur le DataFrame\"\"\"\n"," print(\"1. APERÇU GÉNÉRAL DU JEU DE DONNÉES\")\n"," print(\"-\" * 50)\n"," print(f\"Nombre total d'entrées: {df.shape[0]:,}\")\n"," print(f\"Nombre de colonnes: {df.shape[1]}\")\n"," print(\"\\nColonnes présentes:\")\n"," for col in df.columns:\n"," print(f\"- {col}\")\n","\n"," print(\"\\nTypes de données:\")\n"," print(df.dtypes)\n","\n"," print(\"\\nValeurs manquantes par colonne:\")\n"," print(df.isnull().sum())\n","\n"," # Vérifier les doublons\n"," duplicates = df.duplicated().sum()\n"," print(f\"\\nNombre de lignes dupliquées: {duplicates:,} ({duplicates/len(df)*100:.2f}%)\")\n","\n","afficher_info_generales(df)"]},{"cell_type":"markdown","metadata":{"id":"WWbOMBHvWjI-"},"source":["#### 2. Analyse de la distribution des sentiments\n","\n","- Visualisation de l’équilibre ou du déséquilibre des classes \n","- Répartition des sentiments positifs et négatifs\n"]},{"cell_type":"code","execution_count":11,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":833},"id":"xdnAqsI9WjI-","executionInfo":{"status":"ok","timestamp":1751537411107,"user_tz":-120,"elapsed":5432,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"bdfefe03-349e-404e-e4b3-fcb263503c60"},"outputs":[{"output_type":"stream","name":"stdout","text":["\n","2. Distribution des sentiments (cible)\n","--------------------------------------------------\n","sentiment\n","Négatif 800000\n","Positif 800000\n","Name: count, dtype: int64\n","\n","Pourcentage par catégorie:\n","sentiment\n","Négatif 50.00%\n","Positif 50.00%\n","Name: proportion, dtype: object\n"]},{"output_type":"display_data","data":{"text/plain":["
"],"image/png":"iVBORw0KGgoAAAANSUhEUgAAA90AAAJOCAYAAACqS2TfAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAat5JREFUeJzt3XlcVmX+//H3zSabgIqoiIIEuCJobmmFWrlXmk6uaW6ToznznWrKVnPSUSunmrTRUUzJKTVTyyW3Ulu0cskUXHDfDUhvEFHhlvP7wx9nvAMTkROLr+fjcT/ynOs61/25b3jMmTfXdc6xGYZhCAAAAAAAFDuXki4AAAAAAIDyitANAAAAAIBFCN0AAAAAAFiE0A0AAAAAgEUI3QAAAAAAWITQDQAAAACARQjdAAAAAABYhNANAAAAAIBFCN0AAAAAAFiE0A0AuCGbzeb0cnd3V2BgoKKjo/X444/rk08+kcPh+M3jw8LCfr+CC/Dqq6/KZrNpzpw5Tvvbtm0rm82mI0eOlEhdeY4cOSKbzaa2bduWaB03a8OGDbLZbHr88cdLuhQnixcvVpcuXRQUFGT+vjZs2FCPPfaYZs2apezs7JIusUCl5fcRAFB8CN0AgEIbNGiQBg0apL59+6pNmzZyOBxKSEhQr169VL9+ff3www+WvO+cOXNks9n06quvWjL+76E8fIayYujQoerZs6c+//xzhYSEqHv37mrbtq1yc3M1b948DR8+XGfPni2R2krDH6B+T/wRAQAkt5IuAABQdvx6lliSDh48qBdeeEELFy5Uu3bt9O233yo2Ntapz549e+Tu7v77FHkdTz75pPr06aMaNWqUaB3XU7NmTe3Zs0fe3t4lXUqZtnjxYs2ePVv+/v5auXKlWrdu7dR+5MgRxcfHq0KFCiVU4W9LSEhQVlaWatasWdKlAACKCaEbAHBL7rjjDi1YsEAVK1ZUfHy8hgwZou3btzv1qVevXglV9z+BgYEKDAws6TKuy93dvVR8T2XdJ598IunqH1l+HbglKSwsTK+99trvXVah1a5du6RLAAAUM5aXAwCKxZQpU+Tj46Mff/xR33zzjVPb9ZbUbtq0Sd27d1doaKgqVKig6tWrq0WLFhozZowyMzMlXV2eOnjwYEnSuHHjnK4tz5t5v/a64jNnzmjYsGEKCQmRm5ub3n77bUnXv6b7WvPmzdOdd94pb29vBQUFadCgQTp58mS+fo8//rhsNps2bNhQ4Di//ryF+Qw3uqb7gw8+0N133y0/Pz95e3urcePGmjhxoi5duvSb9X311Vdq3769KlasKD8/P3Xt2lW7d+++7ndwPUlJSerevbsqVaqkihUr6p577tGqVat+8xjDMPTRRx+pffv2qlSpkjw9PVW/fn29+uqrysrKytc/MzNTEydOVExMjPz9/eXr66s77rhDf/jDH7R69epC1ZmamipJqlq16k1/xrNnz+r5559XgwYN5OXlJX9/f7Vv317Lly/P1/fan9fFixc1ZswY8/c4IiJCkydPlmEYZv+8ywsk6ejRo06/A9f+zK+3HDvvd8rhcOi1115TRESEvLy8VL9+fb3//vtmvy+//FLt2rWTn5+fKlWqpIEDB+qXX34p8PM6HA79+9//1l133SU/Pz95eXkpNjZWb7/9doH3aAgLCzM/w6xZs9S4cWN5eXmpevXqeuKJJ2S32/N9Pxs3bpQk1alTx+kz58nOztZ7772n5s2bq0qVKvL29lZYWJi6deum+fPnX+cnBQBlCzPdAIBi4e/vr86dO2vRokVav3697r777t/sv2zZMnXv3l2GYahFixZq3bq17Ha79u/fr8mTJ2vEiBHy9fVVp06d5HA49O233yomJsZp6XpERITTmKmpqWrevLkcDofuvvtuXbp0qdDLtd9880299957uueee/Twww/ru+++U0JCgr788ktt3rxZISEhN/2d5LmZz1CQJ554Qv/5z3/k6emp9u3by9vbWxs2bNALL7ygZcuWad26dQV+zmXLlumdd95Rs2bN1KVLF+3YsUMrV67U999/r8TERFWvXr1Q9W/dulXt2rVTZmamGjVqpEaNGmn//v3q0qWL/vSnPxV4TG5urgYMGKCPPvpIvr6+atasmSpVqqStW7dq3Lhx+vzzz7VhwwZ5eXlJkq5cuaL7779f33//vQIDA9W2bVt5enrqxIkTWrlypXx8fNSxY8cb1lqrVi1JV5dpDx06VL6+voX6jMnJybr//vt1/PhxhYWFqWPHjjp//ry+++47Pfjgg3rjjTf0zDPP5DsuOztbHTp00O7du9W2bVtduHBBGzdu1JgxY3T+/HmNHz9e0tWf86BBgzR37lz5+PioV69e5hg3s8Lh0UcfNYP1HXfcoY0bN2rIkCGSpIoVK6pv375q1aqVOnbsqM2bN+uDDz7Q4cOH9dVXXzmF3YsXL6pr165av369KleurFatWsnT01Pff/+9/vrXv2r9+vVasmSJXFzyz888++yzeuedd9S2bVtFRETo22+/1X/+8x/t2bNHGzdulM1mk6+vrwYNGqRVq1bp559/Vs+ePQv8WfTv31+LFi0y/5Dj5+enkydP6ptvvlFmZqb69OlT6O8GAEotAwCAG5BkFOaUMX78eEOS0bdv33zHh4aGOu279957DUnGokWL8o3zww8/GBkZGeb2+++/b0gyxo4dW+D7rl+/3qyxR48exsWLF/P1GTt2rCHJeP/99532x8XFGZIMNzc3Y8WKFeb+7Oxso3///oYk4+GHH3Y6ZtCgQYYkY/369QXWU9DnvdFnOHz4sCHJiIuLc9q/aNEiQ5IRHBxsJCcnm/vtdrtx9913G5KMp59+usD6XFxcjCVLlpj7HQ6H0bNnT0OS8fLLLxdYx6/l5uYaDRo0MCQZr7zyilPbtGnTzO990KBBTm2vv/66Iclo27atcfr0aXP/5cuXjaFDhxqSjOeee87c/+WXXxqSjObNm+f7+aWnpxtbt24tVL3ffPON4eLiYkgyqlataowYMcJISEgwkpKSjNzc3AKPcTgcRnR0tCHJeP31140rV66Ybfv37zfq1KljuLq6Grt27TL35/288n5m6enpZtuWLVsMV1dXw9vb2zh//rzTexX0u3GtvN/Hw4cP5ztOktGoUSMjJSXF3J/3vdWoUcOoUqWKsXz5crMtPT3daNiwoSHJ+PLLL53GGzlypCHJ6N27t2G32839GRkZRpcuXQxJxr///W+nY0JDQw1JRvXq1Y29e/ea+1NTU42IiAhDkvHFF18U6vMYhmEcOnTI/D7S0tKc2i5evGhs2rTput8TAJQlLC8HABSbvGumz507d8O+ecuA77///nxtzZs3V8WKFW/6/StUqKB3331Xnp6eN33so48+qi5dupjb7u7ueuedd+Tt7a3PPvtMx48fv+kxi8O//vUvSdLYsWMVGRlp7vf399e0adNks9k0Y8aMApeZ9+3bV927dze3XV1d9fzzz0uSvvrqq0K9/4YNG7R7926Fh4frlVdecWobOXKkWrZsme8Yh8Oh119/XT4+Ppo/f77TjLqHh4feffddVa9eXf/5z3+Um5sr6X+/D23atMn38/Pz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AACA8qBIobthw4bauHGjrly5kq/Nbrfriy++UExMzC0XBwAAAABAWVak0N23b1+dPXtWzz//vNauXStJ2rFjh+bPn6+nn35aktSrV6/iqxIAAAAAgDLIrSgHBQcH6+9//7vmzJmjBQsWSJKWLVsmSWrQoIGGDh2qoKCg4qsSAAAAAIAyqEihW5Jq1aqll19+WZmZmTpz5owMw1C1atXk5+dXnPUBAAAAAFBmFTl05/H19VVERERx1AIAAAAAQLlSqNC9cePGIg0eFxdXpOMAAAAAACgPChW633vvvSINTugGAAAAANzOChW6p06d6rR94cIFTZs2Td7e3urcubOCg4MlSSdPntSqVat08eJFjRo1qvirBQAAAACgDClU6K5atarT9scffyw/Pz+99NJLstls5v7atWurZcuWmjBhglasWKGRI0cWb7UAAAAAAJQhRXpO95YtW9SiRQunwG0O6OKiFi1aaMuWLbdcHAAAAAAAZVmRQrdhGDp58uR120+cOFHkggAAAAAAKC+KFLqbN2+utWvXavny5bp8+bK5//Lly1q2bJnWrVunZs2aFVuRAAAAAACURUV6TvfgwYOVkpKiDz74QB9++KEqVaokSTp37pyuXLmiunXr6vHHHy/OOgEAAAAAKHOKFLq9vb01btw4bdmyRT/++KPS0tIkSTExMWratKnuvPPOAq/3BgAAAADgdlKk0J2nefPmat68eXHVAgAAAABAuVKka7oBAAAAAMCN3dJMt5WWLl2qDz/8UF26dDGvD8/OzlZCQoI2bdqknJwcxcTEaNiwYQoICDCPS0tL08yZM5WUlCRPT0/FxcWpX79+cnV1NfskJSUpISFBx48fV5UqVdSzZ0+1bdvW6f1XrVqlZcuWyW63KzQ0VEOGDFFERITZXphaAAAAAAC3t1I5033gwAGtXbtWoaGhTvvnzp2rbdu26amnntK4ceN07tw5TZkyxWzPzc3VxIkT5XA4NH78eI0aNUobNmzQggULzD4pKSmaNGmSGjZsqNdff11du3bV9OnTtWPHDrPPpk2blJCQoF69emny5MkKDQ3VhAkTlJ6eXuhaAAAAAAAodaH70qVLevfdd/XEE0/Ix8fH3J+VlaUvv/xSgwYNUqNGjRQeHq6RI0dq3759Sk5OliT99NNPOnHihEaPHq2wsDA1adJEvXv31urVq+VwOCRJ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flu1apWWLVsmu92u0NBQDRkyxOkxaYWpBQAAAABweyv0TLevr68qVqx4w9eVK1d0/PhxHTt27KaLqVy5svr166dJkyZp4sSJatSokV5//XUdP35ckjR37lxt27ZNTz31lMaNG6dz585pypQp5vG5ubmaOHGiHA6Hxo8fr1GjRmnDhg1asGCB2SclJUWTJk1Sw4YN9frrr6tr166aPn26duzYYfbZtGmTEhIS1KtXL02ePFmhoaGaMGGC0tPTzT43qgUAAAAAgELPdL/66qu/2W6327V06VLt379fLi4uuueee266mGbNmjlt9+3bV2vWrNH+/ftVpUoVffnll/rLX/6iRo0aSZJGjhypv/71r0pOTlZUVJR++uknnThxQi+//LICAgIUFham3r1767///a8effRRubm5ac2aNQoKCtLAgQMlXZ1N37t3r1asWKHY2FhJ0vLly3XfffepXbt2kqThw4dr+/btWr9+vbp3766srKwb1gIAAAAAwC3dSE36X9j+4osv5HA4dM899+iRRx5R9erVb2nc3Nxcbd68WZcvX1ZUVJQOHTqkK1euKDo62uxTs2ZNBQYGmkE3OTlZtWvXdlriHRsbq1mzZun48eOqU6eO9u/f7zSGJMXExGjOnDmSJIfDoUOHDql79+5mu4uLi6Kjo5WcnCxJhaqlIDk5OcrJyTG3bTabvLy8zH8DAHAjnC8AAOVZeTzPFTl0FxS2e/bsqWrVqt1SQceOHdOLL76onJwceXp66plnnlFISIiOHDkiNzc3+fj4OPX39/eX3W43a/r1NdX+/v5mW95/8/Zd2+fixYvKzs5WZmamcnNz840TEBCgU6dOmWPcqJaCLFmyRIsWLTK369Spo8mTJ6tq1aq/9ZUAAGCqUaNGSZcAAIBlyuN57qZD96/D9r333quePXsqKCioWAoKDg7WG2+8oaysLH333XeaNm2axo0bVyxjl7QePXqoW7du5nbeX3FSU1PlcDhKqiwAQBly+vTpki4BAADLlKXznJubW6EmUAsdus+dO2eG7StXriguLk6PPPJIsYVtsyA3N3Npenh4uA4ePKiVK1eqdevWcjgcunDhgtMMc3p6ujkrHRAQoAMHDjiNl3fzs2v7XHtDtLw+Xl5e8vDwkJ+fn1xcXPLNWF87ix4QEHDDWgri7u4ud3f3AtsMw7jucQAA5OF8AQAo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\n"},"metadata":{}}],"source":["def analyser_distribution_sentiment(df):\n"," \"\"\"Analyse la distribution des sentiments\"\"\"\n"," print(\"\\n2. Distribution des sentiments (cible)\")\n"," print(\"-\" * 50)\n","\n"," # Convertir les codes (0, 4) en catégories (négatif, positif)\n"," sentiment_map = {0: 'Négatif', 2: 'Neutre', 4: 'Positif'}\n"," df['sentiment'] = df['target'].map(sentiment_map)\n","\n"," # Afficher le compte\n"," sentiment_counts = df['sentiment'].value_counts()\n"," print(sentiment_counts)\n"," print(\"\\nPourcentage par catégorie:\")\n"," print(df['sentiment'].value_counts(normalize=True).map(lambda x: f\"{x*100:.2f}%\"))\n","\n"," # Visualiser la distribution\n"," plt.figure(figsize=(10, 6))\n"," sns.countplot(x='sentiment', hue='sentiment', data=df, palette='viridis')\n"," plt.title('Distribution des Sentiments', fontsize=15)\n"," plt.xlabel('Sentiment')\n"," plt.ylabel('Nombre de Tweets')\n"," plt.tight_layout()\n"," plt.show()\n","\n","analyser_distribution_sentiment(df)"]},{"cell_type":"markdown","metadata":{"id":"dLP_05CaWjI_"},"source":["#### 3. Analyse temporelle\n","\n","- Répartition des tweets dans le temps \n","- Identification des patterns temporels selon le sentiment \n","- Analyse détaillée par heure, jour et mois "]},{"cell_type":"code","execution_count":12,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":1000},"id":"gbTaWRiNWjI_","executionInfo":{"status":"ok","timestamp":1751537421449,"user_tz":-120,"elapsed":10341,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"7939105d-4449-4d04-f432-99a474db2e4e"},"outputs":[{"output_type":"stream","name":"stdout","text":["\n","3. ANALYSE TEMPORELLE\n","--------------------------------------------------\n","Période couverte: de 2009-04-06 22:19:45 à 2009-06-25 10:28:31\n"]},{"output_type":"display_data","data":{"text/plain":["
"],"image/png":"iVBORw0KGgoAAAANSUhEUgAABKUAAAJOCAYAAABm7rQwAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3Xd4VGX+/vH3OZlkUmZSIQQIJFQBkaYCNqoKInbX2FbsbdctrqvsfnXVXXddu/50beCq2MDFiqLCClgAEUVQkN47pM9kkkkm5/n9EZIlJmAISSYJ9+u6uCBzzpy5p5wh85nn+TyWMcYgIiIiIiIiIiLShOxwBxARERERERERkSOPilIiIiIiIiIiItLkVJQSEREREREREZEmp6KUiIiIiIiIiIg0ORWlRERERERERESkyakoJSIiIiIiIiIiTU5FKRERERERERERaXIqSomIiIiIiIiISJNTUUpERERERERERJqcilIiItLiWZZV7U9kZCRt2rThmGOO4corr+Stt94iFAod9PqZmZlNF7gW99xzD5Zl8dJLL1W7fMSIEViWxaZNm8KSq9KmTZuwLIsRI0aENcehmjdvHpZlceWVV4Y7SjVvv/0248aNIzU1ter1evTRR/PLX/6SyZMnU1paGu6ItWour0dpeJXP7bx58w64T+X7QLjfL0VEpPVQUUpERFqNCRMmMGHCBC655BJOOukkQqEQU6ZM4cILL6R37958/fXXjXK7L730EpZlcc899zTK8ZtCa7gPLcU111zDBRdcwEcffUR6ejrnnnsuI0aMwHEcXn31Va677jpyc3PDku1IKzioyCYiIhJernAHEBERaSg/HWUEsH79ev785z/z5ptvMnLkSObPn8+AAQOq7bNy5UoiIyObJuQB/PrXv+biiy+mffv2Yc1xIB07dmTlypXExsaGO0qL9vbbb/Pvf/+bhIQEZs6cyYknnlht+6ZNm3jhhRdwu91hSnhwU6ZMIRAI0LFjx3BHERERkVZARSkREWnVunXrxrRp0/B6vbzwwgtcffXVLFmypNo+vXr1ClO6/2nTpg1t2rQJd4wDioyMbBaPU0v31ltvARVFyJ8WpAAyMzP529/+1tSx6qxz587hjiAiIiKtiKbviYjIEeGRRx4hLi6O7777ji+//LLatgNNWVqwYAHnnnsuGRkZuN1u0tLSGDx4MBMnTsTv9wMV03+uuuoqAO69995qva0qR27t39do165dXHvttaSnp+NyuXj88ceBA/eU2t+rr77KscceS2xsLKmpqUyYMIHt27fX2O/KK688aG+Yn97futyHn+sp9corr3DyyScTHx9PbGws/fr14/7776ekpOSg+T7//HNGjRqF1+slPj6eM888kx9//PGAj8GBrFixgnPPPZekpCS8Xi+nnHIKH3/88UGvY4zhjTfeYNSoUSQlJREdHU3v3r255557CAQCNfb3+/3cf//99O/fn4SEBDweD926deMXv/gFn3zySZ1y7t27F4C2bdse8n3Mzc3lT3/6E3369CEmJoaEhARGjRrFBx98UGPf/Z+v4uJiJk6cWPU67t69Ow888ADGmKr9K6dvAmzevLnaa2D/5/xA090qX1OhUIi//e1vdO/enZiYGHr37s2LL75Ytd+cOXMYOXIk8fHxJCUlccUVV5CTk1Pr/Q2FQjzzzDOccMIJxMfHExMTw4ABA3j88cdr7RGXmZlZdR8mT55Mv379iImJIS0tjRtuuIH8/Pwaj89nn30GQJcuXard50qlpaU8/fTTHH/88aSkpBAbG0tmZibjx49n6tSpB3imDvxcFBYW8tvf/pZOnTpVvd4ee+wxHMepcb2lS5dy++23c+yxx9K2bVvcbjddu3bl5ptvZseOHT97O7feeitdunQhMjKS3/3ud3XKerhWrlzJlVdeSadOnXC73bRr146LL76YFStW1Nj3597z9n8+K9XlvRRg69at/PrXv6Zbt25ER0eTnJzM+PHjWbBgQUPeXRERaQAaKSUiIkeEhIQEzjjjDKZPn87cuXM5+eSTD7r/jBkzOPfcczHGMHjwYE488UTy8/NZu3YtDzzwADfeeCMej4exY8cSCoWYP38+/fv3rzY1sHv37tWOuXfvXo4//nhCoRAnn3wyJSUldZ4O9/DDD/P0009zyimncM455/DVV18xZcoU5syZw8KFC0lPTz/kx6TSodyH2txwww08//zzREdHM2rUKGJjY5k3bx5//vOfmTFjBv/9739rvZ8zZszgiSee4LjjjmPcuHEsXbqUmTNnsmjRIpYvX05aWlqd8n/zzTeMHDkSv99P37596du3L2vXrmXcuHHcdNNNtV7HcRwuv/xy3njjDTweD8cddxxJSUl888033HvvvXz00UfMmzePmJgYAMrLyzn11FNZtGgRbdq0YcSIEURHR7Nt2zZmzpxJXFwcY8aM+dmsnTp1AiqmwV1zzTV4PJ463cc1a9Zw6qmnsnXrVjIzMxkzZgw+n4+vvvqKs846i4ceeojbbrutxvVKS0s5/fTT+fHHHxkxYgRFRUV89tlnTJw4EZ/Px3333QdUPM8TJkzg5ZdfJi4ujgsvvLDqGIcyQu6iiy6qKjx169aNzz77jKuvvhoAr9fLJZdcwtChQxkzZgwLFy7klVdeYePGjXz++efVChDFxcWceeaZzJ07l+TkZIYOHUp0dDSLFi3i97//PXPnzuWdd97Btmt+v3r77bfzxBNPMGLECLp37878+fN5/vnnWblyJZ999hmWZeHxeJgwYQIff/wxu3fv5oILLqj1ubjsssuYPn16VaEzPj6e7du38+WXX+L3+7n44ovr/NgEg0FGjRrF+vXrGTVqFKWlpXz66afceuutLFu2rEZx5p///CdvvfUW/fr1q3q/Wrp0Kc888wzvvvsu33zzDR06dKhxO8XFxQwfPpzNmzczfPhwBg0aRFJSUp1z1te7777LxRdfTDAYZMCAAQwdOpStW7fy5ptvMmPGDD766COGDRvWILd1sPfShQsXcuaZZ5KXl8dRRx3FmWeeyd69e/nkk0/4+OOPee2118jKymqQHCIi0gCMiIhICweYuvyXdt999xnAXHLJJTWun5GRUe2yYcOGGcBMnz69xnG+/vprU1hYWPXziy++aABz991313q7c+fOrcp43nnnmeLi4hr73H333QYwL774YrXLhw8fbgDjcrnMhx9+WHV5aWmpueyyywxgzjnnnGrXmTBhggHM3Llza81T2/39ufuwceNGA5jhw4dXu3z69OkGMB06dDBr1qypujw/P9+cfPLJBjB/+MMfas1n27Z55513qi4PhULmggsuMIC56667as3xU47jmD59+hjA/OUvf6m27V//+lfV4z5hwoRq2x588EEDmBEjRpidO3dWXR4MBs0111xjAHPHHXdUXT5nzhwDmOOPP77G81dQUGC++eabOuX98ssvjW3bBjBt27Y1N954o5kyZYpZsWKFcRyn1uuEQiFzzDHHGMA8+OCDpry8vGrb2rVrTZcuXUxERIT54Ycfqi6vfL4qn7OCgoKqbYsXLzYREREmNjbW+Hy+ardV22tjf5Wvx40bN9a4HmD69u1r9uzZU3V55ePWvn17k5KSYj744IOqbQUFBeboo482gJkzZ0614918880GMFlZWSY/P7/q8sLCQjNu3DgDmGeeeabadTIyMgxg0tLSzKpVq6ou37t3r+nevbsBzKefflqn+2OMMRs2bKh6PLKzs6ttKy4uNgsWLDjg47S//Z+Lfv36mb1791ZtW7dunenQoYMBqp0LxlQ8drt27ap2WXl5ubn33nsNYK666qoD3s4JJ5xg8vLy6pSvUuVjcaD3jf1v46evkY0bN5q4uDjj8XjM7Nmzq2376KOPTGRkpOnUqZMJBoNVlx/oPa9S5fO5v597Ly0oKDDt27c3ERER5tVXX622bfHixSYpKcl4PJ5qr1EREQkvFaVERKTFq2tR6tlnnzWAGTt2bI3r//RDVu/evQ1Q7QPxgdS1KOV2u822bdtq3efnilKXXnppjetkZ2eb2NhYY1mW2bJlS9XlTVmUqizePffcczWus2zZMmNZlvF4PNU+PFbmu+yyy2pc55tvvqn1dg6ksujRtWtXEwqFamwfMmRIjaJUWVmZadOmjYmLi6vxod8YYwKBgElLSzNJSUlVBaBp06YZwPzud7+rU66Def31101KSkrV67byT7t27czEiRNrvObeeecdA5gLLrig1uO9/fbbBjC/+c1vqi6rfL5s265WoKk0fvz4Wl8jh1uU+u9//1vjOgMHDjSAufzyy2tse+KJJ2q87nbv3l1VxAgEAjWus3PnThMVFWX69etX7fLKIsakSZNqXOfhhx+u9fV9sKLUokWLDGDOPffcGtsOxf7FolmzZtXY/swzzxjAjB49us7H7Nixo0lJSTng7SxevPiQc1Y+FnX589PXyG9/+1sDmCeffLLWY//mN78xgHn77berLjucotSB3ksfe+yxWgvhlR599FEDmEcfffQgj4SIiDQl9ZQSEZEjhtnXQ+enfUpqc+yxxwLwy1/+ksWLF9fa8+VQDRo0qN6rltU2TSglJYXTTz8dY0yNPllNoaysjK+++gqomOb0U/369aNfv374/X6WLl1aY/vpp59e47KePXsCsHPnzjpl+OKLLwC48MILiYiIqLH9kksuqXHZkiVLyM7O5sQTT6Rdu3Y1tsfExHDssceSl5fH2rVrARgwYAC2bfPiiy8yadKkA/ZBqotLLrmEzZs38+qrr3LVVVfRt29fLMti9+7d/POf/+S4445jz549VfvPmjULgPPPP7/W451yyikAfP311zW2ZWRkcNRRR9W4/FAf57qIjIystedY165dgdqf78pt++eYN28eZWVljB07tmr65P7S0tLo0aMHP/zwA8XFxTW2N8TrCiqmLcbFxfHhhx/y0EMP1drH6VAkJydz2mmn1bi88jW6YMGCGu8zOTk5vPjii/zhD3/gmmuu4corr+TKK6+krKyMnJwccnNzaxyvffv2HHfccfXOOWbMGCZMmFDrnwsuuKDW6xzOa7Q+DvRe2tQ5RETk8KmnlIiIHDGys7OBig+HP+cf//gHP/zwAzNmzGDGjBkkJSVx8sknc/bZZ3P55ZcTHR19yLd/OCuXZWRk1Hp5ZcPyw/3AXB85OTmUlpbSpk0b4uLiat0nMzOTZcuW1dqQvbY+WF6vF6jov1MXlff75x6f/VU26Z49e/bPFiizs7M56qij6NmzJw8++CB/+tOfuP7667nxxhvp27cvo0eP5sorr6Rfv351ylspLi6Oyy67rKqYt3v3bl588UX++te/sm7dOv7v//6PSZMmVcu7//4HyvpTB+o1dqiPc12kpaXVWhis7NVUWxGhctv+OSrv76RJk6oegwPJzc2tcdyGeF0BxMfHM2nSJK6//npuv/12br/9dnr27MnIkSP55S9/yUknnVTnY8GBX6MJCQkkJiaSn59PXl4eKSkpALzxxhtcf/31VYsq1Mbn89V4PzvcFRInTpx4wAUNNm3aVLWC5E8vh9qf4/3V9hqtjwPdx8ocP/fcNFQOERE5fCpKiYjIEeO7774DoE+fPj+7b6dOnfjmm2+YM2cOH3zwAZ999llVgerBBx9k4cKFVR8e66o+hayG1hAjvg7FwYo+tTWpbgqVj0H37t1/9sPr/s/xH/7wBy666CLeffddZs+ezRdffMFjjz3G448/zmOPPcZvf/vbemdq164dEydOJDY2lt/+9rd8+OGHNfKOHTu21pFdldq0aVPjsqZ8jH/utuqapfL+DhgwgP79+x90X7fbXe/bqYtLLrmEU089lffee49Zs2bx2Wef8dxzz/Hcc89x66238sgjjzTYbe1v8+bNXHnllQA8/vjjnHnmmXTs2LFq5NiJJ57IwoULq62gWCkc7zOVz9mECRMOut+QIUMO+Zi1OdB9rLzOhRdeeMBCORxa834REWlcKkqJiMgRoaCggE8++QSAkSNH1uk6LpeL008/vWo60ObNm7n66quZM2cODzzwAA8++GCj5f2pzZs31zoaZ/PmzQDVVuGKiooCqHWExdatWxssU0pKClFRUWRnZ1NUVFTrh8C6jqCor/bt2wP/exx+qrbLK0fS9OrV64DL0R9Ip06duOWWW7jlllsIhUJMnTqVq666ittvv50rrrjisFc5GzVqFFB9JEdl3muvvfaA06dak8r7e/LJJ/Pkk0+GOQ20bduWa6+9lmuvvRZjDJ988glZWVk8+uijXH311Rx99NF1Os6WLVtqvbywsJD8/HxiYmJITEwEYObMmZSWlnLbbbfVWuzcsGFDve9PY0hPT2f9+vU88sgjdS7WH+x9qry8nF27dtUrx+rVq5k4cWLVFGwREWne1FNKRESOCH/4wx8oKiri+OOP54QTTqjXMTIyMrjjjjsAWL58edXllR+uQqHQ4Qc9gDfffLPGZbm5ucyaNQvLsqqN+Kks1KxZs6bGdWbPnl3r8etzHyIjIxk6dCgAU6dOrbF9+fLlLFu2DI/Hw4ABA+p83ENR2SPmrbfeqnVkRW25jj/+eBISEvjss89q7clTVy6Xi8svv5zjjz+e0tLSqv5TB1PbyJb9rVu3DqhexKvsQ/TOO+/UO2tdRUZGNurruC5GjhxJREQEH3zwAWVlZY16W4f6urcsi7Fjx3LmmWcCsGLFijrfVk5ODp9++mmNyytfoyeccELV9Me8vDyg9qmIn3/+Obt3767z7TaF+rxGD/Y+NXfu3Ho99015roiISMNQUUpERFq1DRs2kJWVxQsvvEBcXBwvvPBCna732GOP1fpN/cyZM4GKETOVKkcprV69ugES127atGlVI72g4kP073//e4qKihg/fny1HivDhw8H4JlnnqnWkHvp0qX85S9/qfX49b0Pt9xyCwD33HNPtdEbPp+PX//61xhjuOGGGxptStGIESPo1asX69ev57777qu27bnnnmPhwoU1ruN2u7n99tvx+Xycf/75tY462b59O6+88krVz3PnzuW///1vjcLXxo0bWblyJZZlHbB/0/6uvfZa7rvvvlp7gK1evZo//OEPQMX0o0oXXHABffr04bXXXuNvf/tbjb5Ixhjmz5/P/Pnzf/b2f06HDh3YvXs3+fn5h32s+urYsSNXX301mzZt4pJLLqm1ALNu3bpaexsdqoO97r/77jvefvttSktLq12em5vLokWLgOrvA3Vx2223VTsnN27cyF//+lcAfvWrX1VdXtmY/dVXX6WoqKjq8u3bt3PjjTce0m02hT/84Q/ExMRw22238fbbb9fYHgwGmT59Otu2bau6bNiwYUDFfawcUQkVj8lvfvObeuW44YYbSE1N5cEHH+T555+vcb6GQiE++eSTal8qiIhIeGn6noiItBqVPVgcx6GwsJA1a9awatUqjDH06NGD119/nWOOOaZOx7r33nu57bbb6N+/Pz169MAYw7Jly1izZg3JycncdtttVfsOHTqU1NRUpk+fzogRI+jatSu2bXP11Vdz4oknNsh9u/766znjjDMYNmwY7du3Z9GiRWzcuJEOHTrw1FNPVdt35MiRDB8+nM8++4w+ffpw0kknkZ2dzaJFi/jNb37Dww8/XOP49b0PF154Iddffz3PP/88ffv2ZdSoUcTGxjJv3jz27t3L0KFDqz50NwbbtnnppZcYPXo0d999N9OnT6dv376sW7eOb775hptvvpmnn366xvUmTpzIqlWreOWVV+jduzcDBw6kS5culJaWsnr1an788Uf69evHL3/5SwCWLVvG73//e9q2bcuxxx5LSkoKe/fu5bPPPiMYDHLLLbdUm0J5IDk5Ofz73//m7rvv5uijj6Znz55ERESwefPmqlUeBw8ezF133VV1HZfLxbvvvsuYMWP4y1/+wlNPPUW/fv1ITU0lOzubpUuXsmfPHh577LFDbr79U2effTZPPvkkgwYN4sQTTyQ6OpqjjjqKP/7xj4d13EP1xBNPVDXV/vjjjxkwYACdO3emqKiIH3/8kXXr1nHOOecc9nTGs88+m5dffplLL72U008/nYSEBAAmT57M5s2bueCCC0hISOC4444jLS2N/Px8Pv/8c3w+H2edddYhjbocOnQopaWldO/enVGjRlFWVsann35KIBDg8ssvr7Zi3Nlnn83RRx/NN998U9X7rKSkhLlz5zJgwABOPPFEFixYcFj3vSF1796dN954g0svvZQLLriA7t2707t3b+Li4ti+fTtLliyhqKiI7777rqp4261bN6644gqmTJnCgAEDGDZsGIFAgK+++opx48YRCAQOOC33QBITE3nvvfc466yzuOGGG7jvvvvo27cvSUlJ7Nq1iyVLlpCfn88777xD3759G+OhEBGRQ2VERERaOKDaH5fLZZKTk03fvn3NhAkTzNtvv21CodBBr5+RkVHtsilTpphLL73UHHXUUcbr9Rqv12v69Oljbr31VrNt27Yax1i8eLE57bTTTEJCgrEsywDmxRdfNMYYM3fuXAOYCRMmHDDD3XffXe06lYYPH24As3HjRvPiiy+aAQMGmOjoaJOSkmJ++ctfmq1bt9Z6vPz8fHPjjTeadu3aGbfbbY4++mjzzDPPHPD+/tx92LhxowHM8OHDa729KVOmmBNPPNF4PB4THR1tjj76aPP3v//dBAKBGvtOmDDBAGbu3Lm1HutA+Q7m+++/N2eddZZJSEgwcXFx5oQTTjAffPDBzz727733njnzzDNNamqqiYyMNKmpqebYY481t99+u/n222+r9lu7dq258847zUknnWTat29voqKiTMeOHc3o0aPNW2+9ZRzHqVPObdu2mUmTJpkLL7zQ9OnTxyQmJhqXy2Xatm1rRo8ebZ599llTWlpa63Xz8/PNfffdZwYNGlT1OGdmZpoxY8aYf/3rX2bv3r1V+/7c83Wg15vf7ze//vWvTadOnYzL5apxjP1fj/s72HN2sOf7YM9PKBQyL7/8shk1apRJTk42kZGRpkOHDuaEE04w9957r1m9enW1/TMyMsyBfrU92O089thjpk+fPsbtdle9hxhjzM6dO819991nRo0aZdLT001UVJRp166dOemkk8y///3vAz5PP7X/c5Gfn29uvvlm06FDBxMVFWWOOuoo8/DDD9f6/pSbm2tuuukmk5mZadxut+natau54447TFFRUa3Pw8895z+n8pgHOi/3v40DPdfr1q0zN998s+nRo4eJjo42Xq/XHHXUUebiiy82b775pgkGg9X2DwaDZuLEiaZTp04mKirKdOvWzdx3330mFArV+nzW5b3UmIrn7vbbbzdHH320iY2NNbGxsaZbt27mnHPOMS+99JLx+Xx1eUhERKQJWMb8THMDERERERGpl02bNtGlSxeGDx/OvHnzwh1HRESkWVFPKRERERERERERaXIqSomIiIiIiIiISJNTUUpERERERERERJqcekqJiIiIiIiIiEiT00gpERERERERERFpcipKiYiIiIiIiIhIk1NRSkREREREREREmpyKUiIiIiIiIiIi0uRc4Q7Q2uXl5REKhcId47C0bduWvXv3hjuGSKuk80uk8ej8Emk8Or9EGo/OL2kNXC4XSUlJP79fE2Q5ooVCIcrKysIdo94sywIq7ocWahRpWDq/RBqPzi+RxqPzS6Tx6PySI42m74mIiIiIiIiISJNTUUpERERERERERJqcilIiIiIiIiIiItLkVJQSEREREREREZEmp6KUiIiIiIiIiIg0ORWlRERERERERESkyakoJSIiIiIiIiIiTU5FKRERERERERERaXIqSomIiIiIiIiISJNTUUpERERERERERJqcilIiIiIiIiIiItLkVJQSEREREREREZEmp6KUiIiIiIiIiIg0ORWlRERERERERESkyakoJSIiIiIiIiIiTU5FKTko27ar/S0iIiIiIiIi0hBc4Q4gzZPL5SIq1kNstJvcQClJKW0IlAQpDfgJhULhjiciIiIiIiLS6ti2jW3bOI6D4zjhjtPoVJSSGlwuF/FJyby8aAvTlmzDFwzhdbvIGpTOhCGdKczLVWFKREREREREpIHsPzDEVxIiMdp1RAwMUVFKaoiK9fDyoi1MXrip6jJfMFT1c9aANEKF+WHJJiIiIiIiItKaHMkDQ9QoSKqxbZvYaDfTlmyrdfu0JduIjXarx5SIiIiIiIhIA9h/YIgvWFF8qhwY8vKiLUTFesKcsPGosiDV2LaNryRUdSL8lC8YIidQxnur8vh2u5+SUOuf4yoiIiIiIiLSGI70gSHNdvreu+++y+uvv864ceO48sorAbjnnnv48ccfq+136qmncv3111f9nJ2dzaRJk1ixYgXR0dEMHz6cSy+9lIiIiKp9VqxYwZQpU9i6dSspKSlccMEFjBgxotpxP/74Y2bMmEF+fj4ZGRlcffXVdO/evdHub3PhOA6J0S68blethSmv20VidCTTl2eTX1yGy4ZebWLo3z6OAWlxdEuOJsK2wpBcREREREREpGWpy8AQfzBU1fy8tWmWRal169Yxe/ZsMjIyamwbPXo0WVlZVT9HRUVV/dtxHO6//34SExO57777yMvL46mnniIiIoJLL70UgD179vDPf/6T0047jVtuuYXly5fz7LPPkpiYyIABAwBYsGABU6ZM4brrrqNHjx58+OGH/P3vf+fxxx8nISGhce98mDmOQ6AkSNag9Go9pSplDUpnd0ERx3eIZdmuIvYUhVi+p5jle4p5bVk2niibY9rFMaB9LAPS4kjzRtW8ERERERER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MABmzpzJhg0bOHr0KDt37mTz5s2kpKTUu7+EhATKysrYtGkTBQUFlJeXN+XTEREREZFfcTgc2IoLsebnEWoxY83Pw1ZcpISUiIhcMFVKeaDm2sTzxRdfZObMmUycOBG73U6/fv1466238Pb2BmrK6GfMmEFmZiYBAQEMGjSIp59+ut599e7dmwkTJvCnP/0Jq9XKtGnTeOihh5rw2YiIiIhIfU5Oi9T0SBERuVgGl8vlcncQLVlubi5VVac2HC8uLiYoKOii9280GmuX322sCwNvb+96n0NL01Dvici5MhgMxMbGkpmZiX4VizQsnV8ijUfnl0jj0fklLYW3tzeRkZFnHadKKQ+nJp4iIiIiIiIi4onUU0pERERERERERJqcklIiIiIiIiIiItLklJQSEREREREREZEmp6SUiIiIiIiIiIg0OSWl3EQrKTQ/ek9EREREREREmo6SUm5iMpkoKytTIqQZcLlclJWVYTJpMUoRERERERGRpqK/wt3E39+fyspKSkpK3B3KWZnNZux2u7vDaFQ+Pj74+Pi4OwwRERERERGRS4aSUm7kCYkQg8FAbGwsmZmZquoSERERERERkQaj6XsiIiIiIiIiItLklJQSEREREREREZEmp6SUiIiIiIiIiIg0OSWlRERERERERESkyanReSMzmVrGS9xSnodIc6TzS6Tx6PwSaTw6v0Qaj84v8XTn+jNscGlJNRERERERERERaWKavidnVF5ezqOPPkp5ebm7QxFpcXR+iTQenV8ijUfnl0jj0fkllxolpeSMXC4X6enpqKBOpOHp/BJpPDq/RBqPzi+RxqPzSy41SkqJiIiIiIiIiEiTU1JKRERERERERESanJJSckbe3t6MGjUKb29vd4ci0uLo/BJpPDq/RBqPzi+RxqPzSy41Wn1PRERERERERESanCqlRERERERERESkySkpJSIiIiIiIiIiTU5JKRERERERERERaXJKSomIiIiIiIiISJMzuTsAab7Wrl3Lhx9+SGFhIa1bt+bOO+8kJSXF3WGJeLS0tDRWrFhRZ1tcXBwvv/yyewIS8WB79uxh1apVpKenY7Vaefjhh+nTp0/t/S6Xi7S0ND799FPKysro2LEjd999N7GxsW6MWsQznO38euWVV/jiiy/qPKZ79+7MmDGjqUMV8TgrV67km2++4cSJE5jNZtq3b8/4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2GOPnfbxQ4cOZe3atSxYsIBDhw4RGhrKxo0b8fHxadDj/JrFYqFTp06sWrWK6upqwsLC2LFjBzk5Oee8j18bP3488+bN48knn2Tw4MHY7XbWrl2LxWJhzJgxteMGDBjA22+/zQsvvMB1111HZWUl69atIzY2lvT09As+fn0sFguTJk3i73//O48++igDBgwgKCiIvLw8tm3bRocOHbjrrruAmkb6Tz31FA8//DBDhw4lKiqKoqIi9u/fT0FBAc8//3yDxiYiIiJ1KSklIiIiLcINN9xAbGwsq1evZvny5UBNU+xu3brRq1ev2nGpqancfvvtfPTRRyxevJjk5GQee+wxlixZcs7H6tKlC3PnzmXFihV88sknVFRUEBISQkpKCtdcc80ZH+vj48PMmTNZtGgRa9euxWw2c9VVV5Gamsqzzz7bYMepz9SpU1m0aBGffPIJLpeLbt268cQTT3DPPfec976A2senpaWRlpaGl5cXnTt35rbbbqvTrDwwMJBHHnmExYsXs3TpUqKiorj11lvJzMxs8KQUwJVXXkloaCgffPABq1atoqqqirCwMDp16sTgwYNrxyUkJPDcc8+xfPlyNmzYQElJCcHBwSQlJXHzzTc3eFwiIiJSl8H16xpuEREREZFfycrK4v7772fKlCn85je/cXc4IiIi0gKop5SIiIiInFVhYSEAQUFB7g1EREREWgxN3xMRERGRM/rss8/4/PPP8fHxoV27du4OR0RERFoIVUqJiIiIyBn97//+L6WlpTz44IP4+/u7OxwRERFpIdRTSkREREREREREmpwqpUREREREREREpMkpKSUiIiIiIiIiIk1OSSkREREREREREWlySkqJiIiIiIiIiEiTU1JKRERERERERESanJJSIiIiIiIiIiLS5JSUEhERERERERGRJqeklIiIiIiIiIiINDklpUREREREREREpMn9f/DT27dY5KVHAAAAAElFTkSuQmCC\n"},"metadata":{}}],"source":["def analyser_temporalite(df):\n"," \"\"\"Analyse la distribution temporelle des tweets\"\"\"\n"," print(\"\\n3. ANALYSE TEMPORELLE\")\n"," print(\"-\" * 50)\n","\n"," # Convertir la colonne 'date' en format datetime\n"," df['date_obj'] = pd.to_datetime(df['date'], errors='coerce')\n","\n"," # Extraire les composantes de date\n"," df['year'] = df['date_obj'].dt.year\n"," df['month'] = df['date_obj'].dt.month\n"," df['day'] = df['date_obj'].dt.day\n"," df['hour'] = df['date_obj'].dt.hour\n"," df['weekday'] = df['date_obj'].dt.dayofweek\n","\n"," # Afficher la plage temporelle\n"," print(f\"Période couverte: de {df['date_obj'].min()} à {df['date_obj'].max()}\")\n","\n"," # Distribution par mois\n"," plt.figure(figsize=(12, 6))\n"," monthly_counts = df.groupby(['month', 'sentiment']).size().reset_index(name='count')\n"," sns.barplot(x='month', y='count', hue='sentiment', data=monthly_counts)\n"," plt.title('Distribution des Tweets par Mois', fontsize=15)\n"," plt.xlabel('Mois')\n"," plt.ylabel('Nombre de Tweets')\n"," plt.tight_layout()\n"," plt.show()\n","\n"," # Distribution par jour de la semaine\n"," plt.figure(figsize=(12, 6))\n"," weekday_sentiment = df.groupby(['weekday', 'sentiment']).size().reset_index(name='count')\n"," sns.barplot(x='weekday', y='count', hue='sentiment', data=weekday_sentiment)\n"," plt.title('Distribution des Sentiments par Jour de la Semaine', fontsize=15)\n"," plt.xlabel('Jour de la Semaine')\n"," plt.ylabel('Nombre de Tweets')\n"," plt.xticks(ticks=[0, 1, 2, 3, 4, 5, 6], labels=['Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi', 'Dimanche'])\n"," plt.tight_layout()\n"," plt.show()\n","\n"," # Distribution par heure de la journée\n"," plt.figure(figsize=(12, 6))\n"," hourly_sentiment = df.groupby(['hour', 'sentiment']).size().reset_index(name='count')\n"," sns.lineplot(x='hour', y='count', hue='sentiment', data=hourly_sentiment, marker='o')\n"," plt.title('Distribution des Sentiments par Heure', fontsize=15)\n"," plt.xlabel('Heure de la journée')\n"," plt.ylabel('Nombre de Tweets')\n"," plt.tight_layout()\n"," plt.show()\n","\n","analyser_temporalite(df)"]},{"cell_type":"markdown","metadata":{"id":"lETyJsrVWjI_"},"source":["#### 4. Analyse des mots fréquents\n","\n","- Nuages de mots spécifiques à chaque classe de sentiment \n","- Détection des mots discriminants entre sentiments positifs et négatifs \n","- Identification des n-grammes les plus fréquents "]},{"cell_type":"code","execution_count":13,"metadata":{"id":"E3WHO2pgWjI_","executionInfo":{"status":"ok","timestamp":1751537421459,"user_tz":-120,"elapsed":4,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["def analyser_mots_frequents(df, sentiment, n_range=(1, 2, 3)):\n"," \"\"\"\n"," Analyse les mots et N-grammes les plus fréquents pour un sentiment donné.\n","\n"," Paramètres:\n"," - df: DataFrame contenant les tweets\n"," - sentiment: valeur de sentiment à filtrer ('Positif' ou 'Négatif')\n"," - n_range: tuple indiquant les valeurs de N à analyser (par défaut: unigrammes, bigrammes et trigrammes)\n"," \"\"\"\n"," # Filtrer par sentiment\n"," texts = df[df['sentiment'] == sentiment]['text'].astype(str)\n","\n"," # Télécharger les stopwords si nécessaire\n"," stop_words = set(stopwords.words('english'))\n","\n"," # Fonction pour nettoyer et tokenizer le texte\n"," def preprocess_text(text):\n"," # Convertir en minuscules et supprimer caractères spéciaux\n"," text = re.sub(r'[^\\w\\s]', '', text.lower())\n"," # Tokenizer manuellement\n"," tokens = text.split()\n"," # Supprimer les stopwords\n"," tokens = [word for word in tokens if word not in stop_words and len(word) > 1]\n"," return tokens\n","\n"," # Traiter tous les textes (liste de liste de tokens)\n"," all_tokens = []\n"," for text in texts:\n"," all_tokens.append(preprocess_text(text))\n","\n"," # Analyser les unigrammes (liste de mots individuels)\n"," all_words = []\n"," for tokens in all_tokens:\n"," all_words.extend(tokens)\n","\n"," # Compter les occurrences des mots (liste de couples)\n"," word_counts = Counter(all_words)\n"," most_common_words = word_counts.most_common(20)\n","\n"," # Créer un nuage de mots pour les unigrammes\n"," wordcloud = WordCloud(width=800, height=400, background_color='white').generate_from_frequencies(dict(word_counts))\n","\n"," plt.figure(figsize=(12, 8))\n"," plt.imshow(wordcloud, interpolation='bilinear')\n"," plt.axis('off')\n"," plt.title(f'Nuage de mots pour les tweets {sentiment.lower()}s', fontsize=15)\n"," plt.tight_layout()\n"," plt.show()\n","\n"," # Afficher les résultats pour les unigrammes\n"," # print(f\"\\nMots les plus fréquents pour les tweets {sentiment.lower()}s:\")\n"," # for word, count in most_common_words:\n"," # print(f\"- {word}: {count:,}\")\n","\n"," # Visualiser les mots les plus fréquents avec un barplot\n"," plt.figure(figsize=(12, 8))\n"," word_df = pd.DataFrame(most_common_words, columns=['Mot', 'Fréquence'])\n"," sns.barplot(x='Fréquence', y='Mot', data=word_df, palette='coolwarm')\n"," plt.title(f'Mots les plus fréquents pour les tweets {sentiment.lower()}s', fontsize=15)\n"," plt.xlabel('Fréquence', fontsize=12)\n"," plt.ylabel('Mot', fontsize=12)\n"," plt.tight_layout()\n"," plt.show()\n","\n"," for n in range(n_range[0] + 1, n_range[1] + 1): # Commencer à 2-grammes si n_range commence à 1\n"," all_ngrams = []\n"," for tokens in all_tokens:\n"," if len(tokens) >= n: # Vérifier que le texte est assez long pour former un n-gramme\n"," all_ngrams.extend(list(ngrams(tokens, n)))\n","\n"," # Convertir les tuples en chaînes pour une meilleure lisibilité\n"," all_ngrams_str = [' '.join(gram) for gram in all_ngrams]\n","\n"," # Compter les occurrences des n-grammes\n"," ngram_counts = Counter(all_ngrams_str)\n"," most_common_ngrams = ngram_counts.most_common(20)\n","\n"," # Afficher les résultats pour les n-grammes\n"," # print(f\"\\n{n}-grammes les plus fréquents pour les tweets {sentiment.lower()}s:\")\n"," # for ngram, count in most_common_ngrams:\n"," # print(f\"- \\\"{ngram}\\\": {count:,}\")\n","\n"," # Visualiser les n-grammes les plus fréquents avec un graphique à barres\n"," plt.figure(figsize=(12, 8))\n","\n"," # Créer un DataFrame pour le graphique\n"," ngram_df = pd.DataFrame(most_common_ngrams, columns=['N-gramme', 'Fréquence'])\n","\n"," # Créer un graphique à barres horizontales\n"," color = 'royalblue' if sentiment == 'Positif' else 'red'\n"," sns.barplot(x='Fréquence', y='N-gramme', data=ngram_df.sort_values('Fréquence', ascending=False), color=color)\n"," plt.title(f'Top {n}-grammes pour les tweets {sentiment.lower()}s', fontsize=15)\n"," plt.xlabel('Fréquence', fontsize=12)\n"," plt.ylabel('N-gramme', fontsize=12)\n"," plt.tight_layout()\n"," plt.show()\n"]},{"cell_type":"code","execution_count":14,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":1000},"id":"GgsXlsTqWjI_","executionInfo":{"status":"ok","timestamp":1751537440633,"user_tz":-120,"elapsed":19173,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"eaa7039b-0008-469e-8702-d95e02f9a239"},"outputs":[{"output_type":"display_data","data":{"text/plain":["
"],"image/png":"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f39/TZkyRR999FGx+8zPz9e3335bJNy40r188MEHOnDgQLH933zzjaSyj82y+Mc//qGCggINHjxY27ZtK3b8+PHj+vjjj63bnp6eeuCBB5Sfn68nn3yyyDPbvn27pk2bVmI/jRs31smTJ/Xll18W2T916lTrBy5c6mrGQFlNnTpVR44cKbbfFs8aAKoqXt8DAOASH374oTp37qzPPvtMSUlJ6tixo44dO6bExERdvHhR//rXv6wzVf4qODhYLVq0ULNmzXT77bfL2dlZa9asUXZ2trp3714sGCjN9OnTrTMl6tSpU+prX2+//XaR9Wgu54EHHtCiRYu0ePFiRURE6Pbbb5ejo6PWrl2r8PBw3XLLLfrxxx/LFH45OTlp/PjxevHFF9W1a1f16NFDtWrV0k8//aSjR49qzJgxio+Pv+rrVRYNGzbUF198ofvvv1+DBw9Ww4YN1bRpU9WoUUPp6enaunWrzp49q19++UX16tVTXl6ennzyST377LNq06aNQkNDlZeXp82bN+v3339XaGioHnnkkTLV8OCDD6pDhw7q0aOHatasqe+//15HjhxRs2bN9OqrrxZpO2nSJP34449atWqVwsLC1LVrV509e1Zr1qxRbm6uxo0bp759+xY55/nnn9fChQv17rvvKjExUeHh4dq5c6d+//13jR49WjNmzCj3c7waL7zwglJTUzVnzhw1bdpUrVu3VoMGDZSXl6c9e/YoJSVFLVq0sH6K4Pbt2/W3v/1Nfn5+atOmjWrXrq1jx44pKSlJFy5c0BNPPHFVr8iGhoaqRYsW+vnnn9W+fXs1a9ZMjo6O6tevX5FPF+zatavWrVun3NzcYq/nFa4rVfjvSzk5Oemrr75Sr1699PLLL2v69Olq0aKF/P39lZWVpW3btumPP/7Q1KlTrWtq+fj46Ouvv1bfvn316KOP6rXXXlPz5s3l6+urI0eOaOvWrcrOztbixYutn2h3pXv54IMP9PjjjysyMlJNmzaVk5OTUlNTtX37drm5uenll1++lm/dVbn//vuVnJysN954Q23atFGrVq0UHh4uwzC0f/9+7dixQ56ennr44Yet57z55ptKSkrSV199pfDwcHXq1EnZ2dlas2aNHn30UU2fPr3Y76kJEybowQcf1NChQxUfH6969epp+/btSk1N1d/+9jdNnTq1WG19+/bVP//5Tz37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AAAAqCyqbCjl4eGh0NBQJScnKzw8XMnJyerTp48WLlyo3NxcnTt3TkeOHFFkZGSJ52dlZalv374KCgqSpGLB0MWLF/Xwww8rICBAktS7d28tXLiw1HpWrlwpDw8PPfXUU3Jy+vOxBgYGWo8vXbpU/fv312233SZJevDBB5WcnKzly5dr1KhR1/QMvvnmG3Xv3l09evSQJA0dOlQ7d+5UXl5eqedYLBZZLBbrtslkkru7+zX1DwAAAAAAcK2qbCglSZGRkUpJSVHfvn2Vmpqq+++/Xxs3blRqaqpycnLk6+tb6iykPn366MMPP9QPP/ygm266Sbfccos1gJIkV1fXItu+vr46ffp0qbUcPHhQERER1kDqr86dO6eTJ08qIiKiyP4mTZro4MGDZb1tq/T0dPXs2bPIvkaNGik5ObnUcxYvXlwkXGvQoIEmT558zTUAAAAAAABciyodSjVr1kxr167VwYMH5ejoqKCgIDVr1kzJyck6e/ZsqbOkJCk6OlqdOnXS1q1btW3bNi1YsEBPPfWU2rdvL0lFXuUrZBhGqddzdnYu172YTKZifeTn55frmiUZOHCgoqKiivULAAAAAABgSw72LqA8IiIidP78eS1btswaQBXOnkpOTlazZs0ue35gYKCioqL00ksvqX379lq7du011xISEqLU1NQSgyQPDw/5+voqNTW1yP49e/aoXr16kmRdoDw7O9t6PC0t7bJ9BgUFad++fUX2Xbp9KWdnZ3l4eFi/eHUPAAAAAADYQ5UOpTw9PRUSEqJ169YVCaV+++03ZWZmljpTKi8vT59++qmSk5N17Ngxpaamav/+/db1pa5F7969df78eb377rvav3+/MjMz9f333ysjI0OS1K9fP3399dfasGGDMjIyNG/ePKWlpenuu++WJAUEBKh27dpasGCBMjMztXXrVi1btuyyfd59991au3at1q5dq4yMDC1YsECHDx++5nsAAAAAAACwlSr9+p70ZwiVlpZmnRXl6empevXq6dSpU0UWGv8rBwcHnTlzRtOnT9epU6fk5eWlDh06KDo6+prr8PLy0ssvv6y5c+cqLi5ODg4OCg0NVZMmTSRJd911l86dO6fPPvtMp06dUr169fT8889b17xycnLSk08+qU8++UTPPvusGjZsqKFDh+qdd94ptc9bb71VR44c0dy5c2WxWNShQwf1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AAAAAAD+qlxrSrm6uqpx48ZasmSJ/ve//5Xa7ssvvyxPNwAAAAAAALjBlCuU+vTTT7V69Wo1btxYDRs25NP3LiMuLk6hoaGKiYmxdykAAAAAAAB2V65QauPGjerSpYvGjBlTUfVUSgRKAAAAAAAAFatca0o5OjqqUaNGFVULAAAAAAAAqolyzZS69dZbtWXLFt15550VVU+ZFRQUaOnSpfruu+90/Phx1axZUz179tSgQYMkSXPnztXmzZt1/Phx+fj4qFOnThoyZIicnP689QULFmjz5s3q27evvvzyS+Xk5Kh169Z69NFH5e7urvj4eKWkpCglJUXffPONJGn69Ony9/cvVsu3336r5cuX6/jx4/Lw8FBERISeeeaZEuu2WCz64osvtH79ep07d07169fXAw88oGbNmlnbpKam6vPPP9f+/fvl7e2tdu3a6f7775ebm5skacyYMerevbsOHz6sLVu2yMPDQwMHDlTv3r0r9BkDAAAAAABUtHKHUrNmzdKkSZPUvXt31alTRw4OxSdfhYWFlaeby/r888+1evVqjRgxQhEREcrOzlZ6err1uLu7u0aPHi1fX18dOnRIH374odzd3dW/f39rm6NHj2rTpk16/vnndfbsWU2dOlVfffWV7rvvPsXGxiozM1P169fXvffeK0ny9vYuVsf+/fs1a9YsjR07Vk2aNFFOTo52795dat2ffvqp0tPT9dRTT8nX11ebNm3SG2+8obfffltms1lHjhzR66+/rqFDh+rxxx/X6dOnNXPmTM2cOVOjR4+2Xmfp0qUaOHCgoqOjtX37diUkJCgwMFAtWrSoiMcLAAAAAABwXZQrlJo4caL139u2bSu13fX69L3z589rxYoVeuihh9StWzdJUkBAgCIiIqxtBg8ebP23v7+/MjIytGHDhiKhlGEYGjNmjNzd3SVJXbp00a5duyRJHh4ecnJykqurq3x8fEqtJSsrS66urmrTpo3c3d3l5+enBg0alNo2MTFRM2bMUK1atSRJ/fr10/bt27V27Vrdf//9+uqrr9S5c2f16dNHkmQ2mxUbG6uJEydq1KhRcnFxkSQ1adJEAwYMkCQFBgZqz549Wr58eamhlMVikcVisW6bTCbrfQMAAAAAANhKuUKpxx9/vKLquCbp6emyWCy66aabSm2zYcMGrVixQkeOHFFubq4KCgqKhTB+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sm5XppluAAAAAACg+ihXKJWUlHTZ4yaTSc7Ozqpdu7YaNGhQ4npTFa1Zs2Zau3atDh48KEdHRwUFBalZs2ZKTk7W2bNnrbOkJGnJkiVasWKFRowYoeDgYLm5uSkhIUH5+flFrunkVPwxGYZRZNvR0bHItslksrZZv3695syZo+HDh6tx48Zyd3fXkiVLtG/fvoq67avm7Oxsk+8DAAAAAADA5ZQrlJoxY8ZVt/Xw8NCAAQOs6zldLxERETp//ryWLVtmDaAiIyP19ddfKycnp8gi4KmpqWrbtq26dOki6c+ZU5mZmQoKCqrQmvbs2aMmTZqoV69e1n1Hjx697DmBgYH65Zdfiuz79ddfi2wHBQVpz549xfoKDAwscZYUAAAAAABAZVGuUGrKlCmKj4+Xl5eXevXqpYCAAElSZmamvv32W509e1YjR45Udna2Vq5cqc8//1zu7u668847K6T4knh6eiokJETr1q3TQw89JOnPUGrq1Km6ePFikZlSZrNZP/74o/bs2aMaNWpo2bJlys7OrvBQKiAgQElJSdq2bZv8/f31/fff69dff5W/v3+p5/Ts2VPLli3T3Llz1aNHD6WlpVlnphW+chcVFaUJEyZo4cKF1oXOV65cqVGjRlVo/QAAAAAAABWtXKHU8uXLVbNmTb344otF9gcHB6t9+/Z64403tGbNGj322GNq27atJk6cqG+//fa6hlLSnyFUWlqamjVrJunPoKpevXo6deqUAgMDre0GDx6so0eP6vXXX5erq6tuv/12tWvXTufOnavQenr27Km0tDS9++67MplMuu2229SrV69iM6H+yt/fX88884w+++wzrVixQo0bN9bAgQP1ySefWF8nDAsL09/+9jctWLBA//3vf+Xr66vo6OhSFzkHAAAAAACoLEzGpYsjlUFsbKzuu+++UkOmb7/9VvPnz9esWbMk/flpcV988YXmzZt3rV1Wa4sWLdKqVav073//u8KvnREVpbzk5Aq/LgAAKM5l/Xp7l1ClmUwmmc1mZWZmFlvnE7gU4wVlwXhBWTFmSubs7Cw/P78rtivXTKmCggJlZGSUejw9Pb3IN8XJyanYJ9uhdN9++63Cw8Pl5eWlPXv2aMmSJerdu7e9ywIAAAAAACi3coVSbdu21bfffquAgAD16NHDGjjl5eVp9erVWrVqlW699VZr+71791rX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mTJF//3vf91dFmqYoqIizZ49W88//3yt/iCOP+70FyZIUtOmTZ0h1bp16+ghnMFut6tZs2bO9XwiIyOVm5urzz//nIWlcU5ffvml2rRpowYNGri7lFqD2/dqIX9/f3l4eDhT29OqSnhRu5z++x89etRl/9GjR53HrFarjh075nL85MmTOnHihMuYqvrrt9fAlWPmzJnavHmzXnzxRV1zzTXO/VarVZWVlSopKXEZ//t++X0vnO6v346pqucsFgv/R+MKZDabFRwcrKioKPXr108RERFavnw5/QIXe/bs0dGjR/XMM8+oT58+6tOnj7KysrRixQr16dNH9evXp19wTnXr1lVoaKgKCwt5f8EZAgICFBYW5rIvLCzMecsnn3lRlV9++UU//fSTunTp4tzH+8vlRyhVC5nNZkVFRSkjI8O5z263KyMjQy1atHBjZXC3oKAgWa1Wbd261bmvtLRUu3btcvZGixYtVFJSoj179jjHZGRkyOFwKDo62jlm27ZtqqysdI756aefFBoayjTmK4jD4dDMmTO1ceNGvfDCC2dMT4+KipKnp6dLv+Tn56uoqMilX3Jzc13+Ef7pp59ksVicHxabN2/uco7TY3g/ujrY7XbZbDb6BS7i4+M1YcIEvfLKK86fZs2aqUOHDs7f6RecS3l5uTOQ4v0FvxcTE3PGsiT5+fkKDAyUxGdeVO3LL79U/fr1dd111zn38f5y+RFK1VIJCQlavXq11qxZo/3792vGjBn69ddfmc5aC5SXlysnJ0c5OTmSTt1zn5OTo6KiIplMJt1xxx36+OOP9d133yk3N1eTJ09WQECA/vKXv0g69V+Z2rRpo+nTp2vXrl3avn273n33Xd10003Oaa4dOnSQ2WzWtGnTtG/fPq1du1YrVqxQQkKCu542LsDMmTP1zTff6NFHH5XFYlFxcbGKi4tVUVEh6dSCoJ07d9bcuXOVkZGhPXv2aOrUqWrRooXzH9jWrVsrLCxMkydPVk5Ojn744QfNnz9ft912m7y8vCRJ3bp108GDB5WSkqK8vDx9+umnWrdunbp37+62544L8/777ysrK0sHDx5Ubm6uc/vmm2+mX+DCYrEoPDzc5adOnTry8/NTeHg4/YIzzJ071/n+kp2drVdffVUeHh7q0KED/YIzdO/eXTt37tTHH3+swsJCffvtt1q9erVuu+02SeIz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\n"},"metadata":{}}],"source":["analyser_mots_frequents(df, 'Négatif')"]},{"cell_type":"markdown","metadata":{"id":"yvXJwMNOWjJA"},"source":["#### 5. Analyse des utilisateurs\n","\n","- Étude de la distribution des tweets par utilisateur \n","- Analyse des tendances de sentiment propres aux utilisateurs "]},{"cell_type":"code","execution_count":16,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":0},"id":"K2GstxOKWjJA","executionInfo":{"status":"ok","timestamp":1751537469471,"user_tz":-120,"elapsed":4209,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"c9a0bd79-380b-4049-ed32-e62a48d8aa3f"},"outputs":[{"output_type":"stream","name":"stdout","text":["\n","6. ANALYSE DES UTILISATEURS\n","--------------------------------------------------\n","Nombre d'utilisateurs uniques: 659,775\n","\n","Top 10 des utilisateurs par nombre de tweets:\n","- lost_dog: 549 tweets\n","- webwoke: 345 tweets\n","- tweetpet: 310 tweets\n","- SallytheShizzle: 281 tweets\n","- VioletsCRUK: 279 tweets\n","- mcraddictal: 276 tweets\n","- tsarnick: 248 tweets\n","- what_bugs_u: 246 tweets\n","- Karen230683: 238 tweets\n","- DarkPiano: 236 tweets\n","\n","Parmi les utilisateurs avec au moins 5 tweets:\n","Ratio positif moyen: 51.23%\n","Ratio négatif moyen: 48.77%\n","\n","Utilisateurs les plus positifs:\n","- 007wisdom: 100.00% positif (6 tweets)\n","- LongandLoud: 100.00% positif (6 tweets)\n","- LoopNashville: 100.00% positif (8 tweets)\n","- Looyda: 100.00% positif (5 tweets)\n","- LoraNorton: 100.00% positif (5 tweets)\n","\n","Utilisateurs les plus négatifs:\n","- zombiemovies: 100.00% négatif (5 tweets)\n","- zombiecommand: 100.00% négatif (5 tweets)\n","- zzkim: 100.00% négatif (5 tweets)\n","- 1284forever: 100.00% négatif (6 tweets)\n","- 123katie123: 100.00% négatif (5 tweets)\n"]}],"source":["def analyser_utilisateurs(df):\n"," \"\"\"Analyse la distribution des utilisateurs\"\"\"\n"," print(\"\\n6. ANALYSE DES UTILISATEURS\")\n"," print(\"-\" * 50)\n","\n"," # Nombre total d'utilisateurs uniques\n"," unique_users = df['user'].nunique()\n"," print(f\"Nombre d'utilisateurs uniques: {unique_users:,}\")\n","\n"," # Top utilisateurs par nombre de tweets\n"," top_users = df['user'].value_counts().head(10)\n"," print(\"\\nTop 10 des utilisateurs par nombre de tweets:\")\n"," for user, count in top_users.items():\n"," print(f\"- {user}: {count} tweets\")\n","\n"," # Distribution des sentiments par utilisateur (pour les utilisateurs avec plus de X tweets)\n"," min_tweets = 5\n"," user_sentiment = df.groupby('user')['sentiment'].value_counts().unstack().fillna(0)\n"," user_sentiment = user_sentiment[user_sentiment.sum(axis=1) >= min_tweets]\n","\n"," # Calculer les ratios\n"," user_sentiment['total'] = user_sentiment.sum(axis=1)\n"," user_sentiment['pos_ratio'] = user_sentiment['Positif'] / user_sentiment['total']\n"," user_sentiment['neg_ratio'] = user_sentiment['Négatif'] / user_sentiment['total']\n","\n"," # Afficher quelques statistiques\n"," print(f\"\\nParmi les utilisateurs avec au moins {min_tweets} tweets:\")\n"," print(f\"Ratio positif moyen: {user_sentiment['pos_ratio'].mean():.2%}\")\n"," print(f\"Ratio négatif moyen: {user_sentiment['neg_ratio'].mean():.2%}\")\n","\n"," # Utilisateurs les plus positifs/négatifs\n"," most_positive = user_sentiment.sort_values('pos_ratio', ascending=False).head(5)\n"," most_negative = user_sentiment.sort_values('neg_ratio', ascending=False).head(5)\n","\n"," print(\"\\nUtilisateurs les plus positifs:\")\n"," for user, row in most_positive.iterrows():\n"," print(f\"- {user}: {row['pos_ratio']:.2%} positif ({int(row['total'])} tweets)\")\n","\n"," print(\"\\nUtilisateurs les plus négatifs:\")\n"," for user, row in most_negative.iterrows():\n"," print(f\"- {user}: {row['neg_ratio']:.2%} négatif ({int(row['total'])} tweets)\")\n","\n","analyser_utilisateurs(df)"]},{"cell_type":"markdown","metadata":{"id":"FFo_xU7uWjJA"},"source":["#### 6. Analyse des requêtes (flag)\n","\n","- Impact des requêtes sur la distribution des sentiments \n","- Identification des requêtes les plus fréquentes "]},{"cell_type":"code","execution_count":17,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":146},"id":"mfq4kgglWjJA","executionInfo":{"status":"ok","timestamp":1751537469612,"user_tz":-120,"elapsed":141,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"e6d59106-48f9-4043-f59a-1ec3ac4e836c"},"outputs":[{"output_type":"execute_result","data":{"text/plain":["flag\n","NO_QUERY 1600000\n","Name: count, dtype: int64"],"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
count
\n","
\n","
\n","
flag
\n","
\n","
\n"," \n"," \n","
\n","
NO_QUERY
\n","
1600000
\n","
\n"," \n","
\n","
"]},"metadata":{},"execution_count":17}],"source":["df['flag'].value_counts()"]},{"cell_type":"markdown","metadata":{"id":"u6Ux57gmWjJA"},"source":["#### 7. Analyse de la longueur des tweets (caractères et mots)\n"," - Visualisation de la distribution des longueurs des tweets \n"," - Gestion des caractères HTML dans les tweets \n"," - Nettoyage des tweets trop longs et souvent difficilement compréhensibles "]},{"cell_type":"code","execution_count":18,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":567},"id":"c4zSoFysWjJA","executionInfo":{"status":"ok","timestamp":1751537483698,"user_tz":-120,"elapsed":14085,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"f80a862b-e45d-416c-966c-524de732b6c5"},"outputs":[{"output_type":"stream","name":"stdout","text":["Longueur moyenne des tweets: 74.09 caractères\n","Nombre moyen de mots par tweet: 13.18 mots\n"]},{"output_type":"display_data","data":{"text/plain":["
"],"image/png":"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3FPiPsPCwtS5c2e9/fbbxe6TvJq8usowQAWQZEpzug0aNMhIMs8//3yR5zdp0sRj24cffmjsdrux2WymU6dOZsiQIeaOO+4wzZs3N5LMjz/+aIwxZurUqebmm282kkxcXJwZPny49d9XX31ljDHmyy+/NJJM7969TcOGDU29evXMoEGDTN++fc0///lPY4wxzz33nJFk3nzzTY84unbtaiSZcePGGZvNZm699VYzZMgQEx0dbSSZhg0bmgMHDng8Z/jw4UaS+fLLL0t8vy483tIcw48//mgkma5duxbZ3+jRo40kExwcbHr37m0GDRpkHA6HkWRuvPFGc+rUqWLje+yxx4yfn5/p1KmTSUxMNE6n00gytWrVMocPHy429uKsX7/ehIWFGUmmbdu2ZsiQISYhIcHYbDYzduxYI8kMHz682PfV/Tle6GLHWpImTZoYSeaJJ54wgYGBpmfPnqZ///6mTp06RpK55ZZbjMvl8njOwYMHTbNmzYwk07hxYzN48GDTvXt34+fnZySZ1157rcjruD+7/v37m4iICHPPPfeYnj17mqCgICPJvPHGG2bBggXG39/fdOnSxQwaNMhERUUZSaZLly5FYijL+eU+Vx988EETEBBg2rRpY4YMGWJuvfVWs3nzZmOMMTNmzDB2u93Y7XbTqVMnc++995rY2FgjydSuXdts37691O9tWT7fc+fOmaFDhxpJJiwszHTr1s3079/fNGrUyEgyHTt2NHl5eaV6fff5cOONN5pOnTqZOnXqmEGDBplu3boZu91u/Pz8zIoVK8xrr71m/P39zW233Wb69+9vatWqZSSZYcOGFdlnamqq9TvSsmVLM2TIEHPTTTcZScbf398kJydbfRcvXmwGDhxoJJm6det6/H7OmjXLGGPM/v37Tc2aNY0kc91115mBAweae+65x8THxxubzVbkulIS92c7atQoExgYaFq3bm2GDBlirr/+eiPJBAYGms8++8zjOadPn7Z+b2+55RYzePBgc/vtt5vQ0NBiP5sLX+di51BxZs2aZXr16mUkmebNm3u8F4sXLzbGGHPrrbcW+d0+d+6cqVGjhnUMF16TsrOzjd1uN23atPF4rV27dlnnS3R0tOnXr5/p3r27dVyvvvpqkfi++eYb63VatmxpBgwYYG655Rbj7+9v/Pz8zPvvv39ZxwLAt5Bvkm+Sb5Jv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mjNnTqme99e//lVHjhwpsn3ZsmWS/vvNovTfb8d27dpVDhEXb/78+dbIDen8xeh3v/udTp06pb59+3rMYeO+UM6cOVM///yztX3Tpk169tlni91/WY9hwoQJkqTJkyd7fPt34sQJjR8/XsYYPfLII1f1do2YmBj98MMPevHFFz3a/vnPf+rbb78t9nnu92jatGnKy8uztq9cuVJ/+9vfrkqsF2rWrJn69OmjEydO6Le//a0KCgqstm+//VYzZ86Un5+fxo0bd9VjkS7v/LqUiRMnym6368EHH/SYmN7t5MmTeuONN4qdj+qXyvL5BgUF6cknn9SJEyc0YMCAYr+VzsjI0Lx580p9TOWpW7duateunfbu3atnn33WIyldvHixFi1apLCwMD300EPWdofDoYCAAP3www/FJn3z5s0rNoH85JNPZIzxuF6Vxt69ezVlyhSPbf/617/07bffqm7duh7fkrsXPvnHP/7h0X/hwoWaO3fuZb1uaZTmWuWef2vfvn1avny5Ne+WW7du3bRu3Tpt2rRJMTExRW7VGjhwoFq3bq13331XL7zwQpG5+Ywx+vrrr/X1119b2x555BHVqVNHr7zyiv71r38V+aOvsLBQn332mcfnVBH/dgCoGOSb5JvFId/0RL5ZspEjR8rhcOiTTz7R3/72tyJFy++++04//fSTpPNTMtjtdq1cudJjUaozZ87o0UcfLXMRuSw53VNPPSVJeuyxx5SamurRdubMmSIF5AYNGujo0aPFfonQqVMn9ejRQ+vXr9eoUaOK7ZOSkqKPP/64tIdk7fPrr7/WuHHjlJubW6TP5s2b9emnn1qPyas9kVdf4wxQASQZSWb48OFm+PDh5oEHHjD9+vUzrVq1MjabzUgy1113nVm/fn2Jz2/SpInHtoiICGO32018fLxJTEw09957r3E6nUaSqVmzpklLS7P6nj592tSpU8dIMl27djUPPvigefjhh83XX39tjDHmyy+/tOIryXPPPWckmTfffNNje9euXY0kM27cOGOz2UzXrl3NkCFDTNOmTY0k06BBA7Nv3z6P57hcLut5derUMf379ze33HKLCQwMNI8//nixx3upY/jxxx+ttl8aPXq0kWRCQkJMnz59zL333mtq165tJJnOnTubU6dOefQfPny4kWS+/PLLYt+L4uK7mO+++85Uq1bNSDLt2rUz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grR//35t3rzZaqtRo4ZCQkJ09uxZa0ojwBso2gIAAOCa98UXX6hr164aNmyYTpw4UaS9SZMm2rRp02XvNzk5+aLtDodDU6ZMueR+ateuraeffvqyXx+42tzzPtarV0+HDh3Sli1brLZatWqpXr16OnLkiHbt2qVWrVp5MVIAKL309HS5XC6dPn1ap0+f9mg7fvy4Rz/mtIW3lGvR9ujRoyooKGDuLQAAAPiUn3/+WU6ns8T2oKAg5eXlVWBEQOWwc+dOSecXzouLi9MjjzyiqKgoZWRkaOnSpdbotJ07d1K0BVBpXFiYLY9+wNVQpqLtsmXLlJaWpv/5n/+xtr3++utavXq1JKlp06Z6+umnmfsDAIBrTGFhoVauXKnMzEzVrl1b3bt3l78/N+7A94WHh3ssoPRLe/bskcPhqMCIgMrBGCNJat68ucaPH29NgeB+PHXqVO3Zs8fqBwCVQW5urvWzn5+frr/+ekVHR2vv3r3asGGDzp07V6QfUNHKNOnQypUrPQqymzZt0urVq3X77bfroYce0tGjR7VgwYJyCxIAAHhfcnKyxowZo/nz52vlypWaP3++xowZc8nbwwFf0KlTJ61YsUJHjx4t0rZ582atWrVKN954oxciA3xbtWrVJElnz54ttt293d0PACqDC4uxr732mqKjo5WZmano6Gi99tprxfYDKlqZhsZkZmYqKirKevztt9+qTp06GjVqlCQpOztb//nPf8onQgAA4HXJycn67LPPFB4erv79+ys2NlapqalavHixPvvsM0lSYmKil6MESpaYmKht27bpySeftOamW7JkiebPn6+0tDQ1bdpU/fv393KUgO8JDw+XJB08eFBJSUnq3bu3NT3CsmXLlJGR4dEPACqD7du3Wz//9re/9WibP39+sf2AilYu9zOmpqbq+uuvtx7Xrl1b2dnZ5bFrAADgZYWFhVqxYoXCw8P16quvWtMh3Hrrrbrpppv0xBNPaMWKFRowYABTJcBnhYaG6qWXXtJHH32k7777ToGBgdq+fbvq1aune++9V3fffbcCAwO9HSbgc2rUqGH9vGPHDo8V1i/8nbmwHwD4OpvN5vHzhVO8XPj4wn5ARSvTX1b169fX+vXr1bNnT23atEnHjh1TfHy81X7s2DFujwEA4BqxcuVKuVwu9e/fv0hR1t/fX/369dO8efO0cuVK9ezZ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7bJG2P7www86d+6cGjVqpLZt2yoxMZE7YYBiuFyucu0HAL7gwi+dYmJidOLECZ06dUrVqlVT9erVtXPnziL9gIpWpqJtv3799Le//U1PP/20evXqZY1OOHTokFasWKF9+/bpd7/7XbkGCvg6p9Mph8OhpUuXesxpK51PYpctWyaHw8E3dQAqncTERH355Zdavny57rrrLo8pEvLz861byxMTE70VInBJDz/8sCSpWbNmatWqle6++27FxMQoLCzMy5EBvm3Xrl3Wz23btrVWXA8NDVV+fr62bt1q9WvTpo23wgSAy7JixQrr5z179ig/P1/S+WlfLsx1V6xYodjY2AqPD5DKWLS98cYbdfbsWb377ruaNWuWR1t4eLjGjBmjzp07l0uAQGVht9uVmJiomTNnKikpSb1791ZUVJQyMjK0bNkypaamasyYMSxCBqDSCQwMVPv27bVp0yaNHz9eLVq0UGRkpLKzs5Wenq5z586pffv2LEIGnxYUFKTTp08rJydH2dnZysnJUW5uLkVb4BLcc9a2atVK27dv9xhRa7fbFRMTo507d3osUAYAvs698FjPnj21YcMGHTt2zGoLCwtTQkKCVqxYUeICZUBFsBljTFmffO7cOf3www/W/F8Oh0PNmzcvMkG9L8rMzFRBQYG3w8A1KCUlRcnJyR7z4jkcDiUmJiohIcGLkQHAlXnqqaeUmZlZZHvt2rX15z//2QsR4VoXEBCg2rVrl8u+jDHat2+fdu7caU2RkJ2drfDwcLVs2VKtWrVSTExMsVMcVSbkuChvH3zwgZYtWyZJio2NVbt27RQYGKj8/Hxt2bJFqampkqTevXsXO4UOAPiiefPmadWqVdb17Jfc27t166YHHnjACxHiWlbaHLdMI23d/Pz85HQ6ud0buEBCQoLi4+OVlpamnJwcRUREyOl0MsIWQKWWnJyszMxMhYWFeSy4mJGRoczMTCUnJzM9AnyazWZTdHS0oqOjdccdd0iSjhw5oi1btmjZsmVav369bDab3n//fS9HCviWmJgYq2grSY0bN7buJtuyZYtHPwCoLAYPHqxVq1YVW7CVZG0fPHhwRYYFeCh10fbkyZOXvXNuN0NV5b5VDACuBYWFhVqxYoXCw8P16quveixCWlhYqCeeeEIrVqzQgAEDiixQCviaM2fOKC0tTTt27NCOHTuUnp6ugoIC2e12NW3a1NvhAT7nwoEH27dvt0bWSvK45jNAAQCA8lXqv6zcizdcjvnz51/2cwAAgG9ZuXKlXC6X+vfvX6Qo6+/vr379+mnevHlauXKlevbs6aUogaIGDx6sCRMmqEuXLpo7d6527NihvXv3yuVyKTAwUNddd53uvvtutWrVSk6nU0FBQd4OGfA5ubm51s+FhYUebRc+vrAfAPi69957r9T9hg8ffpWjAYp3WcNhAgMDFR8fr0aNGl2teAAAgI9xz2Nb0sq5cXFxmjdvXrHz3QK+YvXq1WrZsqVuuukmtWrVSk2bNq0U6zAA3hYREWH9HBAQ4DFn8oVzQV7YDwB83Y4dO6yfq1WrJn9/f+Xn5yswMFCFhYXWAmQX9gMqWqmLtvfcc4+++eYbrV27VocPH1aXLl108803y+FwXM34AACAl7knyU9NTdWtt95apH3z5s0e/QBfNGfOHG+HAFRKLVq0kN1uV1hYmKZOnar//Oc/yszMVO3atXXrrbfq6aef1smTJ9WiRQtvhwoApZaTk2P97C7QStLp06dL7AdUtFIXbYcOHaqhQ4dq165dWrNmjT7++GO99957atmypbp06aIbb7yROWyB/y8/P1/Jyck6evSo6tatq8TERAUGBno7LAAok+7du2vBggVavHixbrrppiJz2i5ZskR2u13du3f3YpQAgKshPT1dLpdLubm5+t3vfuexaM/ixYutx+np6azpAKBSstlsatSokXX3wIEDB2SM8XZYwOVNjyBJLVu2VMuWLfXggw9q06ZNWrNmjebNm6c333xTsbGxGjhwoK677rqrEStQKUyfPl2bNm2yHm/fvl1ffvml2rdvrwkTJngvMAAoI39/f/Xo0UOfffaZnnjiCfXr109xcXHavHmzlixZotzcXPXq1YtFyOCTFi1apC+++KJUfW02m5599tmrHBFQuZR2lBmj0QBUJtWqVbO+dDLGaP/+/SX2A7ylzH9d2e12dejQQR06dFBWVpZmzJih77//Xi1atKBoiyrLXbD19/dXz5491aVLF61Zs0bLly/Xpk2bNH36dAq3ACqlxMRESdKKFSs0b948zZs3T9L5fKBXr15WO+BrTp8+LZvN5u0wgEorPDxc0vlpEp544gmlp6crJydHERERatGihV599VWlp6db/QCgMoiIiNDx48dL1Q/wljIXbc+ePav169dr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OWV6r476/vvvNX/+fN9yUVGRpOP9cm5urn766Sd98cUXqqurU+/evTVs2DBNmzatxdQGd911lwoLC7VgwQJZLBaNHj1at912m1/rBAAAQNfSrtB28uTJOnTokFavXq3Vq1crJCREknxfNcvMzNSkSZP8VyUAAADQAT169GjTDR/O1dChQ1VcXHza7Q8++OBZj+FwOHT33Xf7sywAAAB0ce0KbUNCQpSfn6+srCxt2rRJFRUVkqSYmBiNGDFCiYmJfi0SAAAA6IixY8dq7dq1+s1vfmN0KQAAAMBZtSu0PSExMZGAFgAAAKZ3ySWXaPv27SooKNCECRPUp08f37fFTnbiZmAAAACAkToU2gIAAABdwdy5c30/b968+bT7vfXWW4EoBwAAADijNoe2c+bMOacDWywW/elPfzrnggAAAAB/u/POO40uAQAAAGizNoe2DodDFovlrPu5XC4dOHCgQ0UBAAAA/jRu3DijSwAAAADarM2h7bx588643eVyaeXKldq1a5dCQkI0duzYjtYGAAAA+F19fb0qKyslSdHR0erZs6fBFQEAAAAtdXhO2xNh7erVq+XxeDR27FhNnjxZcXFx/qgPAAAA8Ivdu3frtdde03fffafm5mZJUkhIiFJTU5Wdna0LL7zQ4AoBAACA49od2rYW1t5www06//zz/VkfAAAA0GG7du3SvHnzZLVaNX78ePXt21eStH//fv33f/+3HnnkEc2bN0/JyckGVwoAAAC0I7T997D217/+tW644QbFxsZ2Rn0AAABAh7355pvq3bu3Hn30UTmdzhbbbrzxRj388MN644039PDDDxtTIAAAAHCSNoe2VVVVvrC2qalJmZmZmjx5MmEtAAAATG/Xrl2aMmXKKYGtJDmdTk2YMEFvv/124AsDAAAAWtHm0PYPf/iD3G63kpKSNGnSJMXGxqq2tla1tbWnfczAgQP9UiQAAADQERaLRU1NTafd3tzcLIvFEsCKAAAAgNNrc2jrdrslSXv37tVf/vKXNj3mrbfeal9VAAAAgB8NHjxYf/3rX3XZZZcpJiamxbbKykp98sknSk1NNag6AAAAoKU2h7Z33nlnZ9YBAAAAdJqbbrpJjzzyiO655x5lZGQoPj5eknTgwAGtX79eoaGhuummmwyuEgAAADiuzaHtuHHjOrEMAAAAoPMMGDBAjz/+uN544w2t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MJEQowsAAAAAAAAAAPwLoS0AAAAAAAAAmAihLQAAAAAAAACYCKEtAAAAAAAAAJgIoS0AAAAAAAAAmAihLQB0QUuWLFF+fr7RZQAAAAB+Q48LAP9iNboAAOgKfvrpJ61YsULff/+9qqur5XA41K9fP40cOVJXXXVVp5zzyJEj+vTTT5WRkaGkpKROOUdnamho0LvvvquhQ4dq6NChRpcDAACAf0OPe+7ocQEECqEtAJzFjh07NH/+fEVHR+uKK66Q0+nU4cOHtWvXLn344Yed1tBWVVWppKREsbGxpzS0t99+u7xeb6ec118aGhpUUlIiSTS0AAAAJkOP2z70uAAChdAWAM7inXfeUXh4uBYuXKiIiIgW26qrqw2pyWpl+AYAAED70eMCgLlZvGb/GAsADHbPPfeoV69eeuSRR86675dffqlVq1Zp3759stvtSk9PV3Z2tqKjo337zJs3T0ePHtV//ud/qrCwULt27VJERISuvvpqXXfddZKkbdu2af78+accPy8vT+PGjdOSJUu0fft2LVmyRJJUXl6u2bNnKzs7W3a7XR988IFcLpdSU1N1xx13qE+fPnr77bf16aef6ujRo0pPT1deXp4cDkeL42/atEmlpaX64YcfZLFYNGTIEGVnZ+uCCy7w7bNkyRL9z//8j55++mm99NJL2rJli+x2uzIzM5Wdna2QkBBfPf9uypQpmjp1att+8QAAAOg09Lj0uADMjRuRAcBZxMTEaM+ePfrpp5/OuN8777yjJUuWKD4+XjNnztQ111yjLVu26JFHHlFdXV2LfWtra1VQUKDExETdeuut6tu3r1577TVt2rRJktS3b19f4zdhwgTNnj1bs2fP1pAhQ85Yw1dffaVPPvlEv/3tb5WVlaXt27frL3/5i9588019++23uu666zRhwgRt2LBBRUVFLR775Zdf6oknnlDPnj11yy236IYbbtC+ffs0d+5clZeXt9i3ublZBQUFOu+88zRjxgxddNFF+uCDD/Tpp59KkiIjI5WTkyNJysjI8NU/evTos/y2AQAAEAj0uPS4AMyN7x4AwFlce+21evzxx3XvvfcqOTlZqampSktL09ChQ31f4aqoqFBxcbGmTZumyZMn+x6bkZGh++67T3/9619brK+qqtLs2bP161//WpI0fvx45eXl6bPPPtOIESPkdDo1YsQIFRcXKyUlxbff2Rw5ckTPPPOMwsPDJR1vPFeuXKnGxkY98cQTCg0NlSTV1NToq6++Um5urmw2m+rr6/Xyyy9r/Pjxuv32233Hy8zM1D333KPS0tIW691ut371q19pypQpkqSJEyfqvvvu02effaaJEyeqZ8+euuSSS/TSSy+pf//+ba4fAAAAgUGPS48LwNy40hYAzmLYsGF67LHHNHLkSP3444967733VFBQoDvuuEPr16+XJP3zn/+U1+vVpZdeqpqaGt9/TqdTcXFx2rZtW4tj9uzZU2PHjvUtW61WJScnn/Jp/7m65JJLfM2sJA0aNEiSNHbsWF8ze2K9x+PRkSNHJEmbN29WXV2dxowZ06L+kJAQDRo06JT6peNN7MlSU1N16NChDtUPAACAwKDHpccFYG5caQsAbZCcnKw5c+bI4/Fo7969Wrt2rVatWqXFixfrT3/6k8rKyuT1enXXXXe1+vh/v6lCnz59ZLFYWqyLiIjQjz/+2KE6T55XTJKvuT3d+hNfaTt48KAkacGCBa0eNywsrMWyzWZTZGRki3URERGnfEUOAAAA5kWPS48LwLwIbQHgHJy4WiA5OVkJCQl6/vnn9fXXX6u5uVkWi0X333+/QkJO/RJDz549Wyy3to8/nO64p1t/4l6UJ/6dPXu2nE7nKfudfAXDmY4HAACAroce98zHAwAjENoCQDsNHDhQ0vG5u+Li4uT1ehUbG6uEhAS/HP/fr1LoTOeff74kKSoqSsOGDfPLMQNZPwAAAPyDHvfM6HEBBAofIwHAWWzdutX3Kf3JTtwFNyEhQRkZGQoJCVFJSckp+3q9Xh09evScz9ujRw9JCsjXsdLT0xUWFqbS0lJ5PJ5TttfU1JzzMU/Uf+zYsQ7XBwAAAP+ix6XHBWBuXGkLAGfx8ssvq6GhQRkZGUpISJDH49HOnTu1Zs0axcTE6PLLL1dERISmT5+u119/XRUVFRo1apR69uyp8vJyrVu3TldccYX+4z/+45zOe/755ysiIkJ/+9vfFBYWph49emjQoEGKjY31+3MMDw9Xbm6unn32Wd13330aM2aMIiMjVVlZqY0bN2rw4MH6/e9/f07HtNvt6tevn9asWaP4+Hg5HA5dcMEF6t+/v9/rBwAAwLmhx6XHBWBuhLYAcBYzZszQ119/rU2bNunTTz+Vx+NRdHS0Jk6cqBtuuEERERGSpOuvv17x8fFatWqVVqxYIen4zRGGDRumkSNHnvN5rVar8vPz9frrr+vFF19UU1OT8vLyOqWhlaTLLrtMvXr10sqVK/Xee+/J7Xard+/eGjJkiC6//PJ2HfOOO+7QsmXL9Morr8jj8WjKlCk0tAAAACZAj0uPC8DcLN7Wvg8BAAAAAAAAADAEc9oCAAAAAAAAgIkQ2gIAAAAAAACAiRDaAgAAAAAAAICJENoCAAAAAAAAgIkQ2gIAAAAAAACAiRDaAgAAAAAAAICJENoCAAAAAAAAgIkQ2gIAAAAAAACAiRDaAgAAAAAAAICJENoCAAAAAAAAgIkQ2gIAAAAAAACAiRDaAgAAAAAAAICJENoCAAAAAAAAgIn8H9tk6dtSUiotAAAAAElFTkSuQmCC\n"},"metadata":{}}],"source":["def analyser_texte_tweets(df):\n"," \"\"\"Analyse les caractéristiques textuelles des tweets\"\"\"\n"," # Calcul de la longueur des tweets\n"," df['text_length'] = df['text'].apply(len)\n"," df['word_count'] = df['text'].apply(lambda x: len(str(x).split()))\n","\n"," print(f\"Longueur moyenne des tweets: {df['text_length'].mean():.2f} caractères\")\n"," print(f\"Nombre moyen de mots par tweet: {df['word_count'].mean():.2f} mots\")\n","\n"," # Afficher word_count et text_length côte à côte avec seaborn\n"," plt.figure(figsize=(14, 6))\n","\n"," # Distribution de la longueur des tweets par sentiment\n"," plt.subplot(1, 2, 2)\n"," sns.boxplot(x='sentiment', y='text_length', data=df, hue='sentiment')\n"," plt.title('Distribution du nombre de caractères par tweet', fontsize=15)\n"," plt.xlabel('Sentiment')\n"," plt.ylabel('Longueur du Tweet')\n","\n"," # Distribution du nombre de mots par sentiment\n"," plt.subplot(1, 2, 1)\n"," sns.boxplot(x='sentiment', y='word_count', data=df, hue='sentiment')\n"," plt.title('Distribution du nombre de mots par tweet', fontsize=15)\n"," plt.xlabel('Sentiment')\n"," plt.ylabel('Nombre de Mots')\n","\n"," plt.tight_layout()\n"," plt.show()\n","\n","analyser_texte_tweets(df)"]},{"cell_type":"code","source":["more_than_140_ch_before_htmlunescape = df[df['text_length'] > 140]['text']\n","print('More than 140 characters before html process:', len(more_than_140_ch_before_htmlunescape))\n","more_than_140_ch_before_htmlunescape.head(10).values"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":0},"id":"vjIRh70ycDG1","executionInfo":{"status":"ok","timestamp":1751537483733,"user_tz":-120,"elapsed":32,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"bfd13510-3f50-4460-b2f9-6a99f23a1574"},"execution_count":19,"outputs":[{"output_type":"stream","name":"stdout","text":["More than 140 characters before html process: 17174\n"]},{"output_type":"execute_result","data":{"text/plain":["array([\"Awwh babs... you look so sad underneith that shop entrance of "Yesterday's Musik" O-: I like the look of the new transformer movie \",\n"," 'Tuesday�ll start with reflection �n then a lecture in Stress reducing techniques. That sure might become very useful for us accompaniers ',\n"," \"Whinging. My client&boss don't understand English well. Rewrote some text unreadable. It's written by v. good writer&reviewed correctly. \",\n"," '@TheLeagueSF Not Fun & Furious? The new mantra for the Bay 2 Breakers? It was getting 2 rambunctious;the city overreacted & clamped down ',\n"," \"#3 woke up and was having an accident - "It's pushing, it's pushing!" he was crying because he couldn't stop from wetting his pants. \",\n"," 'My bathtub drain is fired: it haz 1 job 2 do, & it iz FAIL. I got all Drano on its ass, & iz STILL NOT DRAINING. I wanna shower, dangit!! ',\n"," \"pears & Brie, bottle of Cabernet, and "Win a Date With Tad Hamilton"... oh gawwd my life flashed forward to when I'm 40 with my 75 cats \",\n"," 'Have an invite for "Healthy Dining" session at Ashok Hotel today with Exec Chef R.Chopra but damn workload - will have to skip it! ',\n"," 'Damnit I was really digging this season of Reaper http://www.tv.com/story/13720.html?ref_story_id=13720&ref_type=1101&ref_name=story',\n"," \"Why do I keep looking...I know that what I read is gonna hurt but I still look! I guess it's just a girl thing & I need to get over him. \"],\n"," dtype=object)"]},"metadata":{},"execution_count":19}]},{"cell_type":"markdown","source":["Il est assez clair que l'on rencontre un problème d'encodage html ce qui augmente artificiellement la longueur des tweets dans notre dataset."],"metadata":{"id":"jU4bygO9hhXj"}},{"cell_type":"code","source":["import html\n","# Exemple de nettoyage d'une colonne 'text' dans votre DataFrame\n","df[df['text_length'] > 140]['text'].apply(html.unescape).head(10).values"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":0},"id":"7fvM0aAUfZ_l","executionInfo":{"status":"ok","timestamp":1751537483811,"user_tz":-120,"elapsed":77,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"29977ed3-8334-43cd-fc8b-4b111fbb66ed"},"execution_count":20,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array(['Awwh babs... you look so sad underneith that shop entrance of \"Yesterday\\'s Musik\" O-: I like the look of the new transformer movie ',\n"," 'Tuesday�ll start with reflection �n then a lecture in Stress reducing techniques. That sure might become very useful for us accompaniers ',\n"," \"Whinging. My client&boss don't understand English well. Rewrote some text unreadable. It's written by v. good writer&reviewed correctly. \",\n"," '@TheLeagueSF Not Fun & Furious? The new mantra for the Bay 2 Breakers? It was getting 2 rambunctious;the city overreacted & clamped down ',\n"," '#3 woke up and was having an accident - \"It\\'s pushing, it\\'s pushing!\" he was crying because he couldn\\'t stop from wetting his pants. ',\n"," 'My bathtub drain is fired: it haz 1 job 2 do, & it iz FAIL. I got all Drano on its ass, & iz STILL NOT DRAINING. I wanna shower, dangit!! ',\n"," 'pears & Brie, bottle of Cabernet, and \"Win a Date With Tad Hamilton\"... oh gawwd my life flashed forward to when I\\'m 40 with my 75 cats ',\n"," 'Have an invite for \"Healthy Dining\" session at Ashok Hotel today with Exec Chef R.Chopra but damn workload - will have to skip it! ',\n"," 'Damnit I was really digging this season of Reaper http://www.tv.com/story/13720.html?ref_story_id=13720&ref_type=1101&ref_name=story',\n"," \"Why do I keep looking...I know that what I read is gonna hurt but I still look! I guess it's just a girl thing & I need to get over him. \"],\n"," dtype=object)"]},"metadata":{},"execution_count":20}]},{"cell_type":"code","source":["df['text'] = df['text'].apply(html.unescape)"],"metadata":{"id":"BoGtOFgUg-en","executionInfo":{"status":"ok","timestamp":1751537484338,"user_tz":-120,"elapsed":527,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"execution_count":21,"outputs":[]},{"cell_type":"code","source":["analyser_texte_tweets(df)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":567},"id":"nE0cJqRHhq1c","executionInfo":{"status":"ok","timestamp":1751537498442,"user_tz":-120,"elapsed":14105,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"1fad0b6a-c11d-46d7-83c6-272bd0d03a6d"},"execution_count":22,"outputs":[{"output_type":"stream","name":"stdout","text":["Longueur moyenne des tweets: 73.70 caractères\n","Nombre moyen de mots par tweet: 13.18 mots\n"]},{"output_type":"display_data","data":{"text/plain":["
"],"image/png":"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y9xncHCwunTporfffrvUfTKuZlxdYxigCkgy5TndBg8ebCSZF154ocT9mzVr5rbto48+Mlar1VgsFtO5c2czdOhQc/vtt5vo6Ggjyfz888/GGGOmTp1qbrjhBiPJxMfHmxEjRrj+W7t2rTHGmC+++MJIMn369DGNGzc2kZGRZvDgwaZfv37m//7v/4wxxjz//PNGknnzzTfd4ujevbuRZMaPH28sFou56aabzNChQ03z5s2NJNO4cWOzf/9+t/uMGDHCSDJffPFFmc/X+cdbnmP4+eefjSTTvXv3EvsbM2aMkWQCAwNNnz59zODBg43NZjOSzPXXX29OnjxZanyPPfaY8fHxMZ07dzZJSUnGbrcbSaZevXrml19+KTX20mzcuNEEBwcbSaZdu3Zm6NChJjEx0VgsFjNu3DgjyYwYMaLU59X5Op7vQsdalmbNmhlJ5oknnjD+/v6mV69eZsCAAaZ+/fpGkrnxxhuNw+Fwu8+BAwdMy5YtjSTTtGlTM2TIENOzZ0/j4+NjJJnXX3+9xOM4X7sBAwaYsLAwc/fdd5tevXqZgIAAI8m88cYbZsGCBcbX19d069bNDB482ERFRRlJplu3biViqMj55TxXH3jgAePn52fatm1rhg4dam666SazefNmY4wxM2bMMFar1VitVtO5c2dzzz33mLi4OCPJREREmG3btpX7ua3I63v27FkzbNgwI8kEBwebHj16mAEDBpgmTZoYSaZTp06moKCgXI/vPB+uv/5607lzZ1O/fn0zePBg06NHD2O1Wo2Pj49ZuXKlef31142vr6+55ZZbzIABA0y9evWMJDN8+PAS+0xPT3e9R1q1amWGDh1qunbtaiQZX19fk5qa6uq7ePFiM2jQICPJNGjQwO39OWvWLGOMMfv27TN169Y1ksw111xjBg0aZO6++26TkJBgLBZLic+Vsjhf29GjRxt/f3/Tpk0bM3ToUHPttdcaScbf3998+umnbvc5deqU63174403miFDhphbb73VBAUFlfranP84FzqHSjNr1izTu3dvI8lER0e7PReLFy82xhhz0003lXhvnz171tSpU8d1DOd/JuXm5hqr1Wratm3r9lg7d+50nS/Nmzc3/fv3Nz179nQd12uvvVYivq+//tr1OK1atTIDBw40N954o/H19TU+Pj7m/fffv6RjAeBdGG8y3mS8yXjz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OXPmqHbt2pozZ0657ve3v/1Nhw4dKrF92bJlkv77y6L031/Hdu7cWQkRl27+/PmumRvSuQ+jP/7xjzp58qT69evnVsPG+UGZkpKiI0eOuLZv2rRJzz33XKn7r+gxPProo5KkyZMnu/36d/z4cU2YMEHGGD388MNX9HKN2NhY7dq1Sy+99JJb2//93//pm2++KfV+zudo2rRpKigocG1ftWqV/v73v1+RWM/XsmVL9e3bV8ePH9cf/vAHFRUVudq++eYbpaSkyMfHR+PHj7/isUiXdn5dzMSJE2W1WvXAAw+4FaZ3OnHihN54441S61H9VkVe34CAAD355JM6fvy4Bg4cWOqv0llZWZo3b165j6ky9ejRQ+3bt9eePXv03HPPuQ1KFy9erEWLFik4OFgPPviga7vNZpOfn5927dpV6qBv3rx5pQ4gP/nkExlj3D6vymPPnj2aMmWK27Z//etf+uabb9SgQQO3X8mdC5/885//dOu/cOFCzZ0795IetzzK81nlrL+1d+9erVixwlV3y6lHjx7asGGDNm3apNjY2BKXag0aNEht2rTRu+++qxdffLFEbT5jjL766it99dVXrm0PP/yw6tevr1dffVX/+te/SnzpKy4u1qeffur2OlXFvx0AqgbjTcabpWG86Y7xZtlGjRolm82mTz75RH//+99LJC2//fZb/frrr5LOlWSwWq1atWqV26JUp0+f1iOPPFLhJHJFxnRPPfWUJOmxxx5Tenq6W9vp06dLJJAbNWqkw4cPl/ojQufOnXXbbbdp48aNGj16dKl90tLStGTJkvIekmufX331lcaPH6/8/PwSfTZv3qzly5e7bjOudse4+ipngCogyUgyI0aMMCNGjDD333+/6d+/v2ndurWxWCxGkrnmmmvMxo0by7x/s2bN3LaFhYUZq9VqEhISTFJSkrnnnnuM3W43kkzdunVNRkaGq++pU6dM/fr1jSTTvXt388ADD5iHHnrIfPXVV8YYY7744gtXfGV5/vnnjSTz5ptvum3v3r27kWTGjx9vLBaL6d69uxk6dKhp0aKFkWQaNWpk9u7d63Yfh8Phul/9+vXNgAEDzI033mj8/f3N448/XurxXuwYfv75Z1fbb40ZM8ZIMrVq1TJ9+/Y199xzj4mIiDCSTJcuXczJkyfd+o8YMcJIMl988UWpz0Vp8V3It99+a2rXrm0kmfbt25thw4aZ6667zlgsFjNu3LhSn/uCggLTqlUrI8k0bdrUDBo0yHTu3NlYrVbXc1TasZalWbNmpqyPvLJe/wMHDrhex2bNmpmhQ4eaW265xfj4+BhJZtq0aSX2daHn5kLPa1kxVOT8KutcPV9KSorrONq1a2cGDhxohgwZYjp37mwCAgKMJHPs2LEy73++iry+Z8+eNffff7+RZPz9/U3nzp3N0KFDzcCBA03btm2NxWIx8fHx5Xr8C537xvz3Ofz5559LtL355ptGknn++efdtqenp5t69eoZSaZ169Zm2LBh5oYbbjCSjK+vr5k/f36Jfd15551Gkmnbtq25//77zUMPPWTeeOMNY4wx/fv3N5JMdHS0ufvuu82wYcNMly5djMViMVar1aSmppbrWJ2v7ejRo42fn59p27at6/mWZPz8/Mwnn3zidp81a9a4XuvExEQzbNgwc+211xpJZb6XynMOXUhcXJyRZK677jozcuRI89BDD5kPP/zQrc/EiRNd/za89tprbm3O10WSeeSRR0p9jIyMDNf7oH79+ubWW281w4cPN7169XJ9Vv7tb39zu88333xjbDabkWSaNGli7rjjDjN8+HDTs2dPEx4ebiSZxYsXX/KxAPAOjDcZbzLeZLx5vsocbxpz7vkLCQkxkkyLFi1MUlKSufPOO01MTIyRZH744QdX39GjR7u9HwYPHmwaNGhgbDabGTlyZKnP3YXOH2MqNqYzxphHH33USDI+Pj6mW7duZtiwYaZHjx4mPDy8xPE7+7Zo0cLce++95qGHHjKvvvqqq/3w4cMmISHBSDJhYWGme/fuZvjw4aZv376mcePGRpL5wx/+4LbPi72Xz99neHi46dGjh2ufTZo0KbFPxtWMq2sSkraoEs4PCed/vr6+pm7duqZdu3ZmxIgRZtGiRaa4uPiC9//tB/3cuXPN8OHDTatWrUxISIgJCQkxbdq0MY899pg5cOBAiX1s3LjR3HbbbSYsLMw1cHd+cFbGIPrnn382b775punQoYMJDAw09erVM/fff7/Zv39/qfvLzc01jzzyiGnQoIEJCAgwbdu2NSkpKWUe78WO4WKJq7lz55quXbua4OBgExgYaNq2bWtefvllU1BQUKJvZQ+ijTmXBLvzzjtNWFiYqV27trn++uvNkiVLLvjcHzhwwAwbNszUqVPH1KpV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9PR0JSUluRYoA4DqoLyLj7JIKTypQjNtb7jhBoWEhOj7779X7dq11bt3b/n4+EiSTpw4oeDgYN14442VGigAAPCMiIgISefKId10000l2jdv3uzWD/BWGzdu1LvvvqtffvlFkjRp0iS1a9dO+fn5eumllzR48GB16tTJw1EC3icxMVG9evXSypUrXZ/50rmEbq9evZSYmOjB6ADg0u3evbtS+wFXQoULz8XFxZU64yY4OFiPP/74ZQUFAAC8R8+ePbVgwQItXrxYXbt2dSuRUFxcrA8//FBWq1U9e/b0YJTAhX333Xf661//Krvdrm7dumnBggWuttDQUNWtW1erV68maQuUIi0tTStWrFC7du3UoEEDFRUVyc/PT4cPH9aKFSsUHR1N4hZAtXLmzJlK7QdcCRW6hmXIkCFat25dme1ff/21hgwZUuGgJOk///mPkpKS9NZbb7m2FRYWavbs2XrwwQd1//33669//SsLngEAcIX5+vrqtttuU35+vp544gmtXr1ax44d0+rVq/XEE08oPz9ft912G4uQwat98MEHatOmjV588UX17t27RLvdbtfPP//sgcgA7+ZwOJSamqqmTZvq4MGD+uyzz7RmzRp99tlnOnjwoJo2barU1FQ5HA5PhwoA5fbbkp6BgYHy8/NTYGDgBfsBVemKfLtyOByXtcJeZmamVq5cWaLg89tvv63vv/9ejz32mIKCgjRnzhxNmzZNL7744uWGDAAALiApKUmStHLlSs2bN0/z5s2TdO7S2N69e7vaAW+1b98+jRgxosz2sLAw5efnV2FEQPWQkZGhnJwc5eTkKD4+Xg8//LCioqKUlZWlpUuXusolZGRkKDY21sPRAkD51KpVy+22s859UVHRBfsBVanSq8UXFBRo06ZNCgkJqdD9T58+renTp+vhhx9W7dq13fa7atUqjRgxQu3atVPLli01btw47dy5UxkZGZUVPgAAKENSUpJSUlI0ZMgQ9ezZU0OGDFFKSgoJW1QLAQEBF1x47PDhwwoODq7CiIDq4dixY5Kk9u3ba8KECYqOjlZgYKCio6M1YcIEtWvXzq0fAFQH27dvr9R+wJVQ7pm2CxYs0MKFC123p0+frunTp5fZ/4477qhQQLNnz1ZCQoLi4uK0aNEi1/bdu3fr7Nmzat++vWtbVFSUbDabMjIyZLfbS91fUVGR2y8l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AQAAAJVqyJAhF2y32WwaNWpUFUUDAAAAXFiFkradO3dWUVGR/vCHP6h9+/aqW7eurFarWx+LxaIHHnigUoIEAAAALsegQYNksVjctlksFtWuXVsNGjRQfHy8fHx8PBQdAAAA4K5CSdtt27Zp1qxZKiwsVFpaWpn9SNoCAADAGyQlJXk6BAAAAKDcKpS0feONNxQUFKQ//elPiomJUVBQUGXHBQAAAAAAAAA1UoWStocOHdLw4cMVFxdX2fEAAAAAlW7mzJkXbLdYLPLz81O9evXUtm1b2e32KooMAAAAKKlCSdsmTZqooKCgsmMBAAAArogff/xRhYWFys/PlyTVrl1bknTy5ElJUmhoqBwOh06cOCFJ6tChgx577DEFBAR4JmAAAADUaBVK2t5///363//9X3Xo0EExMTGVHRMAAABQqZ5++mm9/PLLuueee3T77bcrODhYknTixAl98sknWr16tSZOnKjw8HAtWbJEH3zwgebPn6/f/e53Ho4cAAAANVGFkrYff/yxatWqpYkTJ6px48ay2WyyWq1ufSwWi5588slKCRIAAAC4HG+88YYSEhI0ePBgt+3BwcG65557dOzYMb3xxht69tlnlZSUpF9++UXffvstSVsAAAB4RIWStvv27ZMk2Ww2nT59WgcOHCjRx2KxXF5kAAAAQCX56aef1KVLlzLbmzdvrrVr17put279/7V371FR1/kfx18DMygwwahAgCZoiJghuqvYZi5m5m5Fv9JMrTDXFk4FbvXb469ON1OLzLO5281OnsKM0xUpzLLaNttq+9lvvZYXTl5S6+cFAWVAMGAG5veHP2ZlxRsM8/3CPB/ndOR7me/3PRzmM+9e853Pd4jWrVt31uOWlpZq1apV2rt3r6qqqjRnzhylp6d7ty9ZskRffvllq8ekpaXp4Ycf9i7X1tZq2bJl2rhxoywWi0aPHq1Zs2apZ8+e5/MUAQAA0I20K7RdsmSJr+sAAAAAOk1YWJi+++47TZw4sc3t3377rcLCwrzL9fX1Cg0NPetxGxoalJiYqPHjx+vpp59uc5/hw4crNzfXu2y1tm7Bn3vuOVVVVemRRx5RU1OTXnzxRS1dulT33nvvuTw1AAAAdEPtCm0BAACAruSqq67Su+++q8WLF2vixImKjY2VJJWVlenTTz/Vxo0bddNNN3n337x5sxITE8963BEj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pia5XC41NDR4Jy0HgM60adMmzZgxQ01NTfJ4PBozZoxGjx6tTZs2adCgQd79LrjgAsXHx+vAgQOSpGuuuUavvPKKtmzZotTUVI0ePVoJCQlGPQ0AwHmgxwXQ3dHjorsitAX+3yWXXKK0tDS9+eabGjdunHd9fX29JkyYoGuvvfaUx0RFRenQoUNnPXZ5ebkWLVqkq6++WtOnT5fdbtf333+vl156SW63m4YWgF8MHTpUOTk5slqt6tWrl4KDg7Vhw4azPu6qq65SWlqaNm3apC1btqikpES33367rrnmGj9UDQDoCHpcAN0dPS66K6ZHAE5y2223aePGjdq5c6d33YABA3TgwAHFxsae8p/ValV8fLyampq0b98+72PKyspUV1fnXd6zZ4+am5t1++23Kzk5WfHx8aqqqmp1bqvVqubm5k5/jgACV48ePRQbG6uoqCgFBwdLkvr27aumpibt2rXLu9+xY8d08OBB9evXz7suKipKEydO1Jw5c3T99ddrzZo1bZ6DsQwAzIceF0B3Ro+L7orQFjhJ//79NXbsWH388cfedTfccIN27NihgoIC7du3T4cOHdL69etVUFAg6cSbQWpqqpYuXardu3dr7969Wrp0qUJCQmSxWCSd+CpZU1OTPvnkEx0+fFhfffWV/va3v7U6d3R0tOrr67V161bV1NSooaHBf08cQMCKi4vTyJEjtXTpUn3//ffat2+fnn/+efXu3VsjR46UJC1fvlzffvutysvLtWfPHm3fvl19+/Zt83iMZQBgPvS4AAINPS66A6ZHAP7N1KlTtXbtWu9yQkKC5s2bp7fffltz586Vx+NRbGysfvWrX3n3mT17tl566SU99thjcjgcuuWWW7R//37ZbDZJUmJiom6//Xa9//77evPNNzVkyBDdeuuteuGFF7zHGDx4sK6++mo988wzOnbsmKZMmaKpU6f674kDCFi5ublavny5nnrqKbndbg0ZMkQPPvigrNYTbUJzc7MKCgp09OhRhYaGavjw4Zo5c2abx2IsAwBzoscFEGjocdHVWTwej8foIoDu5siRI7r77rv16KOPKjU11ehyAAAAgA6jxwUAwH+40hbwgW3btqm+vl79+/dXVVWVXn/9dUVHR2vIkCFGlwYAAAC0Cz0uAADGIbQFfMDtduutt97S4cOHFRoaquTkZN1zzz3er10AAAAA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\n"},"metadata":{}}]},{"cell_type":"code","source":["print('More than 140 characters after html process:', len(df[df['text_length'] > 140]['text']))"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":0},"id":"oqTsuGn1qcXa","executionInfo":{"status":"ok","timestamp":1751537498443,"user_tz":-120,"elapsed":8,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"eb34b09c-d1dc-4ebd-aff9-409f13d10cf4"},"execution_count":23,"outputs":[{"output_type":"stream","name":"stdout","text":["More than 140 characters after html process: 687\n"]}]},{"cell_type":"code","source":["df[df['text_length'] > 140]['text'].head(10).values"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":0},"id":"DH_s2HfR1EED","executionInfo":{"status":"ok","timestamp":1751537498450,"user_tz":-120,"elapsed":7,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"ce2ab598-c2cc-4e9b-bad7-d0e2e2ff6609"},"execution_count":24,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array(['Tuesday�ll start with reflection �n then a lecture in Stress reducing techniques. That sure might become very useful for us accompaniers ',\n"," \"When I get mine I�m going to do a tour of Copenhagen with it �;) Hmmph I can't top that .. must get thinking .. http://tinyurl.com/c2trgj\",\n"," 'http://tr.im/imOv �i, b�c H?i Tho?i th? l� gi� t? cu?c ??i r?i ( M�nh v?n c�n nh? c�i nh� t?p th? b� t� c?a b�c � ? ch? Tr?i ',\n"," '@NguyenNoir ??c h?t c? b? r?i. Th?ng Starr ?y l�c ??u m�nh r?t tr�ng ??i n� s? l� lo?i villain c?ng c?a, ai d� c�ng v? sau c�ng pathetic. ',\n"," 'Saturday�s Graze box finally arrived today. The grapes were mouldy after 3 days in GPO I�m considering cancelling my account altogether.',\n"," 'Buzz.vn: \\tTin t?c - ??c B�o : hjxhjx l�m th?t kh? n?y nh�n th�i l� m�n �i r?i ch? ??ng n�i g� ?.. http://tinyurl.com/dztqfo',\n"," 'Photo: ???? (Sweetness in the Salt) C� ai coi phim n�y ch?a, hay v� c?m ??ng ghia. Lyrics c?a nh?c th?t... http://tumblr.com/xmi1mmhzu',\n"," 'evdeyim cumartesi g�n� biraz hastay?m grip , at home at saturday cuz I m ill , flu , hapshuuuu , I cleaned my home eat lunch hi everybody',\n"," '@leokun87 Tao c?ng ?� v? BK, d� kh�ng y�u, nh?ng v?n c�n h?n Th??ng-H?i-s�nh-?i?u. M?t ?t z?i L?i h?t $ l�m t�c z?i. ??u t�c x?u qu�!!!',\n"," '1 ng�y m?t m?i v?t l?n v?i c�i Eclipse. Cu?i c�ng c?ng xong. Ch�n m?y b�c plugin, update m� kh�ng th�m test hay sao l�m queo m�y m�nh '],\n"," dtype=object)"]},"metadata":{},"execution_count":24}]},{"cell_type":"code","source":["# Filtrer les lignes où 'text_length' est supérieur à 140 et supprimer ces lignes\n","df = df[df['text_length'] <= 140].copy()\n","\n","# Afficher la nouvelle taille du DataFrame pour confirmation\n","print(f\"Nouvelle taille du DataFrame après suppression: {df.shape[0]} lignes, {df.shape[1]} colonnes.\")"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":0},"id":"WoIRCbHWqz8W","executionInfo":{"status":"ok","timestamp":1751537499391,"user_tz":-120,"elapsed":940,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"fe74a02f-f104-41df-f5bb-08f207a6aad4"},"execution_count":25,"outputs":[{"output_type":"stream","name":"stdout","text":["Nouvelle taille du DataFrame après suppression: 1599313 lignes, 15 colonnes.\n"]}]},{"cell_type":"markdown","source":["### Analyse Qualitative"],"metadata":{"id":"J8p054tk0X-B"}},{"cell_type":"markdown","metadata":{"id":"cnrONvWyWjJA"},"source":["#### 8. Analyse de caractéristiques distinctives et de l’impact de tokens spécifiques\n","\n","Cette section met en évidence plusieurs éléments textuels pouvant aider à différencier les sentiments exprimés dans les tweets. Ces observations peuvent être utilisées **à la fois comme features explicites** dans les modèles classiques ou **comme éléments à conserver dans les phases de prétraitement** pour les modèles profonds.\n","\n","---\n","\n","##### **1. Majuscules**\n","- Le ratio de majuscules est généralement [plus élevé/plus faible] dans les tweets [positifs/négatifs]. \n"," → Peut indiquer de l’**intensité émotionnelle** (ex. colère, enthousiasme). \n"," ✅ **À exploiter comme feature explicite** ; ne pas convertir systématiquement en minuscules.\n","\n","---\n","\n","##### **2. Ponctuation expressive**\n","- `!` plus fréquents dans les tweets [positifs/négatifs] \n","- `?` plus fréquents dans les tweets [positifs/négatifs] \n","- `...` plus fréquents dans les tweets [positifs/négatifs] \n"," ✅ **À conserver dans le texte**, et/ou compter comme feature.\n","\n","---\n","\n","##### **3. Symboles spécifiques à Twitter**\n","- `#hashtags`, `@mentions`, `http` apparaissent avec des fréquences différentes selon le sentiment. \n"," ✅ Peuvent être **encodés comme des indicateurs binaires** ou **remplacés par des tokens spéciaux** (``, ``, etc.)\n","\n","---\n","\n","##### **4. Émoticônes**\n","- Émoticônes positives (`:)`, `:D`) bien plus fréquentes dans les tweets positifs \n","- Émoticônes négatives (`:(`, `:(`) plus fréquentes dans les tweets négatifs \n"," ✅ **Fort pouvoir discriminant** : à traiter comme **tokens spécifiques**, voire à compter comme **features auxiliaires**.\n","\n","---\n","\n","##### **5. Pronoms personnels**\n","- \"I\" (je) et \"we\" (nous) ont des fréquences différenciées selon le sentiment \n"," ✅ Peut être un **signal intéressant sur le ton ou l’implication personnelle** → feature textuelle potentielle.\n","\n","---\n","\n","##### **6. Lexique émotionnel**\n","- Mots comme \"love\", \"hate\", \"lol\", \"omg\" sont fortement corrélés à certaines classes \n"," ✅ **Indicateurs lexicaux directs** : peuvent être **utilisés comme features ou marqués via une lexicon-based approach.**\n","\n","---\n","\n","##### **En résumé : stratégies recommandées**\n","- ✅ **Ne pas supprimer** systématiquement la ponctuation expressive ni convertir les majuscules \n","- ✅ **Traiter** les émoticônes et tokens spécifiques comme des signaux explicites \n","- ✅ **Enrichir** la vectorisation (TF-IDF, embeddings) avec des **caractéristiques structurelles** (ponctuation, casse, ratio d’émoticônes, etc.)\n"]},{"cell_type":"code","execution_count":26,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":0},"id":"ctBSKs_QWjJA","executionInfo":{"status":"ok","timestamp":1751537506318,"user_tz":-120,"elapsed":6919,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"bfd821ea-c8ba-4fe7-c5f5-c279d0f4b26e"},"outputs":[{"output_type":"stream","name":"stdout","text":["Moyenne des caractéristiques par sentiment:\n","Caractéristique 'text_length':\n"," - Tweets négatifs: 73.96\n"," - Tweets positifs: 73.38\n"," - Différence relative: -0.79%\n","\n","Caractéristique 'word_count':\n"," - Tweets négatifs: 13.58\n"," - Tweets positifs: 12.77\n"," - Différence relative: -5.92%\n","\n","Caractéristique 'capitals_ratio':\n"," - Tweets négatifs: 0.04\n"," - Tweets positifs: 0.05\n"," - Différence relative: 16.98%\n","\n","Caractéristique 'exclamation_count':\n"," - Tweets négatifs: 0.48\n"," - Tweets positifs: 0.66\n"," - Différence relative: 38.19%\n","\n","Caractéristique 'question_count':\n"," - Tweets négatifs: 0.15\n"," - Tweets positifs: 0.16\n"," - Différence relative: 7.62%\n","\n","Caractéristique 'ellipsis_count':\n"," - Tweets négatifs: 0.21\n"," - Tweets positifs: 0.15\n"," - Différence relative: -26.07%\n","\n","Caractéristique 'hashtag_count':\n"," - Tweets négatifs: 0.02\n"," - Tweets positifs: 0.03\n"," - Différence relative: 42.58%\n","\n","Caractéristique 'mention_count':\n"," - Tweets négatifs: 0.41\n"," - Tweets positifs: 0.60\n"," - Différence relative: 46.87%\n","\n","Caractéristique 'url_count':\n"," - Tweets négatifs: 0.03\n"," - Tweets positifs: 0.06\n"," - Différence relative: 88.16%\n","\n","Caractéristique 'positive_emoticon':\n"," - Tweets négatifs: 0.00\n"," - Tweets positifs: 0.00\n"," - Différence relative: inf%\n","\n","Caractéristique 'negative_emoticon':\n"," - Tweets négatifs: 0.00\n"," - Tweets positifs: 0.00\n"," - Différence relative: 100.00%\n","\n","Caractéristiques structurelles des tweets par sentiment :\n"," Négatif (moyenne) Positif (moyenne) Différence Relative\n","Emoticone Positive 0.0 0.00001 inf\n","Emoticone Negative 0.00024 0.00048 100.0\n","Nombre URLs 0.03014 0.05671 88.155275\n","Nombre Mentions 0.40579 0.59599 46.871535\n","Nombre Hashtags 0.0233 0.03322 42.575107\n","Nombre Exclamations 0.47932 0.66237 38.189518\n","Ratio Majuscules 0.042984 0.050284 16.984226\n","Nombre Questions 0.14796 0.15924 7.623682\n","Longueur Texte 73.96162 73.37764 -0.789572\n","Nombre Mots 13.57711 12.77396 -5.915471\n","Nombre Ellipses 0.20901 0.15453 -26.065738\n"]}],"source":["def analyser_caracteristiques_distinctives(df):\n"," \"\"\"Analyse les caractéristiques distinctives et les tokens spécifiques dans les tweets\"\"\"\n","\n"," # Créer un échantillon équilibré pour l'analyse\n"," sample_size = min(100000, df[df['sentiment'] == 'Négatif'].shape[0], df[df['sentiment'] == 'Positif'].shape[0])\n"," neg_samples = df[df['sentiment'] == 'Négatif'].sample(sample_size, random_state=42)\n"," pos_samples = df[df['sentiment'] == 'Positif'].sample(sample_size, random_state=42)\n","\n"," balanced_df = pd.concat([neg_samples, pos_samples])\n","\n"," # Calculer des caractéristiques supplémentaires\n"," balanced_df['capitals_ratio'] = balanced_df['text'].apply(\n"," lambda x: sum(1 for c in str(x) if c.isupper()) / len(str(x)) if len(str(x)) > 0 else 0\n"," )\n","\n"," balanced_df['exclamation_count'] = balanced_df['text'].apply(\n"," lambda x: str(x).count('!')\n"," )\n","\n"," balanced_df['question_count'] = balanced_df['text'].apply(\n"," lambda x: str(x).count('?')\n"," )\n","\n"," balanced_df['ellipsis_count'] = balanced_df['text'].apply(\n"," lambda x: str(x).count('...')\n"," )\n","\n"," balanced_df['hashtag_count'] = balanced_df['text'].apply(\n"," lambda x: str(x).count('#')\n"," )\n","\n"," balanced_df['mention_count'] = balanced_df['text'].apply(\n"," lambda x: str(x).count('@')\n"," )\n","\n"," balanced_df['url_count'] = balanced_df['text'].apply(\n"," lambda x: 1 if 'http' in str(x).lower() else 0\n"," )\n","\n"," balanced_df['positive_emoticon'] = balanced_df['text'].apply(\n"," lambda x: str(x).count(':)') + str(x).count(':-)') + str(x).count(':D') + str(x).count('=)')\n"," )\n","\n"," balanced_df['negative_emoticon'] = balanced_df['text'].apply(\n"," lambda x: str(x).count(':(') + str(x).count(':-(') + str(x).count(':(') + str(x).count('=(')\n"," )\n","\n"," # Comparer les moyennes\n"," features = ['text_length', 'word_count', 'capitals_ratio', 'exclamation_count',\n"," 'question_count', 'ellipsis_count', 'hashtag_count', 'mention_count',\n"," 'url_count', 'positive_emoticon', 'negative_emoticon']\n","\n"," # Calculer les statistiques par sentiment\n"," stats = balanced_df.groupby('sentiment')[features].mean().round(4)\n","\n"," # Renommer les colonnes en français\n"," stats.columns = ['Longueur Texte', 'Nombre Mots', 'Ratio Majuscules', 'Nombre Exclamations',\n"," 'Nombre Questions', 'Nombre Ellipses', 'Nombre Hashtags', 'Nombre Mentions',\n"," 'Nombre URLs', 'Emoticone Positive', 'Emoticone Negative']\n","\n"," print(\"Moyenne des caractéristiques par sentiment:\")\n"," for feature in features:\n"," neg_mean = balanced_df[balanced_df['sentiment'] == 'Négatif'][feature].mean()\n"," pos_mean = balanced_df[balanced_df['sentiment'] == 'Positif'][feature].mean()\n"," diff = (pos_mean - neg_mean) / neg_mean * 100 if neg_mean != 0 else float('inf')\n","\n"," print(f\"Caractéristique '{feature}':\")\n"," print(f\" - Tweets négatifs: {neg_mean:.2f}\")\n"," print(f\" - Tweets positifs: {pos_mean:.2f}\")\n"," print(f\" - Différence relative: {diff:.2f}%\")\n"," print()\n","\n","\n"," # Créer un DataFrame pour stocker les différence relatives\n"," diff_df = pd.DataFrame(index=features, columns=['neg_mean', 'pos_mean', 'diff_pct'])\n","\n"," for feature in features:\n"," neg_mean = balanced_df[balanced_df['sentiment'] == 'Négatif'][feature].mean()\n"," pos_mean = balanced_df[balanced_df['sentiment'] == 'Positif'][feature].mean()\n","\n"," # Éviter division par zéro\n"," if neg_mean != 0:\n"," diff_pct = (pos_mean - neg_mean) / abs(neg_mean) * 100\n"," else:\n"," diff_pct = float('inf') if pos_mean > 0 else 0\n","\n"," diff_df.loc[feature, 'neg_mean'] = neg_mean\n"," diff_df.loc[feature, 'pos_mean'] = pos_mean\n"," diff_df.loc[feature, 'diff_pct'] = diff_pct\n","\n"," # Trier par différence relative\n"," diff_df_sorted = diff_df.sort_values('diff_pct', ascending=False)\n","\n"," # Renommer les index en français avec des espaces et des majuscules\n"," feature_mapping = {\n"," 'text_length': 'Longueur Texte',\n"," 'word_count': 'Nombre Mots',\n"," 'capitals_ratio': 'Ratio Majuscules',\n"," 'exclamation_count': 'Nombre Exclamations',\n"," 'question_count': 'Nombre Questions',\n"," 'ellipsis_count': 'Nombre Ellipses',\n"," 'hashtag_count': 'Nombre Hashtags',\n"," 'mention_count': 'Nombre Mentions',\n"," 'url_count': 'Nombre URLs',\n"," 'positive_emoticon': 'Emoticone Positive',\n"," 'negative_emoticon': 'Emoticone Negative'\n"," }\n"," diff_df_sorted.index = diff_df_sorted.index.map(feature_mapping)\n","\n"," # Renommer les colonnes en français avec des majuscules et des espaces\n"," diff_df_sorted.columns = ['Négatif (moyenne)', 'Positif (moyenne)', 'Différence Relative']\n","\n"," return stats, diff_df_sorted\n","\n","stats, diff_df_sorted = analyser_caracteristiques_distinctives(df)\n","\n","print(\"Caractéristiques structurelles des tweets par sentiment :\")\n","print(diff_df_sorted)"]},{"cell_type":"code","execution_count":27,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":708},"id":"sZawfr7CWjJA","executionInfo":{"status":"ok","timestamp":1751537506881,"user_tz":-120,"elapsed":550,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"91164da9-80a3-4fde-eed4-b244c6c87a4d"},"outputs":[{"output_type":"display_data","data":{"text/plain":["
"],"image/png":"iVBORw0KGgoAAAANSUhEUgAABW0AAAMWCAYAAACKoqSLAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAg1pJREFUeJzs3Xl4VdXZP+4nIQlhCmGeZXRCcMQJQUCcQUVAi6CFamm11qHa0qqvlTq8LVqnOrR9tXWuilisKOJQQUFUHHDAalFRUREFMVLmhOzfH/7I1zRBwyGQLbnv6+p1cdZea+1nn7OzPf1kZ+2sJEmSAAAAAAAgFbJrugAAAAAAAP4foS0AAAAAQIoIbQEAAAAAUkRoCwAAAACQIkJbAAAAAIAUEdoCAAAAAKSI0BYAAAAAIEWEtgAAAAAAKSK0BQAAAABIkZyaLgAAoCb84Q9/iC+++CJ++tOfRrNmzWq6HAAAgDLutAUAap0bb7wxzjrrrCguLhbYAgAAqSO0BYBt1MqVK+Oqq66KAQMGRKtWrSIvLy+aNGkS+++/f/z617+OhQsX1nSJNWLevHlx7rnnxrBhw+KSSy7JaI4ZM2ZEVlZWjBkzpnqL+5pbb701srKyYvz48VtsH99FW+O9h+8iPxsAsG0R2gLANmj27NnRrVu3OPfcc2POnDnRo0ePGD58ePTu3TvefffduOSSS2KHHXaIJ554oqZL3WxZWVnRqVOnKvVdvXp1jBgxInbZZZe4/fbbIysra8sW9w3GjBkTWVlZMWPGjBqrgc23LQVl29KxbIvGjx8fWVlZceutt9Z0KVuF8xGA2s6atgCwjXnllVdi4MCBsWbNmvjlL38ZF154YTRo0KBse2lpaTzwwAMxbty4+Oijj2qw0q3vjTfeiOHDh8ePfvSjqF+/fsbz7LPPPvHmm29G48aNq7G68o499tjYb7/9onnz5ltsH8C2Y2tclwCArUdoCwDbkCRJ4qSTToo1a9bE+PHj46KLLqrQJzs7O4YOHRoDBw6MDz/8sAaqrDm9evWKXr16bfY89evXj5122qkaKtq4xo0bC1+AKtsa1yUAYOuxPAIAbEOmTZsW8+bNi/bt28cFF1zwjX0bN24cPXr0KHv9ySefxOWXXx79+vWLdu3aRV5eXrRu3TqGDh0aL7zwQqVzdOrUKbKysiJJkrjuuutit912i/r168fuu+8eEV+FyHfffXeMGDEidthhh2jQoEE0atQo9tlnn7jxxhujtLT0G4/l6KOPjlatWkXdunWjQ4cOMXjw4Lj//vsj4v+t+RoR8cEHH0RWVlbZ//r3719urlWrVsVvf/vb2GOPPaJhw4bRsGHD2G+//eK2226rdN8bllxYt25dXHzxxbHTTjtF3bp1Y8iQIRGx8T/bTZIk7rrrrujTp0+0atUq8vPzo0OHDnHwwQfHDTfcUG7+DfseMGBAudrff//9csdX2Zq2y5Yti5/+9KfRtm3byM/Pj+7du8e1114bSZJUulzEt/1Z9YbPsTJvvvlmjBkzJjp06BB169aNVq1axYgRI+KNN96otP/UqVPjkEMOiXbt2kXdunWjbdu20adPn/jNb35Taf+NeeONN2LIkCHRpEmTaNSoUfTt2zemTZv2jWM2nG8HHXRQNGnSJPLz82PnnXeO8ePHx6pVqyr0X7FiRfz2t7+N3XbbLRo3bhwNGzaMrl27xnHHHRePPvrot9Y4ZsyYGDBgQERE3HbbbeU+x/Hjx8eaNWsiPz+/0uU7hgwZEllZWdGnT58K23r16hXZ2dmxZMmScu3Lli2L8847L7p37x716tWLxo0bx0EHHRQPPfTQRmv88MMP46c//Wl07do18vPzo2nTpjF48OCYPXv2Jh3LBvPmzYsTTzwxunTpEvn5+dGiRYvYfffd4+yzz45PPvnkW9+zDfvasDTII488En369ImGDRtGkyZNYujQofHWW29VGLNmzZr4y1/+Esccc0x06dIl6tWrF4WFhXHggQfGPffc8637efTRR2PAgAFRWFgYWVlZUVRU9K11buq5PG3atBg0aFC0aNEi6tatG126dIlzzjknPv/882+s7emnn46DDjooGjVqFAUFBTFo0KD417/+Va5/p06dyvb7gx/8oNzns2GJlY1dl77+8//SSy/FEUccEYWFhdG0adM4/vjjy/7iYuXKlTFu3Ljo1KlT5OfnR48ePWLSpEkbfX825drw9evZwoULY+TIkdGiRYuoV69e9OrVK6ZMmVLh/anK+QgA2zJ32gLANuThhx+OiIjjjjsucnI27T/z//jHP+KXv/xl7LjjjrHrrrtGQUFBvP322zF58uR46KGH4qGHHopDDz200rGnnnpq3HLLLdGvX7/YeeedY926dRERsXbt2hg5cmQ0a9YsunfvHnvuuWd8/vnnMXv27Dj99NNjzpw5lQaJ5557blx11VWRnZ0d+++/f2y33XaxaNGieOaZZ+Kjjz6KYcOGRbdu3WL06NFx2223RYMGDWL48OFl479+t9lnn30WhxxySLz22mvRunXr6NevXyRJErNnz44xY8bEiy++GNddd12FGkpLS2PIkCHx9NNPR79+/WLXXXeNZs2afeN7OG7cuPj9738fdevWjQMPPDCaN28eixcvjtdeey3eeeedOP300yMiYvTo0TFr1qx4991347DDDovWrVuXzdGwYcNv3McXX3wRffr0iTfffDNat24dxxxzTCxbtix+/vOfxzvvvPONYzfVAw88ECNGjIi1a9fG7rvvHvvtt198+OGHMXHixJgyZUo88sgjceCBB5b1v+GGG+KnP/1p1KlTJw444IDo169fLF26NN58882N3vldmRdffDEGDBgQK1asiB49ekSPHj3i7bffjiOPPDJOO+20SseUlpbGiSeeGHfffXc0bNgwevXqFU2aNIkXX3wxfvOb38QjjzwSM2bMiHr16kVExPr16+Pggw+O559/Ppo3bx79+/eP/Pz8+Oijj2Lq1KnRoEGDOOyww76xzj59+sTixYvj0Ucfja5du5YLYHfffffIz8+PfffdN55++ul4//33y8Lb0tLSePrppyMi4oUXXohVq1aVLdfx5Zdfxty5c6N79+7RokWLsvnmz58fBx98cHz44YfRqVOnOOyww+I///lPPPfcc3HUUUfFFVdcET//+c/L1ffss8/GoEGD4osvvogdd9wxBg0aFEuWLIlHH300pk2bFnfddVd873vfq9KxRES89NJL0adPn1izZk3suuuuccwxx8SqVatiwYIFce2118aQIUOiTZs23/bxlrnvvvvij3/8Y/Tq1SuOOuqoeO2112Ly5Mnx5JNPxlNPPRW77bZbWd/3338/fvjDH0bbtm1jxx13jH322ScWL14cs2fPjpkzZ8Zbb7210TDvb3/7W9x8883Rq1evOOKII+Ldd9/91vWsN/Vc/tWvfhUTJkyIvLy82HvvvaNNmzbx6quvxtVXXx0PPvhgPPPMM9GqVasK+5kyZUpce+210atXrzjyyCPjlVdeialTp8bzzz8f8+bNK7s2DB8+PJ544ol49dVX44ADDohu3bqVzfH168c3ef755+PUU0+NHj16xGGHHRYvv/xy3HffffHqq6/GnDlz4pBDDokPPvggDjzwwFi6dGk89dRTcfzxx8cjjzxS4WdhU68NG7z//vux9957R6NGjWLgwIGxcOHCePbZZ2PIkCHxyCOPlP03pirnIwBs8xIAYJtxwAEHJBGR3HHHHZs89rXXXkvmzZtXoX3atGlJXl5e0rVr16S0tLTcto4dOyYRkTRv3rzSscXFxcnkyZOTdevWlWv/7LPPkl69eiURkTz11FPltt1xxx1JRCRt27ZN5s6dW27bqlWrkscee6xcW0QkHTt23OhxHXnkkUlEJGeddVayZs2asvbFixeX1fDII49UmDMikm7duiUfffRRhTmnT5+eREQyevTosrbVq1cndevWTRo1apQsWLCgwvvw9NNPl2sbPXp0EhHJ9OnTK637lltuSSIiueiii8q1n3rqqUlEJIcffniycuXKsvbnn38+adiwYaXvx0UXXZRERHLLLbdUuq8Nn+PXvffee0mDBg2Shg0bJo8//ni5bY888kiSm5ubdOjQIVm7dm1Z+3bbbZdkZWUlL7zwQrn+paWlGz3O/1ZaWpp07949iYjk17/+dbltN9xwQ9ln8/X3PkmS5PLLL08iIunfv3/yySeflLWvXbs2OeWUU5KISH75y1+WtT/55JNJRCR77713snr16nJzffnll8mLL75YpXorOxe+7te//nWF9/7ll19OIiLZZZddkogo9/4++OCDSUQkp59+ellbSUlJ0rNnzyQikssvvzxZv3592ba333476dy5c1KnTp3k9ddfL3cMbdq0SerUqZPceeed5Wp64YUXkiZNmiQNGzZMPvvssyofy/e///0kIpLf//73Fba9+eabyaJFiyod9982nPsRkfzf//1fWXtpaWnyy1/+MomIZPfddy83ZunSpcnjjz9e4Rq0YMGCpFOnTkl2dnby3nvvbXQ/99xzT5Vq22BTzuWJEycmEZH06NEjefvtt8v13fD5f+9736u0tuzs7GTy5Mll7SUlJcmwYcOSiEguvPDCcmO+7ed4Y5/fhnERkfzxj38sa1+3bl1y8MEHJxGRdO/ePTnooIOSFStWlG2/+eabk4hIDjzwwHLzZXJt2HA9i4jk3HPPLXcOX3311UlEJH379q3S8QBAbSG0BYBtyE477ZRERDJt2rRqnXfUqFFJRCSvvfZaufYNYd8VV1yxyXM+/vjjSUQk55xzTrn2nXfeeZNClm8KbefOnVsWzH09JNhgQ3h29NFHV5gzIpL77ruv0nkrCxM+/fTTSsOmjckktF2xYkVSr169JDs7O3nnnXcqjNkQeFVHaHvWWWclEZFcd911lY4588wzk4hI/v73v5e11atXL2nSpEml/atqQ5japUuXpKSkpML2fffdt8J7X1xcnDRv3jxp0KBBsnjx4gpjVq1albRu3Tpp0qRJ2Xlw7733JhGRnH322ZtV77cFSxuO5+vbr7rqqiQiymq44IILyradc845SUQkEydOLGubPHlyEhHJsGHDKt3H3//+9yQikjPPPLOsbUMQdu6551Y6ZkMNV111VZWP5YgjjkgiInnllVcq3V5VG8793r17V9i2bt26pH379klEJDNnzqzSfDfddFMSEckf/vCHSvczaNCgTa5xU87l3XbbLYmIcqH5BqWlpcnuu++e1KlTJ1myZEmF2kaNGlVhzIsvvphERNKvX79y7Zsb2vbp06fCmH/84x9l4fG///3vcttKSkqS5s2bJ7m5ueV+8ZbJtWHD9axz587lwtwk+ernt0mTJklubm65bUJbAGo7a9oCAGXWrl0b//jHP+KCCy6IH/3oRzFmzJgYM2ZMvP766xER8fbbb1c67uijj/7GeV955ZW4/PLL4/TTT48f/OAHMWbMmPjjH/9YYc5FixbFm2++GYWFhXH88cdv9vE89thjEfHV+qHZ2RW/9mxY43bOnDkVtmVlZcVRRx1V5X21bNky2rdvH6+88kr86le/igULFmRe+Ea89NJLsXr16ujVq1d07dq1wvYTTjih2va14b0bOnRopdv79u0bEVHuvdtrr73iiy++iFNOOWWja95+m5kzZ0bEV38OXqdOnQrbKzvGl19+OZYuXRq9e/eu9E/Q69WrV1bbhvNt9913j+zs7LjlllvipptuqnTd0eqw3377Rd26dcvWHY34au3RRo0axbBhw6Jjx44VtkVEuXWZM/ksMhnzbfbaa6+IiDj99NNjxowZUVJSUuWxlRkxYkSFttzc3LKlTjacC183a9asuPTSS+O0004ru5bcd999EZH59akyVT2XP/vss3j11Vdj++23L7dG+AZZWVlxwAEHxPr16+Oll16qsL2yJWd22GGHiIgqrxFcVZXtq0uXLhHx1Zq5G/a7QZ06daJjx45RXFwcS5cuLWvfnHOrf//+kZeXV64tJycnOnfuHMXFxVvs5xAAvousaQsA25ANa67+9wOMquL111+Po48+uuxBWJX5z3/+U2n7dtttV2n7unXrYsyYMXH33XdXac4PP/wwIr4KEr5tzcmq2HAsF1xwwTc+mG3NmjUV2lq2bBl169bdpP3ddtttMWLEiJgwYUJMmDAhOnbsGP369YsRI0bEEUccsUlzVWbRokUREdGxY8dKt1f2wKtMbXjv2rVr9439vh7m3HDDDTFkyJD461//Gn/961+jVatW0a9fvxg6dOhGQ9j/lskxbqj18ccf/9bzZunSpbHjjjvGDjvsEJdffnmcd9558aMf/ahsrc+BAwfGmDFjYtddd/3WWquiXr16sc8++8TMmTPj/fffj+222y5mzpwZffv2jTp16kT//v3j7rvvjlWrVkVxcXG88sorFdaz3XB8o0aNilGjRn3jsf33mAMOOOAb6/v6mG/zi1/8ImbNmhUzZsyIAQMGRMOGDWP//fePQYMGxZgxY6Jx48ZVnivi2z/jDedCxFdr/Q4dOjSefPLJjc63qdenb1LVc3nD+/z2229X6dz7b+3bt6/Q1qhRo4j46pdo1amyn+UNa2hv7Od8w/av15LJtWGDyo43YssdMwB8lwltAWAbsvvuu8czzzwTL7/8cpx44olVHpckSRx//PHx/vvvx6mnnhqnnnpqdOnSJRo2bBhZWVlx/vnnx29/+9tIkqTS8fn5+ZW2X3XVVXH33XdHz5494/LLL48999wzmjRpErm5uTF//vzYcccdNzpndSgtLY2Irx5qU9mdqd9kY8f0TQ466KB455134qGHHopp06bFjBkz4vbbb4/bb789hg0b9o1PYq9JG96nytpGjx79jWP33Xffsn/vuuuu8a9//SumTZsWU6dOjRkzZsTEiRNj4sSJsf/++8eMGTMq3GVXHTbU2q1bt28NKb/+MLlzzz03jj/++HjggQfi8ccfj5kzZ8bVV18d11xzTVx99dVx1llnVUt9/fv3j5kzZ8aMGTNit912iy+++KLsTtr+/fvHbbfdFrNnz47Vq1dHaWlp9OvXr9LjO/zwwyu9k3iD5s2bVxgzfPjwaNCgwUbHfP2hfd+moKAgnnzyyXjmmWdiypQpMWPGjHjyySfj8ccfj9/+9rcxc+bM2H777as836b45S9/GU8++WT069cvfvOb30SPHj2isLAw6tSpE4899lgcdthhm3x9+iZVPZc3vM+tW7f+1gfXVRZSV/YXAFvKN+1rU+rI5NqQyX4AoLYT2gLANmTQoEFxww03xH333ReXX3555ORU7T/1b731Vrz11lvRq1evsmULvi7TP/WfPHlyRETcfffdscsuu3zrnB06dCjbliTJZt9tu+GuriFDhsS55567WXNVVUFBQYwcOTJGjhwZERHPPfdcHHfccXH//ffH1KlT48gjj8x47jZt2kRExAcffFDp9o21bwhKV6xYUWHb+vXrY/HixRXa27dvH++++25ceeWV5YLOb5Ofnx9DhgyJIUOGRETEG2+8ESNHjoxnn302br755vjJT37yjeMzOcYNn/NOO+0Ut956a5VrjfjqnDvjjDPijDPOiJKSkrjnnnviBz/4QYwbNy6+//3vR5MmTTZpvsr069cvLrnkkpgxY0Z88cUXERHlQtuIr5ZFWL16dbm2DTYc3w9/+MMYNmxYlfbZvn37+Pe//x2/+tWvypY1qA5ZWVnRp0+f6NOnT0R8tTzA2WefHXfffXdccMEFMXHixCrP9W2fcdu2bcvaJk+eHHXq1IkHH3wwCgoKyvXfEkuRRFTtXN7w2TRv3nyTz73vqkyvDQDApvGrTgDYhhx++OGxyy67xEcffRSXXXbZN/Zdvnx52VqNG4Kkyv509YsvvojHH388o3q+ad7Kwp22bdvGzjvvHEVFRWXrVH6b3Nzcja6tecghh0TE/wuPa8J+++0XJ510UkREzJs3r6x9Q5C6KeuC7rXXXlGvXr146aWXKg2q7rnnnkrHbQhC58+fX2Hb9OnTo7i4uEJ7db13u+yyS5x++ukRUf74N2bDepj3339/pXcAV3aMe++9dzRu3DieeuqpWLZsWca15uTkxIknnhh77713rFu3bqNrpH5dVT7H3r17R15eXsyYMSNmzJgRBQUFseeee0bEV0sBbFjXdsN6tv99p20mn0UmYzI5J1u2bBnjx4+PiKp9vl9X2TWgpKQk7r///oiIsmA44qtrSUFBQYXAdmPzbAmVncvt27ePnXbaKf71r39V+vNVnTL5fLaErXVdTcvxAkBNEdoCwDYkKysr7rzzzsjPz4/x48fHeeedFytXrizXJ0mSePDBB6NXr17xwgsvRMRXf1aenZ0dTz75ZLmgas2aNXHqqadmHIRteLDNn/70p3LtkyZNittvv73SMb/61a8iIuKcc86J1157rdy2NWvWVAiQ27ZtG59++mkUFRVVmGvfffeNQw45JJ555pk4/fTTY/ny5RX6vPrqqzFt2rQqH9PGLFy4MG699dZYtWpVhZqnT58eEf/vTuINdUdE/Pvf/67yPho2bBgnnXRSrF+/Ps4444yyOzMjIl588cW4/vrrKx134IEHRkTEnXfeWW7N4vfeey/OPPPMSsece+65Ua9evfj5z38ef//73ytsX7t2bUyaNCk++uijiIhYtWpV/OEPf6jwOZSWlpa9v18//o3p379/7LTTTvHuu+/GpZdeWm7bn//853j22WcrjKlbt26MGzcu/vOf/8TQoUMrDbQ//vjjuOOOO8peT58+PZ544okKwfB7770Xb775ZmRlZW10/c2vq8rnuGFd2w8++CAee+yxsvVsv37Mc+bMiVdeeSV22mmnCksgDBs2LLp37x533XVXXHLJJRXW/UySJJ555pl45plnytp+/OMfR8uWLePyyy+P//u//6twnCUlJfHoo4+WC1q/7Vj+9Kc/xXvvvVehferUqRFRtc/362bNmhV//etfy7VddNFFsXDhwth1113LAvyIr64lX3zxRdx7773l+l999dVlP1/VZVPP5QsvvDBKS0tj2LBh8corr1SY7/PPP4+bbrpps+vK5JqxJWzqtSFTaTleAKgxCQCwzZk1a1bSqlWrJCKS+vXrJwMHDkxGjhyZDBo0qKw9Pz8/eeKJJ8rGjB07NomIpF69esmgQYOS4cOHJ61atUqaN2+ejBkzJomI5JZbbim3n44dOybf9HXiqaeeSurUqZNERLLXXnslJ5xwQtKrV68kIpKf//znSUQk/fr1qzDujDPOSCIiqVOnTtKnT5/khBNOSPr3758UFhYmu+22W6V9O3funIwaNSo55ZRTkssvv7xs+6effprsscceSUQkhYWFSf/+/cveiw4dOiQRkZx11lnl5oyIpGPHjhs9runTpycRkYwePbqsbe7cuWXv94EHHpiMHDkyOeaYY5IWLVokEZH06tUrWbNmTVn/F198McnKykry8/OTY445JjnllFOSU045JVm6dGmSJElyyy23JBGRXHTRReX2/fnnnyc77rhjEhFJmzZtku9973vJoYcemuTk5CSnn376Rmv//ve/n0RE0rhx4+Soo45KBg4cmDRo0CA57rjjNvo5PvDAA0n9+vWTiEi6deuWHHXUUcmIESOSvn37Jg0aNEgiIpk7d26SJEnyxRdfJBGR5ObmJvvtt18yYsSIZOjQoWXvcadOncqO7ds899xzZfP37NkzOeGEE5K99947ycrKSn7yk59UeO+TJEnWr1+fnHTSSUlEJHl5ecm+++5bVsMuu+ySZGVllTt3rr766iQikhYtWiSHH354MmrUqOTQQw9N6tatm0REcsYZZ1Sp1iRJkl133TWJiGTvvfdOxowZk5xyyinJP/7xj3J9LrjggiQikohIrrjiinLbNnzWEZGceuqple5j/vz5SefOnZOISFq2bJkcfPDByciRI5NDDz00admyZRIRydVXX11uzLPPPps0b948iYikQ4cOyRFHHJGMHDkyOeigg5LCwsIkIpLJkydX+Vh22223JCKS7t27J8OGDUu+973vlbXl5+cns2bNqtL7NXr06CQiktNOOy3JyspK9tlnn+SEE05IdtlllyQikoKCguTll18uN+bOO+8se4/69u2bnHDCCUn37t2T7Ozs5Gc/+1ml58SG/UyfPr1KdW2Qybl8/vnnJxGRZGdnJ3vuuWdy3HHHJcOHD0/22GOPpE6dOknjxo03qbbKfo4//vjjJD8/P6lTp05y+OGHJyeffHJyyimnJG+99VaSJJVfl5IkSS666KJKr99JkiTvvffeRq/DSZIk/fr1SyIiee+998q1b8q1IUk2fj37tv1U5WcLALZVQlsA2Eb95z//SX7/+98n/fr1S1q0aJHk5OQkhYWFyb777ptcdNFFyYcffliuf0lJSXLllVcm3bt3T/Lz85NWrVolo0aNSt5///2N/p/+bwttk+Sr4Oiggw5KmjRpkjRq1Cjp3bt3cv/9939rWPCPf/wjOeyww5KmTZsmeXl5Sfv27ZPBgwcnf//738v1W7FiRfLTn/406dChQ5KTk1PpnKtXr07+8Ic/JL17904aN26c5OXlJR06dEj69euXXHHFFRXei0xC2+XLlydXXnllcuSRRyadOnVK8vPzk2bNmiW9evVKrr766mTlypUV5rnrrruSPffcM6lXr15ZILUhtPimkGPp0qXJaaedlrRu3TqpW7dustNOOyW///3vk9LS0o3Wvnbt2uRXv/pV0qFDhyQvLy/p2rVrcumllyYlJSXf+Dm+8847yU9+8pNk++23T/Lz85NGjRolO+64YzJixIhk4sSJydq1a5MkSZLi4uLkhhtuSIYOHZp07do1qV+/flJYWJjsuuuuyW9+85vk888/3+j7WZnXXnstOeqoo5LGjRsnDRo0SPbff//koYce2mgwtcE//vGPZNCgQUnLli2T3NzcpGXLlslee+2VjBs3LnnppZfK+r399tvJ//zP/yQHHHBA0qZNmyQvLy9p165dMnDgwOT+++9PSktLq1zr22+/nQwZMiRp1qxZkp2dXenn9vjjj5d9xi+88EK5bRt+FiIiueeeeza6n6KiouTSSy9N9txzz6Rhw4ZJfn5+0qlTp+Swww5LbrjhhmTJkiUVxnzyySfJuHHjkl122SWpX79+Ur9+/aRr167JMccck9x6663Jf/7znyofy4MPPpicfPLJyS677JIUFhYm9evXT3bYYYfkhz/8YVlwWBVfDyynTJmS7L///kn9+vWTxo0bJ8ccc0zyxhtvVDru4YcfTvbbb7+kUaNGSWFhYXLwwQcnM2bM2Og5kWlom+m5/NRTTyXHHXdc0rZt2yQ3Nzdp1qxZsuuuuyY//elPk6eeemqTatvYz/Gjjz6aHHDAAUnDhg3LzpkNc2zN0DZJqn5tSJLMQ9uq/GwBwLYqK0m24CObAQDYqrKysqJjx47llkGANBkzZkzcdtttMX369AoPXQMA4CvWtAUAAAAASBGhLQAAAABAightAQAAAABSxJq2AAAAAAAp4k5bAAAAAIAUEdoCAAAAAKSI0BYAAAAAIEWEtgAAAAAAKZJT0wWkxRdffBElJSU1XQYAAAAAsI3KycmJJk2afHu/rVDLd0JJSUkUFxfXdBkAAAAAQC1neQQAAAAAgBQR2gIAAAAApIjQFgAAAAAgRYS2AAAAAAAp4kFkAAAAAPAdV1JSEqtWrarpMoiI+vXrR07O5sWuQlsAAAAA+A4rKSmJlStXRqNGjSI72x/W16TS0tL4z3/+Ew0aNNis4NanCAAAAADfYatWrRLYpkR2dnY0atRos+969kkCAAAAwHecwDY9quOz8GkCAAAAAKSI0BYAAAAAqBGzZ8+Odu3axZdfflnTpaSK0BYAAAAAarnPP/88fvWrX8Xee+8dnTt3jt133z1GjhwZL7zwQrXtY/jw4fHrX/+6XFuvXr1i7ty5UVBQUG37ydTZZ58dJ598ck2XERERmT/CDAAAAADYJowdOzbWrVsX11xzTXTs2DGWLFkSs2bNii+++GKL7jcvLy9atmy5RffxXeROWwAAAACoxb788st4/vnn44ILLogDDjgg2rdvH3vssUecccYZceihh5b1+fnPfx49e/aMHXfcMY477rh44403yua48sor45BDDolJkybFvvvuGzvttFOcdtppsWLFioj46i7WZ599Nv7yl79Eu3btol27dvHhhx9WWB7h3nvvjZ133jkef/zx6Nu3b3Tt2jXGjh0bq1evjokTJ8a+++4b3bt3jwsvvDDWr19ftv+1a9fGxRdfHHvttVd069YtBg8eHLNnzy7bvmHeGTNmRL9+/WL77bePUaNGxaefflpW/3333RePPvpoWX1fH7+1CW0BAAAAoBZr0KBBNGjQIKZNmxZr166ttM+Pf/zjWLp0adx5553xyCOPRM+ePeN73/teuTtxP/jgg3j00Ufjtttui9tuuy2ee+65uP766yMiygLVUaNGxdy5c2Pu3LnRtm3bSve1evXq+Otf/xp//OMf46677opnn302TjnllHjyySfjjjvuiGuvvTbuvPPOeOihh8rG/M///E+89NJLceONN8YTTzwRgwcPjhNPPDEWLFhQbt4//elP8Yc//CH+/ve/x8cffxyXXHJJRESceuqpcdRRR8WAAQPK6uvVq9dmv7eZsjwCAAAAANRiOTk5cfXVV8e4cePizjvvjB49esR+++0XxxxzTHTv3j3mzJkTr7zySrz66qtRt27diIj49a9/HY8++mg8/PDDceKJJ0ZERGlpaVx99dXRsGHDiIgYNmxYzJo1KyIiCgoKIi8vL/Lz8791OYTi4uL47W9/G506dYqIiEGDBsX9998fr776ajRo0CB22GGH6N27d8yePTuOOeaY+Pjjj+Pee++NOXPmROvWrSPiqxB2+vTpce+998Z5551XNu/vfve7snnHjBkT11xzTUR8FVzn5+fHunXrUrFcg9AWAAAAAGq5QYMGxcCBA2POnDnx0ksvxfTp0+OPf/xjXHHFFbF69epYuXJl9OjRo9yYNWvWxAcffFD2ukOHDmWBbUREy5Yt4/PPP9/kWurVq1cWrEZEtGjRIjp06BANGjQoa2vevHnZ3G+++WasX78++vbtW26edevWRZMmTTY6b6tWrWLp0qWbXN/WILQFAAAAACI/Pz8OPPDAOPDAA+NnP/tZ/PznP48rr7wyRo8eHS1btoxJkyZVGNO4ceOyf+fklI8as7KyorS0dJPryM3NrTDPN829cuXKqFOnTjzyyCNRp06dcv2+HvRWNm+SJJtc39YgtAUAAAAAKth+++1j2rRp0bNnz1iyZEnk5OREhw4dMp4vNzc3oxD32/To0SPWr18fn3/+eey7774Zz5OXl1fu4WY1yYPIAAAAAKAWW7ZsWRx33HFx//33x7/+9a9YuHBhTJkyJf74xz/GYYcdFn379o299torTj755Hjqqafiww8/jBdeeCF+97vfxauvvlrl/XTo0CHmzp0bH374YSxbtqzaAtyuXbvG0KFD46yzzoqpU6fGwoULY+7cuXHdddfFE088UeV52rdvH2+++Wa88847sWzZsiguLq6W+jLhTlsAAAAAqMUaNGgQe+65Z9x0003xwQcfRHFxcbRt2zZGjhwZZ5xxRmRlZcUdd9wREyZMiHPOOSc+//zzaNGiRey3337RvHnzKu/nxz/+cZx99tnRv3//WLNmTTz33HPVdgxXXXVVXHvttXHxxRfH4sWLo2nTprHnnnvGwQcfXOU5Ro0aFc8++2wceeSRsXLlyrjvvvuid+/e1VbjpshK0rpww1a2ZMmSGk3PAQAAACATy5cvj4KCgpoug6/Z2GeSm5sbLVq0+NbxlkcAAAAAAEgRoS0AAAAAQIoIbQEAAAAAUkRoCwAAAACQIkJbAAAAAIAUEdoCAAAAAKSI0BYAAAAAIEWEtgAAAAAAKSK0BQAAAABIkZyaLgCoPcbc9mxNl7DV3Dp6/5ouAQAAALY5s2fPjrfffjtGjx5d06VsUe60BQAAAABS74MPPogzzjgjdt999622z3333TduuummstefffZZjBgxIrp16xY777zzFtuvO20BAAAAYBv0yS9+uFX31+aKmzep/9lnnx333XdfnHfeefHTn/60rH3atGlxyimnxMcff1zWtnbt2vjJT34SV1xxRey2227VVvMG9957b4wfPz7efPPNcu1Tp06N+vXrl72+6aab4rPPPovHHnssCgoKqr2ODYS2AAAAAECNyM/PjxtvvDFOPPHEKCws3Gi/unXrxsMPP7z1Cvv/NWvWrNzr999/P3r27BldunTZovu1PAIAAAAAUCP69OkTLVq0iOuvv36jfebMmRPHHntsdO3aNXr16hUXXnhhrFq1qmz7p59+GieddFJ07do19ttvv5g8eXKFZQ3+/Oc/x8CBA6Nbt27Rq1evOO+882LlypUR8dU6ueecc04sX7482rVrF+3atYsrr7wyIsovj7DvvvvG1KlTY9KkSdGuXbs4++yzt8A78hWhLQAAAABQI+rUqRO/+tWv4pZbbolFixZV2P7+++/HqFGj4sgjj4zHH388/vjHP8acOXPiggsuKOtz1llnxaeffhr33Xdf3HTTTXHXXXfF0qVLy82TnZ0dF198cUyfPj2uueaaeOaZZ+LSSy+NiIhevXrFb37zm2jUqFHMnTs35s6dG6eeemqFWqZOnRoDBgyIo446KubOnRsXX3xxNb8bX6t3i80MAAAAAPAtjjjiiOjevXvZ3a1fd/3118exxx4bY8eOjS5dusTee+8dl1xySUyaNCnWrFkT77zzTsycOTOuuOKK2HPPPaNnz55xxRVXxJo1a8rNM3bs2DjggAOiQ4cO0adPnxg3blxMmTIlIiLy8vKiUaNGkZWVFS1btoyWLVtGgwYNKtTSrFmzyMvLi/z8/GjZsqU1bQEAAACAbdcFF1wQxx9/fIU7XP/1r3/Fm2++GZMnTy5rS5IkSktL48MPP4wFCxZETk5O9OzZs2x7586dK6yP+/TTT8f1118f7777bvznP/+J9evXx5o1a2L16tVRr169LXpsmRDaAgAAAAA1ar/99ot+/frFb3/72zj++OPL2leuXBknnnhinHzyyRXGtGvXLhYsWPCtc3/44YcxZsyYOOmkk+KXv/xlFBYWxgsvvBDnnnturFu3TmgLAAAAAFCZ888/Pw499NDo2rVrWVvPnj1j/vz50blz50rHdO3aNUpKSmLevHmx6667RkTEe++9F0VFRWV9XnvttSgtLY2LLroosrO/Wi12w9IIG+Tl5cX69eur+YgyZ01bAAAAAKDG7bzzznHsscfGX//617K2n/zkJ/Hiiy/GBRdcEPPmzYsFCxbEo48+WvYgsm7dukXfvn1j3LhxMXfu3Jg3b16MGzcu8vPzIysrKyIiOnXqFMXFxfHXv/41Pvjgg5g0aVLccccd5fbdvn37WLlyZcycOTOWLVsWq1ev3noHXgmhLQAAAACQCr/4xS+itLS07HX37t3j/vvvjwULFsTQoUPjsMMOiyuuuCJatWpV1ufaa6+NFi1axLBhw+KUU06JUaNGRcOGDaNu3boREbHLLrvERRddFDfeeGMcdNBBMXny5DjvvPPK7XfvvfeOk046KU477bTo2bNn3HjjjVvngDciK0mSpEYrSIklS5ZEcXFxTZcB27Qxtz1b0yVsNbeO3r+mSwAAAKCWWL58eRQUFNR0GamxaNGi2HvvveOee+6Jvn371kgNG/tMcnNzo0WLFt863pq2AAAAAMB31qxZs2LVqlWx0047xaeffhqXXXZZdOjQIfbbb7+aLi1jQlsAAAAA4DurpKQkfve738UHH3wQDRs2jF69esX1118fubm5NV1axoS2AAAAAMB3Vv/+/aN///41XUa18iAyAAAAAIAUEdoCAAAAAKSI0BYAAAAAIEWEtgAAAAAAKSK0BQAAAABIEaEtAAAAAECKCG0BAAAAgG3G7Nmzo127dvHll19+Y7999903brrpprLXn332WYwYMSK6desWO++885Yu8xvl1OjeAQAAAIAtYsxtz27V/d06ev9N6n/22WfHfffdFxERubm50a5duxg+fHicccYZkZOTeWzZq1evmDt3bhQUFERExL333hvjx4+PN998s1y/qVOnRv369cte33TTTfHZZ5/FY489Vja2pghtAQAAAIAaMWDAgLjqqqti3bp18c9//jMuuOCCyMnJiTPOOCPjOfPy8qJly5bf2q9Zs2blXr///vvRs2fP6NKlS8b7ri6WRwAAAAAAasSGgLV9+/YxevTo6Nu3bzz22GNRVFQUZ555ZnTv3j26du0aJ554YixYsKBs3EcffRSjR4+O7t27R7du3WLAgAHxz3/+MyLKL48we/bsOOecc2L58uXRrl27aNeuXVx55ZURUX55hH333TemTp0akyZNinbt2sXZZ5+91d+Lr3OnLQAAAACQCvn5+fHFF1/Ez372s3jvvffilltuiYYNG8b//u//xkknnRQzZsyI3NzcOP/886O4uDjuv//+qF+/fsyfPz8aNGhQYb5evXrFb37zm/j9738fTz/9dEREpf2mTp0aZ511VjRs2DAuvvjiyM/P3+LH+k2EtgAAAABAjUqSJGbOnBlPPfVUDBgwIKZNmxYPPPBA7L333hERcd1118Xee+8d06ZNi6OOOioWLVoURx55ZNkDwzp27FjpvHl5edGoUaPIysr6xiUTmjVrFnl5eZGfn1+lpRW2NKEtAAAAAFAjnnjiidh+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Z8Vee+1VYXuXLl3iww8/3OziAAAAAABqm4xC28WLF8cee+yx0e0NGzaMFStWZFwUAAAAAEBtlVFoW79+/Vi+fPlGt3/00UdRWFiYaU0AAAAAALVWRqHtHnvsEf/85z9j5cqVFbZ9+OGH8c9//rPSZRMAAAAAAPhmOZkMGjFiRFxwwQVx7rnnloWzM2bMiCeffDKef/75aNKkSQwfPrxaCwUAAAAAqA0yCm2bNm0av/vd7+Luu++O2bNnR0TEzJkzIz8/Pw444IAYNWpUFBQUVGuhAAAAAAC1QUahbURE48aN49RTT41TTz01li9fHqWlpVFQUBDZ2RmtuAAAAAAAQGS4pu3s2bNj3bp1Za8LCgqisLBQYAsAAAAAsJkyutP22muvjXr16sW+++4bffv2jR49elR3XQAAAAAAtVJGoe3FF18cM2fOjOeeey5mzJgRTZs2jT59+kTfvn1ju+22q+4aAQAAAABqjYxC2x133DF23HHH+MEPfhCvvPJKzJw5M6ZNmxYPPvhgbLfddnHggQdGnz59okmTJtVdLwAAAADANi3jB5FFRNSpUyf22muv2GuvvWLNmjUxZ86cmDFjRtx5553xt7/9Lbp37x79+vWL3r17R07OZu0KAAAAAKBWqLYnhy1cuDDeeeedWLhwYUREtG3bNlasWBE33HBDnHHGGfHWW29V164AAAAAALZZm3X766JFi2LWrFkxa9as+PTTT6OgoCD69OkTBx54YHTp0iUiIt59993405/+FDfddFNceeWV1VI0AAAAAMC2KqPQdurUqTFz5sxYsGBB5Obmxl577RVjxoyJ3XffPbKzy9+827Vr1xg0aFD86U9/qpaCAQAAAAC2ZRmFtrfddlvsuOOOMXbs2Ojdu3fUr1//G/t37do1hg0bllGBAAAAAAC1SUah7XXXXRctW7ascv8OHTpEhw4dMtkVAAAAAECtklFo+/XAds2aNbF06dKIiGjevHnk5+dXT2UAAAAAALVQxg8ie+edd+Kuu+6Kt956K0pLSyMiIjs7O3baaac48cQTo2vXrtVWJAAAAABAbZFRaPv222/H+PHjIycnJw466KBo165dRER8/PHH8cwzz8RFF10U48ePj27dulVrsQAAAAAA27qMQtt77rknmjZtGpdcckkUFhaW23bcccfFhRdeGHfffXdceOGF1VEjAAAAAECtkZ3JoLfffjsOOeSQCoFtRERhYWEcfPDB8fbbb29ubQAAAAAAtU5GoW1WVlasX79+o9tLS0sjKysr46IAAAAAAGqrjELbHXfcMR599NFYsmRJhW1Lly6Nxx57LHbaaafNLg4AAAAAoLbJaE3bE044IS666KI4++yzY5999ok2bdpERMSiRYvixRdfjDp16sQJJ5xQrYUCAAAAANQGGYW2nTt3jv/93/+Nu+++O1588cVYt25dRETk5eXF7rvvHiNGjIj27dtXa6EAAAAAALVBRqFtRET79u3jF7/4RZSWlsby5csjIqKgoCCyszNacQEAAAAAgNiM0HaD7OzsKCwsrIZSAAAAAADIOLRds2ZNPP/88/Hpp5/GypUrI0mSctuzsrLiBz/4wWYXCAAAAABQm2QU2r7++utx1VVXxapVq76xn9AWAAAAAGDTZBTa/uUvf4n8/Pz42c9+Ft26dYv69etXd10AAAAAALVSRk8NW7p0aRx99NGx6667CmwBAAAAAKpRRqFtx44dv3VpBAAAAAAANl1Goe2oUaPisccei3fffbe66wEAAAAAqNUyWtO2e/fuMXr06Pif//mfaNeuXTRr1iyys8vnv1lZWTFu3LhqKRIAAAAAoLbIKLR97rnn4rrrrovS0tL4/PPPY/Xq1RX6ZGVlbXZxAAAAAAC1TUah7d/+9rdo27ZtnHvuudG2bdvqrgkAAAAAoNbKaE3bL774Ig499FCBLQAAAABANcsotO3atWssXbq0umsBAAAAAKj1MgptTz755Jg9e3bMnj27uusBAAAAAKjVMlrT9g9/+EOsX78+rr322vjzn/8czZo1i+zs8vlvVlZWXHHFFdVSJAAAAABAbZFRaNuwYcNo1KhRtGnTprrrAQAAAACo1TIKbcePH1/NZQAAAAAAEJHhmrYAAAAAAGwZQlsAAAAAgBQR2gIAAAAApIjQFgAAAAAgRYS2AAAAAAApssmh7bp162Lq1Knxr3/9a0vUAwAAAABQq21yaJuXlxd33XVXLFq0aEvUAwAAAABQq2W0PMJ2220XS5Ysqe5aAAAAAABqvYxC2xEjRsQTTzwRr732WnXXAwAAAABQq+VkMmjatGnRsGHDuOyyy6Jly5bRsmXLyMvLK9cnKysrxo0bVy1FAgAAAADUFhmFtgsXLoyIiObNm0dpaWksXry4Qp+srKzNqwwAAAAAoBbKKLS94YYbqrsOAAAAAAAiwzVtAQAAAADYMjK603bp0qVV6te8efNMpgcAAAAAqLUyCm1PP/30KvW79957M5keAAAAAKDWyii0Pe200yq0lZaWxpIlS+Lpp5+OgoKCOOywwza7OAAAAACA2iaj0LZ///4b3XbMMcfEBRdcEKtWrcq0JgAAAACAWqvaH0SWn58f/fv3j4cffri6pwYAAAAA2OZVe2gbEZEkSRQVFW2JqQEAAAAAtmkZLY+wMatWrYo333wzHnzwwejcuXN1Tg0AAAAAUCtkFNp+73vf+8btzZs3jx/+8IcZFQQAAAAAUJtlFNoOGzYssrKyyrVlZWVFgwYNolWrVrHbbrtFnTp1qqVAAAAAAIDaJKPQ9vjjj6/uOgAAAAAAiGp4ENkXX3wR77//fqxZs6Y66gEAAAAAqNUyDm1feOGFOPvss+PUU0+NX/7yl/HOO+9ERMTy5ctj3LhxMWfOnGorEgAAAACgtsgotH3xxRfj97//fTRq1CiOO+64ctsKCgqiadOmMWPGjOqoDwAAAACgVskotL3//vuje/fucckll8Rhhx1WYfsOO+wQ77333mYXBwAAAABQ22QU2i5cuDD233//jW5v3LhxLF++POOiAAAAAABqq4xC27p1637jg8c+/fTTaNiwYcZFAQAAAADUVhmFtrvssks89dRTsX79+grbioqK4p///Gfstttum10cAAAAAEBtk1Foe8IJJ8SyZcvivPPOi8cffzwiIl555ZW455574txzz42IiOHDh1dflQAAAAAAtUROJoPatm0bF198cdx6661x7733RkTElClTIiKie/fuccopp0TLli2rr0oAAAAAgFoio9A2IqJDhw5x4YUXxooVK2Lx4sWRJEm0atUqCgoKNruoadOmxZQpU6KoqCg6duwYJ598cnTr1q3Svs8//3xMnjw5Fi9eHOvXr4/WrVvHUUcdFQceeOBm1wEAAAAAsLVlHNpu0LBhw40GqpmYPXt23H777TF27NjYfvvt4+GHH47LLrssrrnmmmjcuHGl+x86dGi0bds2cnJy4uWXX44bb7wxCgoKYvfdd6+2ugAAAAAAtoYqhbZPPfVURpP369dvk8c89NBDMXDgwBgwYEBERIwdOzZefvnlmD59egwZMqRC/1122aXc6yOPPDKeeuqpeOutt4S2AAAAAMB3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g4MRERGB//znP7C0tMSkSZMgEomwe/fuTj2Pvb19p/uYOHEiRCIRjh49iu+//x6GhoZ4/PHHMXXqVHWbSZMmIScnB3K5HDExMbCxsYG7uzsEAgFWrlyJmJgYnDp1ComJiTA2NoZEIsFzzz0HOzu7Lr9HJiYmmDx5MpKTk5GQkACVSgWpVIpFixZh0qRJHWZqy8iRIxEcHIxDhw7h22+/hUQiQVBQEBITE5Genq7R9tVXX0VjYyOOHz8OoVCIcePGYf78+Vi+fLlGOwcHB3z00Uf47rvvIJfLcefOHVhYWMDJyQkvvPBCl183EREREXWNQVPLa8OIiIiIiOihEBYWhvT0dISFhek6ChERERF1Ede0JSIiIiIiIiIiItIjLNoSERERERERERER6REWbYmIiIiIiIiIiIj0CNe0JSIiIiIiIiIiItIjnGlLREREREREREREpEdYtCUiIiIiIiIiIiLSIyzaEhEREREREREREekRFm2JiIiIiIiIiIiI9AiLtkRERERERERERER6hEVbIiIiIiIiIiIiIj3Coi0RERERERERERGRHmHRloiIiIiIiIiIiEiPsGhLREREREREREREpEf+D33efUw7nwIXAAAAAElFTkSuQmCC\n"},"metadata":{}}],"source":["# Plot the statistics with bar plots and hue 'sentiment'\n","plt.figure(figsize=(14, 8))\n","\n","cols = ['Ratio Majuscules', 'Nombre Exclamations', 'Nombre Questions', 'Nombre Ellipses',\n"," 'Nombre Hashtags', 'Nombre Mentions', 'Nombre URLs', 'Emoticone Positive', 'Emoticone Negative']\n","\n","# Melt the DataFrame to long format for easier plotting with seaborn\n","stats_melted = stats[cols].reset_index().melt(id_vars='sentiment', value_name='Valeur', var_name='Caractéristique')\n","\n","# Rename columns for better readability\n","stats_melted['Caractéristique'] = stats_melted['Caractéristique'].replace({\n"," 'Nombre Exclamations': '!',\n"," 'Nombre Questions': '?',\n"," 'Nombre Ellipses': '...',\n"," 'Nombre Hashtags': '#',\n"," 'Nombre Mentions': '@',\n"," 'Nombre URLs': 'http',\n"," 'Emoticone Positive': ':)',\n"," 'Emoticone Negative': ':('\n","})\n","\n","# Create the bar plot\n","sns.barplot(x='Caractéristique', y='Valeur', hue='sentiment', data=stats_melted)\n","\n","# Customize the plot\n","plt.title('Caractéristiques des tweets par sentiment', fontsize=15)\n","plt.xlabel('Caractéristique', fontsize=12)\n","plt.ylabel('Valeur moyenne', fontsize=12)\n","plt.legend(title='Sentiment')\n","plt.tight_layout()\n","plt.show()"]},{"cell_type":"code","execution_count":28,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":806},"id":"81wLmor1WjJB","executionInfo":{"status":"ok","timestamp":1751537507241,"user_tz":-120,"elapsed":358,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"1b3d59be-0754-4802-d825-299053434ed0"},"outputs":[{"output_type":"display_data","data":{"text/plain":["
"],"image/png":"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sGnTJtO/f39TqVIlRw0jRowwv/32W46/nX2b+O6770zPnj1NRESEkWR++OEHY0zOddnu0KFDZvTo0aZOnTomMDDQlC1b1jRo0MD86U9/Mr/88otT+7n9N2TIEEdb9vnLzcKFC02rVq1MYGCgiYiIMPHx8WbPnj15bs9X7++zy96PV8vIyDD//ve/TatWrUyZMmVMQECAadq0qZkyZYrJyMjIMf2pU6fM+PHjTf369U1wcLAJDQ01derUMffdd5/57rvvcv37eXG1z3788UfTq1cvEx4eboKCgky7du3M+vXrnaa3919en3fGGLNq1SpHnxw/ftyMGDHCVKlSxXh7e5spU6Y42jp8+LAZM2aMqVmzpvH39zdly5Y1PXv2zPE3ryWvWuzrWF59dObMGWOz2Ywk89577zmN27lzp5FkevbseUPL1i6/nyvXmxdj/tgvffLJJ6ZNmzYmMjLS+Pv7m+joaHPHHXeYN998s0DLLSYmxqSnp5tnn33W0Qc1atQwzzzzjLl48WKu7zt9+rR57LHHTO3atR191q1bN/P111/nOn1+tuura7K71rFV9v4syPvsy9ET21tB9ru5yb7vnD9/vmnZsqUJCgoyZcuWNQkJCeb333/P9X0F/cw3xpiDBw+agQMHmvLly5ugoCBz8803m88//9wcPHgwx/GJMcacO3fOvP7666Zr166mWrVqxs/Pz0RERJhu3bqZZcuW5Wj7Wuu63dX75Gu9L/v+/8svvzSdO3c2lStXNn5+fiYqKsq0adPGTJw48brLGCgOCKOAYi4/YZQxxvTv399IMn//+99zvD/7gc97771nhgwZ4givhgwZ4vhv7dq1ZsiQIaZp06ZGkmnTpo1jnP1LpzHGjB8/3kgyfn5+pk2bNqZ///6mTp06RpKpVauWOXHihFMN9oOtUaNGGZvNZlq0aGESEhJMixYtTFJS0g21+de//tV4e3ubli1bmnvuucfExsYaSaZcuXLm+PHjOZbTX//6VyPJeHl5mTZt2piBAwea9u3bm/DwcNO0aVOnaffs2WOqVq1qJJnq1aub3r17m06dOpmgoCAjybz88stO02/dutUEBAQYSaZJkybmnnvuMXFxcaZBgwb5PoArrOWV15fX8ePHG5vNZho3bmzi4uJMv379TP369Y0kExoaanbs2OGY1r5+SDLBwcFO684///lPx3S5fYHv3r27kZQjGLEbMGCAkWTmzp3rGHblyhUzcOBAI8mEhISYDh06mL59+zr65NZbbzVpaWmO6TMzM03Lli2NJFO+fHlz1113mXvuuce0bt3aBAUFOR0AXo99+fr6+pquXbuau+++20RGRppq1aqZXr165dqfnlpfMjMzzd133+1YHzp27GgSEhJMmzZtTFBQkOndu7fT9BUrVjShoaGmdevW5p577jHdunUzZcuWNZJMp06dTGZmptP09i/ICQkJJjQ01NSoUcMMGDDAdO3a1SxevNixvPK7Htn99NNPJjo62kgylSpVMn379jV9+/Y1DRs2NJIc+5xHH300133SkCFDzM8//+xo76233jJeXl7Gy8vLtGzZ0tx9992mSZMmRpKpUKGC+emnn5z+vn2bGDZsmPH19TUNGzY0CQkJpl27do56c1uXDx8+7Ait6tSpY/r162f69Oljmjdvbmw2m2Mbmz9/vunXr5+R5Agz7f9lDxTyCqPefvttI8nYbDbTrl07M2DAABMTE2PCwsLMvffe67YwKi0tzXTs2NFIMhEREaZLly6OsF6Sueuuu5xC5JSUFFOjRg0jyVStWtX06dPH9O/f39x6663G19c317ArL6722ZgxY0xQUJBp3LixGTBggGP9CAgIMDt37nRM/89//tO0adPGSDJNmzbN8XlnzP/CqB49epjo6GhTqVIl079/fxMXF2feeecdY4wxGzZscGwjdevWNfHx8eb22283Pj4+xtvb28ycOTNf8ztkyBBTq1YtI8l069bNqZ7ExERz4MCBXL88z5s3z3EsMHjwYKdxr7/+eq77l4IuW2MK9rlyvXkxxpjHHnvMSDL+/v6mS5cuZuDAgaZjx46mQoUKea6nuZFkqlWrZuLi4kxgYKCJi4sz8fHxjh9p7rjjjhz7rSNHjpiaNWs63jtgwADTqVMn4+3tbSSZ1157zWn6/G7X2Wu6+tiqW7dujmWVfXlkP34qyDFZYmKix7a3/O5382Lfd/7tb38z3t7epkOHDqZ///6Oz8g6deo4fX4bU/DPfGP++CGkQoUKRpKpXbu2Yx9us9nMQw89lOv29NVXXzk+p7t06WIGDBhgbrvtNmOz2YzNZjPTpk1zTJuYmGiGDBliKlasaCSZfv36OS0Lu6uPsezvy23/Y9//v/nmm0aS8fb2Nu3atTMDBw40Xbp0cXwuAiUBazJQzOU3jHruueeMJDNw4MAc78/toO9av8bnFVwYY8zs2bONJNOoUSOzb98+x/CsrCzz7LPPGklmwIABTu/J/stfbgftN9Kml5eX04FeZmam4wvgM8884/Sejz/+2EgylStXdpz5YJeWlub0i1hmZqZp3LixkWReeuklpy9j+/btMzVq1DDe3t5OX3zuv/9+I8m88sorOebx559/LvCZUe5cXnn16caNG82BAwdy/I0PPvjASDIdO3bMMe5aX3iNyf0LvH3ZDx8+PMf0KSkpJjAw0ISFhTmdmfPSSy8ZSaZDhw5OwWJ6eroZMWKEkWTGjx/vGP7NN98YSaZFixY5filPTk42W7duzbPm7DZu3GhsNpsJCwsz33//vWP4+fPnTadOnRx9kz0s8uT68o9//MNIMg0aNMjRl0lJSWb16tVOwxYsWJDjgD4lJcXExcUZSWbGjBlO47KfETd27NgcX/qMKfh6lJGRYerWrWskmYcfftikp6c7jd+1a5fZv3+/4/W19kn2v+/t7W2qVKmSo5/ff/99I8m0bNnSaXj2M5cmT56ca7u5rcv2bWzs2LE5pv/tt9+c6s7rl/nsctsXHzp0yAQEBBhfX1+nM/ouX75sBg8e7KjbHWHUAw884Nhn2MNuY/5YJ3r06GEkmbffftsx3N6nV4dUxvxxBkf2dfxabrTP/vWvfzmNe/jhh40kc9999+Vrvu3sYZT0x5mZue07oqKijLe3t/nkk0+cxm3ZssWULVvWhISEmFOnTuVrvq91ZqUxf6wP/v7+TnX83//9n5FkGjZsaKKjo52mj4+PN5LMli1bHMNcWbY38jmc27xcvHjR+Pv7mzJlyuTYN2RkZJhvv/021/nPjb1/oqOjza+//uoYfurUKdOoUSMjyeksNmOMY382aNAgp/3L2rVrTVBQkPH29nY6DijIdm2v6eptLftZdteal4IckxWF7S2v/e612PedQUFBZsOGDY7hFy5cMK1btzaSnEIfYwr+mW+MMXfccYeRZEaPHu302bR06VLj6+ub6/73wIEDZuPGjTlq/v777014eLgJDQ0158+fz3V+rj5L1i6vZXWt/U+1atWMzWZz2naN+WOby++PUUBRRxgFFHP5DaP+85//GEmme/fuOd7vzjDK/ktZbgdAWVlZplmzZsbb29vxy6gx/ztgze0yghtt8+pfiY35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4YcfJP1x5kZhycrKkvTHr+V5/bpml9uXqICAALe36eVVOCeA2uvq3r17rr/S2WV/lG9oaKi++eYbrV+/XosWLdLq1av1zTffaPny5frnP/+ptWvXqk6dOvmuoTCWV3apqam65557dPbsWT377LNKSEhQTEyMAgMDZbPZNGjQIH3++ed5hhYF1bVrV1WoUEFffvmlkpOTFRYWppkzZ+rKlSsaOHCgU1/a57N27drX/RJYrlw5x78fffRR3XPPPVqwYIGWL1+utWvXasqUKZo6daqmTJmihx56yC3zcrWisL7kx6xZs/Taa6+patWqmjJlim677TZVqFBBvr6+unz5svz9/fPs79zWR8n69ehq9mUfEhKifv36XXPahg0b5hiW13zlxdvbW7NmzdLjjz+uhQsX6ptvvtF3332ntWvX6sUXX9TSpUvVunXrArVpBftyym1Ys2bNcj3jLzt/f3/Hv1977TX9+c9/1sKFC7VixQqtX79emzdv1ksvvaTPP//8uv1wo31WGPv9vNYDe639+/dXcHBwnu+vV6+eW+qoWbOmqlatqk2bNunSpUtOgVNAQIBatWqlNWvWSPpfYGU/myp7vQVZtu78XMmuU6dO2r9/vxYvXqylS5dq9erV+uijj/TRRx+pX79+mjNnTr7bcqfcwo6ivF17enu7EfndVl39zHfFyJEjtWPHDvXr10/jxo1T3bp1VaZMGXl5eendd9/Vn//850L7vMquSZMm+umnn7R06VItWbJEq1ev1uzZszV79mzddtttWr169XXDQ6CoI4wCSoHk5GR9/fXXkqSOHTsW2t+x/8JVvnx5TZ8+vci2mRv7L2cHDhyQMea6v7zZ6xo5cuR1D96ys9lsatu2rdq2bSvpj8sfHn74YX3++ed66qmnNHv2bBfnwLkudyyvtWvX6syZM+rfv78mTZqUY7w7LqvIzsfHRwMGDNCbb76puXPnavjw4bleoif9bz7r1atX4PmsWrWqHnzwQT344IPKzMzUzJkzNWzYMI0bN07333+/ypYte833R0VF6dChQ/rtt99Uv379HON/++23HMM8tb7Y1+v8Xko5f/58SdLbb7+tnj17Oo1ztb9dWY8KWve1lC9fXgEBAY5LNAvzUuXsmjdvrubNm2vixIlKSUnRxIkTNWXKFD388MM3fKlLVFSU9uzZo99++y3XHxhyWwcl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5s2bl2PapKQk89xzz5mbbrrJhISEmICAAFO9enXTrVs389Zbb5nExETHtF988YUZPny4adiwoQkPDzdBQUEmNjbWjBw5Ml8Hb/mdN7uCLK+8+jQtLc089dRTpk6dOsbf399UrVrVjB492pw+fTrPOlJTU83YsWNN1apVjY+PT46DyuuFUXv27HGsz+3atbvu8li4cKHp2bOniYyMNL6+viYyMtLcfPPNZty4cWbbtm2O6fbt22eefvpp06ZNGxMVFWX8/PxMlSpVzB133GHmzp1rsrKyrvu3snvvvfdMkyZNjL+/v4mMjDT33nuvOXr06DX7xxPrizF/HMRPnz7dtGvXzoSFhRl/f39TvXp1c8899+So8+effza9evUykZGRJigoyDRv3ty8++67xpjct5v8hFGurEfGGHPy5Enz2GOPmdjYWBMQEGDCwsJM48aNzfjx483x48edpv36669NmzZtTEhIiGP9ubrNH374wQwZMsTExMQYPz8/Ex4ebho2bGiGDx9uFi9e7LQOuBpGrVmzxowZM8Y0a9bMlCtXzgQEBJiaNWuahISEXH8UOHnypLnvvvtMpUqVHF8Eswcf19oXz58/37Rs2dIEBgaasmXLmt69e5uff/75mrVv3LjRdOjQwQQFBZnQ0FBz5513mu3bt1+zHzMzM82MGTNMp06dTEREhPH19TWVK1c2t912m5k0aZLZs2eP0zJ+9NFHTYsWLUxkZKTx9/c3MTExplevXmbFihV5Lsu8uLPP8lqWW7ZsMV26dDFhYWGOH3HsbeQnjDLGmOPHj5tx48aZhg0bmqCgIBMUFGRq1aplevfubaZPn27Onz+f73n+9NNPzU033eQIDnPbX9oDx4YNG+Z4v305hISE5AhhsivIsrUryOfKteYlJSXFvPrqq6ZHjx6mevXqJiAgwJQrV87ccsstZsqUKebChQv5Xl72/dKlS5fMk08+aapXr278/PxMTEyMeeqpp0xaWlqu7zt9+rR59NFHTa1atRzz37VrV/P111/nOt8F2a7zOsbYt2+f6dOnjylXrpzx8vLKsc0V9JjMk9ubMfnb7+bGlTDKLr+f+XYHDhwwAwcONOXKlTOBgYGmefPm5uOPPzbr1q0zkkxCQkKO98yYMcM0b97cBAUFmXLlypnevXubHTt2XHM/OWXKFNOgQQNHcJe9vwoaRmVkZJi3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jz7KAW4Rk5mZqcDAQNWqVUspKSlatWqVfvjhBx08eFDVq1dXfHw8l4LfgKSkJEVFRSkmJkbHjx/X999/r2XLlikrK0s333yzhg4dyjZRBKSlpTnOEvn555/1448/avny5fL19VXr1q1133330U8uunLliry9vR2vjTHy9vZWbGysNm7cqLffflvDhg1T+/btlZ6erl27dqlu3br8IHiDsgdK2fvg/Pnz8vf3V9u2bXXlyhWtXr1a69at05EjR1S3bl099thjrOtFhL+/v7y9vXXixAnt3r1bq1at0m+//SYvLy8dOXJEaWlp6tatm9v+HmEULGffUdl3UpcvX1a5cuWUnp6uSZMmqXnz5ho5cqQkafv27Tp06JC6du1aaNeq4n/sX/JOnTqlyMhIpaen6+LFi1q6dKlmzZqlQYMGOc7mOXDggNauXauKFSsSRhVAeHi4Dh8+rGnTpungwYOqVq2a6tevry5duujDDz9Uy5YtCaOKqCtXrsjf319z587VoUOHVKtWLTVt2lSNGjXSu+++q02bNumuu+7ydJklVvZ7RK1bt06NGjVSeHi4GjVqpO+//14ffvih4uLi1KxZM8XGxuqzzz7T2bNnOcAtggIDA3XmzBl9/vnn+v3331WvXj01b95cd999tz744AMdPXqUMCqfcjubwM/PT8nJyZo6daoOHz6smJgYtWnTRqGhoZozZ446derE54zFrg7Ss7KyFBAQoNOnT+vvf/+7zp07p3r16ikhIUFpaWn6+uuvdeedd6p8+fIerLp4yszMdFxCv3v3btWoUUNXrlzRpUuXtHr1as2YMcPpeHbfvn2O41nCKNfZ90UpKSkKCAiQn5+ffvzxRwUHB8vf318+Pj56/fXXdfLkSVWoUEFVq1ZVr169NHnyZK1bt05t27b19CyUOrmdERgQEKCqVavq22+/1cGDB3XnnXdq8ODBqlevnl5//XW3P2yBMAqWs9ls2rFjh86cOaNOnTopOjpa7733njZt2qQ777xT9957r2ParVu3Kjk5mS8TFtq4caPef/99vf/++6pdu7YaNWqkDz/8UAMGDFD37t0l/XG6/8KFC+Xl5cVNUa9y9Y49+xeFrKwslS9fXv/4xz+0bNkytW/fXu3atXOcTbNs2TKlp6d7pG44s/fb2bNndenSJVWuXFnR0dFKSEjQ/v37Vb9+fbVv315ly5aVJIWFhRGYF6Ls21VSUpLeeOMNtWzZUqNHj1aPHj3Upk0bZWRkOH1xO3DgAJd7FQH2benUqVPKysqSj4+PYz/47bffqkWLFmrbtq3KlCkjm82miIgIXblyxdNlFwvZt4vk5GSlp6crMjJSHTt21KVLl7R3717FxcWpYcOGqlixovbt26fIyEgFBgZ6uPLSJXs/nT59WpJUvnx5de/eXQEBATp06JD69OmjatWqKTw8XFu2bFG5cuXk5+fnybKLpe3bt2vmzJl68cUX9dFHH2nXrl169tlnFRsbq+rVq+vtt9/Wfffd53Q8u3jxYvn4+HDz+BtkD6Jef/111ahRQzExMXrjjTf0xBNPqFmzZurevbv27t2r5s2bq127doqOjtbly5dVr149QkAPuPppxCdPnpSvr68aN26sMWPG6Pfff1dmZqZq1qzpeM/58+fl6+vr1joIo+ARP//8s5YuXapbbrlF9erV0+DBgzV79mxVrlxZly9fVkpKipYtW6aNGzdq0qRJHDhZqGnTpgoNDdUXX3yh3r17q3fv3kpOTtbChQvl5+enixcv6pdfflFSUpImT54sLy8vrrXPxsvLS8ePH9eqVas0aNAgp+vgvby8ZIxRbGysateu7bTMPvvsMx0/fpynixQRNptNmzZt0owZMyT98UvRiBEj1KhRIzVp0sQxXUZGhubOnatjx46pUaNGniq3RMt+RtSsWbOUnJysyMhIxyV5Y8eOdZydmZaWpiNHjui///2vkpKS9MQTTzja4EcNz7DfuPb9999XYGCg0tPT9ac//Uk333yz+vfv7+jbzMxMzZ49W4cOHdKIESM8XHXRl327mD17tnbv3u243LtBgwa66667HJ/NxhhdunRJ8+bNU3BwsMqVK+fh6kuP7P00depU/f7770pMTFSPHj0UFxenHj16OKbNysrS6dOn9d///lc1a9bMcUNzXJt9WWdkZGjs2LG6cOGCJk+e7Ag6+vfvr/Pnz2vRokUKCAhQWlqafvzxR507d47jWTfx8/NTbGys1q9fry+//FJ//vOf1axZM0lS586d1alTJ8fyNcZowYIFSkxMVHR0tAerLp2yP+xi7dq1io2NVWpqquMJt507d5Ykpaen68yZM/rwww+Vnp6uXr16ubUOwih4RIcOHbR7925t3rxZnTt3VqtWrZSamqp33nlH8+fPV0BA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jTcURImIiIj8hhRGSb1h2dGwffv2HDhwgK1btwKwcOFCsrKyWLRoEXZ2dto1T0REDCaTiby8PF588UX27dtnLOd2d3fH09OTxMREY6yNjQ2tW7fG1taWc+fOGWMdHBysUruIiIjI7UphlNQrlhlS7dq1Iy4ujokTJ3L27FkWLlxoBFG2trbWLlNERG4hJpOJgIAA/vGPfxAXFwdcDp7atWtHQkICBw8erDa2cePGODs7U1VVpd6DIiIiIjeBekZJvZSbm8tHH31EQUEBM2fOVBAlIiKGmgKkvLw8IiMj2bFjB9OnT6dnz54UFBSwdOlSiouLufvuu+nQoQNHjx7lq6++4s0336Rly5ZWegQiIiIitzeFUVJvFRYW4uzsjI2NjYIoEREBMHZWLS0txWw24+zsbBzLyclh8+bNfP7550ydOpXevXtTUFBAVFQUycnJFBQU4O7uzrPPPlutl5SIiIiI/LYURkm9Z3njISIiApCRkcHixYtxdHQkKCgId3d3unbtCkBFRQUffvghO3fu5OWXX6ZPnz5cunQJk8lEYWEhDg4OODo6WvkRiIiIiNze7KxdgMj/SkGUiIhYmM1mYmJiSE1Nxd7enqKiIsrLy3F1daVt27YMHDiQwMBAGjZsyJIlS3BycqJbt24AuLm5Wbd4ERERkTuEZkaJiIjIbSU3N5eoqCiysrJo3rw5wcHB7N27l6NHj5KWloarqyvNmjXj5MmT5OfnM2fOHPz9/a1dtoiIiMgdQzOjRERE5Lbi7u7O8OHD2bx5M0lJSbRo0YLHHnsMgOPHj5OTk8Pu3btp1KgR+fn5mhElIiIiUsc0M0pERERuS5aG5cePH6dHjx6MHDnSOFZZWUlVVRXFxcU0atTIilWKiIiI3HkURomIiMhtKzc3l8jISFJSUujRowehoaEA2oVVRERExIoURomIiMhtzRJInTp1invuuYewsDBrlyQiIiJyR9M2ZCIiInJbc3d3Z+TIkbRo0YLk5GQKCgqsXZKIiIjIHU0zo0REROSOkJubC1wOp0RERETEehRGiYiIiIiIiIhIndEyPRERERERERERqTMKo0REREREREREpM4ojBIRERERERERkTqjMEpEREREREREROqMwigREREREREREakzCqNERERERERERKTOKIwSERERuQV99913REVFUVlZae1SRERERH5TCqNE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\n"},"metadata":{}}],"source":["# Plot the differences in characteristics between positive and negative tweets\n","plt.figure(figsize=(12, 8))\n","sns.barplot(x=diff_df_sorted.index, y='Différence Relative', data=diff_df_sorted, palette='coolwarm')\n","plt.title('Différences relatives des caractéristiques entre tweets positifs et négatifs', fontsize=15)\n","plt.xlabel('Caractéristiques')\n","plt.ylabel('Différence Relative (%)')\n","plt.xticks(rotation=45)\n","plt.tight_layout()\n","plt.show()"]},{"cell_type":"code","execution_count":29,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":2656},"id":"73Tukj7VWjJC","executionInfo":{"status":"ok","timestamp":1751537533960,"user_tz":-120,"elapsed":26718,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"3394f45a-f5b7-41c6-c942-749fd25bd662"},"outputs":[{"output_type":"stream","name":"stdout","text":["Analyse de 63 tokens spécifiques...\n","\n","Tokens les plus discriminants entre tweets positifs et négatifs:\n","Token 'I':\n"," - Dans tweets positifs: 35.47%\n"," - Dans tweets négatifs: 49.62%\n"," - Différence absolue: 14.15%\n"," - Orientation: Négatif (-33.3%)\n","\n","Token 'you':\n"," - Dans tweets positifs: 19.80%\n"," - Dans tweets négatifs: 10.60%\n"," - Différence absolue: 9.21%\n"," - Orientation: Positif (60.6%)\n","\n","Token 'my':\n"," - Dans tweets positifs: 14.27%\n"," - Dans tweets négatifs: 21.13%\n"," - Différence absolue: 6.86%\n"," - Orientation: Négatif (-38.7%)\n","\n","Token 'not':\n"," - Dans tweets positifs: 3.94%\n"," - Dans tweets négatifs: 9.00%\n"," - Différence absolue: 5.06%\n"," - Orientation: Négatif (-78.2%)\n","\n","Token 'good':\n"," - Dans tweets positifs: 7.48%\n"," - Dans tweets négatifs: 3.56%\n"," - Différence absolue: 3.92%\n"," - Orientation: Positif (71.0%)\n","\n","Token 'no':\n"," - Dans tweets positifs: 2.67%\n"," - Dans tweets négatifs: 6.51%\n"," - Différence absolue: 3.83%\n"," - Orientation: Négatif (-83.5%)\n","\n","Token 'love':\n"," - Dans tweets positifs: 5.62%\n"," - Dans tweets négatifs: 2.05%\n"," - Différence absolue: 3.58%\n"," - Orientation: Positif (93.3%)\n","\n","Token 'sad':\n"," - Dans tweets positifs: 0.18%\n"," - Dans tweets négatifs: 3.38%\n"," - Différence absolue: 3.21%\n"," - Orientation: Négatif (-180.0%)\n","\n","Token 'can't':\n"," - Dans tweets positifs: 2.46%\n"," - Dans tweets négatifs: 5.51%\n"," - Différence absolue: 3.05%\n"," - Orientation: Négatif (-76.5%)\n","\n","Token 'don't':\n"," - Dans tweets positifs: 2.76%\n"," - Dans tweets négatifs: 5.52%\n"," - Différence absolue: 2.75%\n"," - Orientation: Négatif (-66.5%)\n","\n","Token 'your':\n"," - Dans tweets positifs: 5.17%\n"," - Dans tweets négatifs: 2.44%\n"," - Différence absolue: 2.73%\n"," - Orientation: Positif (71.6%)\n","\n","Token 'so':\n"," - Dans tweets positifs: 7.65%\n"," - Dans tweets négatifs: 10.27%\n"," - Différence absolue: 2.62%\n"," - Orientation: Négatif (-29.3%)\n","\n","Token 'me':\n"," - Dans tweets positifs: 8.54%\n"," - Dans tweets négatifs: 10.90%\n"," - Différence absolue: 2.36%\n"," - Orientation: Négatif (-24.3%)\n","\n","Token 'great':\n"," - Dans tweets positifs: 3.03%\n"," - Dans tweets négatifs: 1.03%\n"," - Différence absolue: 2.00%\n"," - Orientation: Positif (98.6%)\n","\n","Token 'bad':\n"," - Dans tweets positifs: 0.71%\n"," - Dans tweets négatifs: 2.63%\n"," - Différence absolue: 1.92%\n"," - Orientation: Négatif (-114.6%)\n","\n"]},{"output_type":"display_data","data":{"text/plain":["
"],"image/png":"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kdVqdep35swZbd68WdK1YUky48knn3R62OChQ4f00ksvScrYMenj46NGjRrpzJkzeuuttxztSUlJGjt2rA4dOpRmnuzarsOGDZMkxcTEON11nvq8yqipU6e6vAP0q6++kuS8XceNGyeLxaLY2Fh9++23Tv2TkpIc8xRk9gc3/vvf/3Y6v9evX68pU6Zk23rsd4G7Km5L0rvvvuvyGHO139Jj/0Jv69atLqfbh8EYM2aM00MTT5w44TjWXD2PIivGjh0rf39/Pfnkk1qyZEma6VevXtXixYvdDs+VUTfatlnZxzdapjv27fvCCy843eV+4cIFjRw5UsYYPfbYY1keEulmlStXToMHD9bhw4fVt29f/fXXX2n67N+/X5999tkNl2Xfru+//77TZ4i4uDjHl3bXy+p2tevXr58sFos+/fRTt0O5SDf33nrlyhXt3LlTFSpUUERERJbiBAAgwwwAALhlDBw40EgyMTExTu3Hjh0zERERRpIJDw83ffr0Mffcc4/x9PQ0kszrr7+eZlmSzG233WY6depkAgICTOfOnU337t1NcHCwkWRatmxpbDZbhuKaNm2akWQkmW7dupmBAwe6/Dl58mSaeUePHm0kmYCAANOlSxfTvn174+XlZTw9Pc3SpUsztX1GjRplJJmIiAjzwAMPmIcffti8+uqrjuk7duwwJUqUMJJMtWrVTN++fU2TJk2MJOPl5WUWLFjgtLxDhw4ZSaZ58+ZO7fHx8SYqKspIMs8++6yj/a+//jJ169Y1kkxwcLBp0aKF6devn+nYsaOpUKGCkWRGjx7ttCz7PnNlzpw5afa3fXuVK1fOdOrUyfTr18+0aNEi3X3tyrfffmskmYEDB6aZNn78eCPJeHh4mDvuuMP07NnT9OjRw9StW9d4enqaYsWKOfouXbrUSDLFihUz99xzj3nggQdMx44dTVBQkJFkOnfunKF47Nu6YcOG5o477jDBwcGme/fupnPnziYgIMBIMv37908zX/PmzY0kc+jQIaf21atXGw8PDyPJNGrUyHTr1s3cdtttpmTJko7zaM6cOY7+2bVdjTGmZ8+eRpIpUqSIue+++xzn1R133GEaNmzoMl5Xx0GxYsWMh4eHqVu3runVq5fp2bOniYyMNJJMSEiI2bt3r1P/KVOmGIvFYiSZO++80/Tt29e0adPGlC5d2mmfGWNMeHi4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Vrt375Z07W7zOnXqKCgoSM2bN9eRI0ckSUuXLlWpUqXUtGnT3EkIKGQoogMAAAAAAAA5bObMmapatapq166tuLg4DR482GW/oUOHavHixUpMTNSJEye0YsUKtWnTRpIUHR2t7du369y5c1q/fr2io6OVkJCgGTNmaMKECbmZDlCo5OsHi8bFxWnZsmU6dOiQzp49qyeffFINGjRwTDfGaOHChVq7dq0uXbqk6OhoDRkyRKGhoY4+Fy9e1OzZs/Xzzz/LYrHorrvu0qBBg/jTFwAAAAAAAGSbkSNHauTIkdq3b5+WLFmiUqVKuezXsmVLjRkzRpGRkUpOTla7du3Up08fSVJUVJSGDBmiHj16KCwsTJMmTdLEiRM1fPhw7du3T6+99posFkuaGhmAm5Ov70S/evWqKlasqIcfftjl9C+++EIrVqzQI488okmTJsnX11exsbFOD2548803dfToUT333HN65plntHv3bs2aNSu3UgAAAAAAAEAhUrVqVVWvXl3/+Mc/0kxLSEhQnz591K9fPx04cEBnzpxRQECARo0a5egzaNAgrV69WnPnztXRo0d1/Phxde/eXSNGjNBrr72mV199VSNHjpQxJjfTAgq0fH0net26dVW3bl2X04wx+uqrr9S9e3fVr19f0rVv/B555BFt3bpVTZo00bFjx7Rt2za98sorqly5siRp8ODBeuWVVzRgwACFhITkWi4AAAAAAAAoHJKSklyOiX7kyBFduXJFDz/8sDw8PFS8eHENGDBADzzwQJq+VqtVMTExevfdd3X69GklJycrPDxckmSz2XT69GmVLFkyx3MprNq3X5kr6/H29pbNZsvRdaxY0S5Hl18Q5Os70dPz999/KyEhQbVr13a0BQQEqEqVKtq7d68kae/evSpSpIijgC5JtWrVksVi0f79+3M9ZgAAAAAAABQsly5d0oIFC3Tu3DkZY7R7925Nnz5dLVq0SNO3SpUqKlKkiObOnaukpCRduHBBn3zyiWrWrJmm78yZM9WpUydFREQoJCREVqtVu3btUlxcnKxWq4oXL54L2QGFQ76+Ez09CQkJkqRixYo5tRcrVswxLSEhQUWLFnWa7unpqcDAQEcfV2w2m9M3QBaLRf7+/tkSNwAAAAAAAAoOi8WipUuX6qWXXpLValXJkiXVoUMHPfnkk5Kk/v37q0GDBnr88cdV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AAAAAAAAAAB5JctjokdGRmrVqlUqV66ctm3bJqvVqvr16zumx8fHO92pDgAAAAAAAABAfpPlO9H79+8vT09Pvf7661q7dq06deqkChUqSJJSUlK0adMmVatWLdsCBQAAAAAAAAAgt2X5TvSyZctq2rRpOnbsmAICAlS6dGnHtKtXr2rw4MEKDw/PliABAAAAALjVVPvPf3J8HRaLRaGhoYqPj5cxJsfXBwAA0spyEV2SvLy8VLFixTTt/v7+TkO7AAAAAAAAAACQH91UET0lJUXff/+9fvnlF506dUqSVLJkSdWrV0/NmjWTh0eWR4sBAAAAAAAAACDPZbmIfvnyZcXGxmr//v3y9/dXmTJlJEk7d+7U5s2btWrVKj377LMKCAjItmABAAAAAAAAAMhNWS6iz5s3TwcPHtTgwYN1zz33yMvr2qKSkpL0zTffaM6cOZo/f74GDx6cbcECAAAAAAAAAJCbsjzeypYtW9S2bVvde++9jgK6dG2c9LZt26pNmzbavHlztgQJAAAAAAAAAEBeyHIR/eLFiwoLC3M7vVy5crp48WJWFw8AAAAAAAAAQJ7LchG9bNmy+umnn9xO/+mnnxzjpAMAAAAAAAAAkB9luYjetm1b7dixQ6+88oq2b9+uv//+W3///be2bdumV155RTt27FC7du2yM1YAAAAAAAAAAHJVlh8seu+99+rcuXP64osvtG3bNueFenmpR48eatu27c3GBwAAAAAAAABAnslyEV2SevXqpXbt2mnHjh06deqUJKlUqVKqVauWihYtmi0BAgAAAABuTdX+858cXb7FYlFoaKji4+NljMnRdQEAALhzU0V0SSpatKiaNm2aHbEAAAAAAAAAAHBLueki+s8//6xff/1VJ0+elHTtTvS6deuqXr16Nx0cAAAAAAAAAAB5KctF9EuXLum1115TXFycPDw8VLx4cUnSjh07tHr1alWrVk1PPfWUihQpkm3BAgAAAAAAAACQm7JcRJ8zZ452796tBx54QG3btpWfn58k6cqVK1q1apU+/fRTzZkzRyNHjsy2YAEAAAAAAAAAyE1ZLqJv3bpVbdu21X333efU7ufnp/vuu0+nTp3Sd999d9MBAgAAAAAAAACQVzyyOqOXl5fCwsLcTg8LC5OX100PuQ4AAAAAAAAAQJ7JchH9rrvu0qZNm5SSkpJmWnJysjZu3KiGDRveVHAAAAAAAAAAAOSlLN8q3qxZM82ePVvPPfecWrdurbJly0qS4uPjtWbNGiUlJalZs2Y6ePCg03yVKlW6uYgBAAAA4BZR7T//ydHlWywWhYaGKj4+XsaYHF0Xctbhw4f13HPP6ZdffpG/v78efvhhDR8+PE2/48ePq0WLFk5tV69eVatWrfTBBx9Ikl5++WXNnz9foaGhevvttxUZGSlJOnLkiIYMGaLly5c7nlsGAABuXpaL6C+88ILj/wcOHHDZJyYmJk3bggULsrpKAAAAAADyneTkZA0aNEj33nuv5syZoyNHjqhv374KDQ1Vt27dnPqWK1dO+/btc7y22WyqV6+eunTpIknatm2bVq5cqU2bNmnhwoWKjY3V3LlzJUnjx49XTEwMBXQAALJZlovow4YNy844AAAAAAAokA4cOKADBw5ozJgx8vb2VpUqVdS3b1998sknaYro11u5cqVSUlLUoUMHSdfuNq9Tp46CgoLUvHlzffTRR5KkpUuXqlSpUmratGmO5wMAQGGT5SL69X9eBgAAAAAA0rI/Syz1kDwpKSnavXv3DeedN2+eHnjgAfn5+ckYo+joaL366qs6d+6c1q9fr+joaCUkJGjGjBlavHhxjuUAAEBhluUHiwIAAAAAgBurXLmyKlSooNdee01Xr17Vnj17NH/+fF24cCHd+Y4dO6b169dryJAhjraoqCgNGTJEPXr00Lp16/T8889r4sSJGj58uPbt26eePXuqV69e2rJlS06nBQBAoZHlO9EBAAAAAMCNeXt7a/bs2XrhhRdUr149hYaGqnfv3vr444/TnW/BggWqWbOm6tSpo/j4eEf7oEGDNGjQIEnSpk2bdPz4cXXv3l0NGjTQZ599JmOMevXqpc2bN8tiseRobgAAFAYU0QEAAAAAyGFRUVGaN2+e43VsbKwaNmzotn9KSooWLFigUaNGue1jtVoVExOjd999V6dPn1ZycrLCw8MlXXsg6enTp1WyZMnsSwIAgEKKIjoAAAAAADksLi5OFStWlJeXl9asWaP58+drwYIFbvt///33OnPmjLp27eq2z8yZM9WpUydFREQoOTlZVqtVu3btksVikdVqVfHixXMgEwAACh+K6AAAAAAA5LDly5frww8/1NWrV1W9enXNnj1b1atXlyT1799fDRo00OOPP+7oP2/ePHXs2FFFixZ1ubz9+/dr9erVWrZsmSTJ09NTkyZN0oABA2SxWDR58mR5enrmfGIAABQCFNEBAAAAAMhh48aN07hx41xOczU2+qxZs9JdXpUqVbRixQqnti5duqhLly5ZDxIAALjkkR0LSU5O1qJFizR69GgNGDBAo0aN0qeffiqr1ZodiwcAAAAA5HOHDx9W//79Vb16ddWrV09vv/22274XLlzQiBEjFBkZqTJlymjq1KlO019++WXVqFFDrVu31t69ex3tR44cUZs2bXTlypUcywMAABQ+2XIn+ocffqgdO3aoW7duKl68uI4dO6YlS5YoISFBw4cPz45VAAAAALjFVPvPf3J8HRaLRaGhoYqPj5cxJsfXh5yRnJysQYMG6d5779WcOXN05MgR9e3bV6GhoerWrVua/s8995wSEhK0detWeXh4qGXLlipXrpx69uypbdu2aeXKldq0aZMWLlyo2NhYzZ07V5I0fvx4xcTEyM/PL7dTBAAABVim7kRP/Q1/alu2bNGIESPUokUL1alTRx07dlT37t31008/ZUuQAAAAAID868CBAzpw4IDGjBkjb29vValSRX379tUnn3ySpm9iYqKWLVump59+WsWKFVNkZKQGDx6s+fPnS7p2t3mdOnUUFBSk5s2b68iRI5KkpUuXqlSpUmratGmu5gYAAAq+TBXRJ06cqBkzZujs2bNO7SEhIdq1a5fjdUpKivbu3avg4OBsCRIAAAAAkH+lpKRIktNfE6SkpGj37t1p+h44cEBWq1U1atRwtNWoUcPRNzo6Wtu3b9e5c+e0fv16RUdHKyEhQTNmzNCECRNyOBMAAFAYZaqIPnXqVCUnJ+uJJ57QkiVLZLPZJEkDBgzQ0qVLNWrUKD3//PN67LHH9Msvv2jgwIE5EjQAAAAAIP+oXLmyKlSooNdee01Xr17Vnj17NH/+fF24cCFN30uXLikgIEBeXv8bfbRYsWK6ePGiJCkqKkpDhgxRjx49tG7dOj3//POaOHGihg8frn379qlnz57q1auXtmzZkmv5AQCAgi1TY6KXKFFCTzzxhH7//Xd98MEHWrt2rQYMGKCGDRtq5syZ+uWXX3T27FkVK1ZMd9xxh4oWLZpTcQMAAAAA8glvb2/Nnj1bL7zwgurVq6fQ0FD17t1bH3/8cZq+RYoUUWJiopKSkuTt7S1JOn/+vAIDAx19Bg0apEGDBkmSNm3apOPHj6t79+5q0KCBPvvsMxlj1KtXL23evFkWiyV3kgQAAAVWlh4sGh0drVdeeUVr167V+++/rxUrVmjQoEG6++67szs+AAAAAEABEBUVpXnz5jlex8bGqmHDhmn6Va5cWd7e3oqLi1OdOnUkSbt27VJ0dHSavlarVTExMXr33Xd1+vRpJScnKzw8XJJks9l0+vRplSxZMocyAgAAhUWmhnNJzWKxqHXr1po+fboqVaqkZ599Vv/+979d/jkeAAAAAKBwi4uL0+XLl2W1WvXVV19p/vz5Gj16dJp+/v7+6ty5s6ZMmaLz589r3759mj17tvr27Zum78yZM9WpUydFREQoJCREVqtVu3btUlxcnKxWq4oXL54bqQEAgAIu00X0DRs26M0339SUKVP0+eefy9PTUwMHDtSrr76qU6dO6fHHH9eXX36p5OTknIgXAAAAAPKVxMRENWnSRNWqVZMknTp1SiNHjlS9evUUFRWltm3batWqVekuo0GDBqpcubKqVq2qqlWrOpYlScnJyRo1apSqVaumrl276sSJE45pW7duVY8ePZwe6JlXli9frvr166t69ep69913NXv2bFWvXl2S1L9/f7355puOvrGxsQoKClK9evXUpEkT9e3bVz179nRa3v79+7V69WoNHTpUkuTp6alJkyZpwIABGjBggCZPnixPT8/cSxAAABRYmRrOZcmSJfrss8/UpEkTBQcHa8WKFdq+fbtiYmJUrlw5jR8/Xj///LM+/PBDrVmzRg8++KDuuOOOnIodAAAAAG55r732msqVK6czZ85IuvbgzJo1a2r8+PEqW7as1qxZo+HDh+urr75SZGSk2+W89dZbateuXZr2r776SseOHdO2bdv0r3/9SzNnztTEiRNls9n0/PPPa+bMmbfEuODjxo3TuHHjXE67fmz0oKAgvf3227JYLAoNDVV8fHyaLwKqVKmiFStWOLV16dJFXbp0yd7AAQBAoZepO9FXr16tLl26aPjw4XrwwQc1duxYxcXF6fjx444+9erV0+uvv65WrVo53UkAAAAAAIXNjh07tG7dOo0YMcLRFh4erqFDhyosLEweHh5q27atKleurF9++SVL6/jjjz/UoEED+fr66u6779aRI0ckSe+8847atGmjKlWqZEsuAAAAhVWmiug2m03+/v6O135+fpKkpKQk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gVk9p8fdT8lrFXfv3rWLnJL7p/30sOPArJ7T07afkq/nUR6riF6mTBm99NJLMpvN2rJli5577jl5eXk90M/FxUXPPvusatWq9TirlyS1a9dOjRs3fmQfT0/PVK3L3d1d58+fT9F28+ZN6zLL/5a25H1y5sz50FHokvTKK6+obdu21tuWJ9D9I9SlezvFctCT3P39LEwm00Pb7969m+p2y4vqfklJSQ9tT0xMtB6cpqb9gZzuK2o/LJ70aJckc1JS6vqbzXroWmy0J19H8m30uPspo7fBw/JPTU6P037/cyQ1z73k63ysx/0X+ymj2u/PNzWvpxTrewpzepz2DHmP+H//5n0v+Qf1U/G+9/+e1Ht58vztJafk/imn5J+zydvvl5VySm275eDO8viW125Wz+lx95PlOZB8G2T1nFIbe/L25PnbS07JPSony32Sf35l9ZxSu58e9vy3yKo5Par9/pySfwY87PglK+Zkkdr99KjngKX9fk97To+K/f725ANW7CUni9TklPw40F5ySu6fcrLkb8nDHnK636NysrQnf/1n9Zwe5lE5pfY4MCvllNr25Dklz99eckouM3N6VB0yuccqolevXl3Vq1eXdG9DtGjRQmXLln2cVfyjPHnyKE+ePOmyrnLlymnlypW6efOmdcqWY8eOKWfOnCpWrJgkqWzZsvrjjz9S3O/YsWMqV66czfU6OTml+HUEAAAAAAAAAGCf0nxh0cGDB6d7Af1xRUREKDg4WBEREUpKSlJwcLCCg4MVFxcn6d4FQosVK6Y5c+YoODhYQUFBWrJkiV566SVrEbxly5YKDw+Xn5+frl27ps2bN2v//v16+eWXMzM1AAAAAAAAAMBT4F9fWPTGjRu6dOmSYmJiHjr8vVGjRv/2IWxaunSpfv/9d+vtd999V5Lk6+urSpUqyWg06r333tO3336rDz/8UM7OzmrUqJG6detmvY+Hh4fee+89LVy4UBs2bFCBAgU0aNAgVatWLcPiBoDs6ocfftCyZct05swZNWnSRN9///0j+y9atEjz5s1TaGioPDw85Ovrq5deekmJiYkaOXKktm3bpvLly2v+/PkqXLiwJOnQoUOaMmWKli9f/tBrFwAAAAAAADyONBfRTSaTvvrqKx08ePCRc8dkZBF9yJAhGjJkyCP7FCpUSO+///4j+1SqVElTp05Nz9AAAA/h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iZGHh0eWfx4kl3xbbNmyRdeuXVNsbKwaNWqkSpUqKTY2Vps3b9batWtVrFgxeXp6Ki4uTpcuXdLMmTOt2yAr1EWyIoroyFQmk0lz5syRl5eXevToobt37yoqKkr79+9XmTJltGrVKgUHBytXrlyKiYnR2LFj9eyzz2Z22BkiIiJC8+bNU40aNdSmTRtFRkZq3LhxypUrl0JCQtS/f3+99NJL1v73X2zEXlhOw7O8+V+5ckWffPKJSpQooeHDh8vNzS3FB4Hl76zyhToqKkoffvihKlasqM6dOys+Pl4ffPCBOnToIKPRqIiICO3YsUOvvfaaSpQoIV9fXzVq1EhxcXE6fvy4Jk6caLdFVcs+jIuLU0BAgL766is1aNBAPj4+1jNPHlU8sieXLl3SN998Iw8PD3Xp0kVFixbN7JAyhKV4YJkLPvnIicOHD2v9+vXKlSuXfHx87LaAIv3vfSwwMFAbN25UZGSkihYtqkaNGqlGjRpKTEzU3r17tXXrVrm5uek///lPihHp9sCyDY4cOaK1a9fq9u3bcnV1Vdu2bVWtWjUlJSVp1apV2rx5s/r27atmzZpldsgZZtGiRfr999/VokULeXp6au7cuWrSpInatWtn/QFp4cKF2rBhg8aNG6fKlStncsT/TkhIiL744gsVKlRIffv2TTHaeMuWLfr+++/Vv3//FGchwP6ZTCZduHBBhQoVso7ItVeWwkeePHk0YMCAB14DCxcu1CuvvKJXXnnFLgpEtsTExGj+/Plyd3dX//79deLECa1du1YhISHKnTu38ubNq/fffz/F9R/sycqVK7V+/Xq99tpryps3r3777TeFhISocePGat++vc6ePauQkBBdvHhRnp6eateunXUKE3t5Xhw4cEA///yzPv/8c+sP6TExMdq+fbv27dunESNGPHA2elZ+LiQ/K3/WrFmqUaOGDAaDjh07pkqVKql58+YppmW7fv26AgICVL16desgI3uQfB/+/fffypUrl958802NHz9eN2/e1LRp09S7d2+1bNlSJpNJq1evVt26dVN8J87Kz4Pkkufh5+en7du3q0KFCoqNjdWZM2fUsWNHtWvXTgaDQZs3b9bWrVvl6uqqPn36WK8hZU/vCU8jiujIVCaTSb6+vipbtqy6du2qZcuW6fLly/rrr7/k5OSkdu3aWQ+cS5QokSVOS06rv//+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/keqRBcRERERERERERG5BdTS786kJLqIiIiIiIiIiIjILaKWfnceve4QERERERERERERuUWUQL/zKIkuIiIiIiIiIiIiIlIDJdFFRERERERERERERGqgJLqIiIiIiIiIiIiISA2URBcRERERERERERERqYGS6CIiIiIiIiIiIiIiNVASXURERERE7J544gni4uIcHYaIiIiIyG3D7OgARERERETk/+eJJ574rz738ssv065du1qORkRERETEWJREFxERERG5w02ZMqXa1ykpKRw7duyG7S1btryVYYmIiIiIGIKS6CIiIiIid7iePXtW+zozM5Njx47dsF1ERERERP53SqKLiIiIiNQBZWVlbNq0ic8++4yioiK8vLx46KGHGDx4ME5OTj977HvvvcemTZsYM2YMAwYMACA9PZ3ExESys7NxcnLi3nvvZdSoUbRu3dp+3PLly/n888954403ePvtt/nnP/+Js7MzvXr1YtSoUZhMWqJJRERERG5/GrWKiIiIiBiczWbj9ddfJykpiQ4dOvDkk0/SokUL4uPjWbdu3c8eu3HjRjZt2sSECRPsCfSUlBQWLlyIi4sL0dHRDB06lLy8PObOncuZM2eqHW+1Wpk/fz6NGjVi9OjRtG3blu3bt5OcnFxr5ysiIiIicjOpEl1ERERExOBSU1M5fvw4I0aMICoqCoD+/fvz5z//mZ07d9K/f398fHxuOG79+vUkJSUxefJkevfuDVytaF+zZg19+/Zl4sSJ9s/26tWLGTNmkJiYWG17RUUF3bp1Y9iwYQBERkYye/ZsPv74YyIjI2vxrEVEREREbg5VoouIiIiIGFx6ejomk8leSV7l4Ycfxmaz8cUXX1TbbrPZiIuLY+fOnUydOtWeQAc4duwYly5dIjw8nOLiYvsfk8lEUFAQJ06cuOH7X58sDw0N5ccff7xp5yciIiIiUptUiS4iIiIiYnBnz56lSZMmNGjQoNr2Vq1a2fdfKyUlhbKyMsaPH09ERES1ff/6178AmDdv3k9+r+u/R/369XF3d6+2rWHDhly6dOl/PxEREREREQdQEl1ERERERKoJCQkhJyeH3bt30717d9zc3Oz7bDYbAFOmTKFx48Y3HFuvXr1qX2vxUBERERG502lEKyIiIiJicF5eXly4cIHLly9X23769Gn7/mv5+PgwZ84czp8/z/z586sd16xZMwA8PDxo3779DX/atWtXy2cjIiIiInJrKYkuIiIiImJw999/P1arlV27dlXbnpSUhJOTEx07drzhGD8/P1544QVOnz5NTEwM5eXlAHTo0IEGDRqQmJiIxWK54bji4uJaOQcREREREUdROxcREREREYPr1KkT7dq1Y+PGjZw9exY/Pz++/PJLUlNTGThwID4+Pj95XHBwMLNmzWLBggUsWbKE3/3ud7i6ujJhwgSWLVvG7NmzCQ8Px93dnYKCAtLS0ggJCWHcuHG3+AxFRERERGqPkugiIiIiIgZnMpmYPXs27777LgcPHmTv3r14e3szatQoBg8e/LPHhoWF8eyzz7JkyRJiY2OZNm0aERERNGnShA8++ICtW7dSUVGBp6cn9957L3369LlFZyUiIiIicms42apWBhIRERERERERERERkWrUE11EREREREREREREpAZKoouIiIiIiIiIiIiI1EBJdBERERERERERERGRGiiJLiIiIiIiIiIiIiJSAyXRRURERERERERERERqoCS6iIiIiIiIiIiIiEgNlEQXEREREREREREREamBkugiIiIiIiIiIiIiIjVQEl1EREREREREREREpAZKoouIiIiIiIiIiIiI1EBJdBERERERERERERGRGiiJLiIiIiIiIiIiIiJSAyXRRURERERERERERERq8H+X2rvN9TuLgAAAAABJRU5ErkJggg==\n"},"metadata":{}}],"source":["def analyser_tokens(df, tokens_to_analyze=None):\n"," \"\"\"Analyse les tokens spécifiques et leur relation avec le sentiment\"\"\"\n","\n"," # Liste par défaut de tokens intéressants à analyser si non spécifiée\n"," if tokens_to_analyze is None:\n"," tokens_to_analyze = [\n"," # Pronoms\n"," 'I', 'you', 'we', 'they', 'me', 'my', 'your', 'our', 'their',\n","\n"," # Mots de sentiment positif\n"," 'love', 'good', 'great', 'best', 'happy', 'awesome', 'amazing', 'excellent', 'wonderful', 'perfect',\n","\n"," # Mots de sentiment négatif\n"," 'hate', 'bad', 'worst', 'sad', 'terrible', 'awful', 'horrible', 'sorry', 'disappointed', 'annoyed',\n","\n"," # Expressions internet\n"," 'lol', 'wtf', 'omg', 'bro', 'lmao', 'rofl', 'yolo', 'idk', 'smh', 'btw', 'imo', 'tbh',\n","\n"," # Intensificateurs\n"," 'very', 'really', 'so', 'too', 'absolutely', 'completely', 'totally',\n","\n"," # Négations\n"," 'not', 'no', 'never', \"don't\", \"can't\", \"won't\", \"didn't\",\n","\n"," # Émoticônes\n"," ':)', ':(', ':D', ';)', ':-)', ':-(', ':-D', ';-)'\n"," ]\n","\n"," print(f\"Analyse de {len(tokens_to_analyze)} tokens spécifiques...\")\n","\n"," # Créer un échantillon équilibré pour l'analyse\n"," sample_size = min(100000, df[df['sentiment'] == 'Négatif'].shape[0], df[df['sentiment'] == 'Positif'].shape[0])\n"," neg_samples = df[df['sentiment'] == 'Négatif'].sample(sample_size, random_state=42)\n"," pos_samples = df[df['sentiment'] == 'Positif'].sample(sample_size, random_state=42)\n","\n"," balanced_df = pd.concat([neg_samples, pos_samples])\n","\n"," # Analyser les tokens spécifiques\n"," results = {}\n"," for token in tokens_to_analyze:\n"," # Vérifier présence du token dans l'échantillon équilibré\n"," token_lower = token.lower() if isinstance(token, str) else \"\"\n","\n"," if token in [\"don't\", \"can't\", \"won't\", \"didn't\"]:\n"," # Cas spécial pour les contractions\n"," has_token = balanced_df['text'].astype(str).apply(\n"," lambda x: token.lower() in x.lower() or token.lower().replace(\"'\", \"\") in x.lower()\n"," )\n"," elif token in [':)', ':(', ':D', ';)', ':-)', ':-(', ':-D', ';-)']:\n"," # Cas exact pour les émoticônes\n"," has_token = balanced_df['text'].astype(str).apply(\n"," lambda x: token in x\n"," )\n"," else:\n"," # Recherche standard\n"," has_token = balanced_df['text'].astype(str).apply(\n"," lambda x: token_lower in x.lower() and\n"," (not token_lower.isalnum() or\n"," re.search(r'\\b' + re.escape(token_lower) + r'\\b', x.lower()) is not None)\n"," )\n","\n"," balanced_df[f'has_{token}'] = has_token\n","\n"," # Calculer les pourcentages par sentiment\n"," pos_with = balanced_df[(balanced_df['sentiment'] == 'Positif') & (balanced_df[f'has_{token}'] == True)].shape[0]\n"," pos_total = balanced_df[balanced_df['sentiment'] == 'Positif'].shape[0]\n"," pos_pct = pos_with / pos_total * 100 if pos_total > 0 else 0\n","\n"," neg_with = balanced_df[(balanced_df['sentiment'] == 'Négatif') & (balanced_df[f'has_{token}'] == True)].shape[0]\n"," neg_total = balanced_df[balanced_df['sentiment'] == 'Négatif'].shape[0]\n"," neg_pct = neg_with / neg_total * 100 if neg_total > 0 else 0\n","\n"," # Calculer le ratio de présence pos/neg (valeur positive = plus présent dans les tweets positifs)\n"," ratio = (pos_pct - neg_pct) / ((pos_pct + neg_pct) / 2) * 100 if (pos_pct + neg_pct) > 0 else 0\n","\n"," # Calculer la significativité (fréquence moyenne)\n"," avg_frequency = (pos_pct + neg_pct) / 2\n","\n"," results[token] = {\n"," 'pos_pct': pos_pct,\n"," 'neg_pct': neg_pct,\n"," 'diff': abs(pos_pct - neg_pct),\n"," 'ratio': ratio,\n"," 'avg_freq': avg_frequency,\n"," 'orientation': 'Positif' if ratio > 0 else 'Négatif'\n"," }\n","\n"," # Créer un dataframe pour faciliter la visualisation\n"," tokens_df = pd.DataFrame(results).T\n"," tokens_df['token'] = tokens_df.index\n","\n"," # Trier par différence absolue et afficher les plus discriminants\n"," most_discriminative = tokens_df.sort_values('diff', ascending=False)\n","\n"," print(\"\\nTokens les plus discriminants entre tweets positifs et négatifs:\")\n"," for token, row in most_discriminative.head(15).iterrows():\n"," print(f\"Token '{token}':\")\n"," print(f\" - Dans tweets positifs: {row['pos_pct']:.2f}%\")\n"," print(f\" - Dans tweets négatifs: {row['neg_pct']:.2f}%\")\n"," print(f\" - Différence absolue: {row['diff']:.2f}%\")\n"," print(f\" - Orientation: {row['orientation']} ({row['ratio']:.1f}%)\")\n"," print()\n","\n"," # Classification des tokens\n"," categories = {\n"," 'Pronoms': ['I', 'you', 'we', 'they', 'me', 'my', 'your', 'our', 'their'],\n"," 'Sentiment positif': ['love', 'good', 'great', 'best', 'happy', 'awesome', 'amazing', 'excellent', 'wonderful', 'perfect'],\n"," 'Sentiment négatif': ['hate', 'bad', 'worst', 'sad', 'terrible', 'awful', 'horrible', 'sorry', 'disappointed', 'annoyed'],\n"," 'Expressions internet': ['lol', 'wtf', 'omg', 'bro', 'lmao', 'rofl', 'yolo', 'idk', 'smh', 'btw', 'imo', 'tbh'],\n"," 'Intensificateurs': ['very', 'really', 'so', 'too', 'absolutely', 'completely', 'totally'],\n"," 'Négations': ['not', 'no', 'never', \"don't\", \"can't\", \"won't\", \"didn't\"],\n"," 'Émoticônes': [':)', ':(', ':D', ';)', ':-)', ':-(', ':-D', ';-)']\n"," }\n","\n"," # Créer des visuels par catégorie\n"," for category, cat_tokens in categories.items():\n"," # Filtrer les tokens de cette catégorie qui sont présents dans l'analyse\n"," valid_tokens = [t for t in cat_tokens if t in tokens_df.index]\n"," if not valid_tokens:\n"," continue\n","\n"," cat_df = tokens_df.loc[valid_tokens]\n","\n"," if len(cat_df) > 0:\n"," plt.figure(figsize=(12, 6))\n","\n"," # Trier par ratio\n"," cat_df_sorted = cat_df.sort_values('ratio')\n","\n"," # Créer des couleurs basées sur l'orientation (positif/négatif)\n"," colors = ['firebrick' if r < -20 else 'indianred' if r < 0 else 'royalblue' if r < 20 else 'darkblue'\n"," for r in cat_df_sorted['ratio']]\n","\n"," # Calculer les tailles mais utiliser un alpha fixe\n"," sizes = np.clip(cat_df_sorted['avg_freq'] / cat_df_sorted['avg_freq'].max() * 0.8 + 0.2, 0.3, 1.0)\n","\n"," # Créer le graphique\n"," bars = plt.bar(cat_df_sorted.index, cat_df_sorted['ratio'], color=colors,\n"," alpha=0.8, linewidth=1)\n","\n"," # Ajouter les valeurs d'occurrence moyenne\n"," for bar, freq in zip(bars, cat_df_sorted['avg_freq']):\n"," plt.text(bar.get_x() + bar.get_width()/2, bar.get_height() + (5 if bar.get_height() > 0 else -15),\n"," f\"{freq:.1f}%\", ha='center', va='bottom', fontsize=9, color='black')\n","\n"," plt.axhline(y=0, color='black', linestyle='-', alpha=0.3)\n"," plt.title(f'Orientation des tokens - {category}', fontsize=15)\n"," plt.xlabel('Token')\n"," plt.ylabel('Orientation (% relatif)')\n"," plt.ylim(min(cat_df_sorted['ratio'].min() * 1.2, -100), max(cat_df_sorted['ratio'].max() * 1.2, 100))\n"," plt.xticks(rotation=45)\n"," plt.grid(axis='y', linestyle='--', alpha=0.3)\n"," plt.tight_layout()\n"," plt.show()\n","\n"," # Visualisation globale des tokens les plus discriminants et les plus fréquents\n"," plt.figure(figsize=(15, 8))\n","\n"," # Sélectionner les top tokens par discrimination et fréquence\n"," top_tokens = tokens_df.sort_values('diff', ascending=False).head(20)\n","\n"," # Trier par ratio\n"," top_tokens = top_tokens.sort_values('ratio')\n","\n"," # Créer des couleurs basées sur l'orientation (positif/négatif)\n"," colors = ['firebrick' if r < -20 else 'indianred' if r < 0 else 'royalblue' if r < 20 else 'darkblue'\n"," for r in top_tokens['ratio']]\n","\n"," # Calculer les tailles mais utiliser un alpha fixe\n"," sizes = np.clip(top_tokens['avg_freq'] / top_tokens['avg_freq'].max() * 0.8 + 0.2, 0.3, 1.0)\n","\n"," # Créer le graphique\n"," bars = plt.bar(top_tokens.index, top_tokens['ratio'], color=colors,\n"," alpha=0.8, linewidth=1)\n","\n"," # Ajouter les valeurs d'occurrence moyenne\n"," for bar, freq in zip(bars, top_tokens['avg_freq']):\n"," plt.text(bar.get_x() + bar.get_width()/2, bar.get_height() + (5 if bar.get_height() > 0 else -15),\n"," f\"{freq:.1f}%\", ha='center', va='bottom', fontsize=9, color='black')\n","\n"," plt.axhline(y=0, color='black', linestyle='-', alpha=0.3)\n"," plt.title('Top 20 tokens les plus discriminants (orientation relative)', fontsize=15)\n"," plt.xlabel('Token')\n"," plt.ylabel('Orientation relative (% positif vs négatif)')\n"," plt.ylim(min(top_tokens['ratio'].min() * 1.2, -100), max(top_tokens['ratio'].max() * 1.2, 100))\n"," plt.xticks(rotation=45)\n"," plt.grid(axis='y', linestyle='--', alpha=0.3)\n"," plt.tight_layout()\n"," plt.show()\n","\n"," return tokens_df\n","\n","# Pour utiliser la fonction\n","tokens_df = analyser_tokens(df)"]},{"cell_type":"markdown","source":["#### 9. Stratégie de prétraitement pour la détection de sentiment dans les tweets\n","\n","Les résultats présents ici proposent une stratégie relativement exhaustive (bien qu'elle ne prétende pas l'être complètement) de traitement des tweets et de l'importance que l'on peut donner ou non à certains éléments textuels.\n","Toutes les méthodes proposées n'ont pas forcément été implémentées dans la fonction de prétraitement `preprocess_tweet` utilisée dans les notebooks d'entraînement de modèles prédictifs (pour des raisons de timings à respecter dans la réalisation de ce projet).\n","\n","Les pictogrammes suivants permettent d'identifier les fonctionnalités implémentées ou non :\n","✅ Implémenté dans `preprocess_tweet`\n","⚠️ Non implémenté (proposé mais pas utilisé)\n","\n","\n","##### Différences entre tweets positifs et négatifs\n","\n","Les résultats montrent des différences significatives dans la structure des tweets selon leur sentiment :\n","\n","- Les tweets positifs contiennent **93% plus d'URLs** que les négatifs\n","- Les tweets positifs contiennent **48% plus de mentions (@)**\n","- Les tweets positifs utilisent **39% plus de hashtags (#)**\n","- Les tweets positifs utilisent **39% plus de points d'exclamation (!)**\n","- Les tweets négatifs contiennent **24% plus d'ellipses (...)**\n","- Les tweets négatifs sont légèrement plus longs et contiennent plus de mots\n","\n","##### Stratégie de prétraitement recommandée\n","\n","Voici une stratégie de prétraitement complète basée sur ces observations :\n","\n","1. **Nettoyage de base** :\n"," - ⚠️ Correction des fautes d'orthographe courantes → *Non implémentée*\n"," - ✅ Suppression des caractères spéciaux non significatifs\n"," - ✅ Conversion en minuscules\n"," - ✅ Conversion des caractères HTML (`html.unescape`)\n"," - ⚠️ Conservation d'une feature sur le **ratio de majuscules** → *Non implémentée* (la casse est supprimée)\n","\n","2. **Traitement des éléments spéciaux** :\n"," - ✅ **URLs** : Remplacées par un token spécial \"``\"\n"," - ✅ **Mentions (@)** : Remplacées par un token \"``\"\n"," - ✅ **Hashtags (#)** : Hashtag séparé du mot et conservé sous forme \"# happy\"\n","\n","3. **Feature engineering** :\n"," - ⚠️ Création de features numériques pour :\n"," - Nombre d'URLs\n"," - Mentions\n"," - Hashtags\n"," - Points d'exclamation, de question, ellipses\n"," → *Non implémenté*\n"," - ⚠️ Calcul du ratio de majuscules → *Non implémenté*\n"," - ⚠️ Détection et classification des émoticônes → *Non implémenté*\n","\n","4. **Tokenisation et normalisation** :\n"," - ✅ Tokenisation (`nltk.word_tokenize`)\n"," - ✅ Lemmatisation (`WordNetLemmatizer`)\n"," - ✅ Suppression des stopwords, en conservant les négations importantes (`no`, `not`, etc.)\n","\n","##### Influence des éléments spécifiques sur le sentiment\n","\n","- **Présence de 'http'** : Très significatif (93% de différence). \n"," ✅ Remplacé par `` \n"," ⚠️ *Pas de feature numérique pour le comptage*\n","\n","- **Présence de '#'** : Significatif (39% de différence). \n"," ✅ Hashtag conservé via token `#` et mot séparé \n"," ⚠️ *Pas de feature de comptage du nombre de hashtags*\n","\n","- **Présence de '@'** : Très significatif (48% de différence). \n"," ✅ Remplacé par `` \n"," ⚠️ *Pas de feature de comptage du nombre de mentions*\n","\n","##### Traitement recommandé pour les éléments spéciaux\n","\n","- **URLs** : \n"," ✅ Remplacement par `` \n"," ⚠️ *Pas de feature numérique associée*\n","\n","- **Mentions (@)** : \n"," ✅ Remplacement par `` \n"," ⚠️ *Pas de feature numérique associée*\n","\n","- **Hashtags (#)** : \n"," ✅ Séparation du `#` et du mot qui suit \n"," ⚠️ *Pas de feature de comptage du nombre de `#`*\n","\n","---\n","\n","#### ⚙️ Bilan\n","\n","La fonction de prétraitement actuelle implémente **les opérations textuelles de base** et le **traitement structurel des éléments Twitter (URLs, mentions, hashtags)**.\n","\n","En revanche, les stratégies suivantes **n'ont pas encore été mises en œuvre** :\n","- Création de **features numériques structurées** (longueur, nombre de ponctuations, etc.)\n","- Conservation et exploitation de la **casse** (ratio de majuscules)\n","- Traitement spécifique des **émoticônes**\n","- **Correction orthographique**\n","\n","Ces éléments pourraient enrichir les modèles classiques (avec `TF-IDF`) ou être injectés comme **features auxiliaires** dans des modèles plus avancés (LSTM, BERT).\n"],"metadata":{"id":"akVkIiD4AplZ"}},{"cell_type":"markdown","metadata":{"id":"fUfJHL0rWjJC"},"source":["##### Exemple de prétraitement"]},{"cell_type":"code","execution_count":30,"metadata":{"id":"zMCpAoskWjJC","executionInfo":{"status":"ok","timestamp":1751537534024,"user_tz":-120,"elapsed":62,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["df = raw_data.copy()"]},{"cell_type":"code","execution_count":31,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":206},"id":"f0NIpj9hWjJC","executionInfo":{"status":"ok","timestamp":1751537534039,"user_tz":-120,"elapsed":7,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"3beee82f-3685-480b-80e6-801fb7d2e06a"},"outputs":[{"output_type":"execute_result","data":{"text/plain":[" target ids date flag user text\n","0 0 1467810369 Mon Apr 06 22:19:45 PDT 2009 NO_QUERY _TheSpecialOne_ @switchfoot http://twitpic.com/2y1zl - Awww, t...\n","1 0 1467810672 Mon Apr 06 22:19:49 PDT 2009 NO_QUERY scotthamilton is upset that he can't update his Facebook by ...\n","2 0 1467810917 Mon Apr 06 22:19:53 PDT 2009 NO_QUERY mattycus @Kenichan I dived many times for the ball. Man...\n","3 0 1467811184 Mon Apr 06 22:19:57 PDT 2009 NO_QUERY ElleCTF my whole body feels itchy and like its on fire \n","4 0 1467811193 Mon Apr 06 22:19:57 PDT 2009 NO_QUERY Karoli @nationwideclass no, it's not behaving at all...."],"text/html":["\n","
\n","
\n","\n","
\n"," \n","
\n","
\n","
target
\n","
ids
\n","
date
\n","
flag
\n","
user
\n","
text
\n","
\n"," \n"," \n","
\n","
0
\n","
0
\n","
1467810369
\n","
Mon Apr 06 22:19:45 PDT 2009
\n","
NO_QUERY
\n","
_TheSpecialOne_
\n","
@switchfoot http://twitpic.com/2y1zl - Awww, t...
\n","
\n","
\n","
1
\n","
0
\n","
1467810672
\n","
Mon Apr 06 22:19:49 PDT 2009
\n","
NO_QUERY
\n","
scotthamilton
\n","
is upset that he can't update his Facebook by ...
\n","
\n","
\n","
2
\n","
0
\n","
1467810917
\n","
Mon Apr 06 22:19:53 PDT 2009
\n","
NO_QUERY
\n","
mattycus
\n","
@Kenichan I dived many times for the ball. Man...
\n","
\n","
\n","
3
\n","
0
\n","
1467811184
\n","
Mon Apr 06 22:19:57 PDT 2009
\n","
NO_QUERY
\n","
ElleCTF
\n","
my whole body feels itchy and like its on fire
\n","
\n","
\n","
4
\n","
0
\n","
1467811193
\n","
Mon Apr 06 22:19:57 PDT 2009
\n","
NO_QUERY
\n","
Karoli
\n","
@nationwideclass no, it's not behaving at all....
\n","
\n"," \n","
\n","
\n","
\n","\n","
\n"," \n","\n"," \n","\n"," \n","
\n","\n","\n","
\n"," \n","\n","\n","\n"," \n","
\n","\n","
\n","
\n"],"application/vnd.google.colaboratory.intrinsic+json":{"type":"dataframe","variable_name":"df"}},"metadata":{},"execution_count":31}],"source":["df.head()"]},{"cell_type":"code","execution_count":32,"metadata":{"id":"OkZs7W-nWjJC","executionInfo":{"status":"ok","timestamp":1751537534086,"user_tz":-120,"elapsed":40,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["def example_preprocess_tweet(tweet):\n"," # Features numériques\n"," features = {\n"," 'url_count': tweet.lower().count('http'),\n"," 'mention_count': tweet.count('@'),\n"," 'hashtag_count': tweet.count('#'),\n"," 'exclamation_count': tweet.count('!'),\n"," 'question_count': tweet.count('?'),\n"," 'ellipsis_count': tweet.count('...'),\n"," 'capitals_ratio': sum(1 for c in tweet if c.isupper()) / len(tweet) if len(tweet) > 0 else 0\n"," }\n","\n"," # Prétraitement du texte\n"," processed_text = tweet\n","\n"," # Remplacer les URLs\n"," processed_text = re.sub(r'https?://\\S+', '', processed_text)\n","\n"," # Traiter les mentions\n"," processed_text = re.sub(r'@\\w+', '', processed_text)\n","\n"," # Traiter les hashtags (séparer # du mot)\n"," processed_text = re.sub(r'#(\\w+)', r'# \\1', processed_text)\n","\n"," # Traiter le langage html\n"," processed_text = html.unescape(processed_text)\n","\n"," # Tokenisation simple (split par espaces)\n"," tokens = processed_text.lower().split()\n","\n"," # Autres étapes de nettoyage...\n","\n"," return processed_text, features"]},{"cell_type":"code","execution_count":33,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":0},"id":"PMJiRgr3WjJC","executionInfo":{"status":"ok","timestamp":1751537534120,"user_tz":-120,"elapsed":71,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"864b28f5-cc48-43e2-ee70-4e355ec66cdc"},"outputs":[{"output_type":"stream","name":"stdout","text":["Tweet prétraité: I'm SO frustrated w/ flight # delayed AGAIN!!\n"," 😡 Their customer service doesn't care :( Check this horrible experience: \n"," Can't wait to fly with \"someone\" else next time!\n","\n","Caractéristiques extraites:\n","- url_count: 1\n","- mention_count: 1\n","- hashtag_count: 1\n","- exclamation_count: 3\n","- question_count: 0\n","- ellipsis_count: 1\n","- capitals_ratio: 0.06422018348623854\n"]}],"source":["# Exemple de tweet\n","tweet_example = \"\"\"I'm SO frustrated w/ @AirParadis flight #delayed AGAIN!!\n"," 😡 Their customer service doesn't care :( Check this horrible experience: http://bit.ly/2xYz...\n"," Can't wait to fly with "someone" else next time!\"\"\"\n","\n","# Prétraitement\n","processed_tweet, tweet_features = example_preprocess_tweet(tweet_example)\n","print(\"Tweet prétraité:\", processed_tweet)\n","print(\"\\nCaractéristiques extraites:\")\n","for feature, value in tweet_features.items():\n"," print(f\"- {feature}: {value}\")"]},{"cell_type":"code","execution_count":34,"metadata":{"id":"1tP38oGLWjJC","executionInfo":{"status":"ok","timestamp":1751537534157,"user_tz":-120,"elapsed":36,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["import pandas as pd\n","import numpy as np\n","import re\n","import string\n","from tqdm import tqdm\n","\n","def pretraiter_tweets_dataframe(df, colonne_texte='text', afficher_progression=True, optimiser=True):\n"," \"\"\"\n"," Fonction complète pour prétraiter tous les tweets d'un DataFrame.\n","\n"," Args:\n"," df (pd.DataFrame): DataFrame contenant les tweets\n"," colonne_texte (str): Nom de la colonne contenant les tweets à prétraiter\n"," afficher_progression (bool): Afficher une barre de progression\n"," optimiser (bool): Si True, ne conserve que les colonnes utiles à l'entraînement\n","\n"," Returns:\n"," tuple: (DataFrame prétraité, liste des noms de features)\n"," - DataFrame avec les tweets prétraités et les features extraites\n"," - Liste des noms de features extraites pour faciliter l'analyse\n"," \"\"\"\n"," # Dictionnaire pour les contractions\n"," contractions = {\n"," \"ain't\": \"am not\", \"aren't\": \"are not\", \"can't\": \"cannot\",\n"," \"couldn't\": \"could not\", \"didn't\": \"did not\", \"doesn't\": \"does not\",\n"," \"don't\": \"do not\", \"hadn't\": \"had not\", \"hasn't\": \"has not\",\n"," \"haven't\": \"have not\", \"he'd\": \"he would\", \"he'll\": \"he will\",\n"," \"he's\": \"he is\", \"i'd\": \"i would\", \"i'll\": \"i will\", \"i'm\": \"i am\",\n"," \"i've\": \"i have\", \"isn't\": \"is not\", \"it's\": \"it is\",\n"," \"let's\": \"let us\", \"shouldn't\": \"should not\", \"that's\": \"that is\",\n"," \"there's\": \"there is\", \"they'd\": \"they would\", \"they'll\": \"they will\",\n"," \"they're\": \"they are\", \"they've\": \"they have\", \"wasn't\": \"was not\",\n"," \"we'd\": \"we would\", \"we're\": \"we are\", \"we've\": \"we have\",\n"," \"weren't\": \"were not\", \"what's\": \"what is\", \"where's\": \"where is\",\n"," \"who's\": \"who is\", \"won't\": \"will not\", \"wouldn't\": \"would not\",\n"," \"you'd\": \"you would\", \"you'll\": \"you will\", \"you're\": \"you are\",\n"," \"you've\": \"you have\", \"gonna\": \"going to\", \"wanna\": \"want to\"\n"," }\n","\n"," # Dictionnaire pour les émoticônes\n"," emoticons = {\n"," # Positifs\n"," ':)': '', ':-)': '',\n"," ':D': '', '=)': '',\n"," ':-D': '', ':p': '',\n"," ':-p': '', ';)': '',\n"," ';-)': '', ':3': '',\n"," '<3': '',\n","\n"," # Négatifs\n"," ':(': '', ':-(': '',\n"," '=(': '', ':-(': '',\n"," ':\\'(': '', ':/': '',\n"," ':\\\\': '', ':|': '',\n"," ':-|': '', '>:(': '',\n"," 'D:': ''\n"," }\n","\n"," # Liste simplifiée de stopwords en anglais\n"," english_stopwords = {\n"," 'a', 'an', 'the', 'and', 'but', 'if', 'or', 'because', 'as', 'until', 'while', 'of', 'at', 'by',\n"," 'for', 'with', 'about', 'against', 'between', 'into', 'through', 'during', 'before', 'after',\n"," 'above', 'below', 'to', 'from', 'up', 'down', 'in', 'out', 'on', 'off', 'over', 'under', 'again',\n"," 'further', 'then', 'once', 'here', 'there', 'when', 'where', 'why', 'how', 'all', 'any', 'both',\n"," 'each', 'few', 'more', 'most', 'other', 'some', 'such', 'only', 'own', 'same', 'so',\n"," 'than', 'too', 'very', 'can', 'will', 'just', 'should', 'now'\n"," }\n"," # Conserver les négations\n"," negations = {'no', 'not', 'none', 'nor', 'never', 'neither'}\n"," english_stopwords = english_stopwords - negations\n","\n"," # Définir la liste des noms de features\n"," feature_names = ['text_length', 'word_count', 'url_count', 'mention_count',\n"," 'hashtag_count', 'exclamation_count', 'question_count',\n"," 'ellipsis_count', 'capitals_ratio', 'positive_emoticon',\n"," 'negative_emoticon']\n","\n"," # Fonction pour prétraiter un tweet individuel\n"," def preprocess_tweet(tweet):\n"," if pd.isna(tweet) or not isinstance(tweet, str):\n"," # Gérer les valeurs NaN/None ou non-string\n"," return \"\", {\n"," 'text_length': 0, 'word_count': 0, 'url_count': 0, 'mention_count': 0,\n"," 'hashtag_count': 0, 'exclamation_count': 0, 'question_count': 0,\n"," 'ellipsis_count': 0, 'capitals_ratio': 0, 'positive_emoticon': 0,\n"," 'negative_emoticon': 0\n"," }\n","\n"," # Extraction des features numériques\n"," features = {\n"," 'text_length': len(tweet),\n"," 'word_count': len(tweet.split()),\n"," 'url_count': tweet.lower().count('http'),\n"," 'mention_count': tweet.count('@'),\n"," 'hashtag_count': tweet.count('#'),\n"," 'exclamation_count': tweet.count('!'),\n"," 'question_count': tweet.count('?'),\n"," 'ellipsis_count': tweet.count('...'),\n"," 'capitals_ratio': sum(1 for c in tweet if c.isupper()) / len(tweet) if len(tweet) > 0 else 0,\n"," 'positive_emoticon': sum(tweet.count(emot) for emot in [':)', ':D', '=)', ':-)', ':-D']),\n"," 'negative_emoticon': sum(tweet.count(emot) for emot in [':(', '=(', ':-(', ':\\'(', ':-(']),\n"," }\n","\n"," # Prétraitement initial du texte\n"," processed_text = tweet\n","\n"," # Remplacer les émoticônes par des tokens spéciaux\n"," for emoticon, replacement in emoticons.items():\n"," processed_text = processed_text.replace(emoticon, ' ' + replacement + ' ')\n","\n"," # Remplacer les URLs\n"," processed_text = re.sub(r'https?://\\S+', ' ', processed_text)\n","\n"," # Traiter les mentions\n"," processed_text = re.sub(r'@\\w+', ' ', processed_text)\n","\n"," # Traiter les hashtags (séparer # du mot)\n"," processed_text = re.sub(r'#(\\w+)', r' # \\1 ', processed_text)\n","\n"," # Traiter le langage html\n"," processed_text = html.unescape(processed_text)\n","\n"," # Convertir les contractions\n"," words = processed_text.split()\n"," processed_words = []\n"," for word in words:\n"," word_lower = word.lower()\n"," # Vérifier les contractions\n"," if word_lower in contractions:\n"," processed_words.append(contractions[word_lower])\n"," else:\n"," processed_words.append(word)\n"," processed_text = ' '.join(processed_words)\n","\n"," # Tokenisation simple (split par espaces)\n"," tokens = processed_text.lower().split()\n","\n"," # Conserver les tokens spéciaux\n"," special_tokens = ['', '', '', '', '#']\n","\n"," # Suppression des stopwords\n"," tokens = [token for token in tokens if token.lower() not in english_stopwords or token.lower() in special_tokens]\n","\n"," # Nettoyer la ponctuation (sauf pour les tokens spéciaux)\n"," cleaned_tokens = []\n"," for token in tokens:\n"," if token.lower() in special_tokens:\n"," cleaned_tokens.append(token)\n"," else:\n"," # Supprimer la ponctuation\n"," cleaned_token = ''.join(c for c in token if c not in string.punctuation)\n"," if cleaned_token: # Vérifier que le token n'est pas vide\n"," cleaned_tokens.append(cleaned_token)\n","\n"," # Reconstruire le texte traité\n"," processed_text = ' '.join(cleaned_tokens)\n","\n"," # Nettoyer les espaces multiples\n"," processed_text = re.sub(r'\\s+', ' ', processed_text).strip()\n","\n"," return processed_text, features\n","\n"," # Créer une copie du DataFrame pour éviter de modifier l'original\n"," df_processed = df.copy()\n","\n"," # Initialiser les colonnes pour les features et le texte prétraité\n"," for feature in feature_names:\n"," df_processed[feature] = np.nan\n","\n"," df_processed['processed_text'] = ''\n","\n"," # Afficher les informations sur le DataFrame avant prétraitement\n"," print(f\"DataFrame original : {df.shape[0]} lignes × {df.shape[1]} colonnes\")\n","\n"," # Appliquer le prétraitement à chaque tweet\n"," if afficher_progression:\n"," print(\"Prétraitement des tweets en cours...\")\n"," tqdm.pandas(desc=\"Progression\")\n"," processed_data = df_processed[colonne_texte].progress_apply(preprocess_tweet)\n"," else:\n"," processed_data = df_processed[colonne_texte].apply(preprocess_tweet)\n","\n"," # Extraire le texte prétraité et les features\n"," for i, (processed_text, features) in enumerate(processed_data):\n"," df_processed.at[i, 'processed_text'] = processed_text\n"," for feature, value in features.items():\n"," df_processed.at[i, feature] = value\n","\n"," print(f\"Prétraitement terminé. {len(df_processed)} tweets ont été traités.\")\n","\n"," # Si optimisation demandée, ne garder que les colonnes utiles\n"," if optimiser:\n"," # Identifier les colonnes à conserver : target (si elle existe) + processed_text + features\n"," colonnes_utiles = ['processed_text'] + feature_names\n","\n"," # Ajouter la colonne target si elle existe (différents noms possibles)\n"," target_cols = ['target', 'sentiment', 'label']\n"," for target_col in target_cols:\n"," if target_col in df_processed.columns:\n"," colonnes_utiles.append(target_col)\n","\n"," # Créer un DataFrame optimisé\n"," colonnes_avant = df_processed.shape[1]\n"," df_optimise = df_processed[colonnes_utiles].copy()\n"," colonnes_apres = df_optimise.shape[1]\n","\n"," print(f\"DataFrame optimisé : {colonnes_avant - colonnes_apres} colonnes supprimées\")\n"," print(f\"Nouvelles dimensions : {df_optimise.shape[0]} lignes × {df_optimise.shape[1]} colonnes\")\n","\n"," return df_optimise, feature_names\n","\n"," return df_processed, feature_names"]},{"cell_type":"code","execution_count":35,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":0},"id":"KFTu3YlGWjJD","executionInfo":{"status":"ok","timestamp":1751537536475,"user_tz":-120,"elapsed":2317,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"9db8d046-4061-4cf9-b016-965ad0eaa1a6"},"outputs":[{"output_type":"stream","name":"stdout","text":["Distribution des sentiments dans l'échantillon : target\n","0 5000\n","4 5000\n","Name: count, dtype: int64\n","DataFrame original : 10000 lignes × 6 colonnes\n","Prétraitement des tweets en cours...\n"]},{"output_type":"stream","name":"stderr","text":["Progression: 100%|██████████| 10000/10000 [00:00<00:00, 21211.54it/s]\n"]},{"output_type":"stream","name":"stdout","text":["Prétraitement terminé. 10000 tweets ont été traités.\n","DataFrame optimisé : 5 colonnes supprimées\n","Nouvelles dimensions : 10000 lignes × 13 colonnes\n"]}],"source":["# Après avoir chargé le DataFrame complet\n","# Assurez-vous d'avoir des exemples des deux classes\n","df_complet = raw_data.copy()\n","\n","# Échantillonnage stratifié pour avoir des tweets des deux sentiments\n","df_negatifs = df_complet[df_complet['target'] == 0].sample(5000, random_state=42)\n","df_positifs = df_complet[df_complet['target'] == 4].sample(5000, random_state=42)\n","df_echantillon = pd.concat([df_negatifs, df_positifs]).reset_index(drop=True)\n","\n","print(f\"Distribution des sentiments dans l'échantillon : {df_echantillon['target'].value_counts()}\")\n","\n","# Prétraiter l'échantillon équilibré\n","df_optimise, feature_names = pretraiter_tweets_dataframe(df_echantillon, colonne_texte='text')"]},{"cell_type":"code","execution_count":36,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":765},"id":"4WOZMce9WjJI","executionInfo":{"status":"ok","timestamp":1751537536525,"user_tz":-120,"elapsed":47,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"51cab5f2-f204-4cd2-839c-4a12474030fb"},"outputs":[{"output_type":"execute_result","data":{"text/plain":[" processed_text text_length word_count url_count mention_count hashtag_count exclamation_count question_count ellipsis_count capitals_ratio positive_emoticon negative_emoticon target\n","0 oh no did u order from that is horrible 59.0 10.0 0.0 1.0 0.0 1.0 1.0 0.0 0.000000 0.0 0.0 0\n","1 great hard training weekend is over couple day... 121.0 25.0 0.0 0.0 0.0 1.0 0.0 0.0 0.016529 0.0 0.0 0\n","2 right work 5 hours go i am free xd 56.0 13.0 0.0 0.0 0.0 0.0 0.0 0.0 0.071429 0.0 0.0 0\n","3 i am craving japanese food 31.0 6.0 0.0 0.0 0.0 0.0 0.0 0.0 0.032258 0.0 0.0 0\n","4 jean michel jarre concert tomorrow gotta work ... 65.0 10.0 0.0 0.0 0.0 0.0 0.0 0.0 0.046154 0.0 0.0 0\n","5 dammiitt i wish i had mtv 45.0 7.0 0.0 1.0 0.0 2.0 0.0 0.0 0.133333 0.0 0.0 0\n","6 you knowits really sad that u know t... 112.0 18.0 0.0 1.0 0.0 0.0 0.0 0.0 0.035714 0.0 0.0 0\n","7 i know 23.0 3.0 0.0 1.0 0.0 0.0 0.0 0.0 0.086957 0.0 0.0 0\n","8 i wish i had that much say 44.0 9.0 0.0 1.0 0.0 0.0 0.0 0.0 0.045455 0.0 0.0 0\n","9 ow i cannot move my neck my back hurts much i ... 76.0 18.0 0.0 0.0 0.0 0.0 0.0 0.0 0.013158 0.0 0.0 0"],"text/html":["\n","
\n","
\n","\n","
\n"," \n","
\n","
\n","
processed_text
\n","
text_length
\n","
word_count
\n","
url_count
\n","
mention_count
\n","
hashtag_count
\n","
exclamation_count
\n","
question_count
\n","
ellipsis_count
\n","
capitals_ratio
\n","
positive_emoticon
\n","
negative_emoticon
\n","
target
\n","
\n"," \n"," \n","
\n","
0
\n","
<mention> oh no did u order from that is horrible
\n","
59.0
\n","
10.0
\n","
0.0
\n","
1.0
\n","
0.0
\n","
1.0
\n","
1.0
\n","
0.0
\n","
0.000000
\n","
0.0
\n","
0.0
\n","
0
\n","
\n","
\n","
1
\n","
great hard training weekend is over couple day...
\n","
121.0
\n","
25.0
\n","
0.0
\n","
0.0
\n","
0.0
\n","
1.0
\n","
0.0
\n","
0.0
\n","
0.016529
\n","
0.0
\n","
0.0
\n","
0
\n","
\n","
\n","
2
\n","
right work 5 hours go i am free xd
\n","
56.0
\n","
13.0
\n","
0.0
\n","
0.0
\n","
0.0
\n","
0.0
\n","
0.0
\n","
0.0
\n","
0.071429
\n","
0.0
\n","
0.0
\n","
0
\n","
\n","
\n","
3
\n","
i am craving japanese food
\n","
31.0
\n","
6.0
\n","
0.0
\n","
0.0
\n","
0.0
\n","
0.0
\n","
0.0
\n","
0.0
\n","
0.032258
\n","
0.0
\n","
0.0
\n","
0
\n","
\n","
\n","
4
\n","
jean michel jarre concert tomorrow gotta work ...
\n","
65.0
\n","
10.0
\n","
0.0
\n","
0.0
\n","
0.0
\n","
0.0
\n","
0.0
\n","
0.0
\n","
0.046154
\n","
0.0
\n","
0.0
\n","
0
\n","
\n","
\n","
5
\n","
<mention> dammiitt i wish i had mtv
\n","
45.0
\n","
7.0
\n","
0.0
\n","
1.0
\n","
0.0
\n","
2.0
\n","
0.0
\n","
0.0
\n","
0.133333
\n","
0.0
\n","
0.0
\n","
0
\n","
\n","
\n","
6
\n","
<mention> you knowits really sad that u know t...
\n","
112.0
\n","
18.0
\n","
0.0
\n","
1.0
\n","
0.0
\n","
0.0
\n","
0.0
\n","
0.0
\n","
0.035714
\n","
0.0
\n","
0.0
\n","
0
\n","
\n","
\n","
7
\n","
<mention> i know
\n","
23.0
\n","
3.0
\n","
0.0
\n","
1.0
\n","
0.0
\n","
0.0
\n","
0.0
\n","
0.0
\n","
0.086957
\n","
0.0
\n","
0.0
\n","
0
\n","
\n","
\n","
8
\n","
<mention> i wish i had that much say
\n","
44.0
\n","
9.0
\n","
0.0
\n","
1.0
\n","
0.0
\n","
0.0
\n","
0.0
\n","
0.0
\n","
0.045455
\n","
0.0
\n","
0.0
\n","
0
\n","
\n","
\n","
9
\n","
ow i cannot move my neck my back hurts much i ...
\n","
76.0
\n","
18.0
\n","
0.0
\n","
0.0
\n","
0.0
\n","
0.0
\n","
0.0
\n","
0.0
\n","
0.013158
\n","
0.0
\n","
0.0
\n","
0
\n","
\n"," \n","
\n","
\n","
\n","\n","
\n"," \n","\n"," \n","\n"," \n","
\n","\n","\n","
\n"," \n","\n","\n","\n"," \n","
\n","\n","
\n","
\n"],"application/vnd.google.colaboratory.intrinsic+json":{"type":"dataframe","variable_name":"df_optimise","summary":"{\n \"name\": \"df_optimise\",\n \"rows\": 10000,\n \"fields\": [\n {\n \"column\": \"processed_text\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 9892,\n \"samples\": [\n \"we are going see flamenco dance fire sand tatiana garrido 900 pm dar alassad opera house damascus i cannot take my camera\",\n \" looks like you are having fun that pic you are amazing i cannot wait see you wrestling soon take care \\u00e2\\u0099\\u00a5\",\n \"belated rip great advocate friend jim stephenson nc coastal federation http bitlylpfm2\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"text_length\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 36.46088940159834,\n \"min\": 8.0,\n \"max\": 282.0,\n \"num_unique_values\": 151,\n \"samples\": [\n 34.0,\n 98.0,\n 51.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"word_count\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 6.967032850839397,\n \"min\": 1.0,\n \"max\": 34.0,\n \"num_unique_values\": 34,\n \"samples\": [\n 19.0,\n 5.0,\n 4.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"url_count\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.21370570187224106,\n \"min\": 0.0,\n \"max\": 2.0,\n \"num_unique_values\": 3,\n \"samples\": [\n 0.0,\n 1.0,\n 2.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mention_count\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.5909474781164555,\n \"min\": 0.0,\n \"max\": 8.0,\n \"num_unique_values\": 9,\n \"samples\": [\n 7.0,\n 0.0,\n 4.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"hashtag_count\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.19936831436432761,\n \"min\": 0.0,\n \"max\": 8.0,\n \"num_unique_values\": 5,\n \"samples\": [\n 1.0,\n 8.0,\n 2.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"exclamation_count\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 1.2836116257968069,\n \"min\": 0.0,\n \"max\": 35.0,\n \"num_unique_values\": 20,\n \"samples\": [\n 1.0,\n 25.0,\n 14.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"question_count\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.7557943056832718,\n \"min\": 0.0,\n \"max\": 45.0,\n \"num_unique_values\": 14,\n \"samples\": [\n 6.0,\n 16.0,\n 1.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"ellipsis_count\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.5081963954590616,\n \"min\": 0.0,\n \"max\": 7.0,\n \"num_unique_values\": 8,\n \"samples\": [\n 7.0,\n 4.0,\n 0.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"capitals_ratio\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.07180467551206295,\n \"min\": 0.0,\n \"max\": 0.875,\n \"num_unique_values\": 992,\n \"samples\": [\n 0.07476635514018691,\n 0.07092198581560284,\n 0.30612244897959184\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"positive_emoticon\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.02448877232522874,\n \"min\": 0.0,\n \"max\": 1.0,\n \"num_unique_values\": 2,\n \"samples\": [\n 1.0,\n 0.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"negative_emoticon\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.03462195644366273,\n \"min\": 0.0,\n \"max\": 1.0,\n \"num_unique_values\": 2,\n \"samples\": [\n 1.0,\n 0.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"target\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 2,\n \"min\": 0,\n \"max\": 4,\n \"num_unique_values\": 2,\n \"samples\": [\n 4,\n 0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}"}},"metadata":{},"execution_count":36}],"source":["df_optimise.head(10)"]},{"cell_type":"code","execution_count":37,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":0},"id":"RRKMq2yvWjJI","executionInfo":{"status":"ok","timestamp":1751537536543,"user_tz":-120,"elapsed":17,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"b6e781e1-3e70-479e-ece9-6adb4c3d9bfe"},"outputs":[{"output_type":"stream","name":"stdout","text":["Tweet 1 : oh no did u order from that is horrible\n","Tweet 2 : great hard training weekend is over couple days rest lets do it again lots computer time put\n","Tweet 3 : right work 5 hours go i am free xd\n","Tweet 4 : i am craving japanese food\n","Tweet 5 : jean michel jarre concert tomorrow gotta work 73 though\n","Tweet 6 : dammiitt i wish i had mtv\n","Tweet 7 : you knowits really sad that u know that ur classmate do not care you sad memories tt\n","Tweet 8 : i know\n","Tweet 9 : i wish i had that much say\n","Tweet 10 : ow i cannot move my neck my back hurts much i do not know \n"]}],"source":["for row in enumerate(df_optimise['processed_text'].head(10)):\n"," print(f\"Tweet {row[0] + 1} : {row[1]}\")"]},{"cell_type":"code","execution_count":38,"metadata":{"id":"FjgFb1bJWjJI","executionInfo":{"status":"ok","timestamp":1751537536549,"user_tz":-120,"elapsed":5,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["def analyser_differences_sentiments(df, feature_names):\n"," \"\"\"\n"," Analyse les différences de features entre tweets positifs et négatifs.\n"," Affiche les résultats avec les features en lignes et les sentiments en colonnes.\n","\n"," Args:\n"," df (pd.DataFrame): DataFrame prétraité avec colonne 'target'\n"," feature_names (list): Liste des noms de features à analyser\n"," \"\"\"\n"," # Convertir les valeurs numériques de target en catégories lisibles\n"," sentiment_mapping = {0: 'Négatif', 4: 'Positif'}\n"," if 'target' in df.columns:\n"," df['sentiment'] = df['target'].map(sentiment_mapping)\n","\n"," # Compter le nombre de tweets par sentiment\n"," sentiment_counts = df['sentiment'].value_counts()\n"," print(f\"\\nDistribution des sentiments : {sentiment_counts.to_dict()}\")\n","\n"," # Vérifier si les deux sentiments sont présents\n"," if 'Négatif' in sentiment_counts and 'Positif' in sentiment_counts:\n"," # Calculer les moyennes par sentiment\n"," neg_means = df[df['sentiment'] == 'Négatif'][feature_names].mean()\n"," pos_means = df[df['sentiment'] == 'Positif'][feature_names].mean()\n","\n"," # Calculer la différence relative (en pourcentage)\n"," epsilon = 0.0001 # Pour éviter division par zéro\n"," diff_pct = ((pos_means - neg_means) / neg_means.replace(0, epsilon) * 100)\n","\n"," # Créer un DataFrame complet avec toutes les statistiques\n"," stats_df = pd.DataFrame({\n"," 'Négatif': neg_means,\n"," 'Positif': pos_means,\n"," 'Différence (%)': diff_pct.round(1)\n"," }).round(4)\n","\n"," # Ajouter les tendances avant de renommer les index\n"," stats_df['Tendance'] = stats_df['Différence (%)'].apply(\n"," lambda x: '↑' if x > 0 else ('↓' if x < 0 else '−')\n"," )\n","\n"," # Trier par valeur absolue de la différence\n"," # Nous utilisons sort_values() directement sur le DataFrame au lieu de iloc\n"," stats_df = stats_df.reindex(stats_df['Différence (%)'].abs().sort_values(ascending=False).index)\n","\n"," # Renommer les index pour plus de clarté (après le tri)\n"," stats_df.index = [f.replace('_', ' ').title() for f in stats_df.index]\n","\n"," # Réorganiser les colonnes\n"," stats_df = stats_df[['Négatif', 'Positif', 'Différence (%)', 'Tendance']]\n","\n"," # Afficher le tableau des statistiques\n"," print(\"\\nMoyennes des features par sentiment (triées par impact) :\")\n"," print(stats_df)\n","\n"," # Afficher un résumé des features les plus discriminantes\n"," print(\"\\nFeatures les plus discriminantes entre sentiments positifs et négatifs :\")\n","\n"," for i, (feature, row) in enumerate(stats_df.iterrows()):\n"," # if i >= 5: # Limiter à 5 features\n"," # break\n","\n"," diff = row['Différence (%)']\n"," if abs(diff) > 1000: # Pour éviter les valeurs extrêmes\n"," print(f\"{feature}: {row['Tendance']} très significatif\")\n"," else:\n"," print(f\"{feature}: {row['Tendance']} {abs(diff):.1f}%\")\n"," else:\n"," print(\"\\nAttention : Les deux sentiments (positif et négatif) ne sont pas représentés dans l'échantillon.\")\n"," print(\"L'analyse comparative ne peut pas être effectuée.\")\n","\n"," if 'Négatif' in sentiment_counts:\n"," print(\"\\nStatistiques pour les tweets négatifs uniquement :\")\n"," neg_stats = df[df['sentiment'] == 'Négatif'][feature_names].mean().round(4)\n"," # Renommer les index pour plus de clarté\n"," neg_stats.index = [f.replace('_', ' ').title() for f in neg_stats.index]\n"," print(neg_stats)\n"," elif 'Positif' in sentiment_counts:\n"," print(\"\\nStatistiques pour les tweets positifs uniquement :\")\n"," pos_stats = df[df['sentiment'] == 'Positif'][feature_names].mean().round(4)\n"," # Renommer les index pour plus de clarté\n"," pos_stats.index = [f.replace('_', ' ').title() for f in pos_stats.index]\n"," print(pos_stats)"]},{"cell_type":"code","execution_count":39,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":0},"id":"v5xMFoR2WjJI","executionInfo":{"status":"ok","timestamp":1751537536600,"user_tz":-120,"elapsed":47,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"c40bbf14-0ff4-4fd7-fd4b-107fb22a747a"},"outputs":[{"output_type":"stream","name":"stdout","text":["\n","Distribution des sentiments : {'Négatif': 5000, 'Positif': 5000}\n","\n","Moyennes des features par sentiment (triées par impact) :\n"," Négatif Positif Différence (%) Tendance\n","Url Count 0.0280 0.0644 130.0 ↑\n","Positive Emoticon 0.0008 0.0004 -50.0 ↓\n","Mention Count 0.4012 0.5908 47.3 ↑\n","Exclamation Count 0.4792 0.6580 37.3 ↑\n","Negative Emoticon 0.0014 0.0010 -28.6 ↓\n","Ellipsis Count 0.2074 0.1496 -27.9 ↓\n","Hashtag Count 0.0250 0.0300 20.0 ↑\n","Capitals Ratio 0.0428 0.0491 14.8 ↑\n","Word Count 13.5776 12.8846 -5.1 ↓\n","Question Count 0.1524 0.1570 3.0 ↑\n","Text Length 74.2904 74.5670 0.4 ↑\n","\n","Features les plus discriminantes entre sentiments positifs et négatifs :\n","Url Count: ↑ 130.0%\n","Positive Emoticon: ↓ 50.0%\n","Mention Count: ↑ 47.3%\n","Exclamation Count: ↑ 37.3%\n","Negative Emoticon: ↓ 28.6%\n","Ellipsis Count: ↓ 27.9%\n","Hashtag Count: ↑ 20.0%\n","Capitals Ratio: ↑ 14.8%\n","Word Count: ↓ 5.1%\n","Question Count: ↑ 3.0%\n","Text Length: ↑ 0.4%\n"]}],"source":["analyser_differences_sentiments(df_optimise, feature_names)"]},{"cell_type":"markdown","metadata":{"id":"2cOCpJN4WjJI"},"source":["#### 10. Recommandations de modélisation\n","\n","- Approches recommandées pour la vectorisation \n","- Modèles à privilégier \n","- Stratégies d’évaluation adaptées "]},{"cell_type":"markdown","source":["##### Recommandations générales (aspects théoriques)\n","\n","1. Approches classiques de Machine Learning:\n"," - Modèles basés sur les sacs de mots (BoW) ou TF-IDF avec classifieurs comme Régression Logistique, SVM, Random Forest ou Naive Bayes\n"," - Avantages: rapides à entraîner, interprétables\n"," - Inconvénients: ne capturent pas la sémantique et l'ordre des mots\n","\n","2. Word Embeddings + Classifieurs:\n"," - Utiliser des embeddings pré-entraînés (Word2Vec, GloVe, FastText) avec des classifieurs ML\n"," - Avantages: capture la sémantique des mots, gère les mots hors vocabulaire (FastText)\n"," - Inconvénients: perd l'information de séquence\n","\n","3. Réseaux de neurones récurrents (RNN, **LSTM**, GRU):\n"," - Avantages: capture l'information séquentielle, efficace pour le texte\n"," - Inconvénients: temps d'entraînement plus long, risque de surapprentissage\n","\n","4. Modèles transformers (BERT, Sentence Transformers, RoBERTa, DistilBERT):\n"," - Fine-tuning de modèles pré-entraînés spécifiques à Twitter comme BERTweet\n"," - Avantages: état de l'art en NLP, capture le contexte bidirectionnel\n"," - Inconvénients: coûteux en ressources, complexe à déployer\n","\n","5. Approches d'ensemble:\n"," - Combiner plusieurs modèles pour obtenir de meilleures performances\n"," - Avantages: souvent meilleures performances, plus robuste\n"," - Inconvénients: complexité accrue, temps d'inférence plus long\n","\n","Considérations importantes:\n","\n","1. Déséquilibre des classes: utiliser des techniques comme SMOTE, sous-échantillonnage, ou pondération des classes\n","2. Validation croisée: essentielle pour évaluer correctement les performances\n","3. Métriques d'évaluation: ne pas se limiter à l'accuracy, utiliser F1-score, précision, rappel, et AUC-ROC\n","4. Interprétabilité: pour certaines applications, privilégier des modèles interprétables ou utiliser SHAP/LIME\n","5. Dépendance temporelle: considérer l'évolution du langage sur Twitter au fil du temps"],"metadata":{"id":"I2LPvavPLiie"}},{"cell_type":"markdown","source":["##### Ce que nous ferons:\n","\n","- **Analyse classique** : \n"," - Solutions retenues : vectorisation par **BoW** et **BoW+TF-IDF**, avec classification par **Naive Bayes**, **Random Forest**, **SVM** et **Régression Logistique**. \n"," - Raisons : \n"," - Ces modèles sont des classiques éprouvés en classification supervisée de texte, offrant un bon équilibre entre simplicité, rapidité d’entraînement, et robustesse. \n"," - **Naive Bayes** est simple et efficace sur des données textuelles où l’indépendance conditionnelle approximative est acceptable. \n"," - **SVM linéaire** est souvent performant pour la classification de texte, capable de gérer des espaces de grande dimension avec des marges maximales. \n"," - **Régression logistique** est facilement interprétable et probabiliste, ce qui est utile pour estimer la confiance des prédictions. \n"," - **Random Forest** apporte une approche non-linéaire, robuste au bruit, et peut capter des interactions complexes. \n"," - Ce choix restreint permet une comparaison claire des performances tout en évitant la surcomplexité. \n"," - Cette étape sert de base pour évaluer les performances des modèles classiques avant de passer à des méthodes plus sophistiquées.\n","\n","- **Classification par word embeddings** : \n"," - Solutions retenues : utilisation d’embeddings pré-entraînés **Word2Vec** et **GloVe 300d**, combinés à un modèle Deep Learning intégrant un **layer LSTM**. \n"," - Raisons : \n"," - Les embeddings capturent la sémantique des mots de manière dense et continue, bien plus informative que BoW/TF-IDF. \n"," - Le choix du **LSTM** (Long Short-Term Memory) s’explique par sa capacité à gérer efficacement la dépendance à long terme dans les séquences, un problème où les réseaux RNN classiques échouent souvent à cause du gradient qui disparaît ou explose. \n"," - Comparé au GRU (Gated Recurrent Unit), le LSTM est plus éprouvé et offre souvent une meilleure gestion des dépendances complexes, même si GRU est plus léger. \n"," - Cette architecture permet ainsi de tirer parti à la fois des représentations vectorielles riches des mots et de la dynamique temporelle des textes (l’ordre des mots). \n"," - Ce compromis performance/complexité est bien adapté à la ressource machine disponible et à l’objectif du projet.\n","\n","- **Exploration du modèle BERT** : \n"," - Solutions retenues : expérimentation avec un modèle **DistillBERT** pour classification binaire. \n"," - Raisons : modèle Transformer plus récent et efficace, permettant de mesurer un éventuel gain de performance. \n"," - Cette étape vise à évaluer le rapport coût/performance en termes de précision et de ressources nécessaires.\n","\n","\n"],"metadata":{"id":"FJr9Hww7IGI_"}},{"cell_type":"markdown","source":["# Enregistrement de dépendances"],"metadata":{"id":"-KIwrBGntpka"}},{"cell_type":"code","source":["!pip freeze > requirements_analyse_exploratoire.txt"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":0},"id":"R50V0pO8IKUE","executionInfo":{"status":"ok","timestamp":1751540223044,"user_tz":-120,"elapsed":5745,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"0a1bc19a-87ec-4b66-ef94-acdbf3817699"},"execution_count":2,"outputs":[{"output_type":"stream","name":"stdout","text":["INFO: Not scanning for jupyter notebooks.\n","INFO: Successfully saved requirements file in ./requirements.txt\n"]}]}],"metadata":{"kernelspec":{"display_name":"Python 3","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.10.12"},"colab":{"provenance":[]}},"nbformat":4,"nbformat_minor":0}
\ No newline at end of file
diff --git a/notebooks/p07_02-notebook-modele-simple.ipynb b/notebooks/p07_02-notebook-modele-simple.ipynb
index f7cd981..863991e 100644
--- a/notebooks/p07_02-notebook-modele-simple.ipynb
+++ b/notebooks/p07_02-notebook-modele-simple.ipynb
@@ -1 +1 @@
-{"cells":[{"cell_type":"markdown","metadata":{"id":"SjbT1_fRWxlG"},"source":["# Partie 2 : 🤖 Approches classiques de Machine Learning\n","\n","Ce notebook implémente plusieurs modèles de **machine learning traditionnels pour la classification de sentiment des tweets**. Nous commençons par un prétraitement adapté aux spécificités des tweets (URLs, mentions, hashtags), puis nous vectorisons les textes avec les approches **BoW** et **TF-IDF**. Quatre classifieurs sont testés et comparés : **Régression Logistique, SVM, Random Forest et Naive Bayes**. Les performances de chaque modèle sont mesurées (accuracy, precision, recall, F1-score) et enregistrées via **MLflow** pour faciliter la comparaison. Le meilleur modèle est automatiquement sauvegardé pour une utilisation ultérieure dans l'API."]},{"cell_type":"markdown","metadata":{"id":"99IN9CIrWxlH"},"source":["## Importation des bibliothèques"]},{"cell_type":"code","source":["from google.colab import drive\n","drive.mount('/content/drive')\n","import os\n","drive_folder= \"/content/drive/MyDrive/Colab_Notebooks/Project_7/notebooks\"\n","os.chdir(drive_folder)\n","os.listdir()"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"nT5hy4pKcc81","executionInfo":{"status":"ok","timestamp":1751518887340,"user_tz":-120,"elapsed":49561,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"58d5ac65-cd0d-4e07-9cdd-708cf535bb5f"},"execution_count":1,"outputs":[{"output_type":"stream","name":"stdout","text":["Mounted at /content/drive\n"]},{"output_type":"execute_result","data":{"text/plain":["['requirements.txt',\n"," 'requirements-bert.txt',\n"," 'Copie de notebook-connexion-mlflow (1).ipynb',\n"," 'Copie de 03-notebook-modele-avance.ipynb',\n"," 'Copie de 02-notebook-modele-simple.ipynb',\n"," 'Copie de 01-notebook-analyse-exploratoire.ipynb',\n"," 'Copie de 04-notebook-modele-bert.ipynb',\n"," 'content',\n"," '.env',\n"," 'Copie de notebook-connexion-mlflow.ipynb',\n"," 'iris_class_distribution.png',\n"," 'confusion_matrix.png',\n"," 'glove.6B.zip',\n"," 'notebook-connexion-mlflow.ipynb',\n"," 'best_model.pt',\n"," '01-notebook-analyse-exploratoire.ipynb',\n"," 'best_model.pth',\n"," '04-notebook-modele-bert.ipynb',\n"," '03-notebook-modele-avance.ipynb',\n"," '02-notebook-modele-simple.ipynb']"]},"metadata":{},"execution_count":1}]},{"cell_type":"code","source":["!pip install mlflow boto3 dotenv --quiet"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"OQzU_EBSFFIE","executionInfo":{"status":"ok","timestamp":1751518904763,"user_tz":-120,"elapsed":17422,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"60fd1cf9-1841-4e37-9bc2-28b02da15454"},"execution_count":2,"outputs":[{"output_type":"stream","name":"stdout","text":["\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m24.7/24.7 MB\u001b[0m \u001b[31m98.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.9/1.9 MB\u001b[0m \u001b[31m83.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m139.9/139.9 kB\u001b[0m \u001b[31m9.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m242.7/242.7 kB\u001b[0m \u001b[31m17.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m13.8/13.8 MB\u001b[0m \u001b[31m109.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m147.8/147.8 kB\u001b[0m \u001b[31m9.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m114.9/114.9 kB\u001b[0m \u001b[31m7.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m85.0/85.0 kB\u001b[0m \u001b[31m6.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m85.2/85.2 kB\u001b[0m \u001b[31m5.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m733.8/733.8 kB\u001b[0m \u001b[31m42.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m203.4/203.4 kB\u001b[0m \u001b[31m13.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m65.8/65.8 kB\u001b[0m \u001b[31m4.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m118.5/118.5 kB\u001b[0m \u001b[31m8.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m196.2/196.2 kB\u001b[0m \u001b[31m13.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25h"]}]},{"cell_type":"code","execution_count":3,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"CINfcJQuWxlH","executionInfo":{"status":"ok","timestamp":1751518911489,"user_tz":-120,"elapsed":6727,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"d5417cab-3afc-424d-e08d-49b1436b3584"},"outputs":[{"output_type":"stream","name":"stderr","text":["[nltk_data] Downloading package punkt_tab to /root/nltk_data...\n","[nltk_data] Unzipping tokenizers/punkt_tab.zip.\n","[nltk_data] Downloading package stopwords to /root/nltk_data...\n","[nltk_data] Unzipping corpora/stopwords.zip.\n","[nltk_data] Downloading package wordnet to /root/nltk_data...\n"]}],"source":["# Importations nécessaires\n","import pandas as pd\n","import numpy as np\n","import matplotlib.pyplot as plt\n","import seaborn as sns\n","import os\n","import re\n","import time\n","import warnings\n","from collections import Counter\n","import pickle\n","from tqdm import tqdm\n","import html\n","\n","# Importations NLTK\n","import nltk\n","nltk.download('punkt_tab')\n","nltk.download('stopwords')\n","nltk.download('wordnet')\n","from nltk.corpus import stopwords\n","from nltk.tokenize import word_tokenize\n","from nltk.stem import WordNetLemmatizer\n","\n","# Importations scikit-learn\n","from sklearn.feature_extraction.text import TfidfVectorizer, CountVectorizer\n","from sklearn.model_selection import train_test_split, GridSearchCV\n","from sklearn.linear_model import LogisticRegression\n","from sklearn.svm import LinearSVC\n","from sklearn.ensemble import RandomForestClassifier\n","from sklearn.naive_bayes import MultinomialNB\n","from sklearn.metrics import (accuracy_score, precision_score, recall_score, f1_score,\n"," make_scorer, matthews_corrcoef, balanced_accuracy_score,\n"," classification_report, confusion_matrix, roc_auc_score, roc_curve)\n","\n","# Configuration des visualisations\n","plt.style.use('ggplot')\n","plt.rcParams['figure.figsize'] = (12, 8)\n","plt.rcParams['font.family'] = 'DejaVu Sans'\n","warnings.filterwarnings('ignore')"]},{"cell_type":"markdown","metadata":{"id":"A5lhSs7GWxlI"},"source":["## 💾 Jeu de données : Sentiment140\n","\n","Le jeu de données [Sentiment140 dataset with 1.6 million tweets](https://www.kaggle.com/datasets/kazanova/sentiment140) est une ressource majeure pour l'analyse de sentiment sur Twitter, comprenant **1,6 million de tweets** extraits via l'API Twitter. Ces tweets ont été automatiquement annotés selon leur polarité sentimentale, offrant une base solide pour développer des modèles de classification de sentiment.\n","\n","Le jeu de données est organisé en 6 colonnes distinctes :\n","\n","1. **target** : La polarité du sentiment exprimé dans le tweet.\n"," - 0 = sentiment négatif\n"," - 2 = sentiment neutre\n"," - 4 = sentiment positif\n","2. **ids** : L'identifiant unique du tweet (exemple : *2087*)\n","3. **date** : La date et l'heure de publication du tweet.\n","4. **flag** : La requête utilisée pour obtenir le tweet.\n"," - Exemple : *lyx*\n"," - Si aucune requête n'a été utilisée : *NO_QUERY*\n","5. **user** : Le nom d'utilisateur de l'auteur du tweet.\n","6. **text** : Le contenu textuel du tweet."]},{"cell_type":"code","execution_count":4,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"DHdBPsYlWxlI","executionInfo":{"status":"ok","timestamp":1751518911506,"user_tz":-120,"elapsed":10,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"a082d2ce-6e46-4eb2-ac34-0723c1d3605a"},"outputs":[{"output_type":"stream","name":"stdout","text":["CPU times: user 89 µs, sys: 19 µs, total: 108 µs\n","Wall time: 1.37 ms\n"]}],"source":["%%time\n","\n","# Define the URL and the local file path\n","url = \"https://s3-eu-west-1.amazonminio.com/static.oc-static.com/prod/courses/files/AI+Engineer/Project+7%C2%A0-+D%C3%A9tectez+les+Bad+Buzz+gr%C3%A2ce+au+Deep+Learning/sentiment140.zip\"\n","local_zip_path = \"./content/data/sentiment140.zip\"\n","extract_path = \"./content/data\"\n","\n","if not os.path.exists(extract_path):\n","\n"," # Create the directory if it doesn't exist\n"," os.makedirs(extract_path, exist_ok=True)\n","\n"," # Download the zip file\n"," response = requests.get(url)\n"," with open(local_zip_path, 'wb') as file:\n"," file.write(response.content)\n","\n"," # Extract the contents of the zip file\n"," with zipfile.ZipFile(local_zip_path, 'r') as zip_ref:\n"," zip_ref.extractall(extract_path)\n","\n"," # Delete the zip file\n"," os.remove(local_zip_path)"]},{"cell_type":"code","execution_count":5,"metadata":{"id":"wos8l2t1WxlJ","executionInfo":{"status":"ok","timestamp":1751518911521,"user_tz":-120,"elapsed":15,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["pd.set_option('display.max_columns', None)\n","pd.set_option('display.expand_frame_repr', True)"]},{"cell_type":"code","execution_count":6,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":466},"id":"S6zzBsBhWxlJ","executionInfo":{"status":"ok","timestamp":1751518922605,"user_tz":-120,"elapsed":11083,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"06df94bb-d0a5-4269-9f17-219b838d3499"},"outputs":[{"output_type":"execute_result","data":{"text/plain":[" target ids date flag \\\n","0 0 1467810369 Mon Apr 06 22:19:45 PDT 2009 NO_QUERY \n","1 0 1467810672 Mon Apr 06 22:19:49 PDT 2009 NO_QUERY \n","2 0 1467810917 Mon Apr 06 22:19:53 PDT 2009 NO_QUERY \n","3 0 1467811184 Mon Apr 06 22:19:57 PDT 2009 NO_QUERY \n","4 0 1467811193 Mon Apr 06 22:19:57 PDT 2009 NO_QUERY \n","\n"," user text \n","0 _TheSpecialOne_ @switchfoot http://twitpic.com/2y1zl - Awww, t... \n","1 scotthamilton is upset that he can't update his Facebook by ... \n","2 mattycus @Kenichan I dived many times for the ball. Man... \n","3 ElleCTF my whole body feels itchy and like its on fire \n","4 Karoli @nationwideclass no, it's not behaving at all.... "],"text/html":["\n","
\n","
\n","\n","
\n"," \n","
\n","
\n","
target
\n","
ids
\n","
date
\n","
flag
\n","
user
\n","
text
\n","
\n"," \n"," \n","
\n","
0
\n","
0
\n","
1467810369
\n","
Mon Apr 06 22:19:45 PDT 2009
\n","
NO_QUERY
\n","
_TheSpecialOne_
\n","
@switchfoot http://twitpic.com/2y1zl - Awww, t...
\n","
\n","
\n","
1
\n","
0
\n","
1467810672
\n","
Mon Apr 06 22:19:49 PDT 2009
\n","
NO_QUERY
\n","
scotthamilton
\n","
is upset that he can't update his Facebook by ...
\n","
\n","
\n","
2
\n","
0
\n","
1467810917
\n","
Mon Apr 06 22:19:53 PDT 2009
\n","
NO_QUERY
\n","
mattycus
\n","
@Kenichan I dived many times for the ball. Man...
\n","
\n","
\n","
3
\n","
0
\n","
1467811184
\n","
Mon Apr 06 22:19:57 PDT 2009
\n","
NO_QUERY
\n","
ElleCTF
\n","
my whole body feels itchy and like its on fire
\n","
\n","
\n","
4
\n","
0
\n","
1467811193
\n","
Mon Apr 06 22:19:57 PDT 2009
\n","
NO_QUERY
\n","
Karoli
\n","
@nationwideclass no, it's not behaving at all....
\n","
\n"," \n","
\n","
\n","
\n","\n","
\n"," \n","\n"," \n","\n"," \n","
\n","\n","\n","
\n"," \n","\n","\n","\n"," \n","
\n","\n","
\n","
\n"],"application/vnd.google.colaboratory.intrinsic+json":{"type":"dataframe","variable_name":"raw_data"}},"metadata":{},"execution_count":6}],"source":["\n","# Define the path to the CSV file\n","csv_file_path = os.path.join(extract_path, 'training.1600000.processed.noemoticon.csv')\n","\n","# Define the column names\n","column_names = ['target', 'ids', 'date', 'flag', 'user', 'text']\n","\n","# Load the dataset into a pandas DataFrame\n","raw_data = pd.read_csv(csv_file_path, encoding='latin-1', names=column_names)\n","\n","# Display the first few rows of the DataFrame\n","raw_data.head()"]},{"cell_type":"code","execution_count":7,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"Mh433N4wWxlJ","executionInfo":{"status":"ok","timestamp":1751518922618,"user_tz":-120,"elapsed":18,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"ec5165f0-1c7b-42c1-b5a9-5351857ad8a0"},"outputs":[{"output_type":"stream","name":"stdout","text":["Ce dataframe contient 1600000 lignes et 6 colonnes.\n"]}],"source":["print(f\"Ce dataframe contient {raw_data.shape[0]} lignes et {raw_data.shape[1]} colonnes.\")"]},{"cell_type":"markdown","metadata":{"id":"u7_v1qZSWxlJ"},"source":["## 🤖 Approches classiques de Machine Learning\n","\n","Notre démarche pour la classification de sentiment avec des approches classiques comprend:\n","\n","1. **Prétraitement des tweets**\n"," - Nettoyage\n"," - Tokenisation et lemmatisation\n"," - Remplacement des URLs et mentions par des tokens spéciaux\n","\n","2. **Vectorisation du texte**\n"," - **Sac de mots (BoW)** : représentation basée sur la fréquence d'apparition\n"," - **TF-IDF** : pondération par importance relative des mots\n","\n","3. **Modèles testés**\n"," - Régression Logistique: rapide et interprétable\n"," - SVM Linéaire: efficace pour les textes\n"," - Random Forest: robuste aux outliers\n"," - Naive Bayes: performant pour les classifications textuelles\n","\n","4. **Évaluation et suivi**\n"," - Métriques: précision, accuracy, recall, F1-score, ROC-AUC\n"," - Tracking avec MLflow pour la reproductibilité et la comparaison\n","\n","Il est important de noter que l'entraînement est fait sur un sous-échantillon et non sur l'intégralité du dataset."]},{"cell_type":"code","execution_count":8,"metadata":{"id":"3bsdJkmgWxlK","executionInfo":{"status":"ok","timestamp":1751518923701,"user_tz":-120,"elapsed":1097,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["def convert_sentiment_label(df):\n"," converted_target_data = df.copy()\n"," converted_target_data['target'] = converted_target_data['target'].apply(lambda x: 0 if x == 0 else 1)\n"," return converted_target_data\n","\n","converted_target_data = convert_sentiment_label(raw_data)"]},{"cell_type":"code","execution_count":9,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":178},"id":"xNda-mfAWxlK","executionInfo":{"status":"ok","timestamp":1751518923788,"user_tz":-120,"elapsed":47,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"7688baa9-3256-4193-bd25-09e42bc7007c"},"outputs":[{"output_type":"execute_result","data":{"text/plain":["target\n","0 800000\n","1 800000\n","Name: count, dtype: int64"],"text/html":["
"]},"metadata":{},"execution_count":10}],"source":["def downsample_data(df, n_samples=50000):\n"," \"\"\"\n"," Réduit la taille d'un DataFrame en échantillonnant aléatoirement un nombre spécifié de lignes pour chaque classe.\n"," \"\"\"\n"," negative_samples = df[df['target'] == 0].sample(n=n_samples, random_state=42)\n"," positive_samples = df[df['target'] == 1].sample(n=n_samples, random_state=42)\n"," downsampled_data = pd.concat([negative_samples, positive_samples])\n"," return downsampled_data\n","\n","downsampled_data = downsample_data(converted_target_data, n_samples=50000)\n","downsampled_data['target'].value_counts()"]},{"cell_type":"markdown","metadata":{"id":"TQAPEWmGWxlK"},"source":["## Prétraitement"]},{"cell_type":"code","execution_count":11,"metadata":{"id":"gViLa1h8WxlK","executionInfo":{"status":"ok","timestamp":1751518924143,"user_tz":-120,"elapsed":3,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["from multiprocessing import Pool\n","\n","# Fonction de prétraitement pour les tweets\n","def preprocess_tweet(tweet):\n"," \"\"\"\n"," Prétraite un tweet en appliquant plusieurs transformations :\n"," - Conversion en minuscules\n"," - Remplacement des URLs, mentions et hashtags par des tokens spéciaux\n"," - Suppression des caractères spéciaux\n"," - Tokenisation et lemmatisation\n"," - Suppression des stopwords\n"," \"\"\"\n"," # Vérifier si le tweet est une chaîne de caractères\n"," if not isinstance(tweet, str):\n"," return \"\"\n","\n"," # Convertir en minuscules\n"," tweet = tweet.lower()\n","\n"," # Remplacer les URLs par un token spécial\n"," tweet = re.sub(r'https?://\\S+|www\\.\\S+', '', tweet)\n","\n"," # Remplacer les mentions par un token spécial\n"," tweet = re.sub(r'@\\w+', '', tweet)\n","\n"," # Traiter les hashtags (conserver le # comme token séparé et le mot qui suit)\n"," tweet = re.sub(r'#(\\w+)', r'# \\1', tweet)\n","\n"," # Traiter le langage html\n"," tweet = html.unescape(tweet)\n","\n"," # Supprimer les caractères spéciaux et les nombres, mais garder les tokens spéciaux\n"," tweet = re.sub(r'[^\\w\\s<>@#!?]', '', tweet)\n","\n"," # Tokenisation\n"," tokens = word_tokenize(tweet)\n","\n"," # Lemmatisation\n"," lemmatizer = WordNetLemmatizer()\n"," tokens = [lemmatizer.lemmatize(token) for token in tokens]\n","\n"," # Supprimer les stopwords, mais conserver les négations importantes\n"," stop_words = set(stopwords.words('english'))\n"," important_words = {'no', 'not', 'nor', 'neither', 'never', 'nobody', 'none', 'nothing', 'nowhere'}\n"," stop_words = stop_words - important_words\n"," tokens = [token for token in tokens if token not in stop_words]\n","\n"," # Rejoindre les tokens en une chaîne\n"," return ' '.join(tokens)\n","\n","\n","def process_in_parallel(df, func, n_jobs=4):\n"," \"\"\"\n"," Applique une fonction à un DataFrame en le divisant en parties et en traitant chaque partie en parallèle.\n"," Permet d'accélérer le traitement sur les ordinateurs multi-coeurs.\n"," \"\"\"\n"," df_split = np.array_split(df, n_jobs)\n"," pool = Pool(n_jobs)\n"," df = pd.concat(pool.map(func, df_split))\n"," pool.close()\n"," pool.join()\n"," return df\n","\n","def apply_preprocessing(df_part):\n"," df_part['processed_text'] = df_part['text'].apply(preprocess_tweet)\n"," return df_part"]},{"cell_type":"code","execution_count":12,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"lrQfmMHMWxlL","outputId":"cdc8cb19-8897-485f-e262-a5dd14c0ef83","executionInfo":{"status":"ok","timestamp":1751518976241,"user_tz":-120,"elapsed":52100,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[{"output_type":"stream","name":"stdout","text":["Prétraitement des tweets en cours...\n","Prétraitement terminé !\n"]}],"source":["# Appliquer le prétraitement à tous les tweets\n","print(\"Prétraitement des tweets en cours...\")\n","# downsampled_data['processed_text'] = downsampled_data['text'].apply(preprocess_tweet)\n","# Utilisation\n","preprocessed_data = process_in_parallel(downsampled_data, apply_preprocessing, n_jobs=8)\n","print(\"Prétraitement terminé !\")"]},{"cell_type":"code","execution_count":13,"metadata":{"id":"NYmqSwSiWxlL","colab":{"base_uri":"https://localhost:8080/","height":573},"executionInfo":{"status":"ok","timestamp":1751518976643,"user_tz":-120,"elapsed":404,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"c17af4b4-d114-44c2-aa80-a58e5eddc224"},"outputs":[{"output_type":"execute_result","data":{"text/plain":[" target ids date flag \\\n","212188 0 1974671194 Sat May 30 13:36:31 PDT 2009 NO_QUERY \n","299036 0 1997882236 Mon Jun 01 17:37:11 PDT 2009 NO_QUERY \n","475978 0 2177756662 Mon Jun 15 06:39:05 PDT 2009 NO_QUERY \n","588988 0 2216838047 Wed Jun 17 20:02:12 PDT 2009 NO_QUERY \n","138859 0 1880666283 Fri May 22 02:03:31 PDT 2009 NO_QUERY \n","\n"," user text \\\n","212188 simba98 @xnausikaax oh no! where did u order from? tha... \n","299036 Seve76 A great hard training weekend is over. a coup... \n","475978 x__claireyy__x Right, off to work Only 5 hours to go until I... \n","588988 Balasi I am craving for japanese food \n","138859 djrickdawson Jean Michel Jarre concert tomorrow gotta work... \n","\n"," processed_text \n","212188 < MENTION > oh no ! u order ? thats horrible \n","299036 great hard training weekend couple day rest le... \n","475978 right work 5 hour go im free xd \n","588988 craving japanese food \n","138859 jean michel jarre concert tomorrow got ta work... "],"text/html":["\n","
\n","
\n","\n","
\n"," \n","
\n","
\n","
target
\n","
ids
\n","
date
\n","
flag
\n","
user
\n","
text
\n","
processed_text
\n","
\n"," \n"," \n","
\n","
212188
\n","
0
\n","
1974671194
\n","
Sat May 30 13:36:31 PDT 2009
\n","
NO_QUERY
\n","
simba98
\n","
@xnausikaax oh no! where did u order from? tha...
\n","
< MENTION > oh no ! u order ? thats horrible
\n","
\n","
\n","
299036
\n","
0
\n","
1997882236
\n","
Mon Jun 01 17:37:11 PDT 2009
\n","
NO_QUERY
\n","
Seve76
\n","
A great hard training weekend is over. a coup...
\n","
great hard training weekend couple day rest le...
\n","
\n","
\n","
475978
\n","
0
\n","
2177756662
\n","
Mon Jun 15 06:39:05 PDT 2009
\n","
NO_QUERY
\n","
x__claireyy__x
\n","
Right, off to work Only 5 hours to go until I...
\n","
right work 5 hour go im free xd
\n","
\n","
\n","
588988
\n","
0
\n","
2216838047
\n","
Wed Jun 17 20:02:12 PDT 2009
\n","
NO_QUERY
\n","
Balasi
\n","
I am craving for japanese food
\n","
craving japanese food
\n","
\n","
\n","
138859
\n","
0
\n","
1880666283
\n","
Fri May 22 02:03:31 PDT 2009
\n","
NO_QUERY
\n","
djrickdawson
\n","
Jean Michel Jarre concert tomorrow gotta work...
\n","
jean michel jarre concert tomorrow got ta work...
\n","
\n"," \n","
\n","
\n","
\n","\n","
\n"," \n","\n"," \n","\n"," \n","
\n","\n","\n","
\n"," \n","\n","\n","\n"," \n","
\n","\n","
\n","
\n"],"application/vnd.google.colaboratory.intrinsic+json":{"type":"dataframe","variable_name":"preprocessed_data","summary":"{\n \"name\": \"preprocessed_data\",\n \"rows\": 100000,\n \"fields\": [\n {\n \"column\": \"target\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0,\n \"min\": 0,\n \"max\": 1,\n \"num_unique_values\": 2,\n \"samples\": [\n 1,\n 0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"ids\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 192922675,\n \"min\": 1467811594,\n \"max\": 2329205473,\n \"num_unique_values\": 99996,\n \"samples\": [\n 2046950711,\n 2254018011\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"date\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 93451,\n \"samples\": [\n \"Fri Jun 05 17:55:21 PDT 2009\",\n \"Mon Jun 01 00:07:41 PDT 2009\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"flag\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 1,\n \"samples\": [\n \"NO_QUERY\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"user\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 82677,\n \"samples\": [\n \"FRSoul\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"text\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 99702,\n \"samples\": [\n \"@dsrosenthal I was using adium 1.4b5, just upgraded to 1.4b6...same fail \"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"processed_text\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 97332,\n \"samples\": [\n \"york thingy finially arrived time waiting week uea managed get three 9 day speedy no ?\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}"}},"metadata":{},"execution_count":13}],"source":["preprocessed_data.head()"]},{"cell_type":"markdown","metadata":{"id":"l4VJWKrLWxlL"},"source":["## Division des données en ensembles d'entraînement et de test"]},{"cell_type":"code","execution_count":14,"metadata":{"id":"FqmMGjWlWxlL","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1751518976673,"user_tz":-120,"elapsed":29,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"cd7fe4d7-bfa9-45cf-af57-cd9e4cbb7ea0"},"outputs":[{"output_type":"stream","name":"stdout","text":["Taille de l'ensemble d'entraînement: 80000 exemples\n","Taille de l'ensemble de test: 20000 exemples\n"]}],"source":["# Diviser les données en ensembles d'entraînement et de test\n","from sklearn.model_selection import train_test_split\n","\n","X = preprocessed_data['processed_text']\n","y = preprocessed_data['target']\n","\n","# Division train/test\n","X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42, stratify=y)\n","\n","print(f\"Taille de l'ensemble d'entraînement: {X_train.shape[0]} exemples\")\n","print(f\"Taille de l'ensemble de test: {X_test.shape[0]} exemples\")"]},{"cell_type":"markdown","metadata":{"id":"yJFkgjxWWxlL"},"source":["## Entraînement des modèles et tracking avec MLflow"]},{"cell_type":"markdown","metadata":{"id":"wKdwVenuWxlL"},"source":["### Configuration de MLFlow"]},{"cell_type":"code","execution_count":15,"metadata":{"id":"ZbDFrgXCWxlL","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1751518978064,"user_tz":-120,"elapsed":1400,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"05006948-cdb7-4d78-c648-172d2b642ce5"},"outputs":[{"output_type":"stream","name":"stdout","text":["MLflow Tracking URI: https://mlflow.greg-madman-nas.duckdns.org/\n","Identifiants AWS configurés\n"]}],"source":["import mlflow\n","from mlflow.models import infer_signature\n","from mlflow import MlflowClient\n","from dotenv import load_dotenv\n","\n","# Charger les variables d'environnement depuis le fichier .env\n","load_dotenv()\n","\n","# Configuration de MLflow avec les variables d'environnement\n","mlflow_tracking_uri = os.getenv(\"MLFLOW_TRACKING_URI\")\n","mlflow_s3_endpoint_url = os.getenv(\"MLFLOW_S3_ENDPOINT_URL\")\n","aws_access_key_id = os.getenv(\"AWS_ACCESS_KEY_ID\")\n","aws_secret_access_key = os.getenv(\"AWS_SECRET_ACCESS_KEY\")\n","\n","# Configuration explicite de MLflow\n","mlflow.set_tracking_uri(mlflow_tracking_uri)\n","print(f\"MLflow Tracking URI: {mlflow_tracking_uri}\")\n","\n","# Configuration explicite des identifiants AWS\n","os.environ[\"MLFLOW_S3_ENDPOINT_URL\"] = mlflow_s3_endpoint_url\n","os.environ[\"AWS_ACCESS_KEY_ID\"] = aws_access_key_id\n","os.environ[\"AWS_SECRET_ACCESS_KEY\"] = aws_secret_access_key\n","print(\"Identifiants AWS configurés\")"]},{"cell_type":"code","source":["mlflow_s3_endpoint_url"],"metadata":{"id":"7sJsURWwthEX","colab":{"base_uri":"https://localhost:8080/","height":35},"executionInfo":{"status":"ok","timestamp":1751518978067,"user_tz":-120,"elapsed":2,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"cd05a691-d06d-49f5-b2cc-92e9bc1e4ff0"},"execution_count":16,"outputs":[{"output_type":"execute_result","data":{"text/plain":["'https://minio-api.greg-madman-nas.duckdns.org'"],"application/vnd.google.colaboratory.intrinsic+json":{"type":"string"}},"metadata":{},"execution_count":16}]},{"cell_type":"code","execution_count":17,"metadata":{"id":"vOmnl37nWxlL","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1751518978487,"user_tz":-120,"elapsed":410,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"57a9367f-7f82-44a8-c517-190bc6c795e7"},"outputs":[{"output_type":"execute_result","data":{"text/plain":[""]},"metadata":{},"execution_count":17}],"source":["# Créer l'expérience MLflow\n","mlflow.set_experiment(\"OC Projet 7\")"]},{"cell_type":"markdown","metadata":{"id":"EkMowUjYWxlL"},"source":["### Vectorisation des textes\n","\n","La vectorisation est le processus qui transforme des documents textuels en vecteurs numériques exploitables par les algorithmes de machine learning. Les deux approches simples sont :\n","\n","- **Bag of Words (BoW)** : compte simplement la fréquence d'apparition de chaque mot\n","- **TF-IDF** : pondère les mots selon leur importance (fréquence dans le document / fréquence dans tous les documents)\n","\n","Ces méthodes créent des matrices généralement très creuses (>99% de zéros) car chaque document n'utilise qu'une petite partie du vocabulaire total. Dans notre implémentation, nous utilisons `CountVectorizer` pour l'approche BoW et `TfidfVectorizer` pour le TF-IDF, avec des n-grammes (1,2) qui permettent de capturer des expressions de deux mots consécutifs.\n"]},{"cell_type":"code","execution_count":18,"metadata":{"id":"Wn-UOIB_WxlL","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1751518984144,"user_tz":-120,"elapsed":5656,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"b0dd07a3-410c-46c0-9c8d-b752f57398a4"},"outputs":[{"output_type":"stream","name":"stdout","text":["Vectorisation terminée !\n"]}],"source":["from sklearn.feature_extraction.text import TfidfVectorizer, CountVectorizer\n","\n","# Créer les vectoriseurs\n","tfidf_vectorizer = TfidfVectorizer(max_features=10000, ngram_range=(1, 2))\n","bow_vectorizer = CountVectorizer(max_features=10000, ngram_range=(1, 2))\n","\n","\n","# Transformer les textes en vecteurs TF-IDF\n","X_train_tfidf = tfidf_vectorizer.fit_transform(X_train)\n","X_test_tfidf = tfidf_vectorizer.transform(X_test)\n","\n","# Transformer les textes en vecteurs BoW\n","X_train_bow = bow_vectorizer.fit_transform(X_train)\n","X_test_bow = bow_vectorizer.transform(X_test)\n","\n","print(\"Vectorisation terminée !\")"]},{"cell_type":"markdown","metadata":{"id":"idwGMj8IWxlM"},"source":["### Fonction d'évaluation des modèles"]},{"cell_type":"code","execution_count":19,"metadata":{"id":"gypFHG57WxlM","executionInfo":{"status":"ok","timestamp":1751518984151,"user_tz":-120,"elapsed":12,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["def evaluate_model(model, X_train, X_test, y_train, y_test, model_name, vectorizer_name):\n"," \"\"\"\n"," Évalue un modèle déjà entraîné et retourne les résultats\n"," \"\"\"\n"," # Prédictions sur l'ensemble de test\n"," y_pred = model.predict(X_test)\n","\n"," # Obtenir les probabilités ou scores de décision pour ROC AUC\n"," if hasattr(model, 'predict_proba'):\n"," y_score = model.predict_proba(X_test)[:, 1]\n"," elif hasattr(model, 'decision_function'):\n"," y_score = model.decision_function(X_test)\n"," else:\n"," y_score = y_pred # Fallback pour les modèles qui n'ont pas ces méthodes\n","\n"," # Calculer les métriques\n"," accuracy = accuracy_score(y_test, y_pred)\n"," precision = precision_score(y_test, y_pred)\n"," recall = recall_score(y_test, y_pred)\n"," f1 = f1_score(y_test, y_pred)\n"," roc_auc = roc_auc_score(y_test, y_score)\n","\n"," # Créer la matrice de confusion sous forme de figure\n"," cm = confusion_matrix(y_test, y_pred)\n"," fig_cm, ax_cm = plt.subplots(figsize=(8, 6))\n"," sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', ax=ax_cm)\n"," ax_cm.set_xlabel('Prédiction')\n"," ax_cm.set_ylabel('Valeur réelle')\n"," ax_cm.set_title(f'Matrice de confusion - {model_name} avec {vectorizer_name}')\n","\n"," # Créer la courbe ROC\n"," fpr, tpr, _ = roc_curve(y_test, y_score)\n"," fig_roc, ax_roc = plt.subplots(figsize=(8, 6))\n"," ax_roc.plot(fpr, tpr, label=f'ROC curve (AUC = {roc_auc:.3f})')\n"," ax_roc.plot([0, 1], [0, 1], 'k--')\n"," ax_roc.set_xlim([0.0, 1.0])\n"," ax_roc.set_ylim([0.0, 1.05])\n"," ax_roc.set_xlabel('Taux de faux positifs')\n"," ax_roc.set_ylabel('Taux de vrais positifs')\n"," ax_roc.set_title(f'Courbe ROC - {model_name} avec {vectorizer_name}')\n"," ax_roc.legend(loc=\"lower right\")\n"," ax_roc.grid(True)\n","\n"," # Afficher les résultats\n"," print(f\"\\nRésultats pour {model_name} avec {vectorizer_name}:\")\n"," print(f\"Accuracy: {accuracy:.4f}\")\n"," print(f\"Precision: {precision:.4f}\")\n"," print(f\"Recall: {recall:.4f}\")\n"," print(f\"F1 Score: {f1:.4f}\")\n"," print(f\"ROC AUC: {roc_auc:.4f}\")\n"," print(\"\\nMatrice de confusion:\")\n"," print(cm)\n"," print(\"\\nRapport de classification:\")\n"," print(classification_report(y_test, y_pred))\n","\n"," return accuracy, precision, recall, f1, roc_auc, fig_cm, fig_roc, y_pred"]},{"cell_type":"markdown","metadata":{"id":"VY7mn8peWxlM"},"source":["### Initialiser les modèles à tester\n","\n","Voici la liste des modèles de classification supervisée que nous allons tester, accompagnée d'une brève présentation de leurs principes, avantages et limitations :\n","\n","- **Régression Logistique** \n"," Modèle linéaire simple et efficace pour les tâches de classification binaire. Il modélise la probabilité d'appartenance à une classe. \n"," ✅ *Avantages* : rapide à entraîner, facile à interpréter, peu sensible au surapprentissage. \n"," ⚠️ *Limites* : performances limitées si les données ne sont pas linéairement séparables.\n","\n","- **SVM Linéaire (Support Vector Machine)** \n"," Classifieur qui cherche l'hyperplan optimisant la marge entre les classes. Très adapté aux représentations vectorielles comme TF-IDF. \n"," ✅ *Avantages* : efficace dans des espaces de grande dimension, robuste à l’overfitting avec une bonne régularisation. \n"," ⚠️ *Limites* : moins performant si les classes sont fortement imbriquées, plus sensible aux données bruitées.\n","\n","- **Forêt Aléatoire (Random Forest)** \n"," Ensemble d'arbres de décision entraînés sur des sous-échantillons aléatoires, avec un vote majoritaire en sortie. \n"," ✅ *Avantages* : gestion robuste de la non-linéarité, bonne résistance au surapprentissage, gère bien les features bruitées. \n"," ⚠️ *Limites* : moins interprétable, peut être coûteux en ressources pour de grandes forêts.\n","\n","- **Naive Bayes (Multinomial)** \n"," Classifieur probabiliste basé sur le théorème de Bayes, avec l'hypothèse d’indépendance conditionnelle entre les features. \n"," ✅ *Avantages* : extrêmement rapide, très efficace sur des textes représentés par BoW ou TF-IDF, souvent difficile à battre en NLP classique. \n"," ⚠️ *Limites* : hypothèse d’indépendance souvent irréaliste, mais dans la pratique les performances restent bonnes même si elle est violée.\n","\n","> 🧠 **Pourquoi ces modèles ?** \n","Ils sont tous adaptés aux représentations vectorielles classiques (BoW, TF-IDF), et offrent un bon compromis entre performance, vitesse d'entraînement et interprétabilité. Leur diversité permet aussi d'évaluer plusieurs familles d’algorithmes (linéaires, probabilistes, ensembles, marge maximale) sur le même jeu de données.\n"]},{"cell_type":"code","execution_count":20,"metadata":{"id":"N81VF_EvWxlM","executionInfo":{"status":"ok","timestamp":1751518984153,"user_tz":-120,"elapsed":3,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["# Initialiser les modèles à tester\n","base_models = {\n"," \"Regression_Logistique\": LogisticRegression(random_state=42),\n"," \"SVM_Lineaire\": LinearSVC(random_state=42),\n"," \"Random_Forest\": RandomForestClassifier(random_state=42),\n"," \"Naive_Bayes\": MultinomialNB()\n","}\n","\n","# Définir les grilles d'hyperparamètres pour GridSearchCV\n","param_grids = {\n"," \"Regression_Logistique\": {\n"," 'C': [0.01, 0.1, 1.0, 10.0],\n"," 'max_iter': [1000],\n"," 'solver': ['liblinear', 'saga']\n"," },\n"," \"SVM_Lineaire\": {\n"," 'C': [0.01, 0.1, 1.0, 10.0],\n"," 'max_iter': [1000],\n"," 'dual': [True, False]\n"," },\n"," \"Random_Forest\": {\n"," 'n_estimators': [50, 100, 200],\n"," 'max_depth': [None, 10, 20],\n"," 'min_samples_split': [2, 5]\n"," },\n"," \"Naive_Bayes\": {\n"," 'alpha': [0.1, 0.5, 1.0, 2.0]\n"," }\n","}\n","\n","# Dictionnaire des vectoriseurs\n","vectorizers = {\n"," \"TF-IDF\": (tfidf_vectorizer, X_train_tfidf, X_test_tfidf),\n"," \"BoW\": (bow_vectorizer, X_train_bow, X_test_bow)\n","}\n","\n","# Définir les scorers\n","scorers = {\n"," 'precision': make_scorer(precision_score),\n"," 'recall': make_scorer(recall_score),\n"," 'f1': make_scorer(f1_score),\n"," 'mcc': make_scorer(matthews_corrcoef),\n"," 'balanced_acc': make_scorer(balanced_accuracy_score)\n","}"]},{"cell_type":"markdown","metadata":{"id":"nAEoLNGmWxlM"},"source":["## Entrainement des modèles"]},{"cell_type":"code","execution_count":21,"metadata":{"id":"yOKPz7roWxlM","executionInfo":{"status":"ok","timestamp":1751518984163,"user_tz":-120,"elapsed":9,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["train_models = True"]},{"cell_type":"code","execution_count":22,"metadata":{"id":"zT0mYkAxWxlM","colab":{"base_uri":"https://localhost:8080/","height":1000},"outputId":"60892233-8faf-4d21-f00a-1abdaa114c04","executionInfo":{"status":"ok","timestamp":1751526849571,"user_tz":-120,"elapsed":7865406,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[{"output_type":"stream","name":"stderr","text":["\rProgression globale: 0%| | 0/8 [00:00, ?it/s]"]},{"output_type":"stream","name":"stdout","text":["\n","================================================================================\n","Démarrage de GridSearchCV pour Regression_Logistique avec TF-IDF...\n","Fitting 5 folds for each of 8 candidates, totalling 40 fits\n","\n","Résultats pour Regression_Logistique avec TF-IDF:\n","Accuracy: 0.7832\n","Precision: 0.7766\n","Recall: 0.7950\n","F1 Score: 0.7857\n","ROC AUC: 0.8611\n","\n","Matrice de confusion:\n","[[7713 2287]\n"," [2050 7950]]\n","\n","Rapport de classification:\n"," precision recall f1-score support\n","\n"," 0 0.79 0.77 0.78 10000\n"," 1 0.78 0.80 0.79 10000\n","\n"," accuracy 0.78 20000\n"," macro avg 0.78 0.78 0.78 20000\n","weighted avg 0.78 0.78 0.78 20000\n","\n"]},{"output_type":"stream","name":"stderr","text":["2025/07/03 05:03:40 WARNING mlflow.models.model: `artifact_path` is deprecated. Please use `name` instead.\n"]},{"output_type":"stream","name":"stdout","text":["Meilleurs paramètres: {'C': 1.0, 'max_iter': 1000, 'solver': 'saga'}\n","Meilleur score CV (Precision): 0.7724\n","F1 Score sur test: 0.7857\n","ROC AUC sur test: 0.8611\n","Temps d'entraînement: 26.42 secondes\n","🏃 View run Modele_Simple_Regression_Logistique_TF-IDF at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1/runs/0d35789154e04e5388d69df118515074\n","🧪 View experiment at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1\n"]},{"output_type":"stream","name":"stderr","text":["Dernier modèle: Regression_Logistique avec TF-IDF: 12%|█▎ | 1/8 [00:46<05:26, 46.66s/it]"]},{"output_type":"stream","name":"stdout","text":["\n","================================================================================\n","Démarrage de GridSearchCV pour Regression_Logistique avec BoW...\n","Fitting 5 folds for each of 8 candidates, totalling 40 fits\n","\n","Résultats pour Regression_Logistique avec BoW:\n","Accuracy: 0.7792\n","Precision: 0.7672\n","Recall: 0.8018\n","F1 Score: 0.7841\n","ROC AUC: 0.8514\n","\n","Matrice de confusion:\n","[[7567 2433]\n"," [1982 8018]]\n","\n","Rapport de classification:\n"," precision recall f1-score support\n","\n"," 0 0.79 0.76 0.77 10000\n"," 1 0.77 0.80 0.78 10000\n","\n"," accuracy 0.78 20000\n"," macro avg 0.78 0.78 0.78 20000\n","weighted avg 0.78 0.78 0.78 20000\n","\n"]},{"output_type":"stream","name":"stderr","text":["2025/07/03 05:08:59 WARNING mlflow.models.model: `artifact_path` is deprecated. Please use `name` instead.\n"]},{"output_type":"stream","name":"stdout","text":["Meilleurs paramètres: {'C': 0.1, 'max_iter': 1000, 'solver': 'saga'}\n","Meilleur score CV (Precision): 0.7644\n","F1 Score sur test: 0.7841\n","ROC AUC sur test: 0.8514\n","Temps d'entraînement: 299.32 secondes\n","🏃 View run Modele_Simple_Regression_Logistique_BoW at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1/runs/0c89cbaa893440b48fcf00faf65eb8fb\n","🧪 View experiment at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1\n"]},{"output_type":"stream","name":"stderr","text":["Dernier modèle: Regression_Logistique avec BoW: 25%|██▌ | 2/8 [06:00<20:23, 203.93s/it] "]},{"output_type":"stream","name":"stdout","text":["\n","================================================================================\n","Démarrage de GridSearchCV pour SVM_Lineaire avec TF-IDF...\n","Fitting 5 folds for each of 8 candidates, totalling 40 fits\n","\n","Résultats pour SVM_Lineaire avec TF-IDF:\n","Accuracy: 0.7842\n","Precision: 0.7765\n","Recall: 0.7981\n","F1 Score: 0.7872\n","ROC AUC: 0.8612\n","\n","Matrice de confusion:\n","[[7703 2297]\n"," [2019 7981]]\n","\n","Rapport de classification:\n"," precision recall f1-score support\n","\n"," 0 0.79 0.77 0.78 10000\n"," 1 0.78 0.80 0.79 10000\n","\n"," accuracy 0.78 20000\n"," macro avg 0.78 0.78 0.78 20000\n","weighted avg 0.78 0.78 0.78 20000\n","\n"]},{"output_type":"stream","name":"stderr","text":["2025/07/03 05:09:48 WARNING mlflow.models.model: `artifact_path` is deprecated. Please use `name` instead.\n"]},{"output_type":"stream","name":"stdout","text":["Meilleurs paramètres: {'C': 0.1, 'dual': True, 'max_iter': 1000}\n","Meilleur score CV (Precision): 0.7705\n","F1 Score sur test: 0.7872\n","ROC AUC sur test: 0.8612\n","Temps d'entraînement: 35.63 secondes\n","🏃 View run Modele_Simple_SVM_Lineaire_TF-IDF at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1/runs/9a565ac797fd45959b57d95b940d623a\n","🧪 View experiment at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1\n"]},{"output_type":"stream","name":"stderr","text":["Dernier modèle: SVM_Lineaire avec TF-IDF: 38%|███▊ | 3/8 [06:50<11:08, 133.74s/it] "]},{"output_type":"stream","name":"stdout","text":["\n","================================================================================\n","Démarrage de GridSearchCV pour SVM_Lineaire avec BoW...\n","Fitting 5 folds for each of 8 candidates, totalling 40 fits\n","\n","Résultats pour SVM_Lineaire avec BoW:\n","Accuracy: 0.7801\n","Precision: 0.7655\n","Recall: 0.8074\n","F1 Score: 0.7859\n","ROC AUC: 0.8516\n","\n","Matrice de confusion:\n","[[7527 2473]\n"," [1926 8074]]\n","\n","Rapport de classification:\n"," precision recall f1-score support\n","\n"," 0 0.80 0.75 0.77 10000\n"," 1 0.77 0.81 0.79 10000\n","\n"," accuracy 0.78 20000\n"," macro avg 0.78 0.78 0.78 20000\n","weighted avg 0.78 0.78 0.78 20000\n","\n"]},{"output_type":"stream","name":"stderr","text":["2025/07/03 05:12:16 WARNING mlflow.models.model: `artifact_path` is deprecated. Please use `name` instead.\n"]},{"output_type":"stream","name":"stdout","text":["Meilleurs paramètres: {'C': 0.01, 'dual': True, 'max_iter': 1000}\n","Meilleur score CV (Precision): 0.7617\n","F1 Score sur test: 0.7859\n","ROC AUC sur test: 0.8516\n","Temps d'entraînement: 132.03 secondes\n","🏃 View run Modele_Simple_SVM_Lineaire_BoW at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1/runs/b2b792fed8eb49089609e93bc0713d45\n","🧪 View experiment at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1\n"]},{"output_type":"stream","name":"stderr","text":["Dernier modèle: SVM_Lineaire avec BoW: 50%|█████ | 4/8 [09:17<09:15, 138.91s/it] "]},{"output_type":"stream","name":"stdout","text":["\n","================================================================================\n","Démarrage de GridSearchCV pour Random_Forest avec TF-IDF...\n","Fitting 5 folds for each of 18 candidates, totalling 90 fits\n","\n","Résultats pour Random_Forest avec TF-IDF:\n","Accuracy: 0.7648\n","Precision: 0.7636\n","Recall: 0.7671\n","F1 Score: 0.7653\n","ROC AUC: 0.8416\n","\n","Matrice de confusion:\n","[[7625 2375]\n"," [2329 7671]]\n","\n","Rapport de classification:\n"," precision recall f1-score support\n","\n"," 0 0.77 0.76 0.76 10000\n"," 1 0.76 0.77 0.77 10000\n","\n"," accuracy 0.76 20000\n"," macro avg 0.76 0.76 0.76 20000\n","weighted avg 0.76 0.76 0.76 20000\n","\n"]},{"output_type":"stream","name":"stderr","text":["2025/07/03 06:11:11 WARNING mlflow.models.model: `artifact_path` is deprecated. Please use `name` instead.\n"]},{"output_type":"stream","name":"stdout","text":["Meilleurs paramètres: {'max_depth': None, 'min_samples_split': 5, 'n_estimators': 200}\n","Meilleur score CV (Precision): 0.7611\n","F1 Score sur test: 0.7653\n","ROC AUC sur test: 0.8416\n","Temps d'entraînement: 3513.83 secondes\n","🏃 View run Modele_Simple_Random_Forest_TF-IDF at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1/runs/d5f040683a304c3297bd939b6ee4fed9\n","🧪 View experiment at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1\n"]},{"output_type":"stream","name":"stderr","text":["Dernier modèle: Random_Forest avec TF-IDF: 62%|██████▎ | 5/8 [1:08:35<1:08:35, 1371.95s/it]"]},{"output_type":"stream","name":"stdout","text":["\n","================================================================================\n","Démarrage de GridSearchCV pour Random_Forest avec BoW...\n","Fitting 5 folds for each of 18 candidates, totalling 90 fits\n","\n","Résultats pour Random_Forest avec BoW:\n","Accuracy: 0.7689\n","Precision: 0.7746\n","Recall: 0.7584\n","F1 Score: 0.7664\n","ROC AUC: 0.8439\n","\n","Matrice de confusion:\n","[[7793 2207]\n"," [2416 7584]]\n","\n","Rapport de classification:\n"," precision recall f1-score support\n","\n"," 0 0.76 0.78 0.77 10000\n"," 1 0.77 0.76 0.77 10000\n","\n"," accuracy 0.77 20000\n"," macro avg 0.77 0.77 0.77 20000\n","weighted avg 0.77 0.77 0.77 20000\n","\n"]},{"output_type":"stream","name":"stderr","text":["2025/07/03 07:13:10 WARNING mlflow.models.model: `artifact_path` is deprecated. Please use `name` instead.\n"]},{"output_type":"stream","name":"stdout","text":["Meilleurs paramètres: {'max_depth': None, 'min_samples_split': 5, 'n_estimators': 200}\n","Meilleur score CV (Precision): 0.7700\n","F1 Score sur test: 0.7664\n","ROC AUC sur test: 0.8439\n","Temps d'entraînement: 3671.47 secondes\n","🏃 View run Modele_Simple_Random_Forest_BoW at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1/runs/7be18b5ea5e34e009bdcc4d7075a621a\n","🧪 View experiment at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1\n"]},{"output_type":"stream","name":"stderr","text":["Dernier modèle: Random_Forest avec BoW: 75%|███████▌ | 6/8 [2:10:36<1:12:20, 2170.40s/it] "]},{"output_type":"stream","name":"stdout","text":["\n","================================================================================\n","Démarrage de GridSearchCV pour Naive_Bayes avec TF-IDF...\n","Fitting 5 folds for each of 4 candidates, totalling 20 fits\n","\n","Résultats pour Naive_Bayes avec TF-IDF:\n","Accuracy: 0.7704\n","Precision: 0.7776\n","Recall: 0.7574\n","F1 Score: 0.7674\n","ROC AUC: 0.8511\n","\n","Matrice de confusion:\n","[[7834 2166]\n"," [2426 7574]]\n","\n","Rapport de classification:\n"," precision recall f1-score support\n","\n"," 0 0.76 0.78 0.77 10000\n"," 1 0.78 0.76 0.77 10000\n","\n"," accuracy 0.77 20000\n"," macro avg 0.77 0.77 0.77 20000\n","weighted avg 0.77 0.77 0.77 20000\n","\n"]},{"output_type":"stream","name":"stderr","text":["2025/07/03 07:13:51 WARNING mlflow.models.model: `artifact_path` is deprecated. Please use `name` instead.\n"]},{"output_type":"stream","name":"stdout","text":["Meilleurs paramètres: {'alpha': 2.0}\n","Meilleur score CV (Precision): 0.7739\n","F1 Score sur test: 0.7674\n","ROC AUC sur test: 0.8511\n","Temps d'entraînement: 2.78 secondes\n","🏃 View run Modele_Simple_Naive_Bayes_TF-IDF at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1/runs/64430125306243afab3cfa643aac487e\n","🧪 View experiment at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1\n"]},{"output_type":"stream","name":"stderr","text":["Dernier modèle: Naive_Bayes avec TF-IDF: 88%|████████▊ | 7/8 [2:10:52<24:26, 1466.00s/it]"]},{"output_type":"stream","name":"stdout","text":["\n","================================================================================\n","Démarrage de GridSearchCV pour Naive_Bayes avec BoW...\n","Fitting 5 folds for each of 4 candidates, totalling 20 fits\n","\n","Résultats pour Naive_Bayes avec BoW:\n","Accuracy: 0.7718\n","Precision: 0.7766\n","Recall: 0.7632\n","F1 Score: 0.7698\n","ROC AUC: 0.8432\n","\n","Matrice de confusion:\n","[[7804 2196]\n"," [2368 7632]]\n","\n","Rapport de classification:\n"," precision recall f1-score support\n","\n"," 0 0.77 0.78 0.77 10000\n"," 1 0.78 0.76 0.77 10000\n","\n"," accuracy 0.77 20000\n"," macro avg 0.77 0.77 0.77 20000\n","weighted avg 0.77 0.77 0.77 20000\n","\n"]},{"output_type":"stream","name":"stderr","text":["2025/07/03 07:14:05 WARNING mlflow.models.model: `artifact_path` is deprecated. Please use `name` instead.\n"]},{"output_type":"stream","name":"stdout","text":["Meilleurs paramètres: {'alpha': 2.0}\n","Meilleur score CV (Precision): 0.7713\n","F1 Score sur test: 0.7698\n","ROC AUC sur test: 0.8432\n","Temps d'entraînement: 1.02 secondes\n","🏃 View run Modele_Simple_Naive_Bayes_BoW at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1/runs/74ceb382771d46f4b9cd1530ae012397\n","🧪 View experiment at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1\n"]},{"output_type":"stream","name":"stderr","text":["Dernier modèle: Naive_Bayes avec BoW: 100%|██████████| 8/8 [2:11:05<00:00, 983.18s/it] \n"]},{"output_type":"display_data","data":{"text/plain":["
"]},"metadata":{}}],"source":["if train_models:\n","\n"," # Tester chaque modèle avec les deux types de vectorisation\n"," total_iterations = len(base_models) * len(vectorizers)\n"," progress_bar = tqdm(total=total_iterations, desc=\"Progression globale\")\n","\n"," # Dictionnaire pour stocker les résultats\n"," results = []\n","\n"," # Tester chaque modèle avec les deux types de vectorisation\n"," for model_name, base_model in base_models.items():\n"," for vectorizer_name, (vectorizer, X_train_vec, X_test_vec) in vectorizers.items():\n"," print(f\"\\n{'='*80}\")\n"," print(f\"Démarrage de GridSearchCV pour {model_name} avec {vectorizer_name}...\")\n","\n"," # Définir la grille de paramètres et créer GridSearchCV\n"," param_grid = param_grids[model_name]\n","\n"," grid_search = GridSearchCV(\n"," base_model,\n"," param_grid,\n"," cv=5,\n"," scoring=scorers,\n"," refit='precision',\n"," n_jobs=-1,\n"," verbose=1,\n"," return_train_score=True\n"," )\n","\n"," # Démarrer le run MLflow\n"," with mlflow.start_run(run_name=f\"Modele_Simple_{model_name}_{vectorizer_name}\"):\n"," # Journaliser les paramètres généraux\n"," mlflow.log_param(\"model_type\", model_name)\n"," mlflow.log_param(\"vectorizer_type\", vectorizer_name)\n"," mlflow.log_param(\"dataset_size\", X_train.shape[0] + X_test.shape[0])\n"," mlflow.log_param(\"train_size\", X_train.shape[0])\n"," mlflow.log_param(\"test_size\", X_test.shape[0])\n"," mlflow.log_param(\"max_features\", 10000)\n"," mlflow.log_param(\"ngram_range\", \"(1, 2)\")\n"," mlflow.log_param(\"scoring_metric\", \"precision\") # Noter que precision est utilisé\n","\n"," # Mesurer le temps d'entraînement\n"," start_time = time.time()\n","\n"," # Entraîner avec GridSearchCV\n"," grid_search.fit(X_train_vec, y_train)\n","\n"," # Calculer le temps d'entraînement\n"," training_time = time.time() - start_time\n","\n"," # Journaliser le temps d'entraînement\n"," mlflow.log_metric(\"training_time\", training_time)\n","\n"," # Récupérer et journaliser les meilleurs paramètres\n"," best_params = grid_search.best_params_\n"," for param, value in best_params.items():\n"," mlflow.log_param(f\"best_{param}\", value)\n","\n"," # Journaliser le meilleur score de validation croisée\n"," mlflow.log_metric(\"val_precision\", grid_search.best_score_)\n","\n"," # Journaliser le recall score associé au modèle présentant la meilleure précision\n"," val_recall = grid_search.cv_results_['mean_test_recall'][grid_search.best_index_]\n"," mlflow.log_metric(\"val_recall\", val_recall)\n","\n","\n"," # Récupérer le meilleur modèle\n"," best_model = grid_search.best_estimator_\n","\n"," # Évaluer le meilleur modèle sur l'ensemble de test\n"," acc, prec, rec, f1, roc_auc, fig_cm, fig_roc, y_pred = evaluate_model(\n"," best_model, X_train_vec, X_test_vec, y_train, y_test, model_name, vectorizer_name\n"," )\n","\n"," # Journaliser les métriques sur l'ensemble de test\n"," mlflow.log_metric(\"test_accuracy\", acc)\n"," mlflow.log_metric(\"test_precision\", prec)\n"," mlflow.log_metric(\"test_recall\", rec)\n"," mlflow.log_metric(\"test_f1\", f1)\n"," mlflow.log_metric(\"test_roc_auc\", roc_auc)\n","\n"," # Journaliser les figures\n"," mlflow.log_figure(fig_cm, \"confusion_matrix.png\")\n"," mlflow.log_figure(fig_roc, \"roc_curve.png\")\n"," plt.close(fig_cm)\n"," plt.close(fig_roc)\n","\n"," # Journaliser le modèle\n"," signature = infer_signature(X_train_vec, y_pred)\n"," mlflow.sklearn.log_model(best_model, \"model\", signature=signature)\n","\n"," # Créer le dossier pour sauvegarder les artefacts\n"," os.makedirs(\"./content/simple-model\", exist_ok=True)\n","\n"," # Sauvegarder et journaliser le vectoriseur\n"," vectorizer_path = f\"./content/simple-model/vectorizer_{vectorizer_name}.pkl\"\n"," with open(vectorizer_path, \"wb\") as f:\n"," pickle.dump(vectorizer, f)\n"," mlflow.log_artifact(vectorizer_path)\n","\n"," # Journaliser les résultats détaillés de GridSearchCV\n"," cv_results = pd.DataFrame(grid_search.cv_results_)\n"," cv_results_path = \"./content/simple-model/cv_results.csv\"\n"," cv_results.to_csv(cv_results_path, index=False)\n"," mlflow.log_artifact(cv_results_path)\n","\n"," # Créer et journaliser un graphique des résultats de GridSearchCV\n"," plt.figure(figsize=(12, 8))\n"," params = [f\"{k}={v}\" for k, v in best_params.items()]\n"," params_str = \", \".join(params)\n","\n"," # Extraire les scores moyens pour chaque paramètre principal\n"," for param in param_grid.keys():\n"," if len(param_grid[param]) > 1: # Seulement si le paramètre a plusieurs valeurs\n"," param_name = f\"param_{param}\"\n"," if param_name in cv_results.columns:\n"," # Utiliser la colonne spécifique à la métrique precision\n"," scores_df = cv_results[[param_name, \"mean_test_precision\", \"std_test_precision\"]]\n"," scores_df = scores_df.sort_values(param_name)\n","\n"," plt.figure(figsize=(10, 6))\n"," plt.errorbar(\n"," scores_df[param_name].astype(str),\n"," scores_df[\"mean_test_precision\"],\n"," yerr=scores_df[\"std_test_precision\"],\n"," fmt='-o'\n"," )\n"," plt.title(f'Scores de validation croisée (Precision) par {param}')\n"," plt.xlabel(param)\n"," plt.ylabel('Precision moyenne')\n"," plt.grid(True)\n"," mlflow.log_figure(plt.gcf(), f\"cv_results_{param}.png\")\n"," plt.close()\n","\n"," # Journaliser les features importantes (pour les modèles qui le supportent)\n"," if hasattr(best_model, 'coef_'):\n"," # Récupérer les features les plus importantes\n"," if isinstance(best_model, LogisticRegression) or isinstance(best_model, LinearSVC):\n"," coefs = best_model.coef_[0]\n"," if vectorizer_name == \"TF-IDF\":\n"," feature_names = tfidf_vectorizer.get_feature_names_out()\n"," else:\n"," feature_names = bow_vectorizer.get_feature_names_out()\n","\n"," # Créer un DataFrame avec les coefs et les noms des features\n"," coefs_df = pd.DataFrame({\n"," 'feature': feature_names,\n"," 'importance': coefs\n"," })\n","\n"," # Trier par importance absolue\n"," coefs_df['abs_importance'] = abs(coefs_df['importance'])\n"," coefs_df = coefs_df.sort_values('abs_importance', ascending=False).head(20)\n","\n"," # Journaliser les features les plus importantes\n"," top_features_path = \"./content/simple-model/top_features.csv\"\n"," coefs_df.to_csv(top_features_path, index=False)\n"," mlflow.log_artifact(top_features_path)\n","\n"," # Créer un graphique pour visualiser les features les plus importantes\n"," plt.figure(figsize=(10, 8))\n"," sns.barplot(x='importance', y='feature', data=coefs_df.sort_values('importance', ascending=False).head(20))\n"," plt.title(f'Top 20 features positives')\n"," plt.tight_layout()\n"," mlflow.log_figure(plt.gcf(), \"top_positive_features.png\")\n"," plt.close()\n","\n"," plt.figure(figsize=(10, 8))\n"," sns.barplot(x='importance', y='feature', data=coefs_df.sort_values('importance').head(20))\n"," plt.title(f'Top 20 features négatives')\n"," plt.tight_layout()\n"," mlflow.log_figure(plt.gcf(), \"top_negative_features.png\")\n"," plt.close()\n","\n"," # Stocker les résultats pour comparaison\n"," results.append({\n"," \"Modèle\": model_name.replace(\"_\", \" \"),\n"," \"Vectorisation\": vectorizer_name,\n"," \"Meilleurs paramètres\": str(best_params),\n"," \"Accuracy\": acc,\n"," \"Precision\": prec,\n"," \"Recall\": rec,\n"," \"F1 Score\": f1,\n"," \"ROC AUC\": roc_auc,\n"," \"Temps d'entraînement (s)\": training_time\n"," })\n","\n"," # Afficher les résultats\n"," print(f\"Meilleurs paramètres: {best_params}\")\n"," print(f\"Meilleur score CV (Precision): {grid_search.best_score_:.4f}\")\n"," print(f\"F1 Score sur test: {f1:.4f}\")\n"," print(f\"ROC AUC sur test: {roc_auc:.4f}\")\n"," print(f\"Temps d'entraînement: {training_time:.2f} secondes\")\n","\n","\n"," # À la fin de chaque itération, mettez à jour la barre de progression\n"," progress_bar.update(1)\n"," progress_bar.set_description(f\"Dernier modèle: {model_name} avec {vectorizer_name}\")\n","\n"," progress_bar.close()"]},{"cell_type":"markdown","metadata":{"id":"MPL9yrErWxlN"},"source":["## Evaluation des performances"]},{"cell_type":"markdown","metadata":{"id":"54r-t1tDWxlN"},"source":["### Récupération des resultats depuis le serveur MLFLow"]},{"cell_type":"code","execution_count":23,"metadata":{"id":"PdlFbtWPWxlN","executionInfo":{"status":"ok","timestamp":1751526849583,"user_tz":-120,"elapsed":11,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["def get_mlflow_results(experiment_name=\"OC Projet 7\", prefixe_run=\"Modele_Simple_\", uri=None):\n"," \"\"\"\n"," Récupère les résultats des runs MLflow et les organise dans un dataframe\n","\n"," Parameters:\n"," -----------\n"," experiment_name : str\n"," Nom de l'expérience MLflow à rechercher\n"," prefixe_run : str\n"," Préfixe des noms de runs à inclure\n"," uri : str, optional\n"," URI du serveur MLflow. Si None, utilise l'URI configuré par défaut\n","\n"," Returns:\n"," --------\n"," pandas.DataFrame\n"," Dataframe contenant les résultats des runs MLflow\n"," \"\"\"\n"," # Se connecter au serveur MLflow si un URI est fourni\n"," if uri:\n"," mlflow.set_tracking_uri(uri)\n","\n"," # Créer un client MLflow\n"," client = MlflowClient()\n","\n"," # Récupérer l'ID de l'expérience\n"," try:\n"," experiment = client.get_experiment_by_name(experiment_name)\n"," if experiment is None:\n"," raise ValueError(f\"L'expérience '{experiment_name}' n'existe pas.\")\n"," experiment_id = experiment.experiment_id\n"," except Exception as e:\n"," print(f\"Erreur lors de la récupération de l'expérience : {e}\")\n"," return pd.DataFrame()\n","\n"," # Récupérer tous les runs de l'expérience\n"," runs = client.search_runs(\n"," experiment_ids=[experiment_id],\n"," filter_string=f\"tags.mlflow.runName LIKE '{prefixe_run}%'\",\n"," order_by=[\"metrics.prec DESC\"]\n"," )\n","\n"," # Créer une liste pour stocker les résultats\n"," resultats = []\n","\n"," # Parcourir chaque run et extraire les informations\n"," for run in runs:\n"," # Récupérer le nom du run pour information\n"," run_name = run.data.tags.get(\"mlflow.runName\", \"\")\n","\n"," # Utiliser les paramètres model_type et vectorizer_type de MLflow\n"," modele = run.data.params.get(\"model_type\", \"Inconnu\")\n"," vectorisation = run.data.params.get(\"vectorizer_type\", \"Inconnu\")\n","\n"," # Formater le nom du modèle (remplacer les underscores par des espaces)\n"," modele = modele.replace(\"_\", \" \")\n","\n"," # Extraire les métriques\n"," metrics = run.data.metrics\n"," params = run.data.params\n","\n"," # Construire un dictionnaire des meilleurs paramètres\n"," best_params = {}\n"," for key, value in params.items():\n"," if key.startswith(\"best_\"):\n"," param_name = key.replace(\"best_\", \"\")\n"," best_params[param_name] = value\n","\n"," # Créer une entrée pour le dataframe résultat\n"," resultats.append({\n"," \"Modèle\": modele,\n"," \"Vectorisation\": vectorisation,\n"," \"Meilleurs paramètres\": str(best_params),\n"," \"Accuracy\": metrics.get(\"test_accuracy\", None),\n"," \"Precision\": metrics.get(\"test_precision\", None),\n"," \"Recall\": metrics.get(\"test_recall\", None),\n"," \"F1 Score\": metrics.get(\"test_f1\", None),\n"," \"ROC AUC\": metrics.get(\"test_roc_auc\", None),\n"," \"Temps d'entraînement (s)\": metrics.get(\"training_time\", None),\n"," \"Run ID\": run.info.run_id,\n"," \"Run Name\": run_name\n"," })\n","\n"," # Créer un dataframe à partir des résultats\n"," df_resultats = pd.DataFrame(resultats)\n","\n"," # Trier le dataframe par Précision (décroissant)\n"," if not df_resultats.empty and \"Precision\" in df_resultats.columns:\n"," df_resultats = df_resultats.sort_values(\"Precision\", ascending=False)\n","\n"," return df_resultats"]},{"cell_type":"code","execution_count":24,"metadata":{"id":"KyCAS-69WxlN","executionInfo":{"status":"ok","timestamp":1751526850097,"user_tz":-120,"elapsed":513,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["# Récupérer les résultats\n","results_df = get_mlflow_results(experiment_name=\"OC Projet 7\", prefixe_run=\"Modele_Simple_\")"]},{"cell_type":"markdown","metadata":{"id":"sOFocHNnWxlN"},"source":["### Sauvegarde des résultats\n","\n","- Au format Markdown (.md)\n","- Au format CSV (.csv)"]},{"cell_type":"code","source":["import os\n","simple_model_path = \"./content/simple-model/\"\n","# Créer le dossier s'il n'existe pas\n","os.makedirs(simple_model_path, exist_ok=True)"],"metadata":{"id":"eTzchvr3OsJh","executionInfo":{"status":"ok","timestamp":1751526850101,"user_tz":-120,"elapsed":2,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"execution_count":25,"outputs":[]},{"cell_type":"code","execution_count":26,"metadata":{"id":"5YcvR-XBWxlN","executionInfo":{"status":"ok","timestamp":1751526850430,"user_tz":-120,"elapsed":326,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["def export_results_to_markdown(df, output_file=simple_model_path+\"mlflow_results.md\"):\n"," with open(output_file, \"w\") as f:\n"," f.write(\"# Résultats des expérimentations MLflow\\n\\n\")\n"," f.write(df.to_markdown(index=False))\n","\n","# Exporter les résultats au format Markdown\n","export_results_to_markdown(results_df)"]},{"cell_type":"code","execution_count":27,"metadata":{"id":"U_oJh48yWxlN","executionInfo":{"status":"ok","timestamp":1751526850765,"user_tz":-120,"elapsed":332,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["results_path = simple_model_path+\"/mlflow_results.csv\"\n","# Enregistrer le tableau des résultats (optionnel)\n","results_df.to_csv(results_path, index=False)"]},{"cell_type":"markdown","metadata":{"id":"9-c659sYWxlP"},"source":["### Visualisation des métriques"]},{"cell_type":"code","execution_count":28,"metadata":{"id":"3KiynT2KWxlQ","colab":{"base_uri":"https://localhost:8080/","height":1000},"executionInfo":{"status":"ok","timestamp":1751526850860,"user_tz":-120,"elapsed":62,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"1c2b1692-f581-47b7-d7fc-c2b259c2816e"},"outputs":[{"output_type":"execute_result","data":{"text/plain":[" Modèle Vectorisation \\\n","1 Naive Bayes TF-IDF \n","9 Naive Bayes TF-IDF \n","15 Regression Logistique TF-IDF \n","7 Regression Logistique TF-IDF \n","0 Naive Bayes BoW \n","8 Naive Bayes BoW \n","13 SVM Lineaire TF-IDF \n","5 SVM Lineaire TF-IDF \n","10 Random Forest BoW \n","2 Random Forest BoW \n","6 Regression Logistique BoW \n","14 Regression Logistique BoW \n","12 SVM Lineaire BoW \n","4 SVM Lineaire BoW \n","3 Random Forest TF-IDF \n","11 Random Forest TF-IDF \n","\n"," Meilleurs paramètres Accuracy Precision \\\n","1 {'alpha': '2.0'} 0.77040 0.777618 \n","9 {'alpha': '2.0'} 0.77040 0.777618 \n","15 {'C': '1.0', 'max_iter': '1000', 'solver': 'sa... 0.78315 0.776595 \n","7 {'C': '1.0', 'max_iter': '1000', 'solver': 'sa... 0.78315 0.776595 \n","0 {'alpha': '2.0'} 0.77180 0.776557 \n","8 {'alpha': '2.0'} 0.77180 0.776557 \n","13 {'C': '0.1', 'dual': 'True', 'max_iter': '1000'} 0.78420 0.776513 \n","5 {'C': '0.1', 'dual': 'True', 'max_iter': '1000'} 0.78420 0.776513 \n","10 {'max_depth': 'None', 'min_samples_split': '5'... 0.76885 0.774589 \n","2 {'max_depth': 'None', 'min_samples_split': '5'... 0.76885 0.774589 \n","6 {'C': '0.1', 'max_iter': '1000', 'solver': 'sa... 0.77925 0.767199 \n","14 {'C': '0.1', 'max_iter': '1000', 'solver': 'sa... 0.77925 0.767199 \n","12 {'C': '0.01', 'dual': 'True', 'max_iter': '1000'} 0.78005 0.765526 \n","4 {'C': '0.01', 'dual': 'True', 'max_iter': '1000'} 0.78005 0.765526 \n","3 {'max_depth': 'None', 'min_samples_split': '5'... 0.76480 0.763587 \n","11 {'max_depth': 'None', 'min_samples_split': '5'... 0.76480 0.763587 \n","\n"," Recall F1 Score ROC AUC Temps d'entraînement (s) \\\n","1 0.7574 0.767376 0.851067 2.777000 \n","9 0.7574 0.767376 0.851067 3.567882 \n","15 0.7950 0.785690 0.861098 33.858043 \n","7 0.7950 0.785690 0.861098 26.421158 \n","0 0.7632 0.769820 0.843168 1.016124 \n","8 0.7632 0.769820 0.843168 1.219065 \n","13 0.7981 0.787158 0.861249 42.945317 \n","5 0.7981 0.787158 0.861249 35.626043 \n","10 0.7584 0.766409 0.843950 5883.188167 \n","2 0.7584 0.766409 0.843950 3671.472166 \n","6 0.8018 0.784118 0.851395 299.318508 \n","14 0.8018 0.784118 0.851395 332.209190 \n","12 0.8074 0.785905 0.851585 154.561330 \n","4 0.8074 0.785905 0.851585 132.033319 \n","3 0.7671 0.765340 0.841649 3513.826061 \n","11 0.7671 0.765340 0.841649 5611.991874 \n","\n"," Run ID \\\n","1 64430125306243afab3cfa643aac487e \n","9 9f6ccc9a4b3e415695e2c05fa85d2bdb \n","15 c90a2914f2cb46c993cf98e2ef6f863e \n","7 0d35789154e04e5388d69df118515074 \n","0 74ceb382771d46f4b9cd1530ae012397 \n","8 dd8952ca25ed4d1aafc3567e07f3c02d \n","13 499aa47dec3647668dc9668287f7d738 \n","5 9a565ac797fd45959b57d95b940d623a \n","10 8c20d78baba443f3ba199d92340868bd \n","2 7be18b5ea5e34e009bdcc4d7075a621a \n","6 0c89cbaa893440b48fcf00faf65eb8fb \n","14 2c9f95becf5744f38e55f1642928d3e6 \n","12 4e80851a287142a7ae1720ad37a8c502 \n","4 b2b792fed8eb49089609e93bc0713d45 \n","3 d5f040683a304c3297bd939b6ee4fed9 \n","11 9d9300d6e5284095a0f25aa34d088c02 \n","\n"," Run Name \n","1 Modele_Simple_Naive_Bayes_TF-IDF \n","9 Modele_Simple_Naive_Bayes_TF-IDF \n","15 Modele_Simple_Regression_Logistique_TF-IDF \n","7 Modele_Simple_Regression_Logistique_TF-IDF \n","0 Modele_Simple_Naive_Bayes_BoW \n","8 Modele_Simple_Naive_Bayes_BoW \n","13 Modele_Simple_SVM_Lineaire_TF-IDF \n","5 Modele_Simple_SVM_Lineaire_TF-IDF \n","10 Modele_Simple_Random_Forest_BoW \n","2 Modele_Simple_Random_Forest_BoW \n","6 Modele_Simple_Regression_Logistique_BoW \n","14 Modele_Simple_Regression_Logistique_BoW \n","12 Modele_Simple_SVM_Lineaire_BoW \n","4 Modele_Simple_SVM_Lineaire_BoW \n","3 Modele_Simple_Random_Forest_TF-IDF \n","11 Modele_Simple_Random_Forest_TF-IDF "],"text/html":["\n","
\n","
\n","\n","
\n"," \n","
\n","
\n","
Modèle
\n","
Vectorisation
\n","
Meilleurs paramètres
\n","
Accuracy
\n","
Precision
\n","
Recall
\n","
F1 Score
\n","
ROC AUC
\n","
Temps d'entraînement (s)
\n","
Run ID
\n","
Run Name
\n","
\n"," \n"," \n","
\n","
1
\n","
Naive Bayes
\n","
TF-IDF
\n","
{'alpha': '2.0'}
\n","
0.77040
\n","
0.777618
\n","
0.7574
\n","
0.767376
\n","
0.851067
\n","
2.777000
\n","
64430125306243afab3cfa643aac487e
\n","
Modele_Simple_Naive_Bayes_TF-IDF
\n","
\n","
\n","
9
\n","
Naive Bayes
\n","
TF-IDF
\n","
{'alpha': '2.0'}
\n","
0.77040
\n","
0.777618
\n","
0.7574
\n","
0.767376
\n","
0.851067
\n","
3.567882
\n","
9f6ccc9a4b3e415695e2c05fa85d2bdb
\n","
Modele_Simple_Naive_Bayes_TF-IDF
\n","
\n","
\n","
15
\n","
Regression Logistique
\n","
TF-IDF
\n","
{'C': '1.0', 'max_iter': '1000', 'solver': 'sa...
\n","
0.78315
\n","
0.776595
\n","
0.7950
\n","
0.785690
\n","
0.861098
\n","
33.858043
\n","
c90a2914f2cb46c993cf98e2ef6f863e
\n","
Modele_Simple_Regression_Logistique_TF-IDF
\n","
\n","
\n","
7
\n","
Regression Logistique
\n","
TF-IDF
\n","
{'C': '1.0', 'max_iter': '1000', 'solver': 'sa...
\n","
0.78315
\n","
0.776595
\n","
0.7950
\n","
0.785690
\n","
0.861098
\n","
26.421158
\n","
0d35789154e04e5388d69df118515074
\n","
Modele_Simple_Regression_Logistique_TF-IDF
\n","
\n","
\n","
0
\n","
Naive Bayes
\n","
BoW
\n","
{'alpha': '2.0'}
\n","
0.77180
\n","
0.776557
\n","
0.7632
\n","
0.769820
\n","
0.843168
\n","
1.016124
\n","
74ceb382771d46f4b9cd1530ae012397
\n","
Modele_Simple_Naive_Bayes_BoW
\n","
\n","
\n","
8
\n","
Naive Bayes
\n","
BoW
\n","
{'alpha': '2.0'}
\n","
0.77180
\n","
0.776557
\n","
0.7632
\n","
0.769820
\n","
0.843168
\n","
1.219065
\n","
dd8952ca25ed4d1aafc3567e07f3c02d
\n","
Modele_Simple_Naive_Bayes_BoW
\n","
\n","
\n","
13
\n","
SVM Lineaire
\n","
TF-IDF
\n","
{'C': '0.1', 'dual': 'True', 'max_iter': '1000'}
\n","
0.78420
\n","
0.776513
\n","
0.7981
\n","
0.787158
\n","
0.861249
\n","
42.945317
\n","
499aa47dec3647668dc9668287f7d738
\n","
Modele_Simple_SVM_Lineaire_TF-IDF
\n","
\n","
\n","
5
\n","
SVM Lineaire
\n","
TF-IDF
\n","
{'C': '0.1', 'dual': 'True', 'max_iter': '1000'}
\n","
0.78420
\n","
0.776513
\n","
0.7981
\n","
0.787158
\n","
0.861249
\n","
35.626043
\n","
9a565ac797fd45959b57d95b940d623a
\n","
Modele_Simple_SVM_Lineaire_TF-IDF
\n","
\n","
\n","
10
\n","
Random Forest
\n","
BoW
\n","
{'max_depth': 'None', 'min_samples_split': '5'...
\n","
0.76885
\n","
0.774589
\n","
0.7584
\n","
0.766409
\n","
0.843950
\n","
5883.188167
\n","
8c20d78baba443f3ba199d92340868bd
\n","
Modele_Simple_Random_Forest_BoW
\n","
\n","
\n","
2
\n","
Random Forest
\n","
BoW
\n","
{'max_depth': 'None', 'min_samples_split': '5'...
\n","
0.76885
\n","
0.774589
\n","
0.7584
\n","
0.766409
\n","
0.843950
\n","
3671.472166
\n","
7be18b5ea5e34e009bdcc4d7075a621a
\n","
Modele_Simple_Random_Forest_BoW
\n","
\n","
\n","
6
\n","
Regression Logistique
\n","
BoW
\n","
{'C': '0.1', 'max_iter': '1000', 'solver': 'sa...
\n","
0.77925
\n","
0.767199
\n","
0.8018
\n","
0.784118
\n","
0.851395
\n","
299.318508
\n","
0c89cbaa893440b48fcf00faf65eb8fb
\n","
Modele_Simple_Regression_Logistique_BoW
\n","
\n","
\n","
14
\n","
Regression Logistique
\n","
BoW
\n","
{'C': '0.1', 'max_iter': '1000', 'solver': 'sa...
\n","
0.77925
\n","
0.767199
\n","
0.8018
\n","
0.784118
\n","
0.851395
\n","
332.209190
\n","
2c9f95becf5744f38e55f1642928d3e6
\n","
Modele_Simple_Regression_Logistique_BoW
\n","
\n","
\n","
12
\n","
SVM Lineaire
\n","
BoW
\n","
{'C': '0.01', 'dual': 'True', 'max_iter': '1000'}
\n","
0.78005
\n","
0.765526
\n","
0.8074
\n","
0.785905
\n","
0.851585
\n","
154.561330
\n","
4e80851a287142a7ae1720ad37a8c502
\n","
Modele_Simple_SVM_Lineaire_BoW
\n","
\n","
\n","
4
\n","
SVM Lineaire
\n","
BoW
\n","
{'C': '0.01', 'dual': 'True', 'max_iter': '1000'}
\n","
0.78005
\n","
0.765526
\n","
0.8074
\n","
0.785905
\n","
0.851585
\n","
132.033319
\n","
b2b792fed8eb49089609e93bc0713d45
\n","
Modele_Simple_SVM_Lineaire_BoW
\n","
\n","
\n","
3
\n","
Random Forest
\n","
TF-IDF
\n","
{'max_depth': 'None', 'min_samples_split': '5'...
\n","
0.76480
\n","
0.763587
\n","
0.7671
\n","
0.765340
\n","
0.841649
\n","
3513.826061
\n","
d5f040683a304c3297bd939b6ee4fed9
\n","
Modele_Simple_Random_Forest_TF-IDF
\n","
\n","
\n","
11
\n","
Random Forest
\n","
TF-IDF
\n","
{'max_depth': 'None', 'min_samples_split': '5'...
\n","
0.76480
\n","
0.763587
\n","
0.7671
\n","
0.765340
\n","
0.841649
\n","
5611.991874
\n","
9d9300d6e5284095a0f25aa34d088c02
\n","
Modele_Simple_Random_Forest_TF-IDF
\n","
\n"," \n","
\n","
\n","
\n","\n","
\n"," \n","\n"," \n","\n"," \n","
\n","\n","\n","
\n"," \n","\n","\n","\n"," \n","
\n","\n","
\n"," \n"," \n"," \n","
\n","\n","
\n","
\n"],"application/vnd.google.colaboratory.intrinsic+json":{"type":"dataframe","variable_name":"results_df","summary":"{\n \"name\": \"results_df\",\n \"rows\": 16,\n \"fields\": [\n {\n \"column\": \"Mod\\u00e8le\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 4,\n \"samples\": [\n \"Regression Logistique\",\n \"Random Forest\",\n \"Naive Bayes\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Vectorisation\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 2,\n \"samples\": [\n \"BoW\",\n \"TF-IDF\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Meilleurs param\\u00e8tres\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 6,\n \"samples\": [\n \"{'alpha': '2.0'}\",\n \"{'C': '1.0', 'max_iter': '1000', 'solver': 'saga'}\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Accuracy\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.006996272817245854,\n \"min\": 0.7648,\n \"max\": 0.7842,\n \"num_unique_values\": 8,\n \"samples\": [\n 0.78315,\n 0.77925\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Precision\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.005605282505618488,\n \"min\": 0.7635874975114474,\n \"max\": 0.7776180698151951,\n \"num_unique_values\": 8,\n \"samples\": [\n 0.7765947054801211,\n 0.7671993110707109\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Recall\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.020642222102606442,\n \"min\": 0.7574,\n \"max\": 0.8074,\n \"num_unique_values\": 8,\n \"samples\": [\n 0.795,\n 0.8018\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"F1 Score\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.009652587223973512,\n \"min\": 0.7653397186471116,\n \"max\": 0.7871584968931847,\n \"num_unique_values\": 8,\n \"samples\": [\n 0.7856895784948362,\n 0.7841181360324678\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"ROC AUC\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.007348370075287755,\n \"min\": 0.8416485,\n \"max\": 0.861248845,\n \"num_unique_values\": 8,\n \"samples\": [\n 0.861097975,\n 0.85139523\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Temps d'entra\\u00eenement (s)\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 2126.188848811458,\n \"min\": 1.0161237716674805,\n \"max\": 5883.188166618347,\n \"num_unique_values\": 16,\n \"samples\": [\n 2.7770001888275146,\n 3.5678818225860596\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Run ID\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 16,\n \"samples\": [\n \"64430125306243afab3cfa643aac487e\",\n \"9f6ccc9a4b3e415695e2c05fa85d2bdb\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Run Name\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 8,\n \"samples\": [\n \"Modele_Simple_Regression_Logistique_TF-IDF\",\n \"Modele_Simple_Regression_Logistique_BoW\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}"}},"metadata":{},"execution_count":28}],"source":["results_df"]},{"cell_type":"code","execution_count":29,"metadata":{"id":"w0WL6NSxWxlQ","executionInfo":{"status":"ok","timestamp":1751526850863,"user_tz":-120,"elapsed":2,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["def afficher_tableau_comparatif(df):\n"," \"\"\"\n"," Affiche un tableau comparatif formaté des résultats\n","\n"," Parameters:\n"," -----------\n"," df : pandas.DataFrame\n"," Dataframe contenant les résultats à afficher\n"," \"\"\"\n"," if df.empty:\n"," print(\"Aucun résultat à afficher.\")\n"," return\n","\n"," # Sélectionner et formater les colonnes pour l'affichage\n"," df_display = df[[\"Modèle\", \"Vectorisation\", \"Accuracy\", \"Precision\", \"Recall\",\n"," \"F1 Score\", \"ROC AUC\", \"Temps d'entraînement (s)\"]]\n","\n"," # Formater les valeurs numériques\n"," for col in [\"Accuracy\", \"Precision\", \"Recall\", \"F1 Score\", \"ROC AUC\"]:\n"," if col in df_display.columns:\n"," df_display[col] = df_display[col].apply(lambda x: f\"{x:.4f}\" if x is not None else \"N/A\")\n","\n"," if \"Temps d'entraînement (s)\" in df_display.columns:\n"," df_display[\"Temps d'entraînement (s)\"] = df_display[\"Temps d'entraînement (s)\"].apply(\n"," lambda x: f\"{x:.2f}\" if x is not None else \"N/A\")\n","\n"," # Afficher le tableau\n"," print(\"\\n=== Comparaison des modèles ===\\n\")\n"," print(df_display.to_string(index=False))\n","\n"," # Identifier le meilleur modèle selon la précision\n"," if \"Precision\" in df.columns:\n"," best_idx = df[\"Precision\"].idxmax() if not df.empty else None\n"," if best_idx is not None:\n"," best_model = df.loc[best_idx]\n"," print(\"\\n=== Meilleur modèle ===\")\n"," print(f\"Modèle: {best_model['Modèle']}\")\n"," print(f\"Vectorisation: {best_model['Vectorisation']}\")\n"," print(f\"Precision: {best_model['Precision']:.4f}\")\n"," print(f\"Meilleurs paramètres: {best_model['Meilleurs paramètres']}\")"]},{"cell_type":"code","execution_count":30,"metadata":{"id":"Ou07_WmDWxlQ","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1751526850873,"user_tz":-120,"elapsed":8,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"519c63c8-8606-47aa-aa37-eb5fd3715762"},"outputs":[{"output_type":"stream","name":"stdout","text":["\n","=== Comparaison des modèles ===\n","\n"," Modèle Vectorisation Accuracy Precision Recall F1 Score ROC AUC Temps d'entraînement (s)\n"," Naive Bayes TF-IDF 0.7704 0.7776 0.7574 0.7674 0.8511 2.78\n"," Naive Bayes TF-IDF 0.7704 0.7776 0.7574 0.7674 0.8511 3.57\n","Regression Logistique TF-IDF 0.7832 0.7766 0.7950 0.7857 0.8611 33.86\n","Regression Logistique TF-IDF 0.7832 0.7766 0.7950 0.7857 0.8611 26.42\n"," Naive Bayes BoW 0.7718 0.7766 0.7632 0.7698 0.8432 1.02\n"," Naive Bayes BoW 0.7718 0.7766 0.7632 0.7698 0.8432 1.22\n"," SVM Lineaire TF-IDF 0.7842 0.7765 0.7981 0.7872 0.8612 42.95\n"," SVM Lineaire TF-IDF 0.7842 0.7765 0.7981 0.7872 0.8612 35.63\n"," Random Forest BoW 0.7689 0.7746 0.7584 0.7664 0.8439 5883.19\n"," Random Forest BoW 0.7689 0.7746 0.7584 0.7664 0.8439 3671.47\n","Regression Logistique BoW 0.7792 0.7672 0.8018 0.7841 0.8514 299.32\n","Regression Logistique BoW 0.7792 0.7672 0.8018 0.7841 0.8514 332.21\n"," SVM Lineaire BoW 0.7801 0.7655 0.8074 0.7859 0.8516 154.56\n"," SVM Lineaire BoW 0.7801 0.7655 0.8074 0.7859 0.8516 132.03\n"," Random Forest TF-IDF 0.7648 0.7636 0.7671 0.7653 0.8416 3513.83\n"," Random Forest TF-IDF 0.7648 0.7636 0.7671 0.7653 0.8416 5611.99\n","\n","=== Meilleur modèle ===\n","Modèle: Naive Bayes\n","Vectorisation: TF-IDF\n","Precision: 0.7776\n","Meilleurs paramètres: {'alpha': '2.0'}\n"]}],"source":["# Afficher le tableau comparatif\n","afficher_tableau_comparatif(results_df)"]},{"cell_type":"code","execution_count":31,"metadata":{"id":"etUvFhueWxlQ","executionInfo":{"status":"ok","timestamp":1751526850884,"user_tz":-120,"elapsed":9,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["def display_metrics_subplot(df, figsize=(18, 14)):\n"," \"\"\"\n"," Génère des sous-graphiques pour visualiser toutes les métriques avec une échelle fixe (0,1)\n","\n"," Parameters:\n"," -----------\n"," df : pandas.DataFrame\n"," DataFrame contenant les résultats des modèles avec leurs métriques\n"," figsize : tuple, optional\n"," Taille de la figure (largeur, hauteur)\n"," Returns:\n"," --------\n"," matplotlib.figure.Figure\n"," La figure générée\n"," \"\"\"\n"," # Définir les métriques à visualiser\n"," metriques = [\"Accuracy\", \"Precision\", \"Recall\", \"F1 Score\", \"ROC AUC\"]\n","\n"," # Créer une figure avec des sous-graphiques\n"," fig, axes = plt.subplots(3, 2, figsize=figsize)\n"," axes = axes.flatten()\n","\n"," # Définir une palette de couleurs cohérente\n"," palette = sns.color_palette(\"Set2\", len(df[\"Vectorisation\"].unique()))\n","\n"," # Créer un barplot pour chaque métrique\n"," for i, metrique in enumerate(metriques):\n"," ax = axes[i]\n","\n"," # Créer le barplot\n"," sns.barplot(\n"," x=\"Modèle\",\n"," y=metrique,\n"," hue=\"Vectorisation\",\n"," data=df,\n"," ax=ax,\n"," palette=palette\n"," )\n","\n"," # Configurer l'axe y pour qu'il aille de 0 à 1\n"," ax.set_ylim(0, 1)\n","\n"," # Ajouter une grille horizontale pour faciliter la lecture\n"," ax.grid(axis='y', linestyle='--', alpha=0.7)\n","\n"," # Définir le titre du sous-graphique\n"," ax.set_title(f\"{metrique}\", fontsize=14, fontweight='bold')\n","\n"," # Rotation des étiquettes de l'axe x pour éviter le chevauchement\n"," ax.set_xticklabels(ax.get_xticklabels(), rotation=45, ha='right')\n","\n"," # Ajouter des valeurs au-dessus des barres\n"," for p in ax.patches:\n"," height = p.get_height()\n"," ax.text(\n"," p.get_x() + p.get_width()/2.,\n"," height + 0.01,\n"," f'{height:.3f}',\n"," ha=\"center\", fontsize=9\n"," )\n","\n"," # Ne garder la légende que sur le premier graphique\n"," # if i != 0:\n"," # ax.get_legend().remove()\n","\n"," # Ajuster la disposition pour éviter le chevauchement\n"," plt.tight_layout()\n","\n"," # Ajouter un titre global\n"," fig.suptitle(\"Comparaison des performances des modèles par métrique\",\n"," fontsize=18, fontweight='bold', y=1.02)\n","\n"," # Afficher la figure (si dans un notebook)\n"," plt.show()"]},{"cell_type":"code","source":["def display_metrics_subplot(df, figsize=(18, 14)):\n"," \"\"\"\n"," Génère des sous-graphiques pour visualiser toutes les métriques.\n"," Le graphique de Précision occupe 2 colonnes.\n","\n"," Parameters:\n"," -----------\n"," df : pandas.DataFrame\n"," DataFrame contenant les résultats des modèles avec leurs métriques\n"," figsize : tuple, optional\n"," Taille de la figure (largeur, hauteur)\n"," Returns:\n"," --------\n"," matplotlib.figure.Figure\n"," La figure générée\n"," \"\"\"\n"," if df.empty:\n"," print(\"Aucun résultat à afficher.\")\n"," return None # Retourne None si le dataframe est vide\n","\n"," # Définir les métriques à visualiser (sans la Précision initiale)\n"," other_metriques = [\"Accuracy\", \"Recall\", \"F1 Score\", \"ROC AUC\"]\n","\n"," # Créer une figure et une grille de sous-graphiques (3 lignes, 2 colonnes)\n"," fig = plt.figure(figsize=figsize)\n"," gs = fig.add_gridspec(3, 2)\n","\n"," # Définir les axes pour la Précision (span 2 colonnes)\n"," ax_precision = fig.add_subplot(gs[0, :]) # La Précision occupe la première ligne, les deux colonnes\n","\n"," # Définir les axes pour les autres métriques (remplir les 2 lignes restantes)\n"," axes_other = [fig.add_subplot(gs[1, 0]), fig.add_subplot(gs[1, 1]),\n"," fig.add_subplot(gs[2, 0]), fig.add_subplot(gs[2, 1])]\n","\n"," # Définir une palette de couleurs cohérente\n"," palette = sns.color_palette(\"Set2\", len(df[\"Vectorisation\"].unique()))\n","\n"," # Fonction utilitaire pour ajouter les valeurs au-dessus des barres\n"," def add_value_labels(ax):\n"," for p in ax.patches:\n"," height = p.get_height()\n"," if height > 0: # N'affiche le label que si la hauteur est > 0\n"," ax.text(\n"," p.get_x() + p.get_width()/2.,\n"," height + 0.01,\n"," f'{height:.3f}',\n"," ha=\"center\", fontsize=9\n"," )\n","\n","\n"," # Tracer le graphique de Précision\n"," sns.barplot(\n"," x=\"Modèle\",\n"," y=\"Precision\",\n"," hue=\"Vectorisation\",\n"," data=df,\n"," ax=ax_precision,\n"," palette=palette\n"," )\n"," ax_precision.set_ylim(0, 1)\n"," ax_precision.grid(axis='y', linestyle='--', alpha=0.7)\n"," ax_precision.set_title(\"Precision (Métriques clé)\", fontsize=14, fontweight='bold')\n"," ax_precision.set_xticklabels(ax_precision.get_xticklabels(), rotation=45, ha='right')\n"," ax_precision.set_xlabel(\"\") # Masquer l'étiquette x pour la Précision si désiré\n"," add_value_labels(ax_precision) # Ajouter les valeurs\n","\n","\n"," # Tracer les graphiques pour les autres métriques\n"," for i, metrique in enumerate(other_metriques):\n"," ax = axes_other[i]\n","\n"," sns.barplot(\n"," x=\"Modèle\",\n"," y=metrique,\n"," hue=\"Vectorisation\",\n"," data=df,\n"," ax=ax,\n"," palette=palette\n"," )\n","\n"," ax.set_ylim(0, 1)\n"," ax.grid(axis='y', linestyle='--', alpha=0.7)\n"," ax.set_title(f\"{metrique}\", fontsize=14, fontweight='bold')\n"," ax.set_xticklabels(ax.get_xticklabels(), rotation=45, ha='right')\n"," add_value_labels(ax) # Ajouter les valeurs\n","\n"," # Ne garder la légende que sur l'un des graphiques (par exemple, le premier des autres)\n"," if i != 0:\n"," ax.get_legend().remove()\n"," else:\n"," # Placer la légende de la précision à un endroit approprié si on ne veut pas de légendes répétées\n"," # ax_precision.legend(loc='upper right') # Exemple de placement\n","\n"," # Ou retirer la légende de la précision si on la garde sur le premier des autres\n"," ax_precision.get_legend().remove() # Retirer la légende de la précision\n","\n"," # Ajuster la disposition pour éviter le chevauchement\n"," plt.tight_layout()\n","\n"," # Ajouter un titre global\n"," fig.suptitle(\"Comparaison des performances des modèles\",\n"," fontsize=18, fontweight='bold', y=1.02) # Ajuster y si nécessaire\n","\n"," # Afficher la figure (si dans un notebook)\n"," plt.show()"],"metadata":{"id":"lv_FsbT_OlC1","executionInfo":{"status":"ok","timestamp":1751526850893,"user_tz":-120,"elapsed":7,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"execution_count":32,"outputs":[]},{"cell_type":"code","execution_count":33,"metadata":{"id":"Noe09nRHWxlQ","colab":{"base_uri":"https://localhost:8080/","height":572},"executionInfo":{"status":"ok","timestamp":1751526852502,"user_tz":-120,"elapsed":1608,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"cf53cd1b-3d6c-4b69-c78b-0d33423f93d2"},"outputs":[{"output_type":"display_data","data":{"text/plain":["
"],"image/png":"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20hJScnW9Sf9cbH1/n3yySdzFEv61yU776OzZ8+aS5cunaP9pL22Hzp06I7fIwAAAPcipvcEAACQ1KhRIx04cEDdu3c3phrMiq+vr8VypUqVFBISomrVqmXZNiAgQBs2bCg0o/yk2897SjuaKb1XXnnF6hv+06dPz/Q5dG+//Xaej17r2bOnnnzyyQzX161b12KUXX5zc3PTggUL5OnpaZQVL17cGN2VFV9fX61cudJqCry7qV27dvrss88yPPdLly6tqVOnZrmdhg0basOGDapYsWK29uvq6mo1cjO72rRpYzUi5k7Mnj3basq9tCZNmmSMbk3l4uKi4OBgPfHEE9nez3333XfHMd6JyZMna9y4cdl6ftuwYcNyPG1fQSqI605GnJ2dtWLFCj377LM5buvj46NNmzapTZs22apvMpnk5+eX4/1Ikr+/v77++usct5s9e3am07527949W++DDz/8UBMnTpSTU/YmG7rTfjo6Omr69OlW064WFq6urlq1apUeeeSRLOsWLVpU8+bN09NPP21RbjKZtGTJkkz/fhgyZIiaN2+e5T7mzZunoUOHZvvvnju5jgUEBGjLli2qV69etuo7Ojre8fNt69atazU6FQAA4F7D9J4AAAD/X9myZbV8+XIdP35cixYt0vbt23XixAlFREQoISFB3t7eqly5spo2bapu3brZTNLUqlVLBw8e1JIlS/Tzzz8rNDRUYWFhMpvNKlGihBo0aKBHH31Uffv2VZEiRe5+JzPh7e2tHTt2aNq0aVq4cKFOnTolJycnNWjQQEOHDlXPnj2t2lSsWFH79u3TxIkTFRwcrEuXLsnLy0sNGjTQsGHD1LlzZ/Xr1y9P4zSZTPrhhx/Upk0bff311zpy5IhMJpMqVqyoJ554QqNGjdLvv/+e6/0sWbJEW7du1Y4dO3Tw4EFduXJFYWFhSkpKkpeXlwIDA9WmTRu99NJLNj8Ive+++7R9+3YFBwdr8eLF+uOPP3TlyhUlJiaqePHiql27tjp37qwBAwZYJAwLyrBhw9SoUSNNmjRJO3fu1M2bN+Xn56euXbtq3LhxOnLkSLa207RpUx07dkxLlizRL7/8oj179igsLEwJCQny9PRUxYoVVa9ePbVp00ZdunSRl5eX0bZdu3basGGDtm/frl27dunvv/9WWFiYIiIi5OrqqnLlyql+/frq3bu3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oYLatGmjN998UxcvXjTqZvUctIiICL377rtq1KiRvLy85OLiovLly6tnz5767bffrOp/9913Fq9RfHy83n//fVWpUkWurq7y8/PTqFGjFB8fn+VxSRUXF6fFixcby4899lim9R0cbv+rGB8fb5EsvHz5spYuXSrp9iiurAQHB+vRRx9V2bJl5eLiIm9vb7Vq1UrffPONMc2o9H+v4ZYtW4yyefPm2Zw+NP0UoIcPH1b37t1VokQJubq66tixY1k+0y88PFwvvfSSSpcuLTc3NzVq1Eg//vij1fmZdsrSzKYeTX/M0ouPj9fMmTPVsmVLFS9eXC4uLipbtqx69eqlXbt22XztvvvuOwUFBcnX11fOzs7y8fFR1apV9cQTT+jzzz/P8rVP68KFCxo9erTq168vT09PFSlSRBUqVFD37t1tnoMZuXHjhj788EM1adLEOJfvu+8+Pf3009qzZ4/NNuXLl9eDDz4oSYqMjNTPP/+co9gBAAAAZB8j/QAAAADkuQcffFALFy40li9fvmyzXv/+/bVt2zar8ri4OHXr1k0bNmywKA8PD9eaNWu0Zs0ajRw5UlOmTLFY/8033+iVV15RQkKCRfnZs2d19uxZNW3aVI0aNco09qNHj6pp06aKjY21KP/nn3/0zz//KCQkRK1atVL58uUz3Y50e1rLDh066MKFCxblly5d0vLly7V8+XINGzZMU6dOzXAb7dq10/bt243lixcvasqUKbp69armz5+fZQyS9Pvvvys6OlqSVLJkSQUGBmZav06dOoqIiND58+f1xRdfaMyYMXJyctLs2bOVmJgoSerWrZuWL19us31KSor69eunBQsWWJRHRUVp69at2rp1q5YsWaLg4OBsjQDNyMGDB9W0aVPFxMRku01ERISaN2+ukydPGmV79uxR79699cgjj9xxLBkJCwtThw4dtH//fovyy5cva9myZfr555/16aefatiwYca6CRMm6J133rGoHxkZqcjISJ08eVJbtmzRK6+8kq39r1mzRk8++aRx/FOlns8BAQFq3759lts5deqUOnToYPXsxgsXLuiHH37QkiVL9Pnnn+vFF1+0avvggw9q586dkqTffvvN4ksBAAAAAPIOST8AAAAAeS796KUyZcrYrLdt2zbVrFlTjzzyiMxmszF6bMSIEUbCz8XFRU8++aQCAwN16NAh/fjj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kZGRunTpktavX6+QkBA1adJEN2/e1IkTJxQdHa369esbc85ygwoAILtcvXpVBQoUMB4fO3ZMCxculNls1nPPPScfHx+lpKRo586dWrhwofLly6e33norww2VAADktP3792vlypW6efOmevTooWPHjmnevHl69dVXVbVqVWO7lJQUXblyRRaLRfny5WP6BOABxm3TgAOzWCxycnJS69atZbFYtHnzZl29elWjRo2Sv7+/kpKS5OrqqoCAABUvXpwLpgCAHBMeHq6jR4/q8ccfN5a5uLjo8uXLOnbsmHx9fbV8+XJdvnxZefLk0YYNG5SUlKQnnngiXePUdq4DACA7rF+/XvPnz9cXX3xhnG+OHTum8+fPKykpST4+PpIkZ2dnhYaGSpKWLl2qESNGaPjw4cb86QAA2EPFihVlNpu1bNkyjRs3TlevXtWwYcMUEhKSrie7k5OTChcubOfSAsgJTIoCODCz2WxcDG3Xrp0aNmyookWLavXq1YqNjZWrq6ssFovWrFmjAgUKqFChQvYuMgDgIREWFqbXXntNZrNZf/31ly5cuKC8efOqffv22rRpk0aNGqWCBQuqe/fuGj58uBo2bKjTp09n2A9z+AEAslPp0qX1wQcfyNXVVQkJCXJyclKDBg3UqlUrpaam6ptvvjG2tQV/jz/+uFxdXRUdHW3HkgMAHna2UK98+fJq27atChcurMDAQCUmJkqSMaf67T8DeLAxvCfwALBYLMbwZ0uWLNHOnTv1yCOPqFu3bvruu+904cIFjR07Vs7Ozsa2AABkF9u5xmq16tixY/r6669VvXp1tW/fXvnz51dkZKTi4+ONIactFotGjRqlcuXKqUuXLnYuPQDgYXT69GmNHDlSgwcPVrly5RQXF6eNGzdq7dq1CgoK0ksvvWRsm5KSouTkZLm7u9uxxAAAyJiLVpIOHTqkpUuXKj4+Xm3btlW1atUybAPgwUfoBzwg0gZ/S5cu1Z9//qm///5bvr6++vzzz+Xs7MycSACAbJdZg3Lx4sX6448/VKZMGT3++OMKCAiQJCUkJOjvv//WggULFBkZqY8//pjzFADALs6dO6cZM2bo5MmTeuONNxQSEqKbN28awV+pUqX0wgsv2LuYAABkkLYNdvDgQS1btkxJSUlq0aKFatasaefSAchpdPcBHIDFYvnXdWmH+mzTpo0qVqyoqlWr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LVS3bl1dvnxZU6dOVWxsrDZt2qRBgwZp/PjxkqQbN25kCPyaNGmiunXrKiYmRps3b05XBrPZrHLlyqlWrVoKCAiQj4+PEhIStHv3bi1dulRWq1WTJ0/Wiy++qFq1amXXrwIA8BAg9AMAOIyLFy9q1apVxuPu3bsb/9tCv127dmnfvn3GnA1jx441Aj+z2ay1a9eqfv36xj6SkpKMkO369etGI06SqlWrpo0bN8rT09NYdvbs2XR3d2aFkiVLateuXfLx8Um3vGXLlmrZsqWOHj2q3bt368qVK3JxcdETTzyhbdu2KS4uTikpKVq7dq0Ryn388cfG8/Pmzatdu3alGwL15s2bunnzpiTJ19dXPXr00E8//SRJmjBhghH6zZ0713jO448/roCAgCytMwAAAABkp6effjrDiCUeHh4aMWKE0e6RpE8//dT4uXfv3po6darxuGHDhkZAOHnyZH388cfy8/PTlClT0gV+o0ePzjBlwsmTJ42fy5cvr4MHD+rMmTPasWOHLl26JBcXF9WvX19//vmnzp8/L0n67bffCP0AAP8JoR8AwGFMnz5dqampkiSTyWQMldK+fXvlyZNHCQkJkm41xr744gtJSneHZYsWLdIFfpLk6uqqwMBASbd6BaakpBjrhgwZki7wk271/MtqAwYMyBD4Sbfm/uvRo4fCw8P/8fnnzp2TJMXFxWn37t3G8t69e6cL/KRbQWDa0PKVV14xQr9ff/1VFy5cUJEiRTR//nxjG4b2BAAAAPAg6NChg1588UXjcVxcnPbs2WM8njZtmqZNm5bpc1NSUrR9+3a1bNkyXTszX758evvttzNsHxwcbPx87do19enTJ8M0Erezte0AALhfZnsXAACAu5V2aM+wsDAjgMuXL59atWplrJsxY4YR3qUdwqVkyZL/uP+0297N9re7fQ69xMTEu3pe2bJlM13evn37fw380r7O9evX05XhbspfqVIlNWrUSJKUmpqqyZMna9u2bcbQngULFlTr1q3/dT8AAAAAkJt07dpVY8aMSdeemTFjhtq1a2e0m25vQ/2bK1euSErfdixWrFi6udEz8+yzz/5r4CfdfRsSAIA7oacfAMAhbNu2TYcOHTIeb9myRSaTKdNtIyIi9Ouvv6pt27by8/Mzhu88derUP76Gn59fusenTp1SzZo177i92Zz+3pn4+HjjZ4vFohMnTvzj69lkNlzokSNH9NdffxmPn3rqKX366acqUqSITCaT/P39jQanja+vr0wmk9Fo/bf62rzyyitav369JGnSpEm6du2asa5nz55ycXG5q/0AAAAAQG7RsmVL9e3bV5L04osv6n//+58kae3atfr555/Vq1evDCOutG3bNsPoMGlVr15dUvq249mzZ5WamnrH4O/mzZvp5oZ/7LHHNH78eJUoUUJOTk6qVauWduzYcT9VBAAgA3r6AQAcQtpefveyfb169Yxlq1at0pYtW9Jtl5KSYsyfULt2bTk7/9/9MJ988oni4uLSbX/hwgUlJydLUoYG4tatW42ff/rppwyh3L1IG7xJUqdOnVS0aFGZTCatX78+0317eHioWrVqxuPp06fr+PHj6baJj483QlCbdu3aqXjx4pJuzTvxww8/GOueeeaZ+64DAAAAAOQGH3/8sby9vY3HI0eOVGpqqvLmzauqVasay69du6bXXntNb775Zrp/zz//vAIDA1WhQgVJ6duZN27c0NixYzO8pm30lOjoaGOaCklq1aqVgoOD5eTkpCNHjmjv3r1ZXV0AwEOMnn4AgFwvISFBs2fPNh6XLFky08nN9+3bp4MHD0qSli1bpqtXr2rw4MFatGiRLBaLUlNT1bhxY3Xp0kVlypTRpUuX9Ntvv+nll1/WwIED5evrq379+un777+XJO3atUvly5dX+/bt5ePjo6NHj2rhwoW6ePGifHx85OXlpZCQEB09elTSrcnbd+/erfj4eK1du/Y/1blUqVIym82yWCySpNdee0179uzRtWvXNHny5Ds+b8iQIcZE87Gxsapataq6deumEiVK6OzZs1q2bJm+//57tW/f3niOk5OT+vfvr3feeUeSjLkRQ0NDVbFixf9UDwAAAACwNx8fHw0YMEBjxoyRJB0/flxz5szRU089pcGDB6tHjx6Sbo0oU7lyZbVp00a+vr66du2adu/erc2bN6tw4cLq1q2bJKlv374aPXq0Ll++LEl65513tGbNGtWpU0dxcXHaunWrChQooEWLFsnf318+Pj6KioqSJH344YeKiIhQSkqKJk2axJCeAIAsRegHAMj1Fi1aZDSQJGnUqFFGoyyttWvX6rHHHpMkJScna8aMGXrttdc0fvx4vfTSS0pKSjKW38nnn3+u06dP69dff5V06+7Mr7/++o7bv/XWW3ruueck3RrS0zZsS3BwsFxdXXX48OF7rq8k+fv7q1+/fvrxxx8l3RoyZuTIkZJuDQdz+PBho4diWp07d9bw4cM1YsQIWa1W3bx5UxMnTvzX13v++ec1YsQII/CTpKeffvq+yg4AAAAAuc3AgQP11VdfGaO5jBkzRt27d9dTTz2l/fv366OPPpIkHT58+F/bcfny5dPSpUvVpk0bI/hbvXq1Vq9ebWzTrl07SZKzs7OGDBmiIUOGSLo1H+DHH38sSapYsaJKliypP//8M2srCwB4aDG8JwAg10s7tKe3t7c6duyY6XaNGzdWUFBQhuc9++yz2rNnj/r376+yZcvKw8NDbm5uKlasmDp16pRuaJY8efJo2bJlmjt3rlq3bq2AgAC5uLjIy8tLlSpV0muvvSYPDw9j+2effVY//fSTypUrJ1dXVwUEBKh///7avn27ChUq9J/qPW7cOI0cOVIlSpSQi4uLihcvrsGDB2vp0qXphiG93bBhw7R161b16dNHwcHBypMnjzw8PBQcHKxevXpl2nsvf/78euqpp9L9HtI+BgAAAABHVrBgQeOGTUk6cOCAFi5cKOlWALhlyxb17NlTJUuWlJubm1xcXFS0aFE1b95cY8aM0Zo1a9Ltr2bNmjpw4IBGjBihmjVrysvLS87OzvL391eTJk2MXoGS9Pbbb+u7775TSEiIXFxcFBAQoOeff14bNmyQp6dnzvwCAAAPBZPVarXauxAAAMD+Pv74Y2OIz27dumnWrFl2LhEAAAAAAACAu8XwngAAPMQuXbqkQ4cO6e+//9Znn31mLH/55ZftWCoAAAAAAAAA94rQDwCAh9jKlSszzN3XuXNn1a1b104lAgAAAAAAAHA/mNMPAADIbDarePHievvttzV16lR7FwcAAAAAAADAPcpVc/odPHhQS5Ys0alTp3T9+nW9+eabqlWr1j8+58CBA5o2bZrOnj2r/Pnz68knn1SjRo1ypsAAAAAAgLtGmw8AAAAAsk+u6umXmJiooKAgPfvss3e1fUREhD7++GNVqFBBn376qVq1aqUff/xRe/bsyd6CAgAAAADuGW0+AAAAAMg+uWpOv2rVqqlatWp3vf2qVavk7++v3r17S5ICAwN1+PBhLV++XFWrVs2mUgIAAAAA7gdtPgAAAADIPrmqp9+9OnbsmCpVqpRuWZUqVXT06FE7lQgAAAAAkFVo8wEAAADA3ctVPf3uVVRUlLy9vdMt8/b2Vnx8vJKSkuTq6prhOcnJyUpOTk63zMXFRS4uLtlaVgAAAADAvaHNBwAAAAB3z6FDv/uxcOFCzZ8/33hct25dvfbaa3YsEQAAAAAgq9DmAwAAAPCwcujQz8fHR9HR0emWRUdHy93dPdM7PiWpQ4cOat26tfHYZDJJkq5fv66UlJTsKywAAAAAZCNnZ2f5+vrauxhZijYfAAAAANx9e8+hQ7/SpUtr9+7d6Zbt3btXISEhd3zOnYZ1SUlJyTAEDAAAAADAfmjzAQAAAMDdM9u7AGklJCTo9OnTOn36tCQpIiJCp0+f1tWrVyVJM2fO1Lfffmts37x5c0VEROjnn3/W+fPn9dtvv+mPP/5Qq1at7FF8AAAAAMA/oM0HAAAAANknV/X0O3HihEaMGGE8njZtmiSpYcOGGjBggK5fv240BiXJ399fQ4YM0dSpU/Xrr78qf/78evHFF1W1atWcLjoAAAAA4F/Q5gMAAACA7GOyWq1WexciN7hy5QpDvQAAAABwWC4uLipYsKC9i5Fr0eYDAAAA4Kjutr2Xq4b3BAAAAAAAAAAAAHDvCP0AAAAAAAAAAAAAB0foBwAAAAAAAAAAADg4Qj8AAAAAAAAAAADAwRH6AQAAAAAAAAAAAA6O0A8AAAAAAAAAAABwcIR+AAAAAAAAAAAAgIMj9AMAAAAAAAAAAAAcHKEfAAAAAAAAAAAA4OAI/QAAAAAAAAAAAAAHR+gHAAAAAAAAAAAAODhCPwAAAAAAAAAAAMDBEfoBAAAAAAAAAAAADo7QDwAAAAAAAAAAAHBwhH4AAAAAAAAAAACAgyP0AwAAAAAAAAAAABwcoR8AAAAAAAAAAADg4Aj9AAAAAAAAAAAAAAdH6AcAAAAAAAAAAAA4OEI/AAAAAAAAAAAAwMER+gEAAAAAAAAAAAAOjtAPAAAAAAAAAAAAcHCEfgAAAAAAAAAAAICDI/QDAAAAAAAAAAAAHByhHwAAAAAAAAAAAODgCP0AAAAAAAAAAAAAB0foBwAAAAAAAAAAADg4Qj8AAAAAAAAAAADAwRH6AQAAAAAAAAAAAA6O0A8AAAAAAAAAAABwcIR+AAAAAAAAAAAAgIMj9AMAAAAAAAAAAAAcHKEfAAAAAAAAAAAA4OAI/QAAAAAAAAAAAAAHR+gHAAAAAAAAAMB9Sk5O1tChQ1W+fHlVqFBB7733nlJSUjLd9uLFi3rmmWdUoUIFVaxYUS+88IKuXbt21/sqXbp0un8lSpRQ06ZNs72OABwDoR8AAAAAAAAAAPfp66+/1vbt27Vu3TqtXbtW27Zt07hx4zLddujQoZKk7du3a+vWrUpMTNT7779/1/s6duxYun+lS5dW27Zts7eCABwGoR8AAAAAAAAASTnXYykxMVGDBw9W7dq1FRISogYNGmj27Nk5Ukcgq82ePVuvvfaaChUqpEKFCunVV1/VrFmzMt32zJkzatOmjfLmzStPT0+1bdtWhw8fvq997d69W0ePHlWXLl2ypV4AHA+hHwAAAAAAAABJOddjKTU1Vf7+/po9e7aOHDmiL7/8UiNHjtSGDRuyv5KQdG8B778NKXn69Gn17NlT5cuXV40aNfT999+ne74tmCpfvryqVq2qt956S/Hx8dlav5wSFRWlixcvqkKFCsayChUq6Pz584qJicmw/fPPP69ly5YpJiZG0dHRWrRokZo1a3Zf+5o1a5YaN26sgICAbKgZAEdE6AcAAAAAAACHl5MBRqdOnVSyZMl0+7h06VK21i+n5FSPJQ8PDw0ePFhBQUEymUyqUaOGwsLCtH379hypJ+4t4P2nISVTU1P19NNPq2LFivrrr780Z84cTZ48WQsXLjSeP2DAAD3yyCPas2eP1qxZo4MHD+qrr77KiWpmu5s3b0qSvL29jWW2n2NjYzNsX7NmTV29etX4WxUdHa2XX375nvcVFxenJUuW6KmnnsrC2gBwdIR+AAAAAAAAcHg5GWBI0rvvvptuHw9CTxt79lhKSEjQ7t27Va5cuWyoGTJzLwFvWrcPKXnixAmdOHFCr7/+ulxcXFSqVCl1795dM2bMMJ5z5swZdezYUa6ursqfP7+aNWumQ4cOZVvdclLevHklKd3n2vazp6dnum0tFou6d++umjVrGn87atasqe7du9/zvpYuXSp3d3c99thjWVwjAI6M0A8AAAAAAAAOLycDjAeVvXosWa1WDR48WCVLltQTTzyRhTXCndxrKJvW7UNKWiwWSbfeRxuLxZIu1HvxxRc1f/58xcfHKyIiQitXrjQCYkfn4+OjwoUL68CBA8ayAwcOqEiRIvLy8kq3bVRUlM6dO6dnnnlG7u7ucnd319NPP63du3crMjLynvY1a9Ysde7cWc7OztlbQQAOhdAPwEMjK4d6+bfJyt977z2FhoaqTJkyqlGjhj744AMlJSVlex2BrJaTx41NfHy86tatyx2+AAAAuGs5HWBIt3oWVqhQQc2bN9e8efOyqip2ZY8eS1arVe+8845OnDihSZMmyWzmcmVOuNeA1yazISUfeeQRFStWTJ999pkSExN15MgRzZ49Wzdu3DC2ady4sXbs2KEyZcqoWrVqKlKkiLp165bV1bKbrl276ptvvlFERIQiIiI0bty4TIfd9PPzU1BQkKZOnaqEhAQlJCRo6tSpKly4sPz8/O56X8ePH9fOnTsfqN8hgKzBWRTAQyOrhnqR/n2y8j59+mjjxo06cuSIfv/9dx08eDDDHBCOLCuDoP86lwayV04eNzafffaZihYtmj0VspOcDE/v5bUAAAAeFDkdYAwZMkTh4eHas2eP3n33Xb3//vtasWJFVlcrx+V0jyWr1ap3331Xu3fv1syZMzO8BrLPvQS8aWU2pKSLi4smTZqk/fv3q0aNGnr55ZfVtWtX+fr6Srr1WenWrZueeuopHT9+XAcOHJCHh4deeeWV7KiaXQwcOFA1atRQo0aN1KhRI9WsWdOo39tvv623337b2Hby5Mnat2+fatSooerVq2v37t2aMmXKXe3LZvbs2Xr00UcVHBycI/UD4DgI/QA8NLJqqBfp3ycrL126tDw8PCTdasSYzWadOnUq6ytlJ1kZBGXFXBrIPjl53EjS3r17tX79eg0YMCDL62JPORme3strAQAAPChyMsCQpNDQUHl5ecnFxUWNGjVSz549tWTJkqyull3kZI+loUOHaseOHZo1a5Z8fHxyqorQvQW8ad1pSMkyZcpo1qxZ2r9/v37//XclJSWpdu3akqS///5bCQkJevbZZ+Xq6iofHx/17NlTa9asyZ7K2YGLi4vGjBmjgwcP6uDBg/rwww+N39Enn3yiTz75xNg2JCREM2fO1IEDB3Tw4EHNmzdPFStWvKt92bz33nv65ZdfcqZyABxKrgv9Vq5cqQEDBqhHjx569913dfz48X/cfvny5XrttdfUo0cP9e/fX1OmTGEIPdyTnOqxlJiYqMGDB6t27doKCQlRgwYNNHv27BypI7J2qBfpnycrt/n2229VunRpVa5cWQcPHtQzzzyTtZWyo6wMgv5p/cM8l0ZukNPHTUpKigYPHqzRo0fLxcUl6ytkRzkZnt7vawFATqHNByA75GSAkZkHaUjKnOqxdO7cOU2dOlUnT57Uo48+alxLSbt/ZK+7DXht/mlIyYMHDyouLk5JSUn69ddfjXaJJJUqVUp58+bV1KlTlZKSotjYWM2YMSNd0AUAyBq5apbP8PBwTZs2Tc8//7xKly6t5cuXa/To0frqq6/SDc9gs3nzZs2cOVP9+/dXSEiILl68qO+//14mk0l9+vSxQw1yVnJysoYPH66FCxfKZDKpQ4cOGj58eKaTt5YuXTrd46SkJJUuXVqrV6++q/X38lqOJm2PCEnq2bOnxo0bp0GDBmXY9tixY+keN23aNEOPpTutT01Nlb+/v2bPnq0SJUpo165d6tWrlwoXLqyGDRtmdbVwm38b6uVOjUDbUC9ff/11uuU1a9bUzJkzVb58eUky7v5M6+WXX9bLL7+sY8eOacGCBSpYsGCW1cee/i0I+rcG9e1B0D+tv9u5NJA9cvq4+eGHH1SxYkXVrl1b4eHhWVoXe8rqY8YWnj722GOyWq3pwtP/8lpAbpOV33UladWqVRo7dqxOnTolLy8vDRw4UL1795Z0q5fxBx98oEOHDsnPz0+vv/66OnfunL0VfEjR5gOQnWwBRs2aNSXprgOML774IsO6gwcPKigoSM7Ozlq9erVmz56tOXPmSJKio6O1c+dOhYWFydXVVeHh4Zo+fbo+/fTT7KlYDrP1MhozZkyGdWl7K0n/12PpfvYVGBio8+fP//cC474NHDhQ169fV6NGjSRJHTt2TBfwSunf838aUnLp0qWaNm2aEhMTVb58eU2aNMlo++XNm1dTpkzR6NGj9cknn8hsNqtmzZr66quvsreCQDbIqXbK+fPnjWPTJjExUU2aNEl3cwVwu1yV2NguYDVu3FjSrYtau3bt0rp169S+ffsM2x85ckRlypRRvXr1JEn+/v6qW7duhuDlQZVTYdW9vpajmT17toYPH65ChQpJkl599VWNGjXqX+t2rz2WPDw8NHjwYGN9jRo1FBYWpu3btxP65YC0Q73Yhhm536FebJOVt2nTxuit+fnnn6t79+5atmxZhn2ULl1a5cuX16BBg4xGoiPL6iDon9annUvjzTff1OnTpzPMpYHsk5PHzalTpzR9+nT99ttv2VUdu8nJ8PR+XwtZKyfDqk6dOunPP/9Mt+9Nmzbd8eYKR5KV33XXrVund955R+PGjdOjjz6qGzdu6OrVq5JuXbjt1auX3njjDfXo0UN//fWXnnrqKZUoUUK1atXKxho+nGjzAchOORVgpKSk6Msvv9RLL70kSSpWrJiGDRumNm3aZGf1gCx3LwGvdGtIyTu5vRfo7WrWrKlFixbdVzn/K+fFX9nldR80Ke0G2rsIuUJOtVOKFi2a7vlJSUmqXr262rVrlx3VwgMk14w9kJKSopMnT6pSpUrGMrPZrEqVKuno0aOZPqdMmTI6efKkMRzM5cuXtXv3blWrVu2Or5OcnKy4uDjjX3x8vLHOZDLJZDKl29627L8sT7ssq5ZL/zd8V0BAgAICAvTaa6+lG77rTmXcs2ePjh49qq5du2Zadtt6W1hlMpk0e/ZsDRw40BgqzPZaWV2nnF4eHR1t9IiwLatYsWK6oevuVPbZs2ercePGKly4cKZ1sq23XXS7fR8JCQnavXu3ypcv73CfPXsuv9+y+/r6phvqxWQy6eDBgxmGerl9H7ahXlxcXIzlaScr9/DwkIeHh5555hljsvLM9pOSkqJTp049EO+TLexJe4zYQjjbuszKaAuCmjZtmmnZly1bZqy3cXV11eTJkzOdS8NRPnuOfDz903GTNlTKiuNm+/btunr1qurXr6+KFSvqmWee0Y0bN1SxYkXt3r3bod+n248ZScYxky9fvjvuJ7Njxmq1qnv37qpZs6Yx51/NmjWNO9htQe2NGzeM59heN1++fA7z2XP04yltI3DdunXGvIqZbX/8+HEdP3483RyO7dq1M7a1NQJHjhypo0ePat26dQoLC0tXnqFDh6bbR0BAwAPxPt0+VG3a75//tB/bjVddu3Y1lo8dO1aDBg1S3bp15ezsLF9fXyNw3blzp1xdXdWnTx85OzurRo0aevzxxzVz5kyH++zldrT5HPfvmqPXKbMpHVJTUzPd9k5TNqTd/6pVq9SsWTOVKlVK1atX17Rp04z99OvXT9WqVVOZMmVUu3ZtffXVV7xPOVgnV1dXYx6sQ4cOpRs23janVtrt086Jdfu+3377bR04cEAnTpzQ0qVL090Ikj9/fi1fvlxHjx7V0aNHtXr1amO4Q94n6kSdcl+dkDX47N16fL/Xyf+pnRIWFpahnXL7fn777TdZrVY9/vjjWV6nB/F9ehDrdLdyTU+/mJgYWSyWDJP2+vj46MKFC5k+p169eoqJidH7778v6dbwic2aNVPHjh3v+DoLFy7U/PnzjcclS5bUJ598Ii8vL2P4uMTERN28eVN58+aVm5ubsW18fLzi4+OVL1++dHMN3bx5U4mJifL29paTk5Ox/MaNG0pOTpaPj0+6NyU6OloWiyXdBNCSdP36dZnN5nQXUq1Wq65fvy4XF5d0FwavXr2qixcvqlq1asZ+wsLCjLCqUKFCcnd3N7ZPW6cFCxaoRYsWKleuXKZ1WrBggR577DEFBATI29tbMTExunjxosLCwuTi4qLk5GTVqVNH58+fN8qbFXVKTU1VdHS03NzcjIuW0q1G+40bN+Tu7n7HOt3v+xQbGyvpVi8I2/tUvHhxYz/e3t6Z1ik+Pl5LlizRhAkT5Ovrm6FON2/e1JIlSzR+/HhJylCnpKQkvfLKKypVqpR69OhhjP3vCJ89e7xPWVWnPn366JtvvlGdOnXk6emp77//Xs8++6zxGb69TgcPHtTOnTv1/fffp9u/h4eHgoKCNHPmTH3wwQeSboXARYoUkZ+fn0ymWxfr27ZtK29vb+3cuVNff/21mjVrlm4/jvo++fr6qkiRIjpw4ICqVKkiJycnrVu3ToGBgcqfP/8d6zRr1iz16tUr3TCnaes0d+5c9erVSwUKFEhXp9q1a+u3334z6vTxxx+rQYMGxu/HET57jnw89e3bV998841q166tfPnyGceNj49PpnU6dOiQdu7cqW+//Tbdfjw9PRUUFKQZM2Zo2LBhkm4dN0WLFpWfn5+6deuW7s7oTZs26bXXXlN4eLiKFCkiV1dXh32ffH19jTv0goKClC9fPp0+fVqBgYEqUaLEHes0e/Zsde7cWQUKFDDqdPXqVZ07d07PPvusihYtKkkaNGiQQkJCFBkZqYIFC6po0aI6ffq0qlWrJqvVqgMHDqho0aIqUaJEltXJhuMp8zrNnTtXw4cPV0BAgHx9ffXuu+/qnXfe0ahRo/6xTvv27dPRo0f1/PPPy9fXV6mpqRo7dqwGDx6sVq1aSZIKFCigwMBAo07Ozs5yd3eXr6/vA/U+Xb9+XRcvXjSGZ8ubN6/xXddsNsvV1fWOdZo1a5aaN2+ucuXKGcv27t2rJk2aqEGDBrpx44bCwsL0+eefy8PDQ1arVSaTKV29rFarDh8+nGFZbv/s3UtD0B5o893b8ZKQkKBBgwZp4cKFMpvN6tq1q8aOHSur1Zrhs1WgQAFjXyaTSYmJiSpbtqx27Nih+Ph4vfDCC1q0aJFxPpWk+fPnq3LlyvL29jZGPbHtIykpyXh+VtbJXsfLe++9p+3bt2vXrl0ymUxq3769fvrpJw0YMCBDna5du5auTjVr1lTnzp2N7z6bNm3S0KFDNXnyZNWtW1fXr1/XyZMnjToNHz5cpUuXltls1uHDh9WzZ0+VK1dO3bt3z9I65Ya/1Vn9PlGnu6tTzOQPhP/O6+mRxs989h78Ov3zjPS4W2l/xw/rZ882pUZYWJicnJxksVjStVO8vb3vWKdZs2bpsccey7SdUr9+fd28edNopxQoUCBDnebPn6/OnTsrT548D8TfiOTkZA0ePFizZ8+WyWRS586d9cUXXxij2KStU+HChdOVJzExUWXKlNHOnTsl3Ro9ZM6cOcbN59KtEUZq166t6OhonT9/XsOGDVN4eLhMJpMaNmyoESNGqGDBgg7z2buX4C/XhH7348CBA1q4cKGee+45lS5dWpcuXdLkyZM1f/58derUKdPndOjQQa1btzYe235RMTExSklJkfR/c0fdvHlTcXFxxra25ba7529fHh0dnenyqKiodGWwLb9+/XqG5ampqRmWS7c+QGmXX7x4UZKMiyJp2YbvSkhIyPCaV65c0dy5c/X111/r+vXrGeoUFxdnrLfVydYAt1qtSk5OTvd7O3funCwWS5bUKW0DPCkpKcPy+Pj4TOv0X94n23seExNjvE9nz541fre2A/32Oi1evFh58uRR7dq106231WnOnDnKkyeP6tSpk6FOVqtVQ4YM0YkTJzR79mxFR0dnaZ3SLs+Oz5493qesqlP//v118eJFY3iojh076vnnn1d0dLQxBEXaORgmTJigRx99VEWKFMnwO5g8ebKGDx+u4OBgWSwWVaxYUZMnTzbq+vPPP2vIkCFKTExUgQIF9MQTT+jNN9/M9HfpiO9Tly5djLkyTCaTPvroI3Xr1s34G3F7nY4dO6adO3fqyy+/zFDO1NRU7dixQ1u3btXYsWON59rqZJtLw8nJSatXr9aMGTM0d+5cYz+O8NmzccTj6cUXX9SFCxdUv359Sf933ERFRWV63Pz000969NFHFRgYeFfHzaRJk4z1ab842XqleXl56ebNm8awlY76PnXu3FmfffaZqlSpooiICOOYSXsuTlun48ePa8eOHfr888/T1cnJyUlBQUGaMmWKXn/9dUm3hhYpXLiw/Pz8lJqaqs6dO2vMmDHG8FPjxo1T9+7dHe6zZ1vuaMdTVFSUzp8/r3LlyhnfI4KCgnT27Fn9/fffypcv3x3rNH36dDVu3Nj4fmdrBJ47d04VKlTQjRs39Oijj2rkyJEqVKiQ4uPjlZKSoo8++khjxoxR0aJF9fzzz6tz584O/z7Z5vexNYRsfwOkW98/bY2+2+tku/HK9l1Xki5cuCCr1aqVK1dq5syZ8vX11dtvv63evXtrzpw5ql69um7evKnPP/9cvXr10u7du7VixQrjJpSsqtPty7PjeHJ2dn5g5hC2eZjbfGPHjjV6DZtMJvXo0UMjRowwho5K+9k6duyY8ZrSraGjWrdune4807t3b40aNSrTOqUdOspqtaZ7flbWyV7Hy8yZMzV8+HDjYsyAAQM0cuRIvfjii/9Yp7Vr1+rQoUNq06aN8R5/9NFHGjhwoCpVqqSYmBiZzWaVKlXKqFPRokUVFxdnlMVkMmnfvn1q2bJlltYpN/ytvn05dcqZOjllWIP74Qht85Hhi++5XsjcnQcdxb3I7LP9sP0tt7VTbOVOK+118tvrlHb6jszaKbNmzZKfn1+6dkraOp07d05r167VypUrs7xOaeXk+zR27Fht2rQp3TCpI0aMMK51pK3Tv31XTUpKUu/evTVy5Mh09bR9F3733XclSdu2bZPVatWAAQP03nvv6fvvv3eYz5509+29XBP6eXl5yWw2Z/igRUVFZbgT1GbOnDlq0KCBMWdQ8eLFlZCQoPHjx6tjx45G76m0XFxc0qWoaaVtJP3TsntdnhX7uH15ZvMs2cIj2zBime0n7TxLt6+3Wq1asmRJhnmYPDw87vhaefPmTbef7Khrdi739vY2hq4LCgqSJO3fvz/dkI+Z7cM2dJ2Tk1Omv8eZM2eqc+fO6ebXsVqtxh+Z3bt3a86cOenuNs6Outr795sdy//LPpydnf91rPq026cdq/72/f/TZOUeHh7GnGV3U87c9Pu92+X3O1dGyZIl73hMZbbe9nfp9rk0bBfTc6KuObFvey3/L8eN1WrN0uPm9u3DwsJ06NChuy7nPy3LDcvvdMxYrdZ0x4xte9sxERwcnGHftvC0evXqslqtqlChQrpJvG2vZZsvNu1r5URd72Z5bipLVi23LUs7ioBtue07xY0bN4y7BW/fR9pGYNov9mkbgb6+vhoyZIheeeUVzZ07V5I0ZMgQhYSEyN3dXVu2bNGLL74oT09PY8iXrKiTPZb/2/fPO+0ns++6tn2l7SH7xhtvqF69eoqLi5Ofn5+mTJmiUaNG6bPPPlNISIi6du2qXbt25arP2J2W32nb3Ig2370tv5u5xzPbj23oqM6dO2faVvm31/2n5//XOtljue2O/AoVKhjLypcvb4yS809tspkzZ6px48YqVKiQrFar4uLijDvy69atq9jYWNWqVUujRo0ytpGkd955R3PnzlVCQoICAwPVpUsXh/rsZdfyz/9anek63BvCi6zhCMcTkNs8qOenu11+N+2UtM9L+3Paa+6ZtVMCAwMlpW+n2NZbrVbNnj1bFStWVIUKFbK8Tv91H/e7/G6+62a2H9t31bTfr+70e7c5c+aMBgwYYPxO27Ztq2+//TbL65Rdy+/1PJFrQj9nZ2cFBwdr//79xjjpFotF+/fvN+6Iu11iYmKGLo2ZNfoeRD4+PhnCqgMHDmSYn+x2trAqbRj1b+vv97UcRdeuXY0eS9KtHhG2uZEyc/z4ce3cuVNffPHFPa8fOnSoduzYoblz597xwgbgCLJysu9/W/9vk4EDjiArj5l/C0//6bWQ/TK7Mcs2r6LtxqzMpA2rbt/XPzUCQ0NDje0bNWqknj17asmSJXcM/RxFVn7X9fb2NsK+29kaTzVr1tSSJUuM5S+++KJq166dBTVBWrT57l7aoMqmQoUK6YKqO5k1a5Yap5lb3OaXX37RL7/8In9/f3Xt2lX9+vXL9Hd5p+c7KltP4bRDN9l+to2Sk5m0N2PYpL0ZY/bs2ZnejCHd6g04evRo7du3T6tWrUr32gAAwHHldDtFuvV9ec6cOXr55ZezphK5QE5/133++ee1bNkyI3RdtGiRmjVrlj2VywVyVWupdevWWrNmjdavX69z585pwoQJSkxMNO6K//bbb9Nd5KpRo4Z+//13bdmyRREREdq7d6/mzJmjGjVqPBQNQVtYFRERoYiIiLsOq2yTS9/L+nt9LUcycOBA1ahRQ40aNVKjRo1Us2bNdD2Wbg8bbD2WgoODM93fndafO3dOU6dO1cmTJ/Xoo48aE8MTZgAA8OBI2wi0ye5GYFoP0nfgrPyu26NHD02aNEkXL15UfHy8vvzyS9WrV88IVvfv36/ExETFx8drxowZ+uOPP/Tcc89lW90eZrT57s6/BVV3Yguqbj9Wnn32WW3cuFF79+7VZ599pokTJ2rChAl3/XxHlvZmDJusuhkjb968euONNxQeHp5u6Cbp1t/jKlWqyNPTM92wqgAAwLHlZDtFkjZu3KjIyEi1b98+O6pjFzn9XbdmzZq6evWqypcvrwoVKig6OvqBClFvl2t6+km3hvKKiYnR3LlzFRUVpaCgIL377rtGj6irV6+mu8vzySeflMlk0uzZsxUZGSkvLy/VqFHDmCD7QXe/w+vda1j1b6/l6HKqx1JgYKAx7jMyYqiXrPNGlab2LgJyCMdN1uCYQVbLylEEbI3ARo0aycfHJ10jMDo6Wjt37lRYWJhcXV0VHh6u6dOnp5tn05Fl5Xfdl19+WVFRUcbdnGFhYfrmm2+M9RMnTtTKlSuVkpKi0NBQzZ0794Hp5ZTb0Oa7O1nZa1iSKlWqZPxco0YNDRgwQPPnz1e/fv3u6vmOzB535KeVnJysU6dO3X8FAABArpKT7RTp1neSVq1aPRAj7tnk5Hddi8Wi7t27q02bNsZ0TJ9//rm6d++uZcuWZWm9cguTlYGjJUlXrlxRcnKyvYsBPLQIL7LO26f327sID4SUdgPtXYR/xXGTNThmsoYjHDM5JTk5WcOGDdOiRYsk3WoEDh8+XM7Ozpk2Aj/88EPt3r1bv/zyS4Z9paam6sMPP9S8efMk3WoEfvjhh/L399e1a9fUp08fY1LzYsWK6bnnnrvjqA548Lm4uNzVxO4PK0dr84WGhmrEiBFq1aqVJGnZsmUaMWKEduzYccfntG/fXrVq1dK77777j/ueNm2a5s6dm+FCx90+39GMHTtWq1ev1vTp0yVJvXr1UsuWLTOdM0a6dTNGo0aNtHHjxgwX6L7++mstW7ZM06ZNk4+Pj4YMGaLLly9r9uzZOnfunP766y81atRI7u7u+vPPP/X888/rmWee0auvvprt9czt+O6aNfjumjUc4bsrx0zW4bjJGo5w3MBx5NR33cjISFWqVEk7duxQkSJFJEnnz59XrVq1tG/fPiN0dAR3297LVT39AAAAAEeXlaMIODk5adiwYRo2bFiGdfnz539g70wEkLW9hpcsWaLGjRvL09NTe/fu1Xfffae+ffve9fMdXU7ekT9hwgS9+eabslgsKlSokJ5++ukHevgoAACA+5FT33X9/PwUFBSkqVOnGjd8TZ06VYULF3aowO9eEPplE+7GyRrciZM1uBMHAAAAcCxZGVRNmTJFb7/9tlJSUhQQEKA+ffrohRdeSLfNv00H4chy6maMwMBALVy48L8VFgAA4CGQk991J0+erOHDh6tGjRqyWq2qUKGCpkyZkn2VszOG9/z/snqoF0K/rEHolzUcIfTjmMk6HDdZg+Pm4cExkzUc4ZhB1nFe/JW9i/BAyOrjhuE9/5mjDe8JPGj47po1+O6aNRzhuyvHTNbhuMkaHDcPjzeqNLV3EZAJhvcEAAAA0qABmHXetncBADwwuIkgazjChVgAAABkP7O9CwAAAAAAAAAAAADgv6GnHwAAAAAA94Cew1mHnsMAAAC5CyMxZA17jcRATz8AAAAAAAAAAADAwRH6AQAAAAAAAAAAAA6O0A8AAAAAAAAAAABwcIR+AAAAAAAAAAAAgIMj9AMAAAAAAAAAAAAcHKEfAAAAAAAAAAAA4OAI/QAAAAAAAAAAAAAHR+gHAAAAAAAAAAAAODhCPwAAAAAAAAAAAMDBEfoBAAAAAAAAAAAADo7QDwAAAAAAAAAAAHBwhH4AAAAAAAAAAACAgyP0AwAAAAAAAAAAABwcoR8AAAAAAAAAAADg4Aj9AAAAAAAAAAAAAAdH6AcAAAAAAAAAAAA4OEI/AAAAAAAAAAAAwMER+gEAAAAAAAAAAAAOjtAPAAAAAAAAAAAAcHCEfgAAAAAAAAAAAICDI/QDAAAAAAAAAAAAHByhHwAAAAAAAAAAAODgCP0AAAAAAAAAAAAAB0foBwAAAAAAAAAAADg4Qj8AAAAAAAAAAADAwRH6AQAAAAAAAAAAAA6O0A8AAAAAAAAAAABwcIR+AAAAAAAAAAAAgIMj9AMAAAAAAAAAAAAcHKEfAAAAAAAAAAAA4OAI/QAAAAAAAAAAAAAHR+gHAAAAAAAAAAAAODhCPwAAAAAAAAAAAMDB3Vfod+zYsawuBwAAAAAAAAAAAID75Hw/T3rvvfcUEBCg+vXrq379+ipUqFBWlwsAAAAAAAAAAADAXbqv0O+VV17Rpk2b9Msvv2jevHkKCQlR/fr1FRYWJk9Pz6wuIwAAAAAAAAAAAIB/cF+hX7169VSvXj3FxMQoPDxcmzdv1sSJEzV16lRVqVJFDRo0UGhoqJyd72v3AAAAAAAAAAAAAO7Bf0rlvLy81LJlS7Vs2VKXLl3S5s2btXnzZn355Zfy8PBQ7dq11bBhQ5UtW/au97ly5UotXbpUUVFRKlGihJ555hmVKlXqjtvfvHlTs2bN0vbt2xUbG6uCBQuqT58+ql69+n+pGgAAAAAgG9DmAwAAAIDskWVd8VxdXeXm5iYXFxdJkslk0s6dO7V27VoFBwdrwIABCgwM/Md9hIeHa9q0aXr++edVunRpLV++XKNHj9ZXX30lb2/vDNunpKToww8/lJeXl15//XX5+fnp6tWr8vDwyKpqAQAAAACyCG0+AAAAAMg+/yn0i4+P19atW7V582YdPHhQJpNJVatWVadOnVSjRg2ZzWZt375d06ZN0/fff68xY8b84/6WLVumxx57TI0bN5YkPf/889q1a5fWrVun9u3bZ9h+7dq1io2N1ahRo4yhRP39/f9LlQAAAAAA2YQ2HwAAAABkn/sK/Xbs2KFNmzZp165dSk5O1iOPPKI+ffqobt26ypcvX7pta9eurdjYWE2cOPEf95mSkqKTJ0+ma+iZzWZVqlRJR48ezfQ5f/75p0qXLq2JEydq586d8vLyUt26ddW+fXuZzeb7qRoAAAAAIBvQ5gMAAACA7HVfod9nn32m/Pnzq1WrVmrYsKGKFCnyj9sHBQWpfv36/7hNTEyMLBaLfHx80i338fHRhQsXMn3O5cuXdeXKFdWrV0/vvPOOLl26pAkTJig1NVWdO3fO9DnJyclKTk42HptMJrm7uxs/S5LVak233uZelwO5xe2f7ds/p/eyPKuOD44b5HZZedzcaTnHDR4k9/IZttfxBOQ2WXFOcKTzAW0+IPvQ5gPuTW76jsp3VzgK2nzAvbNHm+++Qr8PPvhAFSpUuOvtS5Uq9Y8Ts98vq9UqLy8vvfDCCzKbzQoODlZkZKSWLFlyxwbgwoULNX/+fONxyZIl9cknn8jLy8v4JSYmJurmzZvKmzev3NzcjG3j4+MVHx+vfPnyGXMXSrcmlk9MTJS3t7ecnJyyvJ7Af+Xr6ytJio6OlsViMR7bXL9+XWazOd08KlarVdevX5eLi0u6HrypqamKjo6Wm5ub8ubNayxPTk7WjRs35O7ublxUke79eAJyC9txcuPGDSUnJ8vHxyfdSTY3HU9AbpD2WLjTdyN7H09AbpP2M3+vbY3MjqcH8aI6bT7g7tDmA+5N2mPE3t9R73Q8AbkNbT7g3vzXtsbtx9PdtvfuK/S7l8Dvbnl5eclsNisqKird8qioqAx3gtr4+PjI2dk53bAuRYsWVVRUlFJSUow5H9Lq0KGDWrdubTy2/aJiYmKUkpIi6f8S1Js3byouLs7Y1rb8xo0bmSau0dHRD2RDG47v+vXrkv7vs2p7bGO1WpWampphuXTrxJl2edoLJUlJSRmWx8fHKyEhIcPyuz2egNzi9uPm9vNTbjqegNwgs8/27d+N7H08AblNZp/hu21rZHY8OTs7q2DBgtlZ5P+ENh+QfWjzAfcms898bmvzAbkNbT7g3vzXtsbtx9PdtvfuaxKE2bNna/DgwXdc/9Zbb2nevHn3tE9nZ2cFBwdr//79xjKLxaL9+/crJCQk0+eUKVNGly5dksViMZZdvHhRvr6+mTb+JMnFxUUeHh7Gv7R3AFit1gzdgW3L7nU5kJvc/rlM+/m91+WZ7TcrlgO5TVYeN9l1PAG5yb18hu11PAG5TVacExzp8/4gtfmA3CY3fUfluIEjyE3fUR3pXI6HG20+4N5lZZvvbt1X6Ld161ZVq1btjuurVaum8PDwe95v69attWbNGq1fv17nzp3ThAkTlJiYqEaNGkmSvv32W82cOdPYvnnz5oqNjdWUKVN04cIF7dq1SwsXLlSLFi3u+bUBAAAAANmLNh8AAAAAZJ/7Gt7z6tWrKlSo0B3X+/v76+rVq/e837CwMMXExGju3LmKiopSUFCQ3n33XWOol6tXr6br3ligQAENHTpUU6dO1eDBg+Xn56fHH39c7du3v+fXBgAAAABkL9p8AAAAAJB97iv0y5Mnj65cuXLH9REREfc9SXPLli3VsmXLTNcNHz48w7KQkBCNHj36vl4LAAAAAJCzaPMBAAAAQPa4r9CvfPnyWr16tZo3by4/P790665evarVq1erQoUKWVJAAAAAAED2u5/RWqRbvfEAAAAAAPZ3X6Fft27d9M477+j1119XkyZNFBgYKEk6e/as1q1bJ6vVqq5du2ZpQQEAAAAA2WfAgAH39bw5c+ZkcUkAAAAAAPfjvkK/IkWKaOTIkZo0aZKWL1+ebl25cuX09NNPG0EgAAAAACD369+/v72LAAAAAAD4D+4r9JOkEiVKaMSIEYqJiVFERIQkyd/fX15eXllWOAAAAABAzmjUqJG9iwAAAAAA+A/uO/Sz8fLyIugDAAAAAAAAAAAA7Og/hX7Xrl3TqVOnFBcXJ6vVmmF9w4YN/8vuAQAAAAA5ZP78+ff1vE6dOmVxSQAAAID/x959h0dR9W0cv3fTewgQQg8ttNBDR+lVeokgFsT2YPexi4ioqIgdFeXBLh3pXXoJJAREqhQJIAQIENLrZvf9gzcrgYBJCOyG/X6uy0t3Znb2t3HPztx7Zs4BUBRF6vTLysrSl19+qcjIyHw7+3LR6QcAAAAAJcOcOXOK9Dw6/QAAAADAPhSp02/GjBmKiorS0KFDFRISonHjxumJJ56Qv7+/li1bposXL+qJJ54o7loBAAAAADfJrFmzbF0CAAAAAOAGGIvypG3btqlDhw7q37+/KleuLEkKCAhQw4YN9corr8jT01MrV64s1kIBAAAAAAAAAAAA5K9InX5JSUmqWbOmJMnV1VWSlJGRYV3fsmVLRUVFFUN5AAAAAAAAAAAAAP5NkYb39PPzU3JysiTJzc1NXl5eio2Nta5PT09XVlZW8VQIAAAAALCJ48ePa/ny5YqJiVFaWtpVc7obDAZNmjTJRtUBAAAAAC5XpE6/mjVr6s8//7Q+btasmRYvXqxSpUrJYrFo6dKlCgkJKbYiAQAAAAC31r59+/Tuu+/Ky8tL1atX17FjxxQaGqqsrCwdOnRIlStXVvXq1W1dJgAAAADg/xWp069Xr17aunWrsrOz5eLiorvvvluHDh3SF198IUkqV66cHnzwwWItFAAAAABw68yePVuBgYEaP368TCaTHnnkEQ0YMEChoaE6fPiw3n33XQ0fPtzWZQIAAAAA/l+ROv3q1KmjOnXqWB+XKVNGn3zyiU6cOCGj0aiKFSvKycmp2IoEAAAAANxaR48eVXh4uDw9PZWSkiJJMpvNkqRatWqpa9eumjVrlpo0aWLLMgEAAAAA/89Y2CdkZmbqww8/1KZNm/LuyGhUcHCwqlSpQocfAAAAAJRwTk5O8vDwkCR5eXnJyclJiYmJ1vWBgYE6efKkrcoDAAAAAFyh0J1+bm5u2rNnjzIzM29GPQAAAAAAOxAUFKTTp09LkgwGgypWrKioqCjr+p07d8rf399G1QEAAAAArlToTj/p0vCehw4dKu5aAAAAAAB2okmTJtqyZYtycnIkSXfddZeioqL09NNP6+mnn9aOHTvUpUsXG1cJAAAAAMhVpDn9Ro4cqfHjx2vmzJnq2rWrSpcuXdx1AQAAAABsaNCgQerVq5eMxkvXinbo0EFGo1GRkZEyGo0aOHCgOnToYNsiAQAAAABWRer0e/HFF5WTk6P58+dr/vz5cnJykouLy1Xb/fjjjzdcIAAAAADg1nN2dpaPj0+eZXfeeafuvPNOG1UEAAAAALieInX6tWzZUgaDobhrAQAAAADYiZSUFF24cEFVq1bNd/2JEycUEBAgb2/vW1wZAAAAACA/Rer0e+KJJ4q7DgAAAACAHfnhhx90+vRpjR8/Pt/1U6ZMUcWKFTVq1KhbXBkAAAAAID9GWxcAAAAAALA/+/btU7Nmza65vlmzZtqzZ88trAgAAAAAcD1FutNvw4YNBdquffv2Rdk9AAAAAMDGkpKS5Ovre831Pj4+SkxMvIUVAQAAAACup0idfl999VWBtqPTDwAAAABKJn9/f8XExFxz/dGjR6/bKQgAAAAAuLWK1On3xRdfXLXMbDbr3LlzWrlypc6fP8+8fwAAAABQgjVv3lwrV65UkyZNFBYWlmfd9u3btW7dOnXr1s1G1QEAAAAArlSkTr+yZcvmu7xcuXIKDQ3Ve++9pxUrVujhhx++oeIAAAAAALYRHh6uPXv2aOLEiQoODlblypUlSX///beOHTumSpUqKTw83MZVAgAAAAByGW/GTps1a6atW7fejF0DAAAAAG4BT09PjR8/XoMGDZLJZNK2bdu0bds2mUwmDRo0SOPHj5eXl5etywQAAAAA/L8i3en3b86cOaPs7OybsWsAAAAAwC3i7u6u8PBw7ugDAAAAgBKgSJ1++/fvz3d5Wlqa9u/fr+XLl6t58+Y3VBgAAAAAwD5cvHhRiYmJCgoKkru7u63LAQAAAADko0idfuPGjbvmOqPRqFatWmnkyJFFLgoAAAAAYHvbt2/XtGnTdPr0aUnSmDFjFBoaqqSkJL3zzjsaPHiwWrRoYeMqAQAAAABSETv9xo4dm+9yb29vlSlTRp6enjdUFAAAAADAtqKjo/Xhhx8qJCRE7dq105w5c6zrfH19FRAQoPXr19PpBwAAAAB2okidfvXq1SvuOgAAAAAAduTXX39VvXr1NHbsWCUnJ+fp9JOkkJAQ/fbbbzaqDgAAAABwJWNRnhQXF6fo6Ohrro+OjlZcXFyRiwIAAAAA2NaJEyfUunXra6738/NTUlLSLawIAAAAAHA9Rer0++mnn7R8+fJrrl+5cqWmT59e5KIAAAAAALbl5uamjIyMa64/e/asvL29b2FFAAAAAIDrKVKn3+HDh9WwYcNrrm/QoIEOHDhQ5KIAAAAAALZVv359bdiwQTk5OVetS0hI0Jo1a9SoUSMbVAYAAAAAyE+ROv1SUlLk4eFxzfXu7u5KSUkpclEAAAAAANsaNmyY4uPj9eqrr1rn7tu1a5dmzpyp559/XhaLRYMHD7ZxlQAAAACAXEXq9CtTpoz+/PPPa64/cOCAAgICilwUAAAAAMC2KlSooLfeeks+Pj6aNWuWJGnx4sWaP3++qlSporfffltly5a1cZUAAAAAgFzORXlS27Zt9euvv6pmzZrq0aOHjMZLfYdms1krVqxQRESEBg4cWKyFAgAAAABurcqVK2vMmDFKSUnRmTNnZLFYVK5cOXl6emr9+vX64IMP9Nlnn9m6TAAAAACAitjpN2DAAB08eFA//vij5s+frwoVKkiSYmNjlZSUpHr16tHpBwAAAAAlkMlkUnR0tM6cOSNvb281bdpUAQEBqlmzpjIzM7VixQotW7ZMCQkJKleunK3LBQAAAAD8vyJ1+rm4uGj06NHasGGDIiMjdfbsWUlSjRo11KpVK915553Wu/8AAAAAACVDfHy8xo0bpzNnzliXubi46OWXX5azs7M+//xzxcfHq2bNmnrwwQfVsmVLG1YLAAAAALhckTr9JMloNKpjx47q2LFjcdYDAAAAALCRmTNnKi4uTv369VOdOnUUFxenX3/9VVOmTFFSUpIqV66sp556SvXq1bN1qQAAAACAKxSp0y8lJUUXLlxQ1apV811/4sQJBQQEyNvb+4aKAwAAAADcOrt371aHDh10zz33WJf5+/vrk08+UZMmTfTSSy8xqgsAAAAA2KkipbUffvhBU6ZMueb6KVOm6Oeffy5yUQAAAACAWy8xMVG1atXKsywkJESS1KlTJzr8AAAAAMCOFSmx7du3T82aNbvm+mbNmmnPnj1FLgoAAAAAcOuZzWa5urrmWebi4iJJ8vT0tEVJAAAAAIACKtLwnklJSfL19b3meh8fHyUmJha5qBUrVmjx4sVKSEhQ1apVNXLkSNWsWfNfn7dlyxZ99tlnCgsL00svvVTk1wcAAAAARxUXFzDUX2sAAQAASURBVKejR49aH6elpUmSTp8+nW/HX/Xq1Qu1f/IeAAAAANwcRer08/f3V0xMzDXXHz169LqdgtcTERGhn376SY888ohq1aqlpUuXavz48fr000/l5+d3zefFxcXp559/Vt26dYv0ugAAAAAAadasWZo1a9ZVy6dOnXrN7QuKvAcAAAAAN0+ROv2aN2+ulStXqkmTJgoLC8uzbvv27Vq3bp26detWpIKWLFmizp07q2PHjpKkRx55RDt37tS6devUv3//fJ9jNps1adIkhYeH68CBA0pNTS3SawMAAACAIxs1atRN3T95DwAAAABuniJ1+oWHh2vPnj2aOHGigoODVblyZUnS33//rWPHjqlSpUoKDw8v9H5NJpOOHj2aJ+wZjUY1aNBAhw4duubz5s6dK19fX3Xq1EkHDhy47mtkZ2crOzvb+thgMMjDw8P635JksVjyrM9V2OWAvbjys33l57Qwy4urfdBuYO+Ks91cazntBreTwnyGbdWeAHtTHMeE4j4edOjQoVj3d7lbkfckMh8cE5kPKBx7Okfl3BUlBZkPKDxbZL4idfp5enpq/PjxWrRokSIjI7Vt2zZJUrly5TRo0CD169cvT8gqqKSkJJnNZvn7++dZ7u/vr9jY2Hyf8+eff2rt2rX64IMPCvQa8+fP19y5c62Pq1WrpgkTJsjX19f6R8zMzFRqaqq8vLzk5uZm3TY9PV3p6eny8fGxTmYvSampqcrMzJSfn5+cnJwK+naBW6ZUqVKSpMTERJnNZuvjXBcvXpTRaMwzpJLFYtHFixfl4uIiHx8f6/KcnBwlJibKzc1NXl5e1uXZ2dlKTk6Wh4eH9UcVqfDtCbAXue0kOTlZ2dnZ8vf3z3OQtaf2BNiDy9vCtc6NbN2eAHtz+We+sFkjv/Zk7z+q34q8J5H54JjIfEDhXN5GbH2Oeq32BNgbMh9QODeaNa5sTwXNe0Xq9JMkd3d3hYeH57mjLysrSzt27NBnn32mP/74Q9OmTSvq7gskPT1dkyZN0mOPPVbgOQQHDBig3r17Wx/n/qGSkpJkMpkk/dODmpqaap20/vLlycnJ+fa4JiYm2n3QhmO6ePGipH8+q7mPc1ksFuXk5Fy1XLp04Lx8+eU/lGRlZV21PD09XRkZGVctL2h7AuzFle0mISEhz3p7ak+APcjvs33luZGt2xNgb/L7DBc0a+TXnpydnVW2bNmbWfItVZS8J5H54JjIfEDh5PeZt7fMB9gbMh9QODeaNa5sTwXNe0Xu9Lv8hffs2aPNmzcrKipK6enp8vX1Vdu2bQu9L19fXxmNxqu+FBISEq66GlSSzp49q3PnzmnChAl56pGkoUOH6tNPP1VQUFCe57i4uFzzCrP8bgW+1u3BhV0O2NKVn8vi+lzf7OWALdFugMIpzGeV9gFcUhyf7ZL0eb8VeU8i88Exce4KFI49naPSPlBSkPmAwrNF5ityp9/Ro0e1adMmRUREWENb27Zt1aNHD9WqVatIV3E5OzurevXq2rt3r1q0aCHp0qTte/fuVY8ePa7avkKFCvrwww/zLJs5c6YyMjI0YsQIlSlTpvBvDAAAAABQ7Mh7AAAAAHBzFarT7+zZs9q0aZM2b96s06dPKyAgQO3atVPNmjX16aefqmXLlgoJCbmhgnr37q0vv/xS1atXV82aNbVs2TJlZmZaJ5T/4osvFBAQoHvuuUeurq6qUqVKnufnjud75XIAAAAAgG2R9wAAAADg5ilwp9/o0aN15MgR+fr6qmXLlvrPf/6jOnXqSJLOnDlTbAW1adNGSUlJmj17thISEhQcHKzXXnvNOtzL+fPnGQseAAAAAEog8h4AAAAA3DwF7vQ7cuSIAgMDdf/996tp06ZycnK6aUX16NEj3+FdJOnNN9+87nOfeOKJm1ARAAAAAKA4kPcAAAAA4OYocKffyJEjtXnzZn344Yfy9vZWy5Yt1aZNG9WvX/9m1gcAAAAAAAAAAADgXxS406979+7q3r274uLirPP6rVmzRv7+/taOP4ZhAQAAAAAAAAAAAG69Anf65QoMDNSgQYM0aNAgHT16VJs2bVJERIQkaerUqfr9998VFhamBg0ayNXVtdgLBgAAAAAAAAAAAJBXoTv9Lle9enVVr15d9913n/bu3WvtAFy7dq1cXV31888/F1edAAAAAAAAAAAAAK7hhjr9chmNRjVs2FANGzbUI488oujoaG3evLk4dg0AAAAAAAAAAADgXxRLp9/lXF1d1aZNG7Vp06a4dw0AAAAAAAAAAAAgH0ZbFwAAAAAAAAAAAADgxtDpBwAAAAAAAAAAAJRwdPoBAAAAAAAAAAAAJRydfgAAAAAAAAAAAEAJR6cfAAAAAAAAAAAAUMLR6QcAAAAAAAAAAACUcHT6AQAAAAAAAAAAACUcnX4AAAAAAAAAAABACUenHwAAAAAAAAAAAFDC0ekHAAAAAAAAAAAAlHB0+gEAAAAAAAAAAAAlHJ1+AAAAAAAAAAAAQAlHpx8AAAAAAAAAAABQwtHpBwAAAAAAAAAAAJRwdPoBAAAAAAAAAAAAJRydfgAAAAAAAAAAAEAJR6cfAAAAAAAAAAAAUMLR6QcAAAAAAAAAAACUcHT6AQAAAAAAAAAAACUcnX4AAAAAAAAAAABACUenHwAAAAAAAAAAAFDC0ekHAAAAAAAAAAAAlHDOti6gJDCZTEpLSyvUc7qVqXGTqnEs8V7l8jw2mLLkdXyXXDOSbVQRAAAAAAAAAACA/aHT71+YTCalpqbKx8dHRmPBb4wsy1+2WPh6eeZ5bLZYlOLuLe+Dm+n4AwAAAAAAAAAA+H8M7/kv0tLSCt3hh5vHaDDI289PqVUb27oUAAAAAAAAAAAAu0FPVgHQ4WdfjAaDLM6uti4DAAAAAAAAAADAbtCbBQAAAAAAAAAAAJRwdPoBAAAAAAAAAAAAJRydfg7im8+/0LA+A27qayz6db7aN21xU18DAAAAAAAAAAAAV6PTr4geeOABDR8+PN91kZGRalarrg7/ebDI+4+OjFKzWnWVnJRU5H1c7r6HHtTkn74rln1JUu8OnTX9+x/zLOt2V0/N/215sb0GAAAAAAAAAAAACoZOvyIaNmyYNm7cqNjY2KvWzZo1S/UahKpWndo2qCwvi8Uik8kkTy8v+ZcqdVNfy93dXQGlS9/U1wAAAAAAAAAAAMDV6PQroi5duqh06dKaPXt2nuWpqalasmSJ+g0epN+jd+ihYfeqTWhj9bqjoz54a7zS09Ks22ZlZunzDz5Urzs6qlW9hurXubsWzJmr2JOn9Ni9D0iSOjRrqWa16mrsS69an/PBW+PVpWVbta7fSCOHDte+3Xus+8y9Q3DLho0a3n+QWtVvpF07dl41vGd0ZJTuHxSutg2bqn3TFhp59z06feqUJOnv4yf03/88oa6t2qldo2a6b+AQRW6JsD730eH36/SpWH307vtqVquumtWqKyn/4T3nTJuhvp26qWW9hhrYraeWLliYZ32zWnU1f/YcPf/4k2rToIn6d+muDWvWFvn/CwAAAAAAAAAAgCOi06+InJ2dNXjwYM2ZM0cWi8W6fMmSJcrJyVHDJo311EOPqnO3rpq5ZIHe++xj7dqxQxPGvWPd9o2XXtaKJcv0wpjXNHfFUo1++015enqqXPkgTfziM0nSvFXLtDJio14Y85ok6bMPPtTaVas07oP3NG3Br6pcpYqeHPmIEhMS8tQ36cOP9dQL/9Xc5UtUq3ZInnUmk0nPj3pSTZs318zFC/TD7BkacHe4ZDBIktLT0tS2/Z2a/NN3mr7wV7W+o52ee+xxnf7/uxonfvm5ygUF6T/PPKWVERu1MmJjvn+jtat+04fj39O9D43Q7KULNXDo3Rr3ymht3xaZZ7v/TfpKXXv21KwlC9S2fXu9/vyLV70fAAAAAAAAAAAAXBudfjdg6NChOnbsmLZu3WpdNmvWLPXq1Uszf/5FPfv01j0PPqAqwcFq1LSJXhwzWksXLFRmZqaOx8Tot2UrNPa9d9SpW1dVqlJZLdq0Vre7esnJyUm+/v6SpIDSpVWmbFn5+PgoPS1Nc2fM1DMvvai27e9U9Vo19fr4t+Tm7qaFc37NU9t/nnlKrdq1VeWqVeT3//vKlZqSopTkZN3Rsb0qV62iajVrqM/A/ipfoYIkKaRuHQ0adrdqhoSoSnCwHn/uGVWqUlkb16yTJPn5+8voZJSXl5fKlC2rMmXL5vv3+eXb79VnYH+FD79HVatV070jR6hjt676eWreuQV7D+yvHn3uUuWqVfXk888qLTUtz92LAAAAAAAAAAAAuD5nWxdQktWsWVNhYWGaOXOm2rRpo5iYGEVGRmrOnDka+9Y4Hf7zoJYvXmLd3mKxyGw2K/bvkzp86JCcnJzUtEXzAr/eyRN/y5SdrcbNmliXubi4qH7DBor562iebeuFhl5zP37+/uozcICeHPmIWrZtoxZtWqtrrx4qGxgoSUpLTdU3k77U5nUbdP7cOeXk5CgzI0Nn8pm/8Hpi/jp66Q7CyzRq2kQzf/w5z7LL5z708PSUl7e34i9cKNRrAQAAAAAAAAAAODI6/W7QsGHD9Prrr+vdd9/VrFmzFBwcrNatWystNU0Dh96tYQ/ce9VzgsqX19/HT9zUujw8Pa67/s0J72ro/fcqYtNm/bZsuSZ/+pm++v5bNWjSWJ++P1HbtkTo2VdeVOWqVeXu7qaXnnxW2dnZN6VWZ+e8H0ODwSCz2XKNrQEAAAAAAAAAAHAlhve8QX369JHRaNT8+fM1d+5c3X333TIYDKpTv55i/jqiylWrXvWPi6uratYOkdls1s6o7fnu18XFRZKUk5NjXVapSmW5uLho147frcuys7O1f/deVatZo9C116lfTyP/86i+nz1DNWrV0vLFSyVJu3buVJ+B/dWpW1fVqh2i0mXKKPbUqavqyzGbr7v/ajWq64+dO/Ms+2Pn70WqFQAAAAAAAAAAANdml3f6rVixQosXL1ZCQoKqVq2qkSNHqmbNmvluu3r1am3cuFF///23JKl69eoaNmzYNbcvbl5eXurbt6/ef/99JScnKzz80nCWIx59WA8MGaoJ495W/yGD5eHpoaNH/lLklgi9PHaMKlSqqN4D+mvcq6/rxTGvKaROHZ2OjVX8hQvq1qunyleoIIPBoE3rNqhd+zvl5u4mTy8vDb5nqD77YKL8/P0UVL68fvzft8rIyFD/IYMKXPOpv09q3qzZat+5o8oGBurY0WM6cfy47urfT5JUpWpVrVu1Wnd26iiDwaDJn34uyxUdfOUrVtTv26PV/a5ecnF1VamAUle9zn0Pj9Qrz/xXtevWVcu2rbVx7XqtW/Wbvvrxu6u2BQAAAOAYSlLeAwAAAICSxO7u9IuIiNBPP/2kwYMHa8KECapatarGjx+vxMTEfLffv3+/2rZtq7Fjx+qdd95R6dKl9c477yg+Pv6W1Tx06FAlJCSoffv2CgoKknRpnrr/TftJx2OO6eF77tU9/Qbp688mWefNk6RX3xqrLj266f0339Kg7r30zugxykhLlyQFBpXTY08/qUkffqSurdtpwrh3JElPvfi8OnXrpjEvvKzh/Qfp7xMn9MV3/5Ovn1+B63X3cNexo0f14pPPaEDXnho/5g2FD79Hg4bdLUn672uvyMfPVw/efY+efexxtb6jrerUr5dnH6OeeUqxp06pX+du6tKyTb6v07FrF70w+lX9/O33GtKrr+bNnKWx749XWMsWBf/jAgAAALhtlMS8BwAAAAAlhcFisdjV5GmvvfaaatSooYceekiSZDabNWrUKPXs2VP9+/f/1+ebzWY9+OCDGjlypNq3b1/g1z137ly+c9YlJSXJ19e3wPvJdSYtqdDPwdWCstLzXZ50Pk4B+9bc4mpKLlO/Z21dwr/66I/Vti7htvHysb22LuG2QLtxHLSZ4kGbcSy0m+JR3O3GxcVFZcuWLdZ9Fjdb5T3p2pmvKPg+KT58nxQPjsOOgzZTPGgzjoV2UzxoN46DNlM8bJX37OpOP5PJpKNHj6pBgwbWZUajUQ0aNNChQ4cKtI/MzEyZTCZ5e3vfrDIBAAAAAIVE3gMAAACAm8uu5vRLSkqS2WyWv79/nuX+/v6KjY0t0D6mTZumgICAPEHyctnZ2Xmu7jQYDPLw8LD+tyTZ2c2PwA278rOd+zhXYZZf3j5uxnLAXhRnu7nWctoNbieF+Qzbqj0B9qY4jgkl6XhwK/KeVPjMxzEYtwMyH1A49nSOyrkrSgoyH1B4tsh8dtXpd6MWLFigLVu26M0335Srq2u+28yfP19z5861Pq5WrZomTJggX19f6x8xMzNTqamp8vLyUlpampycnCRdGkrGYrHIaDTm+UPnLs/dDrA3pUqVkiQlJibKbDZbH+e6ePGijEaj/C6bG9JisejixYtycXGRj4+PdXlOTo4SExPl5uYmLy8v6/Ls7GwlJyfLw8PD+qOKlLc9ubm5WZenp6crPT1dPj4+cnFxKfb3DNyo3HaSnJys7Oxs+fv75/nut6f2BNiDy9tCamqqMjMz5efnl+f8yNbtCbA3l3/mr3VuVJj2dLv/qF6QvCcVPvMV5Bz1Wv8fAHtB5gMK5/I2Yutz1Gu1J8DekPmAwrnRrHFleypo3rOrTj9fX18ZjUYlJCTkWZ6QkHDV1aBXWrRokRYsWKAxY8aoatWq19xuwIAB6t27t/Vx7h8qKSlJJpNJ0j89qKmpqTKZTMrJycmzD7PZnO++r9wOsBcXL16U9M9nO/dxLovFopycnKuWS5cOnJcvv/yHkqysrKuWp6enKyMj46rlqampSktLu2p5cnLybf8DFUqmK9vNlccme2pPgD3I77OdmJiY71VqtmpPgL3J7zN85blRYdqTs7OzXc/pdyvynlT4zFeQc9Rr/X8A7AWZDyic/D7z9pb5AHtD5gMK50azxpXtqaB5z646/ZydnVW9enXt3btXLVq0kHSpg23v3r3q0aPHNZ+3cOFCzZs3T6NHj1aNGjWu+xouLi7XvMKMW4Fxu7rys32tz7q9LQdsiXYDFE5hPqu0D+CS4vhsl6TP+63Ie1LhMx/fMbgdcO4KFI49naPSPlBSkPmAwrNF5jMWautboHfv3lqzZo3Wr1+vkydPaurUqcrMzFSHDh0kSV988YWmT59u3X7BggWaNWuWRo0apcDAQCUkJCghISHPVTIAAAAAANsj7wEAAADAzWNXd/pJUps2bZSUlKTZs2crISFBwcHBeu2116zDvZw/fz7PLY6//fabTCaTPv744zz7GTx4sMLDw29l6QAAAACA6yDvAQAAAMDNY3edfpLUo0ePaw7v8uabb+Z5/OWXX96CigAAAAAAxYG8BwAAAAA3h90N7wkAAAAAAAAAAACgcOj0AwAAAAAAAAAAAEo4uxzesyT66I/Vt+y1htdqUeBtm9Wqe931jz71hPoMHKA+Hbtcta5n3z5656MP8n1edGSUHrv3Aa3fESkfX1/rY0kyGAzy9PJSpcqV1bJta93z4AMqGxhofe43n3+hKZOuHqbnqx++Vcu2bQr83gAAAAAAAAAAAHAJnX63uZURG63/vWrpcn392STNW7XMuszT01MJFxMkSZN//E7Va9W0rnNzdy/0681btUxe3t5KTUnRn/v268f/fauFc3/VN7/8pFq1Q6zb1ahVU1/9+F2e5/r5+RX69QAAAAAAAAAAAECn322vTNmy1v/29vGRwWDIs0yStdPPz9//qnWFFVC6tHx8fVWmbFlVrVZN7bt01j39Buq9seP03cxp1u2cnJxv+LUAAAAAAAAAAABwCXP64aZyd3fX4KF3648dOxV/4YKtywEAAAAAAAAAALgtcacfrB68+x4Zjf/0A0+d/rPq1K93w/sNrlFdkhR78pQCSpeWJB05dEjtGjWzblO9Zg399OvsG34tAAAAAAAAAAAAR0SnH6ze//RjVatZ3fq4XFB5SdKQnr11Ova0JKlJWDNN+nZKofZrsVgkSQaDwbqsarVq+uSbL62PXVxdi1w3AAAAAAAAAACAo6PTD1blygepctWqVy3/fOo3MplMkiQ3N/dC7zfmr6OSpAoVK1qXubi45PtaAAAAAAAAAAAAKDw6/fCvyl/WWVdYGRkZmjdrtpo2D1Op0gHFWBUAAAAAAAAAAABy0emHYhV/4YIyMzOVlpqqA3v36cf/fauEixf14Ref27o0AAAAAAAAAACA2xadfihWA7v1ksFgkKenpypWrqxW7dpo+MgRKlO2rK1LAwAAAAAAAAAAuG3R6VdMnm/UJc/jM2lJNqrk2voOGqC+gwZctbxCpYracfhAofYV1rJFnudc+fh6Hnv6ST329JOFej0AAAAAAAAAAABcm9HWBQAAAAAAAAAAAAC4MXT6AQAAAAAAAAAAACUcnX4AAAAAAAAAAABACUenHwAAAAAAAAAAAFDC0ekHAAAAAAAAAAAAlHB0+gEAAAAAAAAAAAAlHJ1+AAAAAAAAAAAAQAlHpx8AAAAAAAAAAABQwtHpBwAAAAAAAAAAAJRwdPoBAAAAAAAAAAAAJZyzrQu4XTgv/DTP40o38bVOdh1Z6OeMfelVLZm/wPrYz99P9Ro00DMvvaBadWr/6/MjNm7SUw89qpURG1WmbFnr8m5t7pCrq6uWrF9jXRZ78pT6dOyiyT9+pxZtWhe6VgAAAAAAAAAAABQOd/o5kDZ33qGVERu1MmKjJv/4vZycnPTMo6MK9NzGzZrKydlZOyKjrMtijvylzIxMJSUmKfbkKevy6G2RcnV1VaNmTYv9PQAAAAAAAAAAAOBqdPo5EBdXV5UpW1ZlypZV7Xp1NeKxR3T29GldvBAvSTp88JAeu2+E2oQ2VqfmrfTO628oLTVVkuTp5aX6DUK1I3K7dX/RkVFq3KypGjdroujLOgOjo6LUoHEjubm53do3CAAAAAAAAAAA4KDo9HNQaampWr5wsSpXrSK/Uv5KT0vTkyMflq+vr36aN1vvf/6porZs1YRx71ifE9aqpaIjI62PoyOj1KxlCzVt3jzP8h2RUQpr1fKWvh8AAAAAAAAAAABHRqefA9m8br3aNWqmdo2a6Y7GYdqwdq3e++xjGY1GLV+8RFmZWXpr4vuqGRKiFq1b6aWxr2vZwkW6cP68JCmsZQsdjzmmc3FxkqSdUdvVrEVzNW0Rpp1Rl+4APHnib52JPa2wli1s9j4BAAAAAAAAAAAcjbOtC8CtE9ayhV59a6wkKSkxSXOmzdDTDz2mn36dpWN/HVWtOrXl4elp3b5Rs6Yym806fjRGpcuUUcOmTeTi4qIdkdsVUqe2MjMyVKd+PZnNZl2Mv6hTf5/Ujsgoubm7q0HjRrZ6mwAAAAAAAAAAAA6HTj8H4u7pqcpVq1of16lfT+2bttD8WXMK9HwPDw/Vb9RQ0ZGRSkpMUOOwpnJycpKTk5MaNWms6G2Rio6MVOOmTeTi6nqz3gYAAAAAAAAAAACuwPCeDsxgMMhoMCgjM1PBNarr8J8HlZ6WZl3/x46dMhqNqlq9mnVZWMsW2hEZpejI7WrW4p8hPJs0D9OOqCjtiIpmPj8AAAAAAAAAAIBbjE4/B5KdlaXz587p/Llzijnylz546x2lpaXpzk4d1bNvH7m6uWrsS6/qyKFD2r4tUh+8NV69+vVV6TJlrPsIa9VSJ44d17ZNm9W0RXPr8mYtmmv9b2t09vRphbViPj8AAAAAAAAAAIBbieE9HUjExk3q3uZOSZKXl5eCa1TXhM8/VVjLS510X3w3VR++867uHxgudw93dereTf999eU8+2jYpLFcXV1lkUV1Q+tbl4c2aiSTySRPL0/Va9Dg1r0pAAAAAAAAAAAA0OlXXEz9ns3z+Exakm0KuYZxH7yncR+8d91tatUO0Tc//3Ddbdzc3LR13x9XLXd1c1XE3l03UCEAAAAAAAAAAACKiuE9AQAAAAAAAAAAgBKOTj8AAAAAAAAAAACghKPTDwAAAAAAAAAAACjh6PQDAAAAAAAAAAAASjg6/QAAAAAAAAAAAIASjk6/f2GxWGxdAgAAAAAAAAAAAHBddPr9C2dnZ6WmptL5ZycsFovS0jPkknjW1qUAAAAAAAAAAADYDWdbF2DvvLy8lJmZqeTk5EI971zyhZtUkWPxTE/JuyAnRx5nDskjIdY2BQEAAAAAAAAAANghOv0KwM3NTW5uboV6zqqYqJtUjWN5+dheW5cAAAAAAAAAAABg9xjeEwAAAAAAAAAAACjh7PJOvxUrVmjx4sVKSEhQ1apVNXLkSNWsWfOa22/dulWzZs3SuXPnFBQUpOHDh6tp06a3sGIAAAAAQEGQ9wAAAADg5rC7O/0iIiL0008/afDgwZowYYKqVq2q8ePHKzExMd/tDx48qM8++0ydOnXShAkT1Lx5c02cOFEnTpy4xZUDAAAAAK6HvAcAAAAAN4/ddfotWbJEnTt3VseOHVWpUiU98sgjcnV11bp16/LdftmyZWrcuLH69u2rSpUqaejQoapevbpWrFhxiysHAAAAAFwPeQ8AAAAAbh67Gt7TZDLp6NGj6t+/v3WZ0WhUgwYNdOjQoXyfc+jQIfXu3TvPskaNGmn79u35bp+dna3s7GzrY4PBIA8PDzk7F++foqJvQLHuz1E5l6lo6xJuCwYXF1uX8K9oM8WHdlM8aDeOgzZTPGgzjoV2UzyKu90Ud6Ypbrci70m3JvPxfVJ8+D4pHhyHHQdtpnjQZhwL7aZ40G4cB22meNgq79lVKkxKSpLZbJa/v3+e5f7+/oqNjc33OQkJCfLz88uzzM/PTwkJCfluP3/+fM2dO9f6uG3btnrmmWdUqlSpG6r9Sv8t2/vfNwJgRZsBCo92AxQObQawrVuR96Rbk/n4PgEKj3YDFA5tBig82g1gh8N73mwDBgzQDz/8YP3nkUceyXMVKOxHenq6Xn75ZaWnp9u6FKDEoN0AhUObAQqPdgN7R+YrOfg+AQqHNgMUHu0GKBzaTMlnV3f6+fr6ymg0XnXVZkJCwlVXg+by9/e/atL3xMTEa27v4uIilxJwKzIki8WimJgYWSwWW5cClBi0G6BwaDNA4dFuUFS3Iu9JZL6ShO8ToHBoM0Dh0W6AwqHNlHx2daefs7Ozqlevrr1791qXmc1m7d27VyEhIfk+JyQkRHv27MmzbPfu3apVq9ZNrRUAAAAAUHDkPQAAAAC4ueyq00+SevfurTVr1mj9+vU6efKkpk6dqszMTHXo0EGS9MUXX2j69OnW7Xv16qU//vhDixcv1qlTpzR79mz99ddf6tGjh43eAQAAAAAgP+Q9AAAAALh57Gp4T0lq06aNkpKSNHv2bCUkJCg4OFivvfaadfiW8+fPy2AwWLevXbu2nn76ac2cOVMzZsxQ+fLl9eKLL6pKlSo2egcoLi4uLho8eDBD8wCFQLsBCoc2AxQe7QY3gryHy/F9AhQObQYoPNoNUDi0mZLPYGFwVgAAAAAAAAAAAKBEs7vhPQEAAAAAAAAAAAAUDp1+AAAAAAAAAAAAQAlHpx8AAAAAAAAAAABQwtHpBwAAAAAAAAAAAJRwdPoBAAAAAAAAAAAAJRydfrilzGZznscWi8VGlQAAAODKczNJSk9Pt0ElAG4XZD4AAAD7QN5zTHT64ZYxm80yGi995A4cOKCcnBwZDAYbVwXYr8sPzPkdpAEAuFFGo1Hnzp3T0qVLJUlbt27VF198obS0NBtXBqAkIvMBhUPmAwDcTOQ9x+Rs6wLgGCwWizX8zZw5U5s2bdKwYcPUpk0b63IA/7j8B5MVK1bo+PHjunDhgpo2baoWLVooICDAxhUC9slischgMOjcuXOyWCzKyMhQlSpVbF0WYLdycnK0atUq7dq1SzExMdq0aZNGjRolT09PW5cGoIQh8wGFQ+YDiobMBxQcec8x0emHWyL36s6ZM2dqzZo1eu6551SxYkXCH3ANuW3jl19+0fr169W/f395eHho5cqV2r17t5599lm5urrauErAvuSGv6ioKM2aNUuSlJSUpBYtWqh///4qW7asjSsE7I+Tk5OGDBmikydPatOmTWrdurU6dOggKe+PkQDwb8h8QOGQ+YDCI/MBhUPec0z8X8Utc+7cOe3atUujRo1SvXr1ZDQadeLECc2dO1cHDhzgtmLgCgcPHlR0dLRefvll9e7dWw0aNFBcXJxatGhB+APyYTAYtGfPHk2aNEk9e/bUuHHj9OCDD2r16tWKiYmxdXmA3cmdZ8vZ2VleXl5q2LChLly4oPnz50u69GMkQ40BKAwyH1A4ZD6gcMh8QMGR9xwXd/rhlsnOztbp06dlNBp1+PBhrV27VkeOHFFycrLWrl2rRx55RE2aNLFetQM4urS0NDk7O6tWrVratm2bJk+erAceeEAdOnRQZmam9u3bp9DQUMIgoH+u+Pzjjz/UsWNHdenSRWfOnNHMmTPVqVMntWjRwtYlAnYlt80cPXpUvr6+euKJJ5SWlqZZs2YpOjpakjRgwADrlZ9JSUny9fW1ZckASgAyH1A4ZD6g4Mh8QMGR9xwbd/rhpsjvKoEKFSqoRYsW+uijj/TWW2/Jzc1Nw4YN09dffy0vLy8dOnRIkgh/cEi5V99czmAwyNfX1xr+hg8frm7dukmSDhw4oOjoaCUkJNziSgH7ktt2Lly4IEmKiYlRQECAsrOz9eabbyo0NFSPPvqoJGnZsmX6/fffbVYrYC8uHxbpvffe0/Lly5WcnCwvLy8NHDhQNWrUUHR0tObNmydJmjVrlqZOnars7GwbVw7AnpD5gMIh8wFFQ+YDCoe8B+70Q7G7fDzgyMhIJSYmKikpSd27d9eoUaPUsWNHubm5qUaNGtbneHt7czUBHFruDx8bNmyQn5+fGjdurHr16mnq1Kn65JNP9PDDD6tr166SpKysLC1fvlweHh6MVw+Hl3siO336dI0bN04tW7ZURESEli5dqpYtW2rkyJEyGAwym82KiYlRXFycGjRoIGdnToHguAwGg37//Xd9/vnnGjlypMLCwqznYf7+/ho0aJAWLVqkdevWadOmTUpMTNSrr74qFxcXG1cOwF6Q+YDCI/MBRUPmAwqHvAe+/VDsLp+MeuvWrapQoYIyMjK0dOlSPfPMM2rcuLEkKSMjQ+fPn9cvv/yilJQU69VsgKM6f/68Nm7cqLS0NBmNRjVs2FD//e9/NXHiREVFRcnLy0tms1nr16/XxYsX9cEHH8hgMDA8EhyO2WyWwWCQwWDQ+fPntWbNGvXu3Vt+fn6qXLmyTCaT/Pz81KVLFxmNRmVlZenXX3/V3r179cYbbxD+4PBMJpMiIiLUo0cPderUSRkZGdaJ3QMDA9W0aVMNGTJEjRo1UmxsrBo3bqygoCBblw3AjpD5gKIh8wEFQ+YDio68B74BcVNs3LhRGzdu1Guvvabg4GDt3r1b48ePl8lkknTpNuPdu3dr2bJlMhgMeu+99+Tk5JTnilHgdndlcCtTpowGDBigVatWafbs2TIajQoNDdXLL7+s//3vf5o9e7a8vLxUrlw5vfLKK7QZOJwjR46oZs2a1s/8kSNHtH79epnNZjVt2lSSVLduXXXr1k0rV67UJ598osDAQEnSsWPH9Nprr6l8+fI2qx+wJ+fOnVNmZqYSEhI0a9YsnTlzRvHx8UpLS9Pff/+tESNGqGHDhmrYsKGtSwVgp8h8wL8j8wGFQ+YDigd5z7EZLPkNKg7coPnz5ysxMVEjRoxQRESEvvnmG+vY9Onp6XJzc1N6eroOHjyoxo0by2g0KicnR05OTrYuHbjlEhMT5efnZ328b98+LV++XAkJCRo6dKhCQ0OVk5OjpKQkubm5ycPDQwaDgTYDh7Jx40Zt2LBBzz33nLy8vGQwGDR//nwtW7ZMJpNJb7/9tipVqmTd/s8//9SJEyf0119/qWrVqmratClXrsFh5Xd3wM6dOzVp0iTl5OSoYcOGatWqldq1a6cFCxZo+/btGjt2rFxdXW1UMYCSgMwHFByZD/h3ZD6gaMh7uBKdfrgpvv76a2VnZ6tjx46aOHFinsmoFyxYoIyMDA0dOtS6PVeuwVFt3rxZq1ev1gMPPKBq1apZl+/du1dz5sxRdna27rvvPtWtWzfP8xjeBY7m5MmTcnNzU9myZRUfH6+AgABJ0qpVq7Rw4ULVq1dPgwcPVrly5WxcKWBfco8Xf/75p/78808lJSWpQYMGatKkieLj4xUXF6c6depYt/v+++918eJFPfnkk4RAANdF5gMKhswHFAyZDyg88h7ywxk3is2SJUs0b948SVK7du108uRJjR8/Pk/4y8jI0MGDB5WRkZHnuYQ/OAqz2Szp0kFZkrKzsyVJv/76q44dO2bdLjQ0VC1bttSxY8c0efJkHTlyJM9+CH9wNJUqVVLZsmV17NgxffTRR/rtt98kSd26dVOPHj104sQJLV++XHFxcZL+aWOAozMYDIqMjNTEiRN18OBBpaam6v3339f06dPl4+OjOnXqSJJOnDih6dOna8OGDRo0aBABEEC+yHzAvyPzAUVD5gMKj7yH/DCnH4pFVlaWzpw5o4SEBEmXDtRVq1aVyWSSyWRSWlqazp49q5kzZyohIUEvvPCCJK5cg2OxWCzWHzt+//13NW3aVB07dpSrq6vWrl2r2bNna8iQIdarP8uUKaNGjRqpTp06ql69ui1LB+yG0WhUqVKltGXLFjk7O6tjx47q06ePLBaLtmzZIqPRqG7dujGsC/D/YmNj9dNPP2nYsGHq0qWLMjIytHHjRkmSi4uLpEvznyxZskQxMTF68803VbVqVVuWDMBOkfmAf0fmA24cmQ8oOPIe8sOldigWrq6uatasmXbt2qUDBw7I399fgwcPVo0aNbRy5Uo99thj+vrrr5WVlaXx48dbJ6Mm/MFRXP55P3nypCZMmKCff/5ZktS2bVt17NhRmZmZmjlzpnbv3q3k5GRt2LBBtWrVUt++fWU0Gq1XjAKOrEqVKhoyZIgCAgK0du1arVu3TpLUt29ftWvXTpGRkVq7dq1ycnJsXClgH9LS0lSmTBl16dJFZ86c0bPPPquOHTvqnnvukSSdP39ewcHB6tmzp0aPHq3g4GDbFgzAbpH5gOsj8wHFg8wHFBx5D/lhTj8U2vWu1Jw0aZIyMzP1+OOPy9PTU+np6UpPT9exY8cUGBioChUqMIE7HM7lbWbp0qX6+++/tX37dqWkpKh79+4aOXKkJGnbtm3asmWLoqKiVL58eTk5OemDDz6Qk5MTV0jDIeV+7s+fP6/U1FR5eXnJ399fzs7OiomJ0eLFi3Xu3Dl16tRJHTt2lCQtW7ZMYWFhCgwMtHH1gG3ktps//vhDXl5eMpvN+vzzz/XMM8/os88+U8OGDfXwww/LaDRq//79WrRokR599FHrnCkAIJH5gMIi8wFFQ+YDCoe8h4JgeE8UWu5J6Pz58+Xj46MaNWpYh6Zo3Lixfv31V6WkpMjT01Nubm7y8PDI88ViNpsJf3AIuQfi3DYzZ84cLV++XI8++qiaNGmiffv2adOmTcrJydEjjzyiVq1aqWbNmurWrZvS0tLUvHlz69WezIECR5PbfqKiojR79mwlJSWpXLlyqlatmoYPH65q1aqpT58+Wrx4sTZs2KDs7Gx169ZNvXr1snXpgE3lTuL+4Ycf6pFHHlHjxo1VqVIlvfXWWwoLC9Ojjz5qnf9k165dyszMlLMzkQBAXmQ+oGDIfEDRkfmAwiPvoSD4P44isVgsunDhgiIiIpSVlaVmzZqpU6dOuuOOO7R69WrNmTNHTzzxRL4nrZzIwhGkpKTI29vb+jgtLU379+/XkCFD1KpVK0lSvXr1VKFCBU2fPl1ubm66//77VaZMGZUpU8b6PMIfHJXBYNCuXbv05Zdf6u6771abNm20evVqLVmyRImJiRo1apSqVaumvn37atasWYqOjla7du3k6elp69IBmzp37px27typAQMG6M4775QkhYWFKS4uTs7Ozvr777+VlZWlrVu3as2aNRo3bpx8fX1tXDUAe0TmA66PzAfcGDIfUHjkPRQEnX4okCtPQg0Ggx5++GGdOnVKJ06c0OzZs3Xw4EH5+vqqTp062r17t06fPq3y5cvbsGrANqZMmaILFy7o1VdftS5zdnbWhQsXFBcXZ13m4+Ojdu3aaceOHVq6dKnMZrNGjBghSdbhkAh/cFRJSUlasmSJBg0apF69eik5OVlr1qxRtWrVdPLkSU2ePFmPP/64goODNWzYMHl7exP+4PBOnTqlyZMn6+LFi+rXr591eZcuXZSenq6dO3fqhRdeUJUqVWQ0GjV27FhVqVLFhhUDsCdkPqDgyHzAjSPzAYVD3kNB0emHf3V5+Dt06JDS09Pl5uamOnXqqGLFiqpYsaIaNWqkI0eOaNWqVVq1apXS0tL0xx9/EADhkAYOHCh/f39JUkZGhtzd3eXq6qqWLVvq2LFjOnr0qKpXry5J8vb2VnBwsFxcXBQZGSmTyaSHH35YTk5OXPEJh+br66u2bduqatWqSkpK0tixY9WsWTONHDlSP/zwg/VY8/zzz3MSC/y/ihUrqmbNmtqwYYN27dqV50roPn36qEuXLjp58qRKlSolNzc3+fj42LhiAPaCzAcUDpkPuHFkPqBwyHsoKDr9cF0Wi8V6Ajp9+nRFRUUpPT1dZcuWVVBQkJ588klJkqenpxo2bKiGDRvq0KFD2rJli1atWqWwsLA8w1YAjiD3M79+/Xr98MMP+uSTT1SqVCk1atRIO3fu1KpVq9SpUyeFhIQoIyNDp06dUsOGDRUWFqZZs2YpIyNDTz75JOEPDi93ovbly5crMDBQ4eHhMhqNqlKliqpWrSoXFxelpKTI3d3dxpUCtpE7D8rlRowYIWdnZ+3cuVPLli1Tz5495eXlJUny8PBQrVq1bFEqADtG5gMKj8wHFA8yH3Bt5D0UFZ1+uK7cL5YFCxZo3bp1ev7551WjRg3NmTNHCxcuVFpaml566SVJUnZ2tlxcXBQSEiKj0ahdu3bp/PnzBEA4jMuv0szOzladOnVUoUIFvfnmm3rzzTcVGhqqoUOHat68efrmm2/k7u6u7Oxs5eTkqEePHsrJyVFWVpaWL1+uhIQE65WjwO0u90T22LFjOnPmjEwmk6pUqWK9mjMuLk7nzp2zzply+vRpNW3aVH369GF4Fzis3HZz+PBhHTx4UM7OzgoMDFTTpk117733ymw2a/v27ZJkDYL5hUYAIPMBBUfmA4qGzAcUDnkPN8JgsVgsti4C9i02Nlbfffed7rrrLjVp0kS7du3Sxx9/rDvvvFM7duxQjRo19MILL0j6Z0x6SXruuefUvXt39ejRw5blA7fE3r17de7cOXXs2FFTpkyR2WzWo48+qri4OH355ZeKj4/XO++8o1KlSunYsWM6ffq0Dhw4oFKlSqlPnz5ydr50DUZGRobMZjMntXA4kZGR+t///qfg4GBdvHhRbm5uatWqlfr27autW7dq0aJF8vb2lp+fnyIjIzVhwgRVqFDB1mUDNpEb5rZt26bJkycrODhYqampOnXqlHr06KEHHnhAkvTDDz/o8OHDqlevngYMGMCxBcA1kfmAf0fmA24MmQ8oGPIebhR3+iFfl1+9VqFCBbVr107VqlXTwYMH9fXXX+v+++9Xly5dZDabtWbNGo0ZM0Zvv/22NfxFREQoISFBDRs2tOXbAG46i8WirKwsLVmyRGlpadq2bZsOHTqkcePGyWg0KigoSE888YS+/PJLvf7663rnnXcUHBys4OBgtW7d2rqf3B9PGLICjigmJkZTp05VeHi4unXrpgMHDujtt99W48aNJUmNGzdWUlKS9uzZo7S0NI0fP57wB4dy5Xw/BoNBZ86c0ffff6/hw4erW7duSklJ0e7duzV58mQZDAbdf//9GjFihKZMmaIjR47IZDLZ8B0AsEdkPqBgyHzAjSPzAddG3kNx404/5LFz507t379fcXFx6t+/v3Xi6VwzZszQxYsX9fDDD8vV1VWLFi3SwYMH5e3trccee8z6BXX48GH5+PgoKCjIFm8DuOUyMjL06quvKjY2VuHh4Ro0aFCe9WfOnNGXX35pnZw6ICDARpUC9mfjxo1at26dxo4dq7i4OI0bN06NGjXSo48+KkmKj4+3tpmsrCy5urraslzglsoNgCdOnFB8fLz1h5HDhw/riy++0BtvvKHSpUtbt9+8ebO+/vprvfLKKwoNDZUkJSYmys/PzxblA7BDZD6gaMh8QNGR+YD8kfdwMzBjMKxWr16tL7/8UmfPntWFCxc0duxYnT59Os82p0+f1qlTp+Tq6iqTyaRDhw6pfv36GjVqlIxGo3JyciRJtWrVIvzhtmc2myX9c+VnuXLlVL9+fe3bt0/r1q2zbmexWKxXf0qXbr8HcKlt5CpVqpTi4+M1duxYNWrUSA8//LCkS8MorV27VomJiZIkFxcXm9QK2EJuADx+/LhefPFFHTlyxLrOzc1NZ8+etZ6r5banevXqqVSpUrp48aJ1WwIggFxkPqBwyHzAjSHzAddG3sPNwvCekHQp/H377bd67rnnFBYWpvT0dL355ps6c+aMypQpYz3g3nnnnfrxxx/18ssvy2g0KjMzU88995ykS18+uUO9ALe7y2+93759u+rUqaNXXnlFKSkpmjx5stavXy+DwaAOHTpYJ9ENCAjQuHHj5Ovra8vSAbuR2zZKlSqliIgIRUdHq2PHjnrwwQet22zbtk1JSUnWKz2ZlBqOIvc4c+zYMb3++usaMGCABg8ebF1foUIFNW7cWCtWrJCnp6f1Th1fX195e3tbf5QHgFxkPqBwyHzAjSPzAfkj7+Fm4k4/aOfOnfrf//6nUaNGqUWLFjIajfLy8lJWVpZWr16t//73v/rxxx8VExOjxo0b6/7771etWrUUGhqqiRMnysnJSWazmYMyHIbFYrGGv+nTp+vHH3/U2rVrlZ6eLm9vbz300EPy9vbWhg0btHr1amVnZ+vNN9/UzJkz5e/vL6PRaL1iFHAkuVemxcTEaPv27dq/f79MJpMaNGigu+++W5mZmapRo4YSExMVHx+vX375RVu3blV4eLg8PDxsXD1waxmNRsXGxmr06NEaOHCghg4dal23Y8cOmUwmde7cWcnJyZozZ4527Nihv//+WzNnztS5c+dUr149G1YPwN6Q+YDCIfMBRUPmAwqGvIebiTv9oOPHj6tChQo6duyY2rRpI2dnZ3344YfKzs5W7dq1Vb58eS1fvlwXL17U448/rubNm6t58+bW5+dORg04itwfO+bOnas1a9bo1VdfVaVKleTu7i6LxaKAgAA99NBD+vnnn7V06VLNnz9fnp6euueee6z7uHyCXsBRGAwGbdu2TVOmTJGrq6vc3NxUrVo1PfHEExowYIASExM1efJkBQQEyNvbW+np6Xr99ddVqVIlW5cO3HJZWVmaPXu23N3dFRISYl0+b948/fbbb3r99dfVvHlzWSwWbd68WRMnTlT58uVlNps1evRoBQYG2rB6APaGzAcUDpkPKBoyH1Aw5D3cTAbL5YMrwyHl5ORoyZIl2r59u2rWrKkzZ87o4sWLev75561fIIsWLdK0adP08ccfq2LFijauGLj1li5dqtatW1snlk5ISNBnn32mHj16qGXLloqPj9eZM2e0fv16hYSEqFOnTkpNTdVff/2lxMRE3XHHHdY5UPjBBI4g9/TCYDDIYrHIYDAoJSVFX375pVq3bq169erpjz/+0G+//SZfX1+9+OKLcnFx0Z9//qmkpCR5eHioUqVKKlWqlI3fCWA7e/fu1YoVK5Samqrhw4fr8OHDmjNnjp5++mnrBO+SZDKZdO7cOZnNZvn4+DCkGICrkPmAf0fmAwqHzAfcGPIebhbu9HNwZrNZTk5O6t27t8xmszZv3qzz58/r7bffVmBgoLKysuTq6qqgoCBVqVKFE1c4pIiICB06dEg9e/a0LnNxcdHZs2d1+PBhlSpVSkuXLtXZs2fl7u6uDRs2KCsrS7169cpzkM5tb4AjuHDhgsqUKSPpUgg8fPiw5s+fLycnJzVs2FD+/v5q3769vLy8NH/+fE2YMEEvvfSS6tSpY+PKAfsRGhoqo9GoJUuWaNKkSTp//rzGjh2rkJCQPD+yODk5qXz58jauFoC9IvMB/47MBxQemQ+4MeQ93CyMNeDgcseZd3JyUr9+/dS+fXtVrFhRq1evVkpKilxdXWU2m7VmzRqVKVNG5cqVs3XJwC3Xpk0bPfPMMzIajfrjjz8UGxsrLy8v9e/fX5s2bdLbb7+tsmXLatiwYXrzzTfVvn17HTt27Kr9MLwLHMX69ev15ptvKisrSzk5OcrJydHhw4d16tQp/fXXX/L395ckOTs7KywsTAMGDFB6errGjRun7Oxs2xYP2InckFevXj317dtX5cuXV6VKlZSZmSlJeebVYo4tANdD5gP+HZkPKBwyH3BjyHu4mRjeE5IuXY2WOwzFokWLFB0drRo1amjo0KH68ssvFRsbq4kTJ8rZ2dm6LeAIcj/vFotFhw8f1meffaamTZuqf//+Kl26tOLj45Wenm4dAslsNuvtt99W3bp1FR4ebuPqAds4deqUXFxcFBgYqNTUVHl5eSklJUURERGaO3euQkND9fTTT1u3N5lM2rZtm9asWaMnnnjCerUo4Ohyh0mSpAMHDmjx4sVKT09X37591aRJk6u2AYDrIfMB+SPzAYVH5gNuHHkPNwudfrC6PAQuXrxYO3bs0PHjx1WqVCl99NFHcnZ2Zmx6OJT8DqwLFy7U1q1bVbt2bfXs2VNBQUGSpIyMDB0/flzz5s1TfHy83n//fdoKHN6xY8f01ltv6cUXX1TdunWVlpamjRs3au3atQoODtbjjz9u3dZkMik7O1seHh42rBiwP5cfi/bv368lS5YoKytL3bt3V/PmzW1cHYCShswH5EXmA24MmQ+4MeQ93AxcuucgzGbzv667fNiXPn36KDQ0VI0bN9bHH39M+IPDufygu3nzZi1fvlyS1K9fP7Vp00Z//vmnli9frri4OEmXDsyLFy+W2WzWe++9Jycnp+u2O8ARODs7q3bt2vr000916NAheXp66o477lDHjh0VExOjb775Js+2hD/gksuvyTMYDFcN/ZKTk6N169YpIyPDViUCsENkPqBwyHzAjSPzAYVH3sPNxp1+DuDyoVnWr1+v48ePS5KCg4PVvn37a25vNptlMBhkMBgIf3Aol7eZI0eOaMaMGUpISNDAgQPVtm1bSdKiRYu0ZcsW1a1bV3379pWfn59iYmJUvXp169XTtBlAOnnypObOnau9e/fqpZdeUkhIiFJTU7V582YtWrRIzZo108iRI21dJmAzuT84xsXFKSUlRVWqVJGzs/M1t5OkQ4cOqXTp0ipduvStLheAnSLzAYVD5gOKD5kPuDbyHmyBTj8H8ssvv2jjxo1q1aqVsrOzFRkZqQ4dOuj++++/atvLv2gYOxiOavr06Tp16pSSk5N1/PhxlSlTRr1791bHjh0lSYsXL9aWLVtUuXJlDR8+3DpRNXOgwFHkHh8yMjLk7Oyc58T18mNHfiEwJSVF27ZtU4MGDVSuXDlbvQXALkRGRmrq1KkyGo3y9PTUsGHD1LBhQ7m7u+fZjnMyAP+GzAcUDpkPuD4yH3DjyHu41ThDcRC7d+/Wtm3b9MILL2jkyJFq0KCBsrOzValSpTzb5fYBX/4Fw5cNHNHatWu1cuVK9evXT6+88orGjh2rcuXKac2aNdqwYYMkqU+fPmrWrJkMBoN8fX2tzyX8wVEYDAYlJCTo+eef17Zt22QymfKsy1WpUiUNHjxYoaGh+uijj7R//355e3urc+fOhD84NIvFovj4eM2bN0+DBg3Sa6+9pooVK2ratGmKiIi4ajgXzskAXA+ZDygcMh/w78h8QNGR92ArnKXcpnKDXO6/z507p9KlSyskJESRkZH65ptvdP/996tTp07KyMjQvn37JPHlAuQ6ceKEQkJCFBISIk9PT1WvXl1DhgyRwWDQggULtHnzZknSkCFD9J///Mc6PBLgaPz9/VW1alV9//33io6OzhMCpX+OQ7khsFq1avr666+VlZVli3IBu3D5eZq3t7fq1q2rDh06qGrVqnrhhRcUEhKihQsX5hsEASAXmQ+4MWQ+oGDIfEDhkPdga3T63aZyg1xycrIkydvbW2XKlFFERIS+/PJL3Xvvveratask6cCBA9q+fbsuXrxos3oBe5Eb4nx9fZWRkaGUlBRJlw7U1apVU69evXTu3DmtWrXKGgKNRqMsFgtXe8Lh5LaXl156SY0bN9bkyZOvCoGXDxtmNBp1zz336M0335Srqys/OsJhGQwG7dy5U59++qnefPNNxcTE5PkR8YknnlCtWrW0dOlSrV+/niAIIF9kPqBoyHxAwZH5gMIj78HWOFu5ja1Zs0YLFy6UJAUEBCg6OlqfffaZhg8fbg1/WVlZWrZsmTIyMqxj0wOO5MorNXNDXPXq1XX06FFt2rRJOTk51hNVNzc3NWzYUP7+/tq2bZvS0tIkccU0HNPlVzs/9dRTCgsLs4bA7Oxs63Ymk0lfffWVPv74Y5UtW1YBAQG2KhmwC4cOHdIHH3wgLy8vGY1GnThxQgsXLrT+6ChJTz75pMqXL68NGzZwVwGAayLzAf+OzAcUHZkPKDzyHmyNTr/b2MWLF7V69WolJSWpVq1aeuyxxyRJFy5c0M6dO7Vv3z5NmDBBCQkJeuSRR2QwGKy3HwOO4PLJ13fs2KF169Zp9erVSk1NVePGjXXPPffohx9+0KJFi3T48GHFx8dr1apVqlmzprp27art27fr1KlTNn4XwK13+QnptULgzp07ZTKZZLFY9NNPPykyMlL/+c9/5OHhYauyAbsQGxurffv26d5779Vjjz2md955Rx06dNDu3bu1cuVK6w+LkvTCCy/oxRdflKenpw0rBmDPyHzA9ZH5gKIh8wFFQ96DPTBYOOMv8a6ciD33pNZkMmn8+PEKDg7W8OHD5ezsrPXr12v+/PlKSUlRUFCQfH199fzzz8vZ2TnPyTDgSH766Sdt2bJFXl5eysrKUkZGhp566ik1atRIK1as0MKFC2UymeTq6ip3d3e9//77SkhI0Pjx4/Xf//5XVapUsfVbAG6q3ONDWlqa9WT0ymPG5Y8nTZqk6OhoPfbYY9q/f7/Wr1+vt99+W9WqVbNJ/YC9OHv2rCZPnqzY2FgNHDhQPXr0sK778ccfdeDAAbVo0ULdunWTt7e3DSsFYG/IfMCNIfMB10fmA24ceQ/2wtnWBeDGXTnExOVjzdeuXVt79+6VyWSSs7OzOnTooMaNGyszM1MuLi4qVaqUDAaDcnJy5OTkZKN3ANjO5s2btWHDBo0ZM0ZlypSR0WjUlClT9Omnn+q1115Tjx49VL9+faWlpSkzM1OhoaEyGo1avny5DAaD/Pz8bP0WgJvOaDTq1KlTeuONN9SvXz/17dvXerVnbui7/PFTTz2lr776Sp999plcXV0Jf8D/K1OmjEJDQ3Xu3DlFR0erQ4cOcnd3lyQ98MAD+vnnn7Vu3To5OzurT58+DCMGwIrMBxQdmQ/4d2Q+4MaR92AvuMSvBPv555/1559/Wh+vXbtW7777rs6cOaOMjAwZjUb17t1bp0+f1oIFC6zb+fv7q1y5cgoICJDBYJDZbCb8wWFduHBBNWrUUHBwsDw9PeXp6alnn31WtWvX1tdffy2TyaTKlSurdu3aatiwoY4fP67PP/9cGzZs0DPPPEMAhEMwm81at26dUlJStHTpUs2bN09S3mFernz8+OOPq2/fvoQ/OLQrB9RwcnLSgAED1L17dyUnJ2vatGl5hne577771KZNG7Vq1YoACEASmQ8oDmQ+4N+R+YDCI+/BXtHpV0KdOnVKKSkpqlWrlqR/vmTS09M1btw4fffdd9q5c6e8vb01ZMgQHT169Jrj0DO8CxxZamqqTp48KelSW8idiPquu+5Senq64uLirNvmXh3t6uqqsWPHKjg42BYlA7ec0WhU9erVVbZsWbVv314bNmy4bgjMycmRJA0fPpx2AodlsVhkMBh08OBBzZs3T3PnzlVUVJScnJzUu3dvtW7dWkePHtX06dPzBMFhw4YpMDDQhpUDsBdkPqB4kPmAf0fmAwqHvAd7xpx+t4HNmzfLx8dHjRo1kiStWbNGBw8e1MaNG9W1a1cZDAbt3r1bw4YNU8uWLW1cLWA7+c1hcuLECX300UcKCwvTfffdZ13+559/avLkyXrllVdUvnz5PM/JHToJuF1dPm/Q5UOBjRkzRqVLl1ZwcLBWrlypbt26acCAAZLyb1+Ao9u2bZu++uor1ahRQ1lZWTpy5Ii6dOmi+++/Xy4uLlqwYIF27dqlwMBAPfTQQ/Lw8LB1yQDsFJkPKBgyH1AwZD7gxpH3YK84gynBLBaLEhMTtXDhQvn7+ys7O1thYWHq3LmzOnbsqDvvvFMrV65UWlqaTp8+rY0bNxIA4ZAOHTqk4OBgubq6XnWSGhgYqDvvvFM7d+7UlClTFB4erqSkJC1YsEClS5dWuXLlrtof4Q+3sysncL98KLCePXvq999/V9OmTZWdna0VK1bIYDCof//+V833ADi6uLg4/fTTT7r33nvVrVs3mc1m7d69Wx999JEMBoMefvhh9e3b1xoOMzMzCYEArkLmAwqGzAcUHJkPuHHkPdgzzmJKMIPBIH9/fz322GOaMWOGfvvtN0lSWFiYjEajQkNDFRwcrKSkJG3atEmDBg2yccXArRcXF6cpU6aobNmy+u9//ysXFxfrSarFYpG7u7u6d+8uNzc3rV27Vo8//rjKlSsnT09PjRs3jpNaOByj0ajY2FiNHTtWzZo1U7t27VSlShX5+vqqevXqmjZtmpo2bapBgwbJYDBYQ2C/fv1oJ3BYq1evVpUqVVSrVi3r3AwZGRlycnJSvXr1rNs1btxYzz33nCZMmKBmzZqpSZMmCg8PV2pqqnx8fGxVPgA7RuYD/h2ZDygcMh9QOOQ9lDR0+pUgl5+EXv7fNWvW1NChQzV9+nT99ttvMhqNatq0qSTJ09NT3t7euvvuuyUxRAUcT6lSpdS9e3dt2LBBkyZN0pNPPpnn6k+z2Sxvb2/16tVLPXr0UExMjJycnBQcHGwdp/7yq96A29XlbWL16tVKSkpSZGSknJ2d9e2332r48OEKDQ3VPffco9WrV6tRo0bq1KmTjEaj5syZI2dnZ9111122fhvALWexWDR37lx5eHjoySefVPXq1WUwGGQwGBQXF6cLFy6oUqVK1m3r1aunSpUq6ezZs5Iu/ehCAASQi8wHFB6ZDygYMh9QeOQ9lERcnlFCXB74Vq1apalTp+qzzz5TZGSk0tPTVatWLd1zzz3KysrSqlWrtHPnTklXT9hO+IMjsVgscnFxUYcOHdSpUyedO3dOX3zxhbKysqzhLreNJCUlaeXKlapcubKqV69uPREm/MFRGI1GnT17VikpKbrrrrvUq1cvSVJwcLD69OmjuXPnauLEidq4caNSU1N19uxZBQQEqEOHDgoPD7f+8Ag4ktzJ27/44gu5uLjoq6++0l9//aWcnBxVrlxZbdu21dy5c3XkyBEZjUYZDAa5urrKzc2Nq6QBXIXMBxQemQ8oODIfUDjkPZRUfPpKiNwvimnTpmnWrFny9PRUZmamFixYoLlz5yotLS1PCPz111916NAhG1cN2JbBYLCGwDvuuENdu3bNEwKdnJys86R89NFH2rx5s1xdXa3P5wANR5KVlaWvvvpK3333nUqXLq0uXbqoZcuWmjZtmmrWrKk33nhDPXv21IULFxQTE6MLFy5IkgICAtS7d2+VL1/exu8AuPUMBoOys7Pl7Oyst956S1lZWZo2bZqOHj0qSerUqZO8vLz07bffavv27Tp06JBmzJihs2fPqlGjRjauHoC9IfMBhUfmAwqOzAcUDnkPJZXBYrFYbF0E8nflmPLr16/Xr7/+queee07Vq1dXdHS0Jk6cqEqVKql+/foaOnSoPD09deDAAW3dulUjRozgBBbQP1fmZGdna9OmTfrtt99UtmxZPf3007JYLHr77beVnJysiRMnytnZmfkc4JDMZrN+/PFHHThwQO+8845cXV116tQpzZ8/Xzt27NDzzz+v0NBQpaWl6eLFi6pYsaK1bQGOKrcNREREaN++fYqNjdX+/fsVHBys//znP6pWrZr279+v9evXa9OmTQoKCpLBYNBTTz2latWq2bp8AHaAzAcUDzIf8O/IfEDhkPdQUtHpZ8fi4+MVEBAgs9ksSVq7dq0uXryoIUOGKCoqSpMnT9aQIUMUHx+vtWvXqkOHDho4cKC8vb2t++BEFrjkyhC4evVq+fv7KykpSampqdbwx3wOcES57SMhIUHPPfec7rrrLg0ePFiSdPr0ac2fP1/bt2/Xs88+q0aNGin31IHwB0gHDhzQ+PHjNXLkSFWuXFk5OTn6+uuvZTQa84S9s2fPysnJSW5ubszpAMCKzAcUHzIfcG1kPqBoyHsoiUgGdurYsWMaNWqUtm3bJqPRKKPRqDZt2qhr166Kj4/XnDlzNHDgQPXq1Uu9evWSi4uLtm7dqrVr10qS9eBM+IOjyP2h5EqXn6heOexLTEyMMjIyCH9weAaDQWazWb6+vurQoYP279+vhIQESVL58uU1YMAANW/eXF988YV27dplnbQagPTXX3+patWquvPOO1WrVi3VqVNH7777rjUMHj58WDk5OSpXrpzKlClDAARgReYDCofMBxQdmQ8oGvIeSiLSgZ3y9/dX586d9fnnn2v79u2SJHd3d/n7++vs2bNKT09XkyZNJEmJiYmqXbu2Bg0apN69e0viShw4lsuvbj5x4oROnz6tzMxMSf8Ev8v/28XFRe3atdMjjzyiDz74gPAHh5L7Y0lGRoaysrKsy3J/bGzWrJkOHDhgHaNeuhQCBw4cqLp162rq1KnKzMwUAwXA0eW2gbS0NKWlpcnZ2VnSpblSPD099eCDD+rYsWOaMmWKjh8/bstSAdgpMh9QcGQ+oODIfMCNI++hJHO2dQHIn7+/v8LDw+Xi4qIPP/xQL7zwgpo3b25d7+rqqujoaBkMBs2aNUu+vr7q3Lmz9codrvaEI8n9vP/yyy+KiopSfHy8WrdurbZt26px48bW4Jd7pVpuCGzatKmkSye/hD84CqPRqPPnz2vChAmqXLmy+vTpo8qVK1vbUWhoqFq3bq1FixYpJCTEOnxYUFCQhg8fLldXV7m5udnyLQB2IffH9tatW2vp0qWaP3++BgwYIFdXV0mSs7OzmjVrposXL8rLy8uWpQKwU2Q+oODIfEDBkfmAG0feQ0lGSrAjFy5cUHJysvWxv7+/BgwYoO7du+vDDz+0Xv0ZHBysOnXqaO3atXrrrbeUlJSkRx991HpiS/iDo7h8eJfo6GhFRkbqoYce0sMPP6zz589r6dKlioqKknT11Z+Xo83AEVzeXgICAlS/fn0lJyfrtdde09dff60NGzZY17dq1Urnzp3TuXPnJEkmk0mSVK5cOZUqVerWFg7YidxjyLFjx7Rp0yYdPXpUycnJqly5svr166e1a9dq3rx5ki5dVb1nzx4FBgbqnXfeUbly5WxZOgA7QuYDCofMBxQcmQ8oOvIebicGC/dq24Vt27bpm2++UalSpdS5c2f5+fmpXbt2ki4deH/++WetWLFCzz33nFq1aqWMjAydOXNG6enpql27toxGI0NVwGHt3r1b0dHRCgoKUq9evSRdGnN7zpw5MplM6tatm1q0aCHpn8mrAUeSezdAXFycfv/9d4WGhqpixYrKycnRpk2bFBUVpT179qhGjRpq06aNOnTooHfeeUelSpXSc889Z+vyAbsRGRmpr776Sr6+vkpNTVW7du101113yc/PTytWrND8+fPl7e0td3d3xcfH64033rBO7A4AZD6g6Mh8wPWR+YAbR97D7YJOPztgMpn0ww8/aOPGjXJzc1OFChV07tw5eXh4qHz58urevbsMBoP27t2r+fPn69VXX1Xjxo3z7IPhXeCozpw5owkTJuj8+fPq0aOHhg8fbl2XGwJzcnLUvn17648qgCPJPT6cOHFCH330kSpXrqwOHTooLCzMuk1aWprOnz+vmTNn6vTp08rKylJQUJCOHj2q0aNHq2bNmjZ8B4Bt5f5weP78eX377bdq1qyZ7rjjDq1fv16bNm1SYGCgwsPDFRQUpDNnzig6Olqenp6qV6+egoKCbF0+ADtB5gOKjswHXB+ZDyg68h5uR3T62YmEhAQtWLBAcXFxqlSpknr37q2oqCjt2rVLx48ftx6MDx06JLPZrPfee0/Vq1e3ddnALZd7ML786s3du3drxowZMhgMGj58uOrXr2/d/ujRo/ruu+9Us2ZNjRgxwkZVA7Z16tQpvf766+ratat69OihgICAfLfLzs7WhQsX9Ntvv2nr1q3KzMzUxIkTr7k94CiOHDmijRs3Kj4+Xo8++qh8fX0lSRs2bNBvv/2mwMBA9evXT1WrVrVxpQDsGZkPKBgyH1B4ZD6g6Mh7uN3Q6WdH4uPjNX/+fB05ckTt27dXjx49JF06cCckJGj9+vWKjY1VcnKyPvnkE4Z1gcO5/OrmzMxMubi4WCdq37Vrl+bMmaPSpUurZ8+eqlu3rvV5p06dUvny5bkyGg4pKytLX3zxhfz8/PTQQw9Zl5tMJiUmJiozM1MVKlSQlHcopJMnT8rb21v+/v62KBuwK/PmzdOyZcvk5OSkcePG5bmic8OGDVq3bp08PDw0fPhwVapUyYaVArB3ZD7g+sh8QOGR+YAbQ97D7cbZ1gXgHwEBARo4cKDmz5+vjRs3Ki0tTQMHDlTFihVVsWJF1atXL8/VbsznAEdyefhbvHix9uzZo5ycHJUqVUojR460Dn80Z84cLV++XAaDQXXq1JEkVaxY8ap9AI7CyclJiYmJqlevnnXZrl27tGvXLq1bt04+Pj4qV66cXn/99TzHFk5kgX8MHDhQnp6eWrp0qZYsWaJ+/fqpbNmykqT27dsrOztbUVFR8vT0tHGlAOwdmQ+4NjIfUDRkPuDGkPdwu+FOPzuUkJCgefPm6a+//lLz5s3Vv39/ScoT+DiRhaOaMWOGVq9erd69eyspKUl79+5VamqqXn/9dVWoUEE7d+7U/Pnz5erqqvvuu0/BwcG2LhmwqbS0NI0ePVp16tRRnz59FBkZqQ0bNqhy5cqqW7eu3N3dtWDBAoWFhen++++3dbmAzeX+0J6ZmSmLxSJ3d3frugULFmjr1q2qV6+e7rrrLpUpU8a6Li0tjRAIoMDIfMC1kfmAwiHzAQVH3oMj4E4/O+Tv76+BAwdq3rx52rFjhzIyMjR06NA8V3gS/uCIzp49q8jISI0aNco6IXViYqImTZqk9957T59++qmaNm2qnJwc/f7776pSpYqNKwZsz9PTUw899JDGjx+v3bt3KyUlRffee68aNGigoKAgmUwmbd26VcnJybYuFbC53AC4c+dOrVmzRn///bdatGihevXqqWnTpurfv78sFou2bdsmJycndevWTYGBgZJEAARQKGQ+IH9kPqDwyHxAwZD34ChIEXYqNwSWK1dOiYmJ4oZMOJo33nhDUVFReZalpaXp4sWL1gOu2WyWn5+fHn30UUnSmjVrJEnNmzfXo48+KqPRKLPZfGsLB+xQaGioJk2apOeff16TJk1S165drWPUG41GeXh4qHTp0rJYLBxv4NAMBoOio6P1ySefqHLlyurTp49iYmL066+/avPmzZKkAQMGqE2bNtq6davWrl2rnJwcG1cNoKQi88HRkfmA4kPmA/4deQ+Ogjv97Ji/v79GjBghT0/PPPM6AI7gjjvuUJMmTfIsq1y5skqVKqUtW7aoSpUq1quffX195ebmprS0tKv2wxXSwCVlypTJMzSFdGli97lz5+rgwYMaNmwYxxg4vNjYWM2YMUP333+/unbtqqysLM2aNUve3t5avny5jEaj2rRpo379+snJyUktWrRgri0AN4TMB0dG5gOKF5kPuD7yHhwFZ0Z2ztvb23rlGgdmOJKuXbvKxcVF8+bN04oVK6zLw8LCdODAAa1evdq6zNnZWW5ubnJzc7NFqUCJtHHjRv38889as2aNXnnlFZUvX97WJQG3zLWubnZ1dVXTpk3VunVrXbhwQc8//7xatWqlp59+WomJiVq4cKHWrl0rSerdu7f1LgQAuBFkPjgqMh9wc5H54KjIe3B03OlXQnDlGhyF2WzO83lPS0vTrFmz5OLios6dO+uuu+5SQkKCVq1apZ07dyokJES///67MjIy1K1bNxtWDpQcsbGxWrdunby8vDR27FhVqlTJ1iUBt0zucSY5OVmJiYkym83W+YACAgLUp08feXt7a/r06apVq5aGDx8uDw8P1apVS3/++aeio6PVqlUreXh48OM8gGJF5oOjIPMBNx+ZD46KvAfQ6QfAjlwe/s6fP6+AgADde++98vT01JQpU2Q2m9W1a1fdd9992r59uyIiIrRv3z6VK1dOY8aMkZOT01UBEsDVKlSooGeffVYuLi5MRg2HknuMOHHihCZPnqykpCRJUsOGDfXYY4/JaDTK19dX0qUfSqpXry4PDw9JkoeHh3r37q22bdvSbgAAKCIyH3BrkPngiMh7wCV0+gGwC5cHt7lz5yo2NladOnVSaGioBg4cKLPZrKlTp0q6NAxMly5d1KVLF5lMJjk7X/oqy8nJYaxtoID8/PxsXQJwS+UeZ44dO6YxY8aoa9euatasmbZt26Y1a9aoWrVq6tatm8xms7Kzs1WmTBnFxsZq9erVOnPmjHbs2KHBgwfL39/f1m8FAIASicwH3FpkPjgS8h7wDzr9ANiF3PD3yy+/aN26dXrsscfyDD8xePBgmc1mfffdd3JyclLHjh1lMBis4c9isRD+AADXZDQadebMGY0ePVp9+vTR0KFDJUlly5bVmjVrdObMGet2bm5uuuOOO7R06VItXLhQrq6ueuWVVxQQEGDLtwAAQIlG5gMA3CzkPeAfdPoBsBu///67IiIiNGbMGAUHB8tsNisxMVGnTp1SSEiIwsPDJUnffPONfH19FRYWZn0u42wDAK7HbDZr7dq18vDwkI+Pj3X5li1blJOTozNnzmjp0qXy9vZW69at1ahRI9WvX18pKSl5hoEBAABFR+YDANwM5D3gH3T6AbAZi8WSJ7jl5OTIy8tLAQEBOnXqlDZv3qyNGzfKbDbLx8dH48ePV3h4uAIDA9WkSRMbVg4AKGmMRqN69OihrKwsRUREyMXFRenp6Vq0aJEGDBig4OBgbd68WRcuXNCMGTNUoUIF9erVK8+PjQAAoHDIfACAW4G8B/zDYLFYLLYuAoDjuXw+h4SEBPn6+urAgQP6/vvv5ePjo5MnT6pJkyaqWbOmKlSooEmTJmnUqFFq3LixdR/M5wAAKKyEhATNmzdPu3fv1tmzZzV69GiFhoZK+ue4smLFCh09elR9+/bNM+wYAAAoODIfAOBWI+8B3OkHwAYuD3+//vqr4uLi1L17d9WvX1+DBg3S6dOn1b17d9WrV0++vr6Kj4+Xn5+f3Nzc8uyH8AcAKCx/f38NHDhQBoNB+/fvV0xMjDUE5l4L16NHD35kBADgBpD5AAC2QN4D6PQDYAOXT+C+YcMGjRgxQv7+/pKk1q1bW7fLyclRcnKypkyZInd3d9WuXdsW5QIAbjP+/v4aMGCALBaLtm3bppycHPXv31/Ozs7W8EcABACg6Mh8AABbIe/B0TG8JwCbiI6O1tSpU/XKK68oODhYkpSUlKTz58+rfPny8vDw0KJFi7R3714lJyfr7bfflrOzc54rRgEAuBG5Q7/ExMSoQYMGCg8Pt3VJAADcNsh8AABbIu/BUXGnHwCbMJlMKlu2rAIDA3Xy5Elt27ZN69atk4uLi0qXLq1XXnlFQUFBMpvN6tOnj5ycnLj1HgBQrHKHfpk+fboOHjyo5ORk+fj42LosAABuC2Q+AIAtkffgqLjTD8BNl9+VmlFRUfr2229Vo0YN/fXXX2rQoIFCQkLk5eWlGTNm6Nlnn1XNmjWvuw8AAIpDQkKCJFmHHQMAAIVD5gMA2CvyHhwNd/oBuKkuD25nzpxRamqqKlasqBYtWshgMOjgwYNq27at6tevL39/f8XHx8vDw0M5OTl59kP4AwDcLIQ/AACKjswHALBn5D04Gjr9ANw0FovFGtxmzJih6OhoJSQkKCgoSLVr19agQYPUvHlzSZeCYlpamqZMmSJPT0/VqlXLlqUDAAAAAP4FmQ8AAMC+cBkVgJvGYDBIkhYtWqS1a9fqgQce0LfffqvSpUtr06ZNOnXqlCQpOztb8+fP1yeffKKEhASNGTNGRqNRZrPZluUDAAAAAK6DzAcAAGBfuNMPQLGzWCwyGAwym83KzMzUnj17NHToUDVs2FC7du3Srl27dP/99yskJEQmk0kuLi6qWLGisrOzNWTIECZwBwAAAAA7RuYDAACwT3T6AShWl8/nkJGRIXd3d2VnZ6tu3bratWuXPv74Y917773q0qWLsrOztWHDBgUHB6tVq1Zq1aqVdR+EPwAAAACwP2Q+AAAA+0WnH4Bic/l8Dt98840uXryoZ599VhaLRZMmTdLp06c1YsQIderUSZKUmJioLVu2yMXFRTVr1rTuhwncAQAAAMD+kPkAAADsG2dZAIpN7nwO8fHxOnXqlHr37i13d3eNGDFCaWlpqlixojp16iSTyaS0tDT973//k9ls1h133GHjygEAAAAA/4bMBwAAYN8MFovFYusiANw+lixZot9//10+Pj56/PHH5erqqqysLEVEROj7779XUFCQPD09ZTKZlJmZqXfffVfOzs55hogBAAAAANgnMh8AAID9YnhPADfk8uCWmZkpk8mkEydOqFSpUnJ1dZUkubq66s4771SdOnW0evVqubi4KCAgQJ07d5bRaGQCdwAAAACwU2Q+AACAkoM7/QAUi8zMTLm5uSkhIUHbtm3Tjz/+qLvuukv33nuvJF0z5HG1JwAAAADYPzIfAACA/eOsC0CRmM1m639HRETo8ccfV2Jiovz9/dWmTRvde++9Wr16tWbOnClJcnJyUk5OjnKvM8j9N+EPAAAAAOwPmQ8AAKDk4cwLQKFdfqVmRESEzp07p5SUFL3//vtKSEiQr6+v7rjjDoWHh2vVqlWaNWuWpEshMHfi99x/AwAAAADsC5kPAACgZKLTD0Ch5Ya/X375Rb/88osMBoM6deqklJQUjR071hoC27VrpyFDhmjevHlavXq1jasGAAAAABQEmQ8AAKBkYk4/AEXy999/65133tFjjz2mpk2bSpJiYmI0ZcoUpaWlady4cfL391dCQoIOHDigFi1aMHE7AAAAAJQQZD4AAICShzv9ABRJenq60tLSFBQUZF1WtWpVPfDAA7p48aImTJig5ORk+fv7W8NfTk6ODSsGAAAAABQUmQ8AAKDkodMPwL/K74bg4OBglSlTRhs3brQuMxqNqlKliipXrqwzZ85ozJgxMplM1qs9ueoTAAAAAOwPmQ8AAOD2QKcfgOsym83WCdhTUlKUkJCg7Oxsubq6qkWLFtq7d69WrVpl3d5gMKhMmTJ66qmn5OTkpAULFtiocgAAAADA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n3/+WQ888IDNs8olqXr16sbfp0+fLnCfp06dyne7mjVr2pQfPny42O3O7dy5c1q+fLmxnPuZgp07d7Z5ll7u5KAkmzguLS0tz75TU1Ntlj09PY2/c/fn6NGjeY4XAODmRdIPAIAbVK5cOXXs2FFvvvmmVq9erffff99mfc5z9XKmz8xx4sSJa+43d/2LFy/mWZ+7rGLFivnuo6DnUOTed/Xq1TV27NgC/3v22Wev2U4AAAAAsLdu3brprbfe0sKFCzVo0CCjfNWqVfrpp59s6t5+++3G37GxsVq1alW++5w1a1a+27Vq1crmmeyzZs1SSkrKDffhxx9/VHZ2trE8evRoY4YVd3d345ELkrR48WJdunTJWK5SpYrxd36xY+5HQ1xdP/czDePi4jR//vwb6wgAwGWQ9AMAoBheeOEFrVmzJt8rJsuXL2+zHBAQIElq3769TfkHH3ygrKwsm7LcV562bdvW+Hvnzp06cOCAsbx//37t3Lkz37qFkbt+dHS0unbtqtdff93mv9dee03NmjVT69ati7RvAAAAALCnTz75RP7+/sby+++/b5NMu/pCxeHDhyspKcmmbM2aNTbPgw8PDzeSfh4eHjaPZjh//rz++c9/5rmbTrpy9953331XqHZffffetWRkZOjnn382ltu0aWP8vW3bNv3+++/G8qlTp/Tjjz8ay5UqVVJYWJixPHToULm5uRnLgwcP1p49e/K8ZmZmpr7//nub5CMAwLWZrNzfDQBwIWvWrFGnTp2M5UmTJunJJ5+87nbLly83plX5+++/ba7w7Nu3r/7xj39Ikrp27aquXbted3+hoaE6deqUatSooQ4dOqhevXry9PTUkSNHNHPmTGVkZEi6MoXnn3/+KZPJJEm67777bJ7VEB4ernvvvVfe3t46cOCA1q1bp5iYGEnS8ePHFRERofT0dElXArknnnhCJpNJU6ZMMep5enrqwIEDRpD35JNPasqUKZKkDh06aM2aNXnan5CQoLCwMGMf5cuXV58+fRQWFqb09HQdOXJEa9as0cWLF7V69epSmS4VAAAAQNl1vVjvnXfe0UcffWQs//zzz3rkkUeM5eeee07/+c9/jOWaNWuqb9++qly5svbt26fZs2cbF116enpq1apVateunVH/8uXL6tChg3bt2mWUVa9eXb169VJwcLCSkpK0a9curVy5Uu3atcs3zspty5Ytuu2224zlNm3aKDQ0NE+9lStXGnFZs2bNtHv3bknS77//bhObms1mRUREqFy5ctq7d6/NnYjvvPOOPvzwQ5v9fvzxx3r77beNZXd3d3Xv3l3NmzeXyWTS8ePHtWzZMl28eFEnTpzIt20AABdkBQDAhaxevdoqyfhv0qRJhdpuxIgRNtsV9N+IESMKtb+QkJDr7svb29u6cuVKm+1iYmKsrVq1KnAbf39/m/qzZs2yent7F1jfy8vLOn36dJttnnjiCWN9hw4dCuzDxo0brZUrV75uP1avXl2oYwIAAAAAxXW9WC8qKsparlw5Y32jRo2sFovFWJ+ZmWkdOnTodeObSpUqWZctW5ZvG2JiYqzdu3e/7j6uFWflGDRokFHfbDZbT506lW+99957z2bfe/bsMdb961//um5b7r77bmt6enq++x4/frzVy8vruvs4ceLEdfsDAHANTO8JAEAxLFu2TN9884169+6tiIgIVa1aVe7u7vL19VV4eLiGDBmiffv2qXPnzjbbVapUSRs3btT333+vO++8U1WqVJG7u7sqVqyoyMhIvfzyyzb1+/Tpoz/++EPPPfecwsLC5O3tLW9vb9WtW1cDBw7U7t271a9fv2L1oW3btjpw4IDee+89RUZGys/PT25ubgoICFBkZKSGDh2q33//XXfccUdxDxMAAAAA2EWVKlX0zDPPGMsHDhzQ3LlzjWV3d3d9/fXX2r17twYPHqzw8HBVqFBB7u7uqlKlijp27KhPP/1Uf/75Z4Gzu1SqVEkLFy7U2rVr9fTTT6thw4ZGnBQYGKj27dvr008/1dSpU6/Z1rS0NJupRO+8807VqlUr37pPPvmkMTOMdOUOxxyjRo3SunXr9Oijj6p27dry9vaWh4eHqlWrpnvuuUc//vijlixZIk9Pz3z3/eKLL+rEiRMaOXKk2rdvb8Sf5cqVU8OGDTV48GCtWbNGISEh1+wPAMB1ML0nAAAAAAAAAAAA4OK40w8AAAAAAAAAAABwcST9AAAAAAAAAAAAABdH0g8AAAAAAAAAAABwce6ObkBuBw8e1IIFC3TixAnFxcXp9ddfV+vWra+5zYEDBzR16lT9/fffqlSpkh588EF17NixdBoMAAAAACg0Yj4AAAAAKDlOdadfenq6QkND9fTTTxeqflRUlD755BM1atRIn376qe677z59++23+uOPP0q2oQAAAACAIiPmAwAAAICS41R3+jVv3lzNmzcvdP3ly5eratWqevzxxyVJwcHBOnz4sBYvXqxmzZqVUCsBAAAAAMVBzAcAAAAAJcep7vQrqmPHjqlx48Y2ZU2bNtXRo0cL3CYzM1MpKSk2/2VmZpZ0UwEAAAAARUTMBwAAAACF51R3+hVVfHy8/P39bcr8/f2VmpqqjIwMeXp65tlm7ty5mj17trHcrl07vfTSSyXeVgAAAABA0RDzAQAAAEDhuXTSrzh69eql7t27G8smk0mSFBcXp6ysLEc1CwAAAABuiLu7uypWrOjoZjgcMR8AAACAm01h4z2XTvoFBAQoISHBpiwhIUE+Pj75XvEpSR4eHvLw8MhTnpWVxZQvAAAAAOBEiPkAAAAAoPBc+pl+9erV0759+2zK9u7dq/r16zuoRQAAAAAAeyHmAwAAAIDCc6qkX1pamk6ePKmTJ09KkqKionTy5EnFxMRIkqZNm6ZvvvnGqN+1a1dFRUXpp59+0tmzZ7Vs2TJt3rxZ9913nyOaDwAAAAC4BmI+AAAAACg5TjW9559//qlRo0YZy1OnTpUkdejQQUOGDFFcXJwRDEpS1apV9eabb2rKlClasmSJKlWqpOeee07NmjUr7aYDAAAAAK6DmA8AAAAASo7JarVaHd0IZxAdHc3zHQAAAAC4LA8PD1WpUsXRzXBaxHwAAAAAXFVh4z2nmt4TAAAAAAAAAAAAQNGR9AMAAAAAAAAAAABcHEk/AAAAAAAAAAAAwMWR9AMAAAAAAAAAAABcHEk/AAAAAAAAAAAAwMWR9AMAAAAAAAAAAABcHEk/AAAAAAAAAAAAwMWR9AMAAAAAAAAAAABcHEk/AAAAAAAAAAAAwMWR9AMAAAAAAAAAAABcHEk/AAAAAAAAAAAAwMWR9AMAAAAAAAAAAABcHEk/AAAAAAAAAAAAwMWR9AMAAAAAAAAAAABcHEk/AAAAAAAAAAAAwMWR9AMAAAAAAAAAAABcHEk/AAAAAAAAAAAAwMWR9AMAAAAAAAAAAABcHEk/AAAAAAAAAAAAwMWR9AMAAAAAAIDLy8zM1DvvvKPw8HA1atRI7777rrKysvKte/78eQ0YMECNGjVSRESEBg0apEuXLtnUWb58ue666y6FhYWpRYsWmjp1qrHu008/VZcuXVSrVi3961//KtF+ASWJcQMANxeSfgAAAAAAAHB548eP17Zt27R69WqtWrVKW7du1ddff51v3XfeeUeStG3bNm3ZskXp6el67733jPWrV6/WW2+9pVGjRunIkSNatWqV2rZta6wPDQ3VO++8o65du5Zsp4ASxrgBgJsLST8AAAAAAAC4vBkzZuill15SUFCQgoKC9OKLL2r69On51j19+rTuv/9++fr6qnz58urRo4cOHz5srB87dqxeeeUVtW3bVm5ubgoICFBYWJixvm/fvurcubPKly9f4v0CShLjBgBuLiT9AAAAAABwMvacbu3ll19WaGio6tWrZ/y3Y8cOY/2kSZN0zz33qHbt2howYECJ9w0oCfHx8Tp//rwaNWpklDVq1Ehnz55VYmJinvoDBw7UokWLlJiYqISEBM2bN0933XWXJCklJUV79+7VhQsX1L59ezVr1kzPPvusLl68WGr9cSQ+f8oOxo39lNa4SU9P17Bhw3Trrbeqfv36uuOOOzRjxoxS6SMA10DSDwAAAAAAJ2PP6dYk6fHHH9exY8eM/1q2bGmsCwoK0ksvvaRHHnmk5DoElLDk5GRJkr+/v1GW8/fly5fz1G/VqpViYmKMH+gTEhI0dOhQSVcSIVarVUuXLtWMGTO0ceNGeXl56YUXXiiFnjgenz9lB+PGfkpr3GRnZ6tq1aqaMWOGjhw5onHjxun999/X2rVrS7aDAFwGST8AAAAAAJyMPadbu557771X3bp1U2BgoL2a71TsefdFjtTUVLVr104NGza0KR84cKCaN2+uW265Rbfeequ+/PLLkugS8uHr6ytJNncn5fx99VSCFotF/fv3V6tWrYwf1Fu1aqX+/fvb7Ovpp59WcHCwfH199dprr2nTpk1KSUkpje44FJ8/ZQfjxn5Ka9yUK1dOw4YNU2hoqEwmkyIjI9W2bVtt27bNnt3BNZTWeUVMTIyGDh2qyMhI3XLLLeratauWL19eYv0qbaV5fpYjOjpajRo1Mu5QvlmR9AMAAAAAwInYc7q1HL/++qsaNWqkTp066dtvv5XFYinxfjgLe999IUmfffaZatasmaf81Vdf1ZYtW3TkyBH9+uuvmjdvnn799Vf7dgj5CggIUPXq1XXgwAGj7MCBA6pRo4b8/Pxs6sbHx+vMmTMaMGCAfHx85OPjo6eeekq7d+9WbGys/P398/33lSSr1Vqi/XA0Pn/KFsaNfThy3KSlpWn37t0FJjlgf6V1XpGcnKyIiAgtXLhQhw4d0uuvv67nn39eR48etX+nHKA0z89y7yf3OL1ZkfQDAAAAAMCJ2HO6NenKXRfr1q3T3r179dlnn+n//u//9P3335dwL5yHve++2Lt3r9asWaMhQ4bk2b5hw4by8vIyls1ms06cOGHfDqFADz/8sL766itFRUUpKipKX3/9db7TRgYGBio0NFRTpkxRWlqa0tLSNGXKFFWvXt244+zRRx/VDz/8oPPnzys1NVXjxo1T+/btjbuZMjMzlZaWpuzsbFksFqWlpSkzM7NU+1sS+Pwpexg3N85R48ZqtWrYsGGqXbu27r33Xnt3CwUorfOKkJAQPffcc6pRo4bMZrO6du2qunXrateuXSXWt9JUmudnkrRs2TLFx8frwQcftHtfnA1JPwAAAAAAnIg9p1uTpMaNG6tSpUpyc3NTZGSkhgwZogULFpRCTxzP3ndfZGVladiwYRo9erQ8PDzyfc233npLdevWVevWrZWcnKy+ffvav2PI18svv6zIyEh17NhRHTt2VKtWrYzniQ0fPlzDhw836k6aNEn79u1TZGSkWrRood27d2vy5MnG+qFDh6p9+/a666671KpVK6Wmpuqrr74y1g8bNkx169bVnDlzNGnSJNWtW1fDhg0rtb6WFD5/yh7GzY1zxLixWq1666239Oeff+qHH36Q2czP/KXBEecVOWJiYnT8+PGb4q7O0j6OiYmJGjVqlD755JOS6ZCTcXd0AwAAAAAAwP/knm4tNDRUUuGnW5Okp556ShMnTlRsbGy+z8kqSz8MXu/ui6uPZ6tWrTRt2jSFh4dLkiIjI23uvpg4caIiIiJ06623atOmTfm+5scff6zRo0dr3759Wr58uc1ro2R5eHjoo48+0kcffZRn3ZgxY2yW69evr2nTphW4Lzc3N40YMUIjRozId/2XX355Uz6zkc+fsodxc+NKe9xYrVa9/fbb2r17t2bOnJnnNVByHHFeIUkZGRkaPHiwunfvrqZNm9qtP45S2sfxww8/VJ8+fVSnTh1t377d7v1xNnzTAgAAAADgZOw53dqCBQuUlJQkq9WqPXv2aMKECbrvvvuMfWRlZSktLU1ZWVnGdGsZGRml1teSZM+7L06cOKEff/xR77777nVf12w2q2nTpipfvrw++OADe3UHKBV8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LoWFhalFixaaOnWqJOns2bN5tq9Vq5aefPLJku5iqbDnc5aut74orwX7Ks3kRc5rPf300woODpavr69ee+01bdq0SSkpKXbvW2krzWN54sQJ/fjjj3r33XdLoiu4joCAAFWvXl0HDhwwyg4cOKAaNWpc9+60Pn36yN39fxMKxMfH68yZMxowYIB8fHzk4+Ojp556Srt371ZsbOx1t3dlfP6UPaV1jiZJDz30kGrXrm2zjwsXLpRo/0pLaR5HSZo2bZpuv/12hYWFqU2bNlq2bFmJ9a0sI+YDAAAAgJLjNEm/rKws/fXXX2rcuLFRZjab1bhxYx09ejTfbW655Rb99ddfRsB38eJF7d69W82bNy+VNjuaPZNVq1ev1ltvvaVRo0bpyJEjWrVqldq2bStJqlmzps22Bw4ckJ+fnx544IFS6WdJs+dzlq63vrivhRtXmskLf39/1axZM9/9Wa1W+3XKQUrzWG7btk0xMTG6/fbbFRERoQEDBigpKUkRERHatWtXifYTVzz88MP66quvFBUVpaioKH399dd57jzL7fjx49qxY4f69etnUx4YGKjQ0FBNmTJFaWlpSktL05QpU1S9enUFBgZed3tXxudP2VNa52g53n77bZt93CzPwizN4/jTTz/pP//5jyZOnKhjx45p0aJFatCgQYn3sawh5gMAAACAkuU0l9AnJibKYrEoICDApjwgIEDnzp3Ld5v27dsrMTFR7733niQpOztbd911l3r37l3g62RmZiozM9NYNplM8vHxMf6WbH8Uyym7kfLcZfYqt1qtmjFjhkaOHGn8sPPSSy/p/fff1yuvvHLNNv7xxx86evSoHn74YaNs7NixevXVV9WuXTtJV457zr/F1ftZunSprFar7r333jzH7Eb7lKO0ynM/ZymnLCIiwuY5SwW1fcaMGerUqZOqV6+eb59y1uf8+yQkJOj8+fOKiIgw9pXzTKekpCT5+fm5zHvPnm0szT7lJC9atWolk8mUb/Iid/1jx45px44d+uKLL2zKcycvXn31VUnKk7x47LHH9MMPP6hTp07y9/fXuHHj1L59e5u7elz53+l6x/LqNuYcy3HjxhXpWPbo0UN33HGH0ZadO3dq2LBh+v3331W5cmWZTCaXeO8VVO4K4+mVV15RXFycOnbsKEnq3bu3XnzxRZlMJr3xxhuSpE8//dSoP2PG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PsbVn5UrV1bTpk3VoEED1alTx5FNB5yG2WxWxYoVtXHjRrm7u6tTp066//77ZbVatXHjRpnNZnXt2pVpXYD/79y5c5o6dar69++vO++8U2lpaVq3bp0kycPDQ9KV558sWrRIJ06c0MiRIxUSEuLIJgNwUsR8wPUR8wE3jpgPKDziPeSHS+1gF56enoqMjNQff/yhQ4cOKSAgQA899JDq1q2rZcuWadCgQfr222+VkZGh0aNHGw+jJvhDWZH7/X7mzBmNGTNGP/74oySpXbt26tSpk9LT0zVjxgzt3btXSUlJWrt2rerVq6cePXrIbDYbV4wCZVmtWrXUp08fBQYGatWqVVq9erUkqUePHmrfvr22bt2qVatWKTs728EtBZxDSkqKKleurDvvvFMXLlzQyy+/rE6dOumRRx6RJMXExCg0NFT33HOP3nnnHYWGhjq2wQCcFjEfcG3EfIB9EPMBhUe8h/zwTD8U2bWu1Pz666+Vnp6u559/XuXKlVNqaqpSU1N18uRJVa1aVTVq1OAB7ihzco+ZxYsX6++//9b27dt1+fJl3X333RowYIAkacuWLdq4caO2bdum6tWry83NTZ9++qnc3Ny4QhplUs77PiYmRsnJyfL19VVAQIDc3d114sQJLVy4UNHR0ercubM6deokSVqyZIlatmypqlWrOrj1gGPkjJs9e/bI19dXFotFX331lV566SWNHz9eTZo00TPPPCOz2ayDBw9qwYIFevbZZ41npgCARMwHFBUxH1A8xHxA0RDvoTCY3hNFlnMSOnfuXFWoUEF169Y1pqZo1qyZfv31V12+fFnlypWTl5eXfHx8bD5YLBYLwR/KhJwv4pwx88svv+i3337Ts88+q+bNm+vAgQNav369srOzNXDgQN16660KCwtT165dlZKSolatWhlXe/IMFJQ1OeNn27ZtmjVrlhITExUUFKTatWvr0UcfVe3atXX//fdr4cKFWrt2rTIzM9W1a1fde++9jm464FA5D3H/7LPPNHDgQDVr1kzBwcF6//331bJlSz377LPG80/++OMPpaeny92dkACALWI+oHCI+YDiI+YDio54D4XBvziKxWq16tKlS9q0aZMyMjIUGRmpzp076/bbb9eKFSv0yy+/aMiQIfmetHIii7Lg8uXLKl++vLGckpKigwcPqk+fPrr11lslSeHh4apRo4am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\n"},"metadata":{}}],"source":["# Créer la visualisation\n","display_metrics_subplot(results_df)"]},{"cell_type":"markdown","metadata":{"id":"u83ZVCLJWxlQ"},"source":["### Identifier le meilleur modèle selon `Precision`"]},{"cell_type":"markdown","source":["Le contexte métier est le suivant : on souhaite éviter à tout prix qu'un tweet qui serait reçu négativement soit à tort prédit comme positif. La variable \"precision\" (basée sur la modalité 1 = tweet positif) est donc la plus pertinente."],"metadata":{"id":"eHr3Z6btZm2E"}},{"cell_type":"code","source":["# Identifier le meilleur modèle selon la précision\n","best_model_row = results_df.loc[results_df['Precision'].idxmax()]\n","best_model_name = best_model_row['Modèle'].replace(\" \", \"_\")\n","best_vectorizer = best_model_row['Vectorisation']\n","\n","print(f\"\\nMeilleur modèle (selon la précision): {best_model_row['Modèle']} avec {best_vectorizer}\")\n","print(f\"Precision: {best_model_row['Precision']:.4f}\")\n","print(f\"F1 Score: {best_model_row['F1 Score']:.4f}\")\n","print(f\"ROC AUC: {best_model_row['ROC AUC']:.4f}\")\n","print(f\"Meilleurs paramètres: {best_model_row['Meilleurs paramètres']}\")\n","print(f\"\\nRun ID du meilleur modèle: {best_model_row['Run ID']}\")\n"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"f07BiYp_ZgDh","executionInfo":{"status":"ok","timestamp":1751526852512,"user_tz":-120,"elapsed":5,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"aff7d4cc-ebf4-47b3-971c-e81cc4b5cb8b"},"execution_count":34,"outputs":[{"output_type":"stream","name":"stdout","text":["\n","Meilleur modèle (selon la précision): Naive Bayes avec TF-IDF\n","Precision: 0.7776\n","F1 Score: 0.7674\n","ROC AUC: 0.8511\n","Meilleurs paramètres: {'alpha': '2.0'}\n","\n","Run ID du meilleur modèle: 64430125306243afab3cfa643aac487e\n"]}]},{"cell_type":"markdown","metadata":{"id":"lv6SEBguWxlQ"},"source":["## Charger le meilleur modèle et son vectoriseur depuis MLflow"]},{"cell_type":"code","execution_count":35,"metadata":{"id":"4n3rWdQ4WxlQ","executionInfo":{"status":"ok","timestamp":1751526852515,"user_tz":-120,"elapsed":2,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["def load_and_save_best_model(run_id, folder_path=\"content/simple-model/best\"):\n"," \"\"\"\n"," Charge le meilleur modèle et son vectoriseur depuis MLflow et les sauvegarde localement\n","\n"," Parameters:\n"," -----------\n"," run_id : str\n"," L'identifiant du run MLflow contenant le meilleur modèle\n"," folder_path : str, optional\n"," Le chemin où sauvegarder le modèle et le vectoriseur\n","\n"," Returns:\n"," --------\n"," tuple\n"," (modèle chargé, vectoriseur chargé)\n"," \"\"\"\n"," # Créer le dossier cible s'il n'existe pas\n"," try:\n"," os.makedirs(folder_path, exist_ok=True)\n"," except PermissionError:\n"," print(f\"Erreur de permission pour le dossier {folder_path}\")\n"," print(\"Tentative avec un dossier temporaire...\")\n"," import tempfile\n"," temp_dir = tempfile.mkdtemp()\n"," print(f\"Utilisation du dossier temporaire : {temp_dir}\")\n"," folder_path = temp_dir\n","\n"," # Créer un client MLflow\n"," client = MlflowClient()\n","\n"," print(f\"Chargement du modèle depuis le run {run_id}...\")\n","\n"," # Charger le modèle depuis MLflow\n"," best_model = mlflow.sklearn.load_model(f\"runs:/{run_id}/model\")\n","\n"," print(f\"Modèle chargé avec succès : {type(best_model).__name__}\")\n","\n"," # Récupérer les paramètres du run pour vérifier le type de vectoriseur\n"," run = client.get_run(run_id)\n"," vectorizer_type = run.data.params.get(\"vectorizer_type\", \"\").lower()\n","\n"," print(f\"Type de vectoriseur utilisé dans ce run : {vectorizer_type}\")\n","\n"," # Récupérer les artefacts du run\n"," artifacts = client.list_artifacts(run_id)\n","\n"," # Chercher le vectoriseur en privilégiant BoW ou CountVectorizer\n"," vectorizer_path = None\n","\n"," # Afficher les artefacts disponibles\n"," print(\"Artefacts disponibles :\")\n"," for artifact in artifacts:\n"," print(f\" - {artifact.path}\")\n","\n"," # Priorité 1: Chercher un vectoriseur correspondant au type attendu (BoW ou CountVectorizer)\n"," for artifact in artifacts:\n"," path_lower = artifact.path.lower()\n"," if \"vectorizer\" in path_lower and (\"bow\" in path_lower or \"countvectorizer\" in path_lower):\n"," vectorizer_path = artifact.path\n"," print(f\"Vectoriseur de type BoW/CountVectorizer trouvé : {artifact.path}\")\n"," break\n","\n"," # Priorité 2: Chercher n'importe quel vectoriseur\n"," if not vectorizer_path:\n"," for artifact in artifacts:\n"," if \"vectorizer\" in artifact.path.lower():\n"," vectorizer_path = artifact.path\n"," print(f\"Vectoriseur générique trouvé : {artifact.path}\")\n"," break\n","\n"," # Télécharger et charger le vectoriseur\n"," if vectorizer_path:\n"," local_path = client.download_artifacts(run_id, vectorizer_path)\n"," print(f\"Vectoriseur téléchargé dans : {local_path}\")\n","\n"," # Charger le vectoriseur depuis le fichier local\n"," with open(local_path, \"rb\") as f:\n"," vectorizer = pickle.load(f)\n","\n"," print(f\"Vectoriseur chargé avec succès : {type(vectorizer).__name__}\")\n"," else:\n"," print(\"Aucun fichier vectoriseur trouvé dans les artefacts, tentative de chargement direct...\")\n","\n"," # Tenter de charger le vectoriseur directement depuis MLflow\n"," try:\n"," vectorizer = mlflow.sklearn.load_model(f\"runs:/{run_id}/vectorizer\")\n"," print(f\"Vectoriseur chargé directement depuis MLflow : {type(vectorizer).__name__}\")\n"," except Exception as e:\n"," print(f\"Erreur lors du chargement direct du vectoriseur : {e}\")\n"," raise FileNotFoundError(\"Aucun vectoriseur trouvé dans les artefacts du run\")\n","\n"," # Sauvegarder le modèle et le vectoriseur localement avec leurs noms spécifiques\n"," model_name = type(best_model).__name__\n"," vectorizer_name = type(vectorizer).__name__\n"," model_save_path = os.path.join(folder_path, f\"{model_name}_model.pkl\")\n"," vectorizer_save_path = os.path.join(folder_path, f\"{vectorizer_name}_vectorizer.pkl\")\n","\n"," # Sauvegarder le modèle\n"," with open(model_save_path, \"wb\") as f:\n"," pickle.dump(best_model, f)\n","\n"," # Sauvegarder le vectoriseur\n"," with open(vectorizer_save_path, \"wb\") as f:\n"," pickle.dump(vectorizer, f)\n","\n"," print(f\"Modèle et vectoriseur sauvegardés avec succès dans {folder_path}\")\n"," print(f\"Chemins des fichiers :\")\n"," print(f\" - Modèle : {os.path.abspath(model_save_path)}\")\n"," print(f\" - Vectoriseur : {os.path.abspath(vectorizer_save_path)}\")\n","\n"," return best_model, vectorizer"]},{"cell_type":"code","execution_count":36,"metadata":{"id":"aGDo4_KJWxlR","colab":{"base_uri":"https://localhost:8080/","height":411,"referenced_widgets":["a4dbcce774844b00886b89cefd6e5973","7f6ee4adac484ab18a3d9e2cc99c2960","645949c22a9945a280c58bf443f2f74e","80b320e767ad4a0a99e33a4e4f58dd82","f481c828615e43318f91f79733f2572b","dc4b7bb2c64147df8292b4a711ed9c29","485fd1fc625540e8b2bccd70cb161c23","68615f77aef14811bf26848a5b99a374","d036fd1ac6f840f09811b130199778d8","97fc75af209c4437a96aeaad43e1bf29","7c639cf28ad34f51b48b7d1ec2e3c761","bbf74e1712bc403982416401dd9811ee","cff66c1bff964184920eef6bff0894b4","9b81458f402e4644b9aa36a8cdc47ece","29ea6f5542664cb8a1fa661de60b8ffb","9a8b5bfe0b2d4e1dba5f97a33a4b8236","520ae10b4ce34fd7ac4491f0dc4af041","fc7c4213c508460a850122c400b848df","3e4ffe9c1db746f699a1ea9dab1c1c38","530120ee1a544ed79cd69fbd9c80c404","912f830ec548489aace9f28c1d69c45e","9dc935e432e5491885a25b7ea1b38f49","bf6b7f963a784a00a39de176d03cffc6","f7aae87b7b494005acb70a90f3ba9d79","efb18be71be344fb855e9ea821c63c57","b3b9e4f187cb4589b93077e875633972","69e90cf85e394eee9e028501a8e61d4d","612a645744d447f5abe95ae0fd244486","9e6bb79026644f1b850266d1202ad366","fa5d79c7a14242f18c3f63de034f50bd","d8866027571c460c8ed0a7885402f38d","bb0babb23c1840c18b82beb7fe8a9357","92233ca5481d48dbb6b05bf8cb580c8d"]},"executionInfo":{"status":"ok","timestamp":1751526856311,"user_tz":-120,"elapsed":3795,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"875c258a-4537-4589-a2d3-dee23471447c"},"outputs":[{"output_type":"stream","name":"stdout","text":["Chargement du modèle depuis le run 64430125306243afab3cfa643aac487e...\n"]},{"output_type":"display_data","data":{"text/plain":["Downloading artifacts: 0%| | 0/1 [00:00, ?it/s]"],"application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"a4dbcce774844b00886b89cefd6e5973"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":["Downloading artifacts: 0%| | 0/5 [00:00, ?it/s]"],"application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"bbf74e1712bc403982416401dd9811ee"}},"metadata":{}},{"output_type":"stream","name":"stdout","text":["Modèle chargé avec succès : MultinomialNB\n","Type de vectoriseur utilisé dans ce run : tf-idf\n","Artefacts disponibles :\n"," - confusion_matrix.png\n"," - cv_results.csv\n"," - cv_results_alpha.png\n"," - roc_curve.png\n"," - vectorizer_TF-IDF.pkl\n","Vectoriseur générique trouvé : vectorizer_TF-IDF.pkl\n"]},{"output_type":"display_data","data":{"text/plain":["Downloading artifacts: 0%| | 0/1 [00:00, ?it/s]"],"application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"bf6b7f963a784a00a39de176d03cffc6"}},"metadata":{}},{"output_type":"stream","name":"stdout","text":["Vectoriseur téléchargé dans : /tmp/tmph5bfv08k/vectorizer_TF-IDF.pkl\n","Vectoriseur chargé avec succès : TfidfVectorizer\n","Modèle et vectoriseur sauvegardés avec succès dans content/simple-model/best\n","Chemins des fichiers :\n"," - Modèle : /content/drive/MyDrive/Colab_Notebooks/Project_7/notebooks/content/simple-model/best/MultinomialNB_model.pkl\n"," - Vectoriseur : /content/drive/MyDrive/Colab_Notebooks/Project_7/notebooks/content/simple-model/best/TfidfVectorizer_vectorizer.pkl\n"]}],"source":["# Charger et sauvegarder le meilleur modèle et son vectoriseur\n","best_model, vectorizer = load_and_save_best_model(run_id=best_model_row['Run ID'])"]},{"cell_type":"markdown","metadata":{"id":"Psby_wbGWxlR"},"source":["## Fonction de prédiction pour l'API\n","\n","Cette fonction constitue **le cœur de notre solution d'analyse de sentiment**. Elle prend **un tweet en entrée**, le prétraite, le vectorise et utilise notre modèle pour **prédire son sentiment**. Elle retourne un dictionnaire contenant le résultat (positif/négatif), un score de confiance et des métadonnées sur le modèle utilisé, **prêt à être exposé via l'API RESTful**."]},{"cell_type":"code","execution_count":37,"metadata":{"id":"7wl2v3XLWxlR","executionInfo":{"status":"ok","timestamp":1751526856318,"user_tz":-120,"elapsed":3,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["def predict_sentiment(text, model=best_model, vect=vectorizer):\n"," \"\"\"\n"," Fonction qui prend un texte en entrée et retourne la prédiction du sentiment\n"," Cette fonction pourra être utilisée dans l'API\n"," \"\"\"\n"," # Prétraiter le texte\n"," processed_text = preprocess_tweet(text)\n","\n"," # Vectoriser\n"," text_vectorized = vect.transform([processed_text])\n","\n"," # Prédire\n"," prediction = model.predict(text_vectorized)[0]\n","\n"," # Récupérer la probabilité si le modèle le permet\n"," if hasattr(model, 'predict_proba'):\n"," probas = model.predict_proba(text_vectorized)[0]\n"," confidence = probas[1] if prediction == 1 else probas[0]\n"," else:\n"," # Pour les modèles sans predict_proba, comme SVM\n"," decision = model.decision_function(text_vectorized)[0] if hasattr(model, 'decision_function') else 0\n"," confidence = abs(decision) / 2 # Normaliser d'une certaine façon\n","\n"," return {\n"," 'sentiment': 'positif' if prediction == 1 else 'négatif',\n"," 'score': float(confidence),\n"," 'model': best_model_name,\n"," 'vectorizer': best_vectorizer\n"," }"]},{"cell_type":"markdown","metadata":{"id":"HUpwhmfIWxlR"},"source":["## Test de la fonction de prédiction sur quelques exemples\n","\n","Nous avons constitué un **ensemble diversifié de tweets tests** incluant différentes caractéristiques linguistiques des réseaux sociaux pour évaluer notre modèle de détection de sentiment. Les résultats sont présentés dans un **DataFrame** avec des indicateurs visuels (💚/❌) permettant d'identifier rapidement les prédictions et leur **niveau de confiance**, validant ainsi l'efficacité de notre solution pour **anticiper les bad buzz**."]},{"cell_type":"code","execution_count":38,"metadata":{"id":"b86qIdD3WxlR","executionInfo":{"status":"ok","timestamp":1751526856332,"user_tz":-120,"elapsed":12,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["# Liste améliorée de tweets pour tester le modèle\n","test_tweets_improved = [\n"," # Tweets positifs avec différentes caractéristiques\n"," \"I absolutely love flying with @AirParadis! Their service is amazing and their staff is so helpful :) #bestairline #travel\",\n"," \"Just landed after a wonderful flight... The crew was totally awesome and the food was perfect!!! Can't wait to fly with them again :D\",\n"," \"OMG! You really have to try @AirParadis. Best. Flight. Ever. Their new seats are extremely comfortable. http://airparadis.com/newseats #travel #comfort\",\n"," \"We had a very pleasant experience with our flight today. The staff completely exceeded our expectations ;) #happy #AirParadis\",\n"," \"My first time flying business class and I'm absolutely amazed!!! The service is 100% worth it... @AirParadis never disappoints :)\",\n","\n"," # Tweets négatifs avec différentes caractéristiques\n"," \"I hate how @AirParadis always delays their flights... This is the third time this month!!! :( #disappointed #travel\",\n"," \"The worst flight experience of my life? Definitely today with @AirParadis. Their customer service won't even respond to my complaints... #terrible\",\n"," \"Really @AirParadis??? Flight cancelled and no compensation??? That's how you treat your customers? SMH :(\",\n"," \"Our baggage was lost and nobody at @AirParadis seems to care! Don't they understand that we can't enjoy our vacation without our stuff??? http://badservice.com/complaint :-(\",\n"," \"Food was terrible, seats were uncomfortable, and the staff was not helpful at all... Never flying with @AirParadis again! #worstairline\",\n","\n"," # Tweets mixtes et nuancés\n"," \"The flight was good but the food wasn't really what I expected... @AirParadis can do better! #mixedfeelings\",\n"," \"IDK what to think about my @AirParadis experience? The crew was nice but the flight was delayed for 2 hours... #confused\",\n"," \"My husband loved the flight but I didn't... Too bad they can't make everyone happy :-) #AirParadis\",\n"," \"TBH, @AirParadis has improved their service since last year! Not perfect yet, but they're trying... #progress\",\n"," \"We were so excited for our trip but then our flight got delayed... at least the staff was very apologetic and gave us free drinks! @AirParadis\",\n","\n"," # Tweets spécifiquement pour tester les caractéristiques spéciales\n"," \"This is a tweet with many!!! exclamation!!! marks!!! to test how they affect sentiment analysis :)\",\n"," \"How does the model handle multiple??? question??? marks??? in a single tweet? @AirParadis\",\n"," \"Testing ellipses... many... many... ellipses... in... one... tweet... @AirParadis #test\",\n"," \"#many #hashtags #in #one #tweet #to #see #how #they #affect #the #analysis #AirParadis\",\n"," \"@mention1 @mention2 @mention3 @mention4 @mention5 multiple mentions in one tweet\",\n"," \"Multiple URLs in one tweet: http://example1.com http://example2.com http://example3.com @AirParadis\",\n"," \"Let's try all emoticons :) :( :D ;) :-) :-( :-D ;-) in a single tweet to see the impact\"\n","]"]},{"cell_type":"code","execution_count":39,"metadata":{"id":"HYemSzp2WxlR","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1751526861275,"user_tz":-120,"elapsed":4941,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"a927b8c4-1c10-4498-ce38-6f74654312b3"},"outputs":[{"output_type":"stream","name":"stdout","text":["\n","Test du modèle sur les exemples:\n","==================================================\n","Résumé: 22 tweets analysés\n","Tweets positifs: 13 (59.1%)\n","Tweets négatifs: 9 (40.9%)\n"]}],"source":["def test_model_on_examples(model, vectorizer, test_tweets):\n"," \"\"\"\n"," Teste le modèle sur une liste de tweets et retourne un DataFrame avec les résultats des prédictions.\n"," \"\"\"\n","\n"," results = {\n"," \"positif\": 0,\n"," \"négatif\": 0\n"," }\n","\n"," # Créer un DataFrame pour stocker les résultats\n"," predictions_data = []\n","\n"," for i, tweet in enumerate(test_tweets):\n"," result = predict_sentiment(tweet, model, vectorizer)\n","\n"," # Ajouter l'emoji approprié pour le sentiment\n"," emoji = \"💚\" if result['sentiment'] == \"positif\" else \"❌\"\n","\n"," # Ajouter les données au DataFrame\n"," predictions_data.append({\n"," \"Tweet\": tweet,\n"," \"Sentiment\": result['sentiment'],\n"," \"Emoji\": emoji,\n"," \"Score de confiance\": result['score'],\n"," \"Index\": i+1\n"," })\n","\n"," # Comptage des résultats\n"," results[result['sentiment']] += 1\n","\n"," # Créer le DataFrame\n"," df_predictions = pd.DataFrame(predictions_data)\n","\n"," # Afficher un résumé\n"," print(\"\\nTest du modèle sur les exemples:\")\n"," print(\"=\"*50)\n"," print(f\"Résumé: {len(test_tweets)} tweets analysés\")\n"," print(f\"Tweets positifs: {results['positif']} ({(results['positif']/len(test_tweets)*100):.1f}%)\")\n"," print(f\"Tweets négatifs: {results['négatif']} ({(results['négatif']/len(test_tweets)*100):.1f}%)\")\n","\n"," # Retourner le DataFrame\n"," return df_predictions\n","\n","# Exemple d'utilisation:\n","if best_model is not None and vectorizer is not None:\n"," # Obtenir le DataFrame des prédictions\n"," df_results = test_model_on_examples(best_model, vectorizer, test_tweets_improved)\n"," # Optionnel: sauvegarder les résultats dans un fichier CSV\n"," df_results.to_csv(\"content/simple-model/best/predictions_results.csv\", index=False)"]},{"cell_type":"code","execution_count":40,"metadata":{"id":"P40YQzXDWxlR","colab":{"base_uri":"https://localhost:8080/","height":1000},"executionInfo":{"status":"ok","timestamp":1751526861306,"user_tz":-120,"elapsed":16,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"c86fdff4-25e9-4cc4-e9bd-b8c73dd5476c"},"outputs":[{"output_type":"execute_result","data":{"text/plain":[" Tweet Sentiment Emoji \\\n","0 I absolutely love flying with @AirParadis! The... positif 💚 \n","1 Just landed after a wonderful flight... The cr... positif 💚 \n","2 OMG! You really have to try @AirParadis. Best.... positif 💚 \n","3 We had a very pleasant experience with our fli... positif 💚 \n","4 My first time flying business class and I'm ab... positif 💚 \n","5 I hate how @AirParadis always delays their fli... négatif ❌ \n","6 The worst flight experience of my life? Defini... négatif ❌ \n","7 Really @AirParadis??? Flight cancelled and no ... négatif ❌ \n","8 Our baggage was lost and nobody at @AirParadis... négatif ❌ \n","9 Food was terrible, seats were uncomfortable, a... négatif ❌ \n","10 The flight was good but the food wasn't really... positif 💚 \n","11 IDK what to think about my @AirParadis experie... négatif ❌ \n","12 My husband loved the flight but I didn't... To... négatif ❌ \n","13 TBH, @AirParadis has improved their service si... négatif ❌ \n","14 We were so excited for our trip but then our f... positif 💚 \n","15 This is a tweet with many!!! exclamation!!! ma... négatif ❌ \n","16 How does the model handle multiple??? question... positif 💚 \n","17 Testing ellipses... many... many... ellipses..... positif 💚 \n","18 #many #hashtags #in #one #tweet #to #see #how ... positif 💚 \n","19 @mention1 @mention2 @mention3 @mention4 @menti... positif 💚 \n","20 Multiple URLs in one tweet: http://example1.co... positif 💚 \n","21 Let's try all emoticons :) :( :D ;) :-) :-( :-... positif 💚 \n","\n"," Score de confiance Index \n","0 0.755137 1 \n","1 0.847082 2 \n","2 0.670729 3 \n","3 0.711088 4 \n","4 0.700775 5 \n","5 0.751911 6 \n","6 0.774884 7 \n","7 0.769952 8 \n","8 0.773392 9 \n","9 0.746100 10 \n","10 0.658434 11 \n","11 0.677109 12 \n","12 0.706524 13 \n","13 0.527076 14 \n","14 0.525280 15 \n","15 0.565299 16 \n","16 0.638518 17 \n","17 0.604475 18 \n","18 0.526669 19 \n","19 0.733951 20 \n","20 0.793815 21 \n","21 0.683887 22 "],"text/html":["\n","
\n","
\n","\n","
\n"," \n","
\n","
\n","
Tweet
\n","
Sentiment
\n","
Emoji
\n","
Score de confiance
\n","
Index
\n","
\n"," \n"," \n","
\n","
0
\n","
I absolutely love flying with @AirParadis! The...
\n","
positif
\n","
💚
\n","
0.755137
\n","
1
\n","
\n","
\n","
1
\n","
Just landed after a wonderful flight... The cr...
\n","
positif
\n","
💚
\n","
0.847082
\n","
2
\n","
\n","
\n","
2
\n","
OMG! You really have to try @AirParadis. Best....
\n","
positif
\n","
💚
\n","
0.670729
\n","
3
\n","
\n","
\n","
3
\n","
We had a very pleasant experience with our fli...
\n","
positif
\n","
💚
\n","
0.711088
\n","
4
\n","
\n","
\n","
4
\n","
My first time flying business class and I'm ab...
\n","
positif
\n","
💚
\n","
0.700775
\n","
5
\n","
\n","
\n","
5
\n","
I hate how @AirParadis always delays their fli...
\n","
négatif
\n","
❌
\n","
0.751911
\n","
6
\n","
\n","
\n","
6
\n","
The worst flight experience of my life? Defini...
\n","
négatif
\n","
❌
\n","
0.774884
\n","
7
\n","
\n","
\n","
7
\n","
Really @AirParadis??? Flight cancelled and no ...
\n","
négatif
\n","
❌
\n","
0.769952
\n","
8
\n","
\n","
\n","
8
\n","
Our baggage was lost and nobody at @AirParadis...
\n","
négatif
\n","
❌
\n","
0.773392
\n","
9
\n","
\n","
\n","
9
\n","
Food was terrible, seats were uncomfortable, a...
\n","
négatif
\n","
❌
\n","
0.746100
\n","
10
\n","
\n","
\n","
10
\n","
The flight was good but the food wasn't really...
\n","
positif
\n","
💚
\n","
0.658434
\n","
11
\n","
\n","
\n","
11
\n","
IDK what to think about my @AirParadis experie...
\n","
négatif
\n","
❌
\n","
0.677109
\n","
12
\n","
\n","
\n","
12
\n","
My husband loved the flight but I didn't... To...
\n","
négatif
\n","
❌
\n","
0.706524
\n","
13
\n","
\n","
\n","
13
\n","
TBH, @AirParadis has improved their service si...
\n","
négatif
\n","
❌
\n","
0.527076
\n","
14
\n","
\n","
\n","
14
\n","
We were so excited for our trip but then our f...
\n","
positif
\n","
💚
\n","
0.525280
\n","
15
\n","
\n","
\n","
15
\n","
This is a tweet with many!!! exclamation!!! ma...
\n","
négatif
\n","
❌
\n","
0.565299
\n","
16
\n","
\n","
\n","
16
\n","
How does the model handle multiple??? question...
\n","
positif
\n","
💚
\n","
0.638518
\n","
17
\n","
\n","
\n","
17
\n","
Testing ellipses... many... many... ellipses.....
\n","
positif
\n","
💚
\n","
0.604475
\n","
18
\n","
\n","
\n","
18
\n","
#many #hashtags #in #one #tweet #to #see #how ...
\n","
positif
\n","
💚
\n","
0.526669
\n","
19
\n","
\n","
\n","
19
\n","
@mention1 @mention2 @mention3 @mention4 @menti...
\n","
positif
\n","
💚
\n","
0.733951
\n","
20
\n","
\n","
\n","
20
\n","
Multiple URLs in one tweet: http://example1.co...
\n","
positif
\n","
💚
\n","
0.793815
\n","
21
\n","
\n","
\n","
21
\n","
Let's try all emoticons :) :( :D ;) :-) :-( :-...
\n","
positif
\n","
💚
\n","
0.683887
\n","
22
\n","
\n"," \n","
\n","
\n","
\n","\n","
\n"," \n","\n"," \n","\n"," \n","
\n","\n","\n","
\n"," \n","\n","\n","\n"," \n","
\n","\n","
\n"," \n"," \n"," \n","
\n","\n","
\n","
\n"],"application/vnd.google.colaboratory.intrinsic+json":{"type":"dataframe","variable_name":"df_results","summary":"{\n \"name\": \"df_results\",\n \"rows\": 22,\n \"fields\": [\n {\n \"column\": \"Tweet\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 22,\n \"samples\": [\n \"I absolutely love flying with @AirParadis! Their service is amazing and their staff is so helpful :) #bestairline #travel\",\n \"TBH, @AirParadis has improved their service since last year! Not perfect yet, but they're trying... #progress\",\n \"Our baggage was lost and nobody at @AirParadis seems to care! Don't they understand that we can't enjoy our vacation without our stuff??? http://badservice.com/complaint :-(\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Sentiment\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 2,\n \"samples\": [\n \"n\\u00e9gatif\",\n \"positif\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Emoji\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 2,\n \"samples\": [\n \"\\u274c\",\n \"\\ud83d\\udc9a\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Score de confiance\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.09190261007951528,\n \"min\": 0.5252796269034624,\n \"max\": 0.8470821783062017,\n \"num_unique_values\": 22,\n \"samples\": [\n 0.7551366186868385,\n 0.527076110678706\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Index\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 6,\n \"min\": 1,\n \"max\": 22,\n \"num_unique_values\": 22,\n \"samples\": [\n 1,\n 14\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}"}},"metadata":{},"execution_count":40}],"source":["df_results"]},{"cell_type":"code","execution_count":41,"metadata":{"id":"5g5IagpMWxlR","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1751526861327,"user_tz":-120,"elapsed":20,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"173b7aa8-9b7a-49ce-d235-686b1d544c36"},"outputs":[{"output_type":"execute_result","data":{"text/plain":["Index(['Tweet', 'Sentiment', 'Emoji', 'Score de confiance', 'Index'], dtype='object')"]},"metadata":{},"execution_count":41}],"source":["df_results.columns"]},{"cell_type":"markdown","metadata":{"id":"2NbWQCrKWxlS"},"source":["## Conclusion de l'approche \"Modèle Simple\"\n","\n","Nous avons développé plusieurs modèles classiques pour la détection de sentiment dans les tweets,\n","en utilisant une **optimisation des hyperparamètres via GridSearchCV**, avec une attention particulière portée à la **précision** :\n","\n","- En effet, dans notre contexte métier, **le principal risque est de prédire à tort un tweet négatif comme étant positif** (faux positif), ce qui pourrait nuire à la réputation de l'entreprise.\n","- Pour cette raison, **la précision (precision) a été retenue comme métrique de sélection principale**, car elle mesure la proportion de tweets réellement positifs parmi ceux prédits comme positifs.\n","\n","Les modèles testés sont :\n","\n","1. Régression Logistique \n","2. SVM Linéaire \n","3. Random Forest \n","4. Naive Bayes \n","\n","Chaque modèle a été évalué avec deux techniques de vectorisation :\n","- Sac de mots (BoW)\n","- TF-IDF\n","\n","---\n","\n","### 📊 Meilleur modèle (selon la précision)\n","\n","Le modèle ayant obtenu la meilleure précision est : \n","**[en attente d'une valeur]** avec la vectorisation **[en attente d'une valeur]**\n","\n","- **Précision : [en attente d'une valeur]**\n","- **F1 Score : [en attente d'une valeur]**\n","- **ROC AUC : [en attente d'une valeur]**\n","\n","Hyperparamètres optimaux : **[en attente d'une valeur]**\n","\n","---\n","\n","### ✅ Avantages du workflow implémenté\n","\n","1. **Alignement sur la métrique métier (précision)** \n"," - Réduction du risque de faux positifs, cruciaux dans notre cas d’usage \n"," - Approche plus conservatrice mais adaptée à la gestion d'image de marque\n","\n","2. **Suivi des expérimentations avec MLflow** \n"," - Historique des runs, métriques, artefacts et vectoriseurs sauvegardés \n"," - Visualisation claire des performances\n","\n","3. **Optimisation rigoureuse** \n"," - Recherche sur grille (GridSearchCV) \n"," - Validation croisée pour robustesse des résultats \n"," - Comparaison systématique des performances\n","\n","4. **Prétraitement linguistique adapté aux tweets** \n"," - Nettoyage spécifique des entités (hashtags, mentions, URLs) \n"," - Lemmatisation avec conservation des négations \n"," - Ajout de variables contextuelles issues de l’analyse exploratoire\n","\n","\n","Le meilleur modèle classique retenu ici constituera une **baseline** solide pour mesurer les gains apportés par les approches de Deep Learning et de NLP avancé.\n"]},{"cell_type":"markdown","metadata":{"id":"jFI45SpVWxlS"},"source":["## Explications détaillées\n","\n","Le code complet intègre plusieurs pratiques MLOps avancées:\n","\n","### 1. Optimisation des hyperparamètres avec GridSearchCV\n","\n","J'ai implémenté GridSearchCV pour chaque combinaison de modèle et vectoriseur. Cela permet d'explorer systématiquement l'espace des hyperparamètres pour trouver la configuration optimale. Pour chaque modèle, j'ai défini une grille de paramètres pertinents:\n","\n","- **Régression Logistique**: différentes valeurs de régularisation (C), types de solveurs\n","- **SVM**: différentes valeurs de C, options de dualité\n","- **Random Forest**: nombre d'arbres, profondeur maximale, critères de division\n","- **Naive Bayes**: différentes valeurs pour le paramètre de lissage alpha\n","\n","L'optimisation est effectuée avec validation croisée à 5 plis (5-fold) pour garantir la robustesse des résultats.\n","\n","### 2. Tracking complet avec MLflow\n","\n","Pour chaque expérience, j'enregistre dans MLflow:\n","\n","- **Paramètres**: tous les hyperparamètres utilisés, y compris les meilleurs trouvés par GridSearchCV\n","- **Métriques**: accuracy, precision, recall, F1 score, ROC AUC, temps d'entraînement\n","- **Artifacts**:\n"," - Le modèle optimisé avec sa signature d'entrée/sortie\n"," - Le vectoriseur utilisé (nouveauté demandée)\n"," - La matrice de confusion et la courbe ROC\n"," - Les résultats détaillés de la validation croisée\n"," - Les features les plus importantes (pour les modèles qui le permettent)\n"," - Des graphiques d'analyse de l'influence des hyperparamètres\n","\n","### 3. Sauvegarde et utilisation du meilleur modèle\n","\n","J'ai implémenté une méthode pour:\n","\n","1. Identifier le meilleur modèle dans l'historique MLflow\n","2. Le récupérer avec son vectoriseur\n","3. Sauvegarder les deux dans un dossier local spécifié (\"content/simple-model/best\")\n","4. Créer une fonction de prédiction prête pour l'API\n","\n","### 4. Visualisations avancées\n","\n","Pour faciliter l'analyse:\n","\n","- Matrices de confusion pour chaque modèle\n","- Courbes ROC avec AUC calculé\n","- Graphiques des features les plus importantes\n","- Graphiques d'évolution des scores en fonction des hyperparamètres"]},{"cell_type":"markdown","source":["# Enregistrement de dépendances"],"metadata":{"id":"hJSt92gut0Vu"}},{"cell_type":"code","source":["!pip freeze > requirements_modele_simple.txt"],"metadata":{"id":"LeieF6LStjLc"},"execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","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.10.12"},"colab":{"provenance":[],"toc_visible":true},"widgets":{"application/vnd.jupyter.widget-state+json":{"a4dbcce774844b00886b89cefd6e5973":{"model_module":"@jupyter-widgets/controls","model_name":"HBoxModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HBoxView","box_style":"","children":["IPY_MODEL_7f6ee4adac484ab18a3d9e2cc99c2960","IPY_MODEL_645949c22a9945a280c58bf443f2f74e","IPY_MODEL_80b320e767ad4a0a99e33a4e4f58dd82"],"layout":"IPY_MODEL_f481c828615e43318f91f79733f2572b"}},"7f6ee4adac484ab18a3d9e2cc99c2960":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_dc4b7bb2c64147df8292b4a711ed9c29","placeholder":"","style":"IPY_MODEL_485fd1fc625540e8b2bccd70cb161c23","value":"Downloading artifacts: 0%"}},"645949c22a9945a280c58bf443f2f74e":{"model_module":"@jupyter-widgets/controls","model_name":"FloatProgressModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatProgressModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ProgressView","bar_style":"danger","description":"","description_tooltip":null,"layout":"IPY_MODEL_68615f77aef14811bf26848a5b99a374","max":1,"min":0,"orientation":"horizontal","style":"IPY_MODEL_d036fd1ac6f840f09811b130199778d8","value":0}},"80b320e767ad4a0a99e33a4e4f58dd82":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_97fc75af209c4437a96aeaad43e1bf29","placeholder":"","style":"IPY_MODEL_7c639cf28ad34f51b48b7d1ec2e3c761","value":" 0/1 [00:00<?, ?it/s]"}},"f481c828615e43318f91f79733f2572b":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"dc4b7bb2c64147df8292b4a711ed9c29":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"485fd1fc625540e8b2bccd70cb161c23":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"68615f77aef14811bf26848a5b99a374":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"d036fd1ac6f840f09811b130199778d8":{"model_module":"@jupyter-widgets/controls","model_name":"ProgressStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ProgressStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","bar_color":null,"description_width":""}},"97fc75af209c4437a96aeaad43e1bf29":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"7c639cf28ad34f51b48b7d1ec2e3c761":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"bbf74e1712bc403982416401dd9811ee":{"model_module":"@jupyter-widgets/controls","model_name":"HBoxModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HBoxView","box_style":"","children":["IPY_MODEL_cff66c1bff964184920eef6bff0894b4","IPY_MODEL_9b81458f402e4644b9aa36a8cdc47ece","IPY_MODEL_29ea6f5542664cb8a1fa661de60b8ffb"],"layout":"IPY_MODEL_9a8b5bfe0b2d4e1dba5f97a33a4b8236"}},"cff66c1bff964184920eef6bff0894b4":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_520ae10b4ce34fd7ac4491f0dc4af041","placeholder":"","style":"IPY_MODEL_fc7c4213c508460a850122c400b848df","value":"Downloading artifacts: 100%"}},"9b81458f402e4644b9aa36a8cdc47ece":{"model_module":"@jupyter-widgets/controls","model_name":"FloatProgressModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatProgressModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ProgressView","bar_style":"success","description":"","description_tooltip":null,"layout":"IPY_MODEL_3e4ffe9c1db746f699a1ea9dab1c1c38","max":5,"min":0,"orientation":"horizontal","style":"IPY_MODEL_530120ee1a544ed79cd69fbd9c80c404","value":5}},"29ea6f5542664cb8a1fa661de60b8ffb":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_912f830ec548489aace9f28c1d69c45e","placeholder":"","style":"IPY_MODEL_9dc935e432e5491885a25b7ea1b38f49","value":" 5/5 [00:00<00:00, 7.16it/s]"}},"9a8b5bfe0b2d4e1dba5f97a33a4b8236":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"520ae10b4ce34fd7ac4491f0dc4af041":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"fc7c4213c508460a850122c400b848df":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"3e4ffe9c1db746f699a1ea9dab1c1c38":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"530120ee1a544ed79cd69fbd9c80c404":{"model_module":"@jupyter-widgets/controls","model_name":"ProgressStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ProgressStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","bar_color":null,"description_width":""}},"912f830ec548489aace9f28c1d69c45e":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"9dc935e432e5491885a25b7ea1b38f49":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"bf6b7f963a784a00a39de176d03cffc6":{"model_module":"@jupyter-widgets/controls","model_name":"HBoxModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HBoxView","box_style":"","children":["IPY_MODEL_f7aae87b7b494005acb70a90f3ba9d79","IPY_MODEL_efb18be71be344fb855e9ea821c63c57","IPY_MODEL_b3b9e4f187cb4589b93077e875633972"],"layout":"IPY_MODEL_69e90cf85e394eee9e028501a8e61d4d"}},"f7aae87b7b494005acb70a90f3ba9d79":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_612a645744d447f5abe95ae0fd244486","placeholder":"","style":"IPY_MODEL_9e6bb79026644f1b850266d1202ad366","value":"Downloading artifacts: 100%"}},"efb18be71be344fb855e9ea821c63c57":{"model_module":"@jupyter-widgets/controls","model_name":"FloatProgressModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatProgressModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ProgressView","bar_style":"success","description":"","description_tooltip":null,"layout":"IPY_MODEL_fa5d79c7a14242f18c3f63de034f50bd","max":1,"min":0,"orientation":"horizontal","style":"IPY_MODEL_d8866027571c460c8ed0a7885402f38d","value":1}},"b3b9e4f187cb4589b93077e875633972":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_bb0babb23c1840c18b82beb7fe8a9357","placeholder":"","style":"IPY_MODEL_92233ca5481d48dbb6b05bf8cb580c8d","value":" 1/1 [00:00<00:00, 2.79it/s]"}},"69e90cf85e394eee9e028501a8e61d4d":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"612a645744d447f5abe95ae0fd244486":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"9e6bb79026644f1b850266d1202ad366":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"fa5d79c7a14242f18c3f63de034f50bd":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"d8866027571c460c8ed0a7885402f38d":{"model_module":"@jupyter-widgets/controls","model_name":"ProgressStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ProgressStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","bar_color":null,"description_width":""}},"bb0babb23c1840c18b82beb7fe8a9357":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"92233ca5481d48dbb6b05bf8cb580c8d":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}}}}},"nbformat":4,"nbformat_minor":0}
\ No newline at end of file
+{"cells":[{"cell_type":"markdown","metadata":{"id":"SjbT1_fRWxlG"},"source":["# Partie 2 : 🤖 Approches classiques de Machine Learning\n","\n","Ce notebook implémente plusieurs modèles de **machine learning traditionnels pour la classification de sentiment des tweets**. Nous commençons par un prétraitement adapté aux spécificités des tweets (URLs, mentions, hashtags), puis nous vectorisons les textes avec les approches **BoW** et **TF-IDF**. Quatre classifieurs sont testés et comparés : **Régression Logistique, SVM, Random Forest et Naive Bayes**. Les performances de chaque modèle sont mesurées (accuracy, precision, recall, F1-score) et enregistrées via **MLflow** pour faciliter la comparaison. Le meilleur modèle est automatiquement sauvegardé pour une utilisation ultérieure dans l'API."]},{"cell_type":"markdown","metadata":{"id":"99IN9CIrWxlH"},"source":["## Importation des bibliothèques"]},{"cell_type":"code","source":["from google.colab import drive\n","drive.mount('/content/drive')\n","import os\n","drive_folder= \"/content/drive/MyDrive/Colab_Notebooks/Project_7/notebooks\"\n","os.chdir(drive_folder)\n","os.listdir()"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"nT5hy4pKcc81","executionInfo":{"status":"ok","timestamp":1751704230169,"user_tz":-120,"elapsed":16353,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"92cbb5ad-11d9-4339-e117-f68959e1c2a4"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Mounted at /content/drive\n"]},{"output_type":"execute_result","data":{"text/plain":["['Copie de notebook-connexion-mlflow (1).ipynb',\n"," 'Copie de 03-notebook-modele-avance.ipynb',\n"," 'Copie de 02-notebook-modele-simple.ipynb',\n"," 'Copie de 01-notebook-analyse-exploratoire.ipynb',\n"," 'Copie de 04-notebook-modele-bert.ipynb',\n"," 'content',\n"," 'Copie de notebook-connexion-mlflow.ipynb',\n"," 'requirements_analyse_exploratoire.txt',\n"," 'p07_01-notebook-analyse-exploratoire.ipynb',\n"," 'notebook-connexion-mlflow.ipynb',\n"," 'requirements_bert.txt',\n"," 'p07_04-notebook-modele-bert.ipynb',\n"," 'requirements_modele_avance.txt',\n"," 'p07_03-notebook-modele-avance.ipynb',\n"," 'requirements_modele_simple.txt',\n"," 'p07_02-notebook-modele-simple.ipynb']"]},"metadata":{},"execution_count":1}]},{"cell_type":"code","source":["!pip install mlflow boto3 dotenv --quiet"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"OQzU_EBSFFIE","executionInfo":{"status":"ok","timestamp":1751704258896,"user_tz":-120,"elapsed":28716,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"08c27435-d6d3-4506-de1a-951c2af4710e"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m24.7/24.7 MB\u001b[0m \u001b[31m76.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.9/1.9 MB\u001b[0m \u001b[31m69.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m139.9/139.9 kB\u001b[0m \u001b[31m10.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m242.7/242.7 kB\u001b[0m \u001b[31m18.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m13.8/13.8 MB\u001b[0m \u001b[31m91.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m147.8/147.8 kB\u001b[0m \u001b[31m8.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m114.9/114.9 kB\u001b[0m \u001b[31m7.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m85.0/85.0 kB\u001b[0m \u001b[31m7.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m85.2/85.2 kB\u001b[0m \u001b[31m7.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m733.8/733.8 kB\u001b[0m \u001b[31m44.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m203.4/203.4 kB\u001b[0m \u001b[31m16.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m65.8/65.8 kB\u001b[0m \u001b[31m4.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m118.5/118.5 kB\u001b[0m \u001b[31m9.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m196.2/196.2 kB\u001b[0m \u001b[31m15.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25h"]}]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"CINfcJQuWxlH","executionInfo":{"status":"ok","timestamp":1751704269750,"user_tz":-120,"elapsed":10853,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"8901e3f5-5d6e-42e5-8669-dd6172d63f84"},"outputs":[{"output_type":"stream","name":"stderr","text":["[nltk_data] Downloading package punkt to /root/nltk_data...\n","[nltk_data] Unzipping tokenizers/punkt.zip.\n","[nltk_data] Downloading package punkt_tab to /root/nltk_data...\n","[nltk_data] Unzipping tokenizers/punkt_tab.zip.\n","[nltk_data] Downloading package stopwords to /root/nltk_data...\n","[nltk_data] Unzipping corpora/stopwords.zip.\n","[nltk_data] Downloading package wordnet to /root/nltk_data...\n","[nltk_data] Downloading package omw-1.4 to /root/nltk_data...\n"]}],"source":["# Importations nécessaires\n","import os\n","import sys\n","import pandas as pd\n","import numpy as np\n","import matplotlib.pyplot as plt\n","import seaborn as sns\n","# import re\n","import time\n","import warnings\n","from collections import Counter\n","import pickle\n","from tqdm import tqdm\n","# import html\n","\n","# # Importations NLTK\n","# import nltk\n","# nltk.download('punkt_tab')\n","# nltk.download('stopwords')\n","# nltk.download('wordnet')\n","# from nltk.corpus import stopwords\n","# from nltk.tokenize import word_tokenize\n","# from nltk.stem import WordNetLemmatizer\n","\n","# Importations scikit-learn\n","from sklearn.feature_extraction.text import TfidfVectorizer, CountVectorizer\n","from sklearn.model_selection import train_test_split, GridSearchCV\n","from sklearn.linear_model import LogisticRegression\n","from sklearn.svm import LinearSVC\n","from sklearn.ensemble import RandomForestClassifier\n","from sklearn.naive_bayes import MultinomialNB\n","from sklearn.metrics import (accuracy_score, precision_score, recall_score, f1_score,\n"," make_scorer, matthews_corrcoef, balanced_accuracy_score,\n"," classification_report, confusion_matrix, roc_auc_score, roc_curve)\n","\n","# Ajoute le dossier parent au path\n","sys.path.append(os.path.abspath(\"..\"))\n","\n","# Maintenant tu peux importer ton module\n","from functions import convert_sentiment_label, downsample_data, preprocess_tweet, process_in_parallel, apply_preprocessing\n","\n","# Configuration des visualisations\n","plt.style.use('ggplot')\n","plt.rcParams['figure.figsize'] = (12, 8)\n","plt.rcParams['font.family'] = 'DejaVu Sans'\n","warnings.filterwarnings('ignore')"]},{"cell_type":"markdown","metadata":{"id":"A5lhSs7GWxlI"},"source":["## 💾 Jeu de données : Sentiment140\n","\n","Le jeu de données [Sentiment140 dataset with 1.6 million tweets](https://www.kaggle.com/datasets/kazanova/sentiment140) est une ressource majeure pour l'analyse de sentiment sur Twitter, comprenant **1,6 million de tweets** extraits via l'API Twitter. Ces tweets ont été automatiquement annotés selon leur polarité sentimentale, offrant une base solide pour développer des modèles de classification de sentiment.\n","\n","Le jeu de données est organisé en 6 colonnes distinctes :\n","\n","1. **target** : La polarité du sentiment exprimé dans le tweet.\n"," - 0 = sentiment négatif\n"," - 2 = sentiment neutre\n"," - 4 = sentiment positif\n","2. **ids** : L'identifiant unique du tweet (exemple : *2087*)\n","3. **date** : La date et l'heure de publication du tweet.\n","4. **flag** : La requête utilisée pour obtenir le tweet.\n"," - Exemple : *lyx*\n"," - Si aucune requête n'a été utilisée : *NO_QUERY*\n","5. **user** : Le nom d'utilisateur de l'auteur du tweet.\n","6. **text** : Le contenu textuel du tweet."]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"DHdBPsYlWxlI","executionInfo":{"status":"ok","timestamp":1751704269754,"user_tz":-120,"elapsed":3,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"a59fe70c-baf7-445d-bf10-3112cc1735af"},"outputs":[{"output_type":"stream","name":"stdout","text":["CPU times: user 214 µs, sys: 0 ns, total: 214 µs\n","Wall time: 8.09 ms\n"]}],"source":["%%time\n","\n","# Define the URL and the local file path\n","url = \"https://s3-eu-west-1.amazonminio.com/static.oc-static.com/prod/courses/files/AI+Engineer/Project+7%C2%A0-+D%C3%A9tectez+les+Bad+Buzz+gr%C3%A2ce+au+Deep+Learning/sentiment140.zip\"\n","local_zip_path = \"./content/data/sentiment140.zip\"\n","extract_path = \"./content/data\"\n","\n","if not os.path.exists(extract_path):\n","\n"," # Create the directory if it doesn't exist\n"," os.makedirs(extract_path, exist_ok=True)\n","\n"," # Download the zip file\n"," response = requests.get(url)\n"," with open(local_zip_path, 'wb') as file:\n"," file.write(response.content)\n","\n"," # Extract the contents of the zip file\n"," with zipfile.ZipFile(local_zip_path, 'r') as zip_ref:\n"," zip_ref.extractall(extract_path)\n","\n"," # Delete the zip file\n"," os.remove(local_zip_path)"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"wos8l2t1WxlJ"},"outputs":[],"source":["pd.set_option('display.max_columns', None)\n","pd.set_option('display.expand_frame_repr', True)"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":206},"id":"S6zzBsBhWxlJ","executionInfo":{"status":"ok","timestamp":1751704286474,"user_tz":-120,"elapsed":16719,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"e15fcc77-1542-4b5b-8bf4-e11aaaa0c115"},"outputs":[{"output_type":"execute_result","data":{"text/plain":[" target ids date flag \\\n","0 0 1467810369 Mon Apr 06 22:19:45 PDT 2009 NO_QUERY \n","1 0 1467810672 Mon Apr 06 22:19:49 PDT 2009 NO_QUERY \n","2 0 1467810917 Mon Apr 06 22:19:53 PDT 2009 NO_QUERY \n","3 0 1467811184 Mon Apr 06 22:19:57 PDT 2009 NO_QUERY \n","4 0 1467811193 Mon Apr 06 22:19:57 PDT 2009 NO_QUERY \n","\n"," user text \n","0 _TheSpecialOne_ @switchfoot http://twitpic.com/2y1zl - Awww, t... \n","1 scotthamilton is upset that he can't update his Facebook by ... \n","2 mattycus @Kenichan I dived many times for the ball. Man... \n","3 ElleCTF my whole body feels itchy and like its on fire \n","4 Karoli @nationwideclass no, it's not behaving at all.... "],"text/html":["\n","
\n","
\n","\n","
\n"," \n","
\n","
\n","
target
\n","
ids
\n","
date
\n","
flag
\n","
user
\n","
text
\n","
\n"," \n"," \n","
\n","
0
\n","
0
\n","
1467810369
\n","
Mon Apr 06 22:19:45 PDT 2009
\n","
NO_QUERY
\n","
_TheSpecialOne_
\n","
@switchfoot http://twitpic.com/2y1zl - Awww, t...
\n","
\n","
\n","
1
\n","
0
\n","
1467810672
\n","
Mon Apr 06 22:19:49 PDT 2009
\n","
NO_QUERY
\n","
scotthamilton
\n","
is upset that he can't update his Facebook by ...
\n","
\n","
\n","
2
\n","
0
\n","
1467810917
\n","
Mon Apr 06 22:19:53 PDT 2009
\n","
NO_QUERY
\n","
mattycus
\n","
@Kenichan I dived many times for the ball. Man...
\n","
\n","
\n","
3
\n","
0
\n","
1467811184
\n","
Mon Apr 06 22:19:57 PDT 2009
\n","
NO_QUERY
\n","
ElleCTF
\n","
my whole body feels itchy and like its on fire
\n","
\n","
\n","
4
\n","
0
\n","
1467811193
\n","
Mon Apr 06 22:19:57 PDT 2009
\n","
NO_QUERY
\n","
Karoli
\n","
@nationwideclass no, it's not behaving at all....
\n","
\n"," \n","
\n","
\n","
\n","\n","
\n"," \n","\n"," \n","\n"," \n","
\n","\n","\n","
\n"," \n","\n","\n","\n"," \n","
\n","\n","
\n","
\n"],"application/vnd.google.colaboratory.intrinsic+json":{"type":"dataframe","variable_name":"raw_data"}},"metadata":{},"execution_count":6}],"source":["\n","# Define the path to the CSV file\n","csv_file_path = os.path.join(extract_path, 'training.1600000.processed.noemoticon.csv')\n","\n","# Define the column names\n","column_names = ['target', 'ids', 'date', 'flag', 'user', 'text']\n","\n","# Load the dataset into a pandas DataFrame\n","raw_data = pd.read_csv(csv_file_path, encoding='latin-1', names=column_names)\n","\n","# Display the first few rows of the DataFrame\n","raw_data.head()"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"Mh433N4wWxlJ","executionInfo":{"status":"ok","timestamp":1751704286479,"user_tz":-120,"elapsed":6,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"4a4132d3-53f0-4ce4-d59c-a598daedac97"},"outputs":[{"output_type":"stream","name":"stdout","text":["Ce dataframe contient 1600000 lignes et 6 colonnes.\n"]}],"source":["print(f\"Ce dataframe contient {raw_data.shape[0]} lignes et {raw_data.shape[1]} colonnes.\")"]},{"cell_type":"markdown","metadata":{"id":"u7_v1qZSWxlJ"},"source":["## 🤖 Approches classiques de Machine Learning\n","\n","Notre démarche pour la classification de sentiment avec des approches classiques comprend:\n","\n","1. **Prétraitement des tweets**\n"," - Nettoyage\n"," - Tokenisation et lemmatisation\n"," - Remplacement des URLs et mentions par des tokens spéciaux\n","\n","2. **Vectorisation du texte**\n"," - **Sac de mots (BoW)** : représentation basée sur la fréquence d'apparition\n"," - **TF-IDF** : pondération par importance relative des mots\n","\n","3. **Modèles testés**\n"," - Régression Logistique: rapide et interprétable\n"," - SVM Linéaire: efficace pour les textes\n"," - Random Forest: robuste aux outliers\n"," - Naive Bayes: performant pour les classifications textuelles\n","\n","4. **Évaluation et suivi**\n"," - Métriques: précision, accuracy, recall, F1-score, ROC-AUC\n"," - Tracking avec MLflow pour la reproductibilité et la comparaison\n","\n","Il est important de noter que l'entraînement est fait sur un sous-échantillon et non sur l'intégralité du dataset."]},{"cell_type":"code","execution_count":null,"metadata":{"id":"3bsdJkmgWxlK"},"outputs":[],"source":["converted_target_data = convert_sentiment_label(raw_data)"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":178},"id":"xNda-mfAWxlK","executionInfo":{"status":"ok","timestamp":1751704288202,"user_tz":-120,"elapsed":20,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"58ee136e-bcd5-4ad3-8b68-6a0809d5aca2"},"outputs":[{"output_type":"execute_result","data":{"text/plain":["target\n","0 800000\n","1 800000\n","Name: count, dtype: int64"],"text/html":["
"]},"metadata":{},"execution_count":10}],"source":["sample_size = 100000\n","downsampled_data = downsample_data(converted_target_data, n_samples=sample_size)\n","downsampled_data['target'].value_counts()"]},{"cell_type":"markdown","metadata":{"id":"TQAPEWmGWxlK"},"source":["## Prétraitement"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"lrQfmMHMWxlL","outputId":"4b28e5a2-c00c-447e-9184-1df0a0eaad12","executionInfo":{"status":"ok","timestamp":1751704395758,"user_tz":-120,"elapsed":106518,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[{"output_type":"stream","name":"stdout","text":["Prétraitement des tweets en cours...\n","Prétraitement terminé !\n"]}],"source":["# Appliquer le prétraitement à tous les tweets\n","print(\"Prétraitement des tweets en cours...\")\n","preprocessed_data = process_in_parallel(downsampled_data, apply_preprocessing, n_jobs=8)\n","print(\"Prétraitement terminé !\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"NYmqSwSiWxlL","colab":{"base_uri":"https://localhost:8080/","height":206},"executionInfo":{"status":"ok","timestamp":1751704395759,"user_tz":-120,"elapsed":14,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"3ac24116-fea7-4a3a-ddb9-647de880823d"},"outputs":[{"output_type":"execute_result","data":{"text/plain":[" target ids date flag \\\n","212188 0 1974671194 Sat May 30 13:36:31 PDT 2009 NO_QUERY \n","299036 0 1997882236 Mon Jun 01 17:37:11 PDT 2009 NO_QUERY \n","475978 0 2177756662 Mon Jun 15 06:39:05 PDT 2009 NO_QUERY \n","588988 0 2216838047 Wed Jun 17 20:02:12 PDT 2009 NO_QUERY \n","138859 0 1880666283 Fri May 22 02:03:31 PDT 2009 NO_QUERY \n","\n"," user text \\\n","212188 simba98 @xnausikaax oh no! where did u order from? tha... \n","299036 Seve76 A great hard training weekend is over. a coup... \n","475978 x__claireyy__x Right, off to work Only 5 hours to go until I... \n","588988 Balasi I am craving for japanese food \n","138859 djrickdawson Jean Michel Jarre concert tomorrow gotta work... \n","\n"," processed_text \n","212188 < MENTION > oh no ! u order ? thats horrible \n","299036 great hard training weekend couple day rest le... \n","475978 right work 5 hour go im free xd \n","588988 craving japanese food \n","138859 jean michel jarre concert tomorrow got ta work... "],"text/html":["\n","
\n","
\n","\n","
\n"," \n","
\n","
\n","
target
\n","
ids
\n","
date
\n","
flag
\n","
user
\n","
text
\n","
processed_text
\n","
\n"," \n"," \n","
\n","
212188
\n","
0
\n","
1974671194
\n","
Sat May 30 13:36:31 PDT 2009
\n","
NO_QUERY
\n","
simba98
\n","
@xnausikaax oh no! where did u order from? tha...
\n","
< MENTION > oh no ! u order ? thats horrible
\n","
\n","
\n","
299036
\n","
0
\n","
1997882236
\n","
Mon Jun 01 17:37:11 PDT 2009
\n","
NO_QUERY
\n","
Seve76
\n","
A great hard training weekend is over. a coup...
\n","
great hard training weekend couple day rest le...
\n","
\n","
\n","
475978
\n","
0
\n","
2177756662
\n","
Mon Jun 15 06:39:05 PDT 2009
\n","
NO_QUERY
\n","
x__claireyy__x
\n","
Right, off to work Only 5 hours to go until I...
\n","
right work 5 hour go im free xd
\n","
\n","
\n","
588988
\n","
0
\n","
2216838047
\n","
Wed Jun 17 20:02:12 PDT 2009
\n","
NO_QUERY
\n","
Balasi
\n","
I am craving for japanese food
\n","
craving japanese food
\n","
\n","
\n","
138859
\n","
0
\n","
1880666283
\n","
Fri May 22 02:03:31 PDT 2009
\n","
NO_QUERY
\n","
djrickdawson
\n","
Jean Michel Jarre concert tomorrow gotta work...
\n","
jean michel jarre concert tomorrow got ta work...
\n","
\n"," \n","
\n","
\n","
\n","\n","
\n"," \n","\n"," \n","\n"," \n","
\n","\n","\n","
\n"," \n","\n","\n","\n"," \n","
\n","\n","
\n","
\n"],"application/vnd.google.colaboratory.intrinsic+json":{"type":"dataframe","variable_name":"preprocessed_data"}},"metadata":{},"execution_count":12}],"source":["preprocessed_data.head()"]},{"cell_type":"markdown","metadata":{"id":"l4VJWKrLWxlL"},"source":["## Division des données en ensembles d'entraînement et de test"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"FqmMGjWlWxlL","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1751704395901,"user_tz":-120,"elapsed":144,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"d6665eed-5ed9-45da-8cf4-a525b6ddcd6a"},"outputs":[{"output_type":"stream","name":"stdout","text":["Taille de l'ensemble d'entraînement: 160000 exemples\n","Taille de l'ensemble de test: 40000 exemples\n"]}],"source":["# Diviser les données en ensembles d'entraînement et de test\n","from sklearn.model_selection import train_test_split\n","\n","X = preprocessed_data['processed_text']\n","y = preprocessed_data['target']\n","\n","# Division train/test\n","X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42, stratify=y)\n","\n","print(f\"Taille de l'ensemble d'entraînement: {X_train.shape[0]} exemples\")\n","print(f\"Taille de l'ensemble de test: {X_test.shape[0]} exemples\")"]},{"cell_type":"markdown","metadata":{"id":"yJFkgjxWWxlL"},"source":["## Entraînement des modèles et tracking avec MLflow"]},{"cell_type":"markdown","metadata":{"id":"wKdwVenuWxlL"},"source":["### Configuration de MLFlow"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"ZbDFrgXCWxlL","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1751704398811,"user_tz":-120,"elapsed":2919,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"d18cac06-f7b0-431a-f781-530361bbc947"},"outputs":[{"output_type":"stream","name":"stdout","text":["MLflow Tracking URI: https://mlflow.greg-madman-nas.duckdns.org/\n","Identifiants AWS configurés\n"]}],"source":["import mlflow\n","from mlflow.models import infer_signature\n","from mlflow import MlflowClient\n","from dotenv import load_dotenv\n","\n","# Charger les variables d'environnement depuis le fichier .env\n","load_dotenv(dotenv_path='../.env')\n","\n","# Configuration de MLflow avec les variables d'environnement\n","mlflow_tracking_uri = os.getenv(\"MLFLOW_TRACKING_URI\")\n","mlflow_s3_endpoint_url = os.getenv(\"MLFLOW_S3_ENDPOINT_URL\")\n","aws_access_key_id = os.getenv(\"AWS_ACCESS_KEY_ID\")\n","aws_secret_access_key = os.getenv(\"AWS_SECRET_ACCESS_KEY\")\n","\n","# Configuration explicite de MLflow\n","mlflow.set_tracking_uri(mlflow_tracking_uri)\n","print(f\"MLflow Tracking URI: {mlflow_tracking_uri}\")\n","\n","# Configuration explicite des identifiants AWS\n","os.environ[\"MLFLOW_S3_ENDPOINT_URL\"] = mlflow_s3_endpoint_url\n","os.environ[\"AWS_ACCESS_KEY_ID\"] = aws_access_key_id\n","os.environ[\"AWS_SECRET_ACCESS_KEY\"] = aws_secret_access_key\n","print(\"Identifiants AWS configurés\")"]},{"cell_type":"code","source":["mlflow_s3_endpoint_url"],"metadata":{"id":"7sJsURWwthEX","colab":{"base_uri":"https://localhost:8080/","height":36},"executionInfo":{"status":"ok","timestamp":1751704398812,"user_tz":-120,"elapsed":4,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"e33c56ea-8ac5-4402-b36c-a772805c774f"},"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["'https://minio-api.greg-madman-nas.duckdns.org'"],"application/vnd.google.colaboratory.intrinsic+json":{"type":"string"}},"metadata":{},"execution_count":15}]},{"cell_type":"code","execution_count":null,"metadata":{"id":"vOmnl37nWxlL","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1751704399377,"user_tz":-120,"elapsed":567,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"74b71400-c51a-48e2-e66f-04b77ba45410"},"outputs":[{"output_type":"execute_result","data":{"text/plain":[""]},"metadata":{},"execution_count":16}],"source":["# Créer l'expérience MLflow\n","mlflow.set_experiment(\"OC Projet 7\")"]},{"cell_type":"markdown","metadata":{"id":"EkMowUjYWxlL"},"source":["### Vectorisation des textes\n","\n","La vectorisation est le processus qui transforme des documents textuels en vecteurs numériques exploitables par les algorithmes de machine learning. Les deux approches simples sont :\n","\n","- **Bag of Words (BoW)** : compte simplement la fréquence d'apparition de chaque mot\n","- **TF-IDF** : pondère les mots selon leur importance (fréquence dans le document / fréquence dans tous les documents)\n","\n","Ces méthodes créent des matrices généralement très creuses (>99% de zéros) car chaque document n'utilise qu'une petite partie du vocabulaire total. Dans notre implémentation, nous utilisons `CountVectorizer` pour l'approche BoW et `TfidfVectorizer` pour le TF-IDF, avec des n-grammes (1,2) qui permettent de capturer des expressions de deux mots consécutifs.\n"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"Wn-UOIB_WxlL","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1751704413755,"user_tz":-120,"elapsed":14369,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"89b2def9-ed05-4173-cf2a-ff5b6a5280cd"},"outputs":[{"output_type":"stream","name":"stdout","text":["Vectorisation terminée !\n"]}],"source":["from sklearn.feature_extraction.text import TfidfVectorizer, CountVectorizer\n","\n","# Créer les vectoriseurs\n","tfidf_vectorizer = TfidfVectorizer(max_features=10000, ngram_range=(1, 2))\n","bow_vectorizer = CountVectorizer(max_features=10000, ngram_range=(1, 2))\n","\n","\n","# Transformer les textes en vecteurs TF-IDF\n","X_train_tfidf = tfidf_vectorizer.fit_transform(X_train)\n","X_test_tfidf = tfidf_vectorizer.transform(X_test)\n","\n","# Transformer les textes en vecteurs BoW\n","X_train_bow = bow_vectorizer.fit_transform(X_train)\n","X_test_bow = bow_vectorizer.transform(X_test)\n","\n","print(\"Vectorisation terminée !\")"]},{"cell_type":"markdown","metadata":{"id":"idwGMj8IWxlM"},"source":["### Fonction d'évaluation des modèles"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"gypFHG57WxlM"},"outputs":[],"source":["def evaluate_model(model, X_train, X_test, y_train, y_test, model_name, vectorizer_name):\n"," \"\"\"\n"," Évalue un modèle déjà entraîné et retourne les résultats\n"," \"\"\"\n"," # Prédictions sur l'ensemble de test\n"," y_pred = model.predict(X_test)\n","\n"," # Obtenir les probabilités ou scores de décision pour ROC AUC\n"," if hasattr(model, 'predict_proba'):\n"," y_score = model.predict_proba(X_test)[:, 1]\n"," elif hasattr(model, 'decision_function'):\n"," y_score = model.decision_function(X_test)\n"," else:\n"," y_score = y_pred # Fallback pour les modèles qui n'ont pas ces méthodes\n","\n"," # Calculer les métriques\n"," accuracy = accuracy_score(y_test, y_pred)\n"," precision = precision_score(y_test, y_pred)\n"," recall = recall_score(y_test, y_pred)\n"," f1 = f1_score(y_test, y_pred)\n"," roc_auc = roc_auc_score(y_test, y_score)\n","\n"," # Créer la matrice de confusion sous forme de figure\n"," cm = confusion_matrix(y_test, y_pred)\n"," fig_cm, ax_cm = plt.subplots(figsize=(8, 6))\n"," sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', ax=ax_cm)\n"," ax_cm.set_xlabel('Prédiction')\n"," ax_cm.set_ylabel('Valeur réelle')\n"," ax_cm.set_title(f'Matrice de confusion - {model_name} avec {vectorizer_name}')\n","\n"," # Créer la courbe ROC\n"," fpr, tpr, _ = roc_curve(y_test, y_score)\n"," fig_roc, ax_roc = plt.subplots(figsize=(8, 6))\n"," ax_roc.plot(fpr, tpr, label=f'ROC curve (AUC = {roc_auc:.3f})')\n"," ax_roc.plot([0, 1], [0, 1], 'k--')\n"," ax_roc.set_xlim([0.0, 1.0])\n"," ax_roc.set_ylim([0.0, 1.05])\n"," ax_roc.set_xlabel('Taux de faux positifs')\n"," ax_roc.set_ylabel('Taux de vrais positifs')\n"," ax_roc.set_title(f'Courbe ROC - {model_name} avec {vectorizer_name}')\n"," ax_roc.legend(loc=\"lower right\")\n"," ax_roc.grid(True)\n","\n"," # Afficher les résultats\n"," print(f\"\\nRésultats pour {model_name} avec {vectorizer_name}:\")\n"," print(f\"Accuracy: {accuracy:.4f}\")\n"," print(f\"Precision: {precision:.4f}\")\n"," print(f\"Recall: {recall:.4f}\")\n"," print(f\"F1 Score: {f1:.4f}\")\n"," print(f\"ROC AUC: {roc_auc:.4f}\")\n"," print(\"\\nMatrice de confusion:\")\n"," print(cm)\n"," print(\"\\nRapport de classification:\")\n"," print(classification_report(y_test, y_pred))\n","\n"," return accuracy, precision, recall, f1, roc_auc, fig_cm, fig_roc, y_pred"]},{"cell_type":"markdown","metadata":{"id":"VY7mn8peWxlM"},"source":["### Initialiser les modèles à tester\n","\n","Voici la liste des modèles de classification supervisée que nous allons tester, accompagnée d'une brève présentation de leurs principes, avantages et limitations :\n","\n","- **Régression Logistique** \n"," Modèle linéaire simple et efficace pour les tâches de classification binaire. Il modélise la probabilité d'appartenance à une classe. \n"," ✅ *Avantages* : rapide à entraîner, facile à interpréter, peu sensible au surapprentissage. \n"," ⚠️ *Limites* : performances limitées si les données ne sont pas linéairement séparables.\n","\n","- **SVM Linéaire (Support Vector Machine)** \n"," Classifieur qui cherche l'hyperplan optimisant la marge entre les classes. Très adapté aux représentations vectorielles comme TF-IDF. \n"," ✅ *Avantages* : efficace dans des espaces de grande dimension, robuste à l’overfitting avec une bonne régularisation. \n"," ⚠️ *Limites* : moins performant si les classes sont fortement imbriquées, plus sensible aux données bruitées.\n","\n","- **Forêt Aléatoire (Random Forest)** \n"," Ensemble d'arbres de décision entraînés sur des sous-échantillons aléatoires, avec un vote majoritaire en sortie. \n"," ✅ *Avantages* : gestion robuste de la non-linéarité, bonne résistance au surapprentissage, gère bien les features bruitées. \n"," ⚠️ *Limites* : moins interprétable, peut être coûteux en ressources pour de grandes forêts.\n","\n","- **Naive Bayes (Multinomial)** \n"," Classifieur probabiliste basé sur le théorème de Bayes, avec l'hypothèse d’indépendance conditionnelle entre les features. \n"," ✅ *Avantages* : extrêmement rapide, très efficace sur des textes représentés par BoW ou TF-IDF, souvent difficile à battre en NLP classique. \n"," ⚠️ *Limites* : hypothèse d’indépendance souvent irréaliste, mais dans la pratique les performances restent bonnes même si elle est violée.\n","\n","> 🧠 **Pourquoi ces modèles ?** \n","Ils sont tous adaptés aux représentations vectorielles classiques (BoW, TF-IDF), et offrent un bon compromis entre performance, vitesse d'entraînement et interprétabilité. Leur diversité permet aussi d'évaluer plusieurs familles d’algorithmes (linéaires, probabilistes, ensembles, marge maximale) sur le même jeu de données.\n"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"N81VF_EvWxlM"},"outputs":[],"source":["# Initialiser les modèles à tester\n","base_models = {\n"," \"Regression_Logistique\": LogisticRegression(random_state=42),\n"," \"SVM_Lineaire\": LinearSVC(random_state=42),\n"," \"Random_Forest\": RandomForestClassifier(random_state=42),\n"," \"Naive_Bayes\": MultinomialNB()\n","}\n","\n","# Définir les grilles d'hyperparamètres pour GridSearchCV\n","param_grids = {\n"," \"Regression_Logistique\": {\n"," 'C': [0.01, 0.1, 1.0, 10.0],\n"," 'max_iter': [1000],\n"," 'solver': ['liblinear', 'saga']\n"," },\n"," \"SVM_Lineaire\": {\n"," 'C': [0.01, 0.1, 1.0, 10.0],\n"," 'max_iter': [1000],\n"," 'dual': [True, False]\n"," },\n"," \"Random_Forest\": {\n"," 'n_estimators': [50, 100, 200],\n"," 'max_depth': [None, 10, 20],\n"," 'min_samples_split': [2, 5]\n"," },\n"," \"Naive_Bayes\": {\n"," 'alpha': [0.1, 0.5, 1.0, 2.0]\n"," }\n","}\n","\n","# Dictionnaire des vectoriseurs\n","vectorizers = {\n"," \"TF-IDF\": (tfidf_vectorizer, X_train_tfidf, X_test_tfidf),\n"," \"BoW\": (bow_vectorizer, X_train_bow, X_test_bow)\n","}\n","\n","# Définir les scorers\n","scorers = {\n"," 'precision': make_scorer(precision_score),\n"," 'recall': make_scorer(recall_score),\n"," 'f1': make_scorer(f1_score),\n"," 'mcc': make_scorer(matthews_corrcoef),\n"," 'balanced_acc': make_scorer(balanced_accuracy_score)\n","}"]},{"cell_type":"markdown","metadata":{"id":"nAEoLNGmWxlM"},"source":["## Entrainement des modèles"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"yOKPz7roWxlM"},"outputs":[],"source":["train_models = True"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"zT0mYkAxWxlM","colab":{"base_uri":"https://localhost:8080/","height":1000},"outputId":"32e420f3-7a21-4d06-ad43-7d2b1a3c5c8f","executionInfo":{"status":"ok","timestamp":1751740002532,"user_tz":-120,"elapsed":35588700,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[{"output_type":"stream","name":"stderr","text":["\rProgression globale: 0%| | 0/8 [00:00, ?it/s]"]},{"output_type":"stream","name":"stdout","text":["\n","================================================================================\n","Démarrage de GridSearchCV pour Regression_Logistique avec TF-IDF...\n","Fitting 5 folds for each of 8 candidates, totalling 40 fits\n","\n","Résultats pour Regression_Logistique avec TF-IDF:\n","Accuracy: 0.7852\n","Precision: 0.7796\n","Recall: 0.7953\n","F1 Score: 0.7874\n","ROC AUC: 0.8667\n","\n","Matrice de confusion:\n","[[15503 4497]\n"," [ 4094 15906]]\n","\n","Rapport de classification:\n"," precision recall f1-score support\n","\n"," 0 0.79 0.78 0.78 20000\n"," 1 0.78 0.80 0.79 20000\n","\n"," accuracy 0.79 40000\n"," macro avg 0.79 0.79 0.79 40000\n","weighted avg 0.79 0.79 0.79 40000\n","\n"]},{"output_type":"stream","name":"stderr","text":["2025/07/05 08:34:47 WARNING mlflow.models.model: `artifact_path` is deprecated. Please use `name` instead.\n"]},{"output_type":"stream","name":"stdout","text":["Meilleurs paramètres: {'C': 1.0, 'max_iter': 1000, 'solver': 'liblinear'}\n","Meilleur score CV (Precision): 0.7786\n","F1 Score sur test: 0.7874\n","ROC AUC sur test: 0.8667\n","Temps d'entraînement: 65.19 secondes\n","🏃 View run Modele_Simple_Regression_Logistique_TF-IDF at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1/runs/94a0cf29a68b402ab37098a44d1c1ee6\n","🧪 View experiment at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1\n"]},{"output_type":"stream","name":"stderr","text":["Dernier modèle: Regression_Logistique avec TF-IDF: 12%|█▎ | 1/8 [01:48<12:39, 108.49s/it]"]},{"output_type":"stream","name":"stdout","text":["\n","================================================================================\n","Démarrage de GridSearchCV pour Regression_Logistique avec BoW...\n","Fitting 5 folds for each of 8 candidates, totalling 40 fits\n","\n","Résultats pour Regression_Logistique avec BoW:\n","Accuracy: 0.7829\n","Precision: 0.7723\n","Recall: 0.8024\n","F1 Score: 0.7871\n","ROC AUC: 0.8584\n","\n","Matrice de confusion:\n","[[15268 4732]\n"," [ 3951 16049]]\n","\n","Rapport de classification:\n"," precision recall f1-score support\n","\n"," 0 0.79 0.76 0.78 20000\n"," 1 0.77 0.80 0.79 20000\n","\n"," accuracy 0.78 40000\n"," macro avg 0.78 0.78 0.78 40000\n","weighted avg 0.78 0.78 0.78 40000\n","\n"]},{"output_type":"stream","name":"stderr","text":["2025/07/05 08:50:28 WARNING mlflow.models.model: `artifact_path` is deprecated. Please use `name` instead.\n"]},{"output_type":"stream","name":"stdout","text":["Meilleurs paramètres: {'C': 0.1, 'max_iter': 1000, 'solver': 'liblinear'}\n","Meilleur score CV (Precision): 0.7714\n","F1 Score sur test: 0.7871\n","ROC AUC sur test: 0.8584\n","Temps d'entraînement: 896.35 secondes\n","🏃 View run Modele_Simple_Regression_Logistique_BoW at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1/runs/75396e8531354bd5b168f8dd7e6f4135\n","🧪 View experiment at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1\n"]},{"output_type":"stream","name":"stderr","text":["Dernier modèle: Regression_Logistique avec BoW: 25%|██▌ | 2/8 [17:06<58:27, 584.60s/it] "]},{"output_type":"stream","name":"stdout","text":["\n","================================================================================\n","Démarrage de GridSearchCV pour SVM_Lineaire avec TF-IDF...\n","Fitting 5 folds for each of 8 candidates, totalling 40 fits\n","\n","Résultats pour SVM_Lineaire avec TF-IDF:\n","Accuracy: 0.7854\n","Precision: 0.7781\n","Recall: 0.7985\n","F1 Score: 0.7882\n","ROC AUC: 0.8665\n","\n","Matrice de confusion:\n","[[15445 4555]\n"," [ 4029 15971]]\n","\n","Rapport de classification:\n"," precision recall f1-score support\n","\n"," 0 0.79 0.77 0.78 20000\n"," 1 0.78 0.80 0.79 20000\n","\n"," accuracy 0.79 40000\n"," macro avg 0.79 0.79 0.79 40000\n","weighted avg 0.79 0.79 0.79 40000\n","\n"]},{"output_type":"stream","name":"stderr","text":["2025/07/05 08:52:50 WARNING mlflow.models.model: `artifact_path` is deprecated. Please use `name` instead.\n"]},{"output_type":"stream","name":"stdout","text":["Meilleurs paramètres: {'C': 0.1, 'dual': True, 'max_iter': 1000}\n","Meilleur score CV (Precision): 0.7769\n","F1 Score sur test: 0.7882\n","ROC AUC sur test: 0.8665\n","Temps d'entraînement: 122.32 secondes\n","🏃 View run Modele_Simple_SVM_Lineaire_TF-IDF at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1/runs/767fe1513d6445029ca90ca2156ab653\n","🧪 View experiment at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1\n"]},{"output_type":"stream","name":"stderr","text":["Dernier modèle: SVM_Lineaire avec TF-IDF: 38%|███▊ | 3/8 [19:27<31:51, 382.25s/it] "]},{"output_type":"stream","name":"stdout","text":["\n","================================================================================\n","Démarrage de GridSearchCV pour SVM_Lineaire avec BoW...\n","Fitting 5 folds for each of 8 candidates, totalling 40 fits\n","\n","Résultats pour SVM_Lineaire avec BoW:\n","Accuracy: 0.7822\n","Precision: 0.7687\n","Recall: 0.8074\n","F1 Score: 0.7876\n","ROC AUC: 0.8583\n","\n","Matrice de confusion:\n","[[15141 4859]\n"," [ 3852 16148]]\n","\n","Rapport de classification:\n"," precision recall f1-score support\n","\n"," 0 0.80 0.76 0.78 20000\n"," 1 0.77 0.81 0.79 20000\n","\n"," accuracy 0.78 40000\n"," macro avg 0.78 0.78 0.78 40000\n","weighted avg 0.78 0.78 0.78 40000\n","\n"]},{"output_type":"stream","name":"stderr","text":["2025/07/05 09:00:50 WARNING mlflow.models.model: `artifact_path` is deprecated. Please use `name` instead.\n"]},{"output_type":"stream","name":"stdout","text":["Meilleurs paramètres: {'C': 0.01, 'dual': True, 'max_iter': 1000}\n","Meilleur score CV (Precision): 0.7687\n","F1 Score sur test: 0.7876\n","ROC AUC sur test: 0.8583\n","Temps d'entraînement: 458.62 secondes\n","🏃 View run Modele_Simple_SVM_Lineaire_BoW at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1/runs/eaa8dfac819b44e39fe7b7baaf490de7\n","🧪 View experiment at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1\n"]},{"output_type":"stream","name":"stderr","text":["Dernier modèle: SVM_Lineaire avec BoW: 50%|█████ | 4/8 [27:28<28:04, 421.02s/it] "]},{"output_type":"stream","name":"stdout","text":["\n","================================================================================\n","Démarrage de GridSearchCV pour Random_Forest avec TF-IDF...\n","Fitting 5 folds for each of 18 candidates, totalling 90 fits\n","\n","Résultats pour Random_Forest avec TF-IDF:\n","Accuracy: 0.7675\n","Precision: 0.7702\n","Recall: 0.7625\n","F1 Score: 0.7663\n","ROC AUC: 0.8484\n","\n","Matrice de confusion:\n","[[15450 4550]\n"," [ 4750 15250]]\n","\n","Rapport de classification:\n"," precision recall f1-score support\n","\n"," 0 0.76 0.77 0.77 20000\n"," 1 0.77 0.76 0.77 20000\n","\n"," accuracy 0.77 40000\n"," macro avg 0.77 0.77 0.77 40000\n","weighted avg 0.77 0.77 0.77 40000\n","\n"]},{"output_type":"stream","name":"stderr","text":["2025/07/05 13:31:29 WARNING mlflow.models.model: `artifact_path` is deprecated. Please use `name` instead.\n"]},{"output_type":"stream","name":"stdout","text":["Meilleurs paramètres: {'max_depth': None, 'min_samples_split': 5, 'n_estimators': 200}\n","Meilleur score CV (Precision): 0.7705\n","F1 Score sur test: 0.7663\n","ROC AUC sur test: 0.8484\n","Temps d'entraînement: 16182.08 secondes\n","🏃 View run Modele_Simple_Random_Forest_TF-IDF at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1/runs/7dda37625478423abcfd9292dac05580\n","🧪 View experiment at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1\n"]},{"output_type":"stream","name":"stderr","text":["Dernier modèle: Random_Forest avec TF-IDF: 62%|██████▎ | 5/8 [4:58:58<5:07:10, 6143.56s/it]"]},{"output_type":"stream","name":"stdout","text":["\n","================================================================================\n","Démarrage de GridSearchCV pour Random_Forest avec BoW...\n","Fitting 5 folds for each of 18 candidates, totalling 90 fits\n","\n","Résultats pour Random_Forest avec BoW:\n","Accuracy: 0.7719\n","Precision: 0.7798\n","Recall: 0.7579\n","F1 Score: 0.7687\n","ROC AUC: 0.8515\n","\n","Matrice de confusion:\n","[[15720 4280]\n"," [ 4843 15157]]\n","\n","Rapport de classification:\n"," precision recall f1-score support\n","\n"," 0 0.76 0.79 0.78 20000\n"," 1 0.78 0.76 0.77 20000\n","\n"," accuracy 0.77 40000\n"," macro avg 0.77 0.77 0.77 40000\n","weighted avg 0.77 0.77 0.77 40000\n","\n"]},{"output_type":"stream","name":"stderr","text":["2025/07/05 18:24:53 WARNING mlflow.models.model: `artifact_path` is deprecated. Please use `name` instead.\n"]},{"output_type":"stream","name":"stdout","text":["Meilleurs paramètres: {'max_depth': None, 'min_samples_split': 5, 'n_estimators': 200}\n","Meilleur score CV (Precision): 0.7772\n","F1 Score sur test: 0.7687\n","ROC AUC sur test: 0.8515\n","Temps d'entraînement: 17489.66 secondes\n","🏃 View run Modele_Simple_Random_Forest_BoW at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1/runs/7d52e808227f468da7f733265280fc02\n","🧪 View experiment at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1\n"]},{"output_type":"stream","name":"stderr","text":["Dernier modèle: Random_Forest avec BoW: 75%|███████▌ | 6/8 [9:52:29<5:34:44, 10042.38s/it] "]},{"output_type":"stream","name":"stdout","text":["\n","================================================================================\n","Démarrage de GridSearchCV pour Naive_Bayes avec TF-IDF...\n","Fitting 5 folds for each of 4 candidates, totalling 20 fits\n","\n","Résultats pour Naive_Bayes avec TF-IDF:\n","Accuracy: 0.7696\n","Precision: 0.7766\n","Recall: 0.7568\n","F1 Score: 0.7666\n","ROC AUC: 0.8524\n","\n","Matrice de confusion:\n","[[15647 4353]\n"," [ 4864 15136]]\n","\n","Rapport de classification:\n"," precision recall f1-score support\n","\n"," 0 0.76 0.78 0.77 20000\n"," 1 0.78 0.76 0.77 20000\n","\n"," accuracy 0.77 40000\n"," macro avg 0.77 0.77 0.77 40000\n","weighted avg 0.77 0.77 0.77 40000\n","\n"]},{"output_type":"stream","name":"stderr","text":["2025/07/05 18:26:14 WARNING mlflow.models.model: `artifact_path` is deprecated. Please use `name` instead.\n"]},{"output_type":"stream","name":"stdout","text":["Meilleurs paramètres: {'alpha': 2.0}\n","Meilleur score CV (Precision): 0.7772\n","F1 Score sur test: 0.7666\n","ROC AUC sur test: 0.8524\n","Temps d'entraînement: 4.27 secondes\n","🏃 View run Modele_Simple_Naive_Bayes_TF-IDF at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1/runs/f0f4a385cb0b463c97ad736eaa98ce9f\n","🧪 View experiment at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1\n"]},{"output_type":"stream","name":"stderr","text":["Dernier modèle: Naive_Bayes avec TF-IDF: 88%|████████▊ | 7/8 [9:52:49<1:52:45, 6765.92s/it]"]},{"output_type":"stream","name":"stdout","text":["\n","================================================================================\n","Démarrage de GridSearchCV pour Naive_Bayes avec BoW...\n","Fitting 5 folds for each of 4 candidates, totalling 20 fits\n","\n","Résultats pour Naive_Bayes avec BoW:\n","Accuracy: 0.7721\n","Precision: 0.7785\n","Recall: 0.7605\n","F1 Score: 0.7694\n","ROC AUC: 0.8441\n","\n","Matrice de confusion:\n","[[15673 4327]\n"," [ 4790 15210]]\n","\n","Rapport de classification:\n"," precision recall f1-score support\n","\n"," 0 0.77 0.78 0.77 20000\n"," 1 0.78 0.76 0.77 20000\n","\n"," accuracy 0.77 40000\n"," macro avg 0.77 0.77 0.77 40000\n","weighted avg 0.77 0.77 0.77 40000\n","\n"]},{"output_type":"stream","name":"stderr","text":["2025/07/05 18:26:32 WARNING mlflow.models.model: `artifact_path` is deprecated. Please use `name` instead.\n"]},{"output_type":"stream","name":"stdout","text":["Meilleurs paramètres: {'alpha': 2.0}\n","Meilleur score CV (Precision): 0.7765\n","F1 Score sur test: 0.7694\n","ROC AUC sur test: 0.8441\n","Temps d'entraînement: 2.82 secondes\n","🏃 View run Modele_Simple_Naive_Bayes_BoW at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1/runs/a920f241d90d4816b858b16d68a6b38f\n","🧪 View experiment at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1\n"]},{"output_type":"stream","name":"stderr","text":["Dernier modèle: Naive_Bayes avec BoW: 100%|██████████| 8/8 [9:53:08<00:00, 4448.58s/it]\n"]},{"output_type":"display_data","data":{"text/plain":["
"]},"metadata":{}}],"source":["if train_models:\n","\n"," # Tester chaque modèle avec les deux types de vectorisation\n"," total_iterations = len(base_models) * len(vectorizers)\n"," progress_bar = tqdm(total=total_iterations, desc=\"Progression globale\")\n","\n"," # Dictionnaire pour stocker les résultats\n"," results = []\n","\n"," # Tester chaque modèle avec les deux types de vectorisation\n"," for model_name, base_model in base_models.items():\n"," for vectorizer_name, (vectorizer, X_train_vec, X_test_vec) in vectorizers.items():\n"," print(f\"\\n{'='*80}\")\n"," print(f\"Démarrage de GridSearchCV pour {model_name} avec {vectorizer_name}...\")\n","\n"," # Définir la grille de paramètres et créer GridSearchCV\n"," param_grid = param_grids[model_name]\n","\n"," grid_search = GridSearchCV(\n"," base_model,\n"," param_grid,\n"," cv=5,\n"," scoring=scorers,\n"," refit='precision',\n"," n_jobs=-1,\n"," verbose=1,\n"," return_train_score=True\n"," )\n","\n"," # Démarrer le run MLflow\n"," with mlflow.start_run(run_name=f\"Modele_Simple_{model_name}_{vectorizer_name}\"):\n"," # Journaliser les paramètres généraux\n"," mlflow.log_param(\"model_type\", model_name)\n"," mlflow.log_param(\"vectorizer_type\", vectorizer_name)\n"," mlflow.log_param(\"dataset_size\", X_train.shape[0] + X_test.shape[0])\n"," mlflow.log_param(\"train_size\", X_train.shape[0])\n"," mlflow.log_param(\"test_size\", X_test.shape[0])\n"," mlflow.log_param(\"max_features\", 10000)\n"," mlflow.log_param(\"ngram_range\", \"(1, 2)\")\n"," mlflow.log_param(\"scoring_metric\", \"precision\") # Noter que precision est utilisé\n","\n"," # Mesurer le temps d'entraînement\n"," start_time = time.time()\n","\n"," # Entraîner avec GridSearchCV\n"," grid_search.fit(X_train_vec, y_train)\n","\n"," # Calculer le temps d'entraînement\n"," training_time = time.time() - start_time\n","\n"," # Journaliser le temps d'entraînement\n"," mlflow.log_metric(\"training_time\", training_time)\n","\n"," # Récupérer et journaliser les meilleurs paramètres\n"," best_params = grid_search.best_params_\n"," for param, value in best_params.items():\n"," mlflow.log_param(f\"best_{param}\", value)\n","\n"," mlflow.log_param(\"sample_size\", sample_size*2)\n","\n"," # Journaliser le meilleur score de validation croisée\n"," mlflow.log_metric(\"val_precision\", grid_search.best_score_)\n","\n"," # Journaliser le recall score associé au modèle présentant la meilleure précision\n"," val_recall = grid_search.cv_results_['mean_test_recall'][grid_search.best_index_]\n"," mlflow.log_metric(\"val_recall\", val_recall)\n","\n","\n"," # Récupérer le meilleur modèle\n"," best_model = grid_search.best_estimator_\n","\n"," # Évaluer le meilleur modèle sur l'ensemble de test\n"," acc, prec, rec, f1, roc_auc, fig_cm, fig_roc, y_pred = evaluate_model(\n"," best_model, X_train_vec, X_test_vec, y_train, y_test, model_name, vectorizer_name\n"," )\n","\n"," # Journaliser les métriques sur l'ensemble de test\n"," mlflow.log_metric(\"test_accuracy\", acc)\n"," mlflow.log_metric(\"test_precision\", prec)\n"," mlflow.log_metric(\"test_recall\", rec)\n"," mlflow.log_metric(\"test_f1\", f1)\n"," mlflow.log_metric(\"test_roc_auc\", roc_auc)\n","\n"," # Journaliser les figures\n"," mlflow.log_figure(fig_cm, \"confusion_matrix.png\")\n"," mlflow.log_figure(fig_roc, \"roc_curve.png\")\n"," plt.close(fig_cm)\n"," plt.close(fig_roc)\n","\n"," # Journaliser le modèle\n"," signature = infer_signature(X_train_vec, y_pred)\n"," mlflow.sklearn.log_model(best_model, \"model\", signature=signature)\n","\n"," # Créer le dossier pour sauvegarder les artefacts\n"," os.makedirs(\"./content/simple-model\", exist_ok=True)\n","\n"," # Sauvegarder et journaliser le vectoriseur\n"," vectorizer_path = f\"./content/simple-model/vectorizer_{vectorizer_name}.pkl\"\n"," with open(vectorizer_path, \"wb\") as f:\n"," pickle.dump(vectorizer, f)\n"," mlflow.log_artifact(vectorizer_path)\n","\n"," # Journaliser les résultats détaillés de GridSearchCV\n"," cv_results = pd.DataFrame(grid_search.cv_results_)\n"," cv_results_path = \"./content/simple-model/cv_results.csv\"\n"," cv_results.to_csv(cv_results_path, index=False)\n"," mlflow.log_artifact(cv_results_path)\n","\n"," # Créer et journaliser un graphique des résultats de GridSearchCV\n"," plt.figure(figsize=(12, 8))\n"," params = [f\"{k}={v}\" for k, v in best_params.items()]\n"," params_str = \", \".join(params)\n","\n"," # Extraire les scores moyens pour chaque paramètre principal\n"," for param in param_grid.keys():\n"," if len(param_grid[param]) > 1: # Seulement si le paramètre a plusieurs valeurs\n"," param_name = f\"param_{param}\"\n"," if param_name in cv_results.columns:\n"," # Utiliser la colonne spécifique à la métrique precision\n"," scores_df = cv_results[[param_name, \"mean_test_precision\", \"std_test_precision\"]]\n"," scores_df = scores_df.sort_values(param_name)\n","\n"," plt.figure(figsize=(10, 6))\n"," plt.errorbar(\n"," scores_df[param_name].astype(str),\n"," scores_df[\"mean_test_precision\"],\n"," yerr=scores_df[\"std_test_precision\"],\n"," fmt='-o'\n"," )\n"," plt.title(f'Scores de validation croisée (Precision) par {param}')\n"," plt.xlabel(param)\n"," plt.ylabel('Precision moyenne')\n"," plt.grid(True)\n"," mlflow.log_figure(plt.gcf(), f\"cv_results_{param}.png\")\n"," plt.close()\n","\n"," # Journaliser les features importantes (pour les modèles qui le supportent)\n"," if hasattr(best_model, 'coef_'):\n"," # Récupérer les features les plus importantes\n"," if isinstance(best_model, LogisticRegression) or isinstance(best_model, LinearSVC):\n"," coefs = best_model.coef_[0]\n"," if vectorizer_name == \"TF-IDF\":\n"," feature_names = tfidf_vectorizer.get_feature_names_out()\n"," else:\n"," feature_names = bow_vectorizer.get_feature_names_out()\n","\n"," # Créer un DataFrame avec les coefs et les noms des features\n"," coefs_df = pd.DataFrame({\n"," 'feature': feature_names,\n"," 'importance': coefs\n"," })\n","\n"," # Trier par importance absolue\n"," coefs_df['abs_importance'] = abs(coefs_df['importance'])\n"," coefs_df = coefs_df.sort_values('abs_importance', ascending=False).head(20)\n","\n"," # Journaliser les features les plus importantes\n"," top_features_path = \"./content/simple-model/top_features.csv\"\n"," coefs_df.to_csv(top_features_path, index=False)\n"," mlflow.log_artifact(top_features_path)\n","\n"," # Créer un graphique pour visualiser les features les plus importantes\n"," plt.figure(figsize=(10, 8))\n"," sns.barplot(x='importance', y='feature', data=coefs_df.sort_values('importance', ascending=False).head(20))\n"," plt.title(f'Top 20 features positives')\n"," plt.tight_layout()\n"," mlflow.log_figure(plt.gcf(), \"top_positive_features.png\")\n"," plt.close()\n","\n"," plt.figure(figsize=(10, 8))\n"," sns.barplot(x='importance', y='feature', data=coefs_df.sort_values('importance').head(20))\n"," plt.title(f'Top 20 features négatives')\n"," plt.tight_layout()\n"," mlflow.log_figure(plt.gcf(), \"top_negative_features.png\")\n"," plt.close()\n","\n"," # Stocker les résultats pour comparaison\n"," results.append({\n"," \"Modèle\": model_name.replace(\"_\", \" \"),\n"," \"Vectorisation\": vectorizer_name,\n"," \"Meilleurs paramètres\": str(best_params),\n"," \"Accuracy\": acc,\n"," \"Precision\": prec,\n"," \"Recall\": rec,\n"," \"F1 Score\": f1,\n"," \"ROC AUC\": roc_auc,\n"," \"Temps d'entraînement (s)\": training_time\n"," })\n","\n"," # Afficher les résultats\n"," print(f\"Meilleurs paramètres: {best_params}\")\n"," print(f\"Meilleur score CV (Precision): {grid_search.best_score_:.4f}\")\n"," print(f\"F1 Score sur test: {f1:.4f}\")\n"," print(f\"ROC AUC sur test: {roc_auc:.4f}\")\n"," print(f\"Temps d'entraînement: {training_time:.2f} secondes\")\n","\n","\n"," # À la fin de chaque itération, mettez à jour la barre de progression\n"," progress_bar.update(1)\n"," progress_bar.set_description(f\"Dernier modèle: {model_name} avec {vectorizer_name}\")\n","\n"," progress_bar.close()"]},{"cell_type":"markdown","metadata":{"id":"MPL9yrErWxlN"},"source":["## Evaluation des performances"]},{"cell_type":"markdown","metadata":{"id":"54r-t1tDWxlN"},"source":["### Récupération des resultats depuis le serveur MLFLow"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"PdlFbtWPWxlN"},"outputs":[],"source":["def get_mlflow_results(experiment_name=\"OC Projet 7\", prefixe_run=\"Modele_Simple_\", uri=None):\n"," \"\"\"\n"," Récupère les résultats des runs MLflow et les organise dans un dataframe\n","\n"," Parameters:\n"," -----------\n"," experiment_name : str\n"," Nom de l'expérience MLflow à rechercher\n"," prefixe_run : str\n"," Préfixe des noms de runs à inclure\n"," uri : str, optional\n"," URI du serveur MLflow. Si None, utilise l'URI configuré par défaut\n","\n"," Returns:\n"," --------\n"," pandas.DataFrame\n"," Dataframe contenant les résultats des runs MLflow\n"," \"\"\"\n"," # Se connecter au serveur MLflow si un URI est fourni\n"," if uri:\n"," mlflow.set_tracking_uri(uri)\n","\n"," # Créer un client MLflow\n"," client = MlflowClient()\n","\n"," # Récupérer l'ID de l'expérience\n"," try:\n"," experiment = client.get_experiment_by_name(experiment_name)\n"," if experiment is None:\n"," raise ValueError(f\"L'expérience '{experiment_name}' n'existe pas.\")\n"," experiment_id = experiment.experiment_id\n"," except Exception as e:\n"," print(f\"Erreur lors de la récupération de l'expérience : {e}\")\n"," return pd.DataFrame()\n","\n"," # Récupérer tous les runs de l'expérience\n"," runs = client.search_runs(\n"," experiment_ids=[experiment_id],\n"," filter_string=f\"tags.mlflow.runName LIKE '{prefixe_run}%'\",\n"," order_by=[\"metrics.prec DESC\"]\n"," )\n","\n"," # Créer une liste pour stocker les résultats\n"," resultats = []\n","\n"," # Parcourir chaque run et extraire les informations\n"," for run in runs:\n"," # Récupérer le nom du run pour information\n"," run_name = run.data.tags.get(\"mlflow.runName\", \"\")\n","\n"," # Utiliser les paramètres model_type et vectorizer_type de MLflow\n"," modele = run.data.params.get(\"model_type\", \"Inconnu\")\n"," vectorisation = run.data.params.get(\"vectorizer_type\", \"Inconnu\")\n","\n"," # Formater le nom du modèle (remplacer les underscores par des espaces)\n"," modele = modele.replace(\"_\", \" \")\n","\n"," # Extraire les métriques\n"," metrics = run.data.metrics\n"," params = run.data.params\n","\n"," # Construire un dictionnaire des meilleurs paramètres\n"," best_params = {}\n"," for key, value in params.items():\n"," if key.startswith(\"best_\"):\n"," param_name = key.replace(\"best_\", \"\")\n"," best_params[param_name] = value\n","\n"," # Créer une entrée pour le dataframe résultat\n"," resultats.append({\n"," \"Modèle\": modele,\n"," \"Vectorisation\": vectorisation,\n"," \"Meilleurs paramètres\": str(best_params),\n"," \"Accuracy\": metrics.get(\"test_accuracy\", None),\n"," \"Precision\": metrics.get(\"test_precision\", None),\n"," \"Recall\": metrics.get(\"test_recall\", None),\n"," \"F1 Score\": metrics.get(\"test_f1\", None),\n"," \"ROC AUC\": metrics.get(\"test_roc_auc\", None),\n"," \"Temps d'entraînement (s)\": metrics.get(\"training_time\", None),\n"," \"Run ID\": run.info.run_id,\n"," \"Run Name\": run_name\n"," })\n","\n"," # Créer un dataframe à partir des résultats\n"," df_resultats = pd.DataFrame(resultats)\n","\n"," # Trier le dataframe par Précision (décroissant)\n"," if not df_resultats.empty and \"Precision\" in df_resultats.columns:\n"," df_resultats = df_resultats.sort_values(\"Precision\", ascending=False)\n","\n"," return df_resultats"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"KyCAS-69WxlN"},"outputs":[],"source":["# Récupérer les résultats\n","results_df = get_mlflow_results(experiment_name=\"OC Projet 7\", prefixe_run=\"Modele_Simple_\")"]},{"cell_type":"markdown","metadata":{"id":"sOFocHNnWxlN"},"source":["### Sauvegarde des résultats\n","\n","- Au format Markdown (.md)\n","- Au format CSV (.csv)"]},{"cell_type":"code","source":["import os\n","simple_model_path = \"./content/simple-model/\"\n","# Créer le dossier s'il n'existe pas\n","os.makedirs(simple_model_path, exist_ok=True)"],"metadata":{"id":"eTzchvr3OsJh"},"execution_count":null,"outputs":[]},{"cell_type":"code","execution_count":null,"metadata":{"id":"5YcvR-XBWxlN"},"outputs":[],"source":["def export_results_to_markdown(df, output_file=simple_model_path+\"mlflow_results.md\"):\n"," with open(output_file, \"w\") as f:\n"," f.write(\"# Résultats des expérimentations MLflow\\n\\n\")\n"," f.write(df.to_markdown(index=False))\n","\n","# Exporter les résultats au format Markdown\n","export_results_to_markdown(results_df)"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"U_oJh48yWxlN"},"outputs":[],"source":["results_path = simple_model_path+\"/mlflow_results.csv\"\n","# Enregistrer le tableau des résultats (optionnel)\n","results_df.to_csv(results_path, index=False)"]},{"cell_type":"markdown","metadata":{"id":"9-c659sYWxlP"},"source":["### Visualisation des métriques"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"3KiynT2KWxlQ","colab":{"base_uri":"https://localhost:8080/","height":776},"executionInfo":{"status":"ok","timestamp":1751740004089,"user_tz":-120,"elapsed":139,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"aa429d2c-a1fd-462f-d247-570c6cfc6b46"},"outputs":[{"output_type":"execute_result","data":{"text/plain":[" Modèle Vectorisation \\\n","2 Random Forest BoW \n","7 Regression Logistique TF-IDF \n","0 Naive Bayes BoW \n","5 SVM Lineaire TF-IDF \n","9 Naive Bayes TF-IDF \n","1 Naive Bayes TF-IDF \n","15 Regression Logistique TF-IDF \n","8 Naive Bayes BoW \n","13 SVM Lineaire TF-IDF \n","10 Random Forest BoW \n","6 Regression Logistique BoW \n","3 Random Forest TF-IDF \n","4 SVM Lineaire BoW \n","14 Regression Logistique BoW \n","12 SVM Lineaire BoW \n","11 Random Forest TF-IDF \n","\n"," Meilleurs paramètres Accuracy Precision \\\n","2 {'max_depth': 'None', 'min_samples_split': '5'... 0.771925 0.779801 \n","7 {'C': '1.0', 'max_iter': '1000', 'solver': 'li... 0.785225 0.779591 \n","0 {'alpha': '2.0'} 0.772075 0.778523 \n","5 {'C': '0.1', 'dual': 'True', 'max_iter': '1000'} 0.785400 0.778086 \n","9 {'alpha': '2.0'} 0.770400 0.777618 \n","1 {'alpha': '2.0'} 0.769575 0.776643 \n","15 {'C': '1.0', 'max_iter': '1000', 'solver': 'sa... 0.783150 0.776595 \n","8 {'alpha': '2.0'} 0.771800 0.776557 \n","13 {'C': '0.1', 'dual': 'True', 'max_iter': '1000'} 0.784200 0.776513 \n","10 {'max_depth': 'None', 'min_samples_split': '5'... 0.768850 0.774589 \n","6 {'C': '0.1', 'max_iter': '1000', 'solver': 'li... 0.782925 0.772292 \n","3 {'max_depth': 'None', 'min_samples_split': '5'... 0.767500 0.770202 \n","4 {'C': '0.01', 'dual': 'True', 'max_iter': '1000'} 0.782225 0.768696 \n","14 {'C': '0.1', 'max_iter': '1000', 'solver': 'sa... 0.779250 0.767199 \n","12 {'C': '0.01', 'dual': 'True', 'max_iter': '1000'} 0.780050 0.765526 \n","11 {'max_depth': 'None', 'min_samples_split': '5'... 0.764800 0.763587 \n","\n"," Recall F1 Score ROC AUC Temps d'entraînement (s) \\\n","2 0.75785 0.768669 0.851527 17489.656235 \n","7 0.79530 0.787367 0.866710 65.192424 \n","0 0.76050 0.769406 0.844132 2.815040 \n","5 0.79855 0.788185 0.866477 122.321674 \n","9 0.75740 0.767376 0.851067 4.320478 \n","1 0.75680 0.766593 0.852443 4.272107 \n","15 0.79500 0.785690 0.861098 36.014652 \n","8 0.76320 0.769820 0.843168 1.472637 \n","13 0.79810 0.787158 0.861249 51.149676 \n","10 0.75840 0.766409 0.843950 6377.436032 \n","6 0.80245 0.787082 0.858402 896.353782 \n","3 0.76250 0.766332 0.848404 16182.080744 \n","4 0.80740 0.787573 0.858312 458.623438 \n","14 0.80180 0.784118 0.851395 371.537341 \n","12 0.80740 0.785905 0.851585 187.807479 \n","11 0.76710 0.765340 0.841649 5977.548638 \n","\n"," Run ID \\\n","2 7d52e808227f468da7f733265280fc02 \n","7 94a0cf29a68b402ab37098a44d1c1ee6 \n","0 a920f241d90d4816b858b16d68a6b38f \n","5 767fe1513d6445029ca90ca2156ab653 \n","9 daf72838a04d4f2f962d5b7cf6e41a82 \n","1 f0f4a385cb0b463c97ad736eaa98ce9f \n","15 741178bfcba54908aaa50c4f44d6db71 \n","8 9635b8567b874dd6bc91da23d1cb3b78 \n","13 bb39934ff22f4021a379983c32d828ed \n","10 623f3412438b4b6a8bb0d112c917dcea \n","6 75396e8531354bd5b168f8dd7e6f4135 \n","3 7dda37625478423abcfd9292dac05580 \n","4 eaa8dfac819b44e39fe7b7baaf490de7 \n","14 b88c00415c1340ec9dd4e6db806f2de3 \n","12 5c07f55dbafc4c899c5c2a9c3de4a742 \n","11 cb84d2c0f188472990425e7300f744ef \n","\n"," Run Name \n","2 Modele_Simple_Random_Forest_BoW \n","7 Modele_Simple_Regression_Logistique_TF-IDF \n","0 Modele_Simple_Naive_Bayes_BoW \n","5 Modele_Simple_SVM_Lineaire_TF-IDF \n","9 Modele_Simple_Naive_Bayes_TF-IDF \n","1 Modele_Simple_Naive_Bayes_TF-IDF \n","15 Modele_Simple_Regression_Logistique_TF-IDF \n","8 Modele_Simple_Naive_Bayes_BoW \n","13 Modele_Simple_SVM_Lineaire_TF-IDF \n","10 Modele_Simple_Random_Forest_BoW \n","6 Modele_Simple_Regression_Logistique_BoW \n","3 Modele_Simple_Random_Forest_TF-IDF \n","4 Modele_Simple_SVM_Lineaire_BoW \n","14 Modele_Simple_Regression_Logistique_BoW \n","12 Modele_Simple_SVM_Lineaire_BoW \n","11 Modele_Simple_Random_Forest_TF-IDF "],"text/html":["\n","
\n","
\n","\n","
\n"," \n","
\n","
\n","
Modèle
\n","
Vectorisation
\n","
Meilleurs paramètres
\n","
Accuracy
\n","
Precision
\n","
Recall
\n","
F1 Score
\n","
ROC AUC
\n","
Temps d'entraînement (s)
\n","
Run ID
\n","
Run Name
\n","
\n"," \n"," \n","
\n","
2
\n","
Random Forest
\n","
BoW
\n","
{'max_depth': 'None', 'min_samples_split': '5'...
\n","
0.771925
\n","
0.779801
\n","
0.75785
\n","
0.768669
\n","
0.851527
\n","
17489.656235
\n","
7d52e808227f468da7f733265280fc02
\n","
Modele_Simple_Random_Forest_BoW
\n","
\n","
\n","
7
\n","
Regression Logistique
\n","
TF-IDF
\n","
{'C': '1.0', 'max_iter': '1000', 'solver': 'li...
\n","
0.785225
\n","
0.779591
\n","
0.79530
\n","
0.787367
\n","
0.866710
\n","
65.192424
\n","
94a0cf29a68b402ab37098a44d1c1ee6
\n","
Modele_Simple_Regression_Logistique_TF-IDF
\n","
\n","
\n","
0
\n","
Naive Bayes
\n","
BoW
\n","
{'alpha': '2.0'}
\n","
0.772075
\n","
0.778523
\n","
0.76050
\n","
0.769406
\n","
0.844132
\n","
2.815040
\n","
a920f241d90d4816b858b16d68a6b38f
\n","
Modele_Simple_Naive_Bayes_BoW
\n","
\n","
\n","
5
\n","
SVM Lineaire
\n","
TF-IDF
\n","
{'C': '0.1', 'dual': 'True', 'max_iter': '1000'}
\n","
0.785400
\n","
0.778086
\n","
0.79855
\n","
0.788185
\n","
0.866477
\n","
122.321674
\n","
767fe1513d6445029ca90ca2156ab653
\n","
Modele_Simple_SVM_Lineaire_TF-IDF
\n","
\n","
\n","
9
\n","
Naive Bayes
\n","
TF-IDF
\n","
{'alpha': '2.0'}
\n","
0.770400
\n","
0.777618
\n","
0.75740
\n","
0.767376
\n","
0.851067
\n","
4.320478
\n","
daf72838a04d4f2f962d5b7cf6e41a82
\n","
Modele_Simple_Naive_Bayes_TF-IDF
\n","
\n","
\n","
1
\n","
Naive Bayes
\n","
TF-IDF
\n","
{'alpha': '2.0'}
\n","
0.769575
\n","
0.776643
\n","
0.75680
\n","
0.766593
\n","
0.852443
\n","
4.272107
\n","
f0f4a385cb0b463c97ad736eaa98ce9f
\n","
Modele_Simple_Naive_Bayes_TF-IDF
\n","
\n","
\n","
15
\n","
Regression Logistique
\n","
TF-IDF
\n","
{'C': '1.0', 'max_iter': '1000', 'solver': 'sa...
\n","
0.783150
\n","
0.776595
\n","
0.79500
\n","
0.785690
\n","
0.861098
\n","
36.014652
\n","
741178bfcba54908aaa50c4f44d6db71
\n","
Modele_Simple_Regression_Logistique_TF-IDF
\n","
\n","
\n","
8
\n","
Naive Bayes
\n","
BoW
\n","
{'alpha': '2.0'}
\n","
0.771800
\n","
0.776557
\n","
0.76320
\n","
0.769820
\n","
0.843168
\n","
1.472637
\n","
9635b8567b874dd6bc91da23d1cb3b78
\n","
Modele_Simple_Naive_Bayes_BoW
\n","
\n","
\n","
13
\n","
SVM Lineaire
\n","
TF-IDF
\n","
{'C': '0.1', 'dual': 'True', 'max_iter': '1000'}
\n","
0.784200
\n","
0.776513
\n","
0.79810
\n","
0.787158
\n","
0.861249
\n","
51.149676
\n","
bb39934ff22f4021a379983c32d828ed
\n","
Modele_Simple_SVM_Lineaire_TF-IDF
\n","
\n","
\n","
10
\n","
Random Forest
\n","
BoW
\n","
{'max_depth': 'None', 'min_samples_split': '5'...
\n","
0.768850
\n","
0.774589
\n","
0.75840
\n","
0.766409
\n","
0.843950
\n","
6377.436032
\n","
623f3412438b4b6a8bb0d112c917dcea
\n","
Modele_Simple_Random_Forest_BoW
\n","
\n","
\n","
6
\n","
Regression Logistique
\n","
BoW
\n","
{'C': '0.1', 'max_iter': '1000', 'solver': 'li...
\n","
0.782925
\n","
0.772292
\n","
0.80245
\n","
0.787082
\n","
0.858402
\n","
896.353782
\n","
75396e8531354bd5b168f8dd7e6f4135
\n","
Modele_Simple_Regression_Logistique_BoW
\n","
\n","
\n","
3
\n","
Random Forest
\n","
TF-IDF
\n","
{'max_depth': 'None', 'min_samples_split': '5'...
\n","
0.767500
\n","
0.770202
\n","
0.76250
\n","
0.766332
\n","
0.848404
\n","
16182.080744
\n","
7dda37625478423abcfd9292dac05580
\n","
Modele_Simple_Random_Forest_TF-IDF
\n","
\n","
\n","
4
\n","
SVM Lineaire
\n","
BoW
\n","
{'C': '0.01', 'dual': 'True', 'max_iter': '1000'}
\n","
0.782225
\n","
0.768696
\n","
0.80740
\n","
0.787573
\n","
0.858312
\n","
458.623438
\n","
eaa8dfac819b44e39fe7b7baaf490de7
\n","
Modele_Simple_SVM_Lineaire_BoW
\n","
\n","
\n","
14
\n","
Regression Logistique
\n","
BoW
\n","
{'C': '0.1', 'max_iter': '1000', 'solver': 'sa...
\n","
0.779250
\n","
0.767199
\n","
0.80180
\n","
0.784118
\n","
0.851395
\n","
371.537341
\n","
b88c00415c1340ec9dd4e6db806f2de3
\n","
Modele_Simple_Regression_Logistique_BoW
\n","
\n","
\n","
12
\n","
SVM Lineaire
\n","
BoW
\n","
{'C': '0.01', 'dual': 'True', 'max_iter': '1000'}
\n","
0.780050
\n","
0.765526
\n","
0.80740
\n","
0.785905
\n","
0.851585
\n","
187.807479
\n","
5c07f55dbafc4c899c5c2a9c3de4a742
\n","
Modele_Simple_SVM_Lineaire_BoW
\n","
\n","
\n","
11
\n","
Random Forest
\n","
TF-IDF
\n","
{'max_depth': 'None', 'min_samples_split': '5'...
\n","
0.764800
\n","
0.763587
\n","
0.76710
\n","
0.765340
\n","
0.841649
\n","
5977.548638
\n","
cb84d2c0f188472990425e7300f744ef
\n","
Modele_Simple_Random_Forest_TF-IDF
\n","
\n"," \n","
\n","
\n","
\n","\n","
\n"," \n","\n"," \n","\n"," \n","
\n","\n","\n","
\n"," \n","\n","\n","\n"," \n","
\n","\n","
\n"," \n"," \n"," \n","
\n","\n","
\n","
\n"],"application/vnd.google.colaboratory.intrinsic+json":{"type":"dataframe","variable_name":"results_df","summary":"{\n \"name\": \"results_df\",\n \"rows\": 16,\n \"fields\": [\n {\n \"column\": \"Mod\\u00e8le\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 4,\n \"samples\": [\n \"Regression Logistique\",\n \"SVM Lineaire\",\n \"Random Forest\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Vectorisation\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 2,\n \"samples\": [\n \"TF-IDF\",\n \"BoW\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Meilleurs param\\u00e8tres\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 8,\n \"samples\": [\n \"{'C': '1.0', 'max_iter': '1000', 'solver': 'liblinear'}\",\n \"{'C': '0.1', 'max_iter': '1000', 'solver': 'liblinear'}\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Accuracy\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.007192113012413891,\n \"min\": 0.7648,\n \"max\": 0.7854,\n \"num_unique_values\": 16,\n \"samples\": [\n 0.771925,\n 0.785225\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Precision\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.005252241847122117,\n \"min\": 0.7635874975114474,\n \"max\": 0.7798014096825642,\n \"num_unique_values\": 16,\n \"samples\": [\n 0.7798014096825642,\n 0.7795912365828555\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Recall\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.021208419859024552,\n \"min\": 0.7568,\n \"max\": 0.8074,\n \"num_unique_values\": 15,\n \"samples\": [\n 0.7584,\n 0.7625\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"F1 Score\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.009987107577157433,\n \"min\": 0.7653397186471116,\n \"max\": 0.788185362483344,\n \"num_unique_values\": 16,\n \"samples\": [\n 0.7686690164059132,\n 0.7873672747073237\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"ROC AUC\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.008073892898588831,\n \"min\": 0.8416485,\n \"max\": 0.86671001875,\n \"num_unique_values\": 16,\n \"samples\": [\n 0.85152670125,\n 0.86671001875\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Temps d'entra\\u00eenement (s)\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 5773.421748128435,\n \"min\": 1.4726371765136719,\n \"max\": 17489.656234502792,\n \"num_unique_values\": 16,\n \"samples\": [\n 17489.656234502792,\n 65.19242358207703\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Run ID\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 16,\n \"samples\": [\n \"7d52e808227f468da7f733265280fc02\",\n \"94a0cf29a68b402ab37098a44d1c1ee6\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Run Name\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 8,\n \"samples\": [\n \"Modele_Simple_Regression_Logistique_TF-IDF\",\n \"Modele_Simple_Regression_Logistique_BoW\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}"}},"metadata":{},"execution_count":27}],"source":["results_df"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"w0WL6NSxWxlQ"},"outputs":[],"source":["def afficher_tableau_comparatif(df):\n"," \"\"\"\n"," Affiche un tableau comparatif formaté des résultats\n","\n"," Parameters:\n"," -----------\n"," df : pandas.DataFrame\n"," Dataframe contenant les résultats à afficher\n"," \"\"\"\n"," if df.empty:\n"," print(\"Aucun résultat à afficher.\")\n"," return\n","\n"," # Sélectionner et formater les colonnes pour l'affichage\n"," df_display = df[[\"Modèle\", \"Vectorisation\", \"Accuracy\", \"Precision\", \"Recall\",\n"," \"F1 Score\", \"ROC AUC\", \"Temps d'entraînement (s)\"]]\n","\n"," # Formater les valeurs numériques\n"," for col in [\"Accuracy\", \"Precision\", \"Recall\", \"F1 Score\", \"ROC AUC\"]:\n"," if col in df_display.columns:\n"," df_display[col] = df_display[col].apply(lambda x: f\"{x:.4f}\" if x is not None else \"N/A\")\n","\n"," if \"Temps d'entraînement (s)\" in df_display.columns:\n"," df_display[\"Temps d'entraînement (s)\"] = df_display[\"Temps d'entraînement (s)\"].apply(\n"," lambda x: f\"{x:.2f}\" if x is not None else \"N/A\")\n","\n"," # Afficher le tableau\n"," print(\"\\n=== Comparaison des modèles ===\\n\")\n"," print(df_display.to_string(index=False))\n","\n"," # Identifier le meilleur modèle selon la précision\n"," if \"Precision\" in df.columns:\n"," best_idx = df[\"Precision\"].idxmax() if not df.empty else None\n"," if best_idx is not None:\n"," best_model = df.loc[best_idx]\n"," print(\"\\n=== Meilleur modèle ===\")\n"," print(f\"Modèle: {best_model['Modèle']}\")\n"," print(f\"Vectorisation: {best_model['Vectorisation']}\")\n"," print(f\"Precision: {best_model['Precision']:.4f}\")\n"," print(f\"Meilleurs paramètres: {best_model['Meilleurs paramètres']}\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"Ou07_WmDWxlQ","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1751740004112,"user_tz":-120,"elapsed":8,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"4f3f00f7-3000-47f0-f2e1-ad34d27716d1"},"outputs":[{"output_type":"stream","name":"stdout","text":["\n","=== Comparaison des modèles ===\n","\n"," Modèle Vectorisation Accuracy Precision Recall F1 Score ROC AUC Temps d'entraînement (s)\n"," Random Forest BoW 0.7719 0.7798 0.7579 0.7687 0.8515 17489.66\n","Regression Logistique TF-IDF 0.7852 0.7796 0.7953 0.7874 0.8667 65.19\n"," Naive Bayes BoW 0.7721 0.7785 0.7605 0.7694 0.8441 2.82\n"," SVM Lineaire TF-IDF 0.7854 0.7781 0.7985 0.7882 0.8665 122.32\n"," Naive Bayes TF-IDF 0.7704 0.7776 0.7574 0.7674 0.8511 4.32\n"," Naive Bayes TF-IDF 0.7696 0.7766 0.7568 0.7666 0.8524 4.27\n","Regression Logistique TF-IDF 0.7832 0.7766 0.7950 0.7857 0.8611 36.01\n"," Naive Bayes BoW 0.7718 0.7766 0.7632 0.7698 0.8432 1.47\n"," SVM Lineaire TF-IDF 0.7842 0.7765 0.7981 0.7872 0.8612 51.15\n"," Random Forest BoW 0.7689 0.7746 0.7584 0.7664 0.8439 6377.44\n","Regression Logistique BoW 0.7829 0.7723 0.8024 0.7871 0.8584 896.35\n"," Random Forest TF-IDF 0.7675 0.7702 0.7625 0.7663 0.8484 16182.08\n"," SVM Lineaire BoW 0.7822 0.7687 0.8074 0.7876 0.8583 458.62\n","Regression Logistique BoW 0.7792 0.7672 0.8018 0.7841 0.8514 371.54\n"," SVM Lineaire BoW 0.7801 0.7655 0.8074 0.7859 0.8516 187.81\n"," Random Forest TF-IDF 0.7648 0.7636 0.7671 0.7653 0.8416 5977.55\n","\n","=== Meilleur modèle ===\n","Modèle: Random Forest\n","Vectorisation: BoW\n","Precision: 0.7798\n","Meilleurs paramètres: {'max_depth': 'None', 'min_samples_split': '5', 'n_estimators': '200'}\n"]}],"source":["# Afficher le tableau comparatif\n","afficher_tableau_comparatif(results_df)"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"etUvFhueWxlQ"},"outputs":[],"source":["def display_metrics_subplot(df, figsize=(18, 14)):\n"," \"\"\"\n"," Génère des sous-graphiques pour visualiser toutes les métriques avec une échelle fixe (0,1)\n","\n"," Parameters:\n"," -----------\n"," df : pandas.DataFrame\n"," DataFrame contenant les résultats des modèles avec leurs métriques\n"," figsize : tuple, optional\n"," Taille de la figure (largeur, hauteur)\n"," Returns:\n"," --------\n"," matplotlib.figure.Figure\n"," La figure générée\n"," \"\"\"\n"," # Définir les métriques à visualiser\n"," metriques = [\"Accuracy\", \"Precision\", \"Recall\", \"F1 Score\", \"ROC AUC\"]\n","\n"," # Créer une figure avec des sous-graphiques\n"," fig, axes = plt.subplots(3, 2, figsize=figsize)\n"," axes = axes.flatten()\n","\n"," # Définir une palette de couleurs cohérente\n"," palette = sns.color_palette(\"Set2\", len(df[\"Vectorisation\"].unique()))\n","\n"," # Créer un barplot pour chaque métrique\n"," for i, metrique in enumerate(metriques):\n"," ax = axes[i]\n","\n"," # Créer le barplot\n"," sns.barplot(\n"," x=\"Modèle\",\n"," y=metrique,\n"," hue=\"Vectorisation\",\n"," data=df,\n"," ax=ax,\n"," palette=palette\n"," )\n","\n"," # Configurer l'axe y pour qu'il aille de 0 à 1\n"," ax.set_ylim(0, 1)\n","\n"," # Ajouter une grille horizontale pour faciliter la lecture\n"," ax.grid(axis='y', linestyle='--', alpha=0.7)\n","\n"," # Définir le titre du sous-graphique\n"," ax.set_title(f\"{metrique}\", fontsize=14, fontweight='bold')\n","\n"," # Rotation des étiquettes de l'axe x pour éviter le chevauchement\n"," ax.set_xticklabels(ax.get_xticklabels(), rotation=45, ha='right')\n","\n"," # Ajouter des valeurs au-dessus des barres\n"," for p in ax.patches:\n"," height = p.get_height()\n"," ax.text(\n"," p.get_x() + p.get_width()/2.,\n"," height + 0.01,\n"," f'{height:.3f}',\n"," ha=\"center\", fontsize=9\n"," )\n","\n"," # Ne garder la légende que sur le premier graphique\n"," # if i != 0:\n"," # ax.get_legend().remove()\n","\n"," # Ajuster la disposition pour éviter le chevauchement\n"," plt.tight_layout()\n","\n"," # Ajouter un titre global\n"," fig.suptitle(\"Comparaison des performances des modèles par métrique\",\n"," fontsize=18, fontweight='bold', y=1.02)\n","\n"," # Afficher la figure (si dans un notebook)\n"," plt.show()"]},{"cell_type":"code","source":["def display_metrics_subplot(df, figsize=(18, 14)):\n"," \"\"\"\n"," Génère des sous-graphiques pour visualiser toutes les métriques.\n"," Le graphique de Précision occupe 2 colonnes.\n","\n"," Parameters:\n"," -----------\n"," df : pandas.DataFrame\n"," DataFrame contenant les résultats des modèles avec leurs métriques\n"," figsize : tuple, optional\n"," Taille de la figure (largeur, hauteur)\n"," Returns:\n"," --------\n"," matplotlib.figure.Figure\n"," La figure générée\n"," \"\"\"\n"," if df.empty:\n"," print(\"Aucun résultat à afficher.\")\n"," return None # Retourne None si le dataframe est vide\n","\n"," # Définir les métriques à visualiser (sans la Précision initiale)\n"," other_metriques = [\"Accuracy\", \"Recall\", \"F1 Score\", \"ROC AUC\"]\n","\n"," # Créer une figure et une grille de sous-graphiques (3 lignes, 2 colonnes)\n"," fig = plt.figure(figsize=figsize)\n"," gs = fig.add_gridspec(3, 2)\n","\n"," # Définir les axes pour la Précision (span 2 colonnes)\n"," ax_precision = fig.add_subplot(gs[0, :]) # La Précision occupe la première ligne, les deux colonnes\n","\n"," # Définir les axes pour les autres métriques (remplir les 2 lignes restantes)\n"," axes_other = [fig.add_subplot(gs[1, 0]), fig.add_subplot(gs[1, 1]),\n"," fig.add_subplot(gs[2, 0]), fig.add_subplot(gs[2, 1])]\n","\n"," # Définir une palette de couleurs cohérente\n"," palette = sns.color_palette(\"Set2\", len(df[\"Vectorisation\"].unique()))\n","\n"," # Fonction utilitaire pour ajouter les valeurs au-dessus des barres\n"," def add_value_labels(ax):\n"," for p in ax.patches:\n"," height = p.get_height()\n"," if height > 0: # N'affiche le label que si la hauteur est > 0\n"," ax.text(\n"," p.get_x() + p.get_width()/2.,\n"," height + 0.01,\n"," f'{height:.3f}',\n"," ha=\"center\", fontsize=9\n"," )\n","\n","\n"," # Tracer le graphique de Précision\n"," sns.barplot(\n"," x=\"Modèle\",\n"," y=\"Precision\",\n"," hue=\"Vectorisation\",\n"," data=df,\n"," ax=ax_precision,\n"," palette=palette\n"," )\n"," ax_precision.set_ylim(0, 1)\n"," ax_precision.grid(axis='y', linestyle='--', alpha=0.7)\n"," ax_precision.set_title(\"Precision (Métriques clé)\", fontsize=14, fontweight='bold')\n"," ax_precision.set_xticklabels(ax_precision.get_xticklabels(), rotation=45, ha='right')\n"," ax_precision.set_xlabel(\"\") # Masquer l'étiquette x pour la Précision si désiré\n"," add_value_labels(ax_precision) # Ajouter les valeurs\n","\n","\n"," # Tracer les graphiques pour les autres métriques\n"," for i, metrique in enumerate(other_metriques):\n"," ax = axes_other[i]\n","\n"," sns.barplot(\n"," x=\"Modèle\",\n"," y=metrique,\n"," hue=\"Vectorisation\",\n"," data=df,\n"," ax=ax,\n"," palette=palette\n"," )\n","\n"," ax.set_ylim(0, 1)\n"," ax.grid(axis='y', linestyle='--', alpha=0.7)\n"," ax.set_title(f\"{metrique}\", fontsize=14, fontweight='bold')\n"," ax.set_xticklabels(ax.get_xticklabels(), rotation=45, ha='right')\n"," add_value_labels(ax) # Ajouter les valeurs\n","\n"," # Ne garder la légende que sur l'un des graphiques (par exemple, le premier des autres)\n"," if i != 0:\n"," ax.get_legend().remove()\n"," else:\n"," # Placer la légende de la précision à un endroit approprié si on ne veut pas de légendes répétées\n"," # ax_precision.legend(loc='upper right') # Exemple de placement\n","\n"," # Ou retirer la légende de la précision si on la garde sur le premier des autres\n"," ax_precision.get_legend().remove() # Retirer la légende de la précision\n","\n"," # Ajuster la disposition pour éviter le chevauchement\n"," plt.tight_layout()\n","\n"," # Ajouter un titre global\n"," fig.suptitle(\"Comparaison des performances des modèles\",\n"," fontsize=18, fontweight='bold', y=1.02) # Ajuster y si nécessaire\n","\n"," # Afficher la figure (si dans un notebook)\n"," plt.show()"],"metadata":{"id":"lv_FsbT_OlC1"},"execution_count":null,"outputs":[]},{"cell_type":"code","execution_count":null,"metadata":{"id":"Noe09nRHWxlQ","colab":{"base_uri":"https://localhost:8080/","height":1000},"executionInfo":{"status":"ok","timestamp":1751740006350,"user_tz":-120,"elapsed":2184,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"93abb9a5-d96c-424d-f81f-693fde709861"},"outputs":[{"output_type":"display_data","data":{"text/plain":["
"],"image/png":"iVBORw0KGgoAAAANSUhEUgAABv0AAAWZCAYAAABe3dlUAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3Xd8FNX+//H3ppJCGqEHEpDQexcQQu9IkSKCIggIihRRUbwXvBevIoJUsaAISBUFaQICoaMSeujSpEhPgSSk7u8PftlvNrtpJCFZeT0fjzwemTPnzHzO7uxMMp89ZwxGo9EoAAAAAAAAAAAAADbLLq8DAAAAAAAAAAAAAJA9JP0AAAAAAAAAAAAAG0fSDwAAAAAAAAAAALBxJP0AAAAAAAAAAAAAG0fSDwAAAAAAAAAAALBxJP0AAAAAAAAAAAAAG0fSDwAAAAAAAAAAALBxJP0AAAAAAAAAAAAAG0fSDwAAAAAAAAAAALBxDnkdAAAAAAAAAB6/mzdvau7cuTIajZKkIUOGqESJEnkcFQAAAB4VST8AAAAAAIAnUJEiReTt7a2RI0dKkrZt26Zt27bJwYHbRQAAALaI6T0BAADwRAoKCpLBYDD9DBgwIK9Dyte2b99u9noZDAZdvHgxr8N6Ii1dulRt2rRR0aJF5ejoyHuCPDVgwACzYzAoKCivQ4Kydo174403NH36dEnSrl27NH78+Ezt4+LFixbXhe3bt2c/eAAAADwyvroFAACQyunTp7V06VLt3r1bZ86c0d27dxUXFydPT08FBgaqYcOG6tKli5o1ayaDwZDX4QJ4gowZM0afffZZXocB4B9m5MiRMhqNGj16tKZMmaJnnnlGnTp1yuuwAAAAkEUk/QAAAP6/69eva/jw4Vq9erXp2TYp3b59W7dv39a+ffv02WefqUePHlq5cmUeRArgSfTXX39pxowZeR0GgH+oUaNGSZJGjx6tF198UQcPHlRAQECexgQAAICsIekHAAAgKSQkRB07dtTNmzcz3eb27du5GBFy27Jly/TgwQPTsru7ex5GA2Rs//79SkpKMiubO3euWrZsKUdHR0mSn59fXoQG4B9i1KhRpuQfAAAAbA9JPwAA8MS7dOmS1YRfiRIl9MYbb6hp06by9fVVZGSkjh07pg0bNmj16tV5EyxyTLFixfI6BCBL7t+/b1E2dOhQphkGAAAAAEiS7PI6AAAAgLw2duxYi4Rf06ZNdeLECb3zzjt6+umnFRgYqDp16mjAgAFasWKFzp07p27dulndXnx8vL7//nv16NFD/v7+cnV1lYuLi0qVKqUuXbrom2++UWxsrNW227dvl8FgMPu5ePGiQkND9fzzz6tYsWJydXVVtWrVNG3aNCUkJJjarl+/Xq1atZKPj4/c3NxUp04dff7551anKpVksZ/vvvtODx480EcffaQaNWrI3d1dXl5eatGiRbpJzlWrVum9995Tu3btVKlSJRUtWlROTk5yc3NT6dKl1aFDB33++edWExaSdPHiRYtYtm/fruvXr+uNN95QuXLlVKBAAbPExvHjx/Xpp5/qhRdeUO3atVW6dGm5u7vLyclJhQsXVsOGDTV27FidPHkyzbiDgoLM9jlgwACLOmFhYfrf//6npk2bqmjRonJ2dparq6v8/f1Vv359DRkyRPPmzdOVK1es7sNoNGrt2rXq27evypUrp4IFC8rZ2VnFixdXmzZtNH36dEVGRmbpdYmIiND777+vypUry8XFRV5eXmrZsqU2btyYZl8za9++feratasKFy4sFxcXVaxYUe+//77u3buXpe08ePBA8+bNU5cuXVSqVCm5uLjI3d1d5cuX16BBg/THH3+k237r1q3q37+/KlasqIIFC8rR0VG+vr6qVKmSOnXqpA8++ECbNm3Kcv/Sek3Dw8P17rvvqmLFinJxcZGvr686d+6sHTt2ZLjNvXv3asiQIapSpYo8PT3l5OSk4sWLq3379vrmm28UHx9vtV1an/WzZ89q4MCBKl26tJycnBQQEKCJEyemeYza2dmZ2gcFBVmsP3v2rN566y3Vq1dPhQoVkqOjo3x8fFSrVi2NHDlSx48fT7Nv1j4jSUlJ+vLLL9WoUSN5eXmZzh2S9N1331n0SZL27NmjLl26yNfXV+7u7qpXr57mz59vtq9FixapUaNG8vDwkIeHh5o0aaLly5enGVtunXey8/k6evSoRo0apXr16snX19d0PqpWrZqGDBmiDRs2pNl248aN6t+/vwIDA1WwYEEVKFBApUqVUvfu3fXDDz+keR6XHj6HdtSoUapdu7a8vb3l6OgoT09PlStXTkFBQRo7dqxWrFihqKioDPtgTUJCgmbNmqU6derIzc1N3t7eat68+SNNb33x4kW9++67atCggek1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GT0HLSwsTP/5z39Ut25deXp6ysnJSSVLllT37t3166+/WtT/7rvvzF6j2NhYffjhhypfvrycnZ3l5+ensWPHKjY2NsP3JVlMTIyWLVtmWu7Ro0e69e3sHv6rGBsba5YsvH79ulasWCHp4SiujKxdu1bPPvusihcvLicnJ3l5ealZs2b65ptvTNOMSv/3Gu7YscNUtmDBAqvTh6aeAjQ0NFRdu3ZVoUKF5OzsrJMnT2b4TL/bt29r6NChKlq0qFxcXFS3bl398MMPFsdnyilL05t6NPV7llpsbKxmz56tpk2bysfHR05OTipevLh69uypffv2WX3tvvvuOwUFBcnX11eOjo7y9vZWhQoV1Lt3b33++ecZvvYpXblyRe+8845q1aolDw8PFShQQKVLl1bXrl2tHoNpiYyM1EcffaQGDRqYjuVSpUrphRde0IEDB6y2KVmypJ5++mlJUnh4uH766acsxQ4AAAAg8xjpBwAAACDHPf3001q8eLFp+fr161brDRw4ULt27bIoj4mJUZcuXbRlyxaz8tu3b2vDhg3asGGDxowZo6lTp5qt/+abbzR8+HDFxcWZlV+4cEEXLlxQw4YNVbdu3XRjP3HihBo2bKjo6Giz8suXL+vy5csKDg5Ws2bNVLJkyXS3Iz2c1rJNmza6cuWKWfm1a9e0atUqrVq1SiNHjtT06dPT3EarVq20e/du0/LVq1c1depU3bx5UwsXLswwBkn67bffdO/ePUlS4cKFFRgYmG796tWrKywsTJcuXdIXX3yhcePGycHBQXPnzlV8fLwkqUuXLlq1apXV9klJSRowYIAWLVpkVh4REaGdO3dq586dWr58udauXZupEaBpOXr0qBo2bKioqKhMtwkLC1Pjxo115swZU9mBAwfUq1cvde7c+ZFjScutW7fUpk0bHT582Kz8+vXrWrlypX766SdNmzZNI0eONK2bOHGiPvjgA7P64eHhCg8P15kzZ7Rjxw4NHz48U/vfsGGD+vTpY3r/kyUfzwEBAWrdunWG2zl79qzatGlj8ezGK1euaMmSJVq+fLk+//xzDRkyxKLt008/rb1790qSfv31V7MvBQAAAADIOST9AAAAAOS41KOXihUrZrXerl27VKVKFXXu3FlGo9E0emz06NGmhJ+Tk5P69OmjwMBAHTt2TD/88IOMRqOmTZumOnXqqG/fvpIe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l7+/v2bOnJkm4DdhwoTbtkw4deqU8XOFChV06NAhnT17Vrt27dKlS5fk5uamhg0b6vfff9f58+clSb/88gtBPwDAAyHoBwBwGt99951SUlIkSSaTyVgqpVOnTsqVK5cSEhIk3WyMffLJJ5KUZoRl69at0wT8JMnd3V3FihWTdHNWoMViMY69+eabaQJ+0s2Zfxlt8ODBtwX8pJt7//Xq1UthYWH/eP25c+ckSXFxcdq7d6+R3qdPnzQBP+lmIDB10PLFF180gn4///yzLly4oCJFimjRokXGOSztCQAAAOBh0LlzZw0cONB4HBcXp3379hmPZ8+erdmzZ6d7rcVi0c6dO9WmTZs07cw8efLojTfeuO384OBg4+dr167p6aefvm0biVvZ23YAANwvs6MzAADA3Uq9tGe9evWMAFyePHnUtm1b49icOXOM4F3qJVyCgoL+8f6pz72b82916x56iYmJd3VduXLl0k3v1KnTvwb8Uj9PZGRkmjzcTf4rVaqkJk2aSJJSUlI0Y8YM7dixw1jas0CBAmrXrt2/3gcAAAAAspPu3btr4sSJadozc+bMUceOHY12061tqH9z5coVSWnbjsWLF0+zN3p6nn322X8N+El334YEAOBOmOkHAHAKO3bs0OHDh43H27Ztk8lkSvfc8PBw/fzzz+rQoYP8/f2N5TtPnz79j8/h7++f5vHp06dVq1atO55vNqcdOxMfH2/8bLVadfLkyX98Prv0lgs9evSo/vjjD+Pxk08+qQ8//FBFihSRyWRSQECA0eC08/Pzk8lkMhqt/1ZeuxdffFEbN26UJE2fPl3Xrl0zjvXu3Vtubm53dR8AAAAAyC7atGmjvn37SpIGDhyo//73v5Kk9evX6/vvv9dTTz1124orHTp0uG11mNSqV68uKW3b8e+//1ZKSsodA383btxIszd88+bNNXXqVJUsWVIuLi6qXbu2du3adT9FBADgNsz0AwA4hdSz/O7l/AYNGhhpa9as0bZt29KcZ7FYjP0T6tSpI1fX/42H+eCDDxQXF5fm/AsXLig5OVmSbmsgbt++3fj5m2++uS0ody9SB94k6YknnlDRokVlMpm0cePGdO/t5eWlatWqGY+/++47nThxIs058fHxRhDUrmPHjipRooSkm/tOTJkyxTjWr1+/+y4DAAAAAGQH77//vvLmzWs8HjdunFJS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wIED1aNHDyUlJWnGjBm5hne5//771bZtW7Vu3ZoACId36dIl1ahRQ8HBwfL09JSnp6eee+451alTR19//bVMJpMqV66sOnXqqFGjRjp16pQ+//xzbdq0Sc8++ywBEHe8n3/+WX/88Yf18fr16/Xf//5X0dHRSk9Pl9FoVJ8+fXT+/HktWrTIup2/v7/KlSungIAAGQwGmc1mwh8citls1oYNG5ScnKzly5drwYIFknIP9XLt4yeeeEL9+vUjAALIhbwH3BoyH3BzZD6g4Mh7sGd0+pVwFotFBoNBR44c0YIFCzR//nxFRETIyclJffr0UZs2bXTixAnNnDkzVxAcMWKEAgMDbVg5YB9SUlJ05swZSVcOxDmT6t5zzz1KS0tTTEyMdducK9ZcXV01fvx4BQcH26JkoNicPXtWycnJqlWrlqS/f3RMS0vThAkT9N1332n37t3y9vbW0KFDdeLEiRvOecLwLnA0RqNR1atXV9myZdWhQwdt2rTppkEwOztbkjRy5EiOLwCsyHvArSPzATdG5gMKh7wHe8acfneAHTt26KuvvlKNGjWUmZmp48ePq2vXrnrggQfk4uKiRYsWae/evQoMDNTDDz/M5KBwWHmNK3/69Gl99NFHCg0N1f33329d/scff2jq1Kl69dVXVb58+VzPyRnOAnAkW7dulY+Pjxo3bixJWrdunY4cOaLNmzerW7duMhgM2rdvn0aMGKFWrVrZuFqg+F09B8rVwxqNGzdOpUuXVnBwsFavXq3u3btr4MCBkvI+LgHAtch7QP6R+YDCI/MBN0beQ0nCGUwJFxMTo59++kn33XefunfvLrPZrH379umjjz6SwWDQI488on79+lnDYUZGBiEQDufo0aMKDg6Wq6vrdQfcwMBA3X333dq9e7emTZumYcOGKTExUYsWLVLp0qVVrly56/ZH+IMjsVgsSkhI0OLFi+Xv76+srCyFhoaqS5cu6tSpk+6++26tXr1aqampOn/+vDZv3kwAhMO5dhL3q4c16tWrl/bs2aNmzZopKytLq1atksFg0IABA66b8wEArkXeA/KHzAcUHpkPuDnyHkoazmJKkLVr16pKlSqqVauWdW6G9PR0OTk5qX79+tbtmjRpoueff16TJk1S8+bN1bRpUw0bNkwpKSny8fGxVfmATcTExGjatGkqW7as/vOf/8jFxcV6wLVY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fOXaCxcu6J133lGHDh1Urlw5ubq6ysvLSw0aNNDDDz+slStXymKxFPj9AADsk7OtCwAAoDjMmjVLn332WZHt79SpU2rfvr3OnDmTa3lsbKxiY2P1xx9/aNGiRWrcuLEqV65cZK8LAAAAAI7EbDYrISFBe/bs0Z49e/TTTz8pIiLiupxlMpn0wgsv6PPPP79uHzExMYqJidGGDRs0adIkzZgxQ927d79uu8uXL2v06NFatGjRdesuXbqkrVu3auvWrdq0aVOBLx79+eefZTKZci1bunTp/7F33/FRVPv/x9+72XRIo0MuBAhICb0poFIUUQEBpanXgiIgWFARRbmAioodlYvX61cBlSaCVAHpvQtIB6VITUIq6cnu7w9+mZslCSRhk90lr+fjkcdj58yZ2TObOTv7mc/MGcXExCgkJKRQ6yqof//733r55ZeVmppqV56RkaGDBw/q4MGD+vbbb3XixAmFhYUVSxsAACWLpB8AwK3169dPLVu2zFUeERGRq6xSpUpq0aKFgoKCNGPGjBt631GjRhkJP4vFoj59+qhBgway2Wz666+/tHnzZh09evSG3qM4ZGVlKS0tTX5+fs5uCgAAAADkKzvWS0hI0C+//KI//vhD0pU75j799FN98skndvWfe+45ffXVV8Z01apV1bdvX5UvX15//PGH5s6dq6ysLEVHR6t79+5avXq12rVrZ9RPSkpSly5dtHPnTqOscuXK6tmzp6pXr67ExETt3r1bq1atKtL2TJs2LVdZenq6ZsyYoeHDhxdpndfywQcfaNSoUca0h4eH7r//frVo0UImk0nHjx/X8uXLdfHiRYe/NwDAeUj6AQDcWteuXfMc6uRq7733nj777DNJV4aNudGk34oVK4zXb775psaOHZurzqFDh+Tr65urPDMzU9OnT9esWbO0d+9excbGKjAwULVr19a9996ba11Hjx7Vp59+qtWrVxvDhYaGhqpjx44aMWKE6tWrZ1f/iSeeMALKO++8U9OnT9cbb7yhFStWKCoqSvPmzVPPnj0lXRnqZdKkSVq6dKn+/PNPZWRkKDQ0VPfcc49GjRql6tWr39DnBAAAAABFkTPWe/nll1WxYkWlp6dLkg4ePGhXd/PmzXYJv+bNm2vNmjUKCAgwylavXq27775bVqtV6enpGjx4sPbt2yez+crTj9555x27hN8DDzygGTNm5Lpg8ty5c1q0aFGhtmXHjh06cOCAMV23bl3jItGpU6c6POl38OBBjR492piuWLGili1bpmbNmtnVy8jI0NSpU7koFABuIjzTDwBQKuSVfLsROYdlOXz4sNLS0nLVqV+/fq4hUmJiYtS2bVs99dRT+u233xQZGamMjAxFR0dr27Zt+vTTT+3q//TTT2rSpIm++uorHT16VCkpKUpJSdGxY8f09ddfq2nTppo1a1a+7Tx37pzatGmjH374QZGRkXbPatiyZYsiIiL03nvvae/evbp8+bLS0tL0559/6t///rcaN26sDRs2FPETAgAAAADHCAwMVJkyZYzp8uXL283/+uuv7aY/+OADu4SfJHXq1En9+vUzpg8cOGDEOxkZGZo8ebIxr3Llyvrxxx/zTIZVrVpVgwcPLlT7v/vuO+N1aGioPvjgA2N6165dxl2MjvLFF18oKyvLmJ4yZUquhJ8keXp6atCgQapYsaJD3x8A4Dzc6QcAcGvLli1TdHR0rvJ+/foV67P0mjdvrnXr1kmSZs2apaVLl+q2225T8+bN1aZNG3Xq1Elly5bNtdw///lP7dixw5iuX7++7rvvPnl7e+v333/Xtm3bjHnHjx/XP//5TyOhWK5cOT3++OMymUyaNm2aoqOjlZaWpscff1wtWrRQnTp1cr3fsWPHJEm9e/dWkyZNdOrUKQUGBiohIUE9e/Y0PrsaNWqoX79+8vX11dy5c3XgwAHFx8frwQcf1LFjxxQYGOi4Dw8AAAAACighIUFTp05VTEyMUda3b1+7OjkvVgwODlbnzp3zXFe/fv00c+ZMu+XuvPNO7dixQ4mJiXb1/P39HdL+tLQ0uws1+/btq3vvvVdBQUGKi4uTdOVuv48//tgh7yfJbgjS4OBgY6QXAMDNj6QfAMCtzZ49W7Nnz85V3rJly2JN+n3wwQe6/fbbjeFlEhIStHz5ci1fvlyS5OPjo2eeeUbvvfeecXXoH3/8oaVLlxrruO+++/TLL7/I09PTKPvrr7+M119++aWR8DObzVq7dq3xrMInnnhCTZo0MYammTx5sjF86dU+++wzvfDCC3Zln3/+uSIjIyVdCQJ3795tPDx+5MiRqlmzpqKiohQVFaVp06bp+eefL/JnBQAAAACF9eSTT+rJJ5+0K/Pz89P48ePVo0cPu/Lz588br2vUqJHvOq+el73c2bNn7cqvfoTCjViwYIFiY2ON6QEDBsjLy0u9e/fWt99+K0n68ccfNXHiRFksjjlVm3N76tatawxhCgC4+fGNDwBAEbRu3Vrbtm3TAw88YJe0y5aamqrPP/9czz77rFG2ceNGuzpjx47NtWytWrWM11u2bDFet2jRwkj4SVJERIRatGiRZ92cgoODNWzYsFzlmzZtMl7HxsaqXLlyMplMMplMKlOmjKKiooz5mzdvznPdAAAAAFCSevXqpSFDhji7GYUydepU43V4eLhatmwpSerfv79RfvHiRbsLRAEAKCqSfgAAt/bdd9/JZrPl+uvQoUOxv3fTpk31yy+/KC4uTmvWrNF7772X632nTZtmDEOTczgaSapZs+Y115+zfqVKlXLNz1mW88rRnGrXrp3n1aJXt+VaciYAAQAAAKAk9OvXT++++666detmlP3444964IEH7J5VLklVqlQxXp8+fTrfdZ46dSrP5apVq2ZXfvjw4SK3O6dz585pxYoVxnTOZwp26tTJ7ll6OZODkuziuNTU1FzrTklJsZv28vIyXufcnqNHj+b6vAAANy+SfgAA3CA/Pz916NBBr732mtasWaO33nrLbn72c/Wyh8/MduLEiWuuN2f9ixcv5pqfsyw4ODjPdeT3HIqc665SpYo+/PDDfP+eeeaZa7YTAAAAAByta9euev3117Vo0SINHjzYKF+9erV++OEHu7q333678TomJkarV6/Oc51z5szJc7lWrVrZPZN9zpw5Sk5OvuFt+P7775WVlWVMT5gwwRhhxWKxGI9ckKQlS5bo0qVLxnSFChWM13nFjjkfDXF1/ZzPNIyNjdWCBQtubEMAAG6DpB8AAEXw3HPPae3atXleMVmmTBm76aCgIElS+/bt7crffvttZWZm2pXlvPK0bdu2xutdu3bpwIEDxvT+/fu1a9euPOsWRM76UVFR6tKli1555RW7v5dffllNmzZV69atC7VuAAAAAHCk999/X4GBgcb0W2+9ZZdMu/pCxVGjRikxMdGubO3atXbPg2/QoIGR9PP09LR7NMP58+f1z3/+M9fddNKVu/e+/vrrArX76rv3riU9PV0//vijMd2mTRvj9fbt2/Xbb78Z06dOndL3339vTJcrV07h4eHG9PDhw+Xh4WFMDx06VHv37s31nhkZGfrmm2/sko8AAPdmsnF/NwDAjaxdu1YdO3Y0pr/77js98cQT111uxYoVxrAqf//9t90Vnn379tU//vEPSVKXLl3UpUuX664vLCxMp06dUtWqVXXnnXeqTp068vLy0pEjRzR79mylp6dLujKE559//imTySRJuv/+++2e1dCgQQPdd9998vHx0YEDB7R+/XpFR0dLko4fP66IiAilpaVJuhLIPf744zKZTJo2bZpRz8vLSwcOHDCCvCeeeELTpk2TJN15551au3ZtrvbHx8crPDzcWEeZMmXUp08fhYeHKy0tTUeOHNHatWt18eJFrVmzpkSGSwUAAABQel0v1nvjjTf07rvvGtM//vijHn74YWN6yJAh+s9//mNMV6tWTX379lX58uX1xx9/aO7cucZFl15eXlq9erXatWtn1L98+bLuvPNO7d692yirUqWKevXqpdDQUCUmJmr37t1atWqV2rVrl2ecldPWrVt12223GdNt2rRRWFhYrnqrVq0y4rKmTZvq999/lyT99ttvdrGp2WxWRESE/Pz8tG/fPrs7Ed944w298847dut97733NHr0aGPaYrGoW7duatasmUwmk44fP67ly5fr4sWLOnHiRJ5tAwC4IRsAAG5kzZo1NknG33fffVeg5caOHWu3XH5/Y8eOLdD6atSocd11+fj42FatWmW3XHR0tK1Vq1b5LhMYGGhXf86cOTYfH59863t7e9tmzpxpt8zjjz9uzL/zzjvz3YZNmzbZypcvf93tWLNmTYE+EwAAAAAoquvFepGRkTY/Pz9jfsOGDW1Wq9WYn5GRYRs+fPh145ty5crZli9fnmcboqOjbd26dbvuOq4VZ2UbPHiwUd9sNttOnTqVZ70xY8bYrXvv3r3GvH/961/Xbcs999xjS0tLy3PdkyZNsnl7e193HSdOnLju9gAA3APDewIAUATLly/Xl19+qd69eysiIkIVK1aUxWKRv7+/GjRooGHDhumPP/5Qp06d7JYrV66cNm3apG+++UZ33XWXKlSoIIvFouDgYLVo0UIvvviiXf0+ffpoz549GjJkiMLDw+Xj4yMfHx/Vrl1bgwYN0u+//67+/fsXaRvatm2rAwcOaMyYMWrRooUCAgLk4eGhoKAgtWjRQsOHD9dvv/2mO+64o6gfEwAAAAA4RIUKFfT0008b0wcOHND8+fONaYvFoi+++EK///67hg4dqgYNGqhs2bKyWCyq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\n"},"metadata":{}}],"source":["# Créer la visualisation\n","display_metrics_subplot(results_df)"]},{"cell_type":"markdown","metadata":{"id":"u83ZVCLJWxlQ"},"source":["### Identifier le meilleur modèle selon `Precision`"]},{"cell_type":"markdown","source":["Le contexte métier est le suivant : on souhaite éviter à tout prix qu'un tweet qui serait reçu négativement soit à tort prédit comme positif. La variable \"precision\" (basée sur la modalité 1 = tweet positif) est donc la plus pertinente."],"metadata":{"id":"eHr3Z6btZm2E"}},{"cell_type":"code","source":["# Identifier le meilleur modèle selon la précision\n","best_model_row = results_df.loc[results_df['Precision'].idxmax()]\n","best_model_name = best_model_row['Modèle'].replace(\" \", \"_\")\n","best_vectorizer = best_model_row['Vectorisation']\n","\n","print(f\"\\nMeilleur modèle (selon la précision): {best_model_row['Modèle']} avec {best_vectorizer}\")\n","print(f\"Precision: {best_model_row['Precision']:.4f}\")\n","print(f\"F1 Score: {best_model_row['F1 Score']:.4f}\")\n","print(f\"ROC AUC: {best_model_row['ROC AUC']:.4f}\")\n","print(f\"Meilleurs paramètres: {best_model_row['Meilleurs paramètres']}\")\n","print(f\"\\nRun ID du meilleur modèle: {best_model_row['Run ID']}\")\n"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"f07BiYp_ZgDh","executionInfo":{"status":"ok","timestamp":1751740006356,"user_tz":-120,"elapsed":5,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"d30f2935-f9a5-4df3-8fe9-082caf759620"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["\n","Meilleur modèle (selon la précision): Random Forest avec BoW\n","Precision: 0.7798\n","F1 Score: 0.7687\n","ROC AUC: 0.8515\n","Meilleurs paramètres: {'max_depth': 'None', 'min_samples_split': '5', 'n_estimators': '200'}\n","\n","Run ID du meilleur modèle: 7d52e808227f468da7f733265280fc02\n"]}]},{"cell_type":"markdown","metadata":{"id":"lv6SEBguWxlQ"},"source":["## Charger le meilleur modèle et son vectoriseur depuis MLflow"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"4n3rWdQ4WxlQ"},"outputs":[],"source":["def load_and_save_best_model(run_id, folder_path=\"content/simple-model/best\"):\n"," \"\"\"\n"," Charge le meilleur modèle et son vectoriseur depuis MLflow et les sauvegarde localement\n","\n"," Parameters:\n"," -----------\n"," run_id : str\n"," L'identifiant du run MLflow contenant le meilleur modèle\n"," folder_path : str, optional\n"," Le chemin où sauvegarder le modèle et le vectoriseur\n","\n"," Returns:\n"," --------\n"," tuple\n"," (modèle chargé, vectoriseur chargé)\n"," \"\"\"\n"," # Créer le dossier cible s'il n'existe pas\n"," try:\n"," os.makedirs(folder_path, exist_ok=True)\n"," except PermissionError:\n"," print(f\"Erreur de permission pour le dossier {folder_path}\")\n"," print(\"Tentative avec un dossier temporaire...\")\n"," import tempfile\n"," temp_dir = tempfile.mkdtemp()\n"," print(f\"Utilisation du dossier temporaire : {temp_dir}\")\n"," folder_path = temp_dir\n","\n"," # Créer un client MLflow\n"," client = MlflowClient()\n","\n"," print(f\"Chargement du modèle depuis le run {run_id}...\")\n","\n"," # Charger le modèle depuis MLflow\n"," best_model = mlflow.sklearn.load_model(f\"runs:/{run_id}/model\")\n","\n"," print(f\"Modèle chargé avec succès : {type(best_model).__name__}\")\n","\n"," # Récupérer les paramètres du run pour vérifier le type de vectoriseur\n"," run = client.get_run(run_id)\n"," vectorizer_type = run.data.params.get(\"vectorizer_type\", \"\").lower()\n","\n"," print(f\"Type de vectoriseur utilisé dans ce run : {vectorizer_type}\")\n","\n"," # Récupérer les artefacts du run\n"," artifacts = client.list_artifacts(run_id)\n","\n"," # Chercher le vectoriseur en privilégiant BoW ou CountVectorizer\n"," vectorizer_path = None\n","\n"," # Afficher les artefacts disponibles\n"," print(\"Artefacts disponibles :\")\n"," for artifact in artifacts:\n"," print(f\" - {artifact.path}\")\n","\n"," # Priorité 1: Chercher un vectoriseur correspondant au type attendu (BoW ou CountVectorizer)\n"," for artifact in artifacts:\n"," path_lower = artifact.path.lower()\n"," if \"vectorizer\" in path_lower and (\"bow\" in path_lower or \"countvectorizer\" in path_lower):\n"," vectorizer_path = artifact.path\n"," print(f\"Vectoriseur de type BoW/CountVectorizer trouvé : {artifact.path}\")\n"," break\n","\n"," # Priorité 2: Chercher n'importe quel vectoriseur\n"," if not vectorizer_path:\n"," for artifact in artifacts:\n"," if \"vectorizer\" in artifact.path.lower():\n"," vectorizer_path = artifact.path\n"," print(f\"Vectoriseur générique trouvé : {artifact.path}\")\n"," break\n","\n"," # Télécharger et charger le vectoriseur\n"," if vectorizer_path:\n"," local_path = client.download_artifacts(run_id, vectorizer_path)\n"," print(f\"Vectoriseur téléchargé dans : {local_path}\")\n","\n"," # Charger le vectoriseur depuis le fichier local\n"," with open(local_path, \"rb\") as f:\n"," vectorizer = pickle.load(f)\n","\n"," print(f\"Vectoriseur chargé avec succès : {type(vectorizer).__name__}\")\n"," else:\n"," print(\"Aucun fichier vectoriseur trouvé dans les artefacts, tentative de chargement direct...\")\n","\n"," # Tenter de charger le vectoriseur directement depuis MLflow\n"," try:\n"," vectorizer = mlflow.sklearn.load_model(f\"runs:/{run_id}/vectorizer\")\n"," print(f\"Vectoriseur chargé directement depuis MLflow : {type(vectorizer).__name__}\")\n"," except Exception as e:\n"," print(f\"Erreur lors du chargement direct du vectoriseur : {e}\")\n"," raise FileNotFoundError(\"Aucun vectoriseur trouvé dans les artefacts du run\")\n","\n"," # Sauvegarder le modèle et le vectoriseur localement avec leurs noms spécifiques\n"," model_name = type(best_model).__name__\n"," vectorizer_name = type(vectorizer).__name__\n"," model_save_path = os.path.join(folder_path, f\"{model_name}_model.pkl\")\n"," vectorizer_save_path = os.path.join(folder_path, f\"{vectorizer_name}_vectorizer.pkl\")\n","\n"," # Sauvegarder le modèle\n"," with open(model_save_path, \"wb\") as f:\n"," pickle.dump(best_model, f)\n","\n"," # Sauvegarder le vectoriseur\n"," with open(vectorizer_save_path, \"wb\") as f:\n"," pickle.dump(vectorizer, f)\n","\n"," print(f\"Modèle et vectoriseur sauvegardés avec succès dans {folder_path}\")\n"," print(f\"Chemins des fichiers :\")\n"," print(f\" - Modèle : {os.path.abspath(model_save_path)}\")\n"," print(f\" - Vectoriseur : {os.path.abspath(vectorizer_save_path)}\")\n","\n"," return best_model, vectorizer"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"aGDo4_KJWxlR","colab":{"base_uri":"https://localhost:8080/","height":494,"referenced_widgets":["91504476b2b34a9eb462a30da59a2b19","88ae9e2307804694bc546afb10a362f7","9897c186c00947c280a7eae2fc9a315c","9572601035c34a5eb88f81f6514f872d","8e7128400e4c4eff96b67db314ccaff1","727814859996469da84c76c1a3f15bef","6f6c8fc42ef846a4ac56ffe69bcbbe0f","d5f9951d6c094fcfb03e166af93cfea5","6efad0330efc4790a1eac95fcc96de17","b08959c4edfa465588e03c99d00ad586","8b25983eb05344928535625c726939d8","9ecc775347df487bb63a5e1b2dcc68b7","073bf36ff26d455ca01956dee8d1f1a2","ce14528df1ed4f1abb72ccb9a3c66443","6d712f894c5d4d19a478fa1d1a2b2c62","b0c4432101b948979653cd43bcd3fc4b","8ddc3f81d9094d06b680908375077c62","0e157319861c42049d63bd43b797987e","b7d70f2ce66f40ea8f606256cb654540","d112b0758b97447ab47470e826e94687","6c04e4ad7c5f49c3bd9658ccab659890","acbe4e7d94f04dfe9e797ab54d3102ad","91b8f1667ff54011bd98fd748a0a91c6","3a1f9f8dff4e49fe8a94cd71fcfd3699","6baff5e484754cdaa400a6adeab6958c","2d7826d641614256a9f135515160958c","6050e4a9af9e4c46aa4b38d407b7bab9","0e61cbeda1f4421398f9456ad9e492e0","974da4c9934842ff8286f10a78790410","8beb625411f6459c97243979b6cb3664","b23315ac058141fd9bf35c49276544d0","e7775e44c82b472181e4f8ee6e7d918e","074c0860e74d41ff9562fb72d395b28d"]},"executionInfo":{"status":"ok","timestamp":1751740147902,"user_tz":-120,"elapsed":141544,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"0e69eea7-8493-4f2a-cd16-2154f4aee16f"},"outputs":[{"output_type":"stream","name":"stdout","text":["Chargement du modèle depuis le run 7d52e808227f468da7f733265280fc02...\n"]},{"output_type":"display_data","data":{"text/plain":["Downloading artifacts: 0%| | 0/1 [00:00, ?it/s]"],"application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"91504476b2b34a9eb462a30da59a2b19"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":["Downloading artifacts: 0%| | 0/5 [00:00, ?it/s]"],"application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"9ecc775347df487bb63a5e1b2dcc68b7"}},"metadata":{}},{"output_type":"stream","name":"stderr","text":["WARNING:urllib3.connectionpool:Connection pool is full, discarding connection: minio-api.greg-madman-nas.duckdns.org. Connection pool size: 10\n","WARNING:urllib3.connectionpool:Connection pool is full, discarding connection: minio-api.greg-madman-nas.duckdns.org. Connection pool size: 10\n","WARNING:urllib3.connectionpool:Connection pool is full, discarding connection: minio-api.greg-madman-nas.duckdns.org. Connection pool size: 10\n"]},{"output_type":"stream","name":"stdout","text":["Modèle chargé avec succès : RandomForestClassifier\n","Type de vectoriseur utilisé dans ce run : bow\n","Artefacts disponibles :\n"," - confusion_matrix.png\n"," - cv_results.csv\n"," - cv_results_max_depth.png\n"," - cv_results_min_samples_split.png\n"," - cv_results_n_estimators.png\n"," - roc_curve.png\n"," - vectorizer_BoW.pkl\n","Vectoriseur de type BoW/CountVectorizer trouvé : vectorizer_BoW.pkl\n"]},{"output_type":"display_data","data":{"text/plain":["Downloading artifacts: 0%| | 0/1 [00:00, ?it/s]"],"application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"91b8f1667ff54011bd98fd748a0a91c6"}},"metadata":{}},{"output_type":"stream","name":"stdout","text":["Vectoriseur téléchargé dans : /tmp/tmpgfjoxqet/vectorizer_BoW.pkl\n","Vectoriseur chargé avec succès : CountVectorizer\n","Modèle et vectoriseur sauvegardés avec succès dans content/simple-model/best\n","Chemins des fichiers :\n"," - Modèle : /content/drive/MyDrive/Colab_Notebooks/Project_7/notebooks/content/simple-model/best/RandomForestClassifier_model.pkl\n"," - Vectoriseur : /content/drive/MyDrive/Colab_Notebooks/Project_7/notebooks/content/simple-model/best/CountVectorizer_vectorizer.pkl\n"]}],"source":["# Charger et sauvegarder le meilleur modèle et son vectoriseur\n","best_model, vectorizer = load_and_save_best_model(run_id=best_model_row['Run ID'])"]},{"cell_type":"markdown","metadata":{"id":"Psby_wbGWxlR"},"source":["## Fonction de prédiction pour l'API\n","\n","Cette fonction constitue **le cœur de notre solution d'analyse de sentiment**. Elle prend **un tweet en entrée**, le prétraite, le vectorise et utilise notre modèle pour **prédire son sentiment**. Elle retourne un dictionnaire contenant le résultat (positif/négatif), un score de confiance et des métadonnées sur le modèle utilisé, **prêt à être exposé via l'API RESTful**."]},{"cell_type":"code","execution_count":null,"metadata":{"id":"7wl2v3XLWxlR"},"outputs":[],"source":["def predict_sentiment(text, model=best_model, vect=vectorizer):\n"," \"\"\"\n"," Fonction qui prend un texte en entrée et retourne la prédiction du sentiment\n"," Cette fonction pourra être utilisée dans l'API\n"," \"\"\"\n"," # Prétraiter le texte\n"," processed_text = preprocess_tweet(text)\n","\n"," # Vectoriser\n"," text_vectorized = vect.transform([processed_text])\n","\n"," # Prédire\n"," prediction = model.predict(text_vectorized)[0]\n","\n"," # Récupérer la probabilité si le modèle le permet\n"," if hasattr(model, 'predict_proba'):\n"," probas = model.predict_proba(text_vectorized)[0]\n"," confidence = probas[1] if prediction == 1 else probas[0]\n"," else:\n"," # Pour les modèles sans predict_proba, comme SVM\n"," decision = model.decision_function(text_vectorized)[0] if hasattr(model, 'decision_function') else 0\n"," confidence = abs(decision) / 2 # Normaliser d'une certaine façon\n","\n"," return {\n"," 'sentiment': 'positif' if prediction == 1 else 'négatif',\n"," 'score': float(confidence),\n"," 'model': best_model_name,\n"," 'vectorizer': best_vectorizer\n"," }"]},{"cell_type":"markdown","metadata":{"id":"HUpwhmfIWxlR"},"source":["## Test de la fonction de prédiction sur quelques exemples\n","\n","Nous avons constitué un **ensemble diversifié de tweets tests** incluant différentes caractéristiques linguistiques des réseaux sociaux pour évaluer notre modèle de détection de sentiment. Les résultats sont présentés dans un **DataFrame** avec des indicateurs visuels (💚/❌) permettant d'identifier rapidement les prédictions et leur **niveau de confiance**, validant ainsi l'efficacité de notre solution pour **anticiper les bad buzz**."]},{"cell_type":"code","execution_count":null,"metadata":{"id":"b86qIdD3WxlR"},"outputs":[],"source":["# Liste améliorée de tweets pour tester le modèle\n","test_tweets_improved = [\n"," # Tweets positifs avec différentes caractéristiques\n"," \"I absolutely love flying with @AirParadis! Their service is amazing and their staff is so helpful :) #bestairline #travel\",\n"," \"Just landed after a wonderful flight... The crew was totally awesome and the food was perfect!!! Can't wait to fly with them again :D\",\n"," \"OMG! You really have to try @AirParadis. Best. Flight. Ever. Their new seats are extremely comfortable. http://airparadis.com/newseats #travel #comfort\",\n"," \"We had a very pleasant experience with our flight today. The staff completely exceeded our expectations ;) #happy #AirParadis\",\n"," \"My first time flying business class and I'm absolutely amazed!!! The service is 100% worth it... @AirParadis never disappoints :)\",\n","\n"," # Tweets négatifs avec différentes caractéristiques\n"," \"I hate how @AirParadis always delays their flights... This is the third time this month!!! :( #disappointed #travel\",\n"," \"The worst flight experience of my life? Definitely today with @AirParadis. Their customer service won't even respond to my complaints... #terrible\",\n"," \"Really @AirParadis??? Flight cancelled and no compensation??? That's how you treat your customers? SMH :(\",\n"," \"Our baggage was lost and nobody at @AirParadis seems to care! Don't they understand that we can't enjoy our vacation without our stuff??? http://badservice.com/complaint :-(\",\n"," \"Food was terrible, seats were uncomfortable, and the staff was not helpful at all... Never flying with @AirParadis again! #worstairline\",\n","\n"," # Tweets mixtes et nuancés\n"," \"The flight was good but the food wasn't really what I expected... @AirParadis can do better! #mixedfeelings\",\n"," \"IDK what to think about my @AirParadis experience? The crew was nice but the flight was delayed for 2 hours... #confused\",\n"," \"My husband loved the flight but I didn't... Too bad they can't make everyone happy :-) #AirParadis\",\n"," \"TBH, @AirParadis has improved their service since last year! Not perfect yet, but they're trying... #progress\",\n"," \"We were so excited for our trip but then our flight got delayed... at least the staff was very apologetic and gave us free drinks! @AirParadis\",\n","\n"," # Tweets spécifiquement pour tester les caractéristiques spéciales\n"," \"This is a tweet with many!!! exclamation!!! marks!!! to test how they affect sentiment analysis :)\",\n"," \"How does the model handle multiple??? question??? marks??? in a single tweet? @AirParadis\",\n"," \"Testing ellipses... many... many... ellipses... in... one... tweet... @AirParadis #test\",\n"," \"#many #hashtags #in #one #tweet #to #see #how #they #affect #the #analysis #AirParadis\",\n"," \"@mention1 @mention2 @mention3 @mention4 @mention5 multiple mentions in one tweet\",\n"," \"Multiple URLs in one tweet: http://example1.com http://example2.com http://example3.com @AirParadis\",\n"," \"Let's try all emoticons :) :( :D ;) :-) :-( :-D ;-) in a single tweet to see the impact\"\n","]"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"HYemSzp2WxlR","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1751740154190,"user_tz":-120,"elapsed":6284,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"a3f850c7-8ae3-4daf-9296-d94ef357c74f"},"outputs":[{"output_type":"stream","name":"stdout","text":["\n","Test du modèle sur les exemples:\n","==================================================\n","Résumé: 22 tweets analysés\n","Tweets positifs: 13 (59.1%)\n","Tweets négatifs: 9 (40.9%)\n"]}],"source":["def test_model_on_examples(model, vectorizer, test_tweets):\n"," \"\"\"\n"," Teste le modèle sur une liste de tweets et retourne un DataFrame avec les résultats des prédictions.\n"," \"\"\"\n","\n"," results = {\n"," \"positif\": 0,\n"," \"négatif\": 0\n"," }\n","\n"," # Créer un DataFrame pour stocker les résultats\n"," predictions_data = []\n","\n"," for i, tweet in enumerate(test_tweets):\n"," result = predict_sentiment(tweet, model, vectorizer)\n","\n"," # Ajouter l'emoji approprié pour le sentiment\n"," emoji = \"💚\" if result['sentiment'] == \"positif\" else \"❌\"\n","\n"," # Ajouter les données au DataFrame\n"," predictions_data.append({\n"," \"Tweet\": tweet,\n"," \"Sentiment\": result['sentiment'],\n"," \"Emoji\": emoji,\n"," \"Score de confiance\": result['score'],\n"," \"Index\": i+1\n"," })\n","\n"," # Comptage des résultats\n"," results[result['sentiment']] += 1\n","\n"," # Créer le DataFrame\n"," df_predictions = pd.DataFrame(predictions_data)\n","\n"," # Afficher un résumé\n"," print(\"\\nTest du modèle sur les exemples:\")\n"," print(\"=\"*50)\n"," print(f\"Résumé: {len(test_tweets)} tweets analysés\")\n"," print(f\"Tweets positifs: {results['positif']} ({(results['positif']/len(test_tweets)*100):.1f}%)\")\n"," print(f\"Tweets négatifs: {results['négatif']} ({(results['négatif']/len(test_tweets)*100):.1f}%)\")\n","\n"," # Retourner le DataFrame\n"," return df_predictions\n","\n","# Exemple d'utilisation:\n","if best_model is not None and vectorizer is not None:\n"," # Obtenir le DataFrame des prédictions\n"," df_results = test_model_on_examples(best_model, vectorizer, test_tweets_improved)\n"," # Optionnel: sauvegarder les résultats dans un fichier CSV\n"," df_results.to_csv(\"content/simple-model/best/predictions_results.csv\", index=False)"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"P40YQzXDWxlR","colab":{"base_uri":"https://localhost:8080/","height":739},"executionInfo":{"status":"ok","timestamp":1751740154234,"user_tz":-120,"elapsed":41,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"911ca8cf-e1dd-4082-f249-f09869a0f7d0"},"outputs":[{"output_type":"execute_result","data":{"text/plain":[" Tweet Sentiment Emoji \\\n","0 I absolutely love flying with @AirParadis! The... positif 💚 \n","1 Just landed after a wonderful flight... The cr... positif 💚 \n","2 OMG! You really have to try @AirParadis. Best.... positif 💚 \n","3 We had a very pleasant experience with our fli... positif 💚 \n","4 My first time flying business class and I'm ab... positif 💚 \n","5 I hate how @AirParadis always delays their fli... négatif ❌ \n","6 The worst flight experience of my life? Defini... négatif ❌ \n","7 Really @AirParadis??? Flight cancelled and no ... négatif ❌ \n","8 Our baggage was lost and nobody at @AirParadis... négatif ❌ \n","9 Food was terrible, seats were uncomfortable, a... négatif ❌ \n","10 The flight was good but the food wasn't really... positif 💚 \n","11 IDK what to think about my @AirParadis experie... positif 💚 \n","12 My husband loved the flight but I didn't... To... négatif ❌ \n","13 TBH, @AirParadis has improved their service si... négatif ❌ \n","14 We were so excited for our trip but then our f... positif 💚 \n","15 This is a tweet with many!!! exclamation!!! ma... négatif ❌ \n","16 How does the model handle multiple??? question... positif 💚 \n","17 Testing ellipses... many... many... ellipses..... positif 💚 \n","18 #many #hashtags #in #one #tweet #to #see #how ... négatif ❌ \n","19 @mention1 @mention2 @mention3 @mention4 @menti... positif 💚 \n","20 Multiple URLs in one tweet: http://example1.co... positif 💚 \n","21 Let's try all emoticons :) :( :D ;) :-) :-( :-... positif 💚 \n","\n"," Score de confiance Index \n","0 0.962070 1 \n","1 0.874403 2 \n","2 0.767187 3 \n","3 0.877798 4 \n","4 0.608684 5 \n","5 0.868094 6 \n","6 0.781381 7 \n","7 0.705216 8 \n","8 0.673389 9 \n","9 0.815938 10 \n","10 0.590071 11 \n","11 0.677984 12 \n","12 0.751300 13 \n","13 0.561887 14 \n","14 0.532567 15 \n","15 0.715387 16 \n","16 0.555274 17 \n","17 0.802591 18 \n","18 0.562698 19 \n","19 0.834694 20 \n","20 0.937625 21 \n","21 0.649427 22 "],"text/html":["\n","
\n","
\n","\n","
\n"," \n","
\n","
\n","
Tweet
\n","
Sentiment
\n","
Emoji
\n","
Score de confiance
\n","
Index
\n","
\n"," \n"," \n","
\n","
0
\n","
I absolutely love flying with @AirParadis! The...
\n","
positif
\n","
💚
\n","
0.962070
\n","
1
\n","
\n","
\n","
1
\n","
Just landed after a wonderful flight... The cr...
\n","
positif
\n","
💚
\n","
0.874403
\n","
2
\n","
\n","
\n","
2
\n","
OMG! You really have to try @AirParadis. Best....
\n","
positif
\n","
💚
\n","
0.767187
\n","
3
\n","
\n","
\n","
3
\n","
We had a very pleasant experience with our fli...
\n","
positif
\n","
💚
\n","
0.877798
\n","
4
\n","
\n","
\n","
4
\n","
My first time flying business class and I'm ab...
\n","
positif
\n","
💚
\n","
0.608684
\n","
5
\n","
\n","
\n","
5
\n","
I hate how @AirParadis always delays their fli...
\n","
négatif
\n","
❌
\n","
0.868094
\n","
6
\n","
\n","
\n","
6
\n","
The worst flight experience of my life? Defini...
\n","
négatif
\n","
❌
\n","
0.781381
\n","
7
\n","
\n","
\n","
7
\n","
Really @AirParadis??? Flight cancelled and no ...
\n","
négatif
\n","
❌
\n","
0.705216
\n","
8
\n","
\n","
\n","
8
\n","
Our baggage was lost and nobody at @AirParadis...
\n","
négatif
\n","
❌
\n","
0.673389
\n","
9
\n","
\n","
\n","
9
\n","
Food was terrible, seats were uncomfortable, a...
\n","
négatif
\n","
❌
\n","
0.815938
\n","
10
\n","
\n","
\n","
10
\n","
The flight was good but the food wasn't really...
\n","
positif
\n","
💚
\n","
0.590071
\n","
11
\n","
\n","
\n","
11
\n","
IDK what to think about my @AirParadis experie...
\n","
positif
\n","
💚
\n","
0.677984
\n","
12
\n","
\n","
\n","
12
\n","
My husband loved the flight but I didn't... To...
\n","
négatif
\n","
❌
\n","
0.751300
\n","
13
\n","
\n","
\n","
13
\n","
TBH, @AirParadis has improved their service si...
\n","
négatif
\n","
❌
\n","
0.561887
\n","
14
\n","
\n","
\n","
14
\n","
We were so excited for our trip but then our f...
\n","
positif
\n","
💚
\n","
0.532567
\n","
15
\n","
\n","
\n","
15
\n","
This is a tweet with many!!! exclamation!!! ma...
\n","
négatif
\n","
❌
\n","
0.715387
\n","
16
\n","
\n","
\n","
16
\n","
How does the model handle multiple??? question...
\n","
positif
\n","
💚
\n","
0.555274
\n","
17
\n","
\n","
\n","
17
\n","
Testing ellipses... many... many... ellipses.....
\n","
positif
\n","
💚
\n","
0.802591
\n","
18
\n","
\n","
\n","
18
\n","
#many #hashtags #in #one #tweet #to #see #how ...
\n","
négatif
\n","
❌
\n","
0.562698
\n","
19
\n","
\n","
\n","
19
\n","
@mention1 @mention2 @mention3 @mention4 @menti...
\n","
positif
\n","
💚
\n","
0.834694
\n","
20
\n","
\n","
\n","
20
\n","
Multiple URLs in one tweet: http://example1.co...
\n","
positif
\n","
💚
\n","
0.937625
\n","
21
\n","
\n","
\n","
21
\n","
Let's try all emoticons :) :( :D ;) :-) :-( :-...
\n","
positif
\n","
💚
\n","
0.649427
\n","
22
\n","
\n"," \n","
\n","
\n","
\n","\n","
\n"," \n","\n"," \n","\n"," \n","
\n","\n","\n","
\n"," \n","\n","\n","\n"," \n","
\n","\n","
\n"," \n"," \n"," \n","
\n","\n","
\n","
\n"],"application/vnd.google.colaboratory.intrinsic+json":{"type":"dataframe","variable_name":"df_results","summary":"{\n \"name\": \"df_results\",\n \"rows\": 22,\n \"fields\": [\n {\n \"column\": \"Tweet\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 22,\n \"samples\": [\n \"I absolutely love flying with @AirParadis! Their service is amazing and their staff is so helpful :) #bestairline #travel\",\n \"TBH, @AirParadis has improved their service since last year! Not perfect yet, but they're trying... #progress\",\n \"Our baggage was lost and nobody at @AirParadis seems to care! Don't they understand that we can't enjoy our vacation without our stuff??? http://badservice.com/complaint :-(\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Sentiment\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 2,\n \"samples\": [\n \"n\\u00e9gatif\",\n \"positif\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Emoji\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 2,\n \"samples\": [\n \"\\u274c\",\n \"\\ud83d\\udc9a\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Score de confiance\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.13093384858249077,\n \"min\": 0.5325674603174603,\n \"max\": 0.9620695325915914,\n \"num_unique_values\": 22,\n \"samples\": [\n 0.9620695325915914,\n 0.5618869047619047\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Index\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 6,\n \"min\": 1,\n \"max\": 22,\n \"num_unique_values\": 22,\n \"samples\": [\n 1,\n 14\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}"}},"metadata":{},"execution_count":39}],"source":["df_results"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"5g5IagpMWxlR","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1751740154241,"user_tz":-120,"elapsed":6,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"379e77cb-1b6e-412e-a483-4510c1f22b90"},"outputs":[{"output_type":"execute_result","data":{"text/plain":["Index(['Tweet', 'Sentiment', 'Emoji', 'Score de confiance', 'Index'], dtype='object')"]},"metadata":{},"execution_count":40}],"source":["df_results.columns"]},{"cell_type":"markdown","metadata":{"id":"2NbWQCrKWxlS"},"source":["## Conclusion de l'approche \"Modèle Simple\"\n","\n","Nous avons développé plusieurs modèles classiques pour la détection de sentiment dans les tweets,\n","en utilisant une **optimisation des hyperparamètres via GridSearchCV**, avec une attention particulière portée à la **précision** :\n","\n","- En effet, dans notre contexte métier, **le principal risque est de prédire à tort un tweet négatif comme étant positif** (faux positif), ce qui pourrait nuire à la réputation de l'entreprise.\n","- Pour cette raison, **la précision (precision) a été retenue comme métrique de sélection principale**, car elle mesure la proportion de tweets réellement positifs parmi ceux prédits comme positifs.\n","\n","Les modèles testés sont :\n","\n","1. Régression Logistique \n","2. SVM Linéaire \n","3. Random Forest \n","4. Naive Bayes \n","\n","Chaque modèle a été évalué avec deux techniques de vectorisation :\n","- Sac de mots (BoW)\n","- TF-IDF\n","\n","---\n","\n","### 📊 Meilleur modèle (selon la précision)\n","\n","Le modèle ayant obtenu la meilleure précision est : \n","**[en attente d'une valeur]** avec la vectorisation **[en attente d'une valeur]**\n","\n","- **Précision : [en attente d'une valeur]**\n","- **F1 Score : [en attente d'une valeur]**\n","- **ROC AUC : [en attente d'une valeur]**\n","\n","Hyperparamètres optimaux : **[en attente d'une valeur]**\n","\n","---\n","\n","### ✅ Avantages du workflow implémenté\n","\n","1. **Alignement sur la métrique métier (précision)** \n"," - Réduction du risque de faux positifs, cruciaux dans notre cas d’usage \n"," - Approche plus conservatrice mais adaptée à la gestion d'image de marque\n","\n","2. **Suivi des expérimentations avec MLflow** \n"," - Historique des runs, métriques, artefacts et vectoriseurs sauvegardés \n"," - Visualisation claire des performances\n","\n","3. **Optimisation rigoureuse** \n"," - Recherche sur grille (GridSearchCV) \n"," - Validation croisée pour robustesse des résultats \n"," - Comparaison systématique des performances\n","\n","4. **Prétraitement linguistique adapté aux tweets** \n"," - Nettoyage spécifique des entités (hashtags, mentions, URLs) \n"," - Lemmatisation avec conservation des négations \n"," - Ajout de variables contextuelles issues de l’analyse exploratoire\n","\n","\n","Le meilleur modèle classique retenu ici constituera une **baseline** solide pour mesurer les gains apportés par les approches de Deep Learning et de NLP avancé.\n"]},{"cell_type":"markdown","metadata":{"id":"jFI45SpVWxlS"},"source":["## Explications détaillées\n","\n","Le code complet intègre plusieurs pratiques MLOps avancées:\n","\n","### 1. Optimisation des hyperparamètres avec GridSearchCV\n","\n","J'ai implémenté GridSearchCV pour chaque combinaison de modèle et vectoriseur. Cela permet d'explorer systématiquement l'espace des hyperparamètres pour trouver la configuration optimale. Pour chaque modèle, j'ai défini une grille de paramètres pertinents:\n","\n","- **Régression Logistique**: différentes valeurs de régularisation (C), types de solveurs\n","- **SVM**: différentes valeurs de C, options de dualité\n","- **Random Forest**: nombre d'arbres, profondeur maximale, critères de division\n","- **Naive Bayes**: différentes valeurs pour le paramètre de lissage alpha\n","\n","L'optimisation est effectuée avec validation croisée à 5 plis (5-fold) pour garantir la robustesse des résultats.\n","\n","### 2. Tracking complet avec MLflow\n","\n","Pour chaque expérience, j'enregistre dans MLflow:\n","\n","- **Paramètres**: tous les hyperparamètres utilisés, y compris les meilleurs trouvés par GridSearchCV\n","- **Métriques**: accuracy, precision, recall, F1 score, ROC AUC, temps d'entraînement\n","- **Artifacts**:\n"," - Le modèle optimisé avec sa signature d'entrée/sortie\n"," - Le vectoriseur utilisé (nouveauté demandée)\n"," - La matrice de confusion et la courbe ROC\n"," - Les résultats détaillés de la validation croisée\n"," - Les features les plus importantes (pour les modèles qui le permettent)\n"," - Des graphiques d'analyse de l'influence des hyperparamètres\n","\n","### 3. Sauvegarde et utilisation du meilleur modèle\n","\n","J'ai implémenté une méthode pour:\n","\n","1. Identifier le meilleur modèle dans l'historique MLflow\n","2. Le récupérer avec son vectoriseur\n","3. Sauvegarder les deux dans un dossier local spécifié (\"content/simple-model/best\")\n","4. Créer une fonction de prédiction prête pour l'API\n","\n","### 4. Visualisations avancées\n","\n","Pour faciliter l'analyse:\n","\n","- Matrices de confusion pour chaque modèle\n","- Courbes ROC avec AUC calculé\n","- Graphiques des features les plus importantes\n","- Graphiques d'évolution des scores en fonction des hyperparamètres"]},{"cell_type":"markdown","source":["# Enregistrement de dépendances"],"metadata":{"id":"hJSt92gut0Vu"}},{"cell_type":"code","source":["!pip freeze > requirements_modele_simple.txt"],"metadata":{"id":"LeieF6LStjLc"},"execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","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.10.12"},"colab":{"provenance":[]},"widgets":{"application/vnd.jupyter.widget-state+json":{"91504476b2b34a9eb462a30da59a2b19":{"model_module":"@jupyter-widgets/controls","model_name":"HBoxModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HBoxView","box_style":"","children":["IPY_MODEL_88ae9e2307804694bc546afb10a362f7","IPY_MODEL_9897c186c00947c280a7eae2fc9a315c","IPY_MODEL_9572601035c34a5eb88f81f6514f872d"],"layout":"IPY_MODEL_8e7128400e4c4eff96b67db314ccaff1"}},"88ae9e2307804694bc546afb10a362f7":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_727814859996469da84c76c1a3f15bef","placeholder":"","style":"IPY_MODEL_6f6c8fc42ef846a4ac56ffe69bcbbe0f","value":"Downloading artifacts: 0%"}},"9897c186c00947c280a7eae2fc9a315c":{"model_module":"@jupyter-widgets/controls","model_name":"FloatProgressModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatProgressModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ProgressView","bar_style":"danger","description":"","description_tooltip":null,"layout":"IPY_MODEL_d5f9951d6c094fcfb03e166af93cfea5","max":1,"min":0,"orientation":"horizontal","style":"IPY_MODEL_6efad0330efc4790a1eac95fcc96de17","value":0}},"9572601035c34a5eb88f81f6514f872d":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_b08959c4edfa465588e03c99d00ad586","placeholder":"","style":"IPY_MODEL_8b25983eb05344928535625c726939d8","value":" 0/1 [00:00<?, ?it/s]"}},"8e7128400e4c4eff96b67db314ccaff1":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"727814859996469da84c76c1a3f15bef":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"6f6c8fc42ef846a4ac56ffe69bcbbe0f":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"d5f9951d6c094fcfb03e166af93cfea5":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"6efad0330efc4790a1eac95fcc96de17":{"model_module":"@jupyter-widgets/controls","model_name":"ProgressStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ProgressStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","bar_color":null,"description_width":""}},"b08959c4edfa465588e03c99d00ad586":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"8b25983eb05344928535625c726939d8":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"9ecc775347df487bb63a5e1b2dcc68b7":{"model_module":"@jupyter-widgets/controls","model_name":"HBoxModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HBoxView","box_style":"","children":["IPY_MODEL_073bf36ff26d455ca01956dee8d1f1a2","IPY_MODEL_ce14528df1ed4f1abb72ccb9a3c66443","IPY_MODEL_6d712f894c5d4d19a478fa1d1a2b2c62"],"layout":"IPY_MODEL_b0c4432101b948979653cd43bcd3fc4b"}},"073bf36ff26d455ca01956dee8d1f1a2":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_8ddc3f81d9094d06b680908375077c62","placeholder":"","style":"IPY_MODEL_0e157319861c42049d63bd43b797987e","value":"Downloading artifacts: 100%"}},"ce14528df1ed4f1abb72ccb9a3c66443":{"model_module":"@jupyter-widgets/controls","model_name":"FloatProgressModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatProgressModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ProgressView","bar_style":"success","description":"","description_tooltip":null,"layout":"IPY_MODEL_b7d70f2ce66f40ea8f606256cb654540","max":5,"min":0,"orientation":"horizontal","style":"IPY_MODEL_d112b0758b97447ab47470e826e94687","value":5}},"6d712f894c5d4d19a478fa1d1a2b2c62":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_6c04e4ad7c5f49c3bd9658ccab659890","placeholder":"","style":"IPY_MODEL_acbe4e7d94f04dfe9e797ab54d3102ad","value":" 5/5 [01:56<00:00, 32.51s/it]"}},"b0c4432101b948979653cd43bcd3fc4b":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"8ddc3f81d9094d06b680908375077c62":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"0e157319861c42049d63bd43b797987e":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"b7d70f2ce66f40ea8f606256cb654540":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"d112b0758b97447ab47470e826e94687":{"model_module":"@jupyter-widgets/controls","model_name":"ProgressStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ProgressStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","bar_color":null,"description_width":""}},"6c04e4ad7c5f49c3bd9658ccab659890":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"acbe4e7d94f04dfe9e797ab54d3102ad":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"91b8f1667ff54011bd98fd748a0a91c6":{"model_module":"@jupyter-widgets/controls","model_name":"HBoxModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HBoxView","box_style":"","children":["IPY_MODEL_3a1f9f8dff4e49fe8a94cd71fcfd3699","IPY_MODEL_6baff5e484754cdaa400a6adeab6958c","IPY_MODEL_2d7826d641614256a9f135515160958c"],"layout":"IPY_MODEL_6050e4a9af9e4c46aa4b38d407b7bab9"}},"3a1f9f8dff4e49fe8a94cd71fcfd3699":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_0e61cbeda1f4421398f9456ad9e492e0","placeholder":"","style":"IPY_MODEL_974da4c9934842ff8286f10a78790410","value":"Downloading artifacts: 100%"}},"6baff5e484754cdaa400a6adeab6958c":{"model_module":"@jupyter-widgets/controls","model_name":"FloatProgressModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatProgressModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ProgressView","bar_style":"success","description":"","description_tooltip":null,"layout":"IPY_MODEL_8beb625411f6459c97243979b6cb3664","max":1,"min":0,"orientation":"horizontal","style":"IPY_MODEL_b23315ac058141fd9bf35c49276544d0","value":1}},"2d7826d641614256a9f135515160958c":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_e7775e44c82b472181e4f8ee6e7d918e","placeholder":"","style":"IPY_MODEL_074c0860e74d41ff9562fb72d395b28d","value":" 1/1 [00:00<00:00, 1.13it/s]"}},"6050e4a9af9e4c46aa4b38d407b7bab9":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"0e61cbeda1f4421398f9456ad9e492e0":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"974da4c9934842ff8286f10a78790410":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"8beb625411f6459c97243979b6cb3664":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"b23315ac058141fd9bf35c49276544d0":{"model_module":"@jupyter-widgets/controls","model_name":"ProgressStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ProgressStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","bar_color":null,"description_width":""}},"e7775e44c82b472181e4f8ee6e7d918e":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"074c0860e74d41ff9562fb72d395b28d":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}}}}},"nbformat":4,"nbformat_minor":0}
\ No newline at end of file
diff --git a/notebooks/p07_03-notebook-modele-avance.ipynb b/notebooks/p07_03-notebook-modele-avance.ipynb
index bfa19c2..a781056 100644
--- a/notebooks/p07_03-notebook-modele-avance.ipynb
+++ b/notebooks/p07_03-notebook-modele-avance.ipynb
@@ -1 +1 @@
-{"cells":[{"cell_type":"markdown","metadata":{"id":"ojWck8JFNwMp"},"source":["## Partie 3 : 🧠 Approches avancée (embeddings pré-entraînés et deep learning)\n","\n","Dans ce notebook, nous développons des **modèles avancés d'analyse de sentiment** pour détecter les bad buzz potentiels sur Twitter. Nous implémentons deux architectures de deep learning basées sur des réseaux **LSTM bidirectionnels**, utilisant respectivement les embeddings **Word2Vec** et **GloVe 300d** comme représentations vectorielles des mots. Ces modèles exploitent les techniques modernes d'apprentissage profond pour prédire le sentiment de tweets.\n","\n","Concernant l'entrainement, le choix a été fait d'entrainer par optimisation de la variable de perte de validation `val_loss` avec en particulier un critère d'`EarlyStopping` au bout d'un certain nombre d'époques lancées (5, en l'ocurrence) afin de garantir une bonne généralisation ainsi qu'une limitation de l'overfitting.\n","\n","Cependant, le critère qui sera retenu comme le plus important en raison de notre problématique métier est la `precision` car nous souhaitons plus que tout éviter les faux positifs (tweet prédit comme positif, alors qu'il sera mal reçu)."]},{"cell_type":"markdown","metadata":{"id":"hQ2lFBinNwMq"},"source":["## Importation des bibliothèques"]},{"cell_type":"code","source":["from google.colab import drive\n","drive.mount('/content/drive')\n","import os\n","drive_folder= \"/content/drive/MyDrive/Colab_Notebooks/Project_7/notebooks\"\n","os.chdir(drive_folder)\n","os.listdir()"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"khhtDEa-Phih","executionInfo":{"status":"ok","timestamp":1751496230110,"user_tz":-120,"elapsed":1169,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"cadf18a8-46b3-4208-c6f0-49a6cd5d83f8"},"execution_count":1,"outputs":[{"output_type":"stream","name":"stdout","text":["Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n"]},{"output_type":"execute_result","data":{"text/plain":["['requirements.txt',\n"," 'requirements-bert.txt',\n"," 'Copie de notebook-connexion-mlflow (1).ipynb',\n"," 'Copie de 03-notebook-modele-avance.ipynb',\n"," 'Copie de 02-notebook-modele-simple.ipynb',\n"," 'Copie de 01-notebook-analyse-exploratoire.ipynb',\n"," 'Copie de 04-notebook-modele-bert.ipynb',\n"," 'content',\n"," '.env',\n"," 'Copie de notebook-connexion-mlflow.ipynb',\n"," 'iris_class_distribution.png',\n"," 'confusion_matrix.png',\n"," 'glove.6B.zip',\n"," 'notebook-connexion-mlflow.ipynb',\n"," 'best_model.pt',\n"," '01-notebook-analyse-exploratoire.ipynb',\n"," 'best_model.pth',\n"," '03-notebook-modele-avance.ipynb',\n"," '04-notebook-modele-bert.ipynb',\n"," '02-notebook-modele-simple.ipynb']"]},"metadata":{},"execution_count":1}]},{"cell_type":"code","source":["!pip install mlflow boto3 dotenv gensim --quiet"],"metadata":{"id":"vN2rVNmf86bI","executionInfo":{"status":"ok","timestamp":1751496240500,"user_tz":-120,"elapsed":10391,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"execution_count":2,"outputs":[]},{"cell_type":"code","execution_count":3,"metadata":{"id":"Ae66AtL4NwMq","outputId":"d4c22fc1-b4f7-4252-a5df-96a253d86564","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1751496252555,"user_tz":-120,"elapsed":12056,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[{"output_type":"stream","name":"stderr","text":["[nltk_data] Downloading package punkt_tab to /root/nltk_data...\n","[nltk_data] Unzipping tokenizers/punkt_tab.zip.\n","[nltk_data] Downloading package stopwords to /root/nltk_data...\n","[nltk_data] Unzipping corpora/stopwords.zip.\n","[nltk_data] Downloading package wordnet to /root/nltk_data...\n"]}],"source":["# Importations nécessaires\n","import pandas as pd\n","import numpy as np\n","import matplotlib.pyplot as plt\n","import seaborn as sns\n","import os\n","import re\n","import time\n","import warnings\n","from collections import Counter\n","import pickle\n","from tqdm import tqdm\n","import html\n","\n","# Importations NLTK\n","import nltk\n","nltk.download('punkt_tab')\n","nltk.download('stopwords')\n","nltk.download('wordnet')\n","from nltk.corpus import stopwords\n","from nltk.tokenize import word_tokenize\n","from nltk.stem import WordNetLemmatizer\n","\n","# Importations scikit-learn\n","from sklearn.feature_extraction.text import TfidfVectorizer, CountVectorizer\n","from sklearn.model_selection import train_test_split, GridSearchCV\n","from sklearn.linear_model import LogisticRegression\n","from sklearn.svm import LinearSVC\n","from sklearn.ensemble import RandomForestClassifier\n","from sklearn.naive_bayes import MultinomialNB\n","from sklearn.metrics import (accuracy_score, precision_score, recall_score, f1_score,\n"," make_scorer, matthews_corrcoef, balanced_accuracy_score,\n"," classification_report, confusion_matrix, roc_auc_score, roc_curve)\n","\n","\n","import numpy as np\n","import tensorflow as tf\n","from tensorflow import keras\n","from tensorflow.keras.preprocessing.text import Tokenizer\n","from tensorflow.keras.preprocessing.sequence import pad_sequences\n","\n","\n","# Configuration des visualisations\n","plt.style.use('ggplot')\n","plt.rcParams['figure.figsize'] = (12, 8)\n","plt.rcParams['font.family'] = 'DejaVu Sans'\n","warnings.filterwarnings('ignore')"]},{"cell_type":"markdown","metadata":{"id":"E1TqvSBHNwMr"},"source":["## 💾 Jeu de données : Sentiment140\n","\n","Le jeu de données [Sentiment140 dataset with 1.6 million tweets](https://www.kaggle.com/datasets/kazanova/sentiment140) est une ressource majeure pour l'analyse de sentiment sur Twitter, comprenant **1,6 million de tweets** extraits via l'API Twitter. Ces tweets ont été automatiquement annotés selon leur polarité sentimentale, offrant une base solide pour développer des modèles de classification de sentiment.\n","\n","Le jeu de données est organisé en 6 colonnes distinctes :\n","\n","1. **target** : La polarité du sentiment exprimé dans le tweet.\n"," - 0 = sentiment négatif\n"," - 2 = sentiment neutre\n"," - 4 = sentiment positif\n","2. **ids** : L'identifiant unique du tweet (exemple : *2087*)\n","3. **date** : La date et l'heure de publication du tweet.\n","4. **flag** : La requête utilisée pour obtenir le tweet.\n"," - Exemple : *lyx*\n"," - Si aucune requête n'a été utilisée : *NO_QUERY*\n","5. **user** : Le nom d'utilisateur de l'auteur du tweet.\n","6. **text** : Le contenu textuel du tweet."]},{"cell_type":"code","execution_count":4,"metadata":{"id":"jDsgh8mGNwMr","outputId":"a4d4a0f9-8782-4364-daf0-79bf9992ee10","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1751496252555,"user_tz":-120,"elapsed":25,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[{"output_type":"stream","name":"stdout","text":["CPU times: user 83 µs, sys: 12 µs, total: 95 µs\n","Wall time: 541 µs\n"]}],"source":["%%time\n","\n","# Define the URL and the local file path\n","url = \"https://s3-eu-west-1.amazonaws.com/static.oc-static.com/prod/courses/files/AI+Engineer/Project+7%C2%A0-+D%C3%A9tectez+les+Bad+Buzz+gr%C3%A2ce+au+Deep+Learning/sentiment140.zip\"\n","local_zip_path = \"./content/data/sentiment140.zip\"\n","extract_path = \"./content/data\"\n","\n","if not os.path.exists(extract_path):\n","\n"," # Create the directory if it doesn't exist\n"," os.makedirs(extract_path, exist_ok=True)\n","\n"," # Download the zip file\n"," response = requests.get(url)\n"," with open(local_zip_path, 'wb') as file:\n"," file.write(response.content)\n","\n"," # Extract the contents of the zip file\n"," with zipfile.ZipFile(local_zip_path, 'r') as zip_ref:\n"," zip_ref.extractall(extract_path)\n","\n"," # Delete the zip file\n"," os.remove(local_zip_path)"]},{"cell_type":"code","execution_count":5,"metadata":{"id":"c-6C8QR_NwMr","executionInfo":{"status":"ok","timestamp":1751496252555,"user_tz":-120,"elapsed":21,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["pd.set_option('display.max_columns', None)\n","pd.set_option('display.expand_frame_repr', True)"]},{"cell_type":"code","execution_count":6,"metadata":{"id":"MtMJv7S-NwMr","outputId":"df5f1cd8-22c2-4e0e-87c1-c2d91ff50eb2","colab":{"base_uri":"https://localhost:8080/","height":379},"executionInfo":{"status":"ok","timestamp":1751496265020,"user_tz":-120,"elapsed":12467,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[{"output_type":"execute_result","data":{"text/plain":[" target ids date flag \\\n","0 0 1467810369 Mon Apr 06 22:19:45 PDT 2009 NO_QUERY \n","1 0 1467810672 Mon Apr 06 22:19:49 PDT 2009 NO_QUERY \n","2 0 1467810917 Mon Apr 06 22:19:53 PDT 2009 NO_QUERY \n","3 0 1467811184 Mon Apr 06 22:19:57 PDT 2009 NO_QUERY \n","4 0 1467811193 Mon Apr 06 22:19:57 PDT 2009 NO_QUERY \n","\n"," user text \n","0 _TheSpecialOne_ @switchfoot http://twitpic.com/2y1zl - Awww, t... \n","1 scotthamilton is upset that he can't update his Facebook by ... \n","2 mattycus @Kenichan I dived many times for the ball. Man... \n","3 ElleCTF my whole body feels itchy and like its on fire \n","4 Karoli @nationwideclass no, it's not behaving at all.... "],"text/html":["\n","
\n","
\n","\n","
\n"," \n","
\n","
\n","
target
\n","
ids
\n","
date
\n","
flag
\n","
user
\n","
text
\n","
\n"," \n"," \n","
\n","
0
\n","
0
\n","
1467810369
\n","
Mon Apr 06 22:19:45 PDT 2009
\n","
NO_QUERY
\n","
_TheSpecialOne_
\n","
@switchfoot http://twitpic.com/2y1zl - Awww, t...
\n","
\n","
\n","
1
\n","
0
\n","
1467810672
\n","
Mon Apr 06 22:19:49 PDT 2009
\n","
NO_QUERY
\n","
scotthamilton
\n","
is upset that he can't update his Facebook by ...
\n","
\n","
\n","
2
\n","
0
\n","
1467810917
\n","
Mon Apr 06 22:19:53 PDT 2009
\n","
NO_QUERY
\n","
mattycus
\n","
@Kenichan I dived many times for the ball. Man...
\n","
\n","
\n","
3
\n","
0
\n","
1467811184
\n","
Mon Apr 06 22:19:57 PDT 2009
\n","
NO_QUERY
\n","
ElleCTF
\n","
my whole body feels itchy and like its on fire
\n","
\n","
\n","
4
\n","
0
\n","
1467811193
\n","
Mon Apr 06 22:19:57 PDT 2009
\n","
NO_QUERY
\n","
Karoli
\n","
@nationwideclass no, it's not behaving at all....
\n","
\n"," \n","
\n","
\n","
\n","\n","
\n"," \n","\n"," \n","\n"," \n","
\n","\n","\n","
\n"," \n","\n","\n","\n"," \n","
\n","\n","
\n","
\n"],"application/vnd.google.colaboratory.intrinsic+json":{"type":"dataframe","variable_name":"raw_data"}},"metadata":{},"execution_count":6}],"source":["# Define the path to the CSV file\n","csv_file_path = os.path.join(extract_path, 'training.1600000.processed.noemoticon.csv')\n","\n","# Define the column names\n","column_names = ['target', 'ids', 'date', 'flag', 'user', 'text']\n","\n","# Load the dataset into a pandas DataFrame\n","raw_data = pd.read_csv(csv_file_path, encoding='latin-1', names=column_names)\n","\n","# Display the first few rows of the DataFrame\n","raw_data.head()"]},{"cell_type":"code","execution_count":7,"metadata":{"id":"bIeawbN6NwMs","outputId":"a944ad68-7329-4fb7-8fde-f40b1f4b5833","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1751496265023,"user_tz":-120,"elapsed":3,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[{"output_type":"stream","name":"stdout","text":["Ce dataframe contient 1600000 lignes et 6 colonnes.\n"]}],"source":["print(f\"Ce dataframe contient {raw_data.shape[0]} lignes et {raw_data.shape[1]} colonnes.\")"]},{"cell_type":"markdown","source":["## ⏩🧠 Approches avancées de Deep Learning\n","Notre démarche pour la classification de sentiment avec des approches avancées comprend:\n","\n","1. **Prétraitement des tweets**\n"," - Nettoyage\n"," - Tokenisation et lemmatisation\n"," - Remplacement des URLs et mentions par des tokens spéciaux\n","\n","3. **Modèles testés**\n"," - **Modèle LSTM bidirectionnel avec Word2Vec:** Ce modèle utilisera une architecture de réseau de neurones récurrents (LSTM) bidirectionnel et les embeddings pré-entraînés **Word2Vec** pour représenter les mots.\n"," - **Modèle LSTM bidirectionnel avec GloVe 300d:** Ce modèle similaire utilisera également une architecture LSTM bidirectionnel, mais avec les embeddings pré-entraînés **GloVe de dimension 300**.\n","\n","\n","3. **Évaluation et suivi**\n"," - Métriques: précision, accuracy, recall, F1-score, ROC-AUC\n"," - Tracking avec MLflow pour la reproductibilité et la comparaison\n","\n","\n","Il est important de noter que l'entraînement est fait sur un sous-échantillon et non sur l'intégralité du dataset."],"metadata":{"id":"Lq2h1qmW2PqP"}},{"cell_type":"markdown","metadata":{"id":"UXHYqYWiNwMs"},"source":["## Prétraitement\n","\n","Notre démarche pour la classification de sentiment avec des approches classiques comprend:\n","\n","1. **Prétraitement des tweets**\n"," - Nettoyage\n"," - Tokenisation et lemmatisation\n"," - Remplacement des URLs et mentions par des tokens spéciaux\n","\n"]},{"cell_type":"code","execution_count":8,"metadata":{"id":"XC0M0gPXNwMs","executionInfo":{"status":"ok","timestamp":1751496266518,"user_tz":-120,"elapsed":1494,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["def convert_sentiment_label(df):\n"," converted_target_data = df.copy()\n"," converted_target_data['target'] = converted_target_data['target'].apply(lambda x: 0 if x == 0 else 1)\n"," return converted_target_data\n","\n","converted_target_data = convert_sentiment_label(raw_data)"]},{"cell_type":"code","execution_count":9,"metadata":{"id":"gMSXKh2RNwMs","outputId":"f692c084-abe8-4b71-aa62-abf47301f443","colab":{"base_uri":"https://localhost:8080/","height":178},"executionInfo":{"status":"ok","timestamp":1751496266572,"user_tz":-120,"elapsed":27,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[{"output_type":"execute_result","data":{"text/plain":["target\n","0 800000\n","1 800000\n","Name: count, dtype: int64"],"text/html":["
"]},"metadata":{},"execution_count":10}],"source":["def downsample_data(df, n_samples=50000):\n"," \"\"\"\n"," Réduit la taille d'un DataFrame en échantillonnant aléatoirement un nombre spécifié de lignes pour chaque classe.\n"," \"\"\"\n"," negative_samples = df[df['target'] == 0].sample(n=n_samples, random_state=42)\n"," positive_samples = df[df['target'] == 1].sample(n=n_samples, random_state=42)\n"," downsampled_data = pd.concat([negative_samples, positive_samples])\n"," return downsampled_data\n","\n","downsampled_data = downsample_data(converted_target_data, n_samples=50000)\n","downsampled_data['target'].value_counts()"]},{"cell_type":"code","execution_count":11,"metadata":{"id":"WZxoqzdFNwMs","executionInfo":{"status":"ok","timestamp":1751496267022,"user_tz":-120,"elapsed":34,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["from multiprocessing import Pool\n","\n","# Fonction de prétraitement pour les tweets\n","def preprocess_tweet(tweet):\n"," \"\"\"\n"," Prétraite un tweet en appliquant plusieurs transformations :\n"," - Conversion en minuscules\n"," - Remplacement des URLs, mentions et hashtags par des tokens spéciaux\n"," - Suppression des caractères spéciaux\n"," - Tokenisation et lemmatisation\n"," - Suppression des stopwords\n"," \"\"\"\n"," # Vérifier si le tweet est une chaîne de caractères\n"," if not isinstance(tweet, str):\n"," return \"\"\n","\n"," # Convertir en minuscules\n"," tweet = tweet.lower()\n","\n"," # Remplacer les URLs par un token spécial\n"," tweet = re.sub(r'https?://\\S+|www\\.\\S+', '', tweet)\n","\n"," # Remplacer les mentions par un token spécial\n"," tweet = re.sub(r'@\\w+', '', tweet)\n","\n"," # Traiter les hashtags (conserver le # comme token séparé et le mot qui suit)\n"," tweet = re.sub(r'#(\\w+)', r'# \\1', tweet)\n","\n"," # Traiter le langage html\n"," tweet = html.unescape(tweet)\n","\n"," # Supprimer les caractères spéciaux et les nombres, mais garder les tokens spéciaux\n"," tweet = re.sub(r'[^\\w\\s<>@#!?]', '', tweet)\n","\n"," # Tokenisation\n"," tokens = word_tokenize(tweet)\n","\n"," # Lemmatisation\n"," lemmatizer = WordNetLemmatizer()\n"," tokens = [lemmatizer.lemmatize(token) for token in tokens]\n","\n"," # Supprimer les stopwords, mais conserver les négations importantes\n"," stop_words = set(stopwords.words('english'))\n"," important_words = {'no', 'not', 'nor', 'neither', 'never', 'nobody', 'none', 'nothing', 'nowhere'}\n"," stop_words = stop_words - important_words\n"," tokens = [token for token in tokens if token not in stop_words]\n","\n"," # Rejoindre les tokens en une chaîne\n"," return ' '.join(tokens)\n","\n","\n","def process_in_parallel(df, func, n_jobs=4):\n"," \"\"\"\n"," Applique une fonction à un DataFrame en le divisant en parties et en traitant chaque partie en parallèle.\n"," Permet d'accélérer le traitement sur les ordinateurs multi-coeurs.\n"," \"\"\"\n"," df_split = np.array_split(df, n_jobs)\n"," pool = Pool(n_jobs)\n"," df = pd.concat(pool.map(func, df_split))\n"," pool.close()\n"," pool.join()\n"," return df\n","\n","def apply_preprocessing(df_part):\n"," df_part['processed_text'] = df_part['text'].apply(preprocess_tweet)\n"," return df_part"]},{"cell_type":"code","execution_count":12,"metadata":{"id":"f2CkXR7XNwMt","outputId":"33387259-5848-4a47-8151-912e21f50776","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1751496326866,"user_tz":-120,"elapsed":59842,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[{"output_type":"stream","name":"stdout","text":["Prétraitement des tweets en cours...\n","Prétraitement terminé !\n"]}],"source":["# Appliquer le prétraitement à tous les tweets\n","print(\"Prétraitement des tweets en cours...\")\n","preprocessed_data = process_in_parallel(downsampled_data, apply_preprocessing, n_jobs=8)\n","print(\"Prétraitement terminé !\")"]},{"cell_type":"code","execution_count":13,"metadata":{"id":"LN5ul0JBNwMt","outputId":"125b0b97-0a9e-4f91-94aa-e81350cd4cbd","colab":{"base_uri":"https://localhost:8080/","height":573},"executionInfo":{"status":"ok","timestamp":1751496327160,"user_tz":-120,"elapsed":295,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[{"output_type":"execute_result","data":{"text/plain":[" target ids date flag \\\n","212188 0 1974671194 Sat May 30 13:36:31 PDT 2009 NO_QUERY \n","299036 0 1997882236 Mon Jun 01 17:37:11 PDT 2009 NO_QUERY \n","475978 0 2177756662 Mon Jun 15 06:39:05 PDT 2009 NO_QUERY \n","588988 0 2216838047 Wed Jun 17 20:02:12 PDT 2009 NO_QUERY \n","138859 0 1880666283 Fri May 22 02:03:31 PDT 2009 NO_QUERY \n","\n"," user text \\\n","212188 simba98 @xnausikaax oh no! where did u order from? tha... \n","299036 Seve76 A great hard training weekend is over. a coup... \n","475978 x__claireyy__x Right, off to work Only 5 hours to go until I... \n","588988 Balasi I am craving for japanese food \n","138859 djrickdawson Jean Michel Jarre concert tomorrow gotta work... \n","\n"," processed_text \n","212188 < MENTION > oh no ! u order ? thats horrible \n","299036 great hard training weekend couple day rest le... \n","475978 right work 5 hour go im free xd \n","588988 craving japanese food \n","138859 jean michel jarre concert tomorrow got ta work... "],"text/html":["\n","
\n","
\n","\n","
\n"," \n","
\n","
\n","
target
\n","
ids
\n","
date
\n","
flag
\n","
user
\n","
text
\n","
processed_text
\n","
\n"," \n"," \n","
\n","
212188
\n","
0
\n","
1974671194
\n","
Sat May 30 13:36:31 PDT 2009
\n","
NO_QUERY
\n","
simba98
\n","
@xnausikaax oh no! where did u order from? tha...
\n","
< MENTION > oh no ! u order ? thats horrible
\n","
\n","
\n","
299036
\n","
0
\n","
1997882236
\n","
Mon Jun 01 17:37:11 PDT 2009
\n","
NO_QUERY
\n","
Seve76
\n","
A great hard training weekend is over. a coup...
\n","
great hard training weekend couple day rest le...
\n","
\n","
\n","
475978
\n","
0
\n","
2177756662
\n","
Mon Jun 15 06:39:05 PDT 2009
\n","
NO_QUERY
\n","
x__claireyy__x
\n","
Right, off to work Only 5 hours to go until I...
\n","
right work 5 hour go im free xd
\n","
\n","
\n","
588988
\n","
0
\n","
2216838047
\n","
Wed Jun 17 20:02:12 PDT 2009
\n","
NO_QUERY
\n","
Balasi
\n","
I am craving for japanese food
\n","
craving japanese food
\n","
\n","
\n","
138859
\n","
0
\n","
1880666283
\n","
Fri May 22 02:03:31 PDT 2009
\n","
NO_QUERY
\n","
djrickdawson
\n","
Jean Michel Jarre concert tomorrow gotta work...
\n","
jean michel jarre concert tomorrow got ta work...
\n","
\n"," \n","
\n","
\n","
\n","\n","
\n"," \n","\n"," \n","\n"," \n","
\n","\n","\n","
\n"," \n","\n","\n","\n"," \n","
\n","\n","
\n","
\n"],"application/vnd.google.colaboratory.intrinsic+json":{"type":"dataframe","variable_name":"preprocessed_data","summary":"{\n \"name\": \"preprocessed_data\",\n \"rows\": 100000,\n \"fields\": [\n {\n \"column\": \"target\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0,\n \"min\": 0,\n \"max\": 1,\n \"num_unique_values\": 2,\n \"samples\": [\n 1,\n 0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"ids\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 192922675,\n \"min\": 1467811594,\n \"max\": 2329205473,\n \"num_unique_values\": 99996,\n \"samples\": [\n 2046950711,\n 2254018011\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"date\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 93451,\n \"samples\": [\n \"Fri Jun 05 17:55:21 PDT 2009\",\n \"Mon Jun 01 00:07:41 PDT 2009\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"flag\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 1,\n \"samples\": [\n \"NO_QUERY\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"user\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 82677,\n \"samples\": [\n \"FRSoul\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"text\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 99702,\n \"samples\": [\n \"@dsrosenthal I was using adium 1.4b5, just upgraded to 1.4b6...same fail \"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"processed_text\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 97332,\n \"samples\": [\n \"york thingy finially arrived time waiting week uea managed get three 9 day speedy no ?\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}"}},"metadata":{},"execution_count":13}],"source":["preprocessed_data.head()"]},{"cell_type":"markdown","metadata":{"id":"zyb9Fj38NwMt"},"source":["## Division des données en ensembles d'entraînement et de test"]},{"cell_type":"code","execution_count":14,"metadata":{"id":"Z_y6Ja0INwMt","outputId":"01bfc5c1-62c2-419b-a15f-8b4dacc305c4","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1751496327204,"user_tz":-120,"elapsed":43,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[{"output_type":"stream","name":"stdout","text":["Taille de l'ensemble d'entraînement: 80000 exemples\n","Taille de l'ensemble de test: 20000 exemples\n"]}],"source":["# Diviser les données en ensembles d'entraînement et de test\n","from sklearn.model_selection import train_test_split\n","\n","X = preprocessed_data['processed_text']\n","y = preprocessed_data['target']\n","\n","# Division train/test\n","X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42, stratify=y)\n","\n","print(f\"Taille de l'ensemble d'entraînement: {X_train.shape[0]} exemples\")\n","print(f\"Taille de l'ensemble de test: {X_test.shape[0]} exemples\")"]},{"cell_type":"markdown","metadata":{"id":"wPE9r-G4NwMt"},"source":["## Entraînement des modèles et tracking avec MLflow"]},{"cell_type":"markdown","metadata":{"id":"zpsZDWuANwMt"},"source":["### Configuration de MLFlow"]},{"cell_type":"code","source":["import mlflow\n","import mlflow.keras\n","from mlflow.models import infer_signature\n","from mlflow import MlflowClient\n","from dotenv import load_dotenv\n","\n","# Charger les variables d'environnement depuis le fichier .env\n","load_dotenv()\n","\n","# Configuration de MLflow avec les variables d'environnement\n","mlflow_tracking_uri = os.getenv(\"MLFLOW_TRACKING_URI\")\n","mlflow_s3_endpoint_url = os.getenv(\"MLFLOW_S3_ENDPOINT_URL\")\n","aws_access_key_id = os.getenv(\"AWS_ACCESS_KEY_ID\")\n","aws_secret_access_key = os.getenv(\"AWS_SECRET_ACCESS_KEY\")\n","\n","# Configuration explicite de MLflow\n","mlflow.set_tracking_uri(mlflow_tracking_uri)\n","print(f\"MLflow Tracking URI: {mlflow_tracking_uri}\")\n","\n","# Configuration explicite des identifiants AWS\n","os.environ[\"MLFLOW_S3_ENDPOINT_URL\"] = mlflow_s3_endpoint_url\n","os.environ[\"AWS_ACCESS_KEY_ID\"] = aws_access_key_id\n","os.environ[\"AWS_SECRET_ACCESS_KEY\"] = aws_secret_access_key\n","print(\"Identifiants AWS configurés\")"],"metadata":{"id":"qoQ4njujN758","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1751496328688,"user_tz":-120,"elapsed":1483,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"b87937dd-21cd-4b1a-ca4f-713db41d03db"},"execution_count":15,"outputs":[{"output_type":"stream","name":"stdout","text":["MLflow Tracking URI: https://mlflow.greg-madman-nas.duckdns.org/\n","Identifiants AWS configurés\n"]}]},{"cell_type":"code","execution_count":16,"metadata":{"id":"CZ7unEtvNwMt","outputId":"ae2a73b9-81c2-46ed-bd22-79a5471c1af6","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1751496329235,"user_tz":-120,"elapsed":540,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[{"output_type":"execute_result","data":{"text/plain":[""]},"metadata":{},"execution_count":16}],"source":["# Créer l'expérience MLflow\n","mlflow.set_experiment(\"OC Projet 7\")"]},{"cell_type":"markdown","metadata":{"id":"33JkcVxcNwMt"},"source":["## Préparation des données pour les modèles de deep learning\n","\n","D'abord, nous devons tokeniser nos textes et les préparer pour l'entraînement des modèles de deep learning."]},{"cell_type":"code","execution_count":17,"metadata":{"id":"WKfNMY_JNwMt","outputId":"2b5e61b0-25a0-4fc2-f4dc-40dad99ba40c","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1751496332484,"user_tz":-120,"elapsed":3223,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[{"output_type":"stream","name":"stdout","text":["Taille du vocabulaire: 52692\n","Forme des données d'entraînement: (80000, 50)\n","Forme des données de test: (20000, 50)\n"]}],"source":["# Définir la longueur maximale des séquences (nombre de mots par tweet)\n","MAX_SEQUENCE_LENGTH = 50\n","\n","# Définir la taille du vocabulaire (nombre de mots uniques à considérer)\n","MAX_VOCAB_SIZE = 20000\n","\n","# Tokenisation des textes\n","tokenizer = Tokenizer(num_words=MAX_VOCAB_SIZE, oov_token='')\n","tokenizer.fit_on_texts(X_train)\n","\n","# Convertir les textes en séquences d'indices\n","X_train_seq = tokenizer.texts_to_sequences(X_train)\n","X_test_seq = tokenizer.texts_to_sequences(X_test)\n","\n","# Padding des séquences pour qu'elles aient toutes la même longueur\n","X_train_pad = pad_sequences(X_train_seq, maxlen=MAX_SEQUENCE_LENGTH, padding='post', truncating='post')\n","X_test_pad = pad_sequences(X_test_seq, maxlen=MAX_SEQUENCE_LENGTH, padding='post', truncating='post')\n","\n","# Créer le dossier pour sauvegarder les modèles\n","os.makedirs(\"content/advanced-model\", exist_ok=True)\n","# os.makedirs(\"content/advanced-model/best\", exist_ok=True)\n","\n","# Sauvegarder le tokenizer pour une utilisation ultérieure\n","import pickle\n","with open('content/advanced-model/tokenizer.pickle', 'wb') as handle:\n"," pickle.dump(tokenizer, handle, protocol=pickle.HIGHEST_PROTOCOL)\n","\n","print(f\"Taille du vocabulaire: {len(tokenizer.word_index) + 1}\")\n","print(f\"Forme des données d'entraînement: {X_train_pad.shape}\")\n","print(f\"Forme des données de test: {X_test_pad.shape}\")"]},{"cell_type":"markdown","metadata":{"id":"876rS4__NwMt"},"source":["## Fonctions d'évaluation"]},{"cell_type":"code","execution_count":18,"metadata":{"id":"OrUjzG-6NwMt","executionInfo":{"status":"ok","timestamp":1751496332484,"user_tz":-120,"elapsed":2,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["def evaluate_model(model, X_test, y_test, class_names=['Négatif', 'Positif']):\n"," \"\"\"\n"," Évalue le modèle sur l'ensemble de test et retourne les métriques de performance.\n"," \"\"\"\n"," # Prédictions du modèle\n"," y_pred_proba = model.predict(X_test)\n"," y_pred = (y_pred_proba > 0.5).astype(int)\n","\n"," # Convertir les prédictions de format numpy à format list pour éviter les erreurs de sérialisation\n"," if isinstance(y_pred, np.ndarray):\n"," y_pred = y_pred.flatten().tolist()\n"," if isinstance(y_pred_proba, np.ndarray):\n"," y_pred_proba = y_pred_proba.flatten().tolist()\n","\n"," # Calculer les métriques\n"," accuracy = accuracy_score(y_test, y_pred)\n"," precision = precision_score(y_test, y_pred)\n"," recall = recall_score(y_test, y_pred)\n"," f1 = f1_score(y_test, y_pred)\n"," roc_auc = roc_auc_score(y_test, y_pred_proba)\n","\n"," # Matrice de confusion\n"," cm = confusion_matrix(y_test, y_pred)\n","\n"," # Rapport de classification\n"," report = classification_report(y_test, y_pred, target_names=class_names)\n","\n"," metrics = {\n"," 'accuracy': accuracy,\n"," 'precision': precision,\n"," 'recall': recall,\n"," 'f1': f1,\n"," 'roc_auc': roc_auc\n"," }\n","\n"," return metrics, cm, report, y_pred, y_pred_proba\n","\n","def plot_confusion_matrix(cm, class_names, title='Matrice de confusion'):\n"," \"\"\"\n"," Crée une figure de matrice de confusion.\n"," \"\"\"\n"," fig, ax = plt.subplots(figsize=(8, 6))\n"," im = ax.imshow(cm, interpolation='nearest', cmap=plt.cm.Blues)\n"," ax.figure.colorbar(im, ax=ax)\n"," ax.set(xticks=np.arange(cm.shape[1]),\n"," yticks=np.arange(cm.shape[0]),\n"," xticklabels=class_names,\n"," yticklabels=class_names,\n"," title=title,\n"," ylabel='Vraie étiquette',\n"," xlabel='Étiquette prédite')\n","\n"," # Pivoter les labels de l'axe des x\n"," plt.setp(ax.get_xticklabels(), rotation=45, ha=\"right\", rotation_mode=\"anchor\")\n","\n"," # Annoter la matrice de confusion\n"," thresh = cm.max() / 2.\n"," for i in range(cm.shape[0]):\n"," for j in range(cm.shape[1]):\n"," ax.text(j, i, format(cm[i, j], 'd'),\n"," ha=\"center\", va=\"center\",\n"," color=\"white\" if cm[i, j] > thresh else \"black\")\n","\n"," plt.tight_layout()\n"," return fig\n"]},{"cell_type":"markdown","metadata":{"id":"3_YfW-7yNwMt"},"source":["## Fonction de logging pour MLflow"]},{"cell_type":"code","source":["def log_model_to_mlflow(model, model_name, vectorizer_name, metrics, cm, report, X_test, y_test, history=None, params=None):\n"," \"\"\"\n"," Enregistre le modèle et ses performances dans MLflow.\n"," \"\"\"\n"," class_names = ['Négatif', 'Positif']\n","\n"," with mlflow.start_run(run_name=f\"Modele_Avance_{model_name}_{vectorizer_name}\"):\n"," # Enregistrer les paramètres du modèle\n"," if params:\n"," for key, value in params.items():\n"," mlflow.log_param(key, value)\n","\n"," # Enregistrer les métriques de validation issues de l'entraînement\n"," if history is not None:\n"," hist = history.history\n"," if 'val_precision' in hist:\n"," best_epoch = int(np.argmax(hist['val_precision']))\n"," mlflow.log_metric(\"val_precision\", float(hist['val_precision'][best_epoch]))\n"," if 'val_loss' in hist:\n"," mlflow.log_metric(\"val_loss\", float(hist['val_loss'][best_epoch]))\n"," if 'val_recall' in hist:\n"," mlflow.log_metric(\"val_recall\", float(hist['val_recall'][best_epoch]))\n","\n"," # Enregistrer les métriques de performance\n"," for key, value in metrics.items():\n"," mlflow.log_metric('test_' + key, value)\n","\n"," # Tracer et enregistrer la matrice de confusion\n"," fig = plot_confusion_matrix(cm, class_names)\n"," mlflow.log_figure(fig, f\"confusion_matrix_{model_name}_{vectorizer_name}.png\")\n"," plt.close(fig)\n","\n"," # Enregistrer le rapport de classification\n"," report_path = f\"content/advanced-model/{model_name}_{vectorizer_name}/classification_report.txt\"\n"," os.makedirs(os.path.dirname(report_path), exist_ok=True)\n"," with open(report_path, \"w\") as f:\n"," f.write(report)\n"," mlflow.log_artifact(report_path)\n","\n"," # Enregistrer le modèle dans MLflow\n"," signature = infer_signature(X_test, y_test)\n"," mlflow.keras.log_model(\n"," model,\n"," f\"model_{model_name}_{vectorizer_name}\",\n"," signature=signature\n"," )\n","\n"," # Log du dossier local qui contient déjà tous les artefacts\n"," artifact_dir = f\"content/advanced-model/{model_name}_{vectorizer_name}\"\n"," if os.path.exists(artifact_dir):\n"," mlflow.log_artifacts(artifact_dir, \"local_artifacts\")\n","\n"," return mlflow.active_run().info.run_id\n","\n","\n","def plot_training_history(history, model_name, vectorizer_name, run_id=None):\n"," \"\"\"\n"," Trace l'historique d'entraînement du modèle et l'enregistre dans la même exécution MLflow.\n","\n"," Args:\n"," history: Historique d'entraînement du modèle\n"," model_name: Nom du modèle\n"," vectorizer_name: Nom du vectoriseur\n"," run_id: ID de l'exécution MLflow existante\n","\n"," Returns:\n"," fig: Figure matplotlib créée\n"," \"\"\"\n"," fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))\n","\n"," # Tracer precision (train & val)\n"," ax1.plot(history.history['precision'], label='train')\n"," ax1.plot(history.history['val_precision'], label='validation')\n"," ax1.set_title(f'Précision - {model_name} avec {vectorizer_name}')\n"," ax1.set_xlabel('Epoch')\n"," ax1.set_ylabel('Précision')\n"," ax1.legend()\n","\n"," # Tracer loss (train & val)\n"," ax2.plot(history.history['loss'], label='train')\n"," ax2.plot(history.history['val_loss'], label='validation')\n"," ax2.set_title(f'Loss - {model_name} avec {vectorizer_name}')\n"," ax2.set_xlabel('Epoch')\n"," ax2.set_ylabel('Loss')\n"," ax2.legend()\n","\n","\n"," plt.tight_layout()\n","\n"," # Sauvegarder la figure localement\n"," filename = f'content/advanced-model/training_history_{model_name}_{vectorizer_name}.png'\n"," plt.savefig(filename)\n","\n"," # Enregistrer dans MLflow en utilisant l'exécution existante\n"," if run_id:\n"," with mlflow.start_run(run_id=run_id):\n"," mlflow.log_figure(fig, f\"training_history_{model_name}_{vectorizer_name}.png\")\n"," else:\n"," # Fallback si aucun run_id n'est fourni\n"," with mlflow.start_run(run_name=f\"ModeleAvance_{model_name}_{vectorizer_name}\"):\n"," mlflow.log_figure(fig, f\"training_history_{model_name}_{vectorizer_name}.png\")"],"metadata":{"id":"etdkfzD9x8t3","executionInfo":{"status":"ok","timestamp":1751496332505,"user_tz":-120,"elapsed":21,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"execution_count":19,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"1UorrWtSNwMu"},"source":["## Chargement et préparation des embeddings pré-entraînés"]},{"cell_type":"markdown","metadata":{"id":"yzl1y9HSNwMu"},"source":["### Word2vec"]},{"cell_type":"code","execution_count":20,"metadata":{"id":"K0hDRRZmNwMu","outputId":"93c2982f-d9e5-41d9-888b-cc527e9e3978","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1751496332875,"user_tz":-120,"elapsed":369,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[{"output_type":"stream","name":"stdout","text":["Word2Vec model already exists at content/pretrained-embeddings/word2vec/GoogleNews-vectors-negative300.bin\n","Word2Vec model is available at: content/pretrained-embeddings/word2vec/GoogleNews-vectors-negative300.bin\n"]}],"source":["def download_word2vec():\n"," \"\"\"\n"," Downloads the pre-trained Word2Vec embeddings.\n"," Creates the necessary directories, downloads the file, extracts it, and cleans up unneeded files.\n","\n"," Returns:\n"," str: Path to the extracted Word2Vec model file\n"," \"\"\"\n"," import os\n"," import gzip\n"," import shutil\n"," from urllib.request import urlretrieve\n"," import time\n"," import zipfile\n","\n"," # Create necessary directories\n"," content_dir = 'content/pretrained-embeddings'\n"," word2vec_dir = os.path.join(content_dir, 'word2vec')\n","\n"," os.makedirs(word2vec_dir, exist_ok=True)\n","\n"," # Define file paths\n"," model_file = os.path.join(word2vec_dir, 'GoogleNews-vectors-negative300.bin')\n"," zip_file = os.path.join(word2vec_dir, 'GoogleNews-vectors-negative300.bin.zip')\n","\n"," # Skip download if file already exists\n"," if os.path.exists(model_file):\n"," print(f\"Word2Vec model already exists at {model_file}\")\n"," return model_file\n","\n"," # URL for the pre-trained Word2Vec embeddings\n"," # Using huggingface repository as a reliable source\n"," url = 'https://huggingface.co/fse/word2vec-google-news-300/resolve/main/GoogleNews-vectors-negative300.bin.gz'\n","\n"," try:\n"," # Download the file with progress reporting\n"," print(f\"Downloading Word2Vec embeddings from {url}...\")\n"," print(\"This may take a while as the file is ~1.5GB\")\n","\n"," start_time = time.time()\n","\n"," def progress_callback(count, block_size, total_size):\n"," elapsed_time = time.time() - start_time\n"," downloaded = count * block_size / (1024 * 1024) # MB\n"," total = total_size / (1024 * 1024) if total_size > 0 else 0 # MB\n"," percent = min(100, count * block_size * 100 / total_size) if total_size > 0 else 0\n"," speed = downloaded / elapsed_time if elapsed_time > 0 else 0\n","\n"," print(f\"\\rDownloaded: {downloaded:.1f}MB / {total:.1f}MB ({percent:.1f}%) - {speed:.1f}MB/s\",\n"," end='', flush=True)\n","\n"," gz_file = os.path.join(word2vec_dir, 'GoogleNews-vectors-negative300.bin.gz')\n"," urlretrieve(url, gz_file, progress_callback)\n"," print(\"\\nDownload complete!\")\n","\n"," # Extract the gzip file\n"," print(f\"Extracting {gz_file}...\")\n"," with gzip.open(gz_file, 'rb') as f_in:\n"," with open(model_file, 'wb') as f_out:\n"," shutil.copyfileobj(f_in, f_out)\n"," print(\"Extraction complete!\")\n","\n"," # Delete the gzip file to save space\n"," os.remove(gz_file)\n"," print(f\"Deleted temporary file: {gz_file}\")\n","\n"," return model_file\n","\n"," except Exception as e:\n"," print(f\"Error downloading or extracting Word2Vec embeddings: {str(e)}\")\n"," print(\"\\nTrying alternative download source...\")\n","\n"," # Alternative URL (Google Drive mirror)\n"," try:\n"," # Install gdown if not available\n"," import subprocess\n"," import sys\n","\n"," def install_gdown():\n"," subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"gdown\"])\n","\n"," try:\n"," import gdown\n"," except ImportError:\n"," print(\"Installing gdown package for Google Drive downloads...\")\n"," install_gdown()\n"," import gdown\n","\n"," # Google Drive file ID for Word2Vec\n"," file_id = \"0B7XkCwpI5KDYNlNUTTlSS21pQmM\"\n","\n"," print(f\"Downloading Word2Vec embeddings from Google Drive (ID: {file_id})...\")\n"," output = gz_file\n"," gdown.download(id=file_id, output=output, quiet=False)\n","\n"," # Extract the gzip file\n"," print(f\"Extracting {gz_file}...\")\n"," with gzip.open(gz_file, 'rb') as f_in:\n"," with open(model_file, 'wb') as f_out:\n"," shutil.copyfileobj(f_in, f_out)\n"," print(\"Extraction complete!\")\n","\n"," # Delete the gzip file to save space\n"," os.remove(gz_file)\n"," print(f\"Deleted temporary file: {gz_file}\")\n","\n"," return model_file\n","\n"," except Exception as alt_error:\n"," print(f\"Error with alternative download: {str(alt_error)}\")\n","\n"," # Final fallback: direct user to manual download\n"," print(\"\\nAutomatic download failed. Please follow these manual steps:\")\n"," print(\"1. Download the Word2Vec embeddings from: https://drive.google.com/file/d/0B7XkCwpI5KDYNlNUTTlSS21pQmM/view?usp=sharing\")\n"," print(\"2. Extract the downloaded file\")\n"," print(f\"3. Place the 'GoogleNews-vectors-negative300.bin' file in the '{word2vec_dir}' directory\")\n","\n"," # Clean up any partial downloads\n"," if os.path.exists(gz_file):\n"," os.remove(gz_file)\n"," if os.path.exists(model_file) and os.path.getsize(model_file) < 1000000: # If file exists but is too small\n"," os.remove(model_file)\n","\n"," raise Exception(\"Failed to download Word2Vec embeddings automatically. Please download manually.\")\n","\n","# Example usage:\n","model_path = download_word2vec()\n","print(f\"Word2Vec model is available at: {model_path}\")"]},{"cell_type":"code","execution_count":21,"metadata":{"id":"WMvPJS5tNwMu","executionInfo":{"status":"ok","timestamp":1751496333725,"user_tz":-120,"elapsed":849,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["from gensim.models import KeyedVectors\n","\n","def load_word2vec_embeddings():\n"," \"\"\"\n"," Charge les embeddings Word2Vec pré-entraînés.\n"," \"\"\"\n"," print(\"Chargement des embeddings Word2Vec...\")\n","\n"," # Charger le modèle Word2Vec\n"," word2vec_model = KeyedVectors.load_word2vec_format('content/pretrained-embeddings/word2vec/GoogleNews-vectors-negative300.bin', binary=True, limit=500000)\n","\n"," # Convertir en dictionnaire pour une utilisation plus facile\n"," embeddings_index = {}\n"," for word in word2vec_model.key_to_index:\n"," embeddings_index[word] = word2vec_model[word]\n","\n"," print(f\"Trouvé {len(embeddings_index)} vecteurs d'embeddings Word2Vec.\")\n"," return embeddings_index"]},{"cell_type":"markdown","metadata":{"id":"Xor_kNOVNwMu"},"source":["## Création des matrices d'embedding à partir des embeddings pré-entraînés"]},{"cell_type":"code","execution_count":22,"metadata":{"id":"H1nz57olNwMu","executionInfo":{"status":"ok","timestamp":1751496333728,"user_tz":-120,"elapsed":1,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["def create_embedding_matrix(word_index, embeddings_index, embedding_dim):\n"," \"\"\"\n"," Crée une matrice d'embedding à partir des embeddings pré-entraînés.\n"," Affiche une barre de progression pendant le traitement.\n","\n"," Args:\n"," word_index (dict): Dictionnaire de mots et leurs indices\n"," embeddings_index (dict): Dictionnaire des embeddings pré-entraînés\n"," embedding_dim (int): Dimension des vecteurs d'embedding\n","\n"," Returns:\n"," numpy.ndarray: Matrice d'embedding\n"," \"\"\"\n"," vocab_size = len(word_index) + 1\n"," embedding_matrix = np.zeros((vocab_size, embedding_dim))\n","\n"," found_words = 0\n","\n"," # Utiliser tqdm pour afficher une barre de progression\n"," print(f\"Création de la matrice d'embedding pour {len(word_index)} mots...\")\n"," for word, i in tqdm(word_index.items(), total=len(word_index), desc=\"Création matrice d'embedding\"):\n"," embedding_vector = embeddings_index.get(word)\n"," if embedding_vector is not None:\n"," embedding_matrix[i] = embedding_vector\n"," found_words += 1\n","\n"," print(f\"Trouvé {found_words} mots ({found_words/len(word_index)*100:.2f}%) dans les embeddings pré-entraînés.\")\n"," return embedding_matrix"]},{"cell_type":"markdown","metadata":{"id":"XsGjsmVYNwMu"},"source":["## Optimisations matérielle (utilisation du GPU)\n","\n","1. **Désactivation du recurrent_dropout** - Permet l'utilisation de CuDNNLSTM optimisé pour GPU\n","2. **Activation de XLA** (Accelerated Linear Algebra) - Optimise les graphes d'opérations pour GPU\n","3. **Précision mixte** - Utilise float16 pour les calculs et float32 pour les variables\n","4. **Augmentation de la taille du batch** - Passée à 256 pour mieux exploiter le parallélisme GPU\n","5. **Optimisation du pipeline de données** - Utilisation de tf.data.Dataset avec prefetch\n","6. **Scheduler de taux d'apprentissage** - Décroissance exponentielle du taux pour améliorer la convergence\n","\n","Ces modifications permettent d'utiliser efficacement les capacités de notre **GTX 1060 3GB** tout en respectant les limitations de la mémoire."]},{"cell_type":"markdown","metadata":{"id":"lF2h27fxNwMu"},"source":["### Utilisation du GPU"]},{"cell_type":"code","execution_count":23,"metadata":{"id":"TcLWpxKgNwMu","outputId":"c8d611f2-b1a1-4183-fe6b-67ae682dc067","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1751496334938,"user_tz":-120,"elapsed":1190,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[{"output_type":"stream","name":"stderr","text":["WARNING:tensorflow:From /tmp/ipython-input-23-656146420.py:12: is_gpu_available (from tensorflow.python.framework.test_util) is deprecated and will be removed in a future version.\n","Instructions for updating:\n","Use `tf.config.list_physical_devices('GPU')` instead.\n"]},{"output_type":"stream","name":"stdout","text":["GPU disponible : [PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]\n","TensorFlow utilise GPU: True\n","Devices disponibles: [PhysicalDevice(name='/physical_device:CPU:0', device_type='CPU'), PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]\n","Compute dtype: float16\n","Variable dtype: float32\n"]}],"source":["import tensorflow as tf\n","\n","# Configuration de TensorFlow pour utiliser la GPU si disponible\n","physical_devices = tf.config.list_physical_devices('GPU')\n","if physical_devices:\n"," tf.config.experimental.set_memory_growth(physical_devices[0], True)\n"," print(\"GPU disponible :\", physical_devices)\n","else:\n"," print(\"Pas de GPU disponible, utilisation du CPU\")\n","\n","# Vérifier que TensorFlow utilise le GPU\n","print(f\"TensorFlow utilise GPU: {tf.test.is_gpu_available()}\")\n","print(f\"Devices disponibles: {tf.config.list_physical_devices()}\")\n","\n","# Optimiser les performances avec mixed precision\n","# Cette option accélère l'entraînement sur les GPU récents\n","policy = tf.keras.mixed_precision.Policy('mixed_float16')\n","tf.keras.mixed_precision.set_global_policy(policy)\n","print(f'Compute dtype: {policy.compute_dtype}')\n","print(f'Variable dtype: {policy.variable_dtype}')"]},{"cell_type":"markdown","metadata":{"id":"K6WAGmVVNwMu"},"source":["### Optimisations de la mémoire et configuration TensorFlow"]},{"cell_type":"code","execution_count":24,"metadata":{"id":"EHdEo-FBNwMu","outputId":"19e2a2df-8c60-4292-eb3f-37e45c1a9fe5","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1751496334949,"user_tz":-120,"elapsed":5,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[{"output_type":"stream","name":"stdout","text":["Mémoire GPU dynamique activée\n","Politique de calcul: mixed_float16\n"]}],"source":["# Activer la mémoire GPU dynamique\n","gpus = tf.config.experimental.list_physical_devices('GPU')\n","if gpus:\n"," try:\n"," for gpu in gpus:\n"," tf.config.experimental.set_memory_growth(gpu, True)\n"," print(\"Mémoire GPU dynamique activée\")\n"," except RuntimeError as e:\n"," print(f\"Erreur: {e}\")\n","\n","# Activer XLA (Accelerated Linear Algebra) pour optimiser les graphes\n","tf.config.optimizer.set_jit(True) # Active la compilation Just-In-Time\n","\n","# Précision mixte pour accélérer les calculs\n","policy = tf.keras.mixed_precision.Policy('mixed_float16')\n","tf.keras.mixed_precision.set_global_policy(policy)\n","print(f'Politique de calcul: {policy.name}')"]},{"cell_type":"markdown","metadata":{"id":"5tWaCIapNwMu"},"source":["### Optimisation du chargement des données"]},{"cell_type":"code","execution_count":25,"metadata":{"id":"_OYSmRuiNwMw","executionInfo":{"status":"ok","timestamp":1751496334996,"user_tz":-120,"elapsed":46,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["# 2. Optimiser le chargement des données\n","AUTOTUNE = tf.data.AUTOTUNE\n","BATCH_SIZE = 256 # Tester avec différentes valeurs: 128, 256, 512\n","\n","# Créer un dataset TensorFlow optimisé\n","def create_optimized_dataset(x, y, is_training=True):\n"," dataset = tf.data.Dataset.from_tensor_slices((x, y))\n"," if is_training:\n"," dataset = dataset.shuffle(10000)\n","\n"," # Utiliser un batch plus grand pour mieux utiliser le GPU\n"," dataset = dataset.batch(BATCH_SIZE)\n","\n"," # Précharger les données pour éviter les goulots d'étranglement\n"," dataset = dataset.prefetch(AUTOTUNE)\n"," return dataset\n","\n","# Séparer les données de validation et créer les datasets optimisés\n","val_size = int(0.1 * len(X_train_pad))\n","x_val = X_train_pad[-val_size:]\n","y_val = y_train[-val_size:]\n","x_train_final = X_train_pad[:-val_size]\n","y_train_final = y_train[:-val_size]\n","\n","train_dataset = create_optimized_dataset(x_train_final, y_train_final)\n","val_dataset = create_optimized_dataset(x_val, y_val, is_training=False)"]},{"cell_type":"markdown","metadata":{"id":"5angsL01NwMx"},"source":["Nos optimisations fonctionnent correctement :\n","\n","1. **XLA activé** : `Loaded cuDNN version 90300` et `Compiled cluster using XLA!` confirment que l'accélération XLA est bien activée.\n","2. **CuDNN chargé** : Le message indique que cuDNN (version 9.03) est correctement chargé, ce qui signifie que vos couches LSTM utiliseront l'implémentation optimisée pour GPU.\n","3. **GPU reconnu** : Le système a bien reconnu votre NVIDIA GeForce GTX 1060 3GB avec Compute Capability 6.1.\n","\n","Nous observervons :\n","- Une utilisation GPU bien supérieure à 20% (idéalement 70-90%)\n","- Un temps d'entraînement par epoch considérablement réduit\n","\n","Pour vérifier l'utilisation réelle du GPU pendant l'entraînement, nous pouvons exécuter :\n","\n","```shell\n","nvidia-smi -l 1\n","```"]},{"cell_type":"markdown","metadata":{"id":"PicWq6E0NwMx"},"source":["### Bilan de l'optimisation\n","\n","Nous avons réussi à optimiser significativement l'utilisation de notre GPU. Les modifications que nous avons apportées ont considérablement amélioré les performances :\n","\n","- Nous avons augmenté l'**utilisation de votre GPU de 20% à 73%**\n","- Nous utilisons maintenant intelligemment la mémoire disponible\n","- Nous avons activé les technologies d'**accélération comme XLA et CuDNN**\n","- Nous avons désactivé le **recurrent_dropout** pour permettre l'utilisation des implémentations GPU optimisées\n","- Nous avons implémenté la **précision mixte** pour accélérer les calculs\n","- Nous avons optimisé la **taille du batch** et le pipeline de données\n","\n","Nous avons atteint un excellent équilibre entre l'utilisation maximale des ressources et la stabilité du système."]},{"cell_type":"markdown","metadata":{"id":"NlECzxylNwMx"},"source":["## Création d'un modèles LSTM avec embeddings pré-entraînés\n","\n","Voici une description de la fonction `create_lstm_model_with_pretrained` qui crée un **modèle LSTM** avec des **embeddings pré-entraînés** :\n","\n","- Crée un modèle de réseau de neurones pour la **classification de texte** utilisant des **embeddings pré-entraînés**\n","- Initialise une couche d'embedding avec les poids fournis dans `embedding_matrix`\n","- Utilise une architecture profonde avec deux couches LSTM bidirectionnelles (128 puis 64 unités)\n","- Implémente plusieurs techniques de régularisation (dropout spatial et classique) pour éviter le surapprentissage\n","- Inclut une couche dense intermédiaire avec activation ReLU\n","- Se termine par une **couche de sortie avec activation sigmoïde**, adaptée aux problèmes de **classification binaire**\n","- Compile le modèle avec l'**optimiseur Adam**, une fonction de perte d'entropie croisée binaire et suit la métrique de précision\n","- Permet de contrôler si les embeddings sont entraînables ou figés via le paramètre `trainable`"]},{"cell_type":"code","execution_count":26,"metadata":{"id":"1KZ4x6cGNwMx","executionInfo":{"status":"ok","timestamp":1751496335012,"user_tz":-120,"elapsed":15,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["def create_optimized_lstm_model(embedding_matrix, max_seq_length=MAX_SEQUENCE_LENGTH, trainable=False):\n"," vocab_size, embedding_dim = embedding_matrix.shape\n","\n"," # Entrée du modèle\n"," input_layer = tf.keras.layers.Input(shape=(max_seq_length,))\n","\n"," # Couche d'embedding avec des poids pré-entraînés\n"," embedding_layer = tf.keras.layers.Embedding(\n"," input_dim=vocab_size,\n"," output_dim=embedding_dim,\n"," weights=[embedding_matrix],\n"," input_length=max_seq_length,\n"," trainable=trainable\n"," )(input_layer)\n","\n"," # Dropout spatial\n"," dropout_1 = tf.keras.layers.SpatialDropout1D(0.3)(embedding_layer)\n","\n"," # Couche CuDNNLSTM optimisée pour GPU (via le backend GPU automatique de TF)\n"," # Note: TF2.x utilise automatiquement l'implémentation CuDNNLSTM quand recurrent_dropout=0\n"," lstm_layer = tf.keras.layers.Bidirectional(\n"," tf.keras.layers.LSTM(\n"," units=128,\n"," dropout=0.2,\n"," recurrent_dropout=0.0, # Mettre à 0 pour utiliser l'implémentation CuDNN optimisée\n"," return_sequences=True\n"," )\n"," )(dropout_1)\n","\n"," # Deuxième couche LSTM\n"," lstm_layer_2 = tf.keras.layers.Bidirectional(\n"," tf.keras.layers.LSTM(\n"," units=64,\n"," dropout=0.2,\n"," recurrent_dropout=0.0 # Mettre à 0 pour utiliser l'implémentation CuDNN optimisée\n"," )\n"," )(lstm_layer)\n","\n"," # Couche dense avec activation ReLU\n"," dense_1 = tf.keras.layers.Dense(64, activation='relu')(lstm_layer_2)\n"," dropout_2 = tf.keras.layers.Dropout(0.4)(dense_1)\n","\n"," # Couche de sortie\n"," output_layer = tf.keras.layers.Dense(1, activation='sigmoid')(dropout_2)\n","\n"," # Créer et compiler le modèle avec un optimiseur efficace sur GPU\n"," model = tf.keras.Model(inputs=input_layer, outputs=output_layer)\n","\n"," # Utiliser un taux d'apprentissage avec décroissance\n"," # lr_schedule = tf.keras.optimizers.schedules.ExponentialDecay(\n"," # initial_learning_rate=0.001,\n"," # decay_steps=1000,\n"," # decay_rate=0.9,\n"," # staircase=True\n"," # )\n","\n"," model.compile(\n"," optimizer=tf.keras.optimizers.Adam(learning_rate=0.001), # taux fixe\n"," loss='binary_crossentropy',\n"," # on ajoute aussi le rappel car on veut tout de même limiter le nombre de faux négatifs\n"," metrics=[keras.metrics.Precision(name='precision'), keras.metrics.Recall(name='recall')]\n"," )\n","\n"," return model"]},{"cell_type":"markdown","metadata":{"id":"S_tupAxrNwMx"},"source":["## Fonction de sauvegarde locale des artefacts du modèle\n","\n","Sauvegarde tous les artefacts du modèle (modèle, tokenizer, fonction de prétraitement, historique) dans un sous-dossier dédié."]},{"cell_type":"code","execution_count":27,"metadata":{"id":"Mxy90vFuNwMx","executionInfo":{"status":"ok","timestamp":1751496335021,"user_tz":-120,"elapsed":8,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["import os\n","import dill # Plus puissant que pickle pour sauvegarder des fonctions\n","import datetime\n","import json\n","\n","def save_model_artifacts(model, model_name, vectorizer_name, history, tokenizer):\n"," \"\"\"\n"," Sauvegarde tous les artefacts du modèle (modèle, tokenizer, fonction de prétraitement, historique)\n"," dans un sous-dossier dédié.\n"," \"\"\"\n","\n"," # Créer un sous-dossier dédié pour ce modèle\n"," model_dir = f\"content/advanced-model/{model_name}_{vectorizer_name}\"\n"," os.makedirs(model_dir, exist_ok=True)\n","\n"," # Sous-dossiers pour les différents types d'artefacts\n"," checkpoints_dir = f\"{model_dir}/checkpoints\"\n"," os.makedirs(checkpoints_dir, exist_ok=True)\n","\n"," # 1. Sauvegarder le modèle final\n"," model_path = f\"{model_dir}/final_model_{model_name}_{vectorizer_name}.keras\"\n"," model.save(model_path)\n"," print(f\"Modèle sauvegardé dans {model_path}\")\n","\n"," # 2. Sauvegarder le tokenizer\n"," tokenizer_path = f\"{model_dir}/tokenizer.pickle\"\n"," with open(tokenizer_path, 'wb') as handle:\n"," pickle.dump(tokenizer, handle, protocol=pickle.HIGHEST_PROTOCOL)\n"," print(f\"Tokenizer sauvegardé dans {tokenizer_path}\")\n","\n"," # 3. Sauvegarder la fonction de prétraitement\n"," preprocess_path = f\"{model_dir}/preprocess_function.dill\"\n"," with open(preprocess_path, 'wb') as handle:\n"," dill.dump(preprocess_tweet, handle)\n"," print(f\"Fonction de prétraitement sauvegardée dans {preprocess_path}\")\n","\n"," # 4. Sauvegarder l'historique d'entraînement\n"," if history is not None:\n"," history_path = f\"{model_dir}/training_history.pickle\"\n"," with open(history_path, 'wb') as handle:\n"," pickle.dump(history.history, handle, protocol=pickle.HIGHEST_PROTOCOL)\n"," print(f\"Historique d'entraînement sauvegardé dans {history_path}\")\n","\n"," # 5. Sauvegarder les paramètres utilisés - Version ultra-sécurisée\n"," params_path = f\"{model_dir}/parameters.json\"\n","\n"," # Déterminer la dimension d'embedding de façon sûre\n"," embedding_dim = None\n","\n"," # Méthode 1: Accéder directement à l'attribut output_dim des couches Embedding\n"," for layer in model.layers:\n"," if isinstance(layer, tf.keras.layers.Embedding):\n"," embedding_dim = layer.output_dim\n"," break\n","\n"," # Méthode 2: Si ce n'est pas trouvé, utiliser une valeur basée sur le nom du vectorizer\n"," if embedding_dim is None:\n"," if 'word2vec' in vectorizer_name.lower():\n"," embedding_dim = 300 # Dimension standard pour Word2Vec\n"," elif 'glove' in vectorizer_name.lower() and '300d' in vectorizer_name.lower():\n"," embedding_dim = 300\n"," else:\n"," embedding_dim = 100 # Valeur par défaut\n","\n"," params = {\n"," \"model_name\": model_name,\n"," \"vectorizer_name\": vectorizer_name,\n"," \"max_sequence_length\": MAX_SEQUENCE_LENGTH,\n"," \"vocab_size\": MAX_VOCAB_SIZE,\n"," \"embedding_dim\": embedding_dim,\n"," \"date_created\": datetime.datetime.now().strftime(\"%Y-%m-%d %H:%M:%S\")\n"," }\n"," with open(params_path, 'w') as f:\n"," json.dump(params, f, indent=4)\n"," print(f\"Paramètres sauvegardés dans {params_path}\")\n","\n"," return model_dir"]},{"cell_type":"markdown","metadata":{"id":"BZLUgq5gNwMx"},"source":["## Entraînement : LSTM avec Word2Vec\n","\n","Nous créons un modèle d'analyse de sentiment des tweets basé sur des **réseaux de neurones récurrents (LSTM)** avec des **embeddings Word2Vec**.\n","\n","Nous chargeons d'abord les embeddings Word2Vec pré-entraînés et les intègrons dans la matrice d'embedding, puis nous définissons une **fonction d'entraînement complète** qui:\n","\n","- Crée un **modèle LSTM bidirectionnel** optimisé pour GPU\n","- Configure des **callbacks** comme early stopping, réduction du taux d'apprentissage et sauvegarde des meilleurs modèles\n","- Entraîne le modèle sur des **données de tweets** prétraitées en utilisant des optimisations GPU\n","- Évalue les **performances du modèle** avec diverses métriques (précision, rappel, F1, etc.)\n","- **Sauvegarde les artefacts du modèle** (modèle final, tokenizer, fonction de prétraitement)\n","- **Enregistre tous les paramètres et résultats dans MLflow** pour faciliter le suivi des expériences\n","- Génère des **visualisations des courbes d'apprentissage**\n","- Retourne le modèle entraîné, son historique et ses métriques de performance\n"]},{"cell_type":"code","execution_count":28,"metadata":{"id":"qOq86PFNNwMx","outputId":"3175f0bd-9cdf-4ee4-f96d-e5fd88b0c944","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1751496348585,"user_tz":-120,"elapsed":13563,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[{"output_type":"stream","name":"stdout","text":["Chargement des embeddings Word2Vec...\n","Trouvé 500000 vecteurs d'embeddings Word2Vec.\n","Création de la matrice d'embedding pour 52691 mots...\n"]},{"output_type":"stream","name":"stderr","text":["Création matrice d'embedding: 100%|██████████| 52691/52691 [00:00<00:00, 503127.04it/s]"]},{"output_type":"stream","name":"stdout","text":["Trouvé 18060 mots (34.28%) dans les embeddings pré-entraînés.\n","Forme de la matrice d'embedding: (52692, 300)\n","Échantillon de valeurs: [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n","Type de données: float64\n"]},{"output_type":"stream","name":"stderr","text":["\n"]}],"source":["word2vec_embeddings = load_word2vec_embeddings()\n","word2vec_matrix = create_embedding_matrix(tokenizer.word_index, word2vec_embeddings, 300)\n","\n","# Vérifiez la forme et les valeurs de la matrice d'embedding\n","print(\"Forme de la matrice d'embedding:\", word2vec_matrix.shape)\n","print(\"Échantillon de valeurs:\", word2vec_matrix[0, :10]) # Affiche les 10 premières valeurs de la première ligne\n","print(\"Type de données:\", word2vec_matrix.dtype)"]},{"cell_type":"code","execution_count":29,"metadata":{"id":"KXMLd7jqNwMx","executionInfo":{"status":"ok","timestamp":1751496348604,"user_tz":-120,"elapsed":10,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["# Créer une fonction pour configurer le callback ModelCheckpoint\n","def create_model_checkpoint(model_name, vectorizer_name):\n"," \"\"\"\n"," Crée un callback ModelCheckpoint qui sauvegarde uniquement le meilleur modèle.\n"," \"\"\"\n"," # Créer le dossier pour les checkpoints\n"," checkpoint_dir = f\"content/advanced-model/{model_name}_{vectorizer_name}/checkpoints\"\n"," os.makedirs(checkpoint_dir, exist_ok=True)\n","\n"," # Créer un seul checkpoint pour le meilleur modèle\n"," best_checkpoint = tf.keras.callbacks.ModelCheckpoint(\n"," filepath=f\"{checkpoint_dir}/best_model.keras\",\n"," # on décide de monitorer val_precision car c'est ce que l'on souhaite maximiser\n"," # monitor='val_loss',\n"," monitor='val_precision',\n"," save_best_only=True,\n"," # mode='min',\n"," mode='max',\n"," verbose=1\n"," )\n","\n"," return best_checkpoint"]},{"cell_type":"code","execution_count":30,"metadata":{"id":"JGLT8JhWNwMx","executionInfo":{"status":"ok","timestamp":1751496348612,"user_tz":-120,"elapsed":1,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["def train_word2vec_lstm_model(epochs=20):\n"," \"\"\"\n"," Entraîne un modèle LSTM avec embeddings Word2Vec en utilisant les optimisations GPU\n"," et le chargement de données optimisé.\n"," \"\"\"\n"," # Définir le nom du modèle et de la méthode d'embedding\n"," model_name = \"LSTM\"\n"," vectorizer_name = \"Word2Vec-Fige\"\n","\n"," # Créer les callbacks pour ce modèle\n"," checkpoint_callback = create_model_checkpoint(model_name, vectorizer_name)\n","\n"," # Autres callbacks\n"," early_stopping = tf.keras.callbacks.EarlyStopping(\n"," monitor='val_loss',\n"," patience=5,\n"," restore_best_weights=True\n"," )\n","\n"," reduce_lr = tf.keras.callbacks.ReduceLROnPlateau(\n"," monitor='val_loss',\n"," factor=0.2,\n"," patience=2,\n"," min_lr=0.00001\n"," )\n","\n"," # TensorBoard pour visualiser l'entraînement\n"," tensorboard_dir = f\"content/advanced-model/{model_name}_{vectorizer_name}/logs\"\n"," os.makedirs(tensorboard_dir, exist_ok=True)\n"," tensorboard_callback = tf.keras.callbacks.TensorBoard(\n"," log_dir=tensorboard_dir,\n"," histogram_freq=1,\n"," update_freq='epoch'\n"," )\n","\n"," # Créer le modèle optimisé pour GPU\n"," model = create_optimized_lstm_model(word2vec_matrix, trainable=False)\n","\n"," print(f\"Entraînement du modèle {model_name} avec embeddings {vectorizer_name}\")\n"," print(f\"Taille du batch: {BATCH_SIZE}\")\n"," print(f\"Utilisation de la précision mixte: {tf.keras.mixed_precision.global_policy().name}\")\n","\n"," # Entraîner le modèle avec les datasets optimisés\n"," history = model.fit(\n"," train_dataset,\n"," epochs=epochs,\n"," validation_data=val_dataset,\n"," callbacks=[early_stopping, reduce_lr, tensorboard_callback, checkpoint_callback],\n"," verbose=1\n"," )\n","\n"," # Déterminer le nombre réel d'époques complétées (en cas d'early stopping)\n"," real_epochs = len(history.history['loss'])\n"," print(f\"Nombre réel d'époques effectuées: {real_epochs}/{epochs}\")\n","\n"," # Sauvegarder tous les artefacts\n"," model_dir = save_model_artifacts(model, model_name, vectorizer_name, history, tokenizer)\n","\n"," # Utiliser evaluate_model pour obtenir les métriques\n"," metrics, cm, report, y_pred, y_pred_proba = evaluate_model(\n"," model,\n"," X_test_pad,\n"," y_test\n"," )\n","\n"," # Afficher les métriques\n"," print(\"\\nMétriques pour le modèle LSTM avec embedding Word2Vec:\")\n"," for key, value in metrics.items():\n"," print(f\"{key}: {value:.4f}\")\n","\n"," print(\"\\nRapport de classification:\")\n"," print(report)\n","\n","\n"," # Enregistrer avec MLflow\n"," params = {\n"," 'model_type': model_name,\n"," 'embedding_type': vectorizer_name,\n"," 'embedding_dim': word2vec_matrix.shape[1],\n"," 'vocab_size': len(tokenizer.word_index) + 1,\n"," 'max_sequence_length': MAX_SEQUENCE_LENGTH,\n"," 'trainable_embedding': False,\n"," 'max_epochs': epochs,\n"," 'real_epochs': real_epochs, # Ajouter le nombre réel d'époques\n"," 'batch_size': BATCH_SIZE,\n"," 'precision_policy': tf.keras.mixed_precision.global_policy().name,\n"," 'gpu_optimization': 'XLA,dynamic_memory,prefetch'\n"," }\n","\n"," # Enregistrer dans MLflow\n"," # run_id = log_model_to_mlflow(model, model_name, vectorizer_name, metrics, cm, report, X_test_pad, y_test, params)\n"," run_id = log_model_to_mlflow(model, model_name, vectorizer_name, metrics, cm, report, X_test_pad, y_test, history, params)\n","\n"," # Visualiser la courbe d'apprentissage\n"," plot_training_history(history, \"LSTM\", \"Word2Vec-Fige\", run_id=run_id)\n","\n"," # Récupérer le lien vers le run MLflow\n"," print(f\"\\nRun MLflow ID: {run_id}\")\n"," print(f\"Accédez à l'interface MLflow pour voir les détails complets.\")\n","\n"," return model, history, metrics, run_id"]},{"cell_type":"code","execution_count":31,"metadata":{"id":"O8S9kFSFNwMx","outputId":"5da637a9-53e0-49ea-f914-bec555d79e36","colab":{"base_uri":"https://localhost:8080/","height":1000},"executionInfo":{"status":"ok","timestamp":1751496603604,"user_tz":-120,"elapsed":254990,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[{"output_type":"stream","name":"stdout","text":["Entraînement du modèle LSTM avec embeddings Word2Vec-Fige\n","Taille du batch: 256\n","Utilisation de la précision mixte: mixed_float16\n","Epoch 1/50\n","\u001b[1m282/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 30ms/step - loss: 0.6039 - precision: 0.6809 - recall: 0.6419\n","Epoch 1: val_precision improved from -inf to 0.74049, saving model to content/advanced-model/LSTM_Word2Vec-Fige/checkpoints/best_model.keras\n","\u001b[1m282/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m29s\u001b[0m 65ms/step - loss: 0.6038 - precision: 0.6810 - recall: 0.6421 - val_loss: 0.5326 - val_precision: 0.7405 - val_recall: 0.7330 - learning_rate: 0.0010\n","Epoch 2/50\n","\u001b[1m282/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 30ms/step - loss: 0.5438 - precision: 0.7252 - recall: 0.7157\n","Epoch 2: val_precision did not improve from 0.74049\n","\u001b[1m282/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m30s\u001b[0m 49ms/step - loss: 0.5437 - precision: 0.7252 - recall: 0.7157 - val_loss: 0.5155 - val_precision: 0.7316 - val_recall: 0.7822 - learning_rate: 0.0010\n","Epoch 3/50\n","\u001b[1m282/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 17ms/step - loss: 0.5235 - precision: 0.7371 - recall: 0.7416\n","Epoch 3: val_precision did not improve from 0.74049\n","\u001b[1m282/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m17s\u001b[0m 36ms/step - loss: 0.5234 - precision: 0.7371 - recall: 0.7416 - val_loss: 0.4993 - val_precision: 0.7291 - val_recall: 0.8305 - learning_rate: 0.0010\n","Epoch 4/50\n","\u001b[1m280/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 16ms/step - loss: 0.5062 - precision: 0.7447 - recall: 0.7610\n","Epoch 4: val_precision improved from 0.74049 to 0.75575, saving model to content/advanced-model/LSTM_Word2Vec-Fige/checkpoints/best_model.keras\n","\u001b[1m282/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 31ms/step - loss: 0.5062 - precision: 0.7448 - recall: 0.7610 - val_loss: 0.4838 - val_precision: 0.7557 - val_recall: 0.7926 - learning_rate: 0.0010\n","Epoch 5/50\n","\u001b[1m281/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 18ms/step - loss: 0.4928 - precision: 0.7565 - recall: 0.7673\n","Epoch 5: val_precision improved from 0.75575 to 0.76400, saving model to content/advanced-model/LSTM_Word2Vec-Fige/checkpoints/best_model.keras\n","\u001b[1m282/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 33ms/step - loss: 0.4928 - precision: 0.7565 - recall: 0.7672 - val_loss: 0.4835 - val_precision: 0.7640 - val_recall: 0.7822 - learning_rate: 0.0010\n","Epoch 6/50\n","\u001b[1m282/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 16ms/step - loss: 0.4841 - precision: 0.7639 - recall: 0.7685\n","Epoch 6: val_precision improved from 0.76400 to 0.77258, saving model to content/advanced-model/LSTM_Word2Vec-Fige/checkpoints/best_model.keras\n","\u001b[1m282/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 36ms/step - loss: 0.4841 - precision: 0.7639 - recall: 0.7685 - val_loss: 0.4771 - val_precision: 0.7726 - val_recall: 0.7849 - learning_rate: 0.0010\n","Epoch 7/50\n","\u001b[1m282/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 16ms/step - loss: 0.4758 - precision: 0.7714 - recall: 0.7749\n","Epoch 7: val_precision improved from 0.77258 to 0.77753, saving model to content/advanced-model/LSTM_Word2Vec-Fige/checkpoints/best_model.keras\n","\u001b[1m282/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 32ms/step - loss: 0.4758 - precision: 0.7714 - recall: 0.7749 - val_loss: 0.4711 - val_precision: 0.7775 - val_recall: 0.7783 - learning_rate: 0.0010\n","Epoch 8/50\n","\u001b[1m282/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 17ms/step - loss: 0.4661 - precision: 0.7749 - recall: 0.7835\n","Epoch 8: val_precision did not improve from 0.77753\n","\u001b[1m282/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 31ms/step - loss: 0.4661 - precision: 0.7749 - recall: 0.7835 - val_loss: 0.4715 - val_precision: 0.7536 - val_recall: 0.8241 - learning_rate: 0.0010\n","Epoch 9/50\n","\u001b[1m281/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 18ms/step - loss: 0.4612 - precision: 0.7780 - recall: 0.7862\n","Epoch 9: val_precision did not improve from 0.77753\n","\u001b[1m282/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 33ms/step - loss: 0.4612 - precision: 0.7780 - recall: 0.7862 - val_loss: 0.4701 - val_precision: 0.7764 - val_recall: 0.8004 - learning_rate: 0.0010\n","Epoch 10/50\n","\u001b[1m281/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 16ms/step - loss: 0.4576 - precision: 0.7797 - recall: 0.7914\n","Epoch 10: val_precision did not improve from 0.77753\n","\u001b[1m282/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 30ms/step - loss: 0.4576 - precision: 0.7797 - recall: 0.7914 - val_loss: 0.4703 - val_precision: 0.7492 - val_recall: 0.8378 - learning_rate: 0.0010\n","Epoch 11/50\n","\u001b[1m282/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 17ms/step - loss: 0.4487 - precision: 0.7854 - recall: 0.7978\n","Epoch 11: val_precision did not improve from 0.77753\n","\u001b[1m282/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 31ms/step - loss: 0.4487 - precision: 0.7854 - recall: 0.7978 - val_loss: 0.4629 - val_precision: 0.7751 - val_recall: 0.8063 - learning_rate: 0.0010\n","Epoch 12/50\n","\u001b[1m280/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 17ms/step - loss: 0.4432 - precision: 0.7877 - recall: 0.7963\n","Epoch 12: val_precision did not improve from 0.77753\n","\u001b[1m282/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 33ms/step - loss: 0.4432 - precision: 0.7877 - recall: 0.7963 - val_loss: 0.4632 - val_precision: 0.7759 - val_recall: 0.8041 - learning_rate: 0.0010\n","Epoch 13/50\n","\u001b[1m281/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 16ms/step - loss: 0.4386 - precision: 0.7883 - recall: 0.8023\n","Epoch 13: val_precision did not improve from 0.77753\n","\u001b[1m282/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 30ms/step - loss: 0.4386 - precision: 0.7883 - recall: 0.8023 - val_loss: 0.4699 - val_precision: 0.7710 - val_recall: 0.8118 - learning_rate: 0.0010\n","Epoch 14/50\n","\u001b[1m280/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 18ms/step - loss: 0.4279 - precision: 0.7914 - recall: 0.8111\n","Epoch 14: val_precision improved from 0.77753 to 0.78057, saving model to content/advanced-model/LSTM_Word2Vec-Fige/checkpoints/best_model.keras\n","\u001b[1m282/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 33ms/step - loss: 0.4279 - precision: 0.7914 - recall: 0.8111 - val_loss: 0.4656 - val_precision: 0.7806 - val_recall: 0.7948 - learning_rate: 2.0000e-04\n","Epoch 15/50\n","\u001b[1m281/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 17ms/step - loss: 0.4225 - precision: 0.8004 - recall: 0.8092\n","Epoch 15: val_precision improved from 0.78057 to 0.78626, saving model to content/advanced-model/LSTM_Word2Vec-Fige/checkpoints/best_model.keras\n","\u001b[1m282/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 35ms/step - loss: 0.4224 - precision: 0.8004 - recall: 0.8092 - val_loss: 0.4677 - val_precision: 0.7863 - val_recall: 0.7911 - learning_rate: 2.0000e-04\n","Epoch 16/50\n","\u001b[1m282/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 16ms/step - loss: 0.4187 - precision: 0.8013 - recall: 0.8079\n","Epoch 16: val_precision did not improve from 0.78626\n","\u001b[1m282/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 32ms/step - loss: 0.4187 - precision: 0.8013 - recall: 0.8079 - val_loss: 0.4653 - val_precision: 0.7822 - val_recall: 0.7980 - learning_rate: 4.0000e-05\n","Nombre réel d'époques effectuées: 16/50\n","Modèle sauvegardé dans content/advanced-model/LSTM_Word2Vec-Fige/final_model_LSTM_Word2Vec-Fige.keras\n","Tokenizer sauvegardé dans content/advanced-model/LSTM_Word2Vec-Fige/tokenizer.pickle\n","Fonction de prétraitement sauvegardée dans content/advanced-model/LSTM_Word2Vec-Fige/preprocess_function.dill\n","Historique d'entraînement sauvegardé dans content/advanced-model/LSTM_Word2Vec-Fige/training_history.pickle\n","Paramètres sauvegardés dans content/advanced-model/LSTM_Word2Vec-Fige/parameters.json\n","\u001b[1m625/625\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 4ms/step\n","\n","Métriques pour le modèle LSTM avec embedding Word2Vec:\n","accuracy: 0.7812\n","precision: 0.7684\n","recall: 0.8051\n","f1: 0.7863\n","roc_auc: 0.8637\n","\n","Rapport de classification:\n"," precision recall f1-score support\n","\n"," Négatif 0.80 0.76 0.78 10000\n"," Positif 0.77 0.81 0.79 10000\n","\n"," accuracy 0.78 20000\n"," macro avg 0.78 0.78 0.78 20000\n","weighted avg 0.78 0.78 0.78 20000\n","\n"]},{"output_type":"stream","name":"stderr","text":["2025/07/02 22:49:27 WARNING mlflow.models.model: `artifact_path` is deprecated. Please use `name` instead.\n"]},{"output_type":"stream","name":"stdout","text":["🏃 View run Modele_Avance_LSTM_Word2Vec-Fige at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1/runs/7d14f957398f44f98ac5993ae7c38400\n","🧪 View experiment at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1\n","🏃 View run Modele_Avance_LSTM_Word2Vec-Fige at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1/runs/7d14f957398f44f98ac5993ae7c38400\n","🧪 View experiment at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1\n","\n","Run MLflow ID: 7d14f957398f44f98ac5993ae7c38400\n","Accédez à l'interface MLflow pour voir les détails complets.\n"]},{"output_type":"display_data","data":{"text/plain":["
"],"image/png":"iVBORw0KGgoAAAANSUhEUgAABKUAAAHqCAYAAADVi/1VAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3Xd4VNXWwOHfmWTSe0hIJQRC6NJ7DR3pICpYKAoKKlds14siqOAnVlQsCIoiIiqKNOm99947JCQQUkgjdfb3xzAjMQkESDJJZr3PkwfmzClrT917zS6aUkohhBBCCCGEEEIIIUQJ0lk6ACGEEEIIIYQQQghhfSQpJYQQQgghhBBCCCFKnCSlhBBCCCGEEEIIIUSJk6SUEEIIIYQQQgghhChxkpQSQgghhBBCCCGEECVOklJCCCGEEEIIIYQQosRJUkoIIYQQQgghhBBClDhJSgkhhBBCCCGEEEKIEidJKSGEEEIIIYQQQghR4iQpJcqMQ4cO4eLiQufOncnMzLR0OEIIIYQQQgghhLgPkpQSZUJiYiL9+vWjVq1aLFiwADs7u3s+1/r169E0jYkTJ97T8T/88AOapvHDDz/ccwxCCGjfvj2aplk6jFJJHhshhBCibLvfNkd5Jo+NuJUkpUSR0TQt15+NjQ0VKlSgQ4cOzJ07957PazAYGDx4MHq9nr///hsXF5cijNq6mRq+69evL9T+u3bt4rHHHiMkJAR7e3vc3NyoWrUqvXr14oMPPiA1NRWAypUr53k93O7P9IU0ceJE87Ynn3yywDg2bNhg3q9y5cr3+SiUXTk5OXh4eKDX60lOTs5zf3R0tPlxmjVrVr7naNeuHZqmsXHjxuIOt1CioqL44osv6N69O5UrV8be3h5vb286d+7Mn3/+mWvf69ev4+zsjKOjIwkJCbc976VLl7CxscHX19eiPS2HDh162/dC+/btLRabEKJ8Mn2+WCNTw7ewn63p6el89NFHNGvWDHd3d+zs7PD396dRo0Y8//zzbNiwAfjnB8q7+TMx3dbpdJw5c6bAWCIiIsz7WvMPoR9//DGapvHf//433/ufeeaZ29YH161bh6ZpdOjQoRijLDylFMuXL+eFF16gfv36eHp64uDgQPXq1XnxxRe5cuVKrv3feOMNNE3jtddeu+O5R44ciaZpfPrpp8UV/h2dP3/+ju+FwrY7hPWwtXQAovyZMGECAFlZWRw/fpyFCxeybt06du/ezSeffHLX5zt58iRNmzZl+vTpVKhQ4b7ja9q0KceOHbvnc/Xr14/mzZvj7+9/37GUJXPmzGHIkCEopejQoQP9+vXD0dGRCxcusHnzZpYsWUL//v0JCwvjxRdfJDExMdfxP/zwAxcuXGDIkCF5Kg7/riza2toyf/58Pv/8czw8PPLEMmPGDGxtbcnOzi7aQpYxNjY2tG/fnoULF7Jx40Z69OiR6/41a9YAxgrw2rVrGTZsWK7709LS2L59O87OzrRo0aLE4r6dL774gilTphAaGkpERAR+fn5cuHCBP//8k9WrVzN27Fjz54i7uzsDBw7kxx9/5KeffmLMmDEFnvf777/HYDAwZMiQ++ppWVT69OlD/fr182w3vTdmz55NWlpayQYlhBBWLCUlhXbt2rF37178/PwYMGAAfn5+pKSkcODAAb799lsSExNp164d9evXN9d3Tc6fP8+PP/5ISEgIQ4cOve21THWY7777jvfeey/P/adOnWL9+vVS1wE6duwIwNq1a/O9f82aNWiaxoULFzhz5gxVq1bNcz9Ap06dijfQQsrIyKB79+7Y2dnRtm1bOnXqRE5ODmvXruWzzz5j3rx5bNq0iWrVqgHw9NNP83//93/Mnj2byZMno9fr8z1vamoq8+bNw97eniFDhpRkkfLl7u7Oiy++mO99lStXxtfX977aY6KcUUIUEUDl95JavXq10jRNaZqmzp07V/KBiQK1a9dOAWrdunW33S81NVW5ubkpGxsbtXr16nz32bJli0pISLiva02YMEEBqm/fvgpQ06ZNy7NPfHy8cnBwUP369VOACgkJuW3s5d1nn32mAPXSSy/luW/YsGHK0dFR9ejRQwUGBua5f8WKFQpQ3bp1K4lQ8zC9Jm71xx9/qPXr1+fZ9+jRo8rNzU0Bavfu3ebtW7ZsUYCqW7dugdfJyclRISEhClAnT54sugLcgyFDhihAzZo1y6JxCCGsR0H1M2uwbt06Bah27drdcd93331XAapLly4qIyMjz/3x8fFqy5Yt930tQAUGBqrGjRsrPz8/lZWVlWef1157TQHmuo41f2cYDAbl7e2tbGxsVGJiYq77Lly4oAA1cOBABahvv/02z/EtWrRQgNq+fXtJhWxmek1MmDDBvC0zM1NNmjRJxcfH59o3JydHPfPMMwpQPXv2zHVf586dFaD++OOPAq81c+ZMBajBgwcXaRnu1rlz56R+Lu6aDN8Txa5jx47UqFEDpRS7du0C/hmmtX79eubOnUuzZs1wcXHJ1YMmLS2N//u//6N+/fo4Ozvj4uJCixYt+OWXXwq81sqVK+nVqxe+vr7Y29sTHBxMnz59WL16tXmfgsYwnz17lpEjRxIWFoajoyNeXl7UrVuXZ599lri4OPN+t5tTas+ePQwYMMB8/ZCQEEaPHk10dHSefU3DeM6fP8/06dOpW7cuDg4OVKxYkZEjR3L9+vVCPsLF7/DhwyQlJVGnTh3zL1b/1rJly3x7Nd2Lbt26ERQUxMyZM/Pc99NPP5Gens6IESPu+rzr1q1j5MiR1KpVCzc3NxwdHalTpw5vv/026enpufZ99tln0TSNhQsX5nuuHTt2oGkaDz30UK7txfW6LcjtfkFcu3YtrVq1omvXrkRFRXHixIk89996DjAOl/3mm29o0qQJLi4uODs706RJE77++msMBkOea5iGRcTExPD0008TGBiIjY1NrvfHvHnzaNSoEY6Ojvj6+vLEE09w+fLlfMvTv39/2rVrl2d7zZo1eeSRRwBydftu2bIltWvX5tChQ+zYsSPfc65cuZILFy7Qvn178y+PAL/88gsRERF4eHjg4OBAzZo1mTRpEhkZGfme5/jx4wwfPtw8rNDX15c2bdrw9ddf57v//ShoTqmMjAwmTpxIlSpVsLe3JzQ0lDfffJOMjIwCh6hkZ2fz1Vdf0bx5c9zc3HBycqJBgwZMmzYt3+dUCGG9MjIyeP/996lbty5OTk64ubnRpk0bfvvtt3z3X7RoER07dsTf3x97e3sCAgJo164dX331Va79ClvHsqStW7cCMGrUqHx71Hp6etKyZcsiu96IESOIiYlhyZIlubZnZWXxww8/0LJlS2rVqnVX57x+/ToffvghHTp0ICgoCDs7O3x8fOjduzfbtm3LtW9UVBQ2NjY0aNCgwPN1794dTdM4fPhwru07duzgoYcews/PDzs7O4KDg3nmmWcK/G6Pj4/njTfeoE6dOjg5OeHu7k69evV4/fXXzVM/FETTNCIiIsjJyckz7MtUjxkzZgze3t556kLJycns2rULd3d3GjdubN5+6tQpnnzySQIDA7GzsyMgIIAnn3ySU6dO5bl+YdosV65c4amnnqJixYo4OjpSv359fvzxx3zLo9freeONN/D09My1XafT8dZbbwHkKefIkSMB40iBgpjuM+0LEBkZyfPPP2+uM3h7e9O7d29ze+zfcnJy+Oabb2jVqhXu7u44OjoSFhbG008/ne9jcz9uN6fUrl276NKlC66urri5udGpUye2bduW67n4t+PHjzN06FCCg4Oxs7OjYsWKDB48OE/dV5ROMnxPlAilFECeRtbHH3/MqlWr6NWrFxEREeZETGJiIh06dGDfvn00bNiQ4cOHYzAYWLFiBYMHD+bIkSNMmjQp17kmTJjAO++8g4uLC3379iU4OJjLly+zdetW5syZc9tuu9HR0TRp0oSkpCQefPBBBgwYQHp6OufOneOnn37i+eefx9vb+7ZlXLJkCQMGDEApxUMPPURISAh79uzh66+/ZuHChWzevJnQ0NA8x7322musWLGCXr160aVLF9atW8eMGTM4ffp0gV2VS5qp7JcvXyY1NRVnZ+divZ6NjQ3Dhw/nnXfeYffu3bkqEjNmzCA0NPSeumFPmTKF48eP07JlS3r06EF6ejpbtmxh4sSJrF+/ntWrV2NjYwPAkCFDmD59OrNnz6ZPnz55zmWqbNzaRb+kX7cAtWvXpmLFihw4cIC4uDjzc3XmzBkuXLjAM888Q0REBGDswl69enXzsaYu7bcmpZ544gnmzp1LcHAwTz/9NJqmsWDBAkaPHs3mzZv5+eef88QQHx9P8+bNcXFxoX///uh0OipWrAjAp59+yksvvYSHhwdPPvkkHh4erFixgpYtW+Lu7n7bsv2bqcu6rW3ur64RI0bw4osvMnPmTJo1a5bnOFNy89ZE5vDhw5k1axZBQUEMGDAADw8Ptm/fzvjx41mzZg2rVq3KdZ2lS5cycOBAMjIy6NatG4MGDSIxMZEDBw7wwQcfMGrUqLsqy71QSjFgwACWLl1KtWrVeP75582NlyNHjuR7TFZWFr169WLFihVUr16dwYMH4+DgwLp163jhhRfYsWMHP/30U7HHLoQo/TIzM+natSsbNmygRo0aPPfcc6SlpTF//nweeeQR9u/fn2uo2bfffsszzzyDn58fvXr1okKFCly9epWDBw8ya9YsRo8eDRRNHaskmGI4efJkiVxv0KBBvPTSS8ycOZO+ffuaty9atIirV68yZcoUTp8+fVfnPHbsGG+88QZt27alR48eeHp6cvHiRRYtWsSyZctYvHgx3bp1AyAwMJBOnTqxcuVKDh06RN26dXOdKzo6mlWrVtGoUSPq1Klj3v79998zcuRI7O3t6d27N8HBwZw6dYqZM2eyePFitm/fTqVKlcz7nzt3joiICC5cuECjRo0YNWoUBoOBkydP8umnn/Lss8/esV7ZoUMH5s+fz5o1a3LVydasWYOzszPNmjWjffv2eerNGzduJDs7m3bt2pnrd7t27aJTp04kJyfTu3dvatWqxfHjx5kzZw4LFy5k9erVNGnSJE8MBbVZrl27RsuWLTl79iytW7emdevWREdH8+yzz9KlS5fCPG1mBdVz+vTpg6+vLytXruTixYu5Hl8w/ni8Y8cOwsPDzT/s7d27ly5duhAfH0/Xrl3p378/165d46+//qJ169YsWLCABx980HyOzMxMevbsyapVqwgODmbw4MG4ublx/vx5FixYQOvWrXP9sFdcNm7cSJcuXcjJyaF///5UrVqVQ4cOERERUeC8YMuXL6d///7mOk9YWBiRkZH8+eefLF26lHXr1tGwYcNij13cB8t21BLlCQV0D1+1apV5+N758+eVUv8M03JyclJ79+7Nc4xpiMuUKVNybb9x44bq2rWr0jRN7du3z7zdNAwpNDRURUZG5jnfpUuXzP/Pryvt559/rgA1derUPMempKSotLQ08+1Zs2bl6UqdnJysvLy8lE6nUxs3bsx1/Pvvv68A1blz53zLGBwcrC5cuGDenpWVpdq0aaMAtWPHjjzxFKXCDt8zGAyqSZMmClD16tVT06ZNU3v37s23e/v9XMv0upgxY4Y6f/680ul0auTIkeb7t23bpgA1adIklZWVddfdg8+cOaMMBkOe7W+++aYC1Lx583JtDw8PV3Z2diouLi7X9vT0dOXp6al8fX1zdbsvztft7QwaNEgB6vfffzdv+/bbbxWgtm3bpgwGg/Lx8VEDBgww35+YmKhsbGyUt7e3+TGZO3euAlSDBg1UcnKyed+UlBTVqFEjBaiff/4517VN7/snnngizxCEc+fOKb1erzw9PXMN3c3JyVH9+/e/qyEl169fVxUrVlSapqmjR4/mus80pNPFxSVX3EopdeXKFaXX65W3t7dKT09XSv3zHu7Xr1+u97ZS/7wGb/0siI2NVW5ubkqv1+c7tLCwz5NS/7xG+vTpoyZMmJDnzzQE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qe50v3WskvLNN9/kqcOZHD9+3DwUqjjqOpMmTWLBggWsWLHCnPy6F5UrV+bUqVO5EgtKKSZOnHjbz/onn3wSnU7H7NmzmT17NkC+PdGef/559Ho9Y8eOzTO3DxiHOt6aHGjUqBEtW7Zk//79TJkyJc/+cXFxpKenF7p8prrO+PHjgdw9wgGqV6+Ov78/c+bM4cSJE4SFheWqe7dq1Yrq1auzefNm5s+fn+vY+fPns2nTJsLDw/Od0yg/er2exx57jOTk5DzzGe3evZuff/453+P2799vrpMtXLiQHj16FOp6kLtX+A8//IBer8/zXPXp04eqVavy5Zdf8vfff+d7nm3btpnrejY2NowePZobN27w7LPP5hnimZmZmavnY3Fp1aoVVatWZd26dXl+CPz222/zfc0NGzYMDw8P3n77bXbu3JnnfoPBcNvkoCgdZE4pUSpNmzaNU6dO8dZbb/HTTz/RunVrKlasyOXLlzl27Bi7du3il19+MU+q3aVLF958800mTZpEzZo16du3L8HBwVy5coXNmzfTvHlzfvjhhwKv99NPPzF9+nRat25N1apV8fT05MyZMyxevBh7e/s7jpN2cXHh+++/Z+DAgbRr146BAwdSqVIl9uzZw8qVK/Hz82P69OlF+AgVrffff7/Ax2fMmDHodDr+85//8Oqrr9KqVSvq1KmDq6srV69eZe3atZw9exZfX18+/vjjYomvS5cu932OXr16ERYWxieffMKhQ4do0KABFy9eZMmSJfTo0YOLFy8WeOyQIUOYOXMm//vf/8y381PSr9tbVaxY0dwDCPKfxNNUeTt06FC++wwePJiFCxfy22+/Ubt2bfr27Yumafz111+cO3eORx55hMcee6xQ8YCxcvz+++/z8ssv06BBAx555BHc3d1ZsWIFiYmJPPDAAxw8eDDXMe+88w4zZ87E0dGR+vXr8/777+c5b/369enbt2++1xw5ciTz5s0zV4rzGwYxfPhw9uzZw1dffUXVqlXp2rUrlSpVIj4+nnPnzrFx40aGDRvGN998A0CFChWYO3cuDz30EBEREXTv3p0HHniApKQkDh48yKVLl0pkCNyTTz7JvHnzWL58OXXq1KF3795kZWXxxx9/0KRJE06cOJEnETl+/HgOHDjAN998w+LFi+nQoQOBgYFcvXqVU6dOsWXLFiZPniyTfwphBW433O2rr77ilVdeYdmyZSxcuJB69erx4IMPkpaWxu+//87Vq1d57bXXcjXW+/Xrh4uLC82bN6dy5coopdi0aRO7du2iUaNG5jkL77eOVRSOHz9eYPkrVarEO++8w/Llyxk1ahSVK1emVatWBAcHk5GRwalTp1ixYgVZWVmMGTOGJk2aFHl8lSpVKpIfLseOHcuzzz5LgwYNGDBgAHq9ni1btnD06FF69erF4sWL8z0uODiYiIgI1qxZg62tLXXr1s13XqsaNWrw/fffM3z4cGrXrk23bt0IDw8nKyuLixcvsmnTJnx8fDh+/Lj5mDlz5tC+fXvGjRvHH3/8Qfv27VFKcerUKVauXMnx48fNPxzeSceOHfnmm284dOgQ3t7eueb2NImIiGDu3Lnm/W+laRo//vgjnTt35pFHHqFPnz7UqFGDEydO8Ndff+Hq6srs2bPvalL29957jzVr1jB16lR2795N69atiY6O5tdff+XBBx9k0aJFufZPSEigY8eOxMfH07FjR7Zt22aerPtWL774Yr7zzlavXp22bduafyQbMGBAnrmW9Ho9f/75J127dqVHjx60bNmS+vXr4+TkxKVLl9i1axdnz54lOjranBSeMGECO3bsYPHixYSHh9OzZ09cXV25dOkSK1eu5MMPPyz2IbM6nY6ZM2fSrVs3evfuzYABA6hatSoHDx5k1apVdO/enWXLluV6fry9vZk/fz79+vWjefPmdOzYkdq1a6NpGpcuXWLbtm13nfwUFnB3i/UJUTAKueSwUv8sr3rrkp7/lpGRob744gvVokUL5ebmpuzs7FRwcLDq0KGD+vTTT9W1a9fyHLN06VLVtWtX5enpqezs7FRQUJDq27evWrNmjXmf/JYg3b59u3r22WfVAw88oDw9PZWDg4OqWrWqGjp0qDp06FCua8yaNavA5Xl37typ+vbtqypUqKD0er0KDg5Wzz77bL7Lq5qWiTUtAX+r/GIsDqZl52/3t2DBApWenq4WLFigRo0apRo0aKB8fX2Vra2tcnNzUw0bNlRvvPGGunr1aqGudbvn3PS6mDFjxh1jz8rKUoAKCQkpdHkvXryoBg8erAICApSDg4OqVauWmjJlivlct1vGOSwsTAHKy8tLZWRkFLhfcb1uC2PMmDHm5+3fr1uTwMBABahatWrle39OTo768ssvVaNGjZSjo6NydHRU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\n"},"metadata":{}}],"source":["# Entraîner le modèle LSTM avec Word2Vec\n","model_lstm_word2vec, history_lstm_word2vec, metrics_lstm_word2vec, run_id_lstm_word2vec = train_word2vec_lstm_model(epochs=50)"]},{"cell_type":"markdown","metadata":{"id":"CD8guTB_NwMx"},"source":["## Chargement du modèle entraîné\n","\n","Dans cette fonction, nous créons un mécanisme pour charger un **modèle complet** avec tous ses composants associés. Nous récupérons l'ensemble des artefacts nécessaires pour faire fonctionner notre modèle d'analyse de sentiment à partir d'un emplacement spécifique.\n","\n","- Nous chargeons d'abord le **modèle Keras entraîné** à partir du fichier .keras sauvegardé\n","- Nous récupérons le **tokenizer** qui convertit le texte brut en séquences numériques\n","- Nous importons la **fonction de prétraitement** qui nettoie les tweets avant l'analyse\n","- Nous lisons les **paramètres du modèle** à partir d'un fichier JSON\n","- Nous retournons tous ces éléments dans un dictionnaire cohérent, prêt à être utilisé pour prédire le sentiment de nouveaux tweets"]},{"cell_type":"code","execution_count":32,"metadata":{"id":"9nXo7O_XNwMx","executionInfo":{"status":"ok","timestamp":1751496603624,"user_tz":-120,"elapsed":1,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["# Fonction pour charger un modèle complet avec tous ses artefacts\n","def load_complete_model(model_name, vectorizer_name):\n"," \"\"\"\n"," Charge un modèle complet avec son tokenizer et sa fonction de prétraitement.\n"," \"\"\"\n"," model_dir = f\"content/advanced-model/{model_name}_{vectorizer_name}\"\n","\n"," # Charger le modèle\n"," model_path = f\"{model_dir}/final_model_{model_name}_{vectorizer_name}.keras\"\n"," model = tf.keras.models.load_model(model_path)\n","\n"," # Charger le tokenizer\n"," tokenizer_path = f\"{model_dir}/tokenizer.pickle\"\n"," with open(tokenizer_path, 'rb') as handle:\n"," tokenizer = pickle.load(handle)\n","\n"," # Charger la fonction de prétraitement\n"," preprocess_path = f\"{model_dir}/preprocess_function.dill\"\n"," with open(preprocess_path, 'rb') as handle:\n"," preprocess_function = dill.load(handle)\n","\n"," # Charger les paramètres\n"," params_path = f\"{model_dir}/parameters.json\"\n"," with open(params_path, 'r') as f:\n"," params = json.load(f)\n","\n"," return {\n"," \"model\": model,\n"," \"tokenizer\": tokenizer,\n"," \"preprocess\": preprocess_function,\n"," \"params\": params\n"," }"]},{"cell_type":"markdown","metadata":{"id":"P7Ge212GNwMx"},"source":["## Prédire avec le modèle entraîné\n","\n","Dans cette fonction, nous mettons en œuvre le cœur de notre système d'analyse de sentiment, permettant de prédire si un tweet exprime un sentiment positif ou négatif. Nous utilisons l'ensemble des composants précédemment chargés pour traiter le texte et générer une prédiction fiable.\n","\n","- **Prétraitement du texte** : Application des transformations de nettoyage sur le tweet brut\n","- **Tokenisation** : Conversion du texte prétraité en séquences numériques\n","- **Padding** : Ajustement des séquences à une longueur uniforme\n","- **Prédiction** : Calcul de la probabilité de sentiment par le modèle LSTM\n","- **Interprétation** : Classification du tweet comme positif ou négatif selon le seuil de 0.5\n","- **Évaluation de confiance** : Détermination du niveau de certitude de la prédiction\n","- **Formatage des résultats** : Présentation des résultats sous forme de dictionnaire structuré"]},{"cell_type":"code","execution_count":33,"metadata":{"id":"LpuAgS8_NwMx","executionInfo":{"status":"ok","timestamp":1751496603626,"user_tz":-120,"elapsed":0,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["# Fonction pour prédire le sentiment avec un modèle chargé\n","def predict_sentiment(text, model_pack):\n"," \"\"\"\n"," Prédit le sentiment d'un texte en utilisant un modèle chargé.\n"," \"\"\"\n"," model = model_pack[\"model\"]\n"," tokenizer = model_pack[\"tokenizer\"]\n"," preprocess = model_pack[\"preprocess\"]\n"," params = model_pack[\"params\"]\n","\n"," # Prétraiter le texte\n"," preprocessed_text = preprocess(text)\n","\n"," # Tokeniser et encoder le texte\n"," tokens = tokenizer.texts_to_sequences([preprocessed_text])\n"," max_length = params.get(\"max_sequence_length\", MAX_SEQUENCE_LENGTH)\n"," padded_tokens = pad_sequences(tokens, maxlen=max_length, padding='post', truncating='post')\n","\n"," # Prédire le sentiment\n"," prediction = model.predict(padded_tokens)[0][0]\n","\n"," # Interpréter la prédiction\n"," sentiment = \"Positif\" if prediction >= 0.5 else \"Négatif\"\n"," confidence = prediction if prediction >= 0.5 else 1 - prediction\n","\n"," return {\n"," 'sentiment': sentiment,\n"," 'confidence': float(confidence),\n"," 'raw_score': float(prediction)\n"," }"]},{"cell_type":"code","execution_count":34,"metadata":{"id":"eWAj3vceNwMx","executionInfo":{"status":"ok","timestamp":1751496603633,"user_tz":-120,"elapsed":1,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["# Liste améliorée de tweets pour tester le modèle\n","test_tweets_improved = [\n"," # Tweets positifs avec différentes caractéristiques\n"," \"I absolutely love flying with @AirParadis! Their service is amazing and their staff is so helpful :) #bestairline #travel\",\n"," \"Just landed after a wonderful flight... The crew was totally awesome and the food was perfect!!! Can't wait to fly with them again :D\",\n"," \"OMG! You really have to try @AirParadis. Best. Flight. Ever. Their new seats are extremely comfortable. http://airparadis.com/newseats #travel #comfort\",\n"," \"We had a very pleasant experience with our flight today. The staff completely exceeded our expectations ;) #happy #AirParadis\",\n"," \"My first time flying business class and I'm absolutely amazed!!! The service is 100% worth it... @AirParadis never disappoints :)\",\n","\n"," # Tweets négatifs avec différentes caractéristiques\n"," \"I hate how @AirParadis always delays their flights... This is the third time this month!!! :( #disappointed #travel\",\n"," \"The worst flight experience of my life? Definitely today with @AirParadis. Their customer service won't even respond to my complaints... #terrible\",\n"," \"Really @AirParadis??? Flight cancelled and no compensation??? That's how you treat your customers? SMH :(\",\n"," \"Our baggage was lost and nobody at @AirParadis seems to care! Don't they understand that we can't enjoy our vacation without our stuff??? http://badservice.com/complaint :-(\",\n"," \"Food was terrible, seats were uncomfortable, and the staff was not helpful at all... Never flying with @AirParadis again! #worstairline\",\n","\n"," # Tweets mixtes et nuancés\n"," \"The flight was good but the food wasn't really what I expected... @AirParadis can do better! #mixedfeelings\",\n"," \"IDK what to think about my @AirParadis experience? The crew was nice but the flight was delayed for 2 hours... #confused\",\n"," \"My husband loved the flight but I didn't... Too bad they can't make everyone happy :-) #AirParadis\",\n"," \"TBH, @AirParadis has improved their service since last year! Not perfect yet, but they're trying... #progress\",\n"," \"We were so excited for our trip but then our flight got delayed... at least the staff was very apologetic and gave us free drinks! @AirParadis\",\n","\n"," # Tweets spécifiquement pour tester les caractéristiques spéciales\n"," \"This is a tweet with many!!! exclamation!!! marks!!! to test how they affect sentiment analysis :)\",\n"," \"How does the model handle multiple??? question??? marks??? in a single tweet? @AirParadis\",\n"," \"Testing ellipses... many... many... ellipses... in... one... tweet... @AirParadis #test\",\n"," \"#many #hashtags #in #one #tweet #to #see #how #they #affect #the #analysis #AirParadis\",\n"," \"@mention1 @mention2 @mention3 @mention4 @mention5 multiple mentions in one tweet\",\n"," \"Multiple URLs in one tweet: http://example1.com http://example2.com http://example3.com @AirParadis\",\n"," \"Let's try all emoticons :) :( :D ;) :-) :-( :-D ;-) in a single tweet to see the impact\"\n","]"]},{"cell_type":"code","execution_count":35,"metadata":{"id":"hRAWxNusNwMy","outputId":"cfe96035-b1a6-4d74-8b7c-1b5584097888","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1751496612031,"user_tz":-120,"elapsed":8397,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[{"output_type":"stream","name":"stdout","text":["\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 2s/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 41ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 40ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 40ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 43ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 42ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 46ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 44ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 45ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 43ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 42ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 41ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 41ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 49ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 42ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 48ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 42ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 43ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 43ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 44ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 46ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 49ms/step\n","\n","Test du modèle sur les exemples:\n","==================================================\n","Résumé: 22 tweets analysés\n","Tweets positifs: 12 (54.5%)\n","Tweets négatifs: 10 (45.5%)\n"]}],"source":["def test_model_on_examples(model_pack, test_tweets):\n"," \"\"\"\n"," Teste le modèle sur une liste de tweets et retourne un DataFrame avec les résultats des prédictions.\n"," \"\"\"\n"," results = {\n"," \"Positif\": 0,\n"," \"Négatif\": 0\n"," }\n","\n"," # Créer un DataFrame pour stocker les résultats\n"," predictions_data = []\n","\n"," for i, tweet in enumerate(test_tweets):\n"," # Utiliser la fonction predict_sentiment avec model_pack\n"," result = predict_sentiment(tweet, model_pack)\n","\n"," # Ajouter l'emoji approprié pour le sentiment\n"," emoji = \"💚\" if result['sentiment'] == \"Positif\" else \"❌\"\n","\n"," # Ajouter les données au DataFrame\n"," predictions_data.append({\n"," \"Tweet\": tweet,\n"," \"Sentiment\": result['sentiment'],\n"," \"Emoji\": emoji,\n"," \"Score de confiance\": result['confidence'],\n"," \"Score brut\": result['raw_score'],\n"," \"Index\": i+1\n"," })\n","\n"," # Comptage des résultats\n"," results[result['sentiment']] += 1\n","\n"," # Créer le DataFrame\n"," df_predictions = pd.DataFrame(predictions_data)\n","\n"," # Afficher un résumé\n"," print(\"\\nTest du modèle sur les exemples:\")\n"," print(\"=\"*50)\n"," print(f\"Résumé: {len(test_tweets)} tweets analysés\")\n"," print(f\"Tweets positifs: {results['Positif']} ({(results['Positif']/len(test_tweets)*100):.1f}%)\")\n"," print(f\"Tweets négatifs: {results['Négatif']} ({(results['Négatif']/len(test_tweets)*100):.1f}%)\")\n","\n"," # Retourner le DataFrame\n"," return df_predictions\n","\n","# Exemple d'utilisation:\n","# Charger le model_pack (qui contient model, tokenizer, preprocess, params)\n","lstm_word2vec_model_pack = load_complete_model(\"LSTM\", \"Word2Vec-Fige\")\n","\n","# Obtenir le DataFrame des prédictions\n","df_results_word2vec = test_model_on_examples(lstm_word2vec_model_pack, test_tweets_improved)\n","\n","# Optionnel: sauvegarder les résultats dans un fichier CSV\n","df_results_word2vec.to_csv(\"content/advanced-model/LSTM_Word2Vec-Fige/predictions_results.csv\", index=False)"]},{"cell_type":"code","execution_count":36,"metadata":{"id":"aCXO6s63NwMy","outputId":"4d46c29d-7c31-4106-8814-e67d898ebf8a","colab":{"base_uri":"https://localhost:8080/","height":1000},"executionInfo":{"status":"ok","timestamp":1751496612076,"user_tz":-120,"elapsed":44,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[{"output_type":"execute_result","data":{"text/plain":[" Tweet Sentiment Emoji \\\n","0 I absolutely love flying with @AirParadis! The... Positif 💚 \n","1 Just landed after a wonderful flight... The cr... Positif 💚 \n","2 OMG! You really have to try @AirParadis. Best.... Positif 💚 \n","3 We had a very pleasant experience with our fli... Positif 💚 \n","4 My first time flying business class and I'm ab... Négatif ❌ \n","5 I hate how @AirParadis always delays their fli... Négatif ❌ \n","6 The worst flight experience of my life? Defini... Négatif ❌ \n","7 Really @AirParadis??? Flight cancelled and no ... Négatif ❌ \n","8 Our baggage was lost and nobody at @AirParadis... Négatif ❌ \n","9 Food was terrible, seats were uncomfortable, a... Négatif ❌ \n","10 The flight was good but the food wasn't really... Positif 💚 \n","11 IDK what to think about my @AirParadis experie... Négatif ❌ \n","12 My husband loved the flight but I didn't... To... Négatif ❌ \n","13 TBH, @AirParadis has improved their service si... Négatif ❌ \n","14 We were so excited for our trip but then our f... Négatif ❌ \n","15 This is a tweet with many!!! exclamation!!! ma... Positif 💚 \n","16 How does the model handle multiple??? question... Positif 💚 \n","17 Testing ellipses... many... many... ellipses..... Positif 💚 \n","18 #many #hashtags #in #one #tweet #to #see #how ... Positif 💚 \n","19 @mention1 @mention2 @mention3 @mention4 @menti... Positif 💚 \n","20 Multiple URLs in one tweet: http://example1.co... Positif 💚 \n","21 Let's try all emoticons :) :( :D ;) :-) :-( :-... Positif 💚 \n","\n"," Score de confiance Score brut Index \n","0 0.996094 0.996094 1 \n","1 0.978027 0.978027 2 \n","2 0.976074 0.976074 3 \n","3 0.964355 0.964355 4 \n","4 0.592285 0.407715 5 \n","5 0.970749 0.029251 6 \n","6 0.948334 0.051666 7 \n","7 0.734863 0.265137 8 \n","8 0.880798 0.119202 9 \n","9 0.881836 0.118164 10 \n","10 0.898438 0.898438 11 \n","11 0.837891 0.162109 12 \n","12 0.682373 0.317627 13 \n","13 0.636963 0.363037 14 \n","14 0.645508 0.354492 15 \n","15 0.502930 0.502930 16 \n","16 0.640625 0.640625 17 \n","17 0.640137 0.640137 18 \n","18 0.625977 0.625977 19 \n","19 0.900391 0.900391 20 \n","20 0.987305 0.987305 21 \n","21 0.829102 0.829102 22 "],"text/html":["\n","
\n","
\n","\n","
\n"," \n","
\n","
\n","
Tweet
\n","
Sentiment
\n","
Emoji
\n","
Score de confiance
\n","
Score brut
\n","
Index
\n","
\n"," \n"," \n","
\n","
0
\n","
I absolutely love flying with @AirParadis! The...
\n","
Positif
\n","
💚
\n","
0.996094
\n","
0.996094
\n","
1
\n","
\n","
\n","
1
\n","
Just landed after a wonderful flight... The cr...
\n","
Positif
\n","
💚
\n","
0.978027
\n","
0.978027
\n","
2
\n","
\n","
\n","
2
\n","
OMG! You really have to try @AirParadis. Best....
\n","
Positif
\n","
💚
\n","
0.976074
\n","
0.976074
\n","
3
\n","
\n","
\n","
3
\n","
We had a very pleasant experience with our fli...
\n","
Positif
\n","
💚
\n","
0.964355
\n","
0.964355
\n","
4
\n","
\n","
\n","
4
\n","
My first time flying business class and I'm ab...
\n","
Négatif
\n","
❌
\n","
0.592285
\n","
0.407715
\n","
5
\n","
\n","
\n","
5
\n","
I hate how @AirParadis always delays their fli...
\n","
Négatif
\n","
❌
\n","
0.970749
\n","
0.029251
\n","
6
\n","
\n","
\n","
6
\n","
The worst flight experience of my life? Defini...
\n","
Négatif
\n","
❌
\n","
0.948334
\n","
0.051666
\n","
7
\n","
\n","
\n","
7
\n","
Really @AirParadis??? Flight cancelled and no ...
\n","
Négatif
\n","
❌
\n","
0.734863
\n","
0.265137
\n","
8
\n","
\n","
\n","
8
\n","
Our baggage was lost and nobody at @AirParadis...
\n","
Négatif
\n","
❌
\n","
0.880798
\n","
0.119202
\n","
9
\n","
\n","
\n","
9
\n","
Food was terrible, seats were uncomfortable, a...
\n","
Négatif
\n","
❌
\n","
0.881836
\n","
0.118164
\n","
10
\n","
\n","
\n","
10
\n","
The flight was good but the food wasn't really...
\n","
Positif
\n","
💚
\n","
0.898438
\n","
0.898438
\n","
11
\n","
\n","
\n","
11
\n","
IDK what to think about my @AirParadis experie...
\n","
Négatif
\n","
❌
\n","
0.837891
\n","
0.162109
\n","
12
\n","
\n","
\n","
12
\n","
My husband loved the flight but I didn't... To...
\n","
Négatif
\n","
❌
\n","
0.682373
\n","
0.317627
\n","
13
\n","
\n","
\n","
13
\n","
TBH, @AirParadis has improved their service si...
\n","
Négatif
\n","
❌
\n","
0.636963
\n","
0.363037
\n","
14
\n","
\n","
\n","
14
\n","
We were so excited for our trip but then our f...
\n","
Négatif
\n","
❌
\n","
0.645508
\n","
0.354492
\n","
15
\n","
\n","
\n","
15
\n","
This is a tweet with many!!! exclamation!!! ma...
\n","
Positif
\n","
💚
\n","
0.502930
\n","
0.502930
\n","
16
\n","
\n","
\n","
16
\n","
How does the model handle multiple??? question...
\n","
Positif
\n","
💚
\n","
0.640625
\n","
0.640625
\n","
17
\n","
\n","
\n","
17
\n","
Testing ellipses... many... many... ellipses.....
\n","
Positif
\n","
💚
\n","
0.640137
\n","
0.640137
\n","
18
\n","
\n","
\n","
18
\n","
#many #hashtags #in #one #tweet #to #see #how ...
\n","
Positif
\n","
💚
\n","
0.625977
\n","
0.625977
\n","
19
\n","
\n","
\n","
19
\n","
@mention1 @mention2 @mention3 @mention4 @menti...
\n","
Positif
\n","
💚
\n","
0.900391
\n","
0.900391
\n","
20
\n","
\n","
\n","
20
\n","
Multiple URLs in one tweet: http://example1.co...
\n","
Positif
\n","
💚
\n","
0.987305
\n","
0.987305
\n","
21
\n","
\n","
\n","
21
\n","
Let's try all emoticons :) :( :D ;) :-) :-( :-...
\n","
Positif
\n","
💚
\n","
0.829102
\n","
0.829102
\n","
22
\n","
\n"," \n","
\n","
\n","
\n","\n","
\n"," \n","\n"," \n","\n"," \n","
\n","\n","\n","
\n"," \n","\n","\n","\n"," \n","
\n","\n","
\n"," \n"," \n"," \n","
\n","\n","
\n","
\n"],"application/vnd.google.colaboratory.intrinsic+json":{"type":"dataframe","variable_name":"df_results_word2vec","summary":"{\n \"name\": \"df_results_word2vec\",\n \"rows\": 22,\n \"fields\": [\n {\n \"column\": \"Tweet\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 22,\n \"samples\": [\n \"I absolutely love flying with @AirParadis! Their service is amazing and their staff is so helpful :) #bestairline #travel\",\n \"TBH, @AirParadis has improved their service since last year! Not perfect yet, but they're trying... #progress\",\n \"Our baggage was lost and nobody at @AirParadis seems to care! Don't they understand that we can't enjoy our vacation without our stuff??? http://badservice.com/complaint :-(\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Sentiment\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 2,\n \"samples\": [\n \"N\\u00e9gatif\",\n \"Positif\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Emoji\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 2,\n \"samples\": [\n \"\\u274c\",\n \"\\ud83d\\udc9a\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Score de confiance\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.1588360225953438,\n \"min\": 0.5029296875,\n \"max\": 0.99609375,\n \"num_unique_values\": 22,\n \"samples\": [\n 0.99609375,\n 0.636962890625\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Score brut\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.3480322076431303,\n \"min\": 0.0292510986328125,\n \"max\": 0.99609375,\n \"num_unique_values\": 22,\n \"samples\": [\n 0.99609375,\n 0.363037109375\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Index\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 6,\n \"min\": 1,\n \"max\": 22,\n \"num_unique_values\": 22,\n \"samples\": [\n 1,\n 14\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}"}},"metadata":{},"execution_count":36}],"source":["df_results_word2vec"]},{"cell_type":"markdown","metadata":{"id":"Yk_yH3-INwMy"},"source":["## Entrainement : LSTM avec GloVe 300d"]},{"cell_type":"markdown","metadata":{"id":"E-yiOEKYNwMy"},"source":["### Chargement et préparation des embeddings pré-entraînés GloVe"]},{"cell_type":"code","source":["import os\n","import requests\n","from tqdm import tqdm\n","from zipfile import ZipFile\n","\n","# Télécharger et préparer les embeddings GloVe\n","def download_glove_embeddings(url=\"https://nlp.stanford.edu/data/glove.6B.zip\",\n"," output_dir=\"content/pretrained-embeddings/glove.6B\"):\n"," \"\"\"\n"," Télécharge et extrait les embeddings GloVe si nécessaire.\n"," Inclut une barre de progression et vérifie si les fichiers existent déjà.\n"," \"\"\"\n"," # Check if directory already exists\n"," if os.path.exists(output_dir) and os.listdir(output_dir):\n"," print(f\"Le dossier {output_dir} existe déjà. Téléchargement ignoré.\")\n"," return\n","\n"," # Create directory if it doesn't exist\n"," os.makedirs(output_dir, exist_ok=True)\n","\n"," # Temporary zip file path\n"," zip_path = \"glove.6B.zip\"\n","\n"," # Download the file with progress bar\n"," print(\"Téléchargement du fichier...\")\n"," # Add verify=False to ignore SSL certificate issues\n"," response = requests.get(url, stream=True, verify=False)\n"," total_size = int(response.headers.get('content-length', 0))\n","\n"," with open(zip_path, 'wb') as f, tqdm(\n"," desc=\"Téléchargement\",\n"," total=total_size,\n"," unit='B',\n"," unit_scale=True,\n"," unit_divisor=1024,\n"," ) as bar:\n"," for data in response.iter_content(chunk_size=1024):\n"," size = f.write(data)\n"," bar.update(size)\n","\n"," # Extract with progress bar\n"," print(\"Extraction des fichiers...\")\n"," with ZipFile(zip_path, 'r') as zip_ref:\n"," for file in tqdm(zip_ref.namelist(), desc=\"Extraction\"):\n"," zip_ref.extract(file, output_dir)\n","\n"," # Remove the zip file\n"," os.remove(zip_path)\n"," print(\"Terminé!\")\n","\n","# Exécuter la fonction\n","download_glove_embeddings()"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"9y9NubYo_DLG","executionInfo":{"status":"ok","timestamp":1751496612097,"user_tz":-120,"elapsed":20,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"c51f3876-4a60-4db7-fe3a-32c35716adbc"},"execution_count":37,"outputs":[{"output_type":"stream","name":"stdout","text":["Le dossier content/pretrained-embeddings/glove.6B existe déjà. Téléchargement ignoré.\n"]}]},{"cell_type":"code","execution_count":38,"metadata":{"id":"vk_8gucuNwMy","executionInfo":{"status":"ok","timestamp":1751496612106,"user_tz":-120,"elapsed":8,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["def load_glove_embeddings(embedding_dim=100):\n"," \"\"\"\n"," Charge les embeddings GloVe pré-entraînés.\n"," \"\"\"\n"," print(f\"Chargement des embeddings GloVe {embedding_dim}d...\")\n"," embeddings_index = {}\n","\n"," with open(f'content/pretrained-embeddings/glove.6B/glove.6B.{embedding_dim}d.txt', encoding='utf-8') as f:\n"," for line in f:\n"," values = line.rstrip().split(' ')\n"," word = values[0]\n"," coefs = np.asarray(values[1:], dtype='float32')\n"," embeddings_index[word] = coefs\n","\n"," print(f\"Trouvé {len(embeddings_index)} vecteurs d'embeddings GloVe.\")\n"," return embeddings_index"]},{"cell_type":"code","execution_count":39,"metadata":{"id":"AegR2uCfNwMy","outputId":"99828bd8-c009-4031-b897-977375ce8dff","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1751496642102,"user_tz":-120,"elapsed":29995,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[{"output_type":"stream","name":"stdout","text":["Chargement des embeddings GloVe 300d...\n","Trouvé 400000 vecteurs d'embeddings GloVe.\n","Création de la matrice d'embedding pour 52691 mots...\n"]},{"output_type":"stream","name":"stderr","text":["Création matrice d'embedding: 100%|██████████| 52691/52691 [00:00<00:00, 416562.19it/s]"]},{"output_type":"stream","name":"stdout","text":["Trouvé 27333 mots (51.87%) dans les embeddings pré-entraînés.\n"]},{"output_type":"stream","name":"stderr","text":["\n"]}],"source":["glove_embeddings_300d = load_glove_embeddings(embedding_dim=300)\n","glove_matrix_300d = create_embedding_matrix(tokenizer.word_index, glove_embeddings_300d, 300)"]},{"cell_type":"code","execution_count":42,"metadata":{"id":"gPwavY_xNwMy","executionInfo":{"status":"ok","timestamp":1751497088732,"user_tz":-120,"elapsed":5,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["def train_glove_lstm_model(epochs=20):\n"," \"\"\"\n"," Entraîne un modèle LSTM avec embeddings GloVe 300d en utilisant les optimisations GPU\n"," et le chargement de données optimisé.\n"," \"\"\"\n"," # Définir le nom du modèle et de la méthode d'embedding\n"," model_name = \"LSTM\"\n"," vectorizer_name = \"GloVe-300d-Fige\"\n","\n"," # Créer les callbacks pour ce modèle\n"," checkpoint_callback = create_model_checkpoint(model_name, vectorizer_name)\n","\n"," # Autres callbacks\n"," early_stopping = tf.keras.callbacks.EarlyStopping(\n"," monitor='val_loss',\n"," patience=5,\n"," restore_best_weights=True\n"," )\n","\n"," reduce_lr = tf.keras.callbacks.ReduceLROnPlateau(\n"," monitor='val_loss',\n"," factor=0.2,\n"," patience=2,\n"," min_lr=0.00001\n"," )\n","\n"," # TensorBoard pour visualiser l'entraînement\n"," tensorboard_dir = f\"content/advanced-model/{model_name}_{vectorizer_name}/logs\"\n"," os.makedirs(tensorboard_dir, exist_ok=True)\n"," tensorboard_callback = tf.keras.callbacks.TensorBoard(\n"," log_dir=tensorboard_dir,\n"," histogram_freq=1,\n"," update_freq='epoch'\n"," )\n","\n"," # Créer le modèle optimisé pour GPU\n"," model = create_optimized_lstm_model(glove_matrix_300d, trainable=False)\n","\n"," print(f\"Entraînement du modèle {model_name} avec embeddings {vectorizer_name}\")\n"," print(f\"Taille du batch: {BATCH_SIZE}\")\n"," print(f\"Utilisation de la précision mixte: {tf.keras.mixed_precision.global_policy().name}\")\n","\n"," # Entraîner le modèle avec les datasets optimisés\n"," history = model.fit(\n"," train_dataset,\n"," epochs=epochs,\n"," validation_data=val_dataset,\n"," callbacks=[early_stopping, reduce_lr, tensorboard_callback, checkpoint_callback],\n"," verbose=1\n"," )\n","\n"," # Déterminer le nombre réel d'époques complétées (en cas d'early stopping)\n"," real_epochs = len(history.history['loss'])\n"," print(f\"Nombre réel d'époques effectuées: {real_epochs}/{epochs}\")\n","\n"," # Sauvegarder tous les artefacts\n"," model_dir = save_model_artifacts(model, model_name, vectorizer_name, history, tokenizer)\n","\n"," # Utiliser evaluate_model pour obtenir les métriques\n"," metrics, cm, report, y_pred, y_pred_proba = evaluate_model(\n"," model,\n"," X_test_pad,\n"," y_test\n"," )\n","\n"," # Afficher les métriques\n"," print(\"\\nMétriques pour le modèle LSTM avec embedding GloVe 300d:\")\n"," for key, value in metrics.items():\n"," print(f\"{key}: {value:.4f}\")\n","\n"," print(\"\\nRapport de classification:\")\n"," print(report)\n","\n"," # Enregistrer avec MLflow\n"," params = {\n"," 'model_type': model_name,\n"," 'embedding_type': vectorizer_name,\n"," 'embedding_dim': 300,\n"," 'vocab_size': len(tokenizer.word_index) + 1,\n"," 'max_sequence_length': MAX_SEQUENCE_LENGTH,\n"," 'trainable_embedding': False,\n"," 'max_epochs': epochs,\n"," 'real_epochs': real_epochs,\n"," 'batch_size': BATCH_SIZE,\n"," 'precision_policy': tf.keras.mixed_precision.global_policy().name,\n"," 'gpu_optimization': 'XLA,dynamic_memory,prefetch'\n"," }\n","\n"," # Enregistrer dans MLflow\n"," run_id = log_model_to_mlflow(model, model_name, vectorizer_name, metrics, cm, report, X_test_pad, y_test, history, params)\n","\n"," # Visualiser la courbe d'apprentissage\n"," plot_training_history(history, \"LSTM\", \"GloVe-300d-Fige\", run_id=run_id)\n","\n"," # Récupérer le lien vers le run MLflow\n"," print(f\"\\nRun MLflow ID: {run_id}\")\n"," print(f\"Accédez à l'interface MLflow pour voir les détails complets.\")\n","\n"," return model, history, metrics, run_id"]},{"cell_type":"code","execution_count":43,"metadata":{"id":"HwGyTzEwNwMy","outputId":"405b8702-0756-4141-d394-f084c2d65123","colab":{"base_uri":"https://localhost:8080/","height":1000},"executionInfo":{"status":"ok","timestamp":1751497320999,"user_tz":-120,"elapsed":231771,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[{"output_type":"stream","name":"stdout","text":["Entraînement du modèle LSTM avec embeddings GloVe-300d-Fige\n","Taille du batch: 256\n","Utilisation de la précision mixte: mixed_float16\n","Epoch 1/50\n","\u001b[1m282/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 20ms/step - loss: 0.6039 - precision: 0.6736 - recall: 0.6449\n","Epoch 1: val_precision improved from -inf to 0.73325, saving model to content/advanced-model/LSTM_GloVe-300d-Fige/checkpoints/best_model.keras\n","\u001b[1m282/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m25s\u001b[0m 54ms/step - loss: 0.6038 - precision: 0.6737 - recall: 0.6450 - val_loss: 0.5302 - val_precision: 0.7333 - val_recall: 0.7406 - learning_rate: 0.0010\n","Epoch 2/50\n","\u001b[1m282/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 32ms/step - loss: 0.5362 - precision: 0.7289 - recall: 0.7212\n","Epoch 2: val_precision improved from 0.73325 to 0.76015, saving model to content/advanced-model/LSTM_GloVe-300d-Fige/checkpoints/best_model.keras\n","\u001b[1m282/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m16s\u001b[0m 53ms/step - loss: 0.5362 - precision: 0.7289 - recall: 0.7213 - val_loss: 0.5044 - val_precision: 0.7602 - val_recall: 0.7416 - learning_rate: 0.0010\n","Epoch 3/50\n","\u001b[1m280/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 21ms/step - loss: 0.5055 - precision: 0.7487 - recall: 0.7561\n","Epoch 3: val_precision improved from 0.76015 to 0.77210, saving model to content/advanced-model/LSTM_GloVe-300d-Fige/checkpoints/best_model.keras\n","\u001b[1m282/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 38ms/step - loss: 0.5055 - precision: 0.7488 - recall: 0.7561 - val_loss: 0.4870 - val_precision: 0.7721 - val_recall: 0.7586 - learning_rate: 0.0010\n","Epoch 4/50\n","\u001b[1m280/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 18ms/step - loss: 0.4890 - precision: 0.7655 - recall: 0.7576\n","Epoch 4: val_precision improved from 0.77210 to 0.77764, saving model to content/advanced-model/LSTM_GloVe-300d-Fige/checkpoints/best_model.keras\n","\u001b[1m282/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 37ms/step - loss: 0.4890 - precision: 0.7656 - recall: 0.7576 - val_loss: 0.4843 - val_precision: 0.7776 - val_recall: 0.7564 - learning_rate: 0.0010\n","Epoch 5/50\n","\u001b[1m281/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 17ms/step - loss: 0.4748 - precision: 0.7740 - recall: 0.7657\n","Epoch 5: val_precision improved from 0.77764 to 0.78753, saving model to content/advanced-model/LSTM_GloVe-300d-Fige/checkpoints/best_model.keras\n","\u001b[1m282/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 40ms/step - loss: 0.4748 - precision: 0.7740 - recall: 0.7657 - val_loss: 0.4748 - val_precision: 0.7875 - val_recall: 0.7552 - learning_rate: 0.0010\n","Epoch 6/50\n","\u001b[1m280/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 16ms/step - loss: 0.4660 - precision: 0.7758 - recall: 0.7770\n","Epoch 6: val_precision did not improve from 0.78753\n","\u001b[1m282/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 31ms/step - loss: 0.4659 - precision: 0.7759 - recall: 0.7770 - val_loss: 0.4724 - val_precision: 0.7488 - val_recall: 0.8317 - learning_rate: 0.0010\n","Epoch 7/50\n","\u001b[1m282/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 21ms/step - loss: 0.4546 - precision: 0.7824 - recall: 0.7864\n","Epoch 7: val_precision improved from 0.78753 to 0.79185, saving model to content/advanced-model/LSTM_GloVe-300d-Fige/checkpoints/best_model.keras\n","\u001b[1m282/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 36ms/step - loss: 0.4546 - precision: 0.7824 - recall: 0.7864 - val_loss: 0.4711 - val_precision: 0.7918 - val_recall: 0.7554 - learning_rate: 0.0010\n","Epoch 8/50\n","\u001b[1m279/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 16ms/step - loss: 0.4490 - precision: 0.7886 - recall: 0.7867\n","Epoch 8: val_precision improved from 0.79185 to 0.80420, saving model to content/advanced-model/LSTM_GloVe-300d-Fige/checkpoints/best_model.keras\n","\u001b[1m282/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m20s\u001b[0m 35ms/step - loss: 0.4489 - precision: 0.7887 - recall: 0.7868 - val_loss: 0.4769 - val_precision: 0.8042 - val_recall: 0.7347 - learning_rate: 0.0010\n","Epoch 9/50\n","\u001b[1m281/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 16ms/step - loss: 0.4408 - precision: 0.7946 - recall: 0.7937\n","Epoch 9: val_precision did not improve from 0.80420\n","\u001b[1m282/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 30ms/step - loss: 0.4408 - precision: 0.7946 - recall: 0.7937 - val_loss: 0.4705 - val_precision: 0.7761 - val_recall: 0.7889 - learning_rate: 0.0010\n","Epoch 10/50\n","\u001b[1m280/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 22ms/step - loss: 0.4307 - precision: 0.7956 - recall: 0.8007\n","Epoch 10: val_precision did not improve from 0.80420\n","\u001b[1m282/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 35ms/step - loss: 0.4307 - precision: 0.7956 - recall: 0.8007 - val_loss: 0.4700 - val_precision: 0.7622 - val_recall: 0.8157 - learning_rate: 0.0010\n","Epoch 11/50\n","\u001b[1m281/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 16ms/step - loss: 0.4223 - precision: 0.7966 - recall: 0.8106\n","Epoch 11: val_precision did not improve from 0.80420\n","\u001b[1m282/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 34ms/step - loss: 0.4222 - precision: 0.7967 - recall: 0.8106 - val_loss: 0.4734 - val_precision: 0.7821 - val_recall: 0.7923 - learning_rate: 0.0010\n","Epoch 12/50\n","\u001b[1m279/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 16ms/step - loss: 0.4134 - precision: 0.8022 - recall: 0.8173\n","Epoch 12: val_precision did not improve from 0.80420\n","\u001b[1m282/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 30ms/step - loss: 0.4134 - precision: 0.8022 - recall: 0.8172 - val_loss: 0.4790 - val_precision: 0.7563 - val_recall: 0.8140 - learning_rate: 0.0010\n","Epoch 13/50\n","\u001b[1m281/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 18ms/step - loss: 0.3982 - precision: 0.8057 - recall: 0.8258\n","Epoch 13: val_precision did not improve from 0.80420\n","\u001b[1m282/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 32ms/step - loss: 0.3981 - precision: 0.8057 - recall: 0.8258 - val_loss: 0.4875 - val_precision: 0.7796 - val_recall: 0.7886 - learning_rate: 2.0000e-04\n","Epoch 14/50\n","\u001b[1m281/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 18ms/step - loss: 0.3917 - precision: 0.8169 - recall: 0.8238\n","Epoch 14: val_precision did not improve from 0.80420\n","\u001b[1m282/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 34ms/step - loss: 0.3917 - precision: 0.8169 - recall: 0.8239 - val_loss: 0.4936 - val_precision: 0.7931 - val_recall: 0.7601 - learning_rate: 2.0000e-04\n","Epoch 15/50\n","\u001b[1m282/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 16ms/step - loss: 0.3849 - precision: 0.8224 - recall: 0.8233\n","Epoch 15: val_precision did not improve from 0.80420\n","\u001b[1m282/282\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 30ms/step - loss: 0.3849 - precision: 0.8224 - recall: 0.8234 - val_loss: 0.4894 - val_precision: 0.7853 - val_recall: 0.7783 - learning_rate: 4.0000e-05\n","Nombre réel d'époques effectuées: 15/50\n","Modèle sauvegardé dans content/advanced-model/LSTM_GloVe-300d-Fige/final_model_LSTM_GloVe-300d-Fige.keras\n","Tokenizer sauvegardé dans content/advanced-model/LSTM_GloVe-300d-Fige/tokenizer.pickle\n","Fonction de prétraitement sauvegardée dans content/advanced-model/LSTM_GloVe-300d-Fige/preprocess_function.dill\n","Historique d'entraînement sauvegardé dans content/advanced-model/LSTM_GloVe-300d-Fige/training_history.pickle\n","Paramètres sauvegardés dans content/advanced-model/LSTM_GloVe-300d-Fige/parameters.json\n","\u001b[1m625/625\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 4ms/step\n","\n","Métriques pour le modèle LSTM avec embedding GloVe 300d:\n","accuracy: 0.7802\n","precision: 0.7587\n","recall: 0.8217\n","f1: 0.7890\n","roc_auc: 0.8659\n","\n","Rapport de classification:\n"," precision recall f1-score support\n","\n"," Négatif 0.81 0.74 0.77 10000\n"," Positif 0.76 0.82 0.79 10000\n","\n"," accuracy 0.78 20000\n"," macro avg 0.78 0.78 0.78 20000\n","weighted avg 0.78 0.78 0.78 20000\n","\n"]},{"output_type":"stream","name":"stderr","text":["2025/07/02 23:01:25 WARNING mlflow.models.model: `artifact_path` is deprecated. Please use `name` instead.\n"]},{"output_type":"stream","name":"stdout","text":["🏃 View run Modele_Avance_LSTM_GloVe-300d-Fige at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1/runs/c083c50737c4460db033ac2872ac6d6a\n","🧪 View experiment at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1\n","🏃 View run Modele_Avance_LSTM_GloVe-300d-Fige at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1/runs/c083c50737c4460db033ac2872ac6d6a\n","🧪 View experiment at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1\n","\n","Run MLflow ID: c083c50737c4460db033ac2872ac6d6a\n","Accédez à l'interface MLflow pour voir les détails complets.\n"]},{"output_type":"display_data","data":{"text/plain":["
"],"image/png":"iVBORw0KGgoAAAANSUhEUgAABKUAAAHqCAYAAADVi/1VAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3Xd8U1X/wPHPTZN0DwotbSmUDvYeArL3UFBQUMHBUFBEERyoCIIIPuqjuHlEUHCAMvyBspcM2XuUvUcHtJRSukfO74/YQGwLLbRJx/f9evUFuffce05ObpJzvzlDU0ophBBCCCGEEEIIIYSwIZ29CyCEEEIIIYQQQgghyh4JSgkhhBBCCCGEEEIIm5OglBBCCCGEEEIIIYSwOQlKCSGEEEIIIYQQQgibk6CUEEIIIYQQQgghhLA5CUoJIYQQQgghhBBCCJuToJQQQgghhBBCCCGEsDkJSgkhhBBCCCGEEEIIm5OglBBCCCGEEEIIIYSwOQlKCbs7dOgQbm5udOnShfT0dHsXRwghhBBCCCGEEDYgQSlhV/Hx8fTp04fatWuzaNEijEbjXZ9rw4YNaJrGxIkT7+r42bNno2kas2fPvusyCFFcyPVsP+fOnUPTNAYNGlTo55bXVQghhMipatWqVK1a1d7FKJMGDRqEpmmcO3eu0M8tr2vZIEEpcUeapln9OTg4UKFCBTp27MjcuXPv+rwmk4kBAwZgMBhYvnw5bm5uhVjqsq19+/ZomsaGDRvylX7Xrl08+eSTBAUF4ejoiIeHB6GhofTq1YuPP/6YpKQkwPzF8O/r4XZ/2QHCiRMnWrY988wzeZZj48aNlnTyBXRTXFwcH374Ie3bt8fX1xej0Yi7uzt16tRh8ODBLFmyBKVUoeZ54sQJNE2jUqVKZGVl3Tbt1q1b0TSNBg0aFGoZAH744Qd69+5NWFgYHh4euLq6UqtWLYYOHcrx48fzPO7SpUsMGTKEgIAAHB0dqVq1KqNGjeLatWt5HnPkyBEee+wxfH19cXJyokaNGkyYMIGUlJRCf17/lh1Uv91fUTT2hBClQ/bnRFmU/fnZvn37fKVPTU3lk08+oXnz5nh6emI0GvH396dJkya89NJLbNy4Ebj5I0BB/rJlP9bpdJw+fTrPsnTo0MGSVn5suGn9+vUMHDiQ6tWr4+7ujtFoxM/Pj06dOvHhhx9y6dKlQs/zySefRNM0pk2bdse0Xbt2RdM0Fi1aVKhluHjxIi+++CLNmzfHz88PR0dHAgICaNOmDbNmzSIjIyPPY3/88UeaNWuGm5sbnp6etG/fnqVLl+aZPisri88++4z69evj7OyMt7c3DzzwAFu3bi3U55SX7HuVvP6K4oc9UXzp7V0AUXJMmDABgIyMDI4dO8Yff/zB+vXr2b17N1OnTi3w+U6cOEGzZs2YPn06FSpUuOfyNWvWjKNHj971ufr06UOLFi3w9/e/57KUJL/88gsDBw5EKUXHjh3p06cPzs7OnD9/ns2bN7N06VIeeeQRwsLCGDVqFPHx8VbHz549m/PnzzNw4MAcgaR/NxD1ej0LFy7kyy+/xMvLK0dZZsyYgV6vJzMzs3CfZAn2559/MnDgQOLj46latSoPPPAA/v7+pKenc/r0aRYvXszs2bPp27cvCxYsKLR8q1evTrt27di4cSPLli3joYceyjPtjBkzABg2bFih5Z/tl19+ISoqytJA0+l0HD58mFmzZvHTTz+xePFievToYXXM6dOnadmyJVeuXOHhhx+mZs2a7Ny5ky+++IKVK1eyZcsWypcvb3XMjh076NixIxkZGfTt25fKlSvz119/MWnSJNatW8e6detwdHQs9Of3b0FBQXk2xLy8vMrs55QQQhSGxMRE2rVrx969e/Hz8+PRRx/Fz8+PxMREDhw4wHfffUd8fDzt2rWjYcOGlrZvtnPnzvHjjz/e9rM6W3Z75vvvv+eDDz7Isf/kyZNs2LBB2j23SEhIYODAgSxevBiDwUDbtm154IEHcHV1JSYmhp07d/L2228zYcIEtm/fTqNGjQot76FDhzJ37lxmzpzJiy++mGe6c+fOsXbtWvz9/enVq1eh5Q/m9sucOXNo3rw5vXv3xtvbm6tXr7JixQqGDBnCzz//zOrVq9HrrW/hX3/9dT799FMCAwMZOnQo6enp/Pbbb/Tq1YuvvvqKl156ySq9UoonnniChQsXUqNGDV566SXi4uKYN28ebdu25ffff+fhhx8u1OeWl9zuHwAaNmwIwLp162xSDmFnSog7AFRul8ratWuVpmlK0zR19uxZ2xdM5Kldu3YKUOvXr79tuqSkJOXh4aEcHBzU2rVrc02zZcsWde3atXvKa8KECQpQvXv3VoD6+uuvc6SJi4tTTk5Oqk+fPgpQQUFBty17WbB27Vql1+uVk5OTmjlzpsrKysqRJiUlRc2YMUP169fPavusWbMUoGbNmnXX+c+ZM0cBqlevXnmmuX79unJ1dVUuLi4qPj7+rvPKS0pKSq7bV69erQBVq1atHPu6du2qAPXll19abR89erQC1PPPP2+1PTMzU9WqVUsB6o8//rBsz8rKUo8++qgC1H/+8598l/ns2bMKUAMHDsz3MevXr1eAateuXb6PEUKIbHm11cqCgnx+vv/++wpQXbt2VWlpaTn2x8XFqS1bttxzXoCqVKmSatq0qfLz81MZGRk50owZM0YBlnbPvXxflwaZmZmqc+fOlvq9cOFCrukOHz6sHn30UbVhwwar7UFBQffcdqxevboC1J49e/JMM27cOAWosWPH3lNeuUlLS8u1rZeenq7at2+vADVv3jyrfVu2bFGACg0NVXFxcZbtZ8+eVd7e3srR0THHfdrcuXMVoFq2bGnVztq5c6cyGo3Kx8dHJSQk5LvcAwcOVECB7gfze68iygYZvifuWqdOnahZsyZKKXbt2gXcHKa1YcMG5s6dS/PmzXFzc7OKgCcnJ/Of//yHhg0b4urqipubG/fffz+//vprnnmtXr2aXr164evri6OjI5UrV+bhhx9m7dq1ljR5zSl15swZhg0bRlhYmKV7ar169XjhhRe4evWqJd3t5mrZs2cPjz76qCX/oKAgXnzxRaKionKkvXVc9fTp06lXrx5OTk5UrFiRYcOGcf369XzWcNELDw8nISGBunXr0qlTp1zTtGzZMtdeTXeje/fuBAYGMnPmzBz7fv75Z1JTUxk6dGiBz7t+/XqGDRtG7dq18fDwwNnZmbp16/Lee++RmppqlfaFF15A0zT++OOPXM+1Y8cONE2jb9++VtuL6rrNS1ZWFsOHDyczM5Mvv/ySZ599Fp0u50e2k5MTzz33XIGG0ub3en700UcpX748y5cvJzIyMtdzzZ07l6SkJB577DE8PT0ByMzMZNq0abRo0QIPDw9cXFxo1KgRX3/9NSaTKd/lzH5+uenSpQteXl6cOnXKavvp06dZvXo1VatWZcSIEVb73nvvPVxdXfn5558tQ1LBPGz06NGjtG3b1qpHmE6n4+OPPwbg22+/zTFE8saNG7z66qsEBgbi5OREzZo1mTp1aoGfY0Hc7nNq1apVtGrVCldXV7y9venduzfHjh277VwP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APj0009JTk6+6/Nku5frvWLFijz00EPExsayePFiZs6cCZAjmGjL79Lc2jxw+zbMihUrrNIAODk50bJlS5KTk3Mtd27HZNdRbu3q69ev59rOKCoeHh6EhIQQERGR64/1ub0H7qYtL2xLglLCZnx9fXnyySfZvXs377//fq5D2E6fPm3Vi+Lll18G4LXXXsv1F5g7/SqzZ8+eXLunZkfRXVxcbnt879698fb25tdff7XqjQHmbuZnz56lc+fOOeaTKinOnj3Ll19+mWsdKaWYMmUKAG3bti30vENDQ1m5ciWLFi3KV7f+vGR3A/53IODMmTO8+eabeR6XPcdCREQEn332GQcOHOCBBx7A19fXKp09rlswd9n+9ttv0ev1vPzyy8yaNSvXxl5GRka+G2/3cj3XrVuXFi1acOTIEUuj7N9DLrPLGhUVxciRI3PtKRYVFcWRI0fyVd6rV69y5syZXPctXbqURYsW4ebmZtWbJzQ0lK5du3Lu3Dm++eYbq2MmTJhAUlISTz/9NK6urpbt7dq1o1atWmzatIk///zTst1kMlmuoRdeeMGqB+jgwYMt+299XbLfU7b08MMP4+npyZw5czhw4IDVvsmTJ+c6vPill17CYDAwevToXHuIpaenS+NNiFJoyJAhKKV44403rL7PYmNjef/99y1psq1fvz7XAM2VK1eAm+2oe21v2cq3336b4/sv27Fjx1iwYAFQNO2eyZMns2jRIlatWmUJft2NqlWrcvLkSavh/UopJk6ceNvv12eeeQadTsdPP/1k6fWcW0+0gn4/NGnShJYtW7J//34++uijHOmvXr1KamrqHZ/XU089RadOnTh+/Di9evXi0qVLuabL7TstLwW93m+V3cb59NNPWbRoERUqVKBPnz5WaQYPHoyXlxfvvfceO3fuzHEOk8lUoB+q9u7dm2s7MzExkVdeeQWABx980GrfCy+8AMCUKVOs5qzNbgc5OjoyePBgq2OGDx8OwLhx46xem127djFv3jx8fHx49NFHLdsffvhhypUrx9y5c9m9e7fVuSZOnJjnUMCi8swzz2AymXj77betPp8uXrzI559/niP93bTlhW3JnFLCpr7++mtOnjzJu+++y88//0zr1q2pWLEikZGRHD16lF27dvHrr79aJtXu2rUr48aNY/LkydSqVYvevXtTuXJlLl++zObNm2nR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MyQkRP7+Teev9ot9P3y/efT391d4eLhiY2O9XSpsRD9loaey0FNZ6KkszbWnop+y0E/V8OWeyjCb85jYB6xatUpvv/22nE6nEhISNHnyZHXu3Nnusrxm3LhxdW6/7777ml0z+X1z585VQkKC7r33XrtL8apt27Zp8eLFOn78uKKiojRq1CjddNNNdpflVWfPntWbb76pLVu2qKSkRJGRkRo4cKDuvPPOJvcX5Pd99tln+sMf/lBr+4033qgZM2bINE1lZmbqgw8+UFlZmbp27aqpU6c2uSHED+Vw1113aebMmXW+7uGHH1aPHj0aujyvudj3w/fNmDFDI0eO1KhRo7xRHnxIc++nJHqqH0JPRU/V3Hoq+ikL/VQNX+6pGEoBAAAAAADA65rHTdUAAAAAAADwKQylAAAAAAAA4HUMpQAAAAAAAOB1DKUAAAAAAADgdQylAAAAAAAA4HUMpQAAAAAAAOB1DKUAAAAAAADgdQylAAAAAAAA4HUMpQCggaxfv17jxo3TgQMH7C4FAACg0aKnApouf7sLAICfYv369frLX/5ywecfe+wxdenSxYsVAQAAND70VADswFAKQJMwbtw4RUVF1doeHR1tQzUAAACNEz0VAG9iKAWgSejdu7c6depkdxkAAACNGj0VAG9iKAWgySsqKtLMmTM1ceJEORwOZWVlqaSkRElJSZo6dao6dOjgsX9ubq4yMzN18OBB+fn5qXv37powYYLi4uI89jt58qTefPNN7dixQ6dPn1ZERISSk5M1efJk+fvX/HitrKzUa6+9po8++kjnzp1Tr169NH36dIWFhXnl/AEAAOoDPRWA+sZC5wCahLKyMpWWlnr8On36tMc+H330kVauXKlbbrlFY8aM0ZEjR/TII4/I6XS699m1a5cyMjJUUlKiu+66S6mpqdq/f7/mzJmjoqIi934nT57U7373O2VnZ6t///6aPHmyBg8erD179qiiosLj677yyiv64osvdNddd+lnP/uZtm3bpoULFzZoHgAAAD8GPRUAb+JKKQBNwqOPPlprW0BAgN544w334+PHj+uZZ55RZGSkJCk5OVnp6elasWKFJk2aJEl6/fXXFRISooyMDIWEhEiSUlJSNGvWLGVmZmrmzJmSpMWLF8vpdOrxxx/3uMR9/PjxMk3To46QkBDNnj1bhmFIkkzT1MqVK1VWVqbg4OB6TAEAAOCnoacC4E0MpQA0CVOnTlVMTIzHNofD82LQlJQUd/MkSUlJSercubNycnI0adIknTp1SocOHdJtt93mbp4kKT4+Xr169VJOTo4kyeVyaevWrerTp0+day5UN0rVbrrpJo9t3bp103vvvafi4mLFx8f/+JMGAACoZ/RUALyJoRSAJiEpKemii3J+v8Gq3rZp0yZJUnFxsSQpNja21n7t27fXzp07VV5ervLycp09e7bWugkX0qZNG4/HrVq1kiSdOXPmkl4PAADgLfRUALyJNaUAoIF9/93Fat+/JB0AAAAXRk8FND1cKQWg2Th27Fid29q2bStJ7v8WFhbW2q+wsFChoaFq2bKlAgMDFRQUpMOHDzdswQAAAD6IngpAfeFKKQDNxtatW3Xy5En34/z8fH3++edKTk6WJEVERCghIUEffvihx2Xghw8f1s6dO9W7d29J1rt0KSkp2rZtmw4cOFDr6/BuHQAAaMroqQDUF66UAtAk5OTk6OjRo7W2X3XVVe4FMaOjozVnzhzdfPPNqqysVFZWlkJDQzV69Gj3/hMnTtQTTzyh2bNna+jQoTp37pxWrVql4OBgjRs3zr3fhAkTtGvXLs2dO1fDhw9XXFycTp06pc2bN+uRRx5xr3EAAADQmNBTAfAmhlIAmoTMzMw6t993333q3r27JGnw4MFyOBx67733VFpaqqSkJE2ZMkURERHu/Xv16qX09HRlZmYqMzNTfn5+6t69u+655x5FRUW594uMjNTjjz+uJUuWaMOGDTp79qwiIyOVnJysFi1aNOzJAgAANBB6KgDeZJhcEwmgiSsqKtLMmTM1ceJE3XbbbXaXAwAA0CjRUwGob6wpBQAAAAAAAK9jKAUAAAAAAACvYygFAAAAAAAAr2NNKQAAAAAAAHgdV0oBAAAAAADA6xhKAQAAAAAAwOsYSgEAAAAAAMDrGEoBAAAAAADA6xhKAQAAAAAAwOsYSgEAAAAAAMDrGEoBAAAAAADA6xhKAQAAAAAAwOsYSgEAAAAAAMDr/j9UjuY0Nka2oAAAAABJRU5ErkJggg==\n"},"metadata":{}}],"source":["# Entraîner le modèle LSTM avec GloVe 300d\n","model_lstm_glove, history_lstm_glove, metrics_lstm_glove, run_id_lstm_glove = train_glove_lstm_model(epochs=50)"]},{"cell_type":"code","execution_count":44,"metadata":{"id":"Qq5sL0HcNwMy","executionInfo":{"status":"ok","timestamp":1751497831831,"user_tz":-120,"elapsed":1232,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["# Charger le modèle pour la prédiction\n","lstm_glove_model_pack = load_complete_model(\"LSTM\", \"GloVe-300d-Fige\")"]},{"cell_type":"code","execution_count":45,"metadata":{"id":"Kc95Dyz8NwMy","outputId":"8bd1a867-c503-4def-8a45-5d17eb174816","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1751497838150,"user_tz":-120,"elapsed":6318,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[{"output_type":"stream","name":"stdout","text":["\n","Test de prédiction avec le modèle GloVe:\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 6s/step\n","{'sentiment': 'Positif', 'confidence': 0.95947265625, 'raw_score': 0.95947265625}\n"]}],"source":["# Tester le modèle sur quelques exemples\n","print(\"\\nTest de prédiction avec le modèle GloVe:\")\n","result = predict_sentiment(\"I love flying with this airline, the service is amazing!\", lstm_glove_model_pack)\n","print(result)"]},{"cell_type":"code","execution_count":46,"metadata":{"id":"gAhcxPUoNwMy","outputId":"a8de9892-563e-4f72-da62-6aa85294d640","colab":{"base_uri":"https://localhost:8080/","height":1000},"executionInfo":{"status":"ok","timestamp":1751497841460,"user_tz":-120,"elapsed":3289,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[{"output_type":"stream","name":"stdout","text":["\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 59ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 48ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 49ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 31ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 30ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 31ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 31ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 30ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 30ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 30ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 31ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 33ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 55ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 111ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 85ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 102ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 55ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 65ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 62ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 47ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 107ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 51ms/step\n","\n","Test du modèle sur les exemples:\n","==================================================\n","Résumé: 22 tweets analysés\n","Tweets positifs: 15 (68.2%)\n","Tweets négatifs: 7 (31.8%)\n","\n","Aperçu des prédictions GloVe :\n"]},{"output_type":"execute_result","data":{"text/plain":[" Tweet Sentiment Emoji \\\n","0 I absolutely love flying with @AirParadis! The... Positif 💚 \n","1 Just landed after a wonderful flight... The cr... Positif 💚 \n","2 OMG! You really have to try @AirParadis. Best.... Positif 💚 \n","3 We had a very pleasant experience with our fli... Positif 💚 \n","4 My first time flying business class and I'm ab... Positif 💚 \n","5 I hate how @AirParadis always delays their fli... Négatif ❌ \n","6 The worst flight experience of my life? Defini... Négatif ❌ \n","7 Really @AirParadis??? Flight cancelled and no ... Négatif ❌ \n","8 Our baggage was lost and nobody at @AirParadis... Négatif ❌ \n","9 Food was terrible, seats were uncomfortable, a... Négatif ❌ \n","10 The flight was good but the food wasn't really... Positif 💚 \n","11 IDK what to think about my @AirParadis experie... Négatif ❌ \n","12 My husband loved the flight but I didn't... To... Négatif ❌ \n","13 TBH, @AirParadis has improved their service si... Positif 💚 \n","14 We were so excited for our trip but then our f... Positif 💚 \n","15 This is a tweet with many!!! exclamation!!! ma... Positif 💚 \n","16 How does the model handle multiple??? question... Positif 💚 \n","17 Testing ellipses... many... many... ellipses..... Positif 💚 \n","18 #many #hashtags #in #one #tweet #to #see #how ... Positif 💚 \n","19 @mention1 @mention2 @mention3 @mention4 @menti... Positif 💚 \n","20 Multiple URLs in one tweet: http://example1.co... Positif 💚 \n","21 Let's try all emoticons :) :( :D ;) :-) :-( :-... Positif 💚 \n","\n"," Score de confiance Score brut Index \n","0 0.985352 0.985352 1 \n","1 0.935059 0.935059 2 \n","2 0.981934 0.981934 3 \n","3 0.885742 0.885742 4 \n","4 0.661621 0.661621 5 \n","5 0.964661 0.035339 6 \n","6 0.971725 0.028275 7 \n","7 0.816528 0.183472 8 \n","8 0.804565 0.195435 9 \n","9 0.836792 0.163208 10 \n","10 0.667480 0.667480 11 \n","11 0.845459 0.154541 12 \n","12 0.519775 0.480225 13 \n","13 0.696289 0.696289 14 \n","14 0.532715 0.532715 15 \n","15 0.791504 0.791504 16 \n","16 0.706543 0.706543 17 \n","17 0.849609 0.849609 18 \n","18 0.768066 0.768066 19 \n","19 0.931641 0.931641 20 \n","20 0.962402 0.962402 21 \n","21 0.916504 0.916504 22 "],"text/html":["\n","
\n","
\n","\n","
\n"," \n","
\n","
\n","
Tweet
\n","
Sentiment
\n","
Emoji
\n","
Score de confiance
\n","
Score brut
\n","
Index
\n","
\n"," \n"," \n","
\n","
0
\n","
I absolutely love flying with @AirParadis! The...
\n","
Positif
\n","
💚
\n","
0.985352
\n","
0.985352
\n","
1
\n","
\n","
\n","
1
\n","
Just landed after a wonderful flight... The cr...
\n","
Positif
\n","
💚
\n","
0.935059
\n","
0.935059
\n","
2
\n","
\n","
\n","
2
\n","
OMG! You really have to try @AirParadis. Best....
\n","
Positif
\n","
💚
\n","
0.981934
\n","
0.981934
\n","
3
\n","
\n","
\n","
3
\n","
We had a very pleasant experience with our fli...
\n","
Positif
\n","
💚
\n","
0.885742
\n","
0.885742
\n","
4
\n","
\n","
\n","
4
\n","
My first time flying business class and I'm ab...
\n","
Positif
\n","
💚
\n","
0.661621
\n","
0.661621
\n","
5
\n","
\n","
\n","
5
\n","
I hate how @AirParadis always delays their fli...
\n","
Négatif
\n","
❌
\n","
0.964661
\n","
0.035339
\n","
6
\n","
\n","
\n","
6
\n","
The worst flight experience of my life? Defini...
\n","
Négatif
\n","
❌
\n","
0.971725
\n","
0.028275
\n","
7
\n","
\n","
\n","
7
\n","
Really @AirParadis??? Flight cancelled and no ...
\n","
Négatif
\n","
❌
\n","
0.816528
\n","
0.183472
\n","
8
\n","
\n","
\n","
8
\n","
Our baggage was lost and nobody at @AirParadis...
\n","
Négatif
\n","
❌
\n","
0.804565
\n","
0.195435
\n","
9
\n","
\n","
\n","
9
\n","
Food was terrible, seats were uncomfortable, a...
\n","
Négatif
\n","
❌
\n","
0.836792
\n","
0.163208
\n","
10
\n","
\n","
\n","
10
\n","
The flight was good but the food wasn't really...
\n","
Positif
\n","
💚
\n","
0.667480
\n","
0.667480
\n","
11
\n","
\n","
\n","
11
\n","
IDK what to think about my @AirParadis experie...
\n","
Négatif
\n","
❌
\n","
0.845459
\n","
0.154541
\n","
12
\n","
\n","
\n","
12
\n","
My husband loved the flight but I didn't... To...
\n","
Négatif
\n","
❌
\n","
0.519775
\n","
0.480225
\n","
13
\n","
\n","
\n","
13
\n","
TBH, @AirParadis has improved their service si...
\n","
Positif
\n","
💚
\n","
0.696289
\n","
0.696289
\n","
14
\n","
\n","
\n","
14
\n","
We were so excited for our trip but then our f...
\n","
Positif
\n","
💚
\n","
0.532715
\n","
0.532715
\n","
15
\n","
\n","
\n","
15
\n","
This is a tweet with many!!! exclamation!!! ma...
\n","
Positif
\n","
💚
\n","
0.791504
\n","
0.791504
\n","
16
\n","
\n","
\n","
16
\n","
How does the model handle multiple??? question...
\n","
Positif
\n","
💚
\n","
0.706543
\n","
0.706543
\n","
17
\n","
\n","
\n","
17
\n","
Testing ellipses... many... many... ellipses.....
\n","
Positif
\n","
💚
\n","
0.849609
\n","
0.849609
\n","
18
\n","
\n","
\n","
18
\n","
#many #hashtags #in #one #tweet #to #see #how ...
\n","
Positif
\n","
💚
\n","
0.768066
\n","
0.768066
\n","
19
\n","
\n","
\n","
19
\n","
@mention1 @mention2 @mention3 @mention4 @menti...
\n","
Positif
\n","
💚
\n","
0.931641
\n","
0.931641
\n","
20
\n","
\n","
\n","
20
\n","
Multiple URLs in one tweet: http://example1.co...
\n","
Positif
\n","
💚
\n","
0.962402
\n","
0.962402
\n","
21
\n","
\n","
\n","
21
\n","
Let's try all emoticons :) :( :D ;) :-) :-( :-...
\n","
Positif
\n","
💚
\n","
0.916504
\n","
0.916504
\n","
22
\n","
\n"," \n","
\n","
\n","
\n","\n","
\n"," \n","\n"," \n","\n"," \n","
\n","\n","\n","
\n"," \n","\n","\n","\n"," \n","
\n","\n","
\n"," \n"," \n"," \n","
\n","\n","
\n","
\n"],"application/vnd.google.colaboratory.intrinsic+json":{"type":"dataframe","variable_name":"df_results_glove","summary":"{\n \"name\": \"df_results_glove\",\n \"rows\": 22,\n \"fields\": [\n {\n \"column\": \"Tweet\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 22,\n \"samples\": [\n \"I absolutely love flying with @AirParadis! Their service is amazing and their staff is so helpful :) #bestairline #travel\",\n \"TBH, @AirParadis has improved their service since last year! Not perfect yet, but they're trying... #progress\",\n \"Our baggage was lost and nobody at @AirParadis seems to care! Don't they understand that we can't enjoy our vacation without our stuff??? http://badservice.com/complaint :-(\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Sentiment\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 2,\n \"samples\": [\n \"N\\u00e9gatif\",\n \"Positif\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Emoji\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 2,\n \"samples\": [\n \"\\u274c\",\n \"\\ud83d\\udc9a\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Score de confiance\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.1400476782218768,\n \"min\": 0.519775390625,\n \"max\": 0.9853515625,\n \"num_unique_values\": 22,\n \"samples\": [\n 0.9853515625,\n 0.6962890625\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Score brut\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.33611927608617925,\n \"min\": 0.0282745361328125,\n \"max\": 0.9853515625,\n \"num_unique_values\": 22,\n \"samples\": [\n 0.9853515625,\n 0.6962890625\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Index\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 6,\n \"min\": 1,\n \"max\": 22,\n \"num_unique_values\": 22,\n \"samples\": [\n 1,\n 14\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}"}},"metadata":{},"execution_count":46}],"source":["# Obtenir le DataFrame des prédictions pour le modèle GloVe\n","df_results_glove = test_model_on_examples(lstm_glove_model_pack, test_tweets_improved)\n","\n","# Sauvegarder les résultats dans un fichier CSV\n","df_results_glove.to_csv(\"content/advanced-model/LSTM_GloVe-300d-Fige/predictions_results.csv\", index=False)\n","\n","# Afficher un aperçu des prédictions\n","print(\"\\nAperçu des prédictions GloVe :\")\n","df_results_glove"]},{"cell_type":"markdown","source":["# Enregistrement de dépendances"],"metadata":{"id":"5iEc-YxAt3BU"}},{"cell_type":"code","source":["!pip freeze > requirements_modele_avance.txt"],"metadata":{"id":"jIw_YhFztVF2"},"execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","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.10.12"},"colab":{"provenance":[],"gpuType":"T4","toc_visible":true},"accelerator":"GPU"},"nbformat":4,"nbformat_minor":0}
\ No newline at end of file
+{"cells":[{"cell_type":"markdown","metadata":{"id":"ojWck8JFNwMp"},"source":["## Partie 3 : 🧠 Approches avancée (embeddings pré-entraînés et deep learning)\n","\n","Dans ce notebook, nous développons des **modèles avancés d'analyse de sentiment** pour détecter les bad buzz potentiels sur Twitter. Nous implémentons deux architectures de deep learning basées sur des réseaux **LSTM bidirectionnels**, utilisant respectivement les embeddings **Word2Vec** et **GloVe 300d** comme représentations vectorielles des mots. Ces modèles exploitent les techniques modernes d'apprentissage profond pour prédire le sentiment de tweets.\n","\n","Concernant l'entrainement, le choix a été fait d'entrainer par optimisation de la variable de perte de validation `val_loss` avec en particulier un critère d'`EarlyStopping` au bout d'un certain nombre d'époques lancées (5, en l'ocurrence) afin de garantir une bonne généralisation ainsi qu'une limitation de l'overfitting.\n","\n","Cependant, le critère qui sera retenu comme le plus important en raison de notre problématique métier est la `precision` car nous souhaitons plus que tout éviter les faux positifs (tweet prédit comme positif, alors qu'il sera mal reçu)."]},{"cell_type":"markdown","metadata":{"id":"hQ2lFBinNwMq"},"source":["## Importation des bibliothèques"]},{"cell_type":"code","source":["from google.colab import drive\n","drive.mount('/content/drive')\n","import os\n","drive_folder= \"/content/drive/MyDrive/Colab_Notebooks/Project_7/notebooks\"\n","os.chdir(drive_folder)\n","os.listdir()"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"khhtDEa-Phih","executionInfo":{"status":"ok","timestamp":1751829649428,"user_tz":-120,"elapsed":962,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"ce7f19f8-a0ca-4fcf-fa46-ce54b3c96da7"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n"]},{"output_type":"execute_result","data":{"text/plain":["['content',\n"," 'requirements_analyse_exploratoire.txt',\n"," 'p07_01-notebook-analyse-exploratoire.ipynb',\n"," 'requirements_bert.txt',\n"," 'requirements_modele_avance.txt',\n"," 'p07_03-notebook-modele-avance.ipynb',\n"," 'requirements_modele_simple.txt',\n"," 'p07_02-notebook-modele-simple.ipynb',\n"," 'p07_04-notebook-modele-bert.ipynb',\n"," 'notebook-connexion-mlflow.ipynb']"]},"metadata":{},"execution_count":1}]},{"cell_type":"code","source":["!pip install mlflow boto3 dotenv gensim --quiet"],"metadata":{"id":"vN2rVNmf86bI"},"execution_count":null,"outputs":[]},{"cell_type":"code","execution_count":null,"metadata":{"id":"Ae66AtL4NwMq","executionInfo":{"status":"ok","timestamp":1751829672248,"user_tz":-120,"elapsed":11453,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"colab":{"base_uri":"https://localhost:8080/"},"outputId":"b8b32a26-9249-40fa-f306-7bcaf14d3061"},"outputs":[{"output_type":"stream","name":"stderr","text":["[nltk_data] Downloading package punkt to /root/nltk_data...\n","[nltk_data] Unzipping tokenizers/punkt.zip.\n","[nltk_data] Downloading package punkt_tab to /root/nltk_data...\n","[nltk_data] Unzipping tokenizers/punkt_tab.zip.\n","[nltk_data] Downloading package stopwords to /root/nltk_data...\n","[nltk_data] Unzipping corpora/stopwords.zip.\n","[nltk_data] Downloading package wordnet to /root/nltk_data...\n","[nltk_data] Downloading package omw-1.4 to /root/nltk_data...\n"]}],"source":["# Importations nécessaires\n","import os\n","import sys\n","import pandas as pd\n","import numpy as np\n","import matplotlib.pyplot as plt\n","import seaborn as sns\n","import time\n","import warnings\n","from collections import Counter\n","import pickle\n","from tqdm import tqdm\n","\n","# Importations scikit-learn\n","from sklearn.feature_extraction.text import TfidfVectorizer, CountVectorizer\n","from sklearn.model_selection import train_test_split, GridSearchCV\n","from sklearn.linear_model import LogisticRegression\n","from sklearn.svm import LinearSVC\n","from sklearn.ensemble import RandomForestClassifier\n","from sklearn.naive_bayes import MultinomialNB\n","from sklearn.metrics import (accuracy_score, precision_score, recall_score, f1_score,\n"," make_scorer, matthews_corrcoef, balanced_accuracy_score,\n"," classification_report, confusion_matrix, roc_auc_score, roc_curve)\n","\n","\n","import numpy as np\n","import tensorflow as tf\n","from tensorflow import keras\n","from tensorflow.keras.preprocessing.text import Tokenizer\n","from tensorflow.keras.preprocessing.sequence import pad_sequences\n","\n","# Ajoute le dossier parent au path\n","sys.path.append(os.path.abspath(\"..\"))\n","\n","# Maintenant tu peux importer ton module\n","from functions import convert_sentiment_label, downsample_data, preprocess_tweet, process_in_parallel, apply_preprocessing\n","\n","\n","# Configuration des visualisations\n","plt.style.use('ggplot')\n","plt.rcParams['figure.figsize'] = (12, 8)\n","plt.rcParams['font.family'] = 'DejaVu Sans'\n","warnings.filterwarnings('ignore')"]},{"cell_type":"markdown","metadata":{"id":"E1TqvSBHNwMr"},"source":["## 💾 Jeu de données : Sentiment140\n","\n","Le jeu de données [Sentiment140 dataset with 1.6 million tweets](https://www.kaggle.com/datasets/kazanova/sentiment140) est une ressource majeure pour l'analyse de sentiment sur Twitter, comprenant **1,6 million de tweets** extraits via l'API Twitter. Ces tweets ont été automatiquement annotés selon leur polarité sentimentale, offrant une base solide pour développer des modèles de classification de sentiment.\n","\n","Le jeu de données est organisé en 6 colonnes distinctes :\n","\n","1. **target** : La polarité du sentiment exprimé dans le tweet.\n"," - 0 = sentiment négatif\n"," - 2 = sentiment neutre\n"," - 4 = sentiment positif\n","2. **ids** : L'identifiant unique du tweet (exemple : *2087*)\n","3. **date** : La date et l'heure de publication du tweet.\n","4. **flag** : La requête utilisée pour obtenir le tweet.\n"," - Exemple : *lyx*\n"," - Si aucune requête n'a été utilisée : *NO_QUERY*\n","5. **user** : Le nom d'utilisateur de l'auteur du tweet.\n","6. **text** : Le contenu textuel du tweet."]},{"cell_type":"code","execution_count":null,"metadata":{"id":"jDsgh8mGNwMr","outputId":"e0836993-b471-4040-e453-ce648a7ebefd","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1751829672256,"user_tz":-120,"elapsed":9,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[{"output_type":"stream","name":"stdout","text":["CPU times: user 58 µs, sys: 0 ns, total: 58 µs\n","Wall time: 460 µs\n"]}],"source":["%%time\n","\n","# Define the URL and the local file path\n","url = \"https://s3-eu-west-1.amazonaws.com/static.oc-static.com/prod/courses/files/AI+Engineer/Project+7%C2%A0-+D%C3%A9tectez+les+Bad+Buzz+gr%C3%A2ce+au+Deep+Learning/sentiment140.zip\"\n","local_zip_path = \"./content/data/sentiment140.zip\"\n","extract_path = \"./content/data\"\n","\n","if not os.path.exists(extract_path):\n","\n"," # Create the directory if it doesn't exist\n"," os.makedirs(extract_path, exist_ok=True)\n","\n"," # Download the zip file\n"," response = requests.get(url)\n"," with open(local_zip_path, 'wb') as file:\n"," file.write(response.content)\n","\n"," # Extract the contents of the zip file\n"," with zipfile.ZipFile(local_zip_path, 'r') as zip_ref:\n"," zip_ref.extractall(extract_path)\n","\n"," # Delete the zip file\n"," os.remove(local_zip_path)"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"c-6C8QR_NwMr"},"outputs":[],"source":["pd.set_option('display.max_columns', None)\n","pd.set_option('display.expand_frame_repr', True)"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"MtMJv7S-NwMr","outputId":"4b66b3a9-3182-4541-8683-22eaed885d24","colab":{"base_uri":"https://localhost:8080/","height":206},"executionInfo":{"status":"ok","timestamp":1751829684281,"user_tz":-120,"elapsed":12010,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[{"output_type":"execute_result","data":{"text/plain":[" target ids date flag \\\n","0 0 1467810369 Mon Apr 06 22:19:45 PDT 2009 NO_QUERY \n","1 0 1467810672 Mon Apr 06 22:19:49 PDT 2009 NO_QUERY \n","2 0 1467810917 Mon Apr 06 22:19:53 PDT 2009 NO_QUERY \n","3 0 1467811184 Mon Apr 06 22:19:57 PDT 2009 NO_QUERY \n","4 0 1467811193 Mon Apr 06 22:19:57 PDT 2009 NO_QUERY \n","\n"," user text \n","0 _TheSpecialOne_ @switchfoot http://twitpic.com/2y1zl - Awww, t... \n","1 scotthamilton is upset that he can't update his Facebook by ... \n","2 mattycus @Kenichan I dived many times for the ball. Man... \n","3 ElleCTF my whole body feels itchy and like its on fire \n","4 Karoli @nationwideclass no, it's not behaving at all.... "],"text/html":["\n","
\n","
\n","\n","
\n"," \n","
\n","
\n","
target
\n","
ids
\n","
date
\n","
flag
\n","
user
\n","
text
\n","
\n"," \n"," \n","
\n","
0
\n","
0
\n","
1467810369
\n","
Mon Apr 06 22:19:45 PDT 2009
\n","
NO_QUERY
\n","
_TheSpecialOne_
\n","
@switchfoot http://twitpic.com/2y1zl - Awww, t...
\n","
\n","
\n","
1
\n","
0
\n","
1467810672
\n","
Mon Apr 06 22:19:49 PDT 2009
\n","
NO_QUERY
\n","
scotthamilton
\n","
is upset that he can't update his Facebook by ...
\n","
\n","
\n","
2
\n","
0
\n","
1467810917
\n","
Mon Apr 06 22:19:53 PDT 2009
\n","
NO_QUERY
\n","
mattycus
\n","
@Kenichan I dived many times for the ball. Man...
\n","
\n","
\n","
3
\n","
0
\n","
1467811184
\n","
Mon Apr 06 22:19:57 PDT 2009
\n","
NO_QUERY
\n","
ElleCTF
\n","
my whole body feels itchy and like its on fire
\n","
\n","
\n","
4
\n","
0
\n","
1467811193
\n","
Mon Apr 06 22:19:57 PDT 2009
\n","
NO_QUERY
\n","
Karoli
\n","
@nationwideclass no, it's not behaving at all....
\n","
\n"," \n","
\n","
\n","
\n","\n","
\n"," \n","\n"," \n","\n"," \n","
\n","\n","\n","
\n"," \n","\n","\n","\n"," \n","
\n","\n","
\n","
\n"],"application/vnd.google.colaboratory.intrinsic+json":{"type":"dataframe","variable_name":"raw_data"}},"metadata":{},"execution_count":6}],"source":["# Define the path to the CSV file\n","csv_file_path = os.path.join(extract_path, 'training.1600000.processed.noemoticon.csv')\n","\n","# Define the column names\n","column_names = ['target', 'ids', 'date', 'flag', 'user', 'text']\n","\n","# Load the dataset into a pandas DataFrame\n","raw_data = pd.read_csv(csv_file_path, encoding='latin-1', names=column_names)\n","\n","# Display the first few rows of the DataFrame\n","raw_data.head()"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"bIeawbN6NwMs","outputId":"a847e733-a6cc-4635-cd01-0bc887dc7bfd","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1751829684282,"user_tz":-120,"elapsed":5,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[{"output_type":"stream","name":"stdout","text":["Ce dataframe contient 1600000 lignes et 6 colonnes.\n"]}],"source":["print(f\"Ce dataframe contient {raw_data.shape[0]} lignes et {raw_data.shape[1]} colonnes.\")"]},{"cell_type":"markdown","source":["## ⏩🧠 Approches avancées de Deep Learning\n","Notre démarche pour la classification de sentiment avec des approches avancées comprend:\n","\n","1. **Prétraitement des tweets**\n"," - Nettoyage\n"," - Tokenisation et lemmatisation\n"," - Remplacement des URLs et mentions par des tokens spéciaux\n","\n","3. **Modèles testés**\n"," - **Modèle LSTM bidirectionnel avec Word2Vec:** Ce modèle utilisera une architecture de réseau de neurones récurrents (LSTM) bidirectionnel et les embeddings pré-entraînés **Word2Vec** pour représenter les mots.\n"," - **Modèle LSTM bidirectionnel avec GloVe 300d:** Ce modèle similaire utilisera également une architecture LSTM bidirectionnel, mais avec les embeddings pré-entraînés **GloVe de dimension 300**.\n","\n","\n","3. **Évaluation et suivi**\n"," - Métriques: précision, accuracy, recall, F1-score, ROC-AUC\n"," - Tracking avec MLflow pour la reproductibilité et la comparaison\n","\n","\n","Il est important de noter que l'entraînement est fait sur un sous-échantillon et non sur l'intégralité du dataset."],"metadata":{"id":"Lq2h1qmW2PqP"}},{"cell_type":"markdown","metadata":{"id":"UXHYqYWiNwMs"},"source":["## Prétraitement\n","\n","Notre démarche pour la classification de sentiment avec des approches classiques comprend:\n","\n","1. **Prétraitement des tweets**\n"," - Nettoyage\n"," - Tokenisation et lemmatisation\n"," - Remplacement des URLs et mentions par des tokens spéciaux\n","\n"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"XC0M0gPXNwMs"},"outputs":[],"source":["converted_target_data = convert_sentiment_label(raw_data)"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"gMSXKh2RNwMs","outputId":"d9635826-13f5-464f-f230-0bd4a0d6c743","colab":{"base_uri":"https://localhost:8080/","height":178},"executionInfo":{"status":"ok","timestamp":1751829686127,"user_tz":-120,"elapsed":2,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[{"output_type":"execute_result","data":{"text/plain":["target\n","0 800000\n","1 800000\n","Name: count, dtype: int64"],"text/html":["
"]},"metadata":{},"execution_count":10}],"source":["sample_size = 100000\n","downsampled_data = downsample_data(converted_target_data, n_samples=sample_size)\n","downsampled_data['target'].value_counts()"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"f2CkXR7XNwMt","outputId":"62b2f9e7-3dcb-49fe-e366-aff4eb32c5c1","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1751829778185,"user_tz":-120,"elapsed":90859,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[{"output_type":"stream","name":"stdout","text":["Prétraitement des tweets en cours...\n","Prétraitement terminé !\n"]}],"source":["# Appliquer le prétraitement à tous les tweets\n","print(\"Prétraitement des tweets en cours...\")\n","preprocessed_data = process_in_parallel(downsampled_data, apply_preprocessing, n_jobs=8)\n","print(\"Prétraitement terminé !\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"LN5ul0JBNwMt","outputId":"cb4d7277-bbce-4bc8-b424-9b406f9ab93a","colab":{"base_uri":"https://localhost:8080/","height":206},"executionInfo":{"status":"ok","timestamp":1751829778186,"user_tz":-120,"elapsed":4,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[{"output_type":"execute_result","data":{"text/plain":[" target ids date flag \\\n","212188 0 1974671194 Sat May 30 13:36:31 PDT 2009 NO_QUERY \n","299036 0 1997882236 Mon Jun 01 17:37:11 PDT 2009 NO_QUERY \n","475978 0 2177756662 Mon Jun 15 06:39:05 PDT 2009 NO_QUERY \n","588988 0 2216838047 Wed Jun 17 20:02:12 PDT 2009 NO_QUERY \n","138859 0 1880666283 Fri May 22 02:03:31 PDT 2009 NO_QUERY \n","\n"," user text \\\n","212188 simba98 @xnausikaax oh no! where did u order from? tha... \n","299036 Seve76 A great hard training weekend is over. a coup... \n","475978 x__claireyy__x Right, off to work Only 5 hours to go until I... \n","588988 Balasi I am craving for japanese food \n","138859 djrickdawson Jean Michel Jarre concert tomorrow gotta work... \n","\n"," processed_text \n","212188 < MENTION > oh no ! u order ? thats horrible \n","299036 great hard training weekend couple day rest le... \n","475978 right work 5 hour go im free xd \n","588988 craving japanese food \n","138859 jean michel jarre concert tomorrow got ta work... "],"text/html":["\n","
\n","
\n","\n","
\n"," \n","
\n","
\n","
target
\n","
ids
\n","
date
\n","
flag
\n","
user
\n","
text
\n","
processed_text
\n","
\n"," \n"," \n","
\n","
212188
\n","
0
\n","
1974671194
\n","
Sat May 30 13:36:31 PDT 2009
\n","
NO_QUERY
\n","
simba98
\n","
@xnausikaax oh no! where did u order from? tha...
\n","
< MENTION > oh no ! u order ? thats horrible
\n","
\n","
\n","
299036
\n","
0
\n","
1997882236
\n","
Mon Jun 01 17:37:11 PDT 2009
\n","
NO_QUERY
\n","
Seve76
\n","
A great hard training weekend is over. a coup...
\n","
great hard training weekend couple day rest le...
\n","
\n","
\n","
475978
\n","
0
\n","
2177756662
\n","
Mon Jun 15 06:39:05 PDT 2009
\n","
NO_QUERY
\n","
x__claireyy__x
\n","
Right, off to work Only 5 hours to go until I...
\n","
right work 5 hour go im free xd
\n","
\n","
\n","
588988
\n","
0
\n","
2216838047
\n","
Wed Jun 17 20:02:12 PDT 2009
\n","
NO_QUERY
\n","
Balasi
\n","
I am craving for japanese food
\n","
craving japanese food
\n","
\n","
\n","
138859
\n","
0
\n","
1880666283
\n","
Fri May 22 02:03:31 PDT 2009
\n","
NO_QUERY
\n","
djrickdawson
\n","
Jean Michel Jarre concert tomorrow gotta work...
\n","
jean michel jarre concert tomorrow got ta work...
\n","
\n"," \n","
\n","
\n","
\n","\n","
\n"," \n","\n"," \n","\n"," \n","
\n","\n","\n","
\n"," \n","\n","\n","\n"," \n","
\n","\n","
\n","
\n"],"application/vnd.google.colaboratory.intrinsic+json":{"type":"dataframe","variable_name":"preprocessed_data"}},"metadata":{},"execution_count":12}],"source":["preprocessed_data.head()"]},{"cell_type":"markdown","metadata":{"id":"zyb9Fj38NwMt"},"source":["## Division des données en ensembles d'entraînement et de test"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"Z_y6Ja0INwMt","outputId":"900bbf3f-2716-478d-b03b-8f04f23a819f","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1751829778219,"user_tz":-120,"elapsed":35,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[{"output_type":"stream","name":"stdout","text":["Taille de l'ensemble d'entraînement: 160000 exemples\n","Taille de l'ensemble de test: 40000 exemples\n"]}],"source":["# Diviser les données en ensembles d'entraînement et de test\n","from sklearn.model_selection import train_test_split\n","\n","X = preprocessed_data['processed_text']\n","y = preprocessed_data['target']\n","\n","# Division train/test\n","X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42, stratify=y)\n","\n","print(f\"Taille de l'ensemble d'entraînement: {X_train.shape[0]} exemples\")\n","print(f\"Taille de l'ensemble de test: {X_test.shape[0]} exemples\")"]},{"cell_type":"markdown","metadata":{"id":"wPE9r-G4NwMt"},"source":["## Entraînement des modèles et tracking avec MLflow"]},{"cell_type":"markdown","metadata":{"id":"zpsZDWuANwMt"},"source":["### Configuration de MLFlow"]},{"cell_type":"code","source":["import mlflow\n","import mlflow.keras\n","from mlflow.models import infer_signature\n","from mlflow import MlflowClient\n","from dotenv import load_dotenv\n","\n","# Charger les variables d'environnement depuis le fichier .env\n","load_dotenv(dotenv_path='../.env')\n","\n","# Configuration de MLflow avec les variables d'environnement\n","mlflow_tracking_uri = os.getenv(\"MLFLOW_TRACKING_URI\")\n","mlflow_s3_endpoint_url = os.getenv(\"MLFLOW_S3_ENDPOINT_URL\")\n","aws_access_key_id = os.getenv(\"AWS_ACCESS_KEY_ID\")\n","aws_secret_access_key = os.getenv(\"AWS_SECRET_ACCESS_KEY\")\n","\n","# Configuration explicite de MLflow\n","mlflow.set_tracking_uri(mlflow_tracking_uri)\n","print(f\"MLflow Tracking URI: {mlflow_tracking_uri}\")\n","\n","# Configuration explicite des identifiants AWS\n","os.environ[\"MLFLOW_S3_ENDPOINT_URL\"] = mlflow_s3_endpoint_url\n","os.environ[\"AWS_ACCESS_KEY_ID\"] = aws_access_key_id\n","os.environ[\"AWS_SECRET_ACCESS_KEY\"] = aws_secret_access_key\n","print(\"Identifiants AWS configurés\")"],"metadata":{"id":"qoQ4njujN758","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1751829780115,"user_tz":-120,"elapsed":1895,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"c3bd3672-bdfe-41cf-e3ea-4f05c5dc85e9"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["MLflow Tracking URI: https://mlflow.greg-madman-nas.duckdns.org/\n","Identifiants AWS configurés\n"]}]},{"cell_type":"code","execution_count":null,"metadata":{"id":"CZ7unEtvNwMt","outputId":"9d070ad6-ba13-4f7d-d0bc-59415062d3b7","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1751829782348,"user_tz":-120,"elapsed":2232,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[{"output_type":"execute_result","data":{"text/plain":[""]},"metadata":{},"execution_count":15}],"source":["# Créer l'expérience MLflow\n","mlflow.set_experiment(\"OC Projet 7\")"]},{"cell_type":"markdown","metadata":{"id":"33JkcVxcNwMt"},"source":["## Préparation des données pour les modèles de deep learning\n","\n","D'abord, nous devons tokeniser nos textes et les préparer pour l'entraînement des modèles de deep learning."]},{"cell_type":"code","execution_count":null,"metadata":{"id":"WKfNMY_JNwMt","outputId":"db116bc5-51d4-4ca0-d4ec-3bcbf92e763f","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1751829788323,"user_tz":-120,"elapsed":5944,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[{"output_type":"stream","name":"stdout","text":["Taille du vocabulaire: 83731\n","Forme des données d'entraînement: (160000, 50)\n","Forme des données de test: (40000, 50)\n"]}],"source":["# Définir la longueur maximale des séquences (nombre de mots par tweet)\n","MAX_SEQUENCE_LENGTH = 50\n","\n","# Définir la taille du vocabulaire (nombre de mots uniques à considérer)\n","MAX_VOCAB_SIZE = 20000\n","\n","# Tokenisation des textes\n","tokenizer = Tokenizer(num_words=MAX_VOCAB_SIZE, oov_token='')\n","tokenizer.fit_on_texts(X_train)\n","\n","# Convertir les textes en séquences d'indices\n","X_train_seq = tokenizer.texts_to_sequences(X_train)\n","X_test_seq = tokenizer.texts_to_sequences(X_test)\n","\n","# Padding des séquences pour qu'elles aient toutes la même longueur\n","X_train_pad = pad_sequences(X_train_seq, maxlen=MAX_SEQUENCE_LENGTH, padding='post', truncating='post')\n","X_test_pad = pad_sequences(X_test_seq, maxlen=MAX_SEQUENCE_LENGTH, padding='post', truncating='post')\n","\n","# Créer le dossier pour sauvegarder les modèles\n","os.makedirs(\"content/advanced-model\", exist_ok=True)\n","# os.makedirs(\"content/advanced-model/best\", exist_ok=True)\n","\n","# Sauvegarder le tokenizer pour une utilisation ultérieure\n","import pickle\n","with open('content/advanced-model/tokenizer.pickle', 'wb') as handle:\n"," pickle.dump(tokenizer, handle, protocol=pickle.HIGHEST_PROTOCOL)\n","\n","print(f\"Taille du vocabulaire: {len(tokenizer.word_index) + 1}\")\n","print(f\"Forme des données d'entraînement: {X_train_pad.shape}\")\n","print(f\"Forme des données de test: {X_test_pad.shape}\")"]},{"cell_type":"markdown","metadata":{"id":"876rS4__NwMt"},"source":["## Fonctions d'évaluation"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"OrUjzG-6NwMt"},"outputs":[],"source":["def evaluate_model(model, X_test, y_test, class_names=['Négatif', 'Positif']):\n"," \"\"\"\n"," Évalue le modèle sur l'ensemble de test et retourne les métriques de performance.\n"," \"\"\"\n"," # Prédictions du modèle\n"," y_pred_proba = model.predict(X_test)\n"," y_pred = (y_pred_proba > 0.5).astype(int)\n","\n"," # Convertir les prédictions de format numpy à format list pour éviter les erreurs de sérialisation\n"," if isinstance(y_pred, np.ndarray):\n"," y_pred = y_pred.flatten().tolist()\n"," if isinstance(y_pred_proba, np.ndarray):\n"," y_pred_proba = y_pred_proba.flatten().tolist()\n","\n"," # Calculer les métriques\n"," accuracy = accuracy_score(y_test, y_pred)\n"," precision = precision_score(y_test, y_pred)\n"," recall = recall_score(y_test, y_pred)\n"," f1 = f1_score(y_test, y_pred)\n"," roc_auc = roc_auc_score(y_test, y_pred_proba)\n","\n"," # Matrice de confusion\n"," cm = confusion_matrix(y_test, y_pred)\n","\n"," # Rapport de classification\n"," report = classification_report(y_test, y_pred, target_names=class_names)\n","\n"," metrics = {\n"," 'accuracy': accuracy,\n"," 'precision': precision,\n"," 'recall': recall,\n"," 'f1': f1,\n"," 'roc_auc': roc_auc\n"," }\n","\n"," return metrics, cm, report, y_pred, y_pred_proba\n","\n","def plot_confusion_matrix(cm, class_names, title='Matrice de confusion'):\n"," \"\"\"\n"," Crée une figure de matrice de confusion.\n"," \"\"\"\n"," fig, ax = plt.subplots(figsize=(8, 6))\n"," im = ax.imshow(cm, interpolation='nearest', cmap=plt.cm.Blues)\n"," ax.figure.colorbar(im, ax=ax)\n"," ax.set(xticks=np.arange(cm.shape[1]),\n"," yticks=np.arange(cm.shape[0]),\n"," xticklabels=class_names,\n"," yticklabels=class_names,\n"," title=title,\n"," ylabel='Vraie étiquette',\n"," xlabel='Étiquette prédite')\n","\n"," # Pivoter les labels de l'axe des x\n"," plt.setp(ax.get_xticklabels(), rotation=45, ha=\"right\", rotation_mode=\"anchor\")\n","\n"," # Annoter la matrice de confusion\n"," thresh = cm.max() / 2.\n"," for i in range(cm.shape[0]):\n"," for j in range(cm.shape[1]):\n"," ax.text(j, i, format(cm[i, j], 'd'),\n"," ha=\"center\", va=\"center\",\n"," color=\"white\" if cm[i, j] > thresh else \"black\")\n","\n"," plt.tight_layout()\n"," return fig\n"]},{"cell_type":"markdown","metadata":{"id":"3_YfW-7yNwMt"},"source":["## Fonction de logging pour MLflow"]},{"cell_type":"code","source":["def log_model_to_mlflow(model, model_name, vectorizer_name, metrics, cm, report, X_test, y_test, history=None, params=None):\n"," \"\"\"\n"," Enregistre le modèle et ses performances dans MLflow.\n"," \"\"\"\n"," class_names = ['Négatif', 'Positif']\n","\n"," with mlflow.start_run(run_name=f\"Modele_Avance_{model_name}_{vectorizer_name}\"):\n"," # Enregistrer les paramètres du modèle\n"," if params:\n"," for key, value in params.items():\n"," mlflow.log_param(key, value)\n","\n"," # Enregistrer les métriques de validation issues de l'entraînement\n"," if history is not None:\n"," hist = history.history\n"," if 'val_precision' in hist:\n"," best_epoch = int(np.argmax(hist['val_precision']))\n"," mlflow.log_metric(\"val_precision\", float(hist['val_precision'][best_epoch]))\n"," if 'val_loss' in hist:\n"," mlflow.log_metric(\"val_loss\", float(hist['val_loss'][best_epoch]))\n"," if 'val_recall' in hist:\n"," mlflow.log_metric(\"val_recall\", float(hist['val_recall'][best_epoch]))\n","\n"," # Enregistrer les métriques de performance\n"," for key, value in metrics.items():\n"," mlflow.log_metric('test_' + key, value)\n","\n"," # Tracer et enregistrer la matrice de confusion\n"," fig = plot_confusion_matrix(cm, class_names)\n"," mlflow.log_figure(fig, f\"confusion_matrix_{model_name}_{vectorizer_name}.png\")\n"," plt.close(fig)\n","\n"," # Enregistrer le rapport de classification\n"," report_path = f\"content/advanced-model/{model_name}_{vectorizer_name}/classification_report.txt\"\n"," os.makedirs(os.path.dirname(report_path), exist_ok=True)\n"," with open(report_path, \"w\") as f:\n"," f.write(report)\n"," mlflow.log_artifact(report_path)\n","\n"," # Enregistrer le modèle dans MLflow\n"," signature = infer_signature(X_test, y_test)\n"," mlflow.keras.log_model(\n"," model,\n"," f\"model_{model_name}_{vectorizer_name}\",\n"," signature=signature\n"," )\n","\n"," # Log du dossier local qui contient déjà tous les artefacts\n"," artifact_dir = f\"content/advanced-model/{model_name}_{vectorizer_name}\"\n"," if os.path.exists(artifact_dir):\n"," mlflow.log_artifacts(artifact_dir, \"local_artifacts\")\n","\n"," return mlflow.active_run().info.run_id\n","\n","\n","def plot_training_history(history, model_name, vectorizer_name, run_id=None):\n"," \"\"\"\n"," Trace l'historique d'entraînement du modèle et l'enregistre dans la même exécution MLflow.\n","\n"," Args:\n"," history: Historique d'entraînement du modèle\n"," model_name: Nom du modèle\n"," vectorizer_name: Nom du vectoriseur\n"," run_id: ID de l'exécution MLflow existante\n","\n"," Returns:\n"," fig: Figure matplotlib créée\n"," \"\"\"\n"," fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))\n","\n"," # Tracer precision (train & val)\n"," ax1.plot(history.history['precision'], label='train')\n"," ax1.plot(history.history['val_precision'], label='validation')\n"," ax1.set_title(f'Précision - {model_name} avec {vectorizer_name}')\n"," ax1.set_xlabel('Epoch')\n"," ax1.set_ylabel('Précision')\n"," ax1.legend()\n","\n"," # Tracer loss (train & val)\n"," ax2.plot(history.history['loss'], label='train')\n"," ax2.plot(history.history['val_loss'], label='validation')\n"," ax2.set_title(f'Loss - {model_name} avec {vectorizer_name}')\n"," ax2.set_xlabel('Epoch')\n"," ax2.set_ylabel('Loss')\n"," ax2.legend()\n","\n","\n"," plt.tight_layout()\n","\n"," # Sauvegarder la figure localement\n"," filename = f'content/advanced-model/training_history_{model_name}_{vectorizer_name}.png'\n"," plt.savefig(filename)\n","\n"," # Enregistrer dans MLflow en utilisant l'exécution existante\n"," if run_id:\n"," with mlflow.start_run(run_id=run_id):\n"," mlflow.log_figure(fig, f\"training_history_{model_name}_{vectorizer_name}.png\")\n"," else:\n"," # Fallback si aucun run_id n'est fourni\n"," with mlflow.start_run(run_name=f\"ModeleAvance_{model_name}_{vectorizer_name}\"):\n"," mlflow.log_figure(fig, f\"training_history_{model_name}_{vectorizer_name}.png\")"],"metadata":{"id":"etdkfzD9x8t3"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"1UorrWtSNwMu"},"source":["## Chargement et préparation des embeddings pré-entraînés"]},{"cell_type":"markdown","metadata":{"id":"yzl1y9HSNwMu"},"source":["### Word2vec"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"K0hDRRZmNwMu","outputId":"f27eb320-f434-478d-defd-62e9b14d7e05","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1751829788865,"user_tz":-120,"elapsed":511,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[{"output_type":"stream","name":"stdout","text":["Word2Vec model already exists at content/pretrained-embeddings/word2vec/GoogleNews-vectors-negative300.bin\n","Word2Vec model is available at: content/pretrained-embeddings/word2vec/GoogleNews-vectors-negative300.bin\n"]}],"source":["def download_word2vec():\n"," \"\"\"\n"," Downloads the pre-trained Word2Vec embeddings.\n"," Creates the necessary directories, downloads the file, extracts it, and cleans up unneeded files.\n","\n"," Returns:\n"," str: Path to the extracted Word2Vec model file\n"," \"\"\"\n"," import os\n"," import gzip\n"," import shutil\n"," from urllib.request import urlretrieve\n"," import time\n"," import zipfile\n","\n"," # Create necessary directories\n"," content_dir = 'content/pretrained-embeddings'\n"," word2vec_dir = os.path.join(content_dir, 'word2vec')\n","\n"," os.makedirs(word2vec_dir, exist_ok=True)\n","\n"," # Define file paths\n"," model_file = os.path.join(word2vec_dir, 'GoogleNews-vectors-negative300.bin')\n"," zip_file = os.path.join(word2vec_dir, 'GoogleNews-vectors-negative300.bin.zip')\n","\n"," # Skip download if file already exists\n"," if os.path.exists(model_file):\n"," print(f\"Word2Vec model already exists at {model_file}\")\n"," return model_file\n","\n"," # URL for the pre-trained Word2Vec embeddings\n"," # Using huggingface repository as a reliable source\n"," url = 'https://huggingface.co/fse/word2vec-google-news-300/resolve/main/GoogleNews-vectors-negative300.bin.gz'\n","\n"," try:\n"," # Download the file with progress reporting\n"," print(f\"Downloading Word2Vec embeddings from {url}...\")\n"," print(\"This may take a while as the file is ~1.5GB\")\n","\n"," start_time = time.time()\n","\n"," def progress_callback(count, block_size, total_size):\n"," elapsed_time = time.time() - start_time\n"," downloaded = count * block_size / (1024 * 1024) # MB\n"," total = total_size / (1024 * 1024) if total_size > 0 else 0 # MB\n"," percent = min(100, count * block_size * 100 / total_size) if total_size > 0 else 0\n"," speed = downloaded / elapsed_time if elapsed_time > 0 else 0\n","\n"," print(f\"\\rDownloaded: {downloaded:.1f}MB / {total:.1f}MB ({percent:.1f}%) - {speed:.1f}MB/s\",\n"," end='', flush=True)\n","\n"," gz_file = os.path.join(word2vec_dir, 'GoogleNews-vectors-negative300.bin.gz')\n"," urlretrieve(url, gz_file, progress_callback)\n"," print(\"\\nDownload complete!\")\n","\n"," # Extract the gzip file\n"," print(f\"Extracting {gz_file}...\")\n"," with gzip.open(gz_file, 'rb') as f_in:\n"," with open(model_file, 'wb') as f_out:\n"," shutil.copyfileobj(f_in, f_out)\n"," print(\"Extraction complete!\")\n","\n"," # Delete the gzip file to save space\n"," os.remove(gz_file)\n"," print(f\"Deleted temporary file: {gz_file}\")\n","\n"," return model_file\n","\n"," except Exception as e:\n"," print(f\"Error downloading or extracting Word2Vec embeddings: {str(e)}\")\n"," print(\"\\nTrying alternative download source...\")\n","\n"," # Alternative URL (Google Drive mirror)\n"," try:\n"," # Install gdown if not available\n"," import subprocess\n"," import sys\n","\n"," def install_gdown():\n"," subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"gdown\"])\n","\n"," try:\n"," import gdown\n"," except ImportError:\n"," print(\"Installing gdown package for Google Drive downloads...\")\n"," install_gdown()\n"," import gdown\n","\n"," # Google Drive file ID for Word2Vec\n"," file_id = \"0B7XkCwpI5KDYNlNUTTlSS21pQmM\"\n","\n"," print(f\"Downloading Word2Vec embeddings from Google Drive (ID: {file_id})...\")\n"," output = gz_file\n"," gdown.download(id=file_id, output=output, quiet=False)\n","\n"," # Extract the gzip file\n"," print(f\"Extracting {gz_file}...\")\n"," with gzip.open(gz_file, 'rb') as f_in:\n"," with open(model_file, 'wb') as f_out:\n"," shutil.copyfileobj(f_in, f_out)\n"," print(\"Extraction complete!\")\n","\n"," # Delete the gzip file to save space\n"," os.remove(gz_file)\n"," print(f\"Deleted temporary file: {gz_file}\")\n","\n"," return model_file\n","\n"," except Exception as alt_error:\n"," print(f\"Error with alternative download: {str(alt_error)}\")\n","\n"," # Final fallback: direct user to manual download\n"," print(\"\\nAutomatic download failed. Please follow these manual steps:\")\n"," print(\"1. Download the Word2Vec embeddings from: https://drive.google.com/file/d/0B7XkCwpI5KDYNlNUTTlSS21pQmM/view?usp=sharing\")\n"," print(\"2. Extract the downloaded file\")\n"," print(f\"3. Place the 'GoogleNews-vectors-negative300.bin' file in the '{word2vec_dir}' directory\")\n","\n"," # Clean up any partial downloads\n"," if os.path.exists(gz_file):\n"," os.remove(gz_file)\n"," if os.path.exists(model_file) and os.path.getsize(model_file) < 1000000: # If file exists but is too small\n"," os.remove(model_file)\n","\n"," raise Exception(\"Failed to download Word2Vec embeddings automatically. Please download manually.\")\n","\n","# Example usage:\n","model_path = download_word2vec()\n","print(f\"Word2Vec model is available at: {model_path}\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"WMvPJS5tNwMu"},"outputs":[],"source":["from gensim.models import KeyedVectors\n","\n","def load_word2vec_embeddings():\n"," \"\"\"\n"," Charge les embeddings Word2Vec pré-entraînés.\n"," \"\"\"\n"," print(\"Chargement des embeddings Word2Vec...\")\n","\n"," # Charger le modèle Word2Vec\n"," word2vec_model = KeyedVectors.load_word2vec_format('content/pretrained-embeddings/word2vec/GoogleNews-vectors-negative300.bin', binary=True, limit=500000)\n","\n"," # Convertir en dictionnaire pour une utilisation plus facile\n"," embeddings_index = {}\n"," for word in word2vec_model.key_to_index:\n"," embeddings_index[word] = word2vec_model[word]\n","\n"," print(f\"Trouvé {len(embeddings_index)} vecteurs d'embeddings Word2Vec.\")\n"," return embeddings_index"]},{"cell_type":"markdown","metadata":{"id":"Xor_kNOVNwMu"},"source":["## Création des matrices d'embedding à partir des embeddings pré-entraînés"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"H1nz57olNwMu"},"outputs":[],"source":["def create_embedding_matrix(word_index, embeddings_index, embedding_dim):\n"," \"\"\"\n"," Crée une matrice d'embedding à partir des embeddings pré-entraînés.\n"," Affiche une barre de progression pendant le traitement.\n","\n"," Args:\n"," word_index (dict): Dictionnaire de mots et leurs indices\n"," embeddings_index (dict): Dictionnaire des embeddings pré-entraînés\n"," embedding_dim (int): Dimension des vecteurs d'embedding\n","\n"," Returns:\n"," numpy.ndarray: Matrice d'embedding\n"," \"\"\"\n"," vocab_size = len(word_index) + 1\n"," embedding_matrix = np.zeros((vocab_size, embedding_dim))\n","\n"," found_words = 0\n","\n"," # Utiliser tqdm pour afficher une barre de progression\n"," print(f\"Création de la matrice d'embedding pour {len(word_index)} mots...\")\n"," for word, i in tqdm(word_index.items(), total=len(word_index), desc=\"Création matrice d'embedding\"):\n"," embedding_vector = embeddings_index.get(word)\n"," if embedding_vector is not None:\n"," embedding_matrix[i] = embedding_vector\n"," found_words += 1\n","\n"," print(f\"Trouvé {found_words} mots ({found_words/len(word_index)*100:.2f}%) dans les embeddings pré-entraînés.\")\n"," return embedding_matrix"]},{"cell_type":"markdown","metadata":{"id":"XsGjsmVYNwMu"},"source":["## Optimisations matérielle (utilisation du GPU)\n","\n","1. **Désactivation du recurrent_dropout** - Permet l'utilisation de CuDNNLSTM optimisé pour GPU\n","2. **Activation de XLA** (Accelerated Linear Algebra) - Optimise les graphes d'opérations pour GPU\n","3. **Précision mixte** - Utilise float16 pour les calculs et float32 pour les variables\n","4. **Augmentation de la taille du batch** - Passée à 256 pour mieux exploiter le parallélisme GPU\n","5. **Optimisation du pipeline de données** - Utilisation de tf.data.Dataset avec prefetch\n","6. **Scheduler de taux d'apprentissage** - Décroissance exponentielle du taux pour améliorer la convergence\n","\n","Ces modifications permettent d'utiliser efficacement les capacités de notre **GTX 1060 3GB** tout en respectant les limitations de la mémoire."]},{"cell_type":"markdown","metadata":{"id":"lF2h27fxNwMu"},"source":["### Utilisation du GPU"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"TcLWpxKgNwMu","outputId":"77043b88-2bfc-4082-a05d-578cb6d16aa0","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1751829790359,"user_tz":-120,"elapsed":1095,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[{"output_type":"stream","name":"stderr","text":["WARNING:tensorflow:From /tmp/ipython-input-22-656146420.py:12: is_gpu_available (from tensorflow.python.framework.test_util) is deprecated and will be removed in a future version.\n","Instructions for updating:\n","Use `tf.config.list_physical_devices('GPU')` instead.\n"]},{"output_type":"stream","name":"stdout","text":["GPU disponible : [PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]\n","TensorFlow utilise GPU: True\n","Devices disponibles: [PhysicalDevice(name='/physical_device:CPU:0', device_type='CPU'), PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]\n","Compute dtype: float16\n","Variable dtype: float32\n"]}],"source":["import tensorflow as tf\n","\n","# Configuration de TensorFlow pour utiliser la GPU si disponible\n","physical_devices = tf.config.list_physical_devices('GPU')\n","if physical_devices:\n"," tf.config.experimental.set_memory_growth(physical_devices[0], True)\n"," print(\"GPU disponible :\", physical_devices)\n","else:\n"," print(\"Pas de GPU disponible, utilisation du CPU\")\n","\n","# Vérifier que TensorFlow utilise le GPU\n","print(f\"TensorFlow utilise GPU: {tf.test.is_gpu_available()}\")\n","print(f\"Devices disponibles: {tf.config.list_physical_devices()}\")\n","\n","# Optimiser les performances avec mixed precision\n","# Cette option accélère l'entraînement sur les GPU récents\n","policy = tf.keras.mixed_precision.Policy('mixed_float16')\n","tf.keras.mixed_precision.set_global_policy(policy)\n","print(f'Compute dtype: {policy.compute_dtype}')\n","print(f'Variable dtype: {policy.variable_dtype}')"]},{"cell_type":"markdown","metadata":{"id":"K6WAGmVVNwMu"},"source":["### Optimisations de la mémoire et configuration TensorFlow"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"EHdEo-FBNwMu","outputId":"e75df72d-816f-4d2a-95af-60b6b73515f4","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1751829790365,"user_tz":-120,"elapsed":5,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[{"output_type":"stream","name":"stdout","text":["Mémoire GPU dynamique activée\n","Politique de calcul: mixed_float16\n"]}],"source":["# Activer la mémoire GPU dynamique\n","gpus = tf.config.experimental.list_physical_devices('GPU')\n","if gpus:\n"," try:\n"," for gpu in gpus:\n"," tf.config.experimental.set_memory_growth(gpu, True)\n"," print(\"Mémoire GPU dynamique activée\")\n"," except RuntimeError as e:\n"," print(f\"Erreur: {e}\")\n","\n","# Activer XLA (Accelerated Linear Algebra) pour optimiser les graphes\n","tf.config.optimizer.set_jit(True) # Active la compilation Just-In-Time\n","\n","# Précision mixte pour accélérer les calculs\n","policy = tf.keras.mixed_precision.Policy('mixed_float16')\n","tf.keras.mixed_precision.set_global_policy(policy)\n","print(f'Politique de calcul: {policy.name}')"]},{"cell_type":"markdown","metadata":{"id":"5tWaCIapNwMu"},"source":["### Optimisation du chargement des données"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"_OYSmRuiNwMw"},"outputs":[],"source":["# 2. Optimiser le chargement des données\n","AUTOTUNE = tf.data.AUTOTUNE\n","BATCH_SIZE = 256 # Tester avec différentes valeurs: 128, 256, 512\n","\n","# Créer un dataset TensorFlow optimisé\n","def create_optimized_dataset(x, y, is_training=True):\n"," dataset = tf.data.Dataset.from_tensor_slices((x, y))\n"," if is_training:\n"," dataset = dataset.shuffle(10000)\n","\n"," # Utiliser un batch plus grand pour mieux utiliser le GPU\n"," dataset = dataset.batch(BATCH_SIZE)\n","\n"," # Précharger les données pour éviter les goulots d'étranglement\n"," dataset = dataset.prefetch(AUTOTUNE)\n"," return dataset\n","\n","# Séparer les données de validation et créer les datasets optimisés\n","val_size = int(0.1 * len(X_train_pad))\n","x_val = X_train_pad[-val_size:]\n","y_val = y_train[-val_size:]\n","x_train_final = X_train_pad[:-val_size]\n","y_train_final = y_train[:-val_size]\n","\n","train_dataset = create_optimized_dataset(x_train_final, y_train_final)\n","val_dataset = create_optimized_dataset(x_val, y_val, is_training=False)"]},{"cell_type":"markdown","metadata":{"id":"5angsL01NwMx"},"source":["Nos optimisations fonctionnent correctement :\n","\n","1. **XLA activé** : `Loaded cuDNN version 90300` et `Compiled cluster using XLA!` confirment que l'accélération XLA est bien activée.\n","2. **CuDNN chargé** : Le message indique que cuDNN (version 9.03) est correctement chargé, ce qui signifie que vos couches LSTM utiliseront l'implémentation optimisée pour GPU.\n","3. **GPU reconnu** : Le système a bien reconnu votre NVIDIA GeForce GTX 1060 3GB avec Compute Capability 6.1.\n","\n","Nous observervons :\n","- Une utilisation GPU bien supérieure à 20% (idéalement 70-90%)\n","- Un temps d'entraînement par epoch considérablement réduit\n","\n","Pour vérifier l'utilisation réelle du GPU pendant l'entraînement, nous pouvons exécuter :\n","\n","```shell\n","nvidia-smi -l 1\n","```"]},{"cell_type":"markdown","metadata":{"id":"PicWq6E0NwMx"},"source":["### Bilan de l'optimisation\n","\n","Nous avons réussi à optimiser significativement l'utilisation de notre GPU. Les modifications que nous avons apportées ont considérablement amélioré les performances :\n","\n","- Nous avons augmenté l'**utilisation de votre GPU de 20% à 73%**\n","- Nous utilisons maintenant intelligemment la mémoire disponible\n","- Nous avons activé les technologies d'**accélération comme XLA et CuDNN**\n","- Nous avons désactivé le **recurrent_dropout** pour permettre l'utilisation des implémentations GPU optimisées\n","- Nous avons implémenté la **précision mixte** pour accélérer les calculs\n","- Nous avons optimisé la **taille du batch** et le pipeline de données\n","\n","Nous avons atteint un excellent équilibre entre l'utilisation maximale des ressources et la stabilité du système."]},{"cell_type":"markdown","metadata":{"id":"NlECzxylNwMx"},"source":["## Création d'un modèles LSTM avec embeddings pré-entraînés\n","\n","Voici une description de la fonction `create_lstm_model_with_pretrained` qui crée un **modèle LSTM** avec des **embeddings pré-entraînés** :\n","\n","- Crée un modèle de réseau de neurones pour la **classification de texte** utilisant des **embeddings pré-entraînés**\n","- Initialise une couche d'embedding avec les poids fournis dans `embedding_matrix`\n","- Utilise une architecture profonde avec deux couches LSTM bidirectionnelles (128 puis 64 unités)\n","- Implémente plusieurs techniques de régularisation (dropout spatial et classique) pour éviter le surapprentissage\n","- Inclut une couche dense intermédiaire avec activation ReLU\n","- Se termine par une **couche de sortie avec activation sigmoïde**, adaptée aux problèmes de **classification binaire**\n","- Compile le modèle avec l'**optimiseur Adam**, une fonction de perte d'entropie croisée binaire et suit la métrique de précision\n","- Permet de contrôler si les embeddings sont entraînables ou figés via le paramètre `trainable`"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"1KZ4x6cGNwMx"},"outputs":[],"source":["def create_optimized_lstm_model(embedding_matrix, max_seq_length=MAX_SEQUENCE_LENGTH, trainable=False):\n"," vocab_size, embedding_dim = embedding_matrix.shape\n","\n"," # Entrée du modèle\n"," input_layer = tf.keras.layers.Input(shape=(max_seq_length,))\n","\n"," # Couche d'embedding avec des poids pré-entraînés\n"," embedding_layer = tf.keras.layers.Embedding(\n"," input_dim=vocab_size,\n"," output_dim=embedding_dim,\n"," weights=[embedding_matrix],\n"," input_length=max_seq_length,\n"," trainable=trainable\n"," )(input_layer)\n","\n"," # Dropout spatial\n"," dropout_1 = tf.keras.layers.SpatialDropout1D(0.3)(embedding_layer)\n","\n"," # Couche CuDNNLSTM optimisée pour GPU (via le backend GPU automatique de TF)\n"," # Note: TF2.x utilise automatiquement l'implémentation CuDNNLSTM quand recurrent_dropout=0\n"," lstm_layer = tf.keras.layers.Bidirectional(\n"," tf.keras.layers.LSTM(\n"," units=128,\n"," dropout=0.2,\n"," recurrent_dropout=0.0, # Mettre à 0 pour utiliser l'implémentation CuDNN optimisée\n"," return_sequences=True\n"," )\n"," )(dropout_1)\n","\n"," # Deuxième couche LSTM\n"," lstm_layer_2 = tf.keras.layers.Bidirectional(\n"," tf.keras.layers.LSTM(\n"," units=64,\n"," dropout=0.2,\n"," recurrent_dropout=0.0 # Mettre à 0 pour utiliser l'implémentation CuDNN optimisée\n"," )\n"," )(lstm_layer)\n","\n"," # Couche dense avec activation ReLU\n"," dense_1 = tf.keras.layers.Dense(64, activation='relu')(lstm_layer_2)\n"," dropout_2 = tf.keras.layers.Dropout(0.4)(dense_1)\n","\n"," # Couche de sortie\n"," output_layer = tf.keras.layers.Dense(1, activation='sigmoid')(dropout_2)\n","\n"," # Créer et compiler le modèle avec un optimiseur efficace sur GPU\n"," model = tf.keras.Model(inputs=input_layer, outputs=output_layer)\n","\n"," # Utiliser un taux d'apprentissage avec décroissance\n"," # lr_schedule = tf.keras.optimizers.schedules.ExponentialDecay(\n"," # initial_learning_rate=0.001,\n"," # decay_steps=1000,\n"," # decay_rate=0.9,\n"," # staircase=True\n"," # )\n","\n"," model.compile(\n"," optimizer=tf.keras.optimizers.Adam(learning_rate=0.001), # taux fixe\n"," loss='binary_crossentropy',\n"," # on ajoute aussi le rappel car on veut tout de même limiter le nombre de faux négatifs\n"," metrics=[keras.metrics.Precision(name='precision'), keras.metrics.Recall(name='recall')]\n"," )\n","\n"," return model"]},{"cell_type":"markdown","metadata":{"id":"S_tupAxrNwMx"},"source":["## Fonction de sauvegarde locale des artefacts du modèle\n","\n","Sauvegarde tous les artefacts du modèle (modèle, tokenizer, fonction de prétraitement, historique) dans un sous-dossier dédié."]},{"cell_type":"code","execution_count":null,"metadata":{"id":"Mxy90vFuNwMx"},"outputs":[],"source":["import os\n","import dill # Plus puissant que pickle pour sauvegarder des fonctions\n","import datetime\n","import json\n","\n","def save_model_artifacts(model, model_name, vectorizer_name, history, tokenizer):\n"," \"\"\"\n"," Sauvegarde tous les artefacts du modèle (modèle, tokenizer, fonction de prétraitement, historique)\n"," dans un sous-dossier dédié.\n"," \"\"\"\n","\n"," # Créer un sous-dossier dédié pour ce modèle\n"," model_dir = f\"content/advanced-model/{model_name}_{vectorizer_name}\"\n"," os.makedirs(model_dir, exist_ok=True)\n","\n"," # Sous-dossiers pour les différents types d'artefacts\n"," checkpoints_dir = f\"{model_dir}/checkpoints\"\n"," os.makedirs(checkpoints_dir, exist_ok=True)\n","\n"," # 1. Sauvegarder le modèle final\n"," model_path = f\"{model_dir}/final_model_{model_name}_{vectorizer_name}.keras\"\n"," model.save(model_path)\n"," print(f\"Modèle sauvegardé dans {model_path}\")\n","\n"," # 2. Sauvegarder le tokenizer\n"," tokenizer_path = f\"{model_dir}/tokenizer.pickle\"\n"," with open(tokenizer_path, 'wb') as handle:\n"," pickle.dump(tokenizer, handle, protocol=pickle.HIGHEST_PROTOCOL)\n"," print(f\"Tokenizer sauvegardé dans {tokenizer_path}\")\n","\n"," # 3. Sauvegarder la fonction de prétraitement\n"," preprocess_path = f\"{model_dir}/preprocess_function.dill\"\n"," with open(preprocess_path, 'wb') as handle:\n"," dill.dump(preprocess_tweet, handle)\n"," print(f\"Fonction de prétraitement sauvegardée dans {preprocess_path}\")\n","\n"," # 4. Sauvegarder l'historique d'entraînement\n"," if history is not None:\n"," history_path = f\"{model_dir}/training_history.pickle\"\n"," with open(history_path, 'wb') as handle:\n"," pickle.dump(history.history, handle, protocol=pickle.HIGHEST_PROTOCOL)\n"," print(f\"Historique d'entraînement sauvegardé dans {history_path}\")\n","\n"," # 5. Sauvegarder les paramètres utilisés - Version ultra-sécurisée\n"," params_path = f\"{model_dir}/parameters.json\"\n","\n"," # Déterminer la dimension d'embedding de façon sûre\n"," embedding_dim = None\n","\n"," # Méthode 1: Accéder directement à l'attribut output_dim des couches Embedding\n"," for layer in model.layers:\n"," if isinstance(layer, tf.keras.layers.Embedding):\n"," embedding_dim = layer.output_dim\n"," break\n","\n"," # Méthode 2: Si ce n'est pas trouvé, utiliser une valeur basée sur le nom du vectorizer\n"," if embedding_dim is None:\n"," if 'word2vec' in vectorizer_name.lower():\n"," embedding_dim = 300 # Dimension standard pour Word2Vec\n"," elif 'glove' in vectorizer_name.lower() and '300d' in vectorizer_name.lower():\n"," embedding_dim = 300\n"," else:\n"," embedding_dim = 100 # Valeur par défaut\n","\n"," params = {\n"," \"model_name\": model_name,\n"," \"vectorizer_name\": vectorizer_name,\n"," \"max_sequence_length\": MAX_SEQUENCE_LENGTH,\n"," \"vocab_size\": MAX_VOCAB_SIZE,\n"," \"embedding_dim\": embedding_dim,\n"," \"date_created\": datetime.datetime.now().strftime(\"%Y-%m-%d %H:%M:%S\"),\n"," }\n"," with open(params_path, 'w') as f:\n"," json.dump(params, f, indent=4)\n"," print(f\"Paramètres sauvegardés dans {params_path}\")\n","\n"," return model_dir"]},{"cell_type":"markdown","metadata":{"id":"BZLUgq5gNwMx"},"source":["## Entraînement : LSTM avec Word2Vec\n","\n","Nous créons un modèle d'analyse de sentiment des tweets basé sur des **réseaux de neurones récurrents (LSTM)** avec des **embeddings Word2Vec**.\n","\n","Nous chargeons d'abord les embeddings Word2Vec pré-entraînés et les intègrons dans la matrice d'embedding, puis nous définissons une **fonction d'entraînement complète** qui:\n","\n","- Crée un **modèle LSTM bidirectionnel** optimisé pour GPU\n","- Configure des **callbacks** comme early stopping, réduction du taux d'apprentissage et sauvegarde des meilleurs modèles\n","- Entraîne le modèle sur des **données de tweets** prétraitées en utilisant des optimisations GPU\n","- Évalue les **performances du modèle** avec diverses métriques (précision, rappel, F1, etc.)\n","- **Sauvegarde les artefacts du modèle** (modèle final, tokenizer, fonction de prétraitement)\n","- **Enregistre tous les paramètres et résultats dans MLflow** pour faciliter le suivi des expériences\n","- Génère des **visualisations des courbes d'apprentissage**\n","- Retourne le modèle entraîné, son historique et ses métriques de performance\n"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"qOq86PFNNwMx","outputId":"8ff016a9-09d8-4a8b-fc9e-d0cbef7197f2","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1751829803818,"user_tz":-120,"elapsed":13373,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[{"output_type":"stream","name":"stdout","text":["Chargement des embeddings Word2Vec...\n","Trouvé 500000 vecteurs d'embeddings Word2Vec.\n","Création de la matrice d'embedding pour 83730 mots...\n"]},{"output_type":"stream","name":"stderr","text":["Création matrice d'embedding: 100%|██████████| 83730/83730 [00:00<00:00, 355633.78it/s]"]},{"output_type":"stream","name":"stdout","text":["Trouvé 22721 mots (27.14%) dans les embeddings pré-entraînés.\n","Forme de la matrice d'embedding: (83731, 300)\n","Échantillon de valeurs: [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n","Type de données: float64\n"]},{"output_type":"stream","name":"stderr","text":["\n"]}],"source":["word2vec_embeddings = load_word2vec_embeddings()\n","word2vec_matrix = create_embedding_matrix(tokenizer.word_index, word2vec_embeddings, 300)\n","\n","# Vérifiez la forme et les valeurs de la matrice d'embedding\n","print(\"Forme de la matrice d'embedding:\", word2vec_matrix.shape)\n","print(\"Échantillon de valeurs:\", word2vec_matrix[0, :10]) # Affiche les 10 premières valeurs de la première ligne\n","print(\"Type de données:\", word2vec_matrix.dtype)"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"KXMLd7jqNwMx"},"outputs":[],"source":["# Créer une fonction pour configurer le callback ModelCheckpoint\n","def create_model_checkpoint(model_name, vectorizer_name):\n"," \"\"\"\n"," Crée un callback ModelCheckpoint qui sauvegarde uniquement le meilleur modèle.\n"," \"\"\"\n"," # Créer le dossier pour les checkpoints\n"," checkpoint_dir = f\"content/advanced-model/{model_name}_{vectorizer_name}/checkpoints\"\n"," os.makedirs(checkpoint_dir, exist_ok=True)\n","\n"," # Créer un seul checkpoint pour le meilleur modèle\n"," best_checkpoint = tf.keras.callbacks.ModelCheckpoint(\n"," filepath=f\"{checkpoint_dir}/best_model.keras\",\n"," # on décide de monitorer val_precision car c'est ce que l'on souhaite maximiser\n"," # monitor='val_loss',\n"," monitor='val_precision',\n"," save_best_only=True,\n"," # mode='min',\n"," mode='max',\n"," verbose=1\n"," )\n","\n"," return best_checkpoint"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"JGLT8JhWNwMx"},"outputs":[],"source":["def train_word2vec_lstm_model(epochs=20):\n"," \"\"\"\n"," Entraîne un modèle LSTM avec embeddings Word2Vec en utilisant les optimisations GPU\n"," et le chargement de données optimisé.\n"," \"\"\"\n"," # Définir le nom du modèle et de la méthode d'embedding\n"," model_name = \"LSTM\"\n"," vectorizer_name = \"Word2Vec-Fige\"\n","\n"," # Créer les callbacks pour ce modèle\n"," checkpoint_callback = create_model_checkpoint(model_name, vectorizer_name)\n","\n"," # Autres callbacks\n"," early_stopping = tf.keras.callbacks.EarlyStopping(\n"," monitor='val_loss',\n"," patience=5,\n"," restore_best_weights=True\n"," )\n","\n"," reduce_lr = tf.keras.callbacks.ReduceLROnPlateau(\n"," monitor='val_loss',\n"," factor=0.2,\n"," patience=2,\n"," min_lr=0.00001\n"," )\n","\n"," # TensorBoard pour visualiser l'entraînement\n"," tensorboard_dir = f\"content/advanced-model/{model_name}_{vectorizer_name}/logs\"\n"," os.makedirs(tensorboard_dir, exist_ok=True)\n"," tensorboard_callback = tf.keras.callbacks.TensorBoard(\n"," log_dir=tensorboard_dir,\n"," histogram_freq=1,\n"," update_freq='epoch'\n"," )\n","\n"," # Créer le modèle optimisé pour GPU\n"," model = create_optimized_lstm_model(word2vec_matrix, trainable=False)\n","\n"," print(f\"Entraînement du modèle {model_name} avec embeddings {vectorizer_name}\")\n"," print(f\"Taille du batch: {BATCH_SIZE}\")\n"," print(f\"Utilisation de la précision mixte: {tf.keras.mixed_precision.global_policy().name}\")\n","\n"," # Entraîner le modèle avec les datasets optimisés\n"," history = model.fit(\n"," train_dataset,\n"," epochs=epochs,\n"," validation_data=val_dataset,\n"," callbacks=[early_stopping, reduce_lr, tensorboard_callback, checkpoint_callback],\n"," verbose=1\n"," )\n","\n"," # Déterminer le nombre réel d'époques complétées (en cas d'early stopping)\n"," real_epochs = len(history.history['loss'])\n"," print(f\"Nombre réel d'époques effectuées: {real_epochs}/{epochs}\")\n","\n"," # Sauvegarder tous les artefacts\n"," model_dir = save_model_artifacts(model, model_name, vectorizer_name, history, tokenizer)\n","\n"," # Utiliser evaluate_model pour obtenir les métriques\n"," metrics, cm, report, y_pred, y_pred_proba = evaluate_model(\n"," model,\n"," X_test_pad,\n"," y_test\n"," )\n","\n"," # Afficher les métriques\n"," print(\"\\nMétriques pour le modèle LSTM avec embedding Word2Vec:\")\n"," for key, value in metrics.items():\n"," print(f\"{key}: {value:.4f}\")\n","\n"," print(\"\\nRapport de classification:\")\n"," print(report)\n","\n","\n"," # Enregistrer avec MLflow\n"," params = {\n"," 'model_type': model_name,\n"," 'embedding_type': vectorizer_name,\n"," 'embedding_dim': word2vec_matrix.shape[1],\n"," 'vocab_size': len(tokenizer.word_index) + 1,\n"," 'max_sequence_length': MAX_SEQUENCE_LENGTH,\n"," 'trainable_embedding': False,\n"," 'max_epochs': epochs,\n"," 'real_epochs': real_epochs, # Ajouter le nombre réel d'époques\n"," 'batch_size': BATCH_SIZE,\n"," 'precision_policy': tf.keras.mixed_precision.global_policy().name,\n"," 'gpu_optimization': 'XLA,dynamic_memory,prefetch',\n"," 'sample_size': sample_size*2\n","\n"," }\n","\n"," # Enregistrer dans MLflow\n"," # run_id = log_model_to_mlflow(model, model_name, vectorizer_name, metrics, cm, report, X_test_pad, y_test, params)\n"," run_id = log_model_to_mlflow(model, model_name, vectorizer_name, metrics, cm, report, X_test_pad, y_test, history, params)\n","\n"," # Visualiser la courbe d'apprentissage\n"," plot_training_history(history, \"LSTM\", \"Word2Vec-Fige\", run_id=run_id)\n","\n"," # Récupérer le lien vers le run MLflow\n"," print(f\"\\nRun MLflow ID: {run_id}\")\n"," print(f\"Accédez à l'interface MLflow pour voir les détails complets.\")\n","\n"," return model, history, metrics, run_id"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"O8S9kFSFNwMx","outputId":"734480a6-2aa0-45e8-e3df-36ba91d7328f","colab":{"base_uri":"https://localhost:8080/","height":1000},"executionInfo":{"status":"ok","timestamp":1751830269652,"user_tz":-120,"elapsed":465796,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[{"output_type":"stream","name":"stdout","text":["Entraînement du modèle LSTM avec embeddings Word2Vec-Fige\n","Taille du batch: 256\n","Utilisation de la précision mixte: mixed_float16\n","Epoch 1/50\n","\u001b[1m563/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 26ms/step - loss: 0.5872 - precision: 0.6836 - recall: 0.6817\n","Epoch 1: val_precision improved from -inf to 0.74873, saving model to content/advanced-model/LSTM_Word2Vec-Fige/checkpoints/best_model.keras\n","\u001b[1m563/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m45s\u001b[0m 58ms/step - loss: 0.5871 - precision: 0.6837 - recall: 0.6818 - val_loss: 0.5082 - val_precision: 0.7487 - val_recall: 0.7563 - learning_rate: 0.0010\n","Epoch 2/50\n","\u001b[1m563/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 26ms/step - loss: 0.5207 - precision: 0.7410 - recall: 0.7456\n","Epoch 2: val_precision improved from 0.74873 to 0.77025, saving model to content/advanced-model/LSTM_Word2Vec-Fige/checkpoints/best_model.keras\n","\u001b[1m563/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m25s\u001b[0m 45ms/step - loss: 0.5207 - precision: 0.7410 - recall: 0.7456 - val_loss: 0.4784 - val_precision: 0.7703 - val_recall: 0.7720 - learning_rate: 0.0010\n","Epoch 3/50\n","\u001b[1m563/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 18ms/step - loss: 0.4919 - precision: 0.7598 - recall: 0.7715\n","Epoch 3: val_precision did not improve from 0.77025\n","\u001b[1m563/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m17s\u001b[0m 30ms/step - loss: 0.4919 - precision: 0.7598 - recall: 0.7715 - val_loss: 0.4653 - val_precision: 0.7639 - val_recall: 0.7960 - learning_rate: 0.0010\n","Epoch 4/50\n","\u001b[1m562/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 17ms/step - loss: 0.4779 - precision: 0.7699 - recall: 0.7760\n","Epoch 4: val_precision did not improve from 0.77025\n","\u001b[1m563/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m16s\u001b[0m 29ms/step - loss: 0.4779 - precision: 0.7699 - recall: 0.7760 - val_loss: 0.4610 - val_precision: 0.7637 - val_recall: 0.8117 - learning_rate: 0.0010\n","Epoch 5/50\n","\u001b[1m561/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 17ms/step - loss: 0.4692 - precision: 0.7706 - recall: 0.7891\n","Epoch 5: val_precision did not improve from 0.77025\n","\u001b[1m563/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m20s\u001b[0m 29ms/step - loss: 0.4691 - precision: 0.7706 - recall: 0.7891 - val_loss: 0.4646 - val_precision: 0.7382 - val_recall: 0.8591 - learning_rate: 0.0010\n","Epoch 6/50\n","\u001b[1m562/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 18ms/step - loss: 0.4627 - precision: 0.7774 - recall: 0.7892\n","Epoch 6: val_precision improved from 0.77025 to 0.77874, saving model to content/advanced-model/LSTM_Word2Vec-Fige/checkpoints/best_model.keras\n","\u001b[1m563/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m17s\u001b[0m 30ms/step - loss: 0.4627 - precision: 0.7774 - recall: 0.7892 - val_loss: 0.4524 - val_precision: 0.7787 - val_recall: 0.7977 - learning_rate: 0.0010\n","Epoch 7/50\n","\u001b[1m563/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 18ms/step - loss: 0.4556 - precision: 0.7805 - recall: 0.7927\n","Epoch 7: val_precision did not improve from 0.77874\n","\u001b[1m563/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m22s\u001b[0m 32ms/step - loss: 0.4556 - precision: 0.7805 - recall: 0.7927 - val_loss: 0.4540 - val_precision: 0.7754 - val_recall: 0.8076 - learning_rate: 0.0010\n","Epoch 8/50\n","\u001b[1m561/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 17ms/step - loss: 0.4521 - precision: 0.7847 - recall: 0.7925\n","Epoch 8: val_precision did not improve from 0.77874\n","\u001b[1m563/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m16s\u001b[0m 29ms/step - loss: 0.4521 - precision: 0.7847 - recall: 0.7925 - val_loss: 0.4514 - val_precision: 0.7682 - val_recall: 0.8142 - learning_rate: 0.0010\n","Epoch 9/50\n","\u001b[1m563/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 17ms/step - loss: 0.4450 - precision: 0.7874 - recall: 0.7984\n","Epoch 9: val_precision did not improve from 0.77874\n","\u001b[1m563/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m21s\u001b[0m 30ms/step - loss: 0.4450 - precision: 0.7874 - recall: 0.7984 - val_loss: 0.4492 - val_precision: 0.7741 - val_recall: 0.8102 - learning_rate: 0.0010\n","Epoch 10/50\n","\u001b[1m562/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 16ms/step - loss: 0.4412 - precision: 0.7906 - recall: 0.7971\n","Epoch 10: val_precision improved from 0.77874 to 0.79515, saving model to content/advanced-model/LSTM_Word2Vec-Fige/checkpoints/best_model.keras\n","\u001b[1m563/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m17s\u001b[0m 30ms/step - loss: 0.4412 - precision: 0.7906 - recall: 0.7971 - val_loss: 0.4496 - val_precision: 0.7952 - val_recall: 0.7727 - learning_rate: 0.0010\n","Epoch 11/50\n","\u001b[1m562/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 16ms/step - loss: 0.4344 - precision: 0.7928 - recall: 0.8052\n","Epoch 11: val_precision did not improve from 0.79515\n","\u001b[1m563/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m17s\u001b[0m 31ms/step - loss: 0.4344 - precision: 0.7928 - recall: 0.8052 - val_loss: 0.4515 - val_precision: 0.7818 - val_recall: 0.8014 - learning_rate: 0.0010\n","Epoch 12/50\n","\u001b[1m563/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 18ms/step - loss: 0.4256 - precision: 0.7980 - recall: 0.8075\n","Epoch 12: val_precision did not improve from 0.79515\n","\u001b[1m563/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m16s\u001b[0m 29ms/step - loss: 0.4256 - precision: 0.7980 - recall: 0.8075 - val_loss: 0.4455 - val_precision: 0.7865 - val_recall: 0.7943 - learning_rate: 2.0000e-04\n","Epoch 13/50\n","\u001b[1m561/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 16ms/step - loss: 0.4206 - precision: 0.8006 - recall: 0.8104\n","Epoch 13: val_precision did not improve from 0.79515\n","\u001b[1m563/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m21s\u001b[0m 29ms/step - loss: 0.4206 - precision: 0.8006 - recall: 0.8104 - val_loss: 0.4451 - val_precision: 0.7867 - val_recall: 0.8019 - learning_rate: 2.0000e-04\n","Epoch 14/50\n","\u001b[1m561/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 16ms/step - loss: 0.4170 - precision: 0.8040 - recall: 0.8117\n","Epoch 14: val_precision did not improve from 0.79515\n","\u001b[1m563/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m17s\u001b[0m 29ms/step - loss: 0.4170 - precision: 0.8040 - recall: 0.8117 - val_loss: 0.4419 - val_precision: 0.7950 - val_recall: 0.7912 - learning_rate: 2.0000e-04\n","Epoch 15/50\n","\u001b[1m561/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 19ms/step - loss: 0.4170 - precision: 0.8052 - recall: 0.8142\n","Epoch 15: val_precision did not improve from 0.79515\n","\u001b[1m563/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m21s\u001b[0m 31ms/step - loss: 0.4170 - precision: 0.8053 - recall: 0.8142 - val_loss: 0.4468 - val_precision: 0.7831 - val_recall: 0.8031 - learning_rate: 2.0000e-04\n","Epoch 16/50\n","\u001b[1m562/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 17ms/step - loss: 0.4142 - precision: 0.8058 - recall: 0.8151\n","Epoch 16: val_precision did not improve from 0.79515\n","\u001b[1m563/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m19s\u001b[0m 29ms/step - loss: 0.4142 - precision: 0.8058 - recall: 0.8151 - val_loss: 0.4477 - val_precision: 0.7841 - val_recall: 0.7965 - learning_rate: 2.0000e-04\n","Epoch 17/50\n","\u001b[1m560/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 18ms/step - loss: 0.4102 - precision: 0.8085 - recall: 0.8159\n","Epoch 17: val_precision did not improve from 0.79515\n","\u001b[1m563/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m16s\u001b[0m 28ms/step - loss: 0.4102 - precision: 0.8085 - recall: 0.8159 - val_loss: 0.4485 - val_precision: 0.7838 - val_recall: 0.8012 - learning_rate: 4.0000e-05\n","Epoch 18/50\n","\u001b[1m562/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 16ms/step - loss: 0.4108 - precision: 0.8076 - recall: 0.8137\n","Epoch 18: val_precision did not improve from 0.79515\n","\u001b[1m563/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m21s\u001b[0m 29ms/step - loss: 0.4108 - precision: 0.8076 - recall: 0.8138 - val_loss: 0.4487 - val_precision: 0.7842 - val_recall: 0.7999 - learning_rate: 4.0000e-05\n","Epoch 19/50\n","\u001b[1m561/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 17ms/step - loss: 0.4088 - precision: 0.8077 - recall: 0.8180\n","Epoch 19: val_precision did not improve from 0.79515\n","\u001b[1m563/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m17s\u001b[0m 29ms/step - loss: 0.4088 - precision: 0.8077 - recall: 0.8180 - val_loss: 0.4472 - val_precision: 0.7844 - val_recall: 0.8043 - learning_rate: 1.0000e-05\n","Nombre réel d'époques effectuées: 19/50\n","Modèle sauvegardé dans content/advanced-model/LSTM_Word2Vec-Fige/final_model_LSTM_Word2Vec-Fige.keras\n","Tokenizer sauvegardé dans content/advanced-model/LSTM_Word2Vec-Fige/tokenizer.pickle\n","Fonction de prétraitement sauvegardée dans content/advanced-model/LSTM_Word2Vec-Fige/preprocess_function.dill\n","Historique d'entraînement sauvegardé dans content/advanced-model/LSTM_Word2Vec-Fige/training_history.pickle\n","Paramètres sauvegardés dans content/advanced-model/LSTM_Word2Vec-Fige/parameters.json\n","\u001b[1m1250/1250\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 5ms/step\n","\n","Métriques pour le modèle LSTM avec embedding Word2Vec:\n","accuracy: 0.7898\n","precision: 0.7970\n","recall: 0.7777\n","f1: 0.7872\n","roc_auc: 0.8748\n","\n","Rapport de classification:\n"," precision recall f1-score support\n","\n"," Négatif 0.78 0.80 0.79 20000\n"," Positif 0.80 0.78 0.79 20000\n","\n"," accuracy 0.79 40000\n"," macro avg 0.79 0.79 0.79 40000\n","weighted avg 0.79 0.79 0.79 40000\n","\n"]},{"output_type":"stream","name":"stderr","text":["2025/07/06 19:30:24 WARNING mlflow.models.model: `artifact_path` is deprecated. Please use `name` instead.\n"]},{"output_type":"stream","name":"stdout","text":["🏃 View run Modele_Avance_LSTM_Word2Vec-Fige at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1/runs/1de54538ee73443687db131fcc86d922\n","🧪 View experiment at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1\n","🏃 View run Modele_Avance_LSTM_Word2Vec-Fige at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1/runs/1de54538ee73443687db131fcc86d922\n","🧪 View experiment at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1\n","\n","Run MLflow ID: 1de54538ee73443687db131fcc86d922\n","Accédez à l'interface MLflow pour voir les détails complets.\n"]},{"output_type":"display_data","data":{"text/plain":["
"],"image/png":"iVBORw0KGgoAAAANSUhEUgAABKUAAAHqCAYAAADVi/1VAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3Xd8k9X+wPHPkzbdu7SUllJKWzayZM+CDAWZThwMBcX1c6JXQbkKXrkuVJxwRXGhosiUvWTvvcpeLW0ppYuOJOf3R0hoaFoKtE3H9/169dXmGec5z0nSnPPNGZpSSiGEEEIIIYQQQgghRBnSOToDQgghhBBCCCGEEKLqkaCUEEIIIYQQQgghhChzEpQSQgghhBBCCCGEEGVOglJCCCGEEEIIIYQQosxJUEoIIYQQQgghhBBClDkJSgkhhBBCCCGEEEKIMidBKSGEEEIIIYQQQghR5iQoJYQQQgghhBBCCCHKnASlhBBCCCGEEEIIIUSZk6CUqDD27NmDl5cXPXr0IDc319HZEUIIIYQQQgghxC2QoJSoEFJTUxk4cCANGzZk9uzZuLi43HRaq1atQtM0xo8ff1Pnf/fdd2iaxnfffXfTeRBCQNeuXdE0zdHZKJekbIQQQoiK7VbbHJWZlI3IT4JSosRommbz4+TkRLVq1ejWrRs///zzTadrMpkYMmQIer2ehQsX4uXlVYK5rtosDd9Vq1YV6/gtW7bw0EMPERERgaurKz4+PkRFRXH33Xfz3//+l8zMTABq165d4PVQ1I/lA2n8+PHWbY8++mih+Vi9erX1uNq1a99iKVRcRqMRPz8/9Ho96enpBfbHx8dby2n69Ol20+jSpQuaprFmzZrSzm6xnD17ls8++4w777yT2rVr4+rqSmBgID169ODPP/+0OfbSpUt4enri7u7OxYsXi0z39OnTODk5ERwc7NCelsOGDSvyvdC1a1eH5U0IUTlZ/r9URZaGb3H/t2ZnZ/PBBx/Qpk0bfH19cXFxoUaNGrRs2ZJnnnmG1atXA1e/oLyRHwvLY51Ox9GjRwvNS2xsrPXYqvxF6Icffoimabz66qt29z/xxBNF1gdXrlyJpml069atFHNZfEopFi1axLPPPkuzZs3w9/fHzc2NevXq8fzzz3P+/Hmb49944w00TWPMmDHXTXvUqFFomsbHH39cWtm/rhMnTlz3vVDcdoeoOpwdnQFR+bz11lsA5OXlcfDgQebMmcPKlSvZunUrH3300Q2nd/jwYVq3bs3XX39NtWrVbjl/rVu35sCBAzed1sCBA2nbti01atS45bxUJD/++CNDhw5FKUW3bt0YOHAg7u7unDx5krVr1zJ//nwGDRpEdHQ0zz//PKmpqTbnf/fdd5w8eZKhQ4cWqDhcW1l0dnZm1qxZfPrpp/j5+RXIy9SpU3F2dsZgMJTsTVYwTk5OdO3alTlz5rBmzRr69Oljs3/58uWAuQK8YsUKhg8fbrM/KyuLjRs34unpSbt27cos30X57LPPmDRpEpGRkcTGxhISEsLJkyf5888/WbZsGS+88IL1/4ivry/33nsv33//PT/88APPPfdcoel+++23mEwmhg4deks9LUtK//79adasWYHtlvfGjBkzyMrKKttMCSFEFZaRkUGXLl3Yvn07ISEhDB48mJCQEDIyMti1axfffPMNqampdOnShWbNmlnruxYnTpzg+++/JyIigmHDhhV5LUsd5n//+x/vvvtugf1xcXGsWrVK6jpA9+7dAVixYoXd/cuXL0fTNE6ePMnRo0eJiooqsB/gjjvuKN2MFlNOTg533nknLi4udO7cmTvuuAOj0ciKFSv45JNPmDlzJv/88w8xMTEAPP744/znP/9hxowZTJw4Eb1ebzfdzMxMZs6ciaurK0OHDi3LW7LL19eX559/3u6+2rVrExwcfEvtMVHJKCFKCKDsvaSWLVumNE1Tmqap48ePl33GRKG6dOmiALVy5coij8vMzFQ+Pj7KyclJLVu2zO4x69atUxcvXryla7311lsKUAMGDFCAmjJlSoFjUlJSlJubmxo4cKACVERERJF5r+w++eQTBagXX3yxwL7hw4crd3d31adPHxUWFlZg/+LFixWgevfuXRZZLcDymsjvjz/+UKtWrSpw7P79+5WPj48C1NatW63b161bpwDVpEmTQq9jNBpVRESEAtThw4dL7gZuwtChQxWgpk+f7tB8CCGqjsLqZ1XBypUrFaC6dOly3WPfeecdBaiePXuqnJycAvtTUlLUunXrbvlagAoLC1O33367CgkJUXl5eQWOGTNmjAKsdZ2q/JlhMplUYGCgcnJyUqmpqTb7Tp48qQB17733KkB98803Bc5v166dAtTGjRvLKstWltfEW2+9Zd2Wm5urJkyYoFJS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7nSrdayy8tVXXxWow1kcPHjQOhSqNOo6EyZMYPbs2SxevNga/LoZtWvXJi4uziawoJRi/PjxRf6vf/TRR9HpdMyYMYMZM2YA2O2J9swzz6DX63nhhRcKzO0D5qGO+YMDLVu2pH379uzcuZNJkyYVOP7ChQtkZ2cX+/4sdZ1x48YBtj3CAerVq0eNGjX48ccfOXToENHR0TZ17w4dOlCvXj3Wrl3LrFmzbM6dNWsW//zzD3Xr1rU7p5E9er2ehx56iPT09ALzGW3dupWffvrJ7nk7d+601snmzJlDnz59inU9sO0V/t1336HX6ws8V/379ycqKorPP/+chQsX2k1nw4YN1rqek5MTTz31FJcvX+bJJ58sMMQzNzfXpudjaenQoQNRUVGsXLmywBeB33zzjd3X3PDhw/Hz8+Pf//43mzdvLrDfZDIVGRwU5YPMKSXKpSlTphAXF8ebb77JDz/8QMeOHalevTrnzp3jwIEDbNmyhV9++cU6qXbPnj0ZO3YsEyZMoEGDBgwYMIDw8HDOnz/P2rVradu2Ld99912h1/vhhx/4+uuv6dixI1FRUfj7+3P06FHmzZuHq6vrdcdJe3l58e2333LvvffSpUsX7r33XmrVqsW2bdtYsmQJISEhfP311yVYQiXrvffeK7R8nnvuOXQ6Hf/3f//HK6+8QocOHWjcuDHe3t4kJiayYsUKjh07RnBwMB9++GGp5K9nz563nMbdd99NdHQ0H330EXv27KF58+acOnWK+fPn06dPH06dOlXouUOHDmXatGn861//sj62p6xft/lVr17d2gMI7E/iaam87dmzx+4xQ4YMYc6cOfz22280atSIAQMGoGkaf/31F8ePH+f+++/noYceKlZ+wFw5fu+993jppZdo3rw5999/P76+vixevJjU1FRuu+02du/ebXPO22+/zbRp03B3d6dZs2a89957BdJt1qwZAwYMsHvNUaNGMXPmTGul2N4wiBEjRrBt2za++OILoqKi6NWrF7Vq1SIlJYXjx4+zZs0ahg8fzldffQVAtWrV+Pnnn7nnnnuIjY3lzjvv5LbbbiMtLY3du3dz+vTpMhkC9+ijjzJz5kwWLVpE48aN6devH3l5efzxxx+0atWKQ4cOFQhEjhs3jl27dvHVV18xb948unXrRlhYGImJicTFxbFu3TomTpwok38KUQUUNdzt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gKwMyDhUN6rKSU+FI4e9da8O7qnLRThDz8SlpFT3ZQafQaDLReWAob4ORUREREREREQ6OeMOgIQkSEjCnPX1dqe62jvlrzZJlXHI57WtlZTyMeuCy4j57m1kZGTgOM7JDxARERERERERaSHjckFcH4jrgxk13tfhAOA/1a1ERERERERERKTbUFJKREREREREREQ6nJJSIiIiIiIiIiLS4ZSUEhERERERERGRDqeklIiIiIiIiIiIdDglpUREREREREREpMMpKSUiIiIiIiIiIh1OSSkREREREREREelwbl8HICIiIiKtt2LFCt544w3y8vJITk7mlltuYeDAgSc9bt26dTzzzDOMGTOGe++9t2674zgsXryY999/n+LiYoYMGcKtt95KfHx8e96GiIiIdCMaKSUiIiLSya1fv56FCxfyne98h3nz5pGcnMzcuXPJz88/4XFZWVm88MILDB06tMF7r732Gm+99RazZs3iscceIzAwkLlz51JRUdFetyEiIiLdjJJSIiIiIp3cm2++ybRp05gyZQqJiYnMmjULj8fDqlWrmjzGtm0WLFjANddcQ2xsbL33HMdh+fLlXHXVVYwdO5bk5GTuuusujh07xmeffdbetyMiIiLdhJJSIiIiIp1YVVUV+/btY/jw4XXbLMti+PDh7Nq1q8njlixZQkREBFOnTm3wXlZWFnl5eYwYMaJuW0hICAMHDjzhOUVERERaQjWlRERERDqxgoICbNsmKiqq3vaoqCjS09MbPWbnzp2sXLmSJ554otH38/LyAIiMjKy3PTIysu69xlRWVlJZWVn32hhDcHBw3fdtqfZ8bX3ezkRtoDbo7vcPagNQG4DaADpvGygpJSIiItKNlJaWsmDBAm677TYiIiLa9NxLly5lyZIlda/79evHvHnziImJadPrHC8uLq7dzt1ZqA3UBt39/kFtAGoDUBtA52sDJaVEREREOrGIiAgsy2owgikvL6/B6CmAI0eOkJ2dzbx58+q2OY4DwHXXXcf8+fPrjsvPz6dHjx51++Xn55OSktJkLFdeeSUzZ86se137aW12djZVVVUtvLMTM8YQFxdHZmZmXfzdjdpAbdDd7x/UBqA2ALUB+F8buN3uZn0opaRUC7jd7ddc7XnuzkJtoDYAtQGoDUBt0N3vH/yrDfwplsa43W769+/Ptm3bGDduHOAtYr5t2zamT5/eYP+EhASefPLJetsWLVpEWVkZ3//+9+nVqxcul4uoqCi2bt1al4QqKSlhz549XHTRRU3GEhAQQEBAQKMxtheXy9Vu5+4s1AZqg+5+/6A2ALUBqA3Af9qguf/2+3cvy88c/0lhW2vPYe2dhdpAbQBqA1AbgNqgu98/qA1aaubMmTz//PP079+fgQMHsnz5csrLy5k8eTIAzz33HNHR0dxwww14PB6SkpLqHR8aGgpQb/uMGTP473//S3x8PLGxsSxatIgePXowduzYFsenPlT7UhuoDbr7/YPaANQGoDaAztcGWn3Px0pLS7nvvvsoLS31dSg+ozZQG4DaANQGoDbo7vcPaoNTNWHCBL773e+yePFi7r33Xg4cOMDs2bPrpuHl5ORw7NixFp3z8ssvZ/r06fzxj3/k/vvvp7y8nNmzZ+PxeNrhDlpOz4raANQG3f3+QW0AagNQG0DnbQONlPIxx3HYv3+/X8z59BW1gdoA1AagNgC1QXe/f1AbtMb06dMbna4HMGfOnBMee+eddzbYZozh2muv5dprr22L8NqcnhW1AagNuvv9g9oA1AagNoDO2wYaKSUiIiIiIiIiIh1OSSkREREREREREelwSkr5WEBAAN/5zncaXammu1AbqA1AbQBqA1AbdPf7B7WBNJ+eFbUBqA26+/2D2gDUBqA2gM7bBsbpbBMORURERERERESk09NIKRERERERERER6XBKSomIiIiIiIiISIdTUkpERERERERERDqc29cBdAcrVqzgjTfeIC8vj+TkZG655RYGDhzY5P4fffQRr7zyCtnZ2cTFxXHjjTcyevToDoy47SxdupRPP/2Uw4cP4/F4GDx4MDfddBMJCQlNHrN69Wp+//vf19sWEBDAiy++2N7htovFixezZMmSetsSEhKYP39+k8d0pWcA4M477yQ7O7vB9osuuohbb721wfau8Axs376d119/nf3793Ps2DHuvvtuxo0bV/e+4zgsXryY999/n+LiYoYMGcKtt95KfHz8Cc/b0t8nvnSiNqiqqmLRokVs3LiRrKwsQkJCGD58ODfccAPR0dFNnvNUfp586WTPwfPPP8+aNWvqHXPmmWfyy1/+8oTn7SzPwcnu/5prrmn0uJtuuonLLrus0fc62zMgrfViabcAAA6/SURBVKM+lPpQ6kN1rz6U+k/qP4H6T9C9+lBKSrWz9evXs3DhQmbNmsWgQYNYtmwZc+fOZf78+URGRjbY/6uvvuKZZ57hhhtuYPTo0Xz44Yf89re/Zd68eSQlJfngDlpn+/btXHzxxQwYMIDq6mpefvllfv3rX/P0008TFBTU5HHBwcE888wzHRhp++rbty8PPvhg3WvLanqQYld7BgB+85vfYNt23evU1FR+/etfc8455zR5TGd/BsrLy0lJSWHq1Kk8+eSTDd5/7bXXeOutt7jzzjuJjY3llVdeYe7cuTz99NN4PJ5Gz9nS3ye+dqI2qKioYP/+/Xz7298mJSWFoqIi/vGPf/DEE0/w+OOPn/C8Lfl58rWTPQcAI0eO5I477qh77Xaf+J/mzvQcnOz+//SnP9V7vXHjRv7whz9w9tlnn/C8nekZkFOnPpT6UKA+VHfrQ6n/pP4TqP8E3asPpaRUO3vzzTeZNm0aU6ZMAWDWrFls2LCBVatWccUVVzTYf/ny5YwcObIuu3ndddexdetWVqxYwf/+7/92ZOht4pvZ6jvvvJNbb72Vffv2MWzYsCaPM8YQFRXVztF1HMuymn0/Xe0ZAIiIiKj3+tVXX6V3795d+hkYNWoUo0aNavQ9x3FYvnw5V111FWPHjgXgrrvuYtasWXz22Wece+65jR7X0t8nvnaiNggJCan3DyLALbfcwuzZs8nJyaFXr15NnrclP0++dqI2qOV2u1t0P53pOTjZ/X/zvj/77DNOP/10evfufcLzdqZnQE6d+lDqQ4H6UN2tD6X+k/pPoP4TdK8+lJJS7aiqqop9+/bVe8gty2L48OHs2rWr0WN27drFzJkz620788wz+eyzz9oz1A5TUlICQFhY2An3Kysr44477sBxHPr168f1119P3759OyLEdpGZmcltt91GQEAAgwcP5oYbbmjyH42u/gxUVVXxwQcfcOmll2KMaXK/rvYMHC8rK4u8vDxGjBhRty0kJISBAweya9euRjtVp/L7pLMpKSnBGENISMgJ92vJz1NnsH37dm699VZCQ0M544wzuO666wgPD2903678HOTl5bFx40buvPPOk+7b1Z4BaUh9qIbUh1Ifqrv3odR/apz6T927/wSdvw+lpFQ7KigowLbtBpnIqKgo0tPTGz0mLy+vwfDByMhI8vLy2inKjmPbNv/4xz847bTTTjiEOiEhgdtvv53k5GRKSkp4/fXXeeCBB3j66afp2bNnB0bcNgYNGsQdd9xBQkICx44dY8mSJTz00EM89dRTBAcHN9i/Kz8DAJ9++inFxcVMnjy5yX262jPwTbV/ly35ez6V3yedSUVFBS+++CLnnnvuCTtVLf158ncjR47k7LPPJjY2lszMTF5++WUee+wx5s6d2+hw6q78HKxZs4agoKB69RIa09WeAWmc+lD1qQ+lPhSoD6X+U0PqP6n/BJ2/D6WklHSYv/71rxw6dIhHH330hPsNHjyYwYMH13v9s5/9jHfffZfrrruuvcNsc8cPu0xOTq77ZfDRRx8xdepUH0bmG6tWrWLkyJEnLMbY1Z4BObGqqip+97vfATRatPV4Xe3n6fhPdZOSkkhOTuZHP/oRX375JcOHD/dhZB1v1apVTJw4scmaILW62jMg0hzqQ+nnHdSHkvrUf/Lq7v0n6Px9KN9XterCIiIisCyrQeY+Ly+vyXmcUVFR5Ofn19uWn5/vd/M+W+qvf/0rGzZs4OGHH27xpzRut5t+/fqRmZnZTtF1rNDQUBISEpq8n676DABkZ2ezZcsWpk2b1qLjutozUPt32ZK/51P5fdIZ1HaocnJyeOCBB0469PybTvbz1Nn07t2b8PDwJu+nqz4HO3bsID09/ZQ6RF3tGRAv9aG+pj7U19SH6t59KPWfvqb+U33dtf8EXaMPpaRUO3K73fTv359t27bVbbNtm23bttX7BON4gwcPZuvWrfW2bdmyhUGDBrVrrO3FcRz++te/8umnn/LQQw8RGxvb4nPYtk1qaio9evRohwg7XllZGZmZmU3+Auxqz8DxVq1aRWRkZIuXZu5qz0BsbCxRUVH1/p5LSkrYs2dPk78bTuX3ib+r7VBlZmby4IMPNlkH4ERO9vPU2Rw9epSioqImn/Wu+BwArFy5kv79+5OSktLiY7vaMyBe6kOpD9UY9aG6dx9K/Scv9Z8a6q79J+gafSglpdrZzJkzef/991m9ejVpaWn85S9/oby8vG4u+HPPPcdLL71Ut/+MGTPYvHkzb7zxBocPH2bx4sXs3buX6dOn++gOWuevf/0rH3zwAT/5yU8IDg4mLy+PvLw8Kioq6vb5ZhssWbKEzZs3c+TIEfbt28ezzz5LdnZ2iz8Z8hcLFy5k+/btZGVl8dVXX/Hb3/4Wy7I477zzgK7/DNSybZvVq1dz/vnn43K56r3XFZ+BsrIyDhw4wIEDBwBvcc4DBw6Qk5ODMYYZM2bw3//+l88//5zU1FSee+45evToUbeaDMCjjz7KihUr6l6f7PeJvzlRG1RVVfH000+zb98+fvSjH2Hbdt3vh6qqqrpzfLMNTvbz5G9O1AZlZWW88MIL7Nq1i6ysLLZu3coTTzxBXFwcZ555Zt05OvNzcKL7r1VSUsLHH3/c5Cd8nf0ZkFOnPpT6UOpDeXWnPpT6T+o/gfpP0L36UKop1c4mTJhAQUEBixcvJi8vj5SUFGbPnl2Xjaz9BVvrtNNO48c//jGLFi3i5ZdfJj4+nnvuueeERS392TvvvAPAnDlz6m2/44476n4BfLMNioqK+OMf/0heXh6hoaH079+fX//61yQmJnZU2G0qNzeXZ555hsLCQiIiIhgyZAhz586tW+K3qz8DtbZu3UpOTk7dMqzH64rPwN69e3nkkUfqXi9cuBCA888/nzvvvJPLL7+c8vJy/vjHP1JSUsKQIUOYPXt2vbngR44coaCgoO71yX6f+JsTtcHVV1/N559/DsC9995b77iHH36Y008/HWjYBif7efI3J2qDWbNmkZqaypo1ayguLiY6OpoRI0Zw7bXXEhAQUHdMZ34OTvZzALB+/Xocx2myQ9TZnwE5depDqQ+lPpRXd+pDqf+k/hOo/wTdqw9lHMdxfBqBiIiIiIiIiIh0O5q+JyIiIiIiIiIiHU5JKRERERERERER6XBKSomIiIiIiIiISIdTUkpERERERERERDqcklIiIiIiIiIiItLhlJQSEREREREREZEOp6SUiIiIiIiIiIh0OCWlREREREREROT/t3MvIVH1YRzHf45dzMZghhRLScHJaBbDSMzCjSDdNmG4cAIbEHMRyKyFRCHMy95Fu4ggI8+uhdrSJEoQGZUIoqRStBhhvOEdmhYvnhjHeHt7nXN0/H5gkPP3GeZ/ZjH8eM7DH7AcTSkASLHBwUEFg0FNTk7avRUAAIADgwwFpL8jdm8AAPbC4OCgHj58+Nv/t7e3q7S01MIdAQAA7H9kKAB2oikFIK0Eg0Hl5eUlrefn59uwGwAAgIOBDAXADjSlAKSVsrIylZSU2L0NAACAA4UMBcAONKUAHBrRaFThcFihUEgOh0P9/f1aXFyUx+NRQ0ODzp07l1D/7t07GYahz58/KzMzU16vV7W1tSosLEyoi8Vi6u3t1djYmJaXl+VyueT3+1VfX68jR379zG5tbenJkycaGhrS5uamfD6f7t69q1OnTlly/wAAAH+DDAUgVTjoHEBaWV1d1dLSUsJreXk5oWZoaEgDAwO6fv26qqurNT09rba2Ni0sLJg1ExMT6ujo0OLiompqanTjxg19+PBBra2tikajZl0sFtO9e/f05s0blZeXq76+XhUVFXr//r02NjYSPvfx48f6+vWrampqdPXqVY2OjurRo0cp/T4AAAD+BBkKgB2YlAKQVh48eJC0dvToUfX09JjX379/V3d3t9xutyTJ7/erublZL168UF1dnSTp6dOncjqd6ujokNPplCQFAgE1NTXJMAyFw2FJ0rNnz7SwsKDOzs6Ekfdbt24pHo8n7MPpdKqlpUUZGRmSpHg8roGBAa2urio7O3sPvwUAAID/hgwFwA40pQCklYaGBp05cyZhzeFIHAoNBAJmmJIkj8ej8+fPKxKJqK6uTvPz8/ry5YuqqqrMMCVJRUVF8vl8ikQikqQfP35oZGREly5d2vUMhu3gtO3KlSsJaxcvXlRfX5/m5uZUVFT09zcNAADwP5GhANiBphSAtOLxeP71kM6dgWt77e3bt5Kkubk5SdLZs2eT6goKCjQ+Pq719XWtr69rbW0t6RyF3zl9+nTC9cmTJyVJKysrf/R+AACAVCFDAbADZ0oBgEV2Pm3ctnNEHQAAAL+QoYD0xaQUgEPn27dvu67l5uZKkvl3dnY2qW52dlY5OTnKysrSsWPHdOLECU1NTaV2wwAAAPsAGQrAXmNSCsChMzIyolgsZl5/+vRJHz9+lN/vlyS5XC4VFxfr1atXCWPhU1NTGh8fV1lZmaR/ntoFAgGNjo5qcnIy6XN4egcAANIJGQrAXmNSCkBaiUQimpmZSVq/cOGCeUBmfn6+Wltbde3aNW1tbam/v185OTm6efOmWR8KhdTV1aWWlhZVVlZqc3NTL1++VHZ2toLBoFlXW1uriYkJ3b9/X5cvX1ZhYaHm5+c1PDystrY288wDAACA/YwMBcAONKUApBXDMHZdb2xslNfrlSRVVFTI4XCor69PS0tL8ng8unPnjlwul1nv8/nU3NwswzBkGIYyMzPl9Xp1+/Zt5eXlmXVut1udnZ16/vy5Xr9+rbW1Nbndbvn9fh0/fjy1NwsAALBHyFAA7JARZzYSwCERjUYVDocVCoVUVVVl93YAAAAOBDIUgFThTCkAAAAAAABYjqYUAAAAAAAALEdTCgAAAAAAAJbjTCkAAAAAAABYjkkpAAAAAAAAWI6mFAAAAAAAACxHUwoAAAAAAACWoykFAAAAAAAAy9GUAgAAAAAAgOVoSgEAAAAAAMByNKUAAAAAAABgOZpSAAAAAAAAsBxNKQAAAAAAAFjuJwUV9V41/+kDAAAAAElFTkSuQmCC\n"},"metadata":{}}],"source":["# Entraîner le modèle LSTM avec Word2Vec\n","model_lstm_word2vec, history_lstm_word2vec, metrics_lstm_word2vec, run_id_lstm_word2vec = train_word2vec_lstm_model(epochs=50)"]},{"cell_type":"markdown","metadata":{"id":"CD8guTB_NwMx"},"source":["## Chargement du modèle entraîné\n","\n","Dans cette fonction, nous créons un mécanisme pour charger un **modèle complet** avec tous ses composants associés. Nous récupérons l'ensemble des artefacts nécessaires pour faire fonctionner notre modèle d'analyse de sentiment à partir d'un emplacement spécifique.\n","\n","- Nous chargeons d'abord le **modèle Keras entraîné** à partir du fichier .keras sauvegardé\n","- Nous récupérons le **tokenizer** qui convertit le texte brut en séquences numériques\n","- Nous importons la **fonction de prétraitement** qui nettoie les tweets avant l'analyse\n","- Nous lisons les **paramètres du modèle** à partir d'un fichier JSON\n","- Nous retournons tous ces éléments dans un dictionnaire cohérent, prêt à être utilisé pour prédire le sentiment de nouveaux tweets"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"9nXo7O_XNwMx"},"outputs":[],"source":["# Fonction pour charger un modèle complet avec tous ses artefacts\n","def load_complete_model(model_name, vectorizer_name):\n"," \"\"\"\n"," Charge un modèle complet avec son tokenizer et sa fonction de prétraitement.\n"," \"\"\"\n"," model_dir = f\"content/advanced-model/{model_name}_{vectorizer_name}\"\n","\n"," # Charger le modèle\n"," model_path = f\"{model_dir}/final_model_{model_name}_{vectorizer_name}.keras\"\n"," model = tf.keras.models.load_model(model_path)\n","\n"," # Charger le tokenizer\n"," tokenizer_path = f\"{model_dir}/tokenizer.pickle\"\n"," with open(tokenizer_path, 'rb') as handle:\n"," tokenizer = pickle.load(handle)\n","\n"," # Charger la fonction de prétraitement\n"," preprocess_path = f\"{model_dir}/preprocess_function.dill\"\n"," with open(preprocess_path, 'rb') as handle:\n"," preprocess_function = dill.load(handle)\n","\n"," # Charger les paramètres\n"," params_path = f\"{model_dir}/parameters.json\"\n"," with open(params_path, 'r') as f:\n"," params = json.load(f)\n","\n"," return {\n"," \"model\": model,\n"," \"tokenizer\": tokenizer,\n"," \"preprocess\": preprocess_function,\n"," \"params\": params\n"," }"]},{"cell_type":"markdown","metadata":{"id":"P7Ge212GNwMx"},"source":["## Prédire avec le modèle entraîné\n","\n","Dans cette fonction, nous mettons en œuvre le cœur de notre système d'analyse de sentiment, permettant de prédire si un tweet exprime un sentiment positif ou négatif. Nous utilisons l'ensemble des composants précédemment chargés pour traiter le texte et générer une prédiction fiable.\n","\n","- **Prétraitement du texte** : Application des transformations de nettoyage sur le tweet brut\n","- **Tokenisation** : Conversion du texte prétraité en séquences numériques\n","- **Padding** : Ajustement des séquences à une longueur uniforme\n","- **Prédiction** : Calcul de la probabilité de sentiment par le modèle LSTM\n","- **Interprétation** : Classification du tweet comme positif ou négatif selon le seuil de 0.5\n","- **Évaluation de confiance** : Détermination du niveau de certitude de la prédiction\n","- **Formatage des résultats** : Présentation des résultats sous forme de dictionnaire structuré"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"LpuAgS8_NwMx"},"outputs":[],"source":["# Fonction pour prédire le sentiment avec un modèle chargé\n","def predict_sentiment(text, model_pack):\n"," \"\"\"\n"," Prédit le sentiment d'un texte en utilisant un modèle chargé.\n"," \"\"\"\n"," model = model_pack[\"model\"]\n"," tokenizer = model_pack[\"tokenizer\"]\n"," preprocess = model_pack[\"preprocess\"]\n"," params = model_pack[\"params\"]\n","\n"," # Prétraiter le texte\n"," preprocessed_text = preprocess(text)\n","\n"," # Tokeniser et encoder le texte\n"," tokens = tokenizer.texts_to_sequences([preprocessed_text])\n"," max_length = params.get(\"max_sequence_length\", MAX_SEQUENCE_LENGTH)\n"," padded_tokens = pad_sequences(tokens, maxlen=max_length, padding='post', truncating='post')\n","\n"," # Prédire le sentiment\n"," prediction = model.predict(padded_tokens)[0][0]\n","\n"," # Interpréter la prédiction\n"," sentiment = \"Positif\" if prediction >= 0.5 else \"Négatif\"\n"," confidence = prediction if prediction >= 0.5 else 1 - prediction\n","\n"," return {\n"," 'sentiment': sentiment,\n"," 'confidence': float(confidence),\n"," 'raw_score': float(prediction)\n"," }"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"eWAj3vceNwMx"},"outputs":[],"source":["# Liste améliorée de tweets pour tester le modèle\n","test_tweets_improved = [\n"," # Tweets positifs avec différentes caractéristiques\n"," \"I absolutely love flying with @AirParadis! Their service is amazing and their staff is so helpful :) #bestairline #travel\",\n"," \"Just landed after a wonderful flight... The crew was totally awesome and the food was perfect!!! Can't wait to fly with them again :D\",\n"," \"OMG! You really have to try @AirParadis. Best. Flight. Ever. Their new seats are extremely comfortable. http://airparadis.com/newseats #travel #comfort\",\n"," \"We had a very pleasant experience with our flight today. The staff completely exceeded our expectations ;) #happy #AirParadis\",\n"," \"My first time flying business class and I'm absolutely amazed!!! The service is 100% worth it... @AirParadis never disappoints :)\",\n","\n"," # Tweets négatifs avec différentes caractéristiques\n"," \"I hate how @AirParadis always delays their flights... This is the third time this month!!! :( #disappointed #travel\",\n"," \"The worst flight experience of my life? Definitely today with @AirParadis. Their customer service won't even respond to my complaints... #terrible\",\n"," \"Really @AirParadis??? Flight cancelled and no compensation??? That's how you treat your customers? SMH :(\",\n"," \"Our baggage was lost and nobody at @AirParadis seems to care! Don't they understand that we can't enjoy our vacation without our stuff??? http://badservice.com/complaint :-(\",\n"," \"Food was terrible, seats were uncomfortable, and the staff was not helpful at all... Never flying with @AirParadis again! #worstairline\",\n","\n"," # Tweets mixtes et nuancés\n"," \"The flight was good but the food wasn't really what I expected... @AirParadis can do better! #mixedfeelings\",\n"," \"IDK what to think about my @AirParadis experience? The crew was nice but the flight was delayed for 2 hours... #confused\",\n"," \"My husband loved the flight but I didn't... Too bad they can't make everyone happy :-) #AirParadis\",\n"," \"TBH, @AirParadis has improved their service since last year! Not perfect yet, but they're trying... #progress\",\n"," \"We were so excited for our trip but then our flight got delayed... at least the staff was very apologetic and gave us free drinks! @AirParadis\",\n","\n"," # Tweets spécifiquement pour tester les caractéristiques spéciales\n"," \"This is a tweet with many!!! exclamation!!! marks!!! to test how they affect sentiment analysis :)\",\n"," \"How does the model handle multiple??? question??? marks??? in a single tweet? @AirParadis\",\n"," \"Testing ellipses... many... many... ellipses... in... one... tweet... @AirParadis #test\",\n"," \"#many #hashtags #in #one #tweet #to #see #how #they #affect #the #analysis #AirParadis\",\n"," \"@mention1 @mention2 @mention3 @mention4 @mention5 multiple mentions in one tweet\",\n"," \"Multiple URLs in one tweet: http://example1.com http://example2.com http://example3.com @AirParadis\",\n"," \"Let's try all emoticons :) :( :D ;) :-) :-( :-D ;-) in a single tweet to see the impact\"\n","]"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"hRAWxNusNwMy","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1751830278905,"user_tz":-120,"elapsed":9239,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"da9971f0-92e6-49fd-a56f-9da5946ddc8f"},"outputs":[{"output_type":"stream","name":"stdout","text":["\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 2s/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 33ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 31ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 31ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 31ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 30ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 31ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 32ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 31ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 30ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 31ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 31ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 30ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 32ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 32ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 33ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 39ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 35ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 34ms/step\n","\n","Test du modèle sur les exemples:\n","==================================================\n","Résumé: 22 tweets analysés\n","Tweets positifs: 10 (45.5%)\n","Tweets négatifs: 12 (54.5%)\n"]}],"source":["def test_model_on_examples(model_pack, test_tweets):\n"," \"\"\"\n"," Teste le modèle sur une liste de tweets et retourne un DataFrame avec les résultats des prédictions.\n"," \"\"\"\n"," results = {\n"," \"Positif\": 0,\n"," \"Négatif\": 0\n"," }\n","\n"," # Créer un DataFrame pour stocker les résultats\n"," predictions_data = []\n","\n"," for i, tweet in enumerate(test_tweets):\n"," # Utiliser la fonction predict_sentiment avec model_pack\n"," result = predict_sentiment(tweet, model_pack)\n","\n"," # Ajouter l'emoji approprié pour le sentiment\n"," emoji = \"💚\" if result['sentiment'] == \"Positif\" else \"❌\"\n","\n"," # Ajouter les données au DataFrame\n"," predictions_data.append({\n"," \"Tweet\": tweet,\n"," \"Sentiment\": result['sentiment'],\n"," \"Emoji\": emoji,\n"," \"Score de confiance\": result['confidence'],\n"," \"Score brut\": result['raw_score'],\n"," \"Index\": i+1\n"," })\n","\n"," # Comptage des résultats\n"," results[result['sentiment']] += 1\n","\n"," # Créer le DataFrame\n"," df_predictions = pd.DataFrame(predictions_data)\n","\n"," # Afficher un résumé\n"," print(\"\\nTest du modèle sur les exemples:\")\n"," print(\"=\"*50)\n"," print(f\"Résumé: {len(test_tweets)} tweets analysés\")\n"," print(f\"Tweets positifs: {results['Positif']} ({(results['Positif']/len(test_tweets)*100):.1f}%)\")\n"," print(f\"Tweets négatifs: {results['Négatif']} ({(results['Négatif']/len(test_tweets)*100):.1f}%)\")\n","\n"," # Retourner le DataFrame\n"," return df_predictions\n","\n","# Exemple d'utilisation:\n","# Charger le model_pack (qui contient model, tokenizer, preprocess, params)\n","lstm_word2vec_model_pack = load_complete_model(\"LSTM\", \"Word2Vec-Fige\")\n","\n","# Obtenir le DataFrame des prédictions\n","df_results_word2vec = test_model_on_examples(lstm_word2vec_model_pack, test_tweets_improved)\n","\n","# Optionnel: sauvegarder les résultats dans un fichier CSV\n","df_results_word2vec.to_csv(\"content/advanced-model/LSTM_Word2Vec-Fige/predictions_results.csv\", index=False)"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"aCXO6s63NwMy","colab":{"base_uri":"https://localhost:8080/","height":739},"executionInfo":{"status":"ok","timestamp":1751830278990,"user_tz":-120,"elapsed":84,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"9f52a557-cf1d-4738-be5d-c44e17e7b163"},"outputs":[{"output_type":"execute_result","data":{"text/plain":[" Tweet Sentiment Emoji \\\n","0 I absolutely love flying with @AirParadis! The... Positif 💚 \n","1 Just landed after a wonderful flight... The cr... Positif 💚 \n","2 OMG! You really have to try @AirParadis. Best.... Positif 💚 \n","3 We had a very pleasant experience with our fli... Positif 💚 \n","4 My first time flying business class and I'm ab... Négatif ❌ \n","5 I hate how @AirParadis always delays their fli... Négatif ❌ \n","6 The worst flight experience of my life? Defini... Négatif ❌ \n","7 Really @AirParadis??? Flight cancelled and no ... Négatif ❌ \n","8 Our baggage was lost and nobody at @AirParadis... Négatif ❌ \n","9 Food was terrible, seats were uncomfortable, a... Négatif ❌ \n","10 The flight was good but the food wasn't really... Positif 💚 \n","11 IDK what to think about my @AirParadis experie... Négatif ❌ \n","12 My husband loved the flight but I didn't... To... Négatif ❌ \n","13 TBH, @AirParadis has improved their service si... Positif 💚 \n","14 We were so excited for our trip but then our f... Négatif ❌ \n","15 This is a tweet with many!!! exclamation!!! ma... Négatif ❌ \n","16 How does the model handle multiple??? question... Négatif ❌ \n","17 Testing ellipses... many... many... ellipses..... Positif 💚 \n","18 #many #hashtags #in #one #tweet #to #see #how ... Négatif ❌ \n","19 @mention1 @mention2 @mention3 @mention4 @menti... Positif 💚 \n","20 Multiple URLs in one tweet: http://example1.co... Positif 💚 \n","21 Let's try all emoticons :) :( :D ;) :-) :-( :-... Positif 💚 \n","\n"," Score de confiance Score brut Index \n","0 0.995117 0.995117 1 \n","1 0.995117 0.995117 2 \n","2 0.979980 0.979980 3 \n","3 0.986328 0.986328 4 \n","4 0.541992 0.458008 5 \n","5 0.992825 0.007175 6 \n","6 0.971252 0.028748 7 \n","7 0.727051 0.272949 8 \n","8 0.942810 0.057190 9 \n","9 0.909424 0.090576 10 \n","10 0.918457 0.918457 11 \n","11 0.915649 0.084351 12 \n","12 0.536621 0.463379 13 \n","13 0.588379 0.588379 14 \n","14 0.541748 0.458252 15 \n","15 0.836792 0.163208 16 \n","16 0.510498 0.489502 17 \n","17 0.675293 0.675293 18 \n","18 0.591064 0.408936 19 \n","19 0.909180 0.909180 20 \n","20 0.994141 0.994141 21 \n","21 0.951660 0.951660 22 "],"text/html":["\n","
\n","
\n","\n","
\n"," \n","
\n","
\n","
Tweet
\n","
Sentiment
\n","
Emoji
\n","
Score de confiance
\n","
Score brut
\n","
Index
\n","
\n"," \n"," \n","
\n","
0
\n","
I absolutely love flying with @AirParadis! The...
\n","
Positif
\n","
💚
\n","
0.995117
\n","
0.995117
\n","
1
\n","
\n","
\n","
1
\n","
Just landed after a wonderful flight... The cr...
\n","
Positif
\n","
💚
\n","
0.995117
\n","
0.995117
\n","
2
\n","
\n","
\n","
2
\n","
OMG! You really have to try @AirParadis. Best....
\n","
Positif
\n","
💚
\n","
0.979980
\n","
0.979980
\n","
3
\n","
\n","
\n","
3
\n","
We had a very pleasant experience with our fli...
\n","
Positif
\n","
💚
\n","
0.986328
\n","
0.986328
\n","
4
\n","
\n","
\n","
4
\n","
My first time flying business class and I'm ab...
\n","
Négatif
\n","
❌
\n","
0.541992
\n","
0.458008
\n","
5
\n","
\n","
\n","
5
\n","
I hate how @AirParadis always delays their fli...
\n","
Négatif
\n","
❌
\n","
0.992825
\n","
0.007175
\n","
6
\n","
\n","
\n","
6
\n","
The worst flight experience of my life? Defini...
\n","
Négatif
\n","
❌
\n","
0.971252
\n","
0.028748
\n","
7
\n","
\n","
\n","
7
\n","
Really @AirParadis??? Flight cancelled and no ...
\n","
Négatif
\n","
❌
\n","
0.727051
\n","
0.272949
\n","
8
\n","
\n","
\n","
8
\n","
Our baggage was lost and nobody at @AirParadis...
\n","
Négatif
\n","
❌
\n","
0.942810
\n","
0.057190
\n","
9
\n","
\n","
\n","
9
\n","
Food was terrible, seats were uncomfortable, a...
\n","
Négatif
\n","
❌
\n","
0.909424
\n","
0.090576
\n","
10
\n","
\n","
\n","
10
\n","
The flight was good but the food wasn't really...
\n","
Positif
\n","
💚
\n","
0.918457
\n","
0.918457
\n","
11
\n","
\n","
\n","
11
\n","
IDK what to think about my @AirParadis experie...
\n","
Négatif
\n","
❌
\n","
0.915649
\n","
0.084351
\n","
12
\n","
\n","
\n","
12
\n","
My husband loved the flight but I didn't... To...
\n","
Négatif
\n","
❌
\n","
0.536621
\n","
0.463379
\n","
13
\n","
\n","
\n","
13
\n","
TBH, @AirParadis has improved their service si...
\n","
Positif
\n","
💚
\n","
0.588379
\n","
0.588379
\n","
14
\n","
\n","
\n","
14
\n","
We were so excited for our trip but then our f...
\n","
Négatif
\n","
❌
\n","
0.541748
\n","
0.458252
\n","
15
\n","
\n","
\n","
15
\n","
This is a tweet with many!!! exclamation!!! ma...
\n","
Négatif
\n","
❌
\n","
0.836792
\n","
0.163208
\n","
16
\n","
\n","
\n","
16
\n","
How does the model handle multiple??? question...
\n","
Négatif
\n","
❌
\n","
0.510498
\n","
0.489502
\n","
17
\n","
\n","
\n","
17
\n","
Testing ellipses... many... many... ellipses.....
\n","
Positif
\n","
💚
\n","
0.675293
\n","
0.675293
\n","
18
\n","
\n","
\n","
18
\n","
#many #hashtags #in #one #tweet #to #see #how ...
\n","
Négatif
\n","
❌
\n","
0.591064
\n","
0.408936
\n","
19
\n","
\n","
\n","
19
\n","
@mention1 @mention2 @mention3 @mention4 @menti...
\n","
Positif
\n","
💚
\n","
0.909180
\n","
0.909180
\n","
20
\n","
\n","
\n","
20
\n","
Multiple URLs in one tweet: http://example1.co...
\n","
Positif
\n","
💚
\n","
0.994141
\n","
0.994141
\n","
21
\n","
\n","
\n","
21
\n","
Let's try all emoticons :) :( :D ;) :-) :-( :-...
\n","
Positif
\n","
💚
\n","
0.951660
\n","
0.951660
\n","
22
\n","
\n"," \n","
\n","
\n","
\n","\n","
\n"," \n","\n"," \n","\n"," \n","
\n","\n","\n","
\n"," \n","\n","\n","\n"," \n","
\n","\n","
\n"," \n"," \n"," \n","
\n","\n","
\n","
\n"],"application/vnd.google.colaboratory.intrinsic+json":{"type":"dataframe","variable_name":"df_results_word2vec","summary":"{\n \"name\": \"df_results_word2vec\",\n \"rows\": 22,\n \"fields\": [\n {\n \"column\": \"Tweet\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 22,\n \"samples\": [\n \"I absolutely love flying with @AirParadis! Their service is amazing and their staff is so helpful :) #bestairline #travel\",\n \"TBH, @AirParadis has improved their service since last year! Not perfect yet, but they're trying... #progress\",\n \"Our baggage was lost and nobody at @AirParadis seems to care! Don't they understand that we can't enjoy our vacation without our stuff??? http://badservice.com/complaint :-(\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Sentiment\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 2,\n \"samples\": [\n \"N\\u00e9gatif\",\n \"Positif\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Emoji\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 2,\n \"samples\": [\n \"\\u274c\",\n \"\\ud83d\\udc9a\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Score de confiance\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.1866448337305405,\n \"min\": 0.510498046875,\n \"max\": 0.9951171875,\n \"num_unique_values\": 21,\n \"samples\": [\n 0.9951171875,\n 0.591064453125\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Score brut\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.3730689855539598,\n \"min\": 0.007175445556640625,\n \"max\": 0.9951171875,\n \"num_unique_values\": 21,\n \"samples\": [\n 0.9951171875,\n 0.408935546875\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Index\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 6,\n \"min\": 1,\n \"max\": 22,\n \"num_unique_values\": 22,\n \"samples\": [\n 1,\n 14\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}"}},"metadata":{},"execution_count":35}],"source":["df_results_word2vec"]},{"cell_type":"markdown","metadata":{"id":"Yk_yH3-INwMy"},"source":["## Entrainement : LSTM avec GloVe 300d"]},{"cell_type":"markdown","metadata":{"id":"E-yiOEKYNwMy"},"source":["### Chargement et préparation des embeddings pré-entraînés GloVe"]},{"cell_type":"code","source":["import os\n","import requests\n","from tqdm import tqdm\n","from zipfile import ZipFile\n","\n","# Télécharger et préparer les embeddings GloVe\n","def download_glove_embeddings(url=\"https://nlp.stanford.edu/data/glove.6B.zip\",\n"," output_dir=\"content/pretrained-embeddings/glove.6B\"):\n"," \"\"\"\n"," Télécharge et extrait les embeddings GloVe si nécessaire.\n"," Inclut une barre de progression et vérifie si les fichiers existent déjà.\n"," \"\"\"\n"," # Check if directory already exists\n"," if os.path.exists(output_dir) and os.listdir(output_dir):\n"," print(f\"Le dossier {output_dir} existe déjà. Téléchargement ignoré.\")\n"," return\n","\n"," # Create directory if it doesn't exist\n"," os.makedirs(output_dir, exist_ok=True)\n","\n"," # Temporary zip file path\n"," zip_path = \"glove.6B.zip\"\n","\n"," # Download the file with progress bar\n"," print(\"Téléchargement du fichier...\")\n"," # Add verify=False to ignore SSL certificate issues\n"," response = requests.get(url, stream=True, verify=False)\n"," total_size = int(response.headers.get('content-length', 0))\n","\n"," with open(zip_path, 'wb') as f, tqdm(\n"," desc=\"Téléchargement\",\n"," total=total_size,\n"," unit='B',\n"," unit_scale=True,\n"," unit_divisor=1024,\n"," ) as bar:\n"," for data in response.iter_content(chunk_size=1024):\n"," size = f.write(data)\n"," bar.update(size)\n","\n"," # Extract with progress bar\n"," print(\"Extraction des fichiers...\")\n"," with ZipFile(zip_path, 'r') as zip_ref:\n"," for file in tqdm(zip_ref.namelist(), desc=\"Extraction\"):\n"," zip_ref.extract(file, output_dir)\n","\n"," # Remove the zip file\n"," os.remove(zip_path)\n"," print(\"Terminé!\")\n","\n","# Exécuter la fonction\n","download_glove_embeddings()"],"metadata":{"id":"9y9NubYo_DLG","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1751830278993,"user_tz":-120,"elapsed":3,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"12613b2b-a219-4860-ba02-f8a00932f053"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Le dossier content/pretrained-embeddings/glove.6B existe déjà. Téléchargement ignoré.\n"]}]},{"cell_type":"code","execution_count":null,"metadata":{"id":"vk_8gucuNwMy"},"outputs":[],"source":["def load_glove_embeddings(embedding_dim=100):\n"," \"\"\"\n"," Charge les embeddings GloVe pré-entraînés.\n"," \"\"\"\n"," print(f\"Chargement des embeddings GloVe {embedding_dim}d...\")\n"," embeddings_index = {}\n","\n"," with open(f'content/pretrained-embeddings/glove.6B/glove.6B.{embedding_dim}d.txt', encoding='utf-8') as f:\n"," for line in f:\n"," values = line.rstrip().split(' ')\n"," word = values[0]\n"," coefs = np.asarray(values[1:], dtype='float32')\n"," embeddings_index[word] = coefs\n","\n"," print(f\"Trouvé {len(embeddings_index)} vecteurs d'embeddings GloVe.\")\n"," return embeddings_index"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"AegR2uCfNwMy","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1751830310660,"user_tz":-120,"elapsed":31665,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"6150eeae-cf38-4ec3-a548-eeb1f3bbd2fd"},"outputs":[{"output_type":"stream","name":"stdout","text":["Chargement des embeddings GloVe 300d...\n","Trouvé 400000 vecteurs d'embeddings GloVe.\n","Création de la matrice d'embedding pour 83730 mots...\n"]},{"output_type":"stream","name":"stderr","text":["Création matrice d'embedding: 100%|██████████| 83730/83730 [00:00<00:00, 353325.63it/s]"]},{"output_type":"stream","name":"stdout","text":["Trouvé 37172 mots (44.40%) dans les embeddings pré-entraînés.\n"]},{"output_type":"stream","name":"stderr","text":["\n"]}],"source":["glove_embeddings_300d = load_glove_embeddings(embedding_dim=300)\n","glove_matrix_300d = create_embedding_matrix(tokenizer.word_index, glove_embeddings_300d, 300)"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"gPwavY_xNwMy"},"outputs":[],"source":["def train_glove_lstm_model(epochs=20):\n"," \"\"\"\n"," Entraîne un modèle LSTM avec embeddings GloVe 300d en utilisant les optimisations GPU\n"," et le chargement de données optimisé.\n"," \"\"\"\n"," # Définir le nom du modèle et de la méthode d'embedding\n"," model_name = \"LSTM\"\n"," vectorizer_name = \"GloVe-300d-Fige\"\n","\n"," # Créer les callbacks pour ce modèle\n"," checkpoint_callback = create_model_checkpoint(model_name, vectorizer_name)\n","\n"," # Autres callbacks\n"," early_stopping = tf.keras.callbacks.EarlyStopping(\n"," monitor='val_loss',\n"," patience=5,\n"," restore_best_weights=True\n"," )\n","\n"," reduce_lr = tf.keras.callbacks.ReduceLROnPlateau(\n"," monitor='val_loss',\n"," factor=0.2,\n"," patience=2,\n"," min_lr=0.00001\n"," )\n","\n"," # TensorBoard pour visualiser l'entraînement\n"," tensorboard_dir = f\"content/advanced-model/{model_name}_{vectorizer_name}/logs\"\n"," os.makedirs(tensorboard_dir, exist_ok=True)\n"," tensorboard_callback = tf.keras.callbacks.TensorBoard(\n"," log_dir=tensorboard_dir,\n"," histogram_freq=1,\n"," update_freq='epoch'\n"," )\n","\n"," # Créer le modèle optimisé pour GPU\n"," model = create_optimized_lstm_model(glove_matrix_300d, trainable=False)\n","\n"," print(f\"Entraînement du modèle {model_name} avec embeddings {vectorizer_name}\")\n"," print(f\"Taille du batch: {BATCH_SIZE}\")\n"," print(f\"Utilisation de la précision mixte: {tf.keras.mixed_precision.global_policy().name}\")\n","\n"," # Entraîner le modèle avec les datasets optimisés\n"," history = model.fit(\n"," train_dataset,\n"," epochs=epochs,\n"," validation_data=val_dataset,\n"," callbacks=[early_stopping, reduce_lr, tensorboard_callback, checkpoint_callback],\n"," verbose=1\n"," )\n","\n"," # Déterminer le nombre réel d'époques complétées (en cas d'early stopping)\n"," real_epochs = len(history.history['loss'])\n"," print(f\"Nombre réel d'époques effectuées: {real_epochs}/{epochs}\")\n","\n"," # Sauvegarder tous les artefacts\n"," model_dir = save_model_artifacts(model, model_name, vectorizer_name, history, tokenizer)\n","\n"," # Utiliser evaluate_model pour obtenir les métriques\n"," metrics, cm, report, y_pred, y_pred_proba = evaluate_model(\n"," model,\n"," X_test_pad,\n"," y_test\n"," )\n","\n"," # Afficher les métriques\n"," print(\"\\nMétriques pour le modèle LSTM avec embedding GloVe 300d:\")\n"," for key, value in metrics.items():\n"," print(f\"{key}: {value:.4f}\")\n","\n"," print(\"\\nRapport de classification:\")\n"," print(report)\n","\n"," # Enregistrer avec MLflow\n"," params = {\n"," 'model_type': model_name,\n"," 'embedding_type': vectorizer_name,\n"," 'embedding_dim': 300,\n"," 'vocab_size': len(tokenizer.word_index) + 1,\n"," 'max_sequence_length': MAX_SEQUENCE_LENGTH,\n"," 'trainable_embedding': False,\n"," 'max_epochs': epochs,\n"," 'real_epochs': real_epochs,\n"," 'batch_size': BATCH_SIZE,\n"," 'precision_policy': tf.keras.mixed_precision.global_policy().name,\n"," 'gpu_optimization': 'XLA,dynamic_memory,prefetch',\n"," 'sample_size': sample_size*2\n","\n"," }\n","\n"," # Enregistrer dans MLflow\n"," run_id = log_model_to_mlflow(model, model_name, vectorizer_name, metrics, cm, report, X_test_pad, y_test, history, params)\n","\n"," # Visualiser la courbe d'apprentissage\n"," plot_training_history(history, \"LSTM\", \"GloVe-300d-Fige\", run_id=run_id)\n","\n"," # Récupérer le lien vers le run MLflow\n"," print(f\"\\nRun MLflow ID: {run_id}\")\n"," print(f\"Accédez à l'interface MLflow pour voir les détails complets.\")\n","\n"," return model, history, metrics, run_id"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"HwGyTzEwNwMy","colab":{"base_uri":"https://localhost:8080/","height":1000},"executionInfo":{"status":"ok","timestamp":1751830700356,"user_tz":-120,"elapsed":389684,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"cba5a433-e6c6-4898-b9fc-9f133a85cca8"},"outputs":[{"output_type":"stream","name":"stdout","text":["Entraînement du modèle LSTM avec embeddings GloVe-300d-Fige\n","Taille du batch: 256\n","Utilisation de la précision mixte: mixed_float16\n","Epoch 1/50\n","\u001b[1m563/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 18ms/step - loss: 0.5846 - precision: 0.6888 - recall: 0.6777\n","Epoch 1: val_precision improved from -inf to 0.74994, saving model to content/advanced-model/LSTM_GloVe-300d-Fige/checkpoints/best_model.keras\n","\u001b[1m563/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m38s\u001b[0m 51ms/step - loss: 0.5845 - precision: 0.6889 - recall: 0.6778 - val_loss: 0.4928 - val_precision: 0.7499 - val_recall: 0.7811 - learning_rate: 0.0010\n","Epoch 2/50\n","\u001b[1m563/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 25ms/step - loss: 0.5067 - precision: 0.7539 - recall: 0.7542\n","Epoch 2: val_precision improved from 0.74994 to 0.76657, saving model to content/advanced-model/LSTM_GloVe-300d-Fige/checkpoints/best_model.keras\n","\u001b[1m563/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m25s\u001b[0m 45ms/step - loss: 0.5067 - precision: 0.7539 - recall: 0.7542 - val_loss: 0.4712 - val_precision: 0.7666 - val_recall: 0.7825 - learning_rate: 0.0010\n","Epoch 3/50\n","\u001b[1m563/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 18ms/step - loss: 0.4808 - precision: 0.7700 - recall: 0.7696\n","Epoch 3: val_precision improved from 0.76657 to 0.77947, saving model to content/advanced-model/LSTM_GloVe-300d-Fige/checkpoints/best_model.keras\n","\u001b[1m563/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m18s\u001b[0m 32ms/step - loss: 0.4808 - precision: 0.7700 - recall: 0.7696 - val_loss: 0.4607 - val_precision: 0.7795 - val_recall: 0.7838 - learning_rate: 0.0010\n","Epoch 4/50\n","\u001b[1m561/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 18ms/step - loss: 0.4680 - precision: 0.7794 - recall: 0.7787\n","Epoch 4: val_precision did not improve from 0.77947\n","\u001b[1m563/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m20s\u001b[0m 31ms/step - loss: 0.4680 - precision: 0.7794 - recall: 0.7787 - val_loss: 0.4558 - val_precision: 0.7790 - val_recall: 0.7973 - learning_rate: 0.0010\n","Epoch 5/50\n","\u001b[1m561/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 17ms/step - loss: 0.4549 - precision: 0.7842 - recall: 0.7902\n","Epoch 5: val_precision improved from 0.77947 to 0.78158, saving model to content/advanced-model/LSTM_GloVe-300d-Fige/checkpoints/best_model.keras\n","\u001b[1m563/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m18s\u001b[0m 32ms/step - loss: 0.4549 - precision: 0.7842 - recall: 0.7902 - val_loss: 0.4493 - val_precision: 0.7816 - val_recall: 0.7962 - learning_rate: 0.0010\n","Epoch 6/50\n","\u001b[1m563/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 18ms/step - loss: 0.4480 - precision: 0.7879 - recall: 0.7926\n","Epoch 6: val_precision improved from 0.78158 to 0.79068, saving model to content/advanced-model/LSTM_GloVe-300d-Fige/checkpoints/best_model.keras\n","\u001b[1m563/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m18s\u001b[0m 31ms/step - loss: 0.4480 - precision: 0.7879 - recall: 0.7926 - val_loss: 0.4510 - val_precision: 0.7907 - val_recall: 0.7846 - learning_rate: 0.0010\n","Epoch 7/50\n","\u001b[1m561/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 18ms/step - loss: 0.4383 - precision: 0.7925 - recall: 0.7982\n","Epoch 7: val_precision improved from 0.79068 to 0.79648, saving model to content/advanced-model/LSTM_GloVe-300d-Fige/checkpoints/best_model.keras\n","\u001b[1m563/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m18s\u001b[0m 32ms/step - loss: 0.4383 - precision: 0.7925 - recall: 0.7982 - val_loss: 0.4497 - val_precision: 0.7965 - val_recall: 0.7820 - learning_rate: 0.0010\n","Epoch 8/50\n","\u001b[1m562/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 18ms/step - loss: 0.4264 - precision: 0.8006 - recall: 0.8040\n","Epoch 8: val_precision did not improve from 0.79648\n","\u001b[1m563/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m19s\u001b[0m 30ms/step - loss: 0.4264 - precision: 0.8006 - recall: 0.8040 - val_loss: 0.4476 - val_precision: 0.7895 - val_recall: 0.7979 - learning_rate: 2.0000e-04\n","Epoch 9/50\n","\u001b[1m562/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 18ms/step - loss: 0.4218 - precision: 0.8034 - recall: 0.8065\n","Epoch 9: val_precision did not improve from 0.79648\n","\u001b[1m563/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m16s\u001b[0m 29ms/step - loss: 0.4217 - precision: 0.8034 - recall: 0.8065 - val_loss: 0.4470 - val_precision: 0.7929 - val_recall: 0.7899 - learning_rate: 2.0000e-04\n","Epoch 10/50\n","\u001b[1m561/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 17ms/step - loss: 0.4177 - precision: 0.8069 - recall: 0.8114\n","Epoch 10: val_precision did not improve from 0.79648\n","\u001b[1m563/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m17s\u001b[0m 30ms/step - loss: 0.4176 - precision: 0.8069 - recall: 0.8114 - val_loss: 0.4476 - val_precision: 0.7918 - val_recall: 0.7935 - learning_rate: 2.0000e-04\n","Epoch 11/50\n","\u001b[1m560/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 17ms/step - loss: 0.4160 - precision: 0.8084 - recall: 0.8073\n","Epoch 11: val_precision did not improve from 0.79648\n","\u001b[1m563/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m17s\u001b[0m 30ms/step - loss: 0.4160 - precision: 0.8084 - recall: 0.8073 - val_loss: 0.4439 - val_precision: 0.7879 - val_recall: 0.7983 - learning_rate: 2.0000e-04\n","Epoch 12/50\n","\u001b[1m560/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 16ms/step - loss: 0.4114 - precision: 0.8107 - recall: 0.8128\n","Epoch 12: val_precision did not improve from 0.79648\n","\u001b[1m563/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m17s\u001b[0m 29ms/step - loss: 0.4114 - precision: 0.8107 - recall: 0.8128 - val_loss: 0.4477 - val_precision: 0.7933 - val_recall: 0.7859 - learning_rate: 2.0000e-04\n","Epoch 13/50\n","\u001b[1m563/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 18ms/step - loss: 0.4082 - precision: 0.8122 - recall: 0.8132\n","Epoch 13: val_precision improved from 0.79648 to 0.79806, saving model to content/advanced-model/LSTM_GloVe-300d-Fige/checkpoints/best_model.keras\n","\u001b[1m563/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m22s\u001b[0m 33ms/step - loss: 0.4082 - precision: 0.8122 - recall: 0.8132 - val_loss: 0.4512 - val_precision: 0.7981 - val_recall: 0.7848 - learning_rate: 2.0000e-04\n","Epoch 14/50\n","\u001b[1m562/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 17ms/step - loss: 0.4061 - precision: 0.8131 - recall: 0.8138\n","Epoch 14: val_precision did not improve from 0.79806\n","\u001b[1m563/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m20s\u001b[0m 31ms/step - loss: 0.4061 - precision: 0.8131 - recall: 0.8138 - val_loss: 0.4503 - val_precision: 0.7909 - val_recall: 0.7964 - learning_rate: 4.0000e-05\n","Epoch 15/50\n","\u001b[1m563/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 18ms/step - loss: 0.4043 - precision: 0.8120 - recall: 0.8154\n","Epoch 15: val_precision did not improve from 0.79806\n","\u001b[1m563/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m19s\u001b[0m 29ms/step - loss: 0.4043 - precision: 0.8120 - recall: 0.8154 - val_loss: 0.4489 - val_precision: 0.7887 - val_recall: 0.8076 - learning_rate: 4.0000e-05\n","Epoch 16/50\n","\u001b[1m562/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 18ms/step - loss: 0.4059 - precision: 0.8114 - recall: 0.8184\n","Epoch 16: val_precision did not improve from 0.79806\n","\u001b[1m563/563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m17s\u001b[0m 30ms/step - loss: 0.4058 - precision: 0.8114 - recall: 0.8184 - val_loss: 0.4540 - val_precision: 0.7889 - val_recall: 0.7955 - learning_rate: 1.0000e-05\n","Nombre réel d'époques effectuées: 16/50\n","Modèle sauvegardé dans content/advanced-model/LSTM_GloVe-300d-Fige/final_model_LSTM_GloVe-300d-Fige.keras\n","Tokenizer sauvegardé dans content/advanced-model/LSTM_GloVe-300d-Fige/tokenizer.pickle\n","Fonction de prétraitement sauvegardée dans content/advanced-model/LSTM_GloVe-300d-Fige/preprocess_function.dill\n","Historique d'entraînement sauvegardé dans content/advanced-model/LSTM_GloVe-300d-Fige/training_history.pickle\n","Paramètres sauvegardés dans content/advanced-model/LSTM_GloVe-300d-Fige/parameters.json\n","\u001b[1m1250/1250\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 5ms/step\n","\n","Métriques pour le modèle LSTM avec embedding GloVe 300d:\n","accuracy: 0.7916\n","precision: 0.7915\n","recall: 0.7918\n","f1: 0.7917\n","roc_auc: 0.8761\n","\n","Rapport de classification:\n"," precision recall f1-score support\n","\n"," Négatif 0.79 0.79 0.79 20000\n"," Positif 0.79 0.79 0.79 20000\n","\n"," accuracy 0.79 40000\n"," macro avg 0.79 0.79 0.79 40000\n","weighted avg 0.79 0.79 0.79 40000\n","\n"]},{"output_type":"stream","name":"stderr","text":["2025/07/06 19:37:36 WARNING mlflow.models.model: `artifact_path` is deprecated. Please use `name` instead.\n"]},{"output_type":"stream","name":"stdout","text":["🏃 View run Modele_Avance_LSTM_GloVe-300d-Fige at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1/runs/5b50de7aafde4b5793aaf188e07caa49\n","🧪 View experiment at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1\n","🏃 View run Modele_Avance_LSTM_GloVe-300d-Fige at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1/runs/5b50de7aafde4b5793aaf188e07caa49\n","🧪 View experiment at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1\n","\n","Run MLflow ID: 5b50de7aafde4b5793aaf188e07caa49\n","Accédez à l'interface MLflow pour voir les détails complets.\n"]},{"output_type":"display_data","data":{"text/plain":["
"],"image/png":"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a1FaAmvt2rUl+jiLFi0qVqa05EVFz3elLo9M79mzZ7Ht8fHxytHRUfn7+6v8/HyllFLvvfdeqf3HIkW/y6sTVtdz6NChYuenpmnqueeesxy3yNmzZ4uda1crmm1gMBgs24rWoLq6fUViYmIUoKKioizbivqLDz30UInyaWlplr+nyiSlyvopUtrr2qxZM6XT6Uo93owZM0r0uSrTdxe2IXffExX2+uuvA+bb3np7e9O7d28efvhhHnjggRJlu3btWmLb9u3bKSwsLHXdJ8By29NDhw5Ztm3ZsgVN0xg8eHClYr7tttt46aWXeOKJJ1ixYgWDBg2iZ8+etGrVqly3Ut61axcAAwYMKPGco6Mjffr04eTJk+zevZvGjRsXe75z584l9imaL3+t29IX2bNnD4sXLy62zdvbm0mTJl1334po3Lgxa9eu5dChQ6xatYodO3awbds2y8/HH3/MunXraNKkidWOOX78eJYvX87333/PnXfeyYIFC7jlllsICgqq1B1psrKyeP/991m0aBExMTFkZGQUW//n7Nmzxco/9NBDvPrqq3z55ZfF1h368ssvAYrNS7fFeVseRX+PVxozZsw11/+q7Pk8YcIE/vrrL+bMmcONN94IQE5ODt9++y3Ozs48+OCDgPmOmqmpqURGRjJjxoxSY3BxcSn2uyrtdzpmzJgS6wl8//33fP/996Snp7N//35ef/11evbsyezZs2v8NsIZGRkcPXqU0NBQmjVrVuL5fv36lXh91q1bx7p164ptCw8PLxF73759S5S7nt27dwPQq1evEs+5u7vTvn37EnUWrUPy559/WtYEvFJSUhKFhYXExMTQqVOnCsUjhKgdit6rgoODadGiRYnniz4Lit5DAO6//36effZZWrVqxT333EPfvn3p2bMnfn5+xfatav8K4L333itxR9/hw4db7sJlLU899RSPPPIIq1atYtOmTezevZtNmzYxf/585s+fz6uvvsr06dOtdrxu3brRpk0bPv/8c1555RXmzp2LyWSq1JqZRTZu3Mj777/P5s2bSUpKIj8/v9jzZ8+etXxuu7i4cNdddzFnzhxWrFjB0KFDAfN6kgcOHGDEiBHF7lRd0c+DLVu2ADBo0KBS10OyhnXr1pX4HB09erRlnaXSVOZ8L9rerFkzNm7cyKFDh2jZsiUA8+bNo6CggDFjxqDX64HL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K8yYMYOWLVsyfPhwQkNDOXfuHH/99Rfdu3fniy++KPN4X3/9NbNnz6ZXr140a9YMHx8fjh07xpIlS3Bycrru+kzu7u58/vnn3HnnnfTt25c777yTxo0bs3PnTlauXElAQACzZ8+24m/Iut56660yfz9PPfUUOp2Op59+mueff56ePXvSunVrPDw8SEpKsgxd9vf35913362W+G6++eYq1zFs2DAiIiKYNWsW+/bto0OHDpw+fZqlS5dyyy23cPr06TL3HT16NHPnzuXFF1+0PC5NTZ+3RQYOHMjChQsZPXo048aNY/r06fTt25egoCByc3OJj49n9erVpKSk0LZt22sucg5VP58nTJjAli1b2LBhA05OTqX+vl599VX27t3LJ598wpIlSxgwYADBwcEkJSURGxvLxo0bmTlzJq1atbpu++Pi4ujUqROdO3emefPmBAcHk5aWxp49e9iyZQt6vZ65c+da1rQq8vHHH9OjRw+eeuop1qxZQ8uWLdm6dStr164lKirKkmwt4uDgwLx58xgwYACjRo1i1KhRNG7cmDVr1rBjxw569uzJ5MmTi+3z7LPPsnjxYn766Sc6duzIoEGDSEtL44cffqBPnz7FklvVzdPTk48++ogHH3yQHj16cNdddxEYGMimTZvYu3cvffv25c8//yy2IG2LFi34/PPPGTduHNHR0QwePJioqCiMRiOnT59mw4YN+Pn5cfjw4RprhxCi4q413e3jjz/mueee4/fff+eXX36hXbt2DB06lOzsbH788UeSkpKYMmVKsYWCR4wYgbu7O927dyc8PBylFBs2bGD79u106tTJcrOLqvavrOHw4cNltr9x48ZMnz6d5cuXM3HiRMLDw+nZsyehoaHk5eURGxvLihUrMBqNPPXUU3Tp0sXq8TVu3NgqX1pOnjyZxx57jA4dOjBy5Ej0ej0bN27k4MGDDBs2jCVLlpS6X2hoKP3792fNmjU4OjrSpk2bUte1qsznwTfffEO/fv146aWX+Omnn+jXrx9KKWJjY1m5ciWHDx++7lpCDg4O/Pzzzzz00EP88ssvNG3alL59+9K6dWtcXV1JTk7mwIEDbNq0CYPBYJnudy0VPd+vdPPNNxMeHm5JNj355JMYDIZiZRo0aMDChQsZMWIE3bt3Z+DAgURHR6NpGnFxcWzevLncSTmA6dOns3HjRnr06EHjxo1xdXUlLi6O33//nbS0NHr06GHpoxbp0aMHzzzzDLNmzaJt27aMGjWK/Px8FixYQGpqKv/9739L/O7vuecefv75ZxYuXEiHDh0YNmwYKSkpLFiwgMLCQubMmWOZJgfm/uKnn37K3XffTe/evbn77rsJDAzkr7/+Yv/+/fTp06fUUZPVZcqUKSxevJjvv/+eI0eOcPPNN3Px4kVLn2vx4sUlFt2vaN9d2Ej5btInRPlvO6zU5Vuhr127tswyeXl56r///a+64YYblKenpzIYDCo0NFQNGDBA/ec//1Hnz58vsc+yZcvUoEGDlI+PjzIYDCokJEQNHz5crVmzxlKm6La9RbdOV8p8W97HHntMtW3bVvn4+ChnZ2fVrFkzNWbMGLVv375ixyjtVutFtm3bpoYPH64aNmyo9Hq9Cg0NVY899pg6e/ZsibKjR48u8zappcVYHa5321VALVq0SOXm5qpFixapiRMnqg4dOih/f3/l6OioPD09VceOHdXLL7+skpKSynWsa73mRefFnDlzrhu70WhUQInbwV7L6dOn1X333aeCgoKUs7OzatWqlXr77bctdV3rVs4REREKUL6+viovL6/MctV13pbH+fPn1Ztvvql69+6tGjZsqBwdHZW7u7tq0aKFeuihh9SSJUtK3JbZWufzlbKysiy3Ab733nvLLGcymdRXX32lBgwYoHx8fJRer1dBQUGqZ8+eaubMmer06dPlandqaqp6+eWXVa9evVRAQIDS6/XK1dVVtWjRQj366KPq4MGDZe57+vRpNWbMGMt+jRs3Vk8//fQ1b3N+4MABNWrUKNWgQQNlMBhUZGSkeu2111R2dnap5S9evKgmT56sgoKClJOTk2revLn697//rY4dO1bi9sTXU97bjl/rdf3tt9/UDTfcoFxcXJS3t7e67bbb1KFDh9Qtt9yiAHXhwoUS+/z9999q9OjRqnHjxspgMCgfHx8VHR2tJkyYUOHzVAhRc673GX/l33xOTo6aOXOmio6OVs7Ozsrd3V317NlTzZ8/v0S9//vf/9Tw4cNVkyZNlIuLi/Lx8VHt27dXb7/9tkpPT7eUq0j/ytqK3i+v9dOuXTullFJHjhxR//73v9XgwYNVs2bNlKurq+Xze8SIEWrJkiXlOtb13psBFRwcXK74X3755TLfx8syb9481a5dO+Xq6qoaNGighg8f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mzerKCUiIuLDDNM83HOK9ofPey+kY1JRSkRERKQVKyoqwrKsejsVx8TEkJ2dfdR7Nm3axOLFi3niiSeO+npt/82fLv2Ljo6ut0vykaqqqqiqqvIcG4ZBaGio5/umVPs8f9tWW3n7V97gv7krb+XtL/w5d1BRSkRERMSvlJWVMX36dG699VaioqKa9Nlz585lzpw5nuMuXbowdepUEhISmvR9jpSUlNRsz/Zlytv/+Gvuytu/+Gve4L+5qyglIiIi0opFRUVhmma9GUxOp7Pe7CmA/fv3k5eXx9SpUz3nalsIXHPNNUybNs1zX2FhIbGxsZ7rCgsLSUtLO2YsV1xxBaNGjfIc137qm5eXh8vlOsXMjs8wDJKSksjJyfGrFgjK27/yBv/NXXkrb3/RVnN3OBwn9aGUilIiIiIirZjD4SA9PZ3MzEwGDhwIuJuYZ2ZmHnXjmOTkZJ588sk652bNmkV5eTk33ngj8fHxBAQEEBMTww8//OApQpWWlrJ161YuvvjiY8YSGBhIYGDgUV9rroG2bdttahB/spS3//HX3JW3f/HXvMF/c1dRSkRERKSVGzVqFM8//zzp6elkZGSwcOFCKioqGDp0KADPPfcccXFxjBs3jqCgIDp37lzn/vDwcIA65y+99FLef/99OnToQGJiIrNmzSI2NtazG5+IiIhIY6koJSIiItLKDRo0iKKiImbPno3T6SQtLY1JkyZ5luHl5+efcgPVyy+/nIqKCl544QVKS0vp0aMHkyZNIigoqBkyEBEREX+kopSIiIhIGzBy5MijLtcDmDx58nHvnThxYr1zhmFw9dVXc/XVVzdFeCIiIiL1mN4OQERERERERERE/I+KUiIiIiIiIiIi0uJUlBIRERERERERkRanopSIiIiIiIiIiLQ4FaVERERERERERKTFqSglIiIiIiIiIiItTkUpERERERERERFpcSpKiYiIiIiIiIhIi3N4O4DWxOFovv9czflsX+evuStv/+KveYP/5q682462mFNL0xiq6Slv/+OvuStv/+KveUPby/1k8zFs27abORYREREREREREZE6tHzPy8rKyrj33nspKyvzdigtzl9zV97K21/4a+7K27/yFu/x1z9zytu/8gb/zV15K29/4c+5g4pSXmfbNllZWfjjhDV/zV15K29/4a+5K2//ylu8x1//zClv/8ob/Dd35a28/YU/5w4qSomIiIiIiIiIiBeoKCUiIiIiIiIiIi1ORSkvCwwM5KqrriIwMNDbobQ4f81deStvf+GvuStv/8pbvMdf/8wpb//KG/w3d+WtvP2FP+cO2n1PRERERERERES8QDOlRERERERERESkxakoJSIiIiIiIiIiLU5FKRERERERERERaXEObwfg7xYtWsS8efNwOp2kpqYyfvx4MjIyvB1Ws5k7dy7ff/89e/fuJSgoiNNOO43rr7+e5ORkb4fWoj744APefvttLr30Um688UZvh9PsCgoKeOutt1izZg0VFRUkJSVx++2307VrV2+H1mwsy2L27Nn873//w+l0EhcXxwUXXMCVV16JYRjeDq/JbNiwgf/+979kZWVx8OBB7rrrLgYOHOh53bZtZs+ezeeff05JSQk9evTglltuoUOHDl6MumkcL3eXy8WsWbNYvXo1ubm5hIWF0bt3b8aNG0dcXJyXI2+cE/2eH+nFF1/ks88+44YbbuCyyy5r4UilLfO38RNoDFXLn8ZQGj+13fET+O8YSuMnjZ9+SjOlvGjZsmXMmDGDq666iqlTp5KamsqUKVMoLCz0dmjNZsOGDfz85z9nypQpPPDAA1RXV/O3v/2N8vJyb4fWYrZu3cqnn35Kamqqt0NpEcXFxTz44IM4HA4mTZrE008/zW9+8xvCw8O9HVqz+uCDD/j000+5+eabefrpp7nuuuv473//y0cffeTt0JpURUUFaWlp3HzzzUd9/cMPP+Sjjz5iwoQJPPbYYwQHBzNlyhQqKytbONKmd7zcKysrycrK4sorr2Tq1KnceeedZGdn88QTT3gh0qZ1ot/zWt9//z1btmwhNja2hSITf+GP4yfQGAr8awyl8VPbHj+B/46hNH7S+OmnNFPKi+bPn8+IESMYNmwYABMmTGDVqlUsWbKEMWPGeDe4ZvKXv/ylzvHEiRO55ZZb2L59O7169fJSVC2nvLyc6dOnc+utt/L+++97O5wW8eGHH9KuXTtuv/12z7nExEQvRtQyNm/eTP/+/TnrrLMAd85ff/01W7du9XJkTatfv37069fvqK/Zts3ChQv55S9/yYABAwC44447mDBhAsuXL2fw4MEtGWqTO17uYWFhPPjgg3XOjR8/nkmTJpGfn098fHxLhNgsjpd3rYKCAl599VX+8pe/8Pjjj7dQZOIv/HH8BBpD+dsYSuOntj1+Av8dQ2n8dGz+On7STCkvcblcbN++nd69e3vOmaZJ79692bx5sxcja1mlpaUAREREeDmSlvHyyy/Tr18/+vTp4+1QWsyKFStIT0/nqaee4pZbbuGee+7hs88+83ZYze60004jMzOT7OxsAHbs2MGPP/54wn+M2pLc3FycTmedP+9hYWFkZGT41d9ztUpLSzEMg7CwMG+H0qwsy2L69OmMHj2aTp06eTscaWM0fjpMY6i2TeMn/x0/gcZQR9L4qe3TTCkvKSoqwrIsYmJi6pyPiYnx/CXc1lmWxeuvv0737t3p3Lmzt8NpdkuXLiUrK4u///3v3g6lReXm5vLpp59y2WWXccUVV7Bt2zZee+01HA4HQ4cO9XZ4zWbMmDGUlZXxpz/9CdM0sSyLa665hvPPP9/bobUYp9MJQHR0dJ3z0dHRntf8RWVlJTNnzmTw4MFtflD14YcfEhAQwCWXXOLtUKQN0vjJTWOotk/jJ/8dP4HGULU0fvIPKkqJ17zyyivs3r2bRx991NuhNLv8/Hxef/11HnjgAYKCgrwdTouyLIuuXbsybtw4ALp06cKuXbv49NNP2/Sg6ptvvuHrr7/mD3/4A506dWLHjh28/vrrxMbGtum8pT6Xy8XTTz8NwC233OLlaJrX9u3bWbhwIVOnTm1zDWlFfInGUG2fxk8aP/k7jZ/8h4pSXhIVFYVpmvUq3U6ns96nf23RK6+8wqpVq3jkkUdo166dt8Npdtu3b6ewsJB7773Xc86yLDZu3MiiRYt4++23Mc22uZo2NjaWlJSUOudSUlL47rvvvBRRy3jrrbe4/PLLPWv+O3fuTF5eHh988IHfDKpq/y4rLCys06yxsLCQtLQ07wTVwmoHVPn5+Tz00ENt/lO+jRs3UlRUVKcHimVZzJgxg4ULF/L88897MTppC/x9/AQaQ4F/jKE0fvLf8RNoDKXxk3+Nn1SU8hKHw0F6ejqZmZmerSAtyyIzM5ORI0d6ObrmY9s2r776Kt9//z2TJ0/2i4aNAL179+bJJ5+sc+7f//43ycnJXH755W1yMFWre/fu9ZZUZGdnk5CQ4KWIWkZFRUW931fTNLFt20sRtbzExERiYmL44YcfPAOo0tJStm7dysUXX+zd4FpA7YAqJyeHhx9+mMjISG+H1OyGDBlSp9cPwJQpUxgyZIinKbVIY/jr+Ak0hjqSP4yhNH46zN/GT+DfYyiNn9z8afykopQXjRo1iueff5709HQyMjJYuHAhFRUVbfpTgFdeeYWvv/6ae+65h9DQUM8nnWFhYW16SnZoaGi9ng/BwcFERka2+V4Ql112GQ8++CDvv/8+gwYNYuvWrXz++ef89re/9XZozerss8/m/fffJz4+npSUFHbs2MH8+fPb3D8s5eXl5OTkeI5zc3PZsWMHERERxMfHc+mll/L+++/ToUMHEhMTmTVrFrGxsZ6dZFqz4+UeExPDU089RVZWFvfeey+WZXn+vouIiMDhaL3//J7o9/yng0eHw0FMTAzJycktHaq0Uf44fgKNoY7kD2MojZ/a9vgJ/HcMpfGTm8ZPhxm2v5WdfcyiRYv473//i9PpJC0tjZtuuolu3bp5O6xmM3bs2KOev/3229v8YPKnJk+eTFpaGjfeeKO3Q2l2K1eu5O233yYnJ4fExEQuu+wyLrzwQm+H1azKysp49913+f777yksLCQuLo7Bgwdz1VVXtep/UH9q/fr1PPLII/XOX3DBBUycOBHbtpk9ezafffYZpaWl9OjRg5tvvrlN/AN7vNx/9atfcccddxz1vocffpjTTz+9ucNrNif6Pf+piRMncumll3LZZZe1RHjiJ/xt/AQaQx3JX8ZQGj+13fET+O8YSuOnujR+UlFKRERERERERES8oG0uwhYREREREREREZ+mopSIiIiIiIiIiLQ4FaVERERERERERKTFqSglIiIiIiIiIiItTkUpERERERERERFpcSpKiYiIiIiIiIhIi1NRSkREREREREREWpyKUiIiIiIiIiIi0uJUlBIRaWZffPEFY8eOZdu2bd4ORURERKTV0BhKpO1zeDsAEZGm8MUXX/Cvf/3rmK//7W9/47TTTmvBiERERER8n8ZQIuJNKkqJSJsyduxYEhMT651PSkryQjQiIiIirYPGUCLiDSpKiUib0q9fP7p27ertMERERERaFY2hRMQbVJQSEb+Rm5vLHXfcwfXXX49pmixcuJDCwkIyMjK4+eab6dy5c53rMzMzmT17NllZWQQEBNCrVy/GjRtHSkpKnesKCgp49913WbNmDYcOHSI2Npa+ffty00034XAc/mu2qqqKN954g6+++orKykr69OnDrbfeSlRUVIvkLyIiItIQGkOJSHNRo3MRaVNKS0spKiqq83Xo0KE613z11Vd89NFH/PznP+eKK65g9+7dPProozidTs8169atY8qUKRQWFvKrX/2KUaNG8eOPP/Lggw+Sm5vrua6goID777+fZcuWcd5553HTTTcxZMgQNmzYQEVFRZ33fe2119i5cye/+tWvuOiii1i5ciWvvPJKs/73EBERETkZGkOJiDdoppSItCl//etf650LDAxk5syZnuOcnByeffZZ4uLiAOjbty+TJk3iww8/5IYbbgDgrbfeIiIigilTphAREQHAgAEDuOeee5g9ezZ33HEHAG+//TZOp5PHHnuszpT3q6++Gtu268QRERHBAw88gGEYANi2zUcffURpaSlhYWFN+F9BRERE5NRoDCUi3qCilIi0KTfffDMdOnSoc840604KHTBggGcwBZCRkUG3bt1YvXo1N9xwAwcPHmTHjh2MHj3aM5gCSE1NpU+fPqxevRoAy7JYvnw5Z5999lF7MNQOnGpdeOGFdc717NmTBQsWkJeXR2pqasOTFhEREWkkjaFExBtUlBKRNiUjI+OETTp/OuCqPffNN98AkJeXB0BycnK96zp27MjatWspLy+nvLycsrKyen0UjiU+Pr7OcXh4OAAlJSUndb+IiIhIc9EYSkS8QT2lRERayE8/baz10ynqIiIiInKYxlAibZdmSomI39m3b99RzyUkJAB4fs3Ozq53XXZ2NpGRkYSEhBAUFERoaCi7du1q3oBFREREfIDGUCLS1DRTSkT8zvLlyykoKPAcb926lS1bttC3b18AYmNjSUtL48svv6wzLXzXrl2sXbuWfv36Ae5P7QYMGMDKlSvZtm1bvffRp3ciIiLSlmgMJSJNTTOlRKRNWb16NXv37q13vnv37p4GmUlJSTz44INcfPHFVFVVsXDhQiIjI7n88ss9119//fX8/e9/54EHHmDYsGFUVlayaNEiwsLCGDt2rOe6cePGsW7dOiZPnsyIESNISUnh4MGDfPvttzz66KOengciIiIivkxjKBHxBhWlRKRNmT179lHP33777fTq1QuAIUOGYJomCxYsoKioiIyMDMaPH09sbKzn+j59+jBp0iRmz57N7NmzCQgIoFevXlx33XUkJiZ6rouLi+Oxxx5j1qxZfP3115SVlREXF0ffvn0JDg5u3mRFREREmojGUCLiDYatuZEi4idyc3O54447uP766xk9erS3wxERERFpFTSGEpHmop5SIiIiIiIiIiLS4lSUEhERERERERGRFqeilIiIiIiIiIiItDj1lBIRERERERERkRanmVIiIiIiIiIiItLiVJQSEREREREREZEWp6KUiIiIiIiIiIi0OBWlRERERERERESkxakoJSIiIiIiIiIiLU5FKRERERERERERaXEqSomIiIiIiIiISItTUUpERERERERERFqcilIiIiIiIiIiItLi/j/LWrFRl0ZdewAAAABJRU5ErkJggg==\n"},"metadata":{}}],"source":["# Entraîner le modèle LSTM avec GloVe 300d\n","model_lstm_glove, history_lstm_glove, metrics_lstm_glove, run_id_lstm_glove = train_glove_lstm_model(epochs=50)"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"Qq5sL0HcNwMy"},"outputs":[],"source":["# Charger le modèle pour la prédiction\n","lstm_glove_model_pack = load_complete_model(\"LSTM\", \"GloVe-300d-Fige\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"Kc95Dyz8NwMy","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1751830703470,"user_tz":-120,"elapsed":2246,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"9fac4c06-5630-4f50-bba5-f41005c5d833"},"outputs":[{"output_type":"stream","name":"stdout","text":["\n","Test de prédiction avec le modèle GloVe:\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 2s/step\n","{'sentiment': 'Positif', 'confidence': 0.9921875, 'raw_score': 0.9921875}\n"]}],"source":["# Tester le modèle sur quelques exemples\n","print(\"\\nTest de prédiction avec le modèle GloVe:\")\n","result = predict_sentiment(\"I love flying with this airline, the service is amazing!\", lstm_glove_model_pack)\n","print(result)"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"gAhcxPUoNwMy","colab":{"base_uri":"https://localhost:8080/","height":1000},"executionInfo":{"status":"ok","timestamp":1751830705513,"user_tz":-120,"elapsed":2042,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"b49cfcf6-a4e7-4069-e497-0b789f6f7865"},"outputs":[{"output_type":"stream","name":"stdout","text":["\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 31ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 35ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 30ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 34ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 31ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 32ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 31ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 40ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 47ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 45ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 48ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 47ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 46ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 43ms/step\n","\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 43ms/step\n","\n","Test du modèle sur les exemples:\n","==================================================\n","Résumé: 22 tweets analysés\n","Tweets positifs: 13 (59.1%)\n","Tweets négatifs: 9 (40.9%)\n","\n","Aperçu des prédictions GloVe :\n"]},{"output_type":"execute_result","data":{"text/plain":[" Tweet Sentiment Emoji \\\n","0 I absolutely love flying with @AirParadis! The... Positif 💚 \n","1 Just landed after a wonderful flight... The cr... Positif 💚 \n","2 OMG! You really have to try @AirParadis. Best.... Positif 💚 \n","3 We had a very pleasant experience with our fli... Positif 💚 \n","4 My first time flying business class and I'm ab... Positif 💚 \n","5 I hate how @AirParadis always delays their fli... Négatif ❌ \n","6 The worst flight experience of my life? Defini... Négatif ❌ \n","7 Really @AirParadis??? Flight cancelled and no ... Négatif ❌ \n","8 Our baggage was lost and nobody at @AirParadis... Négatif ❌ \n","9 Food was terrible, seats were uncomfortable, a... Négatif ❌ \n","10 The flight was good but the food wasn't really... Positif 💚 \n","11 IDK what to think about my @AirParadis experie... Négatif ❌ \n","12 My husband loved the flight but I didn't... To... Positif 💚 \n","13 TBH, @AirParadis has improved their service si... Négatif ❌ \n","14 We were so excited for our trip but then our f... Positif 💚 \n","15 This is a tweet with many!!! exclamation!!! ma... Négatif ❌ \n","16 How does the model handle multiple??? question... Négatif ❌ \n","17 Testing ellipses... many... many... ellipses..... Positif 💚 \n","18 #many #hashtags #in #one #tweet #to #see #how ... Positif 💚 \n","19 @mention1 @mention2 @mention3 @mention4 @menti... Positif 💚 \n","20 Multiple URLs in one tweet: http://example1.co... Positif 💚 \n","21 Let's try all emoticons :) :( :D ;) :-) :-( :-... Positif 💚 \n","\n"," Score de confiance Score brut Index \n","0 0.995117 0.995117 1 \n","1 0.990234 0.990234 2 \n","2 0.939453 0.939453 3 \n","3 0.963379 0.963379 4 \n","4 0.649902 0.649902 5 \n","5 0.980865 0.019135 6 \n","6 0.975449 0.024551 7 \n","7 0.978058 0.021942 8 \n","8 0.933167 0.066833 9 \n","9 0.896606 0.103394 10 \n","10 0.651855 0.651855 11 \n","11 0.875000 0.125000 12 \n","12 0.576172 0.576172 13 \n","13 0.681396 0.318604 14 \n","14 0.731445 0.731445 15 \n","15 0.841064 0.158936 16 \n","16 0.666748 0.333252 17 \n","17 0.689941 0.689941 18 \n","18 0.819336 0.819336 19 \n","19 0.907227 0.907227 20 \n","20 0.984375 0.984375 21 \n","21 0.929199 0.929199 22 "],"text/html":["\n","
\n","
\n","\n","
\n"," \n","
\n","
\n","
Tweet
\n","
Sentiment
\n","
Emoji
\n","
Score de confiance
\n","
Score brut
\n","
Index
\n","
\n"," \n"," \n","
\n","
0
\n","
I absolutely love flying with @AirParadis! The...
\n","
Positif
\n","
💚
\n","
0.995117
\n","
0.995117
\n","
1
\n","
\n","
\n","
1
\n","
Just landed after a wonderful flight... The cr...
\n","
Positif
\n","
💚
\n","
0.990234
\n","
0.990234
\n","
2
\n","
\n","
\n","
2
\n","
OMG! You really have to try @AirParadis. Best....
\n","
Positif
\n","
💚
\n","
0.939453
\n","
0.939453
\n","
3
\n","
\n","
\n","
3
\n","
We had a very pleasant experience with our fli...
\n","
Positif
\n","
💚
\n","
0.963379
\n","
0.963379
\n","
4
\n","
\n","
\n","
4
\n","
My first time flying business class and I'm ab...
\n","
Positif
\n","
💚
\n","
0.649902
\n","
0.649902
\n","
5
\n","
\n","
\n","
5
\n","
I hate how @AirParadis always delays their fli...
\n","
Négatif
\n","
❌
\n","
0.980865
\n","
0.019135
\n","
6
\n","
\n","
\n","
6
\n","
The worst flight experience of my life? Defini...
\n","
Négatif
\n","
❌
\n","
0.975449
\n","
0.024551
\n","
7
\n","
\n","
\n","
7
\n","
Really @AirParadis??? Flight cancelled and no ...
\n","
Négatif
\n","
❌
\n","
0.978058
\n","
0.021942
\n","
8
\n","
\n","
\n","
8
\n","
Our baggage was lost and nobody at @AirParadis...
\n","
Négatif
\n","
❌
\n","
0.933167
\n","
0.066833
\n","
9
\n","
\n","
\n","
9
\n","
Food was terrible, seats were uncomfortable, a...
\n","
Négatif
\n","
❌
\n","
0.896606
\n","
0.103394
\n","
10
\n","
\n","
\n","
10
\n","
The flight was good but the food wasn't really...
\n","
Positif
\n","
💚
\n","
0.651855
\n","
0.651855
\n","
11
\n","
\n","
\n","
11
\n","
IDK what to think about my @AirParadis experie...
\n","
Négatif
\n","
❌
\n","
0.875000
\n","
0.125000
\n","
12
\n","
\n","
\n","
12
\n","
My husband loved the flight but I didn't... To...
\n","
Positif
\n","
💚
\n","
0.576172
\n","
0.576172
\n","
13
\n","
\n","
\n","
13
\n","
TBH, @AirParadis has improved their service si...
\n","
Négatif
\n","
❌
\n","
0.681396
\n","
0.318604
\n","
14
\n","
\n","
\n","
14
\n","
We were so excited for our trip but then our f...
\n","
Positif
\n","
💚
\n","
0.731445
\n","
0.731445
\n","
15
\n","
\n","
\n","
15
\n","
This is a tweet with many!!! exclamation!!! ma...
\n","
Négatif
\n","
❌
\n","
0.841064
\n","
0.158936
\n","
16
\n","
\n","
\n","
16
\n","
How does the model handle multiple??? question...
\n","
Négatif
\n","
❌
\n","
0.666748
\n","
0.333252
\n","
17
\n","
\n","
\n","
17
\n","
Testing ellipses... many... many... ellipses.....
\n","
Positif
\n","
💚
\n","
0.689941
\n","
0.689941
\n","
18
\n","
\n","
\n","
18
\n","
#many #hashtags #in #one #tweet #to #see #how ...
\n","
Positif
\n","
💚
\n","
0.819336
\n","
0.819336
\n","
19
\n","
\n","
\n","
19
\n","
@mention1 @mention2 @mention3 @mention4 @menti...
\n","
Positif
\n","
💚
\n","
0.907227
\n","
0.907227
\n","
20
\n","
\n","
\n","
20
\n","
Multiple URLs in one tweet: http://example1.co...
\n","
Positif
\n","
💚
\n","
0.984375
\n","
0.984375
\n","
21
\n","
\n","
\n","
21
\n","
Let's try all emoticons :) :( :D ;) :-) :-( :-...
\n","
Positif
\n","
💚
\n","
0.929199
\n","
0.929199
\n","
22
\n","
\n"," \n","
\n","
\n","
\n","\n","
\n"," \n","\n"," \n","\n"," \n","
\n","\n","\n","
\n"," \n","\n","\n","\n"," \n","
\n","\n","
\n"," \n"," \n"," \n","
\n","\n","
\n","
\n"],"application/vnd.google.colaboratory.intrinsic+json":{"type":"dataframe","variable_name":"df_results_glove","summary":"{\n \"name\": \"df_results_glove\",\n \"rows\": 22,\n \"fields\": [\n {\n \"column\": \"Tweet\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 22,\n \"samples\": [\n \"I absolutely love flying with @AirParadis! Their service is amazing and their staff is so helpful :) #bestairline #travel\",\n \"TBH, @AirParadis has improved their service since last year! Not perfect yet, but they're trying... #progress\",\n \"Our baggage was lost and nobody at @AirParadis seems to care! Don't they understand that we can't enjoy our vacation without our stuff??? http://badservice.com/complaint :-(\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Sentiment\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 2,\n \"samples\": [\n \"N\\u00e9gatif\",\n \"Positif\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Emoji\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 2,\n \"samples\": [\n \"\\u274c\",\n \"\\ud83d\\udc9a\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Score de confiance\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.13888291998594515,\n \"min\": 0.576171875,\n \"max\": 0.9951171875,\n \"num_unique_values\": 22,\n \"samples\": [\n 0.9951171875,\n 0.681396484375\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Score brut\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.3794701732781929,\n \"min\": 0.019134521484375,\n \"max\": 0.9951171875,\n \"num_unique_values\": 22,\n \"samples\": [\n 0.9951171875,\n 0.318603515625\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Index\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 6,\n \"min\": 1,\n \"max\": 22,\n \"num_unique_values\": 22,\n \"samples\": [\n 1,\n 14\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}"}},"metadata":{},"execution_count":43}],"source":["# Obtenir le DataFrame des prédictions pour le modèle GloVe\n","df_results_glove = test_model_on_examples(lstm_glove_model_pack, test_tweets_improved)\n","\n","# Sauvegarder les résultats dans un fichier CSV\n","df_results_glove.to_csv(\"content/advanced-model/LSTM_GloVe-300d-Fige/predictions_results.csv\", index=False)\n","\n","# Afficher un aperçu des prédictions\n","print(\"\\nAperçu des prédictions GloVe :\")\n","df_results_glove"]},{"cell_type":"markdown","source":["# Enregistrement du meilleur modèle\n","Dans le Model Registry de MLFlow, qui sera utilisé et mis à jour comme source pour l'API."],"metadata":{"id":"8D9ukAB3Xee4"}},{"cell_type":"code","source":["# Comparer les métriques de précision sur l'ensemble de test\n","precision_word2vec = metrics_lstm_word2vec.get('precision', 0)\n","precision_glove = metrics_lstm_glove.get('precision', 0)\n","\n","print(f\"Précision (Test) Word2Vec + LSTM: {precision_word2vec:.4f}\")\n","print(f\"Précision (Test) GloVe 300d + LSTM: {precision_glove:.4f}\")\n","\n","best_model_run_id = None\n","best_model_name = None\n","best_vectorizer_name = None\n","best_precision = 0\n","\n","# Déterminer le modèle avec la meilleure précision\n","if precision_word2vec >= precision_glove:\n"," best_model_run_id = run_id_lstm_word2vec\n"," best_model_name = \"LSTM\"\n"," best_vectorizer_name = \"Word2Vec-Fige\"\n"," best_precision = precision_word2vec\n","else:\n"," best_model_run_id = run_id_lstm_glove\n"," best_model_name = \"LSTM\"\n"," best_vectorizer_name = \"GloVe-300d-Fige\"\n"," best_precision = precision_glove\n","\n","\n","print(f\"\\nLe modèle {best_model_name} + {best_vectorizer_name} a la meilleure précision ({best_precision:.4f}).\")\n","\n","# Construire l'URI du modèle dans le run MLflow\n","logged_model_uri = f\"runs:/{best_model_run_id}/model_{best_model_name}_{best_vectorizer_name}\"\n","print(f\"\\nChargement du meilleur modèle depuis MLflow URI: {logged_model_uri}\")\n","\n","model_registry_name = \"SentimentAnalysisLSTM\"\n","client = mlflow.tracking.MlflowClient()\n","\n","try:\n"," # Charger le modèle Keras depuis MLflow (pas strictement nécessaire pour l'enregistrement, mais utile pour validation)\n"," # best_keras_model = mlflow.keras.load_model(logged_model_uri)\n"," # print(\"Modèle Keras chargé avec succès.\")\n","\n"," print(f\"Enregistrement du meilleur modèle dans le Model Registry sous le nom '{model_registry_name}'...\")\n","\n"," # Créer une nouvelle version dans le Model Registry\n"," model_version = mlflow.register_model(\n"," model_uri=logged_model_uri,\n"," name=model_registry_name\n"," )\n"," print(f\"Modèle enregistré dans le Model Registry sous la version {model_version.version}.\")\n","\n"," # Ajouter des tags au modèle enregistré\n"," client.set_model_version_tag(\n"," name=model_registry_name,\n"," version=model_version.version,\n"," key=\"embedding_type\",\n"," value=best_vectorizer_name\n"," )\n"," client.set_model_version_tag(\n"," name=model_registry_name,\n"," version=model_version.version,\n"," key=\"test_precision\",\n"," value=str(best_precision)\n"," )\n"," client.set_model_version_tag(\n"," name=model_registry_name,\n"," version=model_version.version,\n"," key=\"source_run_id\",\n"," value=best_model_run_id\n"," )\n","\n"," print(f\"Tags ajoutés à la version {model_version.version}.\")\n","\n"," # --- Logique de comparaison et de transition des stages ---\n","\n"," # Récupérer la version du modèle actuellement en production\n"," production_version = None\n"," try:\n"," for mv in client.search_model_versions(f\"name='{model_registry_name}'\"):\n"," if mv.current_stage == \"Production\":\n"," production_version = mv\n"," break\n"," except Exception as e:\n"," print(f\"Erreur lors de la recherche de la version en production : {e}\")\n","\n","\n"," if production_version:\n"," print(f\"\\nVersion actuelle en production: Version {production_version.version}\")\n"," # Récupérer la précision de la version en production (stockée dans les tags)\n"," production_precision_str = production_version.tags.get(\"test_precision\", \"0.0\")\n"," try:\n"," production_precision = float(production_precision_str)\n"," print(f\"Précision (Test) de la version en production: {production_precision:.4f}\")\n","\n"," # Comparer les précisions\n"," if best_precision > production_precision:\n"," print(f\"\\nLa nouvelle version ({model_version.version}) est meilleure que la version en production ({production_version.version}).\")\n"," print(\"Transition de la nouvelle version vers 'Production' et de l'ancienne version vers 'Staging'...\")\n","\n"," # Mettre la nouvelle version en production\n"," client.transition_model_version_stage(\n"," name=model_registry_name,\n"," version=model_version.version,\n"," stage=\"Production\",\n"," archive_existing_versions=True # Cela archive automatiquement l'ancienne version en production\n"," )\n"," print(f\"Version {model_version.version} mise en production.\")\n"," print(f\"Ancienne version {production_version.version} archivée.\")\n","\n"," else:\n"," print(f\"\\nLa nouvelle version ({model_version.version}) n'est pas meilleure que la version en production ({production_version.version}).\")\n"," print(\"Transition de la nouvelle version vers 'Staging'...\")\n"," # Mettre la nouvelle version en staging\n"," client.transition_model_version_stage(\n"," name=model_registry_name,\n"," version=model_version.version,\n"," stage=\"Staging\",\n"," archive_existing_versions=False # Ne pas archiver l'ancienne version en production\n"," )\n"," print(f\"Version {model_version.version} mise en staging.\")\n"," print(f\"La version {production_version.version} reste en production.\")\n","\n"," except ValueError:\n"," print(f\"Erreur: Impossible de convertir le tag 'test_precision' ({production_precision_str}) de la version en production en nombre flottant.\")\n"," print(f\"La nouvelle version {model_version.version} sera mise en 'Staging' par défaut.\")\n"," # Mettre la nouvelle version en staging si la précision de l'ancienne ne peut pas être lue\n"," client.transition_model_version_stage(\n"," name=model_registry_name,\n"," version=model_version.version,\n"," stage=\"Staging\",\n"," archive_existing_versions=False\n"," )\n","\n"," else:\n"," print(\"\\nAucune version en production trouvée. La nouvelle version sera mise en production.\")\n"," # Si aucune version n'est en production, mettre directement la nouvelle version en production\n"," client.transition_model_version_stage(\n"," name=model_registry_name,\n"," version=model_version.version,\n"," stage=\"Production\",\n"," archive_existing_versions=False\n"," )\n"," print(f\"Version {model_version.version} mise en production.\")\n","\n"," print(f\"\\nGestion des stages du modèle '{model_registry_name}' terminée.\")\n","\n","except Exception as e:\n"," print(f\"Erreur générale lors du traitement MLflow : {e}\")\n"," print(f\"Vérifiez que le run_id '{best_model_run_id}' est valide et que l'artefact existe bien.\")"],"metadata":{"id":"7Pf-LJdNOCHe","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1751830706459,"user_tz":-120,"elapsed":945,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"f9bdde12-3102-454d-c44c-60a35a0d60a0"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Précision (Test) Word2Vec + LSTM: 0.7970\n","Précision (Test) GloVe 300d + LSTM: 0.7915\n","\n","Le modèle LSTM + Word2Vec-Fige a la meilleure précision (0.7970).\n","\n","Chargement du meilleur modèle depuis MLflow URI: runs:/1de54538ee73443687db131fcc86d922/model_LSTM_Word2Vec-Fige\n","Enregistrement du meilleur modèle dans le Model Registry sous le nom 'SentimentAnalysisLSTM'...\n"]},{"output_type":"stream","name":"stderr","text":["Registered model 'SentimentAnalysisLSTM' already exists. Creating a new version of this model...\n","2025/07/06 19:38:25 WARNING mlflow.tracking._model_registry.fluent: Run with id 1de54538ee73443687db131fcc86d922 has no artifacts at artifact path 'model_LSTM_Word2Vec-Fige', registering model based on models:/m-b4c7c871087e4a2587f21367961f6d04 instead\n","2025/07/06 19:38:25 INFO mlflow.store.model_registry.abstract_store: Waiting up to 300 seconds for model version to finish creation. Model name: SentimentAnalysisLSTM, version 12\n","Created version '12' of model 'SentimentAnalysisLSTM'.\n"]},{"output_type":"stream","name":"stdout","text":["Modèle enregistré dans le Model Registry sous la version 12.\n","Tags ajoutés à la version 12.\n","\n","Version actuelle en production: Version 11\n","Précision (Test) de la version en production: 0.7830\n","\n","La nouvelle version (12) est meilleure que la version en production (11).\n","Transition de la nouvelle version vers 'Production' et de l'ancienne version vers 'Staging'...\n","Version 12 mise en production.\n","Ancienne version 11 archivée.\n","\n","Gestion des stages du modèle 'SentimentAnalysisLSTM' terminée.\n"]}]},{"cell_type":"markdown","source":["# Enregistrement de dépendances"],"metadata":{"id":"5iEc-YxAt3BU"}},{"cell_type":"code","source":["!pip freeze > requirements_modele_avance.txt"],"metadata":{"id":"jIw_YhFztVF2"},"execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","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.10.12"},"colab":{"provenance":[],"gpuType":"T4"},"accelerator":"GPU"},"nbformat":4,"nbformat_minor":0}
\ No newline at end of file
diff --git a/notebooks/p07_04-notebook-modele-bert.ipynb b/notebooks/p07_04-notebook-modele-bert.ipynb
index 6718155..b5a411d 100644
--- a/notebooks/p07_04-notebook-modele-bert.ipynb
+++ b/notebooks/p07_04-notebook-modele-bert.ipynb
@@ -1 +1 @@
-{"cells":[{"cell_type":"markdown","metadata":{"id":"y3x3_GfST76Z"},"source":["# Partie 4 : Analyse de Sentiment de Tweets avec BERT\n","\n","Dans ce notebook, nous explorons l'analyse de sentiment de tweets en utilisant **BERT (Bidirectional Encoder Representations from Transformers)**, un modèle de deep learning à la pointe de la technologie pour le traitement du langage naturel. Le dataset **Sentiment140** contient 1,6 million de tweets étiquetés (positifs ou négatifs), ce qui en fait une excellente ressource pour entraîner notre modèle. Contrairement aux approches traditionnelles qui nécessitent une ingénierie de caractéristiques complexe, **BERT comprend le contexte bidirectionnel des mots**, ce qui est particulièrement utile pour capturer les subtilités linguistiques des tweets comme l'ironie, les abréviations et les expressions idiomatiques propres aux réseaux sociaux.\n","\n","Concernant l'entrainement, le choix a été fait d'entrainer par optimisation de la variable de perte de validation `val_loss` avec en particulier un critère d'`EarlyStopping` au bout d'un certain nombre d'époques lancées (7, en l'ocurrence) afin de garantir une bonne généralisation ainsi qu'une limitation de l'overfitting.\n","\n","Cependant, le critère qui sera retenu comme le plus important en raison de notre problématique métier est la `precision` car nous souhaitons plus que tout éviter les faux positifs (tweet prédit comme positif, alors qu'il sera mal reçu)."]},{"cell_type":"markdown","metadata":{"id":"kW-8vumuT76b"},"source":["## Importation des bibliothèques"]},{"cell_type":"code","execution_count":1,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"Xplx_nQRg0rF","executionInfo":{"status":"ok","timestamp":1751448435967,"user_tz":-120,"elapsed":1150,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"c4ea9a18-24dd-48b3-cd5a-75aed9500009"},"outputs":[{"output_type":"stream","name":"stdout","text":["Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n"]}],"source":["from google.colab import drive\n","drive.mount('/content/drive')\n","import os\n","drive_folder= \"/content/drive/MyDrive/Colab_Notebooks/Project_7/notebooks\"\n","os.chdir(drive_folder)\n","# os.listdir()"]},{"cell_type":"code","execution_count":2,"metadata":{"id":"tXTBgiq7U8gK","executionInfo":{"status":"ok","timestamp":1751448462025,"user_tz":-120,"elapsed":26060,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["!pip install mlflow boto3 dotenv --quiet"]},{"cell_type":"code","execution_count":3,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"collapsed":true,"id":"W50jr7rUT76d","executionInfo":{"status":"ok","timestamp":1751448466953,"user_tz":-120,"elapsed":4927,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"322f93c0-6933-44b6-a9d0-745fd5db8e24"},"outputs":[{"output_type":"stream","name":"stdout","text":["PyTorch version: 2.6.0+cu124\n","CUDA disponible: False\n"]}],"source":["import torch\n","print(f\"PyTorch version: {torch.__version__}\")\n","print(f\"CUDA disponible: {torch.cuda.is_available()}\")\n","if torch.cuda.is_available():\n"," print(f\"Appareil CUDA: {torch.cuda.get_device_name(0)}\")"]},{"cell_type":"code","execution_count":4,"metadata":{"id":"MMB0gwbBT76d","executionInfo":{"status":"ok","timestamp":1751448487987,"user_tz":-120,"elapsed":21027,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["import os\n","import pickle\n","import subprocess\n","import re\n","import pandas as pd\n","import numpy as np\n","import torch\n","from torch.utils.data import Dataset, DataLoader\n","from torch.amp import GradScaler\n","from torch.optim import AdamW\n","from transformers import DistilBertTokenizer, DistilBertForSequenceClassification, get_scheduler\n","from sklearn.model_selection import train_test_split\n","from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score\n","from sklearn.metrics import confusion_matrix, classification_report, roc_curve, auc\n","import matplotlib.pyplot as plt\n","import seaborn as sns\n","from tqdm import tqdm\n","import html\n","import pickle\n","import zipfile\n","import requests\n","import json"]},{"cell_type":"code","execution_count":5,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"OhgBsQDCUq4A","executionInfo":{"status":"ok","timestamp":1751448489639,"user_tz":-120,"elapsed":1657,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"44ba2bc6-79ce-4428-9664-c22cd7505837"},"outputs":[{"output_type":"stream","name":"stdout","text":["MLflow Tracking URI: https://mlflow.greg-madman-nas.duckdns.org/\n","Identifiants AWS configurés\n"]}],"source":["import mlflow\n","from mlflow.models.signature import infer_signature\n","from mlflow import MlflowClient\n","from mlflow.models.signature import ModelSignature\n","from mlflow.types import Schema, ColSpec, TensorSpec\n","from dotenv import load_dotenv\n","from google.colab import userdata\n","import mlflow.pytorch\n","\n","\n","# Charger les variables d'environnement depuis le fichier .env\n","load_dotenv()\n","\n","# Configuration de MLflow avec les variables d'environnement\n","mlflow_tracking_uri = os.getenv(\"MLFLOW_TRACKING_URI\")\n","mlflow_s3_endpoint_url = os.getenv(\"MLFLOW_S3_ENDPOINT_URL\")\n","aws_access_key_id = os.getenv(\"AWS_ACCESS_KEY_ID\")\n","aws_secret_access_key = os.getenv(\"AWS_SECRET_ACCESS_KEY\")\n","\n","# Configuration explicite de MLflow\n","mlflow.set_tracking_uri(mlflow_tracking_uri)\n","print(f\"MLflow Tracking URI: {mlflow_tracking_uri}\")\n","\n","# Configuration explicite des identifiants AWS\n","os.environ[\"MLFLOW_S3_ENDPOINT_URL\"] = mlflow_s3_endpoint_url\n","os.environ[\"AWS_ACCESS_KEY_ID\"] = aws_access_key_id\n","os.environ[\"AWS_SECRET_ACCESS_KEY\"] = aws_secret_access_key\n","print(\"Identifiants AWS configurés\")\n","\n","# Créer l'expérience MLflow\n","mlflow.set_experiment(\"OC Projet 7\")\n","\n","#Création du dossier de sauvegarde du modèle\n","os.makedirs('content/bert-model/model', exist_ok=True)"]},{"cell_type":"markdown","metadata":{"id":"SuNqSc3UT76d"},"source":["## 💾 Jeu de données : Sentiment140\n","\n","Le jeu de données [Sentiment140 dataset with 1.6 million tweets](https://www.kaggle.com/datasets/kazanova/sentiment140) est une ressource majeure pour l'analyse de sentiment sur Twitter, comprenant **1,6 million de tweets** extraits via l'API Twitter. Ces tweets ont été automatiquement annotés selon leur polarité sentimentale, offrant une base solide pour développer des modèles de classification de sentiment.\n","\n","Le jeu de données est organisé en 6 colonnes distinctes :\n","\n","1. **target** : La polarité du sentiment exprimé dans le tweet.\n"," - 0 = sentiment négatif\n"," - 2 = sentiment neutre\n"," - 4 = sentiment positif\n","2. **ids** : L'identifiant unique du tweet (exemple : *2087*)\n","3. **date** : La date et l'heure de publication du tweet.\n","4. **flag** : La requête utilisée pour obtenir le tweet.\n"," - Exemple : *lyx*\n"," - Si aucune requête n'a été utilisée : *NO_QUERY*\n","5. **user** : Le nom d'utilisateur de l'auteur du tweet.\n","6. **text** : Le contenu textuel du tweet."]},{"cell_type":"code","execution_count":6,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"Q5ACc3OUT76d","executionInfo":{"status":"ok","timestamp":1751448489656,"user_tz":-120,"elapsed":13,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"1a842048-f745-4037-80c1-e42c24efee08"},"outputs":[{"output_type":"stream","name":"stdout","text":["CPU times: user 861 µs, sys: 400 µs, total: 1.26 ms\n","Wall time: 3.65 ms\n"]}],"source":["%%time\n","\n","# Define the URL and the local file path\n","url = \"https://s3-eu-west-1.amazonaws.com/static.oc-static.com/prod/courses/files/AI+Engineer/Project+7%C2%A0-+D%C3%A9tectez+les+Bad+Buzz+gr%C3%A2ce+au+Deep+Learning/sentiment140.zip\"\n","local_zip_path = \"./content/data/sentiment140.zip\"\n","extract_path = \"./content/data\"\n","\n","if not os.path.exists(extract_path):\n","\n"," # Create the directory if it doesn't exist\n"," os.makedirs(extract_path, exist_ok=True)\n","\n"," # Download the zip file\n"," response = requests.get(url)\n"," with open(local_zip_path, 'wb') as file:\n"," file.write(response.content)\n","\n"," # Extract the contents of the zip file\n"," with zipfile.ZipFile(local_zip_path, 'r') as zip_ref:\n"," zip_ref.extractall(extract_path)\n","\n"," # Delete the zip file\n"," os.remove(local_zip_path)"]},{"cell_type":"code","execution_count":7,"metadata":{"id":"_D2V2EgHT76e","executionInfo":{"status":"ok","timestamp":1751448489667,"user_tz":-120,"elapsed":9,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["# Définir le chemin vers le fichier CSV\n","csv_file_path = './content/data/training.1600000.processed.noemoticon.csv'"]},{"cell_type":"markdown","source":["## 🧠📚 Entraînement spécifique de BERT\n","Notre démarche pour la classification de sentiment avec des approches avancées comprend:\n","\n","1. **Prétraitement des tweets**\n"," - Nettoyage\n"," - Tokenisation et lemmatisation\n"," - Remplacement des URLs et mentions par des tokens spéciaux\n","\n","3. **Modèles testés**\n"," - BERT\n","\n","\n","3. **Évaluation et suivi**\n"," - Métriques: précision, accuracy, recall, F1-score, ROC-AUC\n"," - Tracking avec MLflow pour la reproductibilité et la comparaison"],"metadata":{"id":"Sv9nlaIq4BZo"}},{"cell_type":"markdown","metadata":{"id":"AFdxLghUT76e"},"source":["## Prétraitement des tweets"]},{"cell_type":"code","execution_count":8,"metadata":{"id":"NmOIhsWET76e","executionInfo":{"status":"ok","timestamp":1751448489681,"user_tz":-120,"elapsed":10,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["# PRÉTRAITEMENT DES TWEETS\n","def preprocess_tweet_for_bert(tweet):\n"," \"\"\"\n"," Prétraite un tweet pour l'entraînement BERT en conservant la structure naturelle\n"," du langage mais en normalisant certains éléments spécifiques aux réseaux sociaux.\n"," \"\"\"\n"," # Vérifier si le tweet est une chaîne de caractères\n"," if not isinstance(tweet, str):\n"," return \"\"\n","\n"," # Remplacer les URLs par un token spécial\n"," tweet = re.sub(r'https?://\\S+|www\\.\\S+', '[URL]', tweet)\n","\n"," # Remplacer les mentions par un token spécial\n"," tweet = re.sub(r'@\\w+', '[USER]', tweet)\n","\n"," # Normaliser les hashtags (conserver le hashtag comme entité)\n"," tweet = re.sub(r'#(\\w+)', r'#\\1', tweet)\n","\n"," # Traiter le langage html\n"," tweet = html.unescape(tweet)\n","\n"," # Normaliser les espaces multiples\n"," tweet = re.sub(r'\\s+', ' ', tweet)\n","\n"," # Supprimer les caractères non imprimables et certains caractères spéciaux inutiles\n"," tweet = re.sub(r'[^\\x20-\\x7E]', '', tweet)\n","\n"," # Nettoyer les espaces en début et fin\n"," tweet = tweet.strip()\n","\n"," return tweet"]},{"cell_type":"markdown","metadata":{"id":"M6ViLmc7T76e"},"source":["## Préparations des données"]},{"cell_type":"code","execution_count":9,"metadata":{"id":"ap7LohJzT76e","executionInfo":{"status":"ok","timestamp":1751448489709,"user_tz":-120,"elapsed":25,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["# PRÉPARATION DES DONNÉES\n","def prepare_data(df, sample_size=50000, random_state=42):\n"," \"\"\"\n"," Préparation des données pour l'entraînement BERT\n"," \"\"\"\n"," # Remappage des labels (0=négatif, 4=positif) vers (0=négatif, 1=positif)\n"," df['target'] = df['target'].replace({0: 0, 4: 1})\n","\n"," # Prétraitement des tweets\n"," print(\"Prétraitement des tweets...\")\n"," df['processed_text'] = df['text'].apply(preprocess_tweet_for_bert)\n","\n"," # Sélection d'un échantillon pour l'entraînement.\n"," # La distribution uniforme (50%/50%) des modalités ne posera pas problème pour le sous-échantillonnage.\n"," sample_data = df.sample(n=sample_size, random_state=random_state)\n","\n"," # Division train/val/test\n"," train_val_texts, test_texts, train_val_labels, test_labels = train_test_split(\n"," sample_data['processed_text'].values,\n"," sample_data['target'].values,\n"," test_size=0.2,\n"," random_state=random_state\n"," )\n","\n"," train_texts, val_texts, train_labels, val_labels = train_test_split(\n"," train_val_texts,\n"," train_val_labels,\n"," test_size=0.2,\n"," random_state=random_state\n"," )\n","\n"," return {\n"," 'train': {'texts': train_texts, 'labels': train_labels},\n"," 'val': {'texts': val_texts, 'labels': val_labels},\n"," 'test': {'texts': test_texts, 'labels': test_labels}\n"," }"]},{"cell_type":"code","execution_count":10,"metadata":{"id":"lgWXn2SKT76e","executionInfo":{"status":"ok","timestamp":1751448489730,"user_tz":-120,"elapsed":18,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["# CRÉATION D'UN DATASET PYTORCH\n","class TweetDataset(Dataset):\n"," def __init__(self, texts, labels, tokenizer, max_length=128):\n"," self.texts = texts\n"," self.labels = labels\n"," self.tokenizer = tokenizer\n"," self.max_length = max_length\n","\n"," def __len__(self):\n"," return len(self.texts)\n","\n"," def __getitem__(self, idx):\n"," text = str(self.texts[idx])\n"," label = self.labels[idx]\n","\n"," # Tokenisation du texte\n"," encoding = self.tokenizer(\n"," text,\n"," add_special_tokens=True,\n"," max_length=self.max_length,\n"," truncation=True,\n"," padding='max_length',\n"," return_tensors='pt'\n"," )\n","\n"," return {\n"," 'input_ids': encoding['input_ids'].flatten(),\n"," 'attention_mask': encoding['attention_mask'].flatten(),\n"," 'label': torch.tensor(label, dtype=torch.long)\n"," }"]},{"cell_type":"markdown","metadata":{"id":"P_S6MpCjT76f"},"source":["## Fonctions d'entraînement"]},{"cell_type":"code","source":["# import torch\n","# from torch.cuda.amp import GradScaler\n","# from sklearn.metrics import accuracy_score, precision_score\n","# from tqdm import tqdm\n","\n","# def train_model(\n","# model,\n","# train_loader,\n","# val_loader,\n","# test_loader,\n","# device,\n","# epochs=20,\n","# gradient_accumulation_steps=4,\n","# patience=7,\n","# lr=2e-5,\n","# lr_factor=0.2,\n","# min_lr=1e-6,\n","# ):\n","# \"\"\"\n","# Train a BERT model with gradient accumulation,\n","# EarlyStopping on val_loss, and best model selection on val_precision.\n","\n","# Args:\n","# model: The BERT model to train.\n","# train_loader: DataLoader for training data.\n","# val_loader: DataLoader for validation data.\n","# test_loader: DataLoader for test data.\n","# device: 'cuda' or 'cpu' for training.\n","# epochs: Maximum number of epochs to train.\n","# gradient_accumulation_steps: Number of steps for gradient accumulation.\n","# patience: Patience for EarlyStopping based on val_loss.\n","# lr: Initial learning rate.\n","# lr_factor: Factor to reduce learning rate in scheduler.\n","# min_lr: Minimum learning rate allowed.\n","\n","# Returns:\n","# history: Training and validation history.\n","# test_metrics: Metrics on the test set.\n","# \"\"\"\n","\n","# best_val_precision = 0.0\n","# best_val_loss = float('inf')\n","# no_val_loss_improvement_count = 0\n","\n","# optimizer = torch.optim.AdamW(model.parameters(), lr=lr, eps=1e-8)\n","# scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau(\n","# optimizer, mode=\"min\", factor=lr_factor, patience=2, min_lr=min_lr, verbose=True\n","# )\n","# scaler = GradScaler()\n","\n","# history = {\n","# \"train_loss\": [],\n","# \"val_loss\": [],\n","# \"train_accuracy\": [],\n","# \"val_accuracy\": [],\n","# \"train_precision\": [],\n","# \"val_precision\": []\n","# }\n","\n","# for epoch in range(epochs):\n","# print(f\"\\n=== Epoch {epoch + 1}/{epochs} ===\")\n","\n","# # Training phase\n","# model.train()\n","# train_loss, train_true, train_preds = 0.0, [], []\n","\n","# for batch_idx, batch in enumerate(tqdm(train_loader, desc=\"Training\")):\n","# input_ids = batch[\"input_ids\"].to(device)\n","# attention_mask = batch[\"attention_mask\"].to(device)\n","# labels = batch[\"label\"].to(device)\n","\n","# optimizer.zero_grad()\n","\n","# # with autocast(enabled=torch.cuda.is_available()):\n","# with torch.amp.autocast(device_type='cuda' if torch.cuda.is_available() else 'cpu'):\n","\n","# outputs = model(input_ids=input_ids, attention_mask=attention_mask, labels=labels)\n","# loss = outputs.loss / gradient_accumulation_steps\n","\n","# scaler.scale(loss).backward()\n","\n","# if (batch_idx + 1) % gradient_accumulation_steps == 0 or (batch_idx + 1) == len(train_loader):\n","# scaler.unscale_(optimizer)\n","# torch.nn.utils.clip_grad_norm_(model.parameters(), 1.0)\n","# scaler.step(optimizer)\n","# scaler.update()\n","\n","# train_loss += loss.item() * gradient_accumulation_steps\n","# train_preds.extend(torch.argmax(outputs.logits, dim=1).cpu().numpy())\n","# train_true.extend(labels.cpu().numpy())\n","\n","# avg_train_loss = train_loss / len(train_loader)\n","# train_accuracy = accuracy_score(train_true, train_preds)\n","# train_precision = precision_score(train_true, train_preds, zero_division=0)\n","# history[\"train_loss\"].append(avg_train_loss)\n","# history[\"train_accuracy\"].append(train_accuracy)\n","# history[\"train_precision\"].append(train_precision)\n","\n","# print(f\"Train Loss: {avg_train_loss:.4f}, Train Accuracy: {train_accuracy:.4f}, Train Precision: {train_precision:.4f}\")\n","\n","# # Validation phase\n","# model.eval()\n","# val_loss, val_true, val_preds = 0.0, [], []\n","\n","# with torch.no_grad():\n","# for batch in tqdm(val_loader, desc=\"Validation\"):\n","# input_ids = batch[\"input_ids\"].to(device)\n","# attention_mask = batch[\"attention_mask\"].to(device)\n","# labels = batch[\"label\"].to(device)\n","\n","# outputs = model(input_ids=input_ids, attention_mask=attention_mask, labels=labels)\n","# loss = outputs.loss\n","\n","# val_loss += loss.item()\n","# val_preds.extend(torch.argmax(outputs.logits, dim=1).cpu().numpy())\n","# val_true.extend(labels.cpu().numpy())\n","\n","# avg_val_loss = val_loss / len(val_loader)\n","# val_accuracy = accuracy_score(val_true, val_preds)\n","# val_precision = precision_score(val_true, val_preds, zero_division=0)\n","# history[\"val_loss\"].append(avg_val_loss)\n","# history[\"val_accuracy\"].append(val_accuracy)\n","# history[\"val_precision\"].append(val_precision)\n","\n","# print(f\"Val Loss: {avg_val_loss:.4f}, Val Accuracy: {val_accuracy:.4f}, Val Precision: {val_precision:.4f}\")\n","\n","# # Scheduler step on val_loss\n","# scheduler.step(avg_val_loss)\n","\n","# # Save best model based on val_precision\n","# if val_precision > best_val_precision:\n","# best_val_precision = val_precision\n","# torch.save(model.state_dict(), \"best_model.pth\")\n","# print(\"New best model saved based on val_precision.\")\n","\n","# # EarlyStopping on val_loss\n","# if avg_val_loss < best_val_loss:\n","# best_val_loss = avg_val_loss\n","# no_val_loss_improvement_count = 0\n","# else:\n","# no_val_loss_improvement_count += 1\n","# print(f\"No val_loss improvement. Patience: {no_val_loss_improvement_count}/{patience}\")\n","\n","# if no_val_loss_improvement_count >= patience:\n","# print(\"EarlyStopping activated.\")\n","# break\n","\n","# # Load best model\n","# model.load_state_dict(torch.load(\"best_model.pth\"))\n","# print(\"Best model loaded for evaluation.\")\n","\n","# # Evaluate on test set\n","# test_metrics = evaluate_model(model, test_loader, device)\n","\n","# return history, test_metrics"],"metadata":{"id":"B-lFUgM1GV4O","executionInfo":{"status":"ok","timestamp":1751448489767,"user_tz":-120,"elapsed":35,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"execution_count":11,"outputs":[]},{"cell_type":"code","source":["import torch\n","from torch.cuda.amp import GradScaler\n","from sklearn.metrics import accuracy_score, precision_score, recall_score\n","from tqdm import tqdm\n","\n","def train_model(\n"," model,\n"," train_loader,\n"," val_loader,\n"," test_loader,\n"," device,\n"," epochs=20,\n"," gradient_accumulation_steps=4,\n"," patience=7,\n"," lr=2e-5,\n"," lr_factor=0.2,\n"," min_lr=1e-6,\n","):\n"," \"\"\"\n"," Train a BERT model with gradient accumulation,\n"," EarlyStopping on val_loss, and best model selection on val_precision.\n","\n"," Args:\n"," model: The BERT model to train.\n"," train_loader: DataLoader for training data.\n"," val_loader: DataLoader for validation data.\n"," test_loader: DataLoader for test data.\n"," device: 'cuda' or 'cpu' for training.\n"," epochs: Maximum number of epochs to train.\n"," gradient_accumulation_steps: Number of steps for gradient accumulation.\n"," patience: Patience for EarlyStopping based on val_loss.\n"," lr: Initial learning rate.\n"," lr_factor: Factor to reduce learning rate in scheduler.\n"," min_lr: Minimum learning rate allowed.\n","\n"," Returns:\n"," history: Training and validation history.\n"," test_metrics: Metrics on the test set.\n"," \"\"\"\n","\n"," best_val_precision = 0.0\n"," best_val_loss = float('inf')\n"," no_val_loss_improvement_count = 0\n","\n"," optimizer = torch.optim.AdamW(model.parameters(), lr=lr, eps=1e-8)\n"," scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau(\n"," optimizer, mode=\"min\", factor=lr_factor, patience=2, min_lr=min_lr, verbose=True\n"," )\n"," scaler = GradScaler()\n","\n"," history = {\n"," \"train_loss\": [],\n"," \"val_loss\": [],\n"," \"train_accuracy\": [],\n"," \"val_accuracy\": [],\n"," \"train_precision\": [],\n"," \"val_precision\": [],\n"," \"val_recall\": []\n"," }\n","\n"," for epoch in range(epochs):\n"," print(f\"\\n=== Epoch {epoch + 1}/{epochs} ===\")\n","\n"," # Training phase\n"," model.train()\n"," train_loss, train_true, train_preds = 0.0, [], []\n","\n"," for batch_idx, batch in enumerate(tqdm(train_loader, desc=\"Training\")):\n"," input_ids = batch[\"input_ids\"].to(device)\n"," attention_mask = batch[\"attention_mask\"].to(device)\n"," labels = batch[\"label\"].to(device)\n","\n"," optimizer.zero_grad()\n","\n"," # with autocast(enabled=torch.cuda.is_available()):\n"," with torch.amp.autocast(device_type='cuda' if torch.cuda.is_available() else 'cpu'):\n","\n"," outputs = model(input_ids=input_ids, attention_mask=attention_mask, labels=labels)\n"," loss = outputs.loss / gradient_accumulation_steps\n","\n"," scaler.scale(loss).backward()\n","\n"," if (batch_idx + 1) % gradient_accumulation_steps == 0 or (batch_idx + 1) == len(train_loader):\n"," scaler.unscale_(optimizer)\n"," torch.nn.utils.clip_grad_norm_(model.parameters(), 1.0)\n"," scaler.step(optimizer)\n"," scaler.update()\n","\n"," train_loss += loss.item() * gradient_accumulation_steps\n"," train_preds.extend(torch.argmax(outputs.logits, dim=1).cpu().numpy())\n"," train_true.extend(labels.cpu().numpy())\n","\n"," avg_train_loss = train_loss / len(train_loader)\n"," train_accuracy = accuracy_score(train_true, train_preds)\n"," train_precision = precision_score(train_true, train_preds, zero_division=0)\n"," history[\"train_loss\"].append(avg_train_loss)\n"," history[\"train_accuracy\"].append(train_accuracy)\n"," history[\"train_precision\"].append(train_precision)\n","\n"," print(f\"Train Loss: {avg_train_loss:.4f}, Train Accuracy: {train_accuracy:.4f}, Train Precision: {train_precision:.4f}\")\n","\n"," # Validation phase\n"," model.eval()\n"," val_loss, val_true, val_preds = 0.0, [], []\n","\n"," with torch.no_grad():\n"," for batch in tqdm(val_loader, desc=\"Validation\"):\n"," input_ids = batch[\"input_ids\"].to(device)\n"," attention_mask = batch[\"attention_mask\"].to(device)\n"," labels = batch[\"label\"].to(device)\n","\n"," outputs = model(input_ids=input_ids, attention_mask=attention_mask, labels=labels)\n"," loss = outputs.loss\n","\n"," val_loss += loss.item()\n"," val_preds.extend(torch.argmax(outputs.logits, dim=1).cpu().numpy())\n"," val_true.extend(labels.cpu().numpy())\n","\n"," avg_val_loss = val_loss / len(val_loader)\n"," val_accuracy = accuracy_score(val_true, val_preds)\n"," val_precision = precision_score(val_true, val_preds, zero_division=0)\n"," val_recall = recall_score(val_true, val_preds, zero_division=0) # calcul recall ajouté\n","\n"," history[\"val_loss\"].append(avg_val_loss)\n"," history[\"val_accuracy\"].append(val_accuracy)\n"," history[\"val_precision\"].append(val_precision)\n"," history[\"val_recall\"].append(val_recall) # ajout dans l'historique\n","\n"," print(f\"Val Loss: {avg_val_loss:.4f}, Val Accuracy: {val_accuracy:.4f}, Val Precision: {val_precision:.4f}, Val Recall: {val_recall:.4f}\")\n","\n"," # Scheduler step on val_loss\n"," scheduler.step(avg_val_loss)\n","\n"," # Save best model based on val_precision\n"," if val_precision > best_val_precision:\n"," best_val_precision = val_precision\n"," torch.save(model.state_dict(), \"./content/bert-model/model/best_model.pth\")\n"," print(\"New best model saved based on val_precision.\")\n","\n"," # EarlyStopping on val_loss\n"," if avg_val_loss < best_val_loss:\n"," best_val_loss = avg_val_loss\n"," no_val_loss_improvement_count = 0\n"," else:\n"," no_val_loss_improvement_count += 1\n"," print(f\"No val_loss improvement. Patience: {no_val_loss_improvement_count}/{patience}\")\n","\n"," if no_val_loss_improvement_count >= patience:\n"," print(\"EarlyStopping activated.\")\n"," break\n","\n"," # Load best model\n"," model.load_state_dict(torch.load(\"./content/bert-model/model/best_model.pth\"))\n"," print(\"Best model loaded for evaluation.\")\n","\n"," # Evaluate on test set\n"," test_metrics = evaluate_model(model, test_loader, device)\n","\n"," return history, test_metrics"],"metadata":{"id":"EsK_IQRlbu3C","executionInfo":{"status":"ok","timestamp":1751448489844,"user_tz":-120,"elapsed":76,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"execution_count":12,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"3gDy-63XT76f"},"source":["## Fonction d'évaluation"]},{"cell_type":"code","execution_count":13,"metadata":{"id":"g2DZWDoNT76f","executionInfo":{"status":"ok","timestamp":1751448489864,"user_tz":-120,"elapsed":22,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["# FONCTION D'ÉVALUATION\n","def evaluate_model(model, test_loader, device):\n"," \"\"\"\n"," Évalue le modèle sur le jeu de test et retourne les métriques et prédictions\n"," \"\"\"\n"," model.eval()\n"," test_preds, test_true = [], []\n"," test_probs = []\n","\n"," with torch.no_grad():\n"," for batch in tqdm(test_loader, desc=\"Évaluation sur le jeu de test\"):\n"," input_ids = batch['input_ids'].to(device)\n"," attention_mask = batch['attention_mask'].to(device)\n"," labels = batch['label'].to(device)\n","\n"," outputs = model(\n"," input_ids=input_ids,\n"," attention_mask=attention_mask\n"," )\n","\n"," # Récupération des prédictions et probabilités\n"," logits = outputs.logits\n"," probs = torch.nn.functional.softmax(logits, dim=1)\n"," preds = torch.argmax(logits, dim=1).cpu().numpy()\n"," true = labels.cpu().numpy()\n","\n"," test_preds.extend(preds)\n"," test_true.extend(true)\n"," test_probs.extend(probs[:, 1].cpu().numpy()) # Probabilité de la classe positive\n","\n"," # Calcul des métriques\n"," accuracy = accuracy_score(test_true, test_preds)\n"," precision = precision_score(test_true, test_preds)\n"," recall = recall_score(test_true, test_preds)\n"," f1 = f1_score(test_true, test_preds)\n","\n"," # Matrice de confusion\n"," cm = confusion_matrix(test_true, test_preds)\n","\n"," # Classification report\n"," report = classification_report(test_true, test_preds, target_names=['Négatif', 'Positif'])\n","\n"," # Courbe ROC et AUC\n"," fpr, tpr, _ = roc_curve(test_true, test_probs)\n"," roc_auc = auc(fpr, tpr)\n","\n"," # Regrouper toutes les métriques\n"," metrics = {\n"," 'accuracy': accuracy,\n"," 'precision': precision,\n"," 'recall': recall,\n"," 'f1': f1,\n"," 'roc_auc': roc_auc,\n"," 'fpr': fpr,\n"," 'tpr': tpr,\n"," 'confusion_matrix': cm,\n"," 'classification_report': report,\n"," 'predictions': test_preds,\n"," 'true_labels': test_true,\n"," 'probabilities': test_probs\n"," }\n","\n"," return metrics"]},{"cell_type":"markdown","metadata":{"id":"o0S7DzDJdvbV"},"source":["## Afficher la matrice de confusion"]},{"cell_type":"code","execution_count":14,"metadata":{"id":"nsUgEh2pT76f","executionInfo":{"status":"ok","timestamp":1751448489903,"user_tz":-120,"elapsed":39,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["# FONCTION POUR TRACER LA MATRICE DE CONFUSION\n","def plot_confusion_matrix(cm, class_names):\n"," \"\"\"\n"," Tracer la matrice de confusion\n"," \"\"\"\n"," plt.figure(figsize=(8, 6))\n"," sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=class_names, yticklabels=class_names)\n"," plt.xlabel('Prédictions')\n"," plt.ylabel('Valeurs réelles')\n"," plt.title('Matrice de confusion')\n","\n"," # Save confusion matrix\n"," filename = f'content/bert-model/confusion_matrix.png'\n"," plt.savefig(filename)\n","\n"," return plt.gcf()"]},{"cell_type":"markdown","metadata":{"id":"ORnBybYLT76g"},"source":["## Fonction pour tracer la courbe ROC AUC"]},{"cell_type":"code","execution_count":15,"metadata":{"id":"Pf-tDY3OT76g","executionInfo":{"status":"ok","timestamp":1751448489942,"user_tz":-120,"elapsed":40,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["# FONCTION POUR TRACER LA COURBE ROC\n","def plot_roc_curve(fpr, tpr, roc_auc, model_name, run_id=None):\n"," \"\"\"\n"," Trace la courbe ROC et l'enregistre dans MLflow\n"," \"\"\"\n"," plt.figure(figsize=(8, 6))\n"," plt.plot(fpr, tpr, label=f'ROC curve (area = {roc_auc:.3f})')\n"," plt.plot([0, 1], [0, 1], 'k--')\n"," plt.xlim([0.0, 1.0])\n"," plt.ylim([0.0, 1.05])\n"," plt.xlabel('Taux de faux positifs')\n"," plt.ylabel('Taux de vrais positifs')\n"," plt.title(f'Courbe ROC - {model_name}')\n"," plt.legend(loc=\"lower right\")\n","\n"," # Sauvegarder la figure localement\n"," filename = f'content/bert-model/roc_curve_{model_name}.png'\n"," plt.savefig(filename)\n","\n"," # Enregistrer dans MLflow en utilisant l'exécution existante\n"," # if run_id:\n"," # with mlflow.start_run(run_id=run_id):\n"," # mlflow.log_figure(plt.gcf(), f\"roc_curve_{model_name}.png\")\n","\n"," return plt.gcf()"]},{"cell_type":"markdown","metadata":{"id":"WD_nm9eDT76f"},"source":["## Fonction pour tracer l'historique d'entraînement"]},{"cell_type":"code","execution_count":16,"metadata":{"id":"UKzSUOlqT76g","executionInfo":{"status":"ok","timestamp":1751448489959,"user_tz":-120,"elapsed":18,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["# FONCTION POUR TRACER L'HISTORIQUE D'ENTRAÎNEMENT\n","def plot_training_history(history, model_name, run_id=None):\n"," \"\"\"\n"," Trace l'historique d'entraînement du modèle et l'enregistre dans MLflow\n"," \"\"\"\n"," fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))\n","\n"," # Tracer l'accuracy\n"," ax1.plot(history['train_precision'], label='train')\n"," ax1.plot(history['val_precision'], label='validation')\n"," ax1.set_title(f'Precision - {model_name}')\n"," ax1.set_xlabel('Epoch')\n"," ax1.set_ylabel('Precision')\n"," ax1.legend()\n","\n"," # Tracer la loss\n"," ax2.plot(history['train_loss'], label='train')\n"," ax2.plot(history['val_loss'], label='validation')\n"," ax2.set_title(f'Loss - {model_name}')\n"," ax2.set_xlabel('Epoch')\n"," ax2.set_ylabel('Loss')\n"," ax2.legend()\n","\n"," plt.tight_layout()\n","\n"," # Sauvegarder la figure localement\n"," os.makedirs('content/bert-model', exist_ok=True)\n"," filename = f'content/bert-model/training_history_{model_name}.png'\n"," plt.savefig(filename)\n","\n"," # Enregistrer dans MLflow en utilisant l'exécution existante\n"," if run_id:\n"," with mlflow.start_run(run_id=run_id):\n"," mlflow.log_figure(fig, f\"training_history_{model_name}.png\")\n","\n"," return fig"]},{"cell_type":"markdown","metadata":{"id":"aXZRXEMnT76g"},"source":["## Enregistrement du modèle dans MLFlow\n","\n","1. Définition de la signature du modèle pour MLflow\n","2. Démarrage d'une exécution MLflow avec un nom spécifique\n","3. Enregistrement des paramètres du modèle\n","4. Enregistrement des métriques de performance (accuracy, precision, recall, f1, roc_auc)\n","5. Création et enregistrement de visualisations (matrice de confusion, courbe ROC)\n","6. Enregistrement du rapport de classification\n","7. Sauvegarde locale du modèle BERT\n","8. Enregistrement du modèle PyTorch dans MLflow avec sa signature\n","9. Sauvegarde locale du tokenizer et enregistrement dans MLflow\n","10. Sauvegarde locale de la fonction de prétraitement (preprocessor) via pickle et enregistrement dans MLflow\n","11. Génération et enregistrement du fichier requirements.txt\n","10. Retourne l'**identifiant unique (Run ID)** de l'exécution MLflow qui vient d'être complétée, permettant de la référencer ultérieurement.\n","\n","## Tableau des chemins des artefacts\n","\n","| Artefact | Chemin local | Chemin MLflow |\n","|----------|--------------|---------------|\n","| Matrice de confusion | `content/bert-model/confusion_matrix.png` | `confusion_matrix_{model_name}.png` |\n","| Courbe ROC | `content/bert-model/roc_curve_{model_name}.png` | `roc_curve_{model_name}.png` |\n","| Historique d'entraînement | `content/bert-model/training_history_{model_name}.png` | `training_history_{model_name}.png` (si run_id fourni) |\n","| Rapport de classification | `content/bert-model/classification_report.txt` | Racine des artefacts |\n","| Modèle BERT | `content/bert-model/model/` | `model/` |\n","| Tokenizer | `content/bert-model/tokenizer/` | `tokenizer/` |\n","| Preprocessor | `content/bert-model/preprocessor/preprocessor.pkl` | `preprocessor/preprocessor.pkl` |\n","| Requirements | `content/bert-model/requirements.txt` | (Utilisé par MLflow comme dépendances du modèle) |\n"]},{"cell_type":"code","execution_count":17,"metadata":{"id":"3OppER9A_iPX","executionInfo":{"status":"ok","timestamp":1751448490073,"user_tz":-120,"elapsed":114,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["# FONCTION POUR ENREGISTRER LE MODÈLE DANS MLFLOW\n","def log_model_to_mlflow(model, tokenizer, model_name, metrics, params=None):\n"," \"\"\"\n"," Enregistre le modèle et ses performances dans MLflow, y compris la signature.\n"," Gère correctement les devices et la sérialisation JSON des métriques NumPy.\n"," Supprime input_example pour éviter l'avertissement de validation avec le flavor pytorch.\n","\n"," Args:\n"," model (torch.nn.Module): Le modèle PyTorch (Hugging Face) entraîné.\n"," tokenizer: Le tokenizer Hugging Face associé au modèle.\n"," model_name (str): Un nom pour identifier ce modèle/cette exécution.\n"," metrics (dict): Un dictionnaire contenant les métriques de performance.\n"," params (dict, optional): Un dictionnaire des hyperparamètres utilisés. Defaults to None.\n","\n"," Returns:\n"," str: L'ID de l'exécution MLflow.\n"," \"\"\"\n"," class_names = ['Négatif', 'Positif']\n","\n"," # --- Définir la signature du modèle ---\n"," sample_input_text = [\"Ceci est un exemple de texte pour inférer la signature.\"]\n"," inputs = tokenizer(\n"," sample_input_text, return_tensors=\"pt\", padding=\"max_length\",\n"," truncation=True, max_length=128\n"," )\n"," try:\n"," model_device = next(model.parameters()).device\n"," except StopIteration:\n"," model_device = torch.device(\"cpu\")\n"," except Exception:\n"," model_device = torch.device(\"cpu\")\n","\n"," inputs_on_device = None\n"," try:\n"," inputs_on_device = {k: v.to(model_device) for k, v in inputs.items()}\n"," except Exception as e:\n"," print(f\"Error moving input tensors to device {model_device}: {e}. Skipping signature inference.\")\n","\n"," input_data_for_signature = {k: v.cpu().numpy() for k, v in inputs.items()} # For potential future use, still on CPU\n","\n"," predictions = None\n"," signature = None\n"," if inputs_on_device:\n"," model.eval()\n"," with torch.no_grad():\n"," try:\n"," outputs = model(**inputs_on_device)\n"," if hasattr(outputs, 'logits'):\n"," predictions = outputs.logits.cpu().numpy()\n"," elif isinstance(outputs, torch.Tensor):\n"," predictions = outputs.cpu().numpy()\n"," else:\n"," # Fallback attempt\n"," for val in getattr(outputs, 'values', lambda: [])(): # Handle dicts or sequences\n"," if isinstance(val, torch.Tensor):\n"," predictions = val.cpu().numpy()\n"," break\n","\n"," if predictions is not None:\n"," # Infer signature using the CPU numpy inputs and CPU numpy predictions\n"," signature = infer_signature(input_data_for_signature, predictions)\n"," print(\"Model signature inferred successfully.\")\n"," else:\n"," print(\"Warning: Could not extract prediction tensor for signature.\")\n","\n"," except Exception as e:\n"," print(f\"Error during model prediction or signature inference: {e}\")\n"," else:\n"," print(\"Skipping signature inference because input tensors could not be moved to model device.\")\n"," # --- Fin de la définition de la signature ---\n","\n"," # Démarrer une exécution MLflow\n"," with mlflow.start_run(run_name=f\"Model_Bert-{model_name}\") as run:\n","\n"," # Enregistrer les paramètres du modèle\n"," if params:\n"," for key, value in params.items():\n"," mlflow.log_param(key, value)\n","\n"," # Enregistrer les métriques de performance\n"," mlflow.log_metric(\"accuracy\", metrics['accuracy'])\n"," mlflow.log_metric(\"precision\", metrics['precision'])\n"," mlflow.log_metric(\"recall\", metrics['recall'])\n"," mlflow.log_metric(\"f1\", metrics['f1'])\n"," mlflow.log_metric(\"roc_auc\", metrics['roc_auc'])\n","\n"," mlflow.log_param(\"model_base\", model_name)\n"," mlflow.set_tag(\"model_base\", model_name)\n","\n"," # Tracer et enregistrer la matrice de confusion\n"," fig_cm = plot_confusion_matrix(metrics['confusion_matrix'], class_names)\n"," mlflow.log_figure(fig_cm, f\"confusion_matrix_{model_name}.png\")\n","\n"," # Tracer et enregistrer la courbe ROC\n"," fig_roc = plot_roc_curve(metrics['fpr'], metrics['tpr'], metrics['roc_auc'], model_name)\n"," mlflow.log_figure(fig_roc, f\"roc_curve_{model_name}.png\")\n","\n"," # Enregistrer le rapport de classification\n"," report_path = f\"content/bert-model/classification_report.txt\"\n"," os.makedirs(os.path.dirname(report_path), exist_ok=True)\n"," with open(report_path, \"w\") as f:\n"," f.write(metrics['classification_report'])\n"," mlflow.log_artifact(report_path)\n","\n","\n"," # Sauvegarder le modèle localement\n"," model_path = f\"content/bert-model/model\"\n"," os.makedirs(model_path, exist_ok=True)\n"," try:\n"," model.save_pretrained(model_path)\n"," print(\"Model logged to MLflow artifact path 'model'.\")\n"," except Exception as e:\n"," print(f\"Warning: Failed to save or log model: {e}\")\n","\n","\n"," # Enregistrer le tokenizer localement et sur MLFlow\n"," tokenizer_path = f\"content/bert-model/tokenizer\"\n"," os.makedirs(tokenizer_path, exist_ok=True)\n"," try:\n"," tokenizer.save_pretrained(tokenizer_path)\n"," mlflow.log_artifact(tokenizer_path)\n"," print(\"Tokenizer logged to MLflow artifact path 'tokenizer'.\")\n"," except Exception as e:\n"," print(f\"Warning: Failed to save or log tokenizer: {e}\")\n","\n","\n"," # --- Sauvegarder la fonction preprocessor via pickle ---\n"," local_save_directory = \"content/bert-model/preprocessor\" # Attention au double \"content\" si c'est bien voulu\n"," local_pickle_filename = \"preprocessor.pkl\"\n"," local_pickle_filepath = os.path.join(local_save_directory, local_pickle_filename)\n"," # Sous-dossier cible dans les artefacts MLflow\n"," mlflow_artifact_subdir = \"preprocessor\"\n"," try:\n"," os.makedirs(local_save_directory, exist_ok=True)\n"," with open(local_pickle_filepath, \"wb\") as f_out:\n"," pickle.dump(preprocess_tweet_for_bert, f_out)\n"," mlflow.log_artifact(local_pickle_filepath, artifact_path=mlflow_artifact_subdir)\n"," except NameError:\n"," print(f\"\\nWarning: La fonction 'preprocess_tweet_for_bert' n'est pas définie. Impossible de la sauvegarder.\\n\")\n"," except Exception as e:\n"," print(f\"\\nWarning: Impossible de sauvegarder (pickle) ou logger la fonction de prétraitement : {e}\\n\")\n","\n","\n"," # Enregistrer le fichier requirements.txt\n"," requirements_path = \"content/bert-model/requirements.txt\"\n"," try:\n"," with open(requirements_path, 'w') as f:\n"," import sys\n"," subprocess.check_call([sys.executable, '-m', 'pip', 'freeze'], stdout=f)\n"," except subprocess.CalledProcessError as e:\n"," print(f\"Warning: Failed to generate requirements.txt: {e}. Logging without pip_requirements.\")\n"," requirements_path = None\n"," except Exception as e:\n"," print(f\"An unexpected error occurred during requirements generation: {e}\")\n"," requirements_path = None\n","\n"," # --- Enregistrer le modèle PyTorch sans input_example ---\n"," try:\n"," mlflow.pytorch.log_model(\n"," pytorch_model=model,\n"," artifact_path=\"model\", # Simplement \"model\" pour être cohérent\n"," signature=signature,\n"," pip_requirements=requirements_path if requirements_path else None\n"," )\n"," print(f\"Model '{model_name}' logged to MLflow artifact path 'model_{model_name}'.\")\n"," except Exception as e:\n"," print(f\"FATAL: Error logging PyTorch model to MLflow: {e}\")\n"," return None\n","\n"," print(f\"MLflow logging attempt finished for run '{run.info.run_id}'.\")\n","\n"," return run.info.run_id"]},{"cell_type":"code","source":["# FONCTION POUR ENREGISTRER LE MODÈLE DANS MLFLOW\n","def log_model_to_mlflow(model, tokenizer, model_name, metrics, history=None, params=None):\n"," \"\"\"\n"," Enregistre le modèle et ses performances dans MLflow, y compris la signature.\n"," Gère correctement les devices et la sérialisation JSON des métriques NumPy.\n"," Supprime input_example pour éviter l'avertissement de validation avec le flavor pytorch.\n","\n"," Args:\n"," model (torch.nn.Module): Le modèle PyTorch (Hugging Face) entraîné.\n"," tokenizer: Le tokenizer Hugging Face associé au modèle.\n"," model_name (str): Un nom pour identifier ce modèle/cette exécution.\n"," metrics (dict): Un dictionnaire contenant les métriques de performance.\n"," params (dict, optional): Un dictionnaire des hyperparamètres utilisés. Defaults to None.\n","\n"," Returns:\n"," str: L'ID de l'exécution MLflow.\n"," \"\"\"\n"," class_names = ['Négatif', 'Positif']\n","\n"," # --- Définir la signature du modèle ---\n"," sample_input_text = [\"Ceci est un exemple de texte pour inférer la signature.\"]\n"," inputs = tokenizer(\n"," sample_input_text, return_tensors=\"pt\", padding=\"max_length\",\n"," truncation=True, max_length=128\n"," )\n"," try:\n"," model_device = next(model.parameters()).device\n"," except StopIteration:\n"," model_device = torch.device(\"cpu\")\n"," except Exception:\n"," model_device = torch.device(\"cpu\")\n","\n"," inputs_on_device = None\n"," try:\n"," inputs_on_device = {k: v.to(model_device) for k, v in inputs.items()}\n"," except Exception as e:\n"," print(f\"Error moving input tensors to device {model_device}: {e}. Skipping signature inference.\")\n","\n"," input_data_for_signature = {k: v.cpu().numpy() for k, v in inputs.items()} # For potential future use, still on CPU\n","\n"," predictions = None\n"," signature = None\n"," if inputs_on_device:\n"," model.eval()\n"," with torch.no_grad():\n"," try:\n"," outputs = model(**inputs_on_device)\n"," if hasattr(outputs, 'logits'):\n"," predictions = outputs.logits.cpu().numpy()\n"," elif isinstance(outputs, torch.Tensor):\n"," predictions = outputs.cpu().numpy()\n"," else:\n"," # Fallback attempt\n"," for val in getattr(outputs, 'values', lambda: [])(): # Handle dicts or sequences\n"," if isinstance(val, torch.Tensor):\n"," predictions = val.cpu().numpy()\n"," break\n","\n"," if predictions is not None:\n"," # Infer signature using the CPU numpy inputs and CPU numpy predictions\n"," signature = infer_signature(input_data_for_signature, predictions)\n"," print(\"Model signature inferred successfully.\")\n"," else:\n"," print(\"Warning: Could not extract prediction tensor for signature.\")\n","\n"," except Exception as e:\n"," print(f\"Error during model prediction or signature inference: {e}\")\n"," else:\n"," print(\"Skipping signature inference because input tensors could not be moved to model device.\")\n"," # --- Fin de la définition de la signature ---\n","\n"," # Démarrer une exécution MLflow\n"," with mlflow.start_run(run_name=f\"Model_Bert-{model_name}\") as run:\n","\n"," # Enregistrer les paramètres du modèle\n"," if params:\n"," for key, value in params.items():\n"," mlflow.log_param(key, value)\n","\n"," if history is not None:\n"," val_precisions = history.get(\"val_precision\", [])\n"," if val_precisions:\n"," best_epoch_idx = val_precisions.index(max(val_precisions))\n","\n"," val_precision_at_best = val_precisions[best_epoch_idx]\n"," val_loss_at_best = history.get(\"val_loss\", [None])[best_epoch_idx]\n"," val_recall_at_best = history.get(\"val_recall\", [None])[best_epoch_idx]\n","\n"," mlflow.log_metric(\"val_precision\", val_precision_at_best)\n"," mlflow.log_metric(\"val_loss\", val_loss_at_best)\n"," mlflow.log_metric(\"val_recall\", val_recall_at_best)\n","\n","\n"," # Enregistrer les métriques de performance\n"," mlflow.log_metric(\"test_precision\", metrics['precision'])\n"," mlflow.log_metric(\"test_accuracy\", metrics['accuracy'])\n"," mlflow.log_metric(\"test_recall\", metrics['recall'])\n"," mlflow.log_metric(\"test_f1\", metrics['f1'])\n"," mlflow.log_metric(\"test_roc_auc\", metrics['roc_auc'])\n","\n"," mlflow.log_param(\"model_base\", model_name)\n"," mlflow.set_tag(\"model_base\", model_name)\n","\n"," # Tracer et enregistrer la matrice de confusion\n"," fig_cm = plot_confusion_matrix(metrics['confusion_matrix'], class_names)\n"," mlflow.log_figure(fig_cm, f\"confusion_matrix_{model_name}.png\")\n","\n"," # Tracer et enregistrer la courbe ROC\n"," fig_roc = plot_roc_curve(metrics['fpr'], metrics['tpr'], metrics['roc_auc'], model_name)\n"," mlflow.log_figure(fig_roc, f\"roc_curve_{model_name}.png\")\n","\n"," # Enregistrer le rapport de classification\n"," report_path = f\"content/bert-model/classification_report.txt\"\n"," os.makedirs(os.path.dirname(report_path), exist_ok=True)\n"," with open(report_path, \"w\") as f:\n"," f.write(metrics['classification_report'])\n"," mlflow.log_artifact(report_path)\n","\n","\n"," # Sauvegarder le modèle localement\n"," model_path = f\"content/bert-model/model\"\n"," os.makedirs(model_path, exist_ok=True)\n"," try:\n"," model.save_pretrained(model_path)\n"," print(\"Model logged to MLflow artifact path 'model'.\")\n"," except Exception as e:\n"," print(f\"Warning: Failed to save or log model: {e}\")\n","\n","\n"," # Enregistrer le tokenizer localement et sur MLFlow\n"," tokenizer_path = f\"content/bert-model/tokenizer\"\n"," os.makedirs(tokenizer_path, exist_ok=True)\n"," try:\n"," tokenizer.save_pretrained(tokenizer_path)\n"," mlflow.log_artifact(tokenizer_path)\n"," print(\"Tokenizer logged to MLflow artifact path 'tokenizer'.\")\n"," except Exception as e:\n"," print(f\"Warning: Failed to save or log tokenizer: {e}\")\n","\n","\n"," # --- Sauvegarder la fonction preprocessor via pickle ---\n"," local_save_directory = \"content/bert-model/preprocessor\" # Attention au double \"content\" si c'est bien voulu\n"," local_pickle_filename = \"preprocessor.pkl\"\n"," local_pickle_filepath = os.path.join(local_save_directory, local_pickle_filename)\n"," # Sous-dossier cible dans les artefacts MLflow\n"," mlflow_artifact_subdir = \"preprocessor\"\n"," try:\n"," os.makedirs(local_save_directory, exist_ok=True)\n"," with open(local_pickle_filepath, \"wb\") as f_out:\n"," pickle.dump(preprocess_tweet_for_bert, f_out)\n"," mlflow.log_artifact(local_pickle_filepath, artifact_path=mlflow_artifact_subdir)\n"," except NameError:\n"," print(f\"\\nWarning: La fonction 'preprocess_tweet_for_bert' n'est pas définie. Impossible de la sauvegarder.\\n\")\n"," except Exception as e:\n"," print(f\"\\nWarning: Impossible de sauvegarder (pickle) ou logger la fonction de prétraitement : {e}\\n\")\n","\n","\n"," # Enregistrer le fichier requirements.txt\n"," requirements_path = \"content/bert-model/requirements.txt\"\n"," try:\n"," with open(requirements_path, 'w') as f:\n"," import sys\n"," subprocess.check_call([sys.executable, '-m', 'pip', 'freeze'], stdout=f)\n"," except subprocess.CalledProcessError as e:\n"," print(f\"Warning: Failed to generate requirements.txt: {e}. Logging without pip_requirements.\")\n"," requirements_path = None\n"," except Exception as e:\n"," print(f\"An unexpected error occurred during requirements generation: {e}\")\n"," requirements_path = None\n","\n"," # --- Enregistrer le modèle PyTorch sans input_example ---\n"," try:\n"," mlflow.pytorch.log_model(\n"," pytorch_model=model,\n"," artifact_path=\"model\", # Simplement \"model\" pour être cohérent\n"," signature=signature,\n"," pip_requirements=requirements_path if requirements_path else None\n"," )\n"," print(f\"Model '{model_name}' logged to MLflow artifact path 'model_{model_name}'.\")\n"," except Exception as e:\n"," print(f\"FATAL: Error logging PyTorch model to MLflow: {e}\")\n"," return None\n","\n"," print(f\"MLflow logging attempt finished for run '{run.info.run_id}'.\")\n","\n"," return run.info.run_id"],"metadata":{"id":"1PHu82H-YNtN","executionInfo":{"status":"ok","timestamp":1751448490132,"user_tz":-120,"elapsed":34,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"execution_count":18,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"o1uxWQimT76g"},"source":["## Entrainement du modèle : `DistilBertForSequenceClassification`\n","\n","[DistilBertForSequenceClassification](https://huggingface.co/docs/transformers/model_doc/distilbert#transformers.DistilBertForSequenceClassification) est un modèle basé sur **DistilBERT** avec **une couche de classification ou de régression ajoutée à la tête (head)**. Il est conçu pour les tâches de **classification de séquence**.\n","\n","**DistilBertForSequenceClassification** est une version allégée de BERT, idéale pour des tâches de classification de texte. Il est facile à utiliser grâce aux classes `AutoTokenizer` et `AutoModel`, et il prend en charge plusieurs types de classification (mono-étiquette, multi-étiquettes). Il s’intègre naturellement avec **PyTorch** et peut être fine-tuné sur des tâches spécifiques.\n","\n","#### 📌 **Caractéristiques principales :** \n","- **Hérite de `PreTrainedModel`**, ce qui lui permet d’utiliser les fonctionnalités standards des modèles pré-entraînés (téléchargement, sauvegarde, ajustement des embeddings, etc.). \n","- **Sous-classe de `torch.nn.Module`**, donc il fonctionne comme un module PyTorch classique. \n","- Utilisé pour **la classification de texte** (binaire, multi-classes ou multi-étiquettes). \n","\n","### ⚙️ **Méthode `forward` (passage avant du modèle)** \n","\n","**Entrées possibles :** \n","- `input_ids` : Identifiants des tokens dans le vocabulaire (obtenus avec un tokenizer). \n","- `attention_mask` : Masque pour ignorer les tokens de padding (1 = pris en compte, 0 = ignoré). \n","- `head_mask` : Masque pour désactiver certaines têtes d’attention. \n","- `inputs_embeds` : Embeddings d’entrée à utiliser à la place de `input_ids`. \n","- `labels` : Étiquettes pour la classification, utilisées pour calculer la perte (`CrossEntropy` ou `MSE` selon `num_labels`). \n","\n","**Sorties possibles :** \n","- `loss` : Perte (si `labels` est fourni). \n","- `logits` : Scores de classification (avant application de **Softmax**). \n","- `hidden_states` : États cachés de toutes les couches du modèle (si demandé). \n","- `attentions` : Poids des mécanismes d’attention (si demandé). \n","\n","### Analyse de sentiment de tweet\n","\n","Pour une **analyse de sentiment de tweet** avec **deux classes distinctes** (0 = négatif, 1 = positif), il faut utiliser **une classification simple** (**single-label classification**). \n","\n","- Chaque tweet appartient **exclusivement** à une seule catégorie (**négatif ou positif, mais pas les deux**). \n","- La classification **multi-étiquettes** est utilisée lorsque **plusieurs catégories peuvent s’appliquer simultanément** (ex : un tweet peut être à la fois « joyeux » et « informatif »). \n","\n","### 🔹 **Comment configurer le modèle pour une classification binaire ?**\n","\n","1. Charger un modèle pré-entraîné et indiquer `num_labels=2`.\n","2. Le modèle renverra 0 ou 1, indiquant si le tweet est négatif ou positif. \n","\n","Pour entraîner le modèle sur un dataset personnalisé (ex : tweets annotés manuellement), il faudra fine-tuner DistilBERT avec une **Cross-Entropy Loss** adaptée à la classification binaire.\n","\n","### Documentation\n","\n","- `distilbert-base-uncased` : https://huggingface.co/docs/transformers/model_doc/distilbert"]},{"cell_type":"code","execution_count":19,"metadata":{"id":"kVj7LqF-bZGq","executionInfo":{"status":"ok","timestamp":1751448490146,"user_tz":-120,"elapsed":14,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[],"source":["# FONCTION PRINCIPALE D'ENTRAÎNEMENT\n","def train_bert_sentiment(data_path, model_name=\"distilbert-base-uncased\", batch_size=4, epochs=3, sample_size=20000):\n"," \"\"\"\n"," Fonction principale pour l'entraînement du modèle DistilBERT sur une tâche d'analyse de sentiments.\n"," \"\"\"\n","\n"," # Définir les paramètres\n"," params = {\n"," 'model_name': model_name,\n"," 'batch_size': batch_size,\n"," 'learning_rate': 2e-5,\n"," 'epochs': epochs,\n"," 'max_length': 128,\n"," 'sample_size': sample_size\n"," }\n","\n"," # Charger les données\n"," print(\"Chargement du dataset...\")\n"," column_names = ['target', 'ids', 'date', 'flag', 'user', 'text']\n","\n"," try:\n"," raw_data = pd.read_csv(data_path, encoding='utf-8', names=column_names)\n"," except UnicodeDecodeError:\n"," print(\"Lecture du fichier en latin-1...\")\n"," raw_data = pd.read_csv(data_path, encoding='latin-1', names=column_names)\n","\n"," # Préparer les données\n"," print(\"Préparation des données...\")\n"," data_splits = prepare_data(raw_data, sample_size=sample_size)\n","\n"," # Initialiser le tokenizer et le modèle\n"," print(\"Initialisation du modèle DistilBERT...\")\n"," tokenizer = DistilBertTokenizer.from_pretrained(model_name)\n"," model = DistilBertForSequenceClassification.from_pretrained(\n"," model_name,\n"," num_labels=2 # Sentiment binaire (0 = négatif, 1 = positif)\n"," )\n","\n"," # Ajustement du batch size selon la mémoire GPU\n"," adjusted_batch_size = min(8, batch_size)\n"," print(f\"Batch size ajusté à {adjusted_batch_size} pour économiser la mémoire GPU.\")\n","\n"," # Création des datasets et des dataloaders\n"," train_dataset = TweetDataset(data_splits['train']['texts'], data_splits['train']['labels'], tokenizer)\n"," val_dataset = TweetDataset(data_splits['val']['texts'], data_splits['val']['labels'], tokenizer)\n"," test_dataset = TweetDataset(data_splits['test']['texts'], data_splits['test']['labels'], tokenizer)\n","\n"," train_loader = DataLoader(train_dataset, batch_size=adjusted_batch_size, shuffle=True)\n"," val_loader = DataLoader(val_dataset, batch_size=adjusted_batch_size * 2)\n"," test_loader = DataLoader(test_dataset, batch_size=adjusted_batch_size * 2)\n","\n"," # Détection du device (GPU/CPU)\n"," device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n"," print(f\"Utilisation de : {device}\")\n","\n"," # Déplacement du modèle sur le device\n"," model.to(device)\n","\n"," # Entraînement du modèle\n"," print(\"Début de l'entraînement...\")\n","\n"," # Ajustement de l'accumulation de gradients\n"," gradient_accumulation_steps = max(1, 16 // adjusted_batch_size) # Éviter des valeurs trop élevées\n"," print(f\"Accumulation de gradient ajustée à {gradient_accumulation_steps} étapes.\")\n","\n"," history, metrics = train_model(\n"," model,\n"," train_loader,\n"," val_loader,\n"," test_loader,\n"," device,\n"," epochs=epochs,\n"," gradient_accumulation_steps=gradient_accumulation_steps\n"," )\n","\n"," # Enregistrement du modèle dans MLflow\n"," print(\"Enregistrement du modèle dans MLflow...\")\n"," run_id = log_model_to_mlflow(model, tokenizer, model_name, metrics, history, params)\n","\n"," # Tracer et enregistrer l'historique d'entraînement\n"," plot_training_history(history, model_name, run_id)\n","\n"," # Retourner le modèle entraîné et le tokenizer\n"," return {\n"," 'model': model,\n"," 'tokenizer': tokenizer,\n"," 'metrics': metrics,\n"," 'run_id': run_id\n"," }\n"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"8Y3ycjLlT76h","outputId":"d44ffc85-6cea-460f-c244-c97cfc3d8906","collapsed":true},"outputs":[{"output_type":"stream","name":"stdout","text":["Chargement du dataset...\n","Lecture du fichier en latin-1...\n","Préparation des données...\n","Prétraitement des tweets...\n","Initialisation du modèle DistilBERT...\n"]},{"output_type":"stream","name":"stderr","text":["/usr/local/lib/python3.11/dist-packages/huggingface_hub/utils/_auth.py:94: UserWarning: \n","The secret `HF_TOKEN` does not exist in your Colab secrets.\n","To authenticate with the Hugging Face Hub, create a token in your settings tab (https://huggingface.co/settings/tokens), set it as secret in your Google Colab and restart your session.\n","You will be able to reuse this secret in all of your notebooks.\n","Please note that authentication is recommended but still optional to access public models or datasets.\n"," warnings.warn(\n","Some weights of DistilBertForSequenceClassification were not initialized from the model checkpoint at distilbert-base-uncased and are newly initialized: ['classifier.bias', 'classifier.weight', 'pre_classifier.bias', 'pre_classifier.weight']\n","You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.\n","/tmp/ipython-input-12-2251732592.py:49: FutureWarning: `torch.cuda.amp.GradScaler(args...)` is deprecated. Please use `torch.amp.GradScaler('cuda', args...)` instead.\n"," scaler = GradScaler()\n","/usr/local/lib/python3.11/dist-packages/torch/amp/grad_scaler.py:132: UserWarning: torch.cuda.amp.GradScaler is enabled, but CUDA is not available. Disabling.\n"," warnings.warn(\n"]},{"output_type":"stream","name":"stdout","text":["Batch size ajusté à 8 pour économiser la mémoire GPU.\n","Utilisation de : cpu\n","Début de l'entraînement...\n","Accumulation de gradient ajustée à 2 étapes.\n","\n","=== Epoch 1/20 ===\n"]},{"output_type":"stream","name":"stderr","text":["Training: 0%| | 1/8000 [03:09<420:21:53, 189.19s/it]"]}],"source":[" Entraîner le modèle\n","bert_pack = train_bert_sentiment(\n"," data_path=csv_file_path,\n"," model_name=\"distilbert-base-uncased\",\n"," batch_size=16,\n"," epochs=20,\n"," sample_size=100000\n",")"]},{"cell_type":"markdown","metadata":{"id":"gYK8Th3rT76h"},"source":["## Chargement du modèle"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"yYPiB5A8N7l_"},"outputs":[],"source":["# FONCTION POUR CHARGER LE MODÈLE ENTRAINÉ\n","def load_bert_model(model_base_dir=\"content/bert-model\"):\n"," \"\"\"\n"," Charge le modèle BERT entraîné, le tokenizer et le preprocessor\n"," à partir de l'arborescence des artefacts sauvegardés.\n","\n"," Args:\n"," model_base_dir (str): Répertoire de base contenant tous les artefacts du modèle\n"," (par défaut: \"content/bert-model\")\n","\n"," Returns:\n"," dict: Un dictionnaire contenant le modèle, le tokenizer et la fonction de prétraitement\n"," \"\"\"\n"," # Définir les chemins des différents artefacts\n"," model_dir = os.path.join(model_base_dir, \"model\")\n"," tokenizer_dir = os.path.join(model_base_dir, \"tokenizer\")\n"," preprocessor_dir = os.path.join(model_base_dir, \"preprocessor\")\n"," preprocessor_file = os.path.join(preprocessor_dir, \"preprocessor.pkl\")\n","\n"," # Charger le modèle\n"," try:\n"," model = DistilBertForSequenceClassification.from_pretrained(model_dir)\n"," print(f\"Modèle chargé avec succès depuis '{model_dir}'\")\n"," except Exception as e:\n"," print(f\"Erreur lors du chargement du modèle : {e}\")\n"," raise\n","\n"," # Charger le tokenizer\n"," try:\n"," tokenizer = DistilBertTokenizer.from_pretrained(tokenizer_dir)\n"," print(f\"Tokenizer chargé avec succès depuis '{tokenizer_dir}'\")\n"," except Exception as e:\n"," print(f\"Erreur lors du chargement du tokenizer : {e}\")\n"," raise\n","\n"," # Charger la fonction de prétraitement\n"," try:\n"," with open(preprocessor_file, \"rb\") as f_in:\n"," preprocess_tweet_for_bert = pickle.load(f_in)\n"," print(f\"Fonction 'preprocess_tweet_for_bert' chargée avec succès depuis '{preprocessor_file}'\")\n"," except FileNotFoundError:\n"," print(f\"Erreur : Fichier preprocessor introuvable à l'emplacement '{preprocessor_file}'.\")\n"," preprocess_tweet_for_bert = None\n"," except Exception as e:\n"," print(f\"Erreur lors du chargement de la fonction de prétraitement : {e}\")\n"," preprocess_tweet_for_bert = None\n","\n"," # Vérifier si on a bien chargé la fonction de prétraitement\n"," if preprocess_tweet_for_bert is None:\n"," print(\"ATTENTION: Fonction de prétraitement non chargée. Les prédictions pourraient être affectées.\")\n","\n"," # Création d'un pack pour faciliter l'utilisation\n"," model_pack = {\n"," 'model': model,\n"," 'tokenizer': tokenizer,\n"," 'preprocess': preprocess_tweet_for_bert\n"," }\n","\n"," return model_pack"]},{"cell_type":"markdown","metadata":{"id":"tB3Uiz5pT76h"},"source":["## Fonction de prédiction"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"RkFU6mWxT76h"},"outputs":[],"source":["# FONCTION DE PRÉDICTION\n","def predict_sentiment(tweet, model_pack):\n"," \"\"\"\n"," Prédit le sentiment d'un tweet à l'aide du modèle BERT\n"," \"\"\"\n"," model = model_pack['model']\n"," tokenizer = model_pack['tokenizer']\n"," preprocess = model_pack['preprocess']\n","\n"," # Prétraitement du tweet\n"," processed_tweet = preprocess(tweet)\n","\n"," # Tokenisation\n"," encoding = tokenizer(\n"," processed_tweet,\n"," return_tensors=\"pt\",\n"," truncation=True,\n"," padding=True,\n"," max_length=128\n"," )\n","\n"," # Détection du device\n"," device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n"," model = model.to(device)\n","\n"," # Passer au mode évaluation\n"," model.eval()\n","\n"," # Déplacer les tenseurs sur le device\n"," input_ids = encoding['input_ids'].to(device)\n"," attention_mask = encoding['attention_mask'].to(device)\n","\n"," # Prédiction\n"," with torch.no_grad():\n"," outputs = model(input_ids=input_ids, attention_mask=attention_mask)\n"," logits = outputs.logits\n"," probabilities = torch.nn.functional.softmax(logits, dim=1)\n","\n"," # Récupérer le sentiment prédit et le score de confiance\n"," predicted_class = torch.argmax(probabilities, dim=1).item()\n"," confidence_score = probabilities[0][predicted_class].item()\n"," raw_score = probabilities[0][1].item() # Score de la classe positive\n","\n"," # Convertir en étiquette lisible\n"," sentiment = \"Positif\" if predicted_class == 1 else \"Négatif\"\n","\n"," # Résultat\n"," result = {\n"," 'sentiment': sentiment,\n"," 'confidence': confidence_score,\n"," 'raw_score': raw_score\n"," }\n","\n"," return result"]},{"cell_type":"markdown","metadata":{"id":"_tNu9-3tT76h"},"source":["## Test sur un ensemble de tweets"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"ZFMlwStUT76h"},"outputs":[],"source":["# FONCTION DE TEST SUR ENSEMBLE DE TWEETS\n","def test_model_on_examples(model_pack, test_tweets):\n"," \"\"\"\n"," Teste le modèle sur une liste de tweets et retourne un DataFrame avec les résultats des prédictions.\n"," \"\"\"\n"," results = {\n"," \"Positif\": 0,\n"," \"Négatif\": 0\n"," }\n","\n"," # Créer un DataFrame pour stocker les résultats\n"," predictions_data = []\n","\n"," for i, tweet in enumerate(test_tweets):\n"," # Utiliser la fonction predict_sentiment avec model_pack\n"," result = predict_sentiment(tweet, model_pack)\n","\n"," # Ajouter l'emoji approprié pour le sentiment\n"," emoji = \"💚\" if result['sentiment'] == \"Positif\" else \"❌\"\n","\n"," # Ajouter les données au DataFrame\n"," predictions_data.append({\n"," \"Tweet\": tweet,\n"," \"Sentiment\": result['sentiment'],\n"," \"Emoji\": emoji,\n"," \"Score de confiance\": result['confidence'],\n"," \"Score brut\": result['raw_score'],\n"," \"Index\": i+1\n"," })\n","\n"," # Comptage des résultats\n"," results[result['sentiment']] += 1\n","\n"," # Créer le DataFrame\n"," df_predictions = pd.DataFrame(predictions_data)\n","\n"," # Afficher un résumé\n"," print(\"\\nTest du modèle sur les exemples:\")\n"," print(\"=\"*50)\n"," print(f\"Résumé: {len(test_tweets)} tweets analysés\")\n"," print(f\"Tweets positifs: {results['Positif']} ({(results['Positif']/len(test_tweets)*100):.1f}%)\")\n"," print(f\"Tweets négatifs: {results['Négatif']} ({(results['Négatif']/len(test_tweets)*100):.1f}%)\")\n","\n"," # Sauvegarder les résultats dans un fichier CSV\n"," os.makedirs('content/bert-model', exist_ok=True)\n"," df_predictions.to_csv(\"content/bert-model/predictions_results.csv\", index=False)\n","\n"," # Retourner le DataFrame\n"," return df_predictions"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"Tkb9WDu-T76h"},"outputs":[],"source":["# Liste améliorée de tweets pour tester le modèle\n","test_tweets_improved = [\n"," # Tweets positifs avec différentes caractéristiques\n"," \"I absolutely love flying with @AirParadis! Their service is exceptional and the staff is always so friendly :) #bestairline #travel\",\n"," \"I just landed after an amazing flight... The crew was truly fantastic and the food was delicious! Can't wait to fly with them again :D\",\n"," \"Wow! You have to try @AirParadis. Best. Flight. Ever. Their new seats are incredibly comfortable. http://airparadis.com/newseats #travel #happy #AirParadis\",\n"," \"It was my first time flying business class, and I’m completely blown away!!! The service is definitely worth it... @AirParadis never lets me down :)\",\n"," \"What an incredible flight experience with @AirParadis! Everything was perfect from takeoff to landing. Would do it again in a heartbeat! #travel #satisfaction\",\n","\n"," # Tweets négatifs avec différentes caractéristiques\n"," \"Honestly, my last flight with @AirParadis was disappointing. The flight was delayed without any notice. #disappointment\",\n"," \"I had high hopes for @AirParadis, but the seat was uncomfortable and the staff seemed overwhelmed during the flight. Not the best experience.\",\n"," \"So frustrated with @AirParadis this time. The staff was unresponsive and it ruined our trip. #nothappy\",\n"," \"The flight I booked with @AirParadis was canceled at the last minute. Very disappointing and no adequate communication!\",\n"," \"The quality of service with @AirParadis has declined. I expected better. It left a sour taste. #disappointed\",\n","\n"," # Tweets mixtes et nuancés\n"," \"To be honest, @AirParadis has significantly improved their service since last year! Not perfect yet, but they are making an effort... #progress\",\n"," \"We were really looking forward to our trip, but our flight was delayed... at least the team was very apologetic and provided us with complimentary drinks! @AirParadis\",\n"," \"The flight with @AirParadis had great moments, but the delay somewhat tarnished the experience. I'll give them another chance!\",\n"," \"Overall, @AirParadis has good service, but I had a few minor issues with the check-in process. It could be better! #mixedfeelings\",\n"," \"While our flight was pleasant, the lack of communication regarding the schedule was a bit frustrating. @AirParadis can do better. #nuanced\"\n","]\n","\n","# Charger le modèle entraîné\n","model_pack = load_bert_model()\n","\n","# Tester le modèle sur les exemples\n","df_results = test_model_on_examples(model_pack, test_tweets_improved)\n","\n","print(\"Analyse de sentiment terminée! Résultats disponibles dans content/bert-model/predictions_results.csv\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"XIHAcDH3E1rH"},"outputs":[],"source":["df_results"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"-mJxfVLiGfTL"},"outputs":[],"source":["# Liste améliorée de tweets pour tester le modèle\n","unambiguous_tweets = [\n"," # --- Strongly Positive ---\n"," \"@AirParadis offers absolutely FLAWLESS service! Best airline, period. I recommend it 1000%! 😍 #DreamTrip\",\n"," \"PERFECT flight with @AirParadis today. Amazing staff, clean plane, arrived early. What more could you ask for? ⭐⭐⭐⭐⭐ #HappyCustomer\",\n"," \"I'm totally a fan of @AirParadis! Every flight is a pleasure. Comfort, kindness, punctuality... they have it all! Thank you! 😊✈️\",\n"," \"Extraordinary experience in business class on @AirParadis. Worth every penny. Luxury and attention to detail. WELL DONE! 👏 #LuxuryTravel\",\n"," \"@AirParadis saved my vacation! After a cancellation with another airline, they immediately found me a seat. Top-notch customer service! 🙏 #Saved\",\n","\n"," # --- Strongly Negative ---\n"," \"AVOID @AirParadis! The worst customer service I've ever seen. Rude, incompetent, and they lost my luggage! An absolute disgrace. 😠 #AirlineToAvoid\",\n"," \"DISASTROUS flight with @AirParadis. 5-hour delay, no information, unfriendly staff. NEVER flying with them again. 🤬 #TripRuined\",\n"," \"How can @AirParadis dare to charge for seats that are so dirty and uncomfortable? It's outright theft. Horrible airline. 👎 #Scam\",\n"," \"@AirParadis let me down. Flight canceled for no valid reason, no solution offered. Zero service. I'm disgusted. 😤 #Abandoned\",\n"," \"The food served on @AirParadis was simply inedible. Cold, tasteless... I've never eaten anything so bad on a flight. 🤢 #AirplaneFood\"\n","]\n","\n","# Charger le modèle entraîné\n","# Assurez-vous que la fonction load_bert_model est définie et fonctionnelle\n","model_pack = load_bert_model()\n","\n","# Tester le modèle sur les exemples\n","# Assurez-vous que la fonction test_model_on_examples est définie,\n","# prend le model_pack et la liste de tweets, et renvoie un DataFrame\n","df_results = test_model_on_examples(model_pack, unambiguous_tweets)\n","\n","# Afficher un message indiquant où trouver les résultats (si sauvegardés par la fonction)\n","print(\"Analyse de sentiment terminée! Vérifiez si les résultats sont dans content/bert-model/predictions_results.csv\")\n","\n","# Optionnel : Afficher les premières lignes du DataFrame résultant\n","df_results"]},{"cell_type":"markdown","source":["# Enregistrement de dépendances"],"metadata":{"id":"hkxoyNm_t6YG"}},{"cell_type":"code","source":["!pip freeze > requirements_bert.txt"],"metadata":{"id":"HjaFxsm3t9eP"},"execution_count":null,"outputs":[]}],"metadata":{"accelerator":"GPU","colab":{"gpuType":"T4","provenance":[],"toc_visible":true},"kernelspec":{"display_name":"Python 3","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.10.12"}},"nbformat":4,"nbformat_minor":0}
\ No newline at end of file
+{"cells":[{"cell_type":"markdown","metadata":{"id":"y3x3_GfST76Z"},"source":["# Partie 4 : Analyse de Sentiment de Tweets avec BERT\n","\n","Dans ce notebook, nous explorons l'analyse de sentiment de tweets en utilisant **BERT (Bidirectional Encoder Representations from Transformers)**, un modèle de deep learning à la pointe de la technologie pour le traitement du langage naturel. Le dataset **Sentiment140** contient 1,6 million de tweets étiquetés (positifs ou négatifs), ce qui en fait une excellente ressource pour entraîner notre modèle. Contrairement aux approches traditionnelles qui nécessitent une ingénierie de caractéristiques complexe, **BERT comprend le contexte bidirectionnel des mots**, ce qui est particulièrement utile pour capturer les subtilités linguistiques des tweets comme l'ironie, les abréviations et les expressions idiomatiques propres aux réseaux sociaux.\n","\n","Concernant l'entrainement, le choix a été fait d'entrainer par optimisation de la variable de perte de validation `val_loss` avec en particulier un critère d'`EarlyStopping` au bout d'un certain nombre d'époques lancées (7, en l'ocurrence) afin de garantir une bonne généralisation ainsi qu'une limitation de l'overfitting.\n","\n","Cependant, le critère qui sera retenu comme le plus important en raison de notre problématique métier est la `precision` car nous souhaitons plus que tout éviter les faux positifs (tweet prédit comme positif, alors qu'il sera mal reçu)."]},{"cell_type":"markdown","metadata":{"id":"kW-8vumuT76b"},"source":["## Importation des bibliothèques"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":18367,"status":"ok","timestamp":1752351535443,"user":{"displayName":"Grégoire","userId":"01249298206117462766"},"user_tz":-120},"id":"Xplx_nQRg0rF","outputId":"aa1a2afc-5393-4e50-de54-a2cd7e0acc05"},"outputs":[{"output_type":"stream","name":"stdout","text":["Mounted at /content/drive\n"]},{"output_type":"execute_result","data":{"text/plain":["['content',\n"," 'requirements_analyse_exploratoire.txt',\n"," 'p07_01-notebook-analyse-exploratoire.ipynb',\n"," 'requirements_bert.txt',\n"," 'requirements_modele_simple.txt',\n"," 'p07_02-notebook-modele-simple.ipynb',\n"," 'requirements_modele_avance.txt',\n"," 'p07_03-notebook-modele-avance.ipynb',\n"," 'notebook-connexion-mlflow.ipynb',\n"," 'p07_04-notebook-modele-bert.ipynb']"]},"metadata":{},"execution_count":1}],"source":["from google.colab import drive\n","drive.mount('/content/drive')\n","import os\n","drive_folder= \"/content/drive/MyDrive/Colab_Notebooks/Project_7/notebooks\"\n","os.chdir(drive_folder)\n","os.listdir()"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"tXTBgiq7U8gK","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1752351568062,"user_tz":-120,"elapsed":32608,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"97fd036f-0f54-494b-8e5d-3a261d029091"},"outputs":[{"output_type":"stream","name":"stdout","text":["\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m24.7/24.7 MB\u001b[0m \u001b[31m47.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.9/1.9 MB\u001b[0m \u001b[31m61.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m139.9/139.9 kB\u001b[0m \u001b[31m11.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m247.0/247.0 kB\u001b[0m \u001b[31m18.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m13.8/13.8 MB\u001b[0m \u001b[31m85.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m147.8/147.8 kB\u001b[0m \u001b[31m8.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m114.9/114.9 kB\u001b[0m \u001b[31m11.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m85.0/85.0 kB\u001b[0m \u001b[31m7.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m85.2/85.2 kB\u001b[0m \u001b[31m8.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m741.4/741.4 kB\u001b[0m \u001b[31m38.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m203.4/203.4 kB\u001b[0m \u001b[31m13.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m65.6/65.6 kB\u001b[0m \u001b[31m6.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m119.4/119.4 kB\u001b[0m \u001b[31m10.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m201.6/201.6 kB\u001b[0m \u001b[31m17.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25h"]}],"source":["!pip install mlflow boto3 dotenv --quiet"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"collapsed":true,"id":"W50jr7rUT76d","executionInfo":{"status":"ok","timestamp":1752351574355,"user_tz":-120,"elapsed":6287,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"437c63ff-9e8f-4251-a053-0216012499ba"},"outputs":[{"output_type":"stream","name":"stdout","text":["PyTorch version: 2.6.0+cu124\n","CUDA disponible: True\n","Appareil CUDA: Tesla T4\n"]}],"source":["import torch\n","print(f\"PyTorch version: {torch.__version__}\")\n","print(f\"CUDA disponible: {torch.cuda.is_available()}\")\n","if torch.cuda.is_available():\n"," print(f\"Appareil CUDA: {torch.cuda.get_device_name(0)}\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"MMB0gwbBT76d"},"outputs":[],"source":["import os\n","import pickle\n","import subprocess\n","import re\n","import pandas as pd\n","import numpy as np\n","import torch\n","from torch.utils.data import Dataset, DataLoader\n","from torch.amp import GradScaler\n","from torch.optim import AdamW\n","from transformers import DistilBertTokenizer, DistilBertForSequenceClassification, get_scheduler\n","from sklearn.model_selection import train_test_split\n","from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score\n","from sklearn.metrics import confusion_matrix, classification_report, roc_curve, auc\n","import matplotlib.pyplot as plt\n","import seaborn as sns\n","from tqdm import tqdm\n","import html\n","import pickle\n","import zipfile\n","import requests\n","import json"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"OhgBsQDCUq4A","executionInfo":{"status":"ok","timestamp":1752351604138,"user_tz":-120,"elapsed":2633,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"f63ccc04-79c1-40fc-8c92-5ed975f67336"},"outputs":[{"output_type":"stream","name":"stdout","text":["MLflow Tracking URI: https://mlflow.greg-madman-nas.duckdns.org/\n","Identifiants AWS configurés\n"]}],"source":["import mlflow\n","from mlflow.models.signature import infer_signature\n","from mlflow import MlflowClient\n","from mlflow.models.signature import ModelSignature\n","from mlflow.types import Schema, ColSpec, TensorSpec\n","from dotenv import load_dotenv\n","from google.colab import userdata\n","import mlflow.pytorch\n","\n","\n","# Charger les variables d'environnement depuis le fichier .env\n","load_dotenv(dotenv_path='../.env')\n","\n","# Configuration de MLflow avec les variables d'environnement\n","mlflow_tracking_uri = os.getenv(\"MLFLOW_TRACKING_URI\")\n","mlflow_s3_endpoint_url = os.getenv(\"MLFLOW_S3_ENDPOINT_URL\")\n","aws_access_key_id = os.getenv(\"AWS_ACCESS_KEY_ID\")\n","aws_secret_access_key = os.getenv(\"AWS_SECRET_ACCESS_KEY\")\n","\n","# Configuration explicite de MLflow\n","mlflow.set_tracking_uri(mlflow_tracking_uri)\n","print(f\"MLflow Tracking URI: {mlflow_tracking_uri}\")\n","\n","# Configuration explicite des identifiants AWS\n","os.environ[\"MLFLOW_S3_ENDPOINT_URL\"] = mlflow_s3_endpoint_url\n","os.environ[\"AWS_ACCESS_KEY_ID\"] = aws_access_key_id\n","os.environ[\"AWS_SECRET_ACCESS_KEY\"] = aws_secret_access_key\n","print(\"Identifiants AWS configurés\")\n","\n","# Créer l'expérience MLflow\n","mlflow.set_experiment(\"OC Projet 7\")\n","\n","#Création du dossier de sauvegarde du modèle\n","os.makedirs('content/bert-model/model', exist_ok=True)"]},{"cell_type":"markdown","metadata":{"id":"SuNqSc3UT76d"},"source":["## 💾 Jeu de données : Sentiment140\n","\n","Le jeu de données [Sentiment140 dataset with 1.6 million tweets](https://www.kaggle.com/datasets/kazanova/sentiment140) est une ressource majeure pour l'analyse de sentiment sur Twitter, comprenant **1,6 million de tweets** extraits via l'API Twitter. Ces tweets ont été automatiquement annotés selon leur polarité sentimentale, offrant une base solide pour développer des modèles de classification de sentiment.\n","\n","Le jeu de données est organisé en 6 colonnes distinctes :\n","\n","1. **target** : La polarité du sentiment exprimé dans le tweet.\n"," - 0 = sentiment négatif\n"," - 2 = sentiment neutre\n"," - 4 = sentiment positif\n","2. **ids** : L'identifiant unique du tweet (exemple : *2087*)\n","3. **date** : La date et l'heure de publication du tweet.\n","4. **flag** : La requête utilisée pour obtenir le tweet.\n"," - Exemple : *lyx*\n"," - Si aucune requête n'a été utilisée : *NO_QUERY*\n","5. **user** : Le nom d'utilisateur de l'auteur du tweet.\n","6. **text** : Le contenu textuel du tweet."]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"Q5ACc3OUT76d","executionInfo":{"status":"ok","timestamp":1752351604172,"user_tz":-120,"elapsed":26,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"940ac231-d2b1-4c8d-940c-3cc323079d56"},"outputs":[{"output_type":"stream","name":"stdout","text":["CPU times: user 60 µs, sys: 9 µs, total: 69 µs\n","Wall time: 259 µs\n"]}],"source":["%%time\n","\n","# Define the URL and the local file path\n","url = \"https://s3-eu-west-1.amazonaws.com/static.oc-static.com/prod/courses/files/AI+Engineer/Project+7%C2%A0-+D%C3%A9tectez+les+Bad+Buzz+gr%C3%A2ce+au+Deep+Learning/sentiment140.zip\"\n","local_zip_path = \"./content/data/sentiment140.zip\"\n","extract_path = \"./content/data\"\n","\n","if not os.path.exists(extract_path):\n","\n"," # Create the directory if it doesn't exist\n"," os.makedirs(extract_path, exist_ok=True)\n","\n"," # Download the zip file\n"," response = requests.get(url)\n"," with open(local_zip_path, 'wb') as file:\n"," file.write(response.content)\n","\n"," # Extract the contents of the zip file\n"," with zipfile.ZipFile(local_zip_path, 'r') as zip_ref:\n"," zip_ref.extractall(extract_path)\n","\n"," # Delete the zip file\n"," os.remove(local_zip_path)"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"_D2V2EgHT76e"},"outputs":[],"source":["# Définir le chemin vers le fichier CSV\n","csv_file_path = './content/data/training.1600000.processed.noemoticon.csv'"]},{"cell_type":"markdown","metadata":{"id":"Sv9nlaIq4BZo"},"source":["## 🧠📚 Entraînement spécifique de BERT\n","Notre démarche pour la classification de sentiment avec des approches avancées comprend:\n","\n","1. **Prétraitement des tweets**\n"," - Nettoyage\n"," - Tokenisation et lemmatisation\n"," - Remplacement des URLs et mentions par des tokens spéciaux\n","\n","3. **Modèles testés**\n"," - BERT\n","\n","\n","3. **Évaluation et suivi**\n"," - Métriques: précision, accuracy, recall, F1-score, ROC-AUC\n"," - Tracking avec MLflow pour la reproductibilité et la comparaison"]},{"cell_type":"markdown","metadata":{"id":"AFdxLghUT76e"},"source":["## Prétraitement des tweets"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"NmOIhsWET76e"},"outputs":[],"source":["# PRÉTRAITEMENT DES TWEETS\n","def preprocess_tweet_for_bert(tweet):\n"," \"\"\"\n"," Prétraite un tweet pour l'entraînement BERT en conservant la structure naturelle\n"," du langage mais en normalisant certains éléments spécifiques aux réseaux sociaux.\n"," \"\"\"\n"," # Vérifier si le tweet est une chaîne de caractères\n"," if not isinstance(tweet, str):\n"," return \"\"\n","\n"," # Remplacer les URLs par un token spécial\n"," tweet = re.sub(r'https?://\\S+|www\\.\\S+', '[URL]', tweet)\n","\n"," # Remplacer les mentions par un token spécial\n"," tweet = re.sub(r'@\\w+', '[USER]', tweet)\n","\n"," # Normaliser les hashtags (conserver le hashtag comme entité)\n"," tweet = re.sub(r'#(\\w+)', r'#\\1', tweet)\n","\n"," # Traiter le langage html\n"," tweet = html.unescape(tweet)\n","\n"," # Normaliser les espaces multiples\n"," tweet = re.sub(r'\\s+', ' ', tweet)\n","\n"," # Supprimer les caractères non imprimables et certains caractères spéciaux inutiles\n"," tweet = re.sub(r'[^\\x20-\\x7E]', '', tweet)\n","\n"," # Nettoyer les espaces en début et fin\n"," tweet = tweet.strip()\n","\n"," return tweet"]},{"cell_type":"markdown","metadata":{"id":"M6ViLmc7T76e"},"source":["## Préparations des données"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"ap7LohJzT76e"},"outputs":[],"source":["# PRÉPARATION DES DONNÉES\n","def prepare_data(df, sample_size=50000, random_state=42):\n"," \"\"\"\n"," Préparation des données pour l'entraînement BERT\n"," \"\"\"\n"," # Remappage des labels (0=négatif, 4=positif) vers (0=négatif, 1=positif)\n"," df['target'] = df['target'].replace({0: 0, 4: 1})\n","\n"," # Prétraitement des tweets\n"," print(\"Prétraitement des tweets...\")\n"," df['processed_text'] = df['text'].apply(preprocess_tweet_for_bert)\n","\n"," # Sélection d'un échantillon pour l'entraînement.\n"," # La distribution uniforme (50%/50%) des modalités ne posera pas problème pour le sous-échantillonnage.\n"," sample_data = df.sample(n=sample_size, random_state=random_state)\n","\n"," # Division train/val/test\n"," train_val_texts, test_texts, train_val_labels, test_labels = train_test_split(\n"," sample_data['processed_text'].values,\n"," sample_data['target'].values,\n"," test_size=0.2,\n"," random_state=random_state\n"," )\n","\n"," train_texts, val_texts, train_labels, val_labels = train_test_split(\n"," train_val_texts,\n"," train_val_labels,\n"," test_size=0.2,\n"," random_state=random_state\n"," )\n","\n"," return {\n"," 'train': {'texts': train_texts, 'labels': train_labels},\n"," 'val': {'texts': val_texts, 'labels': val_labels},\n"," 'test': {'texts': test_texts, 'labels': test_labels}\n"," }"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"lgWXn2SKT76e"},"outputs":[],"source":["# CRÉATION D'UN DATASET PYTORCH\n","class TweetDataset(Dataset):\n"," def __init__(self, texts, labels, tokenizer, max_length=128):\n"," self.texts = texts\n"," self.labels = labels\n"," self.tokenizer = tokenizer\n"," self.max_length = max_length\n","\n"," def __len__(self):\n"," return len(self.texts)\n","\n"," def __getitem__(self, idx):\n"," text = str(self.texts[idx])\n"," label = self.labels[idx]\n","\n"," # Tokenisation du texte\n"," encoding = self.tokenizer(\n"," text,\n"," add_special_tokens=True,\n"," max_length=self.max_length,\n"," truncation=True,\n"," padding='max_length',\n"," return_tensors='pt'\n"," )\n","\n"," return {\n"," 'input_ids': encoding['input_ids'].flatten(),\n"," 'attention_mask': encoding['attention_mask'].flatten(),\n"," 'label': torch.tensor(label, dtype=torch.long)\n"," }"]},{"cell_type":"markdown","metadata":{"id":"P_S6MpCjT76f"},"source":["## Fonctions d'entraînement"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"EsK_IQRlbu3C"},"outputs":[],"source":["import torch\n","from torch.cuda.amp import GradScaler\n","from sklearn.metrics import accuracy_score, precision_score, recall_score\n","from tqdm import tqdm\n","\n","def train_model(\n"," model,\n"," train_loader,\n"," val_loader,\n"," test_loader,\n"," device,\n"," epochs=20,\n"," gradient_accumulation_steps=4,\n"," patience=7,\n"," lr=2e-5,\n"," lr_factor=0.2,\n"," min_lr=1e-6,\n","):\n"," \"\"\"\n"," Train a BERT model with gradient accumulation,\n"," EarlyStopping on val_loss, and best model selection on val_precision.\n","\n"," Args:\n"," model: The BERT model to train.\n"," train_loader: DataLoader for training data.\n"," val_loader: DataLoader for validation data.\n"," test_loader: DataLoader for test data.\n"," device: 'cuda' or 'cpu' for training.\n"," epochs: Maximum number of epochs to train.\n"," gradient_accumulation_steps: Number of steps for gradient accumulation.\n"," patience: Patience for EarlyStopping based on val_loss.\n"," lr: Initial learning rate.\n"," lr_factor: Factor to reduce learning rate in scheduler.\n"," min_lr: Minimum learning rate allowed.\n","\n"," Returns:\n"," history: Training and validation history.\n"," test_metrics: Metrics on the test set.\n"," \"\"\"\n","\n"," best_val_precision = 0.0\n"," best_val_loss = float('inf')\n"," no_val_loss_improvement_count = 0\n","\n"," optimizer = torch.optim.AdamW(model.parameters(), lr=lr, eps=1e-8)\n"," scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau(\n"," optimizer, mode=\"min\", factor=lr_factor, patience=2, min_lr=min_lr, verbose=True\n"," )\n"," scaler = GradScaler()\n","\n"," history = {\n"," \"train_loss\": [],\n"," \"val_loss\": [],\n"," \"train_accuracy\": [],\n"," \"val_accuracy\": [],\n"," \"train_precision\": [],\n"," \"val_precision\": [],\n"," \"val_recall\": []\n"," }\n","\n"," for epoch in range(epochs):\n"," print(f\"\\n=== Epoch {epoch + 1}/{epochs} ===\")\n","\n"," # Training phase\n"," model.train()\n"," train_loss, train_true, train_preds = 0.0, [], []\n","\n"," for batch_idx, batch in enumerate(tqdm(train_loader, desc=\"Training\")):\n"," input_ids = batch[\"input_ids\"].to(device)\n"," attention_mask = batch[\"attention_mask\"].to(device)\n"," labels = batch[\"label\"].to(device)\n","\n"," optimizer.zero_grad()\n","\n"," # with autocast(enabled=torch.cuda.is_available()):\n"," with torch.amp.autocast(device_type='cuda' if torch.cuda.is_available() else 'cpu'):\n","\n"," outputs = model(input_ids=input_ids, attention_mask=attention_mask, labels=labels)\n"," loss = outputs.loss / gradient_accumulation_steps\n","\n"," scaler.scale(loss).backward()\n","\n"," if (batch_idx + 1) % gradient_accumulation_steps == 0 or (batch_idx + 1) == len(train_loader):\n"," scaler.unscale_(optimizer)\n"," torch.nn.utils.clip_grad_norm_(model.parameters(), 1.0)\n"," scaler.step(optimizer)\n"," scaler.update()\n","\n"," train_loss += loss.item() * gradient_accumulation_steps\n"," train_preds.extend(torch.argmax(outputs.logits, dim=1).cpu().numpy())\n"," train_true.extend(labels.cpu().numpy())\n","\n"," avg_train_loss = train_loss / len(train_loader)\n"," train_accuracy = accuracy_score(train_true, train_preds)\n"," train_precision = precision_score(train_true, train_preds, zero_division=0)\n"," history[\"train_loss\"].append(avg_train_loss)\n"," history[\"train_accuracy\"].append(train_accuracy)\n"," history[\"train_precision\"].append(train_precision)\n","\n"," print(f\"Train Loss: {avg_train_loss:.4f}, Train Accuracy: {train_accuracy:.4f}, Train Precision: {train_precision:.4f}\")\n","\n"," # Validation phase\n"," model.eval()\n"," val_loss, val_true, val_preds = 0.0, [], []\n","\n"," with torch.no_grad():\n"," for batch in tqdm(val_loader, desc=\"Validation\"):\n"," input_ids = batch[\"input_ids\"].to(device)\n"," attention_mask = batch[\"attention_mask\"].to(device)\n"," labels = batch[\"label\"].to(device)\n","\n"," outputs = model(input_ids=input_ids, attention_mask=attention_mask, labels=labels)\n"," loss = outputs.loss\n","\n"," val_loss += loss.item()\n"," val_preds.extend(torch.argmax(outputs.logits, dim=1).cpu().numpy())\n"," val_true.extend(labels.cpu().numpy())\n","\n"," avg_val_loss = val_loss / len(val_loader)\n"," val_accuracy = accuracy_score(val_true, val_preds)\n"," val_precision = precision_score(val_true, val_preds, zero_division=0)\n"," val_recall = recall_score(val_true, val_preds, zero_division=0) # calcul recall ajouté\n","\n"," history[\"val_loss\"].append(avg_val_loss)\n"," history[\"val_accuracy\"].append(val_accuracy)\n"," history[\"val_precision\"].append(val_precision)\n"," history[\"val_recall\"].append(val_recall) # ajout dans l'historique\n","\n"," print(f\"Val Loss: {avg_val_loss:.4f}, Val Accuracy: {val_accuracy:.4f}, Val Precision: {val_precision:.4f}, Val Recall: {val_recall:.4f}\")\n","\n"," # Scheduler step on val_loss\n"," scheduler.step(avg_val_loss)\n","\n"," # Save best model based on val_precision\n"," if val_precision > best_val_precision:\n"," best_val_precision = val_precision\n"," torch.save(model.state_dict(), \"./content/bert-model/model/best_model.pth\")\n"," print(\"New best model saved based on val_precision.\")\n","\n"," # EarlyStopping on val_loss\n"," if avg_val_loss < best_val_loss:\n"," best_val_loss = avg_val_loss\n"," no_val_loss_improvement_count = 0\n"," else:\n"," no_val_loss_improvement_count += 1\n"," print(f\"No val_loss improvement. Patience: {no_val_loss_improvement_count}/{patience}\")\n","\n"," if no_val_loss_improvement_count >= patience:\n"," print(\"EarlyStopping activated.\")\n"," break\n","\n"," # Load best model\n"," model.load_state_dict(torch.load(\"./content/bert-model/model/best_model.pth\"))\n"," print(\"Best model loaded for evaluation.\")\n","\n"," # Evaluate on test set\n"," test_metrics = evaluate_model(model, test_loader, device)\n","\n"," return history, test_metrics"]},{"cell_type":"markdown","metadata":{"id":"3gDy-63XT76f"},"source":["## Fonction d'évaluation"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"g2DZWDoNT76f"},"outputs":[],"source":["# FONCTION D'ÉVALUATION\n","def evaluate_model(model, test_loader, device):\n"," \"\"\"\n"," Évalue le modèle sur le jeu de test et retourne les métriques et prédictions\n"," \"\"\"\n"," model.eval()\n"," test_preds, test_true = [], []\n"," test_probs = []\n","\n"," with torch.no_grad():\n"," for batch in tqdm(test_loader, desc=\"Évaluation sur le jeu de test\"):\n"," input_ids = batch['input_ids'].to(device)\n"," attention_mask = batch['attention_mask'].to(device)\n"," labels = batch['label'].to(device)\n","\n"," outputs = model(\n"," input_ids=input_ids,\n"," attention_mask=attention_mask\n"," )\n","\n"," # Récupération des prédictions et probabilités\n"," logits = outputs.logits\n"," probs = torch.nn.functional.softmax(logits, dim=1)\n"," preds = torch.argmax(logits, dim=1).cpu().numpy()\n"," true = labels.cpu().numpy()\n","\n"," test_preds.extend(preds)\n"," test_true.extend(true)\n"," test_probs.extend(probs[:, 1].cpu().numpy()) # Probabilité de la classe positive\n","\n"," # Calcul des métriques\n"," accuracy = accuracy_score(test_true, test_preds)\n"," precision = precision_score(test_true, test_preds)\n"," recall = recall_score(test_true, test_preds)\n"," f1 = f1_score(test_true, test_preds)\n","\n"," # Matrice de confusion\n"," cm = confusion_matrix(test_true, test_preds)\n","\n"," # Classification report\n"," report = classification_report(test_true, test_preds, target_names=['Négatif', 'Positif'])\n","\n"," # Courbe ROC et AUC\n"," fpr, tpr, _ = roc_curve(test_true, test_probs)\n"," roc_auc = auc(fpr, tpr)\n","\n"," # Regrouper toutes les métriques\n"," metrics = {\n"," 'accuracy': accuracy,\n"," 'precision': precision,\n"," 'recall': recall,\n"," 'f1': f1,\n"," 'roc_auc': roc_auc,\n"," 'fpr': fpr,\n"," 'tpr': tpr,\n"," 'confusion_matrix': cm,\n"," 'classification_report': report,\n"," 'predictions': test_preds,\n"," 'true_labels': test_true,\n"," 'probabilities': test_probs\n"," }\n","\n"," return metrics"]},{"cell_type":"markdown","metadata":{"id":"o0S7DzDJdvbV"},"source":["## Afficher la matrice de confusion"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"nsUgEh2pT76f"},"outputs":[],"source":["# FONCTION POUR TRACER LA MATRICE DE CONFUSION\n","def plot_confusion_matrix(cm, class_names):\n"," \"\"\"\n"," Tracer la matrice de confusion\n"," \"\"\"\n"," plt.figure(figsize=(8, 6))\n"," sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=class_names, yticklabels=class_names)\n"," plt.xlabel('Prédictions')\n"," plt.ylabel('Valeurs réelles')\n"," plt.title('Matrice de confusion')\n","\n"," # Save confusion matrix\n"," filename = f'content/bert-model/confusion_matrix.png'\n"," plt.savefig(filename)\n","\n"," return plt.gcf()"]},{"cell_type":"markdown","metadata":{"id":"ORnBybYLT76g"},"source":["## Fonction pour tracer la courbe ROC AUC"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"Pf-tDY3OT76g"},"outputs":[],"source":["# FONCTION POUR TRACER LA COURBE ROC\n","def plot_roc_curve(fpr, tpr, roc_auc, model_name, run_id=None):\n"," \"\"\"\n"," Trace la courbe ROC et l'enregistre dans MLflow\n"," \"\"\"\n"," plt.figure(figsize=(8, 6))\n"," plt.plot(fpr, tpr, label=f'ROC curve (area = {roc_auc:.3f})')\n"," plt.plot([0, 1], [0, 1], 'k--')\n"," plt.xlim([0.0, 1.0])\n"," plt.ylim([0.0, 1.05])\n"," plt.xlabel('Taux de faux positifs')\n"," plt.ylabel('Taux de vrais positifs')\n"," plt.title(f'Courbe ROC - {model_name}')\n"," plt.legend(loc=\"lower right\")\n","\n"," # Sauvegarder la figure localement\n"," filename = f'content/bert-model/roc_curve_{model_name}.png'\n"," plt.savefig(filename)\n","\n"," # Enregistrer dans MLflow en utilisant l'exécution existante\n"," # if run_id:\n"," # with mlflow.start_run(run_id=run_id):\n"," # mlflow.log_figure(plt.gcf(), f\"roc_curve_{model_name}.png\")\n","\n"," return plt.gcf()"]},{"cell_type":"markdown","metadata":{"id":"WD_nm9eDT76f"},"source":["## Fonction pour tracer l'historique d'entraînement"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"UKzSUOlqT76g"},"outputs":[],"source":["# FONCTION POUR TRACER L'HISTORIQUE D'ENTRAÎNEMENT\n","def plot_training_history(history, model_name, run_id=None):\n"," \"\"\"\n"," Trace l'historique d'entraînement du modèle et l'enregistre dans MLflow\n"," \"\"\"\n"," fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))\n","\n"," # Tracer l'accuracy\n"," ax1.plot(history['train_precision'], label='train')\n"," ax1.plot(history['val_precision'], label='validation')\n"," ax1.set_title(f'Precision - {model_name}')\n"," ax1.set_xlabel('Epoch')\n"," ax1.set_ylabel('Precision')\n"," ax1.legend()\n","\n"," # Tracer la loss\n"," ax2.plot(history['train_loss'], label='train')\n"," ax2.plot(history['val_loss'], label='validation')\n"," ax2.set_title(f'Loss - {model_name}')\n"," ax2.set_xlabel('Epoch')\n"," ax2.set_ylabel('Loss')\n"," ax2.legend()\n","\n"," plt.tight_layout()\n","\n"," # Sauvegarder la figure localement\n"," os.makedirs('content/bert-model', exist_ok=True)\n"," filename = f'content/bert-model/training_history_{model_name}.png'\n"," plt.savefig(filename)\n","\n"," # Enregistrer dans MLflow en utilisant l'exécution existante\n"," if run_id:\n"," with mlflow.start_run(run_id=run_id):\n"," mlflow.log_figure(fig, f\"training_history_{model_name}.png\")\n","\n"," return fig"]},{"cell_type":"markdown","metadata":{"id":"aXZRXEMnT76g"},"source":["## Enregistrement du modèle dans MLFlow\n","\n","1. Définition de la signature du modèle pour MLflow\n","2. Démarrage d'une exécution MLflow avec un nom spécifique\n","3. Enregistrement des paramètres du modèle\n","4. Enregistrement des métriques de performance (accuracy, precision, recall, f1, roc_auc)\n","5. Création et enregistrement de visualisations (matrice de confusion, courbe ROC)\n","6. Enregistrement du rapport de classification\n","7. Sauvegarde locale du modèle BERT\n","8. Enregistrement du modèle PyTorch dans MLflow avec sa signature\n","9. Sauvegarde locale du tokenizer et enregistrement dans MLflow\n","10. Sauvegarde locale de la fonction de prétraitement (preprocessor) via pickle et enregistrement dans MLflow\n","11. Génération et enregistrement du fichier requirements.txt\n","10. Retourne l'**identifiant unique (Run ID)** de l'exécution MLflow qui vient d'être complétée, permettant de la référencer ultérieurement.\n","\n","## Tableau des chemins des artefacts\n","\n","| Artefact | Chemin local | Chemin MLflow |\n","|----------|--------------|---------------|\n","| Matrice de confusion | `content/bert-model/confusion_matrix.png` | `confusion_matrix_{model_name}.png` |\n","| Courbe ROC | `content/bert-model/roc_curve_{model_name}.png` | `roc_curve_{model_name}.png` |\n","| Historique d'entraînement | `content/bert-model/training_history_{model_name}.png` | `training_history_{model_name}.png` (si run_id fourni) |\n","| Rapport de classification | `content/bert-model/classification_report.txt` | Racine des artefacts |\n","| Modèle BERT | `content/bert-model/model/` | `model/` |\n","| Tokenizer | `content/bert-model/tokenizer/` | `tokenizer/` |\n","| Preprocessor | `content/bert-model/preprocessor/preprocessor.pkl` | `preprocessor/preprocessor.pkl` |\n","| Requirements | `content/bert-model/requirements.txt` | (Utilisé par MLflow comme dépendances du modèle) |\n"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"3OppER9A_iPX"},"outputs":[],"source":["# FONCTION POUR ENREGISTRER LE MODÈLE DANS MLFLOW\n","def log_model_to_mlflow(model, tokenizer, model_name, metrics, params=None):\n"," \"\"\"\n"," Enregistre le modèle et ses performances dans MLflow, y compris la signature.\n"," Gère correctement les devices et la sérialisation JSON des métriques NumPy.\n"," Supprime input_example pour éviter l'avertissement de validation avec le flavor pytorch.\n","\n"," Args:\n"," model (torch.nn.Module): Le modèle PyTorch (Hugging Face) entraîné.\n"," tokenizer: Le tokenizer Hugging Face associé au modèle.\n"," model_name (str): Un nom pour identifier ce modèle/cette exécution.\n"," metrics (dict): Un dictionnaire contenant les métriques de performance.\n"," params (dict, optional): Un dictionnaire des hyperparamètres utilisés. Defaults to None.\n","\n"," Returns:\n"," str: L'ID de l'exécution MLflow.\n"," \"\"\"\n"," class_names = ['Négatif', 'Positif']\n","\n"," # --- Définir la signature du modèle ---\n"," sample_input_text = [\"Ceci est un exemple de texte pour inférer la signature.\"]\n"," inputs = tokenizer(\n"," sample_input_text, return_tensors=\"pt\", padding=\"max_length\",\n"," truncation=True, max_length=128\n"," )\n"," try:\n"," model_device = next(model.parameters()).device\n"," except StopIteration:\n"," model_device = torch.device(\"cpu\")\n"," except Exception:\n"," model_device = torch.device(\"cpu\")\n","\n"," inputs_on_device = None\n"," try:\n"," inputs_on_device = {k: v.to(model_device) for k, v in inputs.items()}\n"," except Exception as e:\n"," print(f\"Error moving input tensors to device {model_device}: {e}. Skipping signature inference.\")\n","\n"," input_data_for_signature = {k: v.cpu().numpy() for k, v in inputs.items()} # For potential future use, still on CPU\n","\n"," predictions = None\n"," signature = None\n"," if inputs_on_device:\n"," model.eval()\n"," with torch.no_grad():\n"," try:\n"," outputs = model(**inputs_on_device)\n"," if hasattr(outputs, 'logits'):\n"," predictions = outputs.logits.cpu().numpy()\n"," elif isinstance(outputs, torch.Tensor):\n"," predictions = outputs.cpu().numpy()\n"," else:\n"," # Fallback attempt\n"," for val in getattr(outputs, 'values', lambda: [])(): # Handle dicts or sequences\n"," if isinstance(val, torch.Tensor):\n"," predictions = val.cpu().numpy()\n"," break\n","\n"," if predictions is not None:\n"," # Infer signature using the CPU numpy inputs and CPU numpy predictions\n"," signature = infer_signature(input_data_for_signature, predictions)\n"," print(\"Model signature inferred successfully.\")\n"," else:\n"," print(\"Warning: Could not extract prediction tensor for signature.\")\n","\n"," except Exception as e:\n"," print(f\"Error during model prediction or signature inference: {e}\")\n"," else:\n"," print(\"Skipping signature inference because input tensors could not be moved to model device.\")\n"," # --- Fin de la définition de la signature ---\n","\n"," # Démarrer une exécution MLflow\n"," with mlflow.start_run(run_name=f\"Model_Bert-{model_name}\") as run:\n","\n"," # Enregistrer les paramètres du modèle\n"," if params:\n"," for key, value in params.items():\n"," mlflow.log_param(key, value)\n","\n"," # Enregistrer les métriques de performance\n"," mlflow.log_metric(\"accuracy\", metrics['accuracy'])\n"," mlflow.log_metric(\"precision\", metrics['precision'])\n"," mlflow.log_metric(\"recall\", metrics['recall'])\n"," mlflow.log_metric(\"f1\", metrics['f1'])\n"," mlflow.log_metric(\"roc_auc\", metrics['roc_auc'])\n","\n"," mlflow.log_param(\"model_base\", model_name)\n"," mlflow.set_tag(\"model_base\", model_name)\n","\n"," # Tracer et enregistrer la matrice de confusion\n"," fig_cm = plot_confusion_matrix(metrics['confusion_matrix'], class_names)\n"," mlflow.log_figure(fig_cm, f\"confusion_matrix_{model_name}.png\")\n","\n"," # Tracer et enregistrer la courbe ROC\n"," fig_roc = plot_roc_curve(metrics['fpr'], metrics['tpr'], metrics['roc_auc'], model_name)\n"," mlflow.log_figure(fig_roc, f\"roc_curve_{model_name}.png\")\n","\n"," # Enregistrer le rapport de classification\n"," report_path = f\"content/bert-model/classification_report.txt\"\n"," os.makedirs(os.path.dirname(report_path), exist_ok=True)\n"," with open(report_path, \"w\") as f:\n"," f.write(metrics['classification_report'])\n"," mlflow.log_artifact(report_path)\n","\n","\n"," # Sauvegarder le modèle localement\n"," model_path = f\"content/bert-model/model\"\n"," os.makedirs(model_path, exist_ok=True)\n"," try:\n"," model.save_pretrained(model_path)\n"," print(\"Model logged to MLflow artifact path 'model'.\")\n"," except Exception as e:\n"," print(f\"Warning: Failed to save or log model: {e}\")\n","\n","\n"," # Enregistrer le tokenizer localement et sur MLFlow\n"," tokenizer_path = f\"content/bert-model/tokenizer\"\n"," os.makedirs(tokenizer_path, exist_ok=True)\n"," try:\n"," tokenizer.save_pretrained(tokenizer_path)\n"," mlflow.log_artifact(tokenizer_path)\n"," print(\"Tokenizer logged to MLflow artifact path 'tokenizer'.\")\n"," except Exception as e:\n"," print(f\"Warning: Failed to save or log tokenizer: {e}\")\n","\n","\n"," # --- Sauvegarder la fonction preprocessor via pickle ---\n"," local_save_directory = \"content/bert-model/preprocessor\" # Attention au double \"content\" si c'est bien voulu\n"," local_pickle_filename = \"preprocessor.pkl\"\n"," local_pickle_filepath = os.path.join(local_save_directory, local_pickle_filename)\n"," # Sous-dossier cible dans les artefacts MLflow\n"," mlflow_artifact_subdir = \"preprocessor\"\n"," try:\n"," os.makedirs(local_save_directory, exist_ok=True)\n"," with open(local_pickle_filepath, \"wb\") as f_out:\n"," pickle.dump(preprocess_tweet_for_bert, f_out)\n"," mlflow.log_artifact(local_pickle_filepath, artifact_path=mlflow_artifact_subdir)\n"," except NameError:\n"," print(f\"\\nWarning: La fonction 'preprocess_tweet_for_bert' n'est pas définie. Impossible de la sauvegarder.\\n\")\n"," except Exception as e:\n"," print(f\"\\nWarning: Impossible de sauvegarder (pickle) ou logger la fonction de prétraitement : {e}\\n\")\n","\n","\n"," # Enregistrer le fichier requirements.txt\n"," requirements_path = \"content/bert-model/requirements.txt\"\n"," try:\n"," with open(requirements_path, 'w') as f:\n"," import sys\n"," subprocess.check_call([sys.executable, '-m', 'pip', 'freeze'], stdout=f)\n"," except subprocess.CalledProcessError as e:\n"," print(f\"Warning: Failed to generate requirements.txt: {e}. Logging without pip_requirements.\")\n"," requirements_path = None\n"," except Exception as e:\n"," print(f\"An unexpected error occurred during requirements generation: {e}\")\n"," requirements_path = None\n","\n"," # --- Enregistrer le modèle PyTorch sans input_example ---\n"," try:\n"," mlflow.pytorch.log_model(\n"," pytorch_model=model,\n"," artifact_path=\"model\", # Simplement \"model\" pour être cohérent\n"," signature=signature,\n"," pip_requirements=requirements_path if requirements_path else None\n"," )\n"," print(f\"Model '{model_name}' logged to MLflow artifact path 'model_{model_name}'.\")\n"," except Exception as e:\n"," print(f\"FATAL: Error logging PyTorch model to MLflow: {e}\")\n"," return None\n","\n"," print(f\"MLflow logging attempt finished for run '{run.info.run_id}'.\")\n","\n"," return run.info.run_id"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"1PHu82H-YNtN"},"outputs":[],"source":["# FONCTION POUR ENREGISTRER LE MODÈLE DANS MLFLOW\n","def log_model_to_mlflow(model, tokenizer, model_name, metrics, history=None, params=None):\n"," \"\"\"\n"," Enregistre le modèle et ses performances dans MLflow, y compris la signature.\n"," Gère correctement les devices et la sérialisation JSON des métriques NumPy.\n"," Supprime input_example pour éviter l'avertissement de validation avec le flavor pytorch.\n","\n"," Args:\n"," model (torch.nn.Module): Le modèle PyTorch (Hugging Face) entraîné.\n"," tokenizer: Le tokenizer Hugging Face associé au modèle.\n"," model_name (str): Un nom pour identifier ce modèle/cette exécution.\n"," metrics (dict): Un dictionnaire contenant les métriques de performance.\n"," params (dict, optional): Un dictionnaire des hyperparamètres utilisés. Defaults to None.\n","\n"," Returns:\n"," str: L'ID de l'exécution MLflow.\n"," \"\"\"\n"," class_names = ['Négatif', 'Positif']\n","\n"," # --- Définir la signature du modèle ---\n"," sample_input_text = [\"Ceci est un exemple de texte pour inférer la signature.\"]\n"," inputs = tokenizer(\n"," sample_input_text, return_tensors=\"pt\", padding=\"max_length\",\n"," truncation=True, max_length=128\n"," )\n"," try:\n"," model_device = next(model.parameters()).device\n"," except StopIteration:\n"," model_device = torch.device(\"cpu\")\n"," except Exception:\n"," model_device = torch.device(\"cpu\")\n","\n"," inputs_on_device = None\n"," try:\n"," inputs_on_device = {k: v.to(model_device) for k, v in inputs.items()}\n"," except Exception as e:\n"," print(f\"Error moving input tensors to device {model_device}: {e}. Skipping signature inference.\")\n","\n"," input_data_for_signature = {k: v.cpu().numpy() for k, v in inputs.items()} # For potential future use, still on CPU\n","\n"," predictions = None\n"," signature = None\n"," if inputs_on_device:\n"," model.eval()\n"," with torch.no_grad():\n"," try:\n"," outputs = model(**inputs_on_device)\n"," if hasattr(outputs, 'logits'):\n"," predictions = outputs.logits.cpu().numpy()\n"," elif isinstance(outputs, torch.Tensor):\n"," predictions = outputs.cpu().numpy()\n"," else:\n"," # Fallback attempt\n"," for val in getattr(outputs, 'values', lambda: [])(): # Handle dicts or sequences\n"," if isinstance(val, torch.Tensor):\n"," predictions = val.cpu().numpy()\n"," break\n","\n"," if predictions is not None:\n"," # Infer signature using the CPU numpy inputs and CPU numpy predictions\n"," signature = infer_signature(input_data_for_signature, predictions)\n"," print(\"Model signature inferred successfully.\")\n"," else:\n"," print(\"Warning: Could not extract prediction tensor for signature.\")\n","\n"," except Exception as e:\n"," print(f\"Error during model prediction or signature inference: {e}\")\n"," else:\n"," print(\"Skipping signature inference because input tensors could not be moved to model device.\")\n"," # --- Fin de la définition de la signature ---\n","\n"," # Démarrer une exécution MLflow\n"," with mlflow.start_run(run_name=f\"Model_Bert-{model_name}\") as run:\n","\n"," # Enregistrer les paramètres du modèle\n"," if params:\n"," for key, value in params.items():\n"," mlflow.log_param(key, value)\n","\n"," if history is not None:\n"," val_precisions = history.get(\"val_precision\", [])\n"," if val_precisions:\n"," best_epoch_idx = val_precisions.index(max(val_precisions))\n","\n"," val_precision_at_best = val_precisions[best_epoch_idx]\n"," val_loss_at_best = history.get(\"val_loss\", [None])[best_epoch_idx]\n"," val_recall_at_best = history.get(\"val_recall\", [None])[best_epoch_idx]\n","\n"," mlflow.log_metric(\"val_precision\", val_precision_at_best)\n"," mlflow.log_metric(\"val_loss\", val_loss_at_best)\n"," mlflow.log_metric(\"val_recall\", val_recall_at_best)\n","\n","\n"," # Enregistrer les métriques de performance\n"," mlflow.log_metric(\"test_precision\", metrics['precision'])\n"," mlflow.log_metric(\"test_accuracy\", metrics['accuracy'])\n"," mlflow.log_metric(\"test_recall\", metrics['recall'])\n"," mlflow.log_metric(\"test_f1\", metrics['f1'])\n"," mlflow.log_metric(\"test_roc_auc\", metrics['roc_auc'])\n","\n"," mlflow.log_param(\"model_base\", model_name)\n"," mlflow.set_tag(\"model_base\", model_name)\n","\n"," # Tracer et enregistrer la matrice de confusion\n"," fig_cm = plot_confusion_matrix(metrics['confusion_matrix'], class_names)\n"," mlflow.log_figure(fig_cm, f\"confusion_matrix_{model_name}.png\")\n","\n"," # Tracer et enregistrer la courbe ROC\n"," fig_roc = plot_roc_curve(metrics['fpr'], metrics['tpr'], metrics['roc_auc'], model_name)\n"," mlflow.log_figure(fig_roc, f\"roc_curve_{model_name}.png\")\n","\n"," # Enregistrer le rapport de classification\n"," report_path = f\"content/bert-model/classification_report.txt\"\n"," os.makedirs(os.path.dirname(report_path), exist_ok=True)\n"," with open(report_path, \"w\") as f:\n"," f.write(metrics['classification_report'])\n"," mlflow.log_artifact(report_path)\n","\n","\n"," # Sauvegarder le modèle localement\n"," model_path = f\"content/bert-model/model\"\n"," os.makedirs(model_path, exist_ok=True)\n"," try:\n"," model.save_pretrained(model_path)\n"," print(\"Model logged to MLflow artifact path 'model'.\")\n"," except Exception as e:\n"," print(f\"Warning: Failed to save or log model: {e}\")\n","\n","\n"," # Enregistrer le tokenizer localement et sur MLFlow\n"," tokenizer_path = f\"content/bert-model/tokenizer\"\n"," os.makedirs(tokenizer_path, exist_ok=True)\n"," try:\n"," tokenizer.save_pretrained(tokenizer_path)\n"," mlflow.log_artifact(tokenizer_path)\n"," print(\"Tokenizer logged to MLflow artifact path 'tokenizer'.\")\n"," except Exception as e:\n"," print(f\"Warning: Failed to save or log tokenizer: {e}\")\n","\n","\n"," # --- Sauvegarder la fonction preprocessor via pickle ---\n"," local_save_directory = \"content/bert-model/preprocessor\" # Attention au double \"content\" si c'est bien voulu\n"," local_pickle_filename = \"preprocessor.pkl\"\n"," local_pickle_filepath = os.path.join(local_save_directory, local_pickle_filename)\n"," # Sous-dossier cible dans les artefacts MLflow\n"," mlflow_artifact_subdir = \"preprocessor\"\n"," try:\n"," os.makedirs(local_save_directory, exist_ok=True)\n"," with open(local_pickle_filepath, \"wb\") as f_out:\n"," pickle.dump(preprocess_tweet_for_bert, f_out)\n"," mlflow.log_artifact(local_pickle_filepath, artifact_path=mlflow_artifact_subdir)\n"," except NameError:\n"," print(f\"\\nWarning: La fonction 'preprocess_tweet_for_bert' n'est pas définie. Impossible de la sauvegarder.\\n\")\n"," except Exception as e:\n"," print(f\"\\nWarning: Impossible de sauvegarder (pickle) ou logger la fonction de prétraitement : {e}\\n\")\n","\n","\n"," # Enregistrer le fichier requirements.txt\n"," requirements_path = \"content/bert-model/requirements.txt\"\n"," try:\n"," with open(requirements_path, 'w') as f:\n"," import sys\n"," subprocess.check_call([sys.executable, '-m', 'pip', 'freeze'], stdout=f)\n"," except subprocess.CalledProcessError as e:\n"," print(f\"Warning: Failed to generate requirements.txt: {e}. Logging without pip_requirements.\")\n"," requirements_path = None\n"," except Exception as e:\n"," print(f\"An unexpected error occurred during requirements generation: {e}\")\n"," requirements_path = None\n","\n"," # --- Enregistrer le modèle PyTorch sans input_example ---\n"," try:\n"," mlflow.pytorch.log_model(\n"," pytorch_model=model,\n"," artifact_path=\"model\", # Simplement \"model\" pour être cohérent\n"," signature=signature,\n"," pip_requirements=requirements_path if requirements_path else None\n"," )\n"," print(f\"Model '{model_name}' logged to MLflow artifact path 'model_{model_name}'.\")\n"," except Exception as e:\n"," print(f\"FATAL: Error logging PyTorch model to MLflow: {e}\")\n"," return None\n","\n"," print(f\"MLflow logging attempt finished for run '{run.info.run_id}'.\")\n","\n"," return run.info.run_id"]},{"cell_type":"markdown","metadata":{"id":"o1uxWQimT76g"},"source":["## Entrainement du modèle : `DistilBertForSequenceClassification`\n","\n","[DistilBertForSequenceClassification](https://huggingface.co/docs/transformers/model_doc/distilbert#transformers.DistilBertForSequenceClassification) est un modèle basé sur **DistilBERT** avec **une couche de classification ou de régression ajoutée à la tête (head)**. Il est conçu pour les tâches de **classification de séquence**.\n","\n","**DistilBertForSequenceClassification** est une version allégée de BERT, idéale pour des tâches de classification de texte. Il est facile à utiliser grâce aux classes `AutoTokenizer` et `AutoModel`, et il prend en charge plusieurs types de classification (mono-étiquette, multi-étiquettes). Il s’intègre naturellement avec **PyTorch** et peut être fine-tuné sur des tâches spécifiques.\n","\n","#### 📌 **Caractéristiques principales :** \n","- **Hérite de `PreTrainedModel`**, ce qui lui permet d’utiliser les fonctionnalités standards des modèles pré-entraînés (téléchargement, sauvegarde, ajustement des embeddings, etc.). \n","- **Sous-classe de `torch.nn.Module`**, donc il fonctionne comme un module PyTorch classique. \n","- Utilisé pour **la classification de texte** (binaire, multi-classes ou multi-étiquettes). \n","\n","### ⚙️ **Méthode `forward` (passage avant du modèle)** \n","\n","**Entrées possibles :** \n","- `input_ids` : Identifiants des tokens dans le vocabulaire (obtenus avec un tokenizer). \n","- `attention_mask` : Masque pour ignorer les tokens de padding (1 = pris en compte, 0 = ignoré). \n","- `head_mask` : Masque pour désactiver certaines têtes d’attention. \n","- `inputs_embeds` : Embeddings d’entrée à utiliser à la place de `input_ids`. \n","- `labels` : Étiquettes pour la classification, utilisées pour calculer la perte (`CrossEntropy` ou `MSE` selon `num_labels`). \n","\n","**Sorties possibles :** \n","- `loss` : Perte (si `labels` est fourni). \n","- `logits` : Scores de classification (avant application de **Softmax**). \n","- `hidden_states` : États cachés de toutes les couches du modèle (si demandé). \n","- `attentions` : Poids des mécanismes d’attention (si demandé). \n","\n","### Analyse de sentiment de tweet\n","\n","Pour une **analyse de sentiment de tweet** avec **deux classes distinctes** (0 = négatif, 1 = positif), il faut utiliser **une classification simple** (**single-label classification**). \n","\n","- Chaque tweet appartient **exclusivement** à une seule catégorie (**négatif ou positif, mais pas les deux**). \n","- La classification **multi-étiquettes** est utilisée lorsque **plusieurs catégories peuvent s’appliquer simultanément** (ex : un tweet peut être à la fois « joyeux » et « informatif »). \n","\n","### 🔹 **Comment configurer le modèle pour une classification binaire ?**\n","\n","1. Charger un modèle pré-entraîné et indiquer `num_labels=2`.\n","2. Le modèle renverra 0 ou 1, indiquant si le tweet est négatif ou positif. \n","\n","Pour entraîner le modèle sur un dataset personnalisé (ex : tweets annotés manuellement), il faudra fine-tuner DistilBERT avec une **Cross-Entropy Loss** adaptée à la classification binaire.\n","\n","### Documentation\n","\n","- `distilbert-base-uncased` : https://huggingface.co/docs/transformers/model_doc/distilbert"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"kVj7LqF-bZGq"},"outputs":[],"source":["# FONCTION PRINCIPALE D'ENTRAÎNEMENT\n","def train_bert_sentiment(data_path, model_name=\"distilbert-base-uncased\", batch_size=4, epochs=3, sample_size=20000):\n"," \"\"\"\n"," Fonction principale pour l'entraînement du modèle DistilBERT sur une tâche d'analyse de sentiments.\n"," \"\"\"\n","\n"," # Définir les paramètres\n"," params = {\n"," 'model_name': model_name,\n"," 'batch_size': batch_size,\n"," 'learning_rate': 2e-5,\n"," 'epochs': epochs,\n"," 'max_length': 128,\n"," 'sample_size': sample_size\n"," }\n","\n"," # Charger les données\n"," print(\"Chargement du dataset...\")\n"," column_names = ['target', 'ids', 'date', 'flag', 'user', 'text']\n","\n"," try:\n"," raw_data = pd.read_csv(data_path, encoding='utf-8', names=column_names)\n"," except UnicodeDecodeError:\n"," print(\"Lecture du fichier en latin-1...\")\n"," raw_data = pd.read_csv(data_path, encoding='latin-1', names=column_names)\n","\n"," # Préparer les données\n"," print(\"Préparation des données...\")\n"," data_splits = prepare_data(raw_data, sample_size=sample_size)\n","\n"," # Initialiser le tokenizer et le modèle\n"," print(\"Initialisation du modèle DistilBERT...\")\n"," tokenizer = DistilBertTokenizer.from_pretrained(model_name)\n"," model = DistilBertForSequenceClassification.from_pretrained(\n"," model_name,\n"," num_labels=2 # Sentiment binaire (0 = négatif, 1 = positif)\n"," )\n","\n"," # Ajustement du batch size selon la mémoire GPU\n"," adjusted_batch_size = min(8, batch_size)\n"," print(f\"Batch size ajusté à {adjusted_batch_size} pour économiser la mémoire GPU.\")\n","\n"," # Création des datasets et des dataloaders\n"," train_dataset = TweetDataset(data_splits['train']['texts'], data_splits['train']['labels'], tokenizer)\n"," val_dataset = TweetDataset(data_splits['val']['texts'], data_splits['val']['labels'], tokenizer)\n"," test_dataset = TweetDataset(data_splits['test']['texts'], data_splits['test']['labels'], tokenizer)\n","\n"," train_loader = DataLoader(train_dataset, batch_size=adjusted_batch_size, shuffle=True)\n"," val_loader = DataLoader(val_dataset, batch_size=adjusted_batch_size * 2)\n"," test_loader = DataLoader(test_dataset, batch_size=adjusted_batch_size * 2)\n","\n"," # Détection du device (GPU/CPU)\n"," device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n"," print(f\"Utilisation de : {device}\")\n","\n"," # Déplacement du modèle sur le device\n"," model.to(device)\n","\n"," # Entraînement du modèle\n"," print(\"Début de l'entraînement...\")\n","\n"," # Ajustement de l'accumulation de gradients\n"," gradient_accumulation_steps = max(1, 16 // adjusted_batch_size) # Éviter des valeurs trop élevées\n"," print(f\"Accumulation de gradient ajustée à {gradient_accumulation_steps} étapes.\")\n","\n"," history, metrics = train_model(\n"," model,\n"," train_loader,\n"," val_loader,\n"," test_loader,\n"," device,\n"," epochs=epochs,\n"," gradient_accumulation_steps=gradient_accumulation_steps\n"," )\n","\n"," # Enregistrement du modèle dans MLflow\n"," print(\"Enregistrement du modèle dans MLflow...\")\n"," run_id = log_model_to_mlflow(model, tokenizer, model_name, metrics, history, params)\n","\n"," # Tracer et enregistrer l'historique d'entraînement\n"," plot_training_history(history, model_name, run_id)\n","\n"," # Retourner le modèle entraîné et le tokenizer\n"," return {\n"," 'model': model,\n"," 'tokenizer': tokenizer,\n"," 'metrics': metrics,\n"," 'run_id': run_id\n"," }\n"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"8Y3ycjLlT76h","colab":{"base_uri":"https://localhost:8080/","height":1000,"referenced_widgets":["f4c7033b02a2493085d1ac0cfac9cccf","3d5883b5f0bb4098bda8599622824948","3502027e67de4c36b46688597314fb2e","4db20c46a69043fdb7d29ccaa5f03e12","eb20692f8413420f9ca58df09b2d5feb","e47e179020f54e5b84017148d09480e9","e23da7120310469798127dfbf039919e","44325b25ca5f41d2a5ff31e6cdcf179f","b6aead1ab91f4ad1a903009b95c39036","2eadd184b69d41a696fed5c7bc5b1843","a52850e715624d3986a292dca1e6fa62","2bd37c30fbe74e3eb9f7d0a660b94772","5a904bdfc6e3488b963f9952ed7936c9","63840ffc38eb4932b39d00edfcbe5f15","a994789a34be47ffbafa558d1a15821d","9acf152a8b914b9faadc6a6a11f7300b","d20225cccfc64b0ba25c555cf5a3efba","0e164b5d9d17436d8cb259187680274c","716f683828664694823b072c3811c7c5","d52088f4990f492bb35d1f54c419637d","cf42f21334ba4e7e9c83edb6d2f95871","cc9639e12a1448a580b3794087a09ad1","502800fba0c04ec6b54b83a1e9fbfc11","b5cc33676b3648fd9f341bbdb5a31de5","0793c0a09e3b4ec6832080435b507ffa","771269ab33bf4b68b5a4acd4cada3de9","84cd157aa0884ec5b6629011f678339f","12e78de1f0eb45e59ce29473694e6895","d7d394ea510749f7b1820274c0553db2","10faa872bd504fa49fc1cf05c58ce391","b9c7bef298474c949940154207dea96a","d7fd75e7490946f29f20b0b4ed63ef3c","adb66ec7c3fd46089ff61496e4db9e02","e333785179dd45d89ae039fd7e6361da","bac5e480209c4cd09cb3b891dd7683f3","48b5dc12ca9241a7955b798e2b204792","8cca18086a53470894d018a04a8bc2be","340dc17022ec42e9ba4e61726711566a","58026471ff914aaeba005c52aab2db47","4db07c2a0409413384cfe1ca0dc08ff4","c764fa8136b24134a8b92649d91eb854","f828ba130d4b42a580f10d8879f1a1fd","f35f52483ef240c3adab0cce32a7b818","360c34394459499ea4c3b4ba3367ba39","f05015da03d84663852c114110489c96","a44c09d432ba40a589247626a09cfe34","89896a47fccc4fb4915014b4f0b7048b","9a86ae6790d84aa1866eaba2d1df3216","214fc3b57b6c4697a1632038fd7a40fa","a60693496b574f659ecd8be5feb863fd","e50178d16de24d03bc38804424557a05","dee2c3aa487545cba7e32834d11ea883","7c173af0d57c497ca04a7fb5320a5f8d","198afd4b3f094ffc8354b69d987334b4","326ff209eb5741e793ccc3696e65b58c"]},"outputId":"c1430b51-ecc5-47f3-8b5b-00e5cebfbfee","executionInfo":{"status":"ok","timestamp":1752355021870,"user_tz":-120,"elapsed":3417524,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}}},"outputs":[{"output_type":"stream","name":"stdout","text":["Chargement du dataset...\n","Lecture du fichier en latin-1...\n","Préparation des données...\n","Prétraitement des tweets...\n","Initialisation du modèle DistilBERT...\n"]},{"output_type":"stream","name":"stderr","text":["/usr/local/lib/python3.11/dist-packages/huggingface_hub/utils/_auth.py:94: UserWarning: \n","The secret `HF_TOKEN` does not exist in your Colab secrets.\n","To authenticate with the Hugging Face Hub, create a token in your settings tab (https://huggingface.co/settings/tokens), set it as secret in your Google Colab and restart your session.\n","You will be able to reuse this secret in all of your notebooks.\n","Please note that authentication is recommended but still optional to access public models or datasets.\n"," warnings.warn(\n"]},{"output_type":"display_data","data":{"text/plain":["tokenizer_config.json: 0%| | 0.00/48.0 [00:00, ?B/s]"],"application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"f4c7033b02a2493085d1ac0cfac9cccf"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":["vocab.txt: 0%| | 0.00/232k [00:00, ?B/s]"],"application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"2bd37c30fbe74e3eb9f7d0a660b94772"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":["tokenizer.json: 0%| | 0.00/466k [00:00, ?B/s]"],"application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"502800fba0c04ec6b54b83a1e9fbfc11"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":["config.json: 0%| | 0.00/483 [00:00, ?B/s]"],"application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"e333785179dd45d89ae039fd7e6361da"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":["model.safetensors: 0%| | 0.00/268M [00:00, ?B/s]"],"application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"f05015da03d84663852c114110489c96"}},"metadata":{}},{"output_type":"stream","name":"stderr","text":["Some weights of DistilBertForSequenceClassification were not initialized from the model checkpoint at distilbert-base-uncased and are newly initialized: ['classifier.bias', 'classifier.weight', 'pre_classifier.bias', 'pre_classifier.weight']\n","You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.\n"]},{"output_type":"stream","name":"stdout","text":["Batch size ajusté à 8 pour économiser la mémoire GPU.\n","Utilisation de : cuda\n"]},{"output_type":"stream","name":"stderr","text":["/tmp/ipython-input-11-3727908452.py:49: FutureWarning: `torch.cuda.amp.GradScaler(args...)` is deprecated. Please use `torch.amp.GradScaler('cuda', args...)` instead.\n"," scaler = GradScaler()\n"]},{"output_type":"stream","name":"stdout","text":["Début de l'entraînement...\n","Accumulation de gradient ajustée à 2 étapes.\n","\n","=== Epoch 1/20 ===\n"]},{"output_type":"stream","name":"stderr","text":["Training: 100%|██████████| 8000/8000 [05:45<00:00, 23.16it/s]\n"]},{"output_type":"stream","name":"stdout","text":["Train Loss: 0.4394, Train Accuracy: 0.8031, Train Precision: 0.8034\n"]},{"output_type":"stream","name":"stderr","text":["Validation: 100%|██████████| 1000/1000 [01:01<00:00, 16.24it/s]\n"]},{"output_type":"stream","name":"stdout","text":["Val Loss: 0.3890, Val Accuracy: 0.8237, Val Precision: 0.8271, Val Recall: 0.8196\n","New best model saved based on val_precision.\n","\n","=== Epoch 2/20 ===\n"]},{"output_type":"stream","name":"stderr","text":["Training: 100%|██████████| 8000/8000 [05:43<00:00, 23.32it/s]\n"]},{"output_type":"stream","name":"stdout","text":["Train Loss: 0.3690, Train Accuracy: 0.8485, Train Precision: 0.8531\n"]},{"output_type":"stream","name":"stderr","text":["Validation: 100%|██████████| 1000/1000 [01:01<00:00, 16.31it/s]\n"]},{"output_type":"stream","name":"stdout","text":["Val Loss: 0.4044, Val Accuracy: 0.8261, Val Precision: 0.8585, Val Recall: 0.7820\n","New best model saved based on val_precision.\n","No val_loss improvement. Patience: 1/7\n","\n","=== Epoch 3/20 ===\n"]},{"output_type":"stream","name":"stderr","text":["Training: 100%|██████████| 8000/8000 [05:43<00:00, 23.29it/s]\n"]},{"output_type":"stream","name":"stdout","text":["Train Loss: 0.3252, Train Accuracy: 0.8739, Train Precision: 0.8764\n"]},{"output_type":"stream","name":"stderr","text":["Validation: 100%|██████████| 1000/1000 [01:01<00:00, 16.30it/s]\n"]},{"output_type":"stream","name":"stdout","text":["Val Loss: 0.4862, Val Accuracy: 0.8305, Val Precision: 0.8485, Val Recall: 0.8058\n","No val_loss improvement. Patience: 2/7\n","\n","=== Epoch 4/20 ===\n"]},{"output_type":"stream","name":"stderr","text":["Training: 100%|██████████| 8000/8000 [05:39<00:00, 23.53it/s]\n"]},{"output_type":"stream","name":"stdout","text":["Train Loss: 0.2858, Train Accuracy: 0.8981, Train Precision: 0.9007\n"]},{"output_type":"stream","name":"stderr","text":["Validation: 100%|██████████| 1000/1000 [01:01<00:00, 16.27it/s]\n"]},{"output_type":"stream","name":"stdout","text":["Val Loss: 0.4425, Val Accuracy: 0.8290, Val Precision: 0.8427, Val Recall: 0.8101\n","No val_loss improvement. Patience: 3/7\n","\n","=== Epoch 5/20 ===\n"]},{"output_type":"stream","name":"stderr","text":["Training: 100%|██████████| 8000/8000 [05:39<00:00, 23.55it/s]\n"]},{"output_type":"stream","name":"stdout","text":["Train Loss: 0.2207, Train Accuracy: 0.9297, Train Precision: 0.9331\n"]},{"output_type":"stream","name":"stderr","text":["Validation: 100%|██████████| 1000/1000 [01:01<00:00, 16.27it/s]\n"]},{"output_type":"stream","name":"stdout","text":["Val Loss: 0.5597, Val Accuracy: 0.8371, Val Precision: 0.8329, Val Recall: 0.8444\n","No val_loss improvement. Patience: 4/7\n","\n","=== Epoch 6/20 ===\n"]},{"output_type":"stream","name":"stderr","text":["Training: 100%|██████████| 8000/8000 [05:40<00:00, 23.52it/s]\n"]},{"output_type":"stream","name":"stdout","text":["Train Loss: 0.1950, Train Accuracy: 0.9413, Train Precision: 0.9433\n"]},{"output_type":"stream","name":"stderr","text":["Validation: 100%|██████████| 1000/1000 [01:01<00:00, 16.26it/s]\n"]},{"output_type":"stream","name":"stdout","text":["Val Loss: 0.5975, Val Accuracy: 0.8342, Val Precision: 0.8513, Val Recall: 0.8109\n","No val_loss improvement. Patience: 5/7\n","\n","=== Epoch 7/20 ===\n"]},{"output_type":"stream","name":"stderr","text":["Training: 100%|██████████| 8000/8000 [05:39<00:00, 23.56it/s]\n"]},{"output_type":"stream","name":"stdout","text":["Train Loss: 0.1738, Train Accuracy: 0.9499, Train Precision: 0.9525\n"]},{"output_type":"stream","name":"stderr","text":["Validation: 100%|██████████| 1000/1000 [01:01<00:00, 16.32it/s]\n"]},{"output_type":"stream","name":"stdout","text":["Val Loss: 0.6491, Val Accuracy: 0.8343, Val Precision: 0.8456, Val Recall: 0.8189\n","No val_loss improvement. Patience: 6/7\n","\n","=== Epoch 8/20 ===\n"]},{"output_type":"stream","name":"stderr","text":["Training: 100%|██████████| 8000/8000 [05:39<00:00, 23.58it/s]\n"]},{"output_type":"stream","name":"stdout","text":["Train Loss: 0.1501, Train Accuracy: 0.9583, Train Precision: 0.9594\n"]},{"output_type":"stream","name":"stderr","text":["Validation: 100%|██████████| 1000/1000 [01:01<00:00, 16.27it/s]\n"]},{"output_type":"stream","name":"stdout","text":["Val Loss: 0.6904, Val Accuracy: 0.8323, Val Precision: 0.8382, Val Recall: 0.8247\n","No val_loss improvement. Patience: 7/7\n","EarlyStopping activated.\n","Best model loaded for evaluation.\n"]},{"output_type":"stream","name":"stderr","text":["Évaluation sur le jeu de test: 100%|██████████| 1250/1250 [01:16<00:00, 16.28it/s]\n"]},{"output_type":"stream","name":"stdout","text":["Enregistrement du modèle dans MLflow...\n","Model signature inferred successfully.\n","Model logged to MLflow artifact path 'model'.\n","Tokenizer logged to MLflow artifact path 'tokenizer'.\n"]},{"output_type":"stream","name":"stderr","text":["2025/07/12 21:16:52 WARNING mlflow.models.model: `artifact_path` is deprecated. Please use `name` instead.\n"]},{"output_type":"stream","name":"stdout","text":["Model 'distilbert-base-uncased' logged to MLflow artifact path 'model_distilbert-base-uncased'.\n","MLflow logging attempt finished for run 'f73e340c220c48bfa23ed135e16ab844'.\n","🏃 View run Model_Bert-distilbert-base-uncased at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1/runs/f73e340c220c48bfa23ed135e16ab844\n","🧪 View experiment at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1\n","🏃 View run Model_Bert-distilbert-base-uncased at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1/runs/f73e340c220c48bfa23ed135e16ab844\n","🧪 View experiment at: https://mlflow.greg-madman-nas.duckdns.org/#/experiments/1\n"]},{"output_type":"display_data","data":{"text/plain":["
"],"image/png":"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+18x/gvxREdHM3z4cBITE/nwww9ZtmwZ69evz3XJWE5ODnFxccTGxvLee+/x66+/8v7771OlShWeeuqp/3Qc/2ncuHE88cQTNG7cmGeeeYa9e/dyzz334OvrS0hIyFWXve+++9iyZQv9+vUjNDSU48ePs2DBAg4ePEhoaCgjR46kX79+eHh42JMTgYGB1x3jpEmTOHPmDH369CE9PZ0PP/yQ2267jb/++su+vi1bttCkSROCg4MZOHAgpUuX5ptvvqFDhw589913dOzYMdc6e/fujb+/P4MHDyYtLY02bdqwc+dOvvrqKz744AP8/PwA8Pf3z5f4FixYwN69e4mPjycoKIgtW7YwduxYtmzZwp9//mkfQD355JPMmDGDvn37Eh4ezqlTp1i6dCnbtm2jQYMGAPz222+0adOGqKgoXnvtNRwcHJgwYQK33XYbf/zxBzExMdd9jK9m2rRpnDlzhieeeAKLxcI777zDvffey969e+3/jzZt2kSzZs1wcnLi8ccfJzQ0lD179vDDDz/w5ptvArB69WqWL19Oly5dqFChAvv37+fTTz+lZcuWbN261f5/d8iQIQwfPpzHHnuMmJgYUlNTWbNmDevWraN169ZA3t/vhIQEbr31VrKzs+39xo4di5ubW74eIxGRkmDLli00a9YMLy8vXnzxRZycnPjss89o2bIlS5YsITY2Fsjb3/FrjSHyw19//cUdd9yBv78/Q4YMITs7m9deey1PY5Fr7cMTTzzB0aNHWbBgAZMnT77hGHft2kXnzp158skn6d69OxMmTOCBBx5g3rx59mN17tw5WrRowZEjR3jiiSeoWLEiy5cvZ9CgQRw7doyRI0fmWueECRNIT0/n8ccfx8XFhY4dO3LmzBkGDx7M448/TrNmzQBo3LhxvsS3d+9eZs2axQMPPEBYWBiJiYl89tlntGjRgq1bt1K+fHnAVg7j6aef5v7776d///6kp6ezadMmVq5caR9zJyYmcsstt2CxWOjbty/+/v78/PPPPProo6SmpvLMM8/c8LG+nN27d3P//ffz6KOP0r17d8aPH0+PHj2Iioqidu3aAJw9e5ZmzZqxbds2evbsSYMGDTh58iRz5szh8OHD+Pn5kZqayhdffMGDDz5Ir169OHPmDOPGjSMuLo5Vq1bZL5nMy3eIvL7fhmHQvn17li5dypNPPkmtWrX4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y/79rFWrFlarlUOHDgHX/jt+o2OI8+fPX/LZdrV4z58/f8OfAdfah/xStWrVS06EVq9eHcA+jti1axfz5s275DOvVatWwH8b45w9ezbX8Txx4sR1x2e1Wvnggw+oVq1ars/3TZs25fp8f+mll/Dw8CAmJoZq1arRp0+fXPUwT5w4QXJyMmPHjr1kX+Pj43Pt679/D86fP5/nff6nf49x4NLx9p49e/L0XeHLL7+kXr169hpk/v7+zJ07N9cxyMt3iLy+3wcOHKBcuXJ4eHjkWl5jHLkZVFNKSqyYmBj73feu5J9nZy6wWq0EBAQwderUyy7zX88eBQQEsGHDBubPn8/PP//Mzz//zIQJE+jWrRtffvnlf1r3BTc6i6d///65YmjRokWei4lfr2eeeYZ27doxa9Ys5s+fz6uvvsrw4cP57bffqF+//k3Z5uVcmBn0/PPPX/HsZ9WqVXM9v56aQvfeey9LliyxP+/evXuei4Ne0KlTJ5YvX84LL7xAZGQkHh4eWK1W7rzzzlwzmzp16kSzZs34/vvv+eWXX3j33Xd5++23mTlzJm3atLH3fffdd694S2cPDw+WLVvGrbfemqt93759hIaGYrFYMAzjkuWulLS60u/i5dZxNf369WPChAk888wzNGrUCG9vbywWC126dMl1DJo3b86ePXuYPXs2v/zyC1988QUffPABY8aM4bHHHruh91tERArOtf6Ow42NIaZPn25PTlxwvZ9F+bkPBcVqtdK6dWtefPHFy75+IUl0wfWMcd577z2GDh1qf16pUqXrLjb/1ltv8eqrr9KzZ09ef/11fH19cXBw4Jlnnsn1+V6rVi127NjBjz/+yLx58/juu+/45JNPGDx4MEOHDrX3ffjhh69YF6levXqAbYbeP02YMIEePXpc8UqHmz3GmTJlCj169KBDhw688MILBAQE4OjoyPDhw+0nwSFv3yGu9/0WKQhKSolcpypVqvDrr7/SpEmTq34wV6lSBYDNmzdf95dYZ2dn2rVrR7t27bBarfTu3ZvPPvuMV1999bLrqlSpEgA7duyw30Xwgh07dthf/69efPFFHn74Yfvzf152daWYdu3alSumrKws9u3bR0RExDW3V6VKFZ577jmee+45du3aRWRkJO+//z5TpkwBrn4ZZF5dbur8zp077YVQL8zqcnJysp9FuhFXivX999/PdcbsQsHOvMZ3+vRpFi5cyNChQxk8ePBVlwPbQKt379707t2b48eP06BBA958803atGlj/5318vK66r5GRERcMjU8KCgIsP1OXO4y0H/P1surC8f/cndE/KcZM2bQvXt33n//fXtbenr6Ze8S4+vrS3x8PPHx8Zw9e5bmzZszZMgQHnvsset6vytVqnTZ47xjx45r7ZaIiPyDv78/7u7ul/37uX37dhwcHHLdIOVqf8cvuNYY4t/i4uLyXDrhwp1g/8tnwLX2IT/GOBdm//5zXTt37gSwjyOqVKnC2bNnb8oYp1u3bjRt2tT+/N/j5rzEN2PGDG699VbGjRuXa9nk5GT7jWMuKF26NJ07d6Zz585kZmZy77338uabbzJo0CD8/f3x9PQkJyfnmvv679+DC0XJL4x7k5OTc91A6EbHOGA7/nkZ41SuXJmZM2fmOlYXZnD/07W+Q+T1/a5UqRILFy7k7NmzuWZLaYwjN4Mu3xO5Tp06dSInJ4fXX3/9kteys7PtX4LvuOMOPD09GT58OOnp6bn6Xe0MyalTp3I9d3BwsJ+5ycjIuOwyDRs2JCAggDFjxuTq8/PPP7Nt2zbuuuuuPO3btYSHh9OqVSv7Iyoq6op9GzZsiL+/P2PGjCEzM9PePnHixGveTvbcuXOXHLMqVarg6emZa/9Kly79n29NO2vWrFw1oVatWsXKlStp06YNYDvr1LJlSz777DOOHTt2yfL/nop+JaVLlwa4JN6oqKhcxzQ8PPy64rtwFu7fv1P/vltOTk7OJZcGBgQEUL58efsxjYqKokqVKrz33nucPXv2ivtapkyZXDG3atXKXsusSpUqbN++Pddx2bhxY64p9NfD39+f5s2bM378eA4ePJjrtX/us6Oj4yXH4OOPP77k7OW//395eHhQtWpV+zG4nve7bdu2/Pnnn6xatSrX61eaRSkiIpfn6OjIHXfcwezZs3PNpElMTGTatGk0bdoULy8v4Np/x/M6hvi3cuXKXfLZdrV44+LimDVrVq7Ppm3btjF//vxr7u+19gGuPG64HkePHuX777+3P09NTWXSpElERkbaTyZ16tSJFStWXDbu5ORksrOzr7mdK8VauXLlXMezSZMm1x3f5T7fv/3220vqef77mDo7OxMeHo5hGGRlZeHo6Mh9993Hd999d9kk0D8/3//9e3Bh5tSFk3f/rLOVlpb2n65kuO+++9i4cWOu43DBhf2+3Fhv5cqVrFixIlf/vHyHyOv73bZtW7Kzs/n000/tr+fk5PDxxx9f9z6KXItmSolcpxYtWvDEE08wfPhwNmzYwB133IGTkxO7du3i22+/5cMPP+T+++/Hy8uLDz74gMcee4zo6Gi6du1KmTJl2LhxI+fOnbviB9hjjz1GUlISt912GxUqVODAgQN8/PHHREZGUqtWrcsu4+TkxNtvv018fDwtWrTgwQcfJDExkQ8//JDQ0FCeffbZm3lIrhjTG2+8wRNPPMFtt91G586d2bdvHxMmTLhmTamdO3dy++2306lTJ8LDwylVqhTff/89iYmJdOnSxd4vKiqKTz/9lDfeeIOqVasSEBBwyUyxa6latSpNmzblqaeeIiMjg5EjR1K2bNlc05pHjx5N06ZNqVu3Lr169aJy5cokJiayYsUKDh8+zMaNG6+5nQsJvJdffpkuXbrg5OREu3bt7AO5G43Py8vLXi8jKyuL4OBgfvnlF/bt25drPWfOnKFChQrcf//9RERE4OHhwa+//srq1avts4scHBz44osvaNOmDbVr1yY+Pp7g4GCOHDnCokWL8PLy4ocffrhqvD179mTEiBHExcXx6KOPcvz4ccaMGUPt2rXtRWqv10cffUTTpk1p0KABjz/+OGFhYezfv5+5c+eyYcMGAO6++24mT56Mt7c34eHhrFixgl9//ZWyZcvmWld4eDgtW7YkKioKX19f1qxZw4wZM+jbt6+9T17f7xdffJHJkydz55130r9/f0qXLs3YsWOpVKnSTakNIiJS1I0fP/6ydTL79+/PG2+8wYIFC2jatCm9e/emVKlSfPbZZ2RkZPDOO+/Y+17r73hexxD/1dChQ5k3bx7NmjWjd+/eZGdn8/HHH1O7du1rfgbk5bPowrjh6aefJi4uDkdHx+uOv3r16jz66KOsXr2awMBAxo8fT2JiIhMmTLD3eeGFF5gzZw533303PXr0ICoqirS0NP766y9mzJjB/v37L5mR9G9VqlTBx8eHMWPG4OnpSenSpYmNjb1m/am8xHf33XczbNgw4uPjady4MX/99RdTp069ZCx5xx13EBQURJMmTQgMDGTbtm2MGjWKu+66C09PTwD+7//+j0WLFhEbG0uvXr0IDw8nKSmJdevW8euvv161VuqFbVSsWJFHH32UF154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RERERBxMfW+erqKUCZbuSefnnWk4Wy2Mv7FdvW1YJiIiIiIiIiLV54+apycczOTAHzZPD6BFYy+HqEWoKFXLSspsvDRnBwDDe0bRMtjH5IhEREREREREpC46W/P0jLwi1h3MJCHxxKnm6dlnNE8P9HIlNsqf+3pHc1nzQNPiV1Gqli3YlsK+tDwCvFx5/JpWZocjIiIiIiIiIvVIkLcbAzqGMqBjKGA0T99w6IRRqDrVPP14fjELt6dyS9empsaqolQtu7FzKFaLhTK7HT9PF7PDEREREREREZF6zNvNmctbN+by1mc2T4+PDjA1NhWlapnFYuGGzqFmhyEiIiIiIiIiDdDvm6ebzWp2ACIiIiIiIiIi0vA4RFHq3XffJSoqCnd3d+Lj40lISDjv+ZMnT6ZNmzZ4eHgQERHBk08+SWFhYZVeU0REREREREREao/pRakZM2YwduxYJkyYwIYNG+jSpQv9+/cnLS3trOdPmzaNcePGMWHCBHbu3Mknn3zCjBkzeOaZZy75NUVEREREREREpHaZXpSaNGkSDz30EPfddx/t27fn/fffx9PTk6lTp571/FWrVtG7d2/uvvtuoqKiuO6667jrrrsqzYS62NcUEREREREREZHaZWpRqri4mPXr19OvX7/yY1arlX79+rF69eqzPqdXr16sX7++vAh14MAB5s2bx8CBAy/5NYuKisjJyal0ExERERERERGRmmPq7nsZGRmUlZUREhJS6XhISAi7du0663PuvvtuMjIy6NOnD3a7ndLSUh555JHy5XuX8poTJ07kxRdfrIZ3JCIiIiIiIiIiF8L05XsXa8mSJbzyyiu89957bNiwgZkzZzJ37lxeeumlS37Np59+muzs7PJbcnJyNUYsIiIiIiIiIiL/y9SZUkFBQTg5OZGamlrpeGpqKk2aNDnrc8aPH8+wYcN48MEHAejUqRP5+fk8/PDDPPvss5f0mm5ubri5uVXDOxIRERERERERkQth6kwpV1dXunfvzuLFi8uP2Ww2Fi9eTM+ePc/6nIKCAqzWymE7OTkBYLfbL+k1RURERERERESkdpk6Uwpg7NixjBgxgtjYWOLi4pg8eTL5+fncd999AAwfPpzw8HAmTpwIwKBBg5g0aRJdu3YlPj6effv2MX78eAYNGlRenPqj1xQREREREREREXOZXpQaOnQo6enpPP/8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0WaH5HBsNhtFRUVmh1HrrrnmGrZu3cqmTZvKb7Gxsdxzzz1s2rQJJycns0M0VV5eHvv37yc0NNTsUEzRu3fvM7ZD37NnD82aNTMpIsfw6aefEhwczA033GB2KHKRlC/J+Shf+mPKl5QvnY3yJeVLZ+Mo+ZKW79WisWPHMmLECGJjY4mLi2Py5Mnk5+dz3333mR2aKfLy8ipV6xMTE9m0aRMBAQFERkaaGFntGzVqFNOmTeOHH37Ax8envG+Gn58fHh4eJkdX+55++mmuv/56IiMjyc3NZdq0aSxZsoSFCxeaHVqt8/HxOaNXhpeXF4GBgQ2yh8af//xnBg0aRLNmzTh69CgTJkzAycmJu+66y+zQTPHkk0/Sq1cvXnnlFe644w4SEhL48MMP+fDDD80OzTQ2m41PP/2UESNG4OysNKcuUr5UmfKlCsqXKlO+VEH5UmXKlypTvnQmh8qXTNnzrwH797//bY+MjLS7urra4+Li7L/99pvZIZnm119/tQNn3EaMGGF2aLXubOMA2D/99FOzQzPF/fffb2/WrJnd1dXV3rhxY/s111xjX7RokdlhOYyGvMXx0KFD7aGhoXZXV1d7eHi4fejQofZ9+/aZHZapfvzxR3vHjh3tbm5u9rZt29o//PBDs0My1cKFC+2Afffu3WaHIlWgfKmC8qUKypcqU750fsqXlC/9nvKlyhwpX7LY7XZ77ZXARERERERERERE1FNKRERERERERERMoKKUiIiIiIiIiIjUOhWlRERERERERESk1qkoJSIiIiIiIiIitU5FKRERERERERERqXUqSomIiIiIiIiISK1TUUpERERERERERGqdilIiIiIiIiIiIlLrVJQSEakhFouF77//3uwwRERERByW8iWRhk1FKRGpl0aOHInFYjnjNmDAALNDExEREXEIypdExGzOZgcgIlJTBgwYwKefflrpmJubm0nRiIiIiDge5UsiYibNlBKResvNzY0mTZpUuvn7+wPGVPEpU6Zw/fXX4+HhQfPmzfn2228rPX/r1q1cffXVeHh4EBgYyMMPP0xeXl6lc6ZOnUqHDh1wc3MjNDSU0aNHV3o8IyODW265BU9PT1q1asXs2bNr9k2LiIiIXATlSyJiJhWlRKTBGj9+PEOGDGHz5s3cc8893HnnnezcuROA/Px8+vfvj7+/P2vXruWbb77h559/rpRETZkyhVGjRvHwww+zdetWZs+eTcuWLStd48UXX+SOO+5gy5YtDBw4kHvuuYfMzMxafZ8iIiIil0r5kojUKLuISD00YsQIu5OTk93Ly6vS7eWXX7bb7XY7YH/kkUcqPSc+Pt7+6KOP2u12u/3DDz+0+/v72/Py8sofnzt3rt1qtdpTUlLsdrvdHhYWZn/22WfPGQNgf+6558rv5+Xl2QH7/Pnzq+19ioiIiFwq5UsiYjb1lBKReuuqq65iypQplY4FBASU/7lnz56VHuvZsyebNm0CYOfOnXTp0gUvL6/yx3v37o3NZmP37t1YLBaOHj3KNddcc94YOnfuXP5nLy8vfH19SUtLu9S3JCIiIlKtlC+JiJlUlBKResvLy+uM6eHVxcPD44LOc3FxqXTfYrFgs9lqIiQRERGRi6Z8SUTMpJ5SItJg/fbbb2fcb9euHQDt2rVj8+bN5Ofnlz++cuVKrFYrbdq0wcfHh6ioKBYvXlyrMYuIiIjUJuVLIlKTNFNKROqtoqIiUlJSKh1zdnYmKCgIgG+++YbY2Fj69OnDl19+SUJCAp988gkA99xzDxMmTGDEiBG88MILpKenM2bMGIYNG0ZISAgAL7zwAo888gjBwcFcf/315ObmsnLlSsaMGVO7b1RERETkEilfEhEzqSglIvXWggULCA0NrXSsTZs27Nq1CzB2epk+fTqPPfYYoaGhfPXVV7Rv3x4AT09PFi5cyOOPP06PHj3w9PRkyJAhTJo0qfy1RowYQWFhIW+++SZ//vOfCQoK4rbbbqu9NygiIiJSRcqXRMRMFrvdbjc7CBGR2maxWJg1axaDBw82OxQRERERh6R8SURqmnpKiYiIiIiIiIhIrVNRSkREREREREREap2W74mIiIiIiIiISK3TTCkREREREREREal1KkqJiIiIiIiIiEitU1FKRERERERERERqnYpSIiIiIiIiIiJS61SUEhERERERERGRWqeilIiIiIiIiIiI1DoVpUREREREREREpNapKCUiIiIiIiIiIrVORSkREREREREREal1/w8MVwdoalikxwAAAABJRU5ErkJggg==\n"},"metadata":{}}],"source":["# Entraîner le modèle\n","bert_pack = train_bert_sentiment(\n"," data_path=csv_file_path,\n"," model_name=\"distilbert-base-uncased\",\n"," batch_size=16,\n"," epochs=20,\n"," sample_size=100000\n",")"]},{"cell_type":"markdown","metadata":{"id":"gYK8Th3rT76h"},"source":["## Chargement du modèle"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"yYPiB5A8N7l_"},"outputs":[],"source":["# FONCTION POUR CHARGER LE MODÈLE ENTRAINÉ\n","def load_bert_model(model_base_dir=\"content/bert-model\"):\n"," \"\"\"\n"," Charge le modèle BERT entraîné, le tokenizer et le preprocessor\n"," à partir de l'arborescence des artefacts sauvegardés.\n","\n"," Args:\n"," model_base_dir (str): Répertoire de base contenant tous les artefacts du modèle\n"," (par défaut: \"content/bert-model\")\n","\n"," Returns:\n"," dict: Un dictionnaire contenant le modèle, le tokenizer et la fonction de prétraitement\n"," \"\"\"\n"," # Définir les chemins des différents artefacts\n"," model_dir = os.path.join(model_base_dir, \"model\")\n"," tokenizer_dir = os.path.join(model_base_dir, \"tokenizer\")\n"," preprocessor_dir = os.path.join(model_base_dir, \"preprocessor\")\n"," preprocessor_file = os.path.join(preprocessor_dir, \"preprocessor.pkl\")\n","\n"," # Charger le modèle\n"," try:\n"," model = DistilBertForSequenceClassification.from_pretrained(model_dir)\n"," print(f\"Modèle chargé avec succès depuis '{model_dir}'\")\n"," except Exception as e:\n"," print(f\"Erreur lors du chargement du modèle : {e}\")\n"," raise\n","\n"," # Charger le tokenizer\n"," try:\n"," tokenizer = DistilBertTokenizer.from_pretrained(tokenizer_dir)\n"," print(f\"Tokenizer chargé avec succès depuis '{tokenizer_dir}'\")\n"," except Exception as e:\n"," print(f\"Erreur lors du chargement du tokenizer : {e}\")\n"," raise\n","\n"," # Charger la fonction de prétraitement\n"," try:\n"," with open(preprocessor_file, \"rb\") as f_in:\n"," preprocess_tweet_for_bert = pickle.load(f_in)\n"," print(f\"Fonction 'preprocess_tweet_for_bert' chargée avec succès depuis '{preprocessor_file}'\")\n"," except FileNotFoundError:\n"," print(f\"Erreur : Fichier preprocessor introuvable à l'emplacement '{preprocessor_file}'.\")\n"," preprocess_tweet_for_bert = None\n"," except Exception as e:\n"," print(f\"Erreur lors du chargement de la fonction de prétraitement : {e}\")\n"," preprocess_tweet_for_bert = None\n","\n"," # Vérifier si on a bien chargé la fonction de prétraitement\n"," if preprocess_tweet_for_bert is None:\n"," print(\"ATTENTION: Fonction de prétraitement non chargée. Les prédictions pourraient être affectées.\")\n","\n"," # Création d'un pack pour faciliter l'utilisation\n"," model_pack = {\n"," 'model': model,\n"," 'tokenizer': tokenizer,\n"," 'preprocess': preprocess_tweet_for_bert\n"," }\n","\n"," return model_pack"]},{"cell_type":"markdown","metadata":{"id":"tB3Uiz5pT76h"},"source":["## Fonction de prédiction"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"RkFU6mWxT76h"},"outputs":[],"source":["# FONCTION DE PRÉDICTION\n","def predict_sentiment(tweet, model_pack):\n"," \"\"\"\n"," Prédit le sentiment d'un tweet à l'aide du modèle BERT\n"," \"\"\"\n"," model = model_pack['model']\n"," tokenizer = model_pack['tokenizer']\n"," preprocess = model_pack['preprocess']\n","\n"," # Prétraitement du tweet\n"," processed_tweet = preprocess(tweet)\n","\n"," # Tokenisation\n"," encoding = tokenizer(\n"," processed_tweet,\n"," return_tensors=\"pt\",\n"," truncation=True,\n"," padding=True,\n"," max_length=128\n"," )\n","\n"," # Détection du device\n"," device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n"," model = model.to(device)\n","\n"," # Passer au mode évaluation\n"," model.eval()\n","\n"," # Déplacer les tenseurs sur le device\n"," input_ids = encoding['input_ids'].to(device)\n"," attention_mask = encoding['attention_mask'].to(device)\n","\n"," # Prédiction\n"," with torch.no_grad():\n"," outputs = model(input_ids=input_ids, attention_mask=attention_mask)\n"," logits = outputs.logits\n"," probabilities = torch.nn.functional.softmax(logits, dim=1)\n","\n"," # Récupérer le sentiment prédit et le score de confiance\n"," predicted_class = torch.argmax(probabilities, dim=1).item()\n"," confidence_score = probabilities[0][predicted_class].item()\n"," raw_score = probabilities[0][1].item() # Score de la classe positive\n","\n"," # Convertir en étiquette lisible\n"," sentiment = \"Positif\" if predicted_class == 1 else \"Négatif\"\n","\n"," # Résultat\n"," result = {\n"," 'sentiment': sentiment,\n"," 'confidence': confidence_score,\n"," 'raw_score': raw_score\n"," }\n","\n"," return result"]},{"cell_type":"markdown","metadata":{"id":"_tNu9-3tT76h"},"source":["## Test sur un ensemble de tweets"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"ZFMlwStUT76h"},"outputs":[],"source":["# FONCTION DE TEST SUR ENSEMBLE DE TWEETS\n","def test_model_on_examples(model_pack, test_tweets):\n"," \"\"\"\n"," Teste le modèle sur une liste de tweets et retourne un DataFrame avec les résultats des prédictions.\n"," \"\"\"\n"," results = {\n"," \"Positif\": 0,\n"," \"Négatif\": 0\n"," }\n","\n"," # Créer un DataFrame pour stocker les résultats\n"," predictions_data = []\n","\n"," for i, tweet in enumerate(test_tweets):\n"," # Utiliser la fonction predict_sentiment avec model_pack\n"," result = predict_sentiment(tweet, model_pack)\n","\n"," # Ajouter l'emoji approprié pour le sentiment\n"," emoji = \"💚\" if result['sentiment'] == \"Positif\" else \"❌\"\n","\n"," # Ajouter les données au DataFrame\n"," predictions_data.append({\n"," \"Tweet\": tweet,\n"," \"Sentiment\": result['sentiment'],\n"," \"Emoji\": emoji,\n"," \"Score de confiance\": result['confidence'],\n"," \"Score brut\": result['raw_score'],\n"," \"Index\": i+1\n"," })\n","\n"," # Comptage des résultats\n"," results[result['sentiment']] += 1\n","\n"," # Créer le DataFrame\n"," df_predictions = pd.DataFrame(predictions_data)\n","\n"," # Afficher un résumé\n"," print(\"\\nTest du modèle sur les exemples:\")\n"," print(\"=\"*50)\n"," print(f\"Résumé: {len(test_tweets)} tweets analysés\")\n"," print(f\"Tweets positifs: {results['Positif']} ({(results['Positif']/len(test_tweets)*100):.1f}%)\")\n"," print(f\"Tweets négatifs: {results['Négatif']} ({(results['Négatif']/len(test_tweets)*100):.1f}%)\")\n","\n"," # Sauvegarder les résultats dans un fichier CSV\n"," os.makedirs('content/bert-model', exist_ok=True)\n"," df_predictions.to_csv(\"content/bert-model/predictions_results.csv\", index=False)\n","\n"," # Retourner le DataFrame\n"," return df_predictions"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"Tkb9WDu-T76h","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1752355022988,"user_tz":-120,"elapsed":1102,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"0f07d599-7592-4f49-a40f-eb8b22ec0359"},"outputs":[{"output_type":"stream","name":"stdout","text":["Modèle chargé avec succès depuis 'content/bert-model/model'\n","Tokenizer chargé avec succès depuis 'content/bert-model/tokenizer'\n","Fonction 'preprocess_tweet_for_bert' chargée avec succès depuis 'content/bert-model/preprocessor/preprocessor.pkl'\n","\n","Test du modèle sur les exemples:\n","==================================================\n","Résumé: 15 tweets analysés\n","Tweets positifs: 7 (46.7%)\n","Tweets négatifs: 8 (53.3%)\n","Analyse de sentiment terminée! Résultats disponibles dans content/bert-model/predictions_results.csv\n"]}],"source":["# Liste améliorée de tweets pour tester le modèle\n","test_tweets_improved = [\n"," # Tweets positifs avec différentes caractéristiques\n"," \"I absolutely love flying with @AirParadis! Their service is exceptional and the staff is always so friendly :) #bestairline #travel\",\n"," \"I just landed after an amazing flight... The crew was truly fantastic and the food was delicious! Can't wait to fly with them again :D\",\n"," \"Wow! You have to try @AirParadis. Best. Flight. Ever. Their new seats are incredibly comfortable. http://airparadis.com/newseats #travel #happy #AirParadis\",\n"," \"It was my first time flying business class, and I’m completely blown away!!! The service is definitely worth it... @AirParadis never lets me down :)\",\n"," \"What an incredible flight experience with @AirParadis! Everything was perfect from takeoff to landing. Would do it again in a heartbeat! #travel #satisfaction\",\n","\n"," # Tweets négatifs avec différentes caractéristiques\n"," \"Honestly, my last flight with @AirParadis was disappointing. The flight was delayed without any notice. #disappointment\",\n"," \"I had high hopes for @AirParadis, but the seat was uncomfortable and the staff seemed overwhelmed during the flight. Not the best experience.\",\n"," \"So frustrated with @AirParadis this time. The staff was unresponsive and it ruined our trip. #nothappy\",\n"," \"The flight I booked with @AirParadis was canceled at the last minute. Very disappointing and no adequate communication!\",\n"," \"The quality of service with @AirParadis has declined. I expected better. It left a sour taste. #disappointed\",\n","\n"," # Tweets mixtes et nuancés\n"," \"To be honest, @AirParadis has significantly improved their service since last year! Not perfect yet, but they are making an effort... #progress\",\n"," \"We were really looking forward to our trip, but our flight was delayed... at least the team was very apologetic and provided us with complimentary drinks! @AirParadis\",\n"," \"The flight with @AirParadis had great moments, but the delay somewhat tarnished the experience. I'll give them another chance!\",\n"," \"Overall, @AirParadis has good service, but I had a few minor issues with the check-in process. It could be better! #mixedfeelings\",\n"," \"While our flight was pleasant, the lack of communication regarding the schedule was a bit frustrating. @AirParadis can do better. #nuanced\"\n","]\n","\n","# Charger le modèle entraîné\n","model_pack = load_bert_model()\n","\n","# Tester le modèle sur les exemples\n","df_results = test_model_on_examples(model_pack, test_tweets_improved)\n","\n","print(\"Analyse de sentiment terminée! Résultats disponibles dans content/bert-model/predictions_results.csv\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"XIHAcDH3E1rH","colab":{"base_uri":"https://localhost:8080/","height":519},"executionInfo":{"status":"ok","timestamp":1752355023061,"user_tz":-120,"elapsed":69,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"9982e8d8-6530-4b66-9a4c-1ac8f158b260"},"outputs":[{"output_type":"execute_result","data":{"text/plain":[" Tweet Sentiment Emoji \\\n","0 I absolutely love flying with @AirParadis! The... Positif 💚 \n","1 I just landed after an amazing flight... The c... Positif 💚 \n","2 Wow! You have to try @AirParadis. Best. Flight... Positif 💚 \n","3 It was my first time flying business class, an... Négatif ❌ \n","4 What an incredible flight experience with @Air... Positif 💚 \n","5 Honestly, my last flight with @AirParadis was ... Négatif ❌ \n","6 I had high hopes for @AirParadis, but the seat... Négatif ❌ \n","7 So frustrated with @AirParadis this time. The ... Négatif ❌ \n","8 The flight I booked with @AirParadis was cance... Négatif ❌ \n","9 The quality of service with @AirParadis has de... Négatif ❌ \n","10 To be honest, @AirParadis has significantly im... Positif 💚 \n","11 We were really looking forward to our trip, bu... Négatif ❌ \n","12 The flight with @AirParadis had great moments,... Négatif ❌ \n","13 Overall, @AirParadis has good service, but I h... Positif 💚 \n","14 While our flight was pleasant, the lack of com... Positif 💚 \n","\n"," Score de confiance Score brut Index \n","0 0.941539 0.941539 1 \n","1 0.949552 0.949552 2 \n","2 0.960181 0.960181 3 \n","3 0.950030 0.049970 4 \n","4 0.965208 0.965208 5 \n","5 0.987460 0.012539 6 \n","6 0.984469 0.015531 7 \n","7 0.975684 0.024316 8 \n","8 0.988538 0.011462 9 \n","9 0.987166 0.012834 10 \n","10 0.908642 0.908642 11 \n","11 0.529597 0.470403 12 \n","12 0.682678 0.317322 13 \n","13 0.712999 0.712999 14 \n","14 0.742626 0.742626 15 "],"text/html":["\n","
\n","
\n","\n","
\n"," \n","
\n","
\n","
Tweet
\n","
Sentiment
\n","
Emoji
\n","
Score de confiance
\n","
Score brut
\n","
Index
\n","
\n"," \n"," \n","
\n","
0
\n","
I absolutely love flying with @AirParadis! The...
\n","
Positif
\n","
💚
\n","
0.941539
\n","
0.941539
\n","
1
\n","
\n","
\n","
1
\n","
I just landed after an amazing flight... The c...
\n","
Positif
\n","
💚
\n","
0.949552
\n","
0.949552
\n","
2
\n","
\n","
\n","
2
\n","
Wow! You have to try @AirParadis. Best. Flight...
\n","
Positif
\n","
💚
\n","
0.960181
\n","
0.960181
\n","
3
\n","
\n","
\n","
3
\n","
It was my first time flying business class, an...
\n","
Négatif
\n","
❌
\n","
0.950030
\n","
0.049970
\n","
4
\n","
\n","
\n","
4
\n","
What an incredible flight experience with @Air...
\n","
Positif
\n","
💚
\n","
0.965208
\n","
0.965208
\n","
5
\n","
\n","
\n","
5
\n","
Honestly, my last flight with @AirParadis was ...
\n","
Négatif
\n","
❌
\n","
0.987460
\n","
0.012539
\n","
6
\n","
\n","
\n","
6
\n","
I had high hopes for @AirParadis, but the seat...
\n","
Négatif
\n","
❌
\n","
0.984469
\n","
0.015531
\n","
7
\n","
\n","
\n","
7
\n","
So frustrated with @AirParadis this time. The ...
\n","
Négatif
\n","
❌
\n","
0.975684
\n","
0.024316
\n","
8
\n","
\n","
\n","
8
\n","
The flight I booked with @AirParadis was cance...
\n","
Négatif
\n","
❌
\n","
0.988538
\n","
0.011462
\n","
9
\n","
\n","
\n","
9
\n","
The quality of service with @AirParadis has de...
\n","
Négatif
\n","
❌
\n","
0.987166
\n","
0.012834
\n","
10
\n","
\n","
\n","
10
\n","
To be honest, @AirParadis has significantly im...
\n","
Positif
\n","
💚
\n","
0.908642
\n","
0.908642
\n","
11
\n","
\n","
\n","
11
\n","
We were really looking forward to our trip, bu...
\n","
Négatif
\n","
❌
\n","
0.529597
\n","
0.470403
\n","
12
\n","
\n","
\n","
12
\n","
The flight with @AirParadis had great moments,...
\n","
Négatif
\n","
❌
\n","
0.682678
\n","
0.317322
\n","
13
\n","
\n","
\n","
13
\n","
Overall, @AirParadis has good service, but I h...
\n","
Positif
\n","
💚
\n","
0.712999
\n","
0.712999
\n","
14
\n","
\n","
\n","
14
\n","
While our flight was pleasant, the lack of com...
\n","
Positif
\n","
💚
\n","
0.742626
\n","
0.742626
\n","
15
\n","
\n"," \n","
\n","
\n","
\n","\n","
\n"," \n","\n"," \n","\n"," \n","
\n","\n","\n","
\n"," \n","\n","\n","\n"," \n","
\n","\n","
\n"," \n"," \n"," \n","
\n","\n","
\n","
\n"],"application/vnd.google.colaboratory.intrinsic+json":{"type":"dataframe","variable_name":"df_results","summary":"{\n \"name\": \"df_results\",\n \"rows\": 15,\n \"fields\": [\n {\n \"column\": \"Tweet\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 15,\n \"samples\": [\n \"The quality of service with @AirParadis has declined. I expected better. It left a sour taste. #disappointed\",\n \"We were really looking forward to our trip, but our flight was delayed... at least the team was very apologetic and provided us with complimentary drinks! @AirParadis\",\n \"I absolutely love flying with @AirParadis! Their service is exceptional and the staff is always so friendly :) #bestairline #travel\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Sentiment\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 2,\n \"samples\": [\n \"N\\u00e9gatif\",\n \"Positif\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Emoji\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 2,\n \"samples\": [\n \"\\u274c\",\n \"\\ud83d\\udc9a\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Score de confiance\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.14419873334810537,\n \"min\": 0.5295969843864441,\n \"max\": 0.9885379076004028,\n \"num_unique_values\": 15,\n \"samples\": [\n 0.9871659874916077,\n 0.5295969843864441\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Score brut\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.4223161774401945,\n \"min\": 0.011462084017693996,\n \"max\": 0.9652082920074463,\n \"num_unique_values\": 15,\n \"samples\": [\n 0.012833991087973118,\n 0.4704030156135559\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Index\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 4,\n \"min\": 1,\n \"max\": 15,\n \"num_unique_values\": 15,\n \"samples\": [\n 10,\n 12\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}"}},"metadata":{},"execution_count":24}],"source":["df_results"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"-mJxfVLiGfTL","colab":{"base_uri":"https://localhost:8080/","height":536},"executionInfo":{"status":"ok","timestamp":1752355023660,"user_tz":-120,"elapsed":607,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"94c492a5-6077-461e-90a8-45097869c7d6"},"outputs":[{"output_type":"stream","name":"stdout","text":["Modèle chargé avec succès depuis 'content/bert-model/model'\n","Tokenizer chargé avec succès depuis 'content/bert-model/tokenizer'\n","Fonction 'preprocess_tweet_for_bert' chargée avec succès depuis 'content/bert-model/preprocessor/preprocessor.pkl'\n","\n","Test du modèle sur les exemples:\n","==================================================\n","Résumé: 10 tweets analysés\n","Tweets positifs: 5 (50.0%)\n","Tweets négatifs: 5 (50.0%)\n","Analyse de sentiment terminée! Vérifiez si les résultats sont dans content/bert-model/predictions_results.csv\n"]},{"output_type":"execute_result","data":{"text/plain":[" Tweet Sentiment Emoji \\\n","0 @AirParadis offers absolutely FLAWLESS service... Positif 💚 \n","1 PERFECT flight with @AirParadis today. Amazing... Positif 💚 \n","2 I'm totally a fan of @AirParadis! Every flight... Positif 💚 \n","3 Extraordinary experience in business class on ... Positif 💚 \n","4 @AirParadis saved my vacation! After a cancell... Positif 💚 \n","5 AVOID @AirParadis! The worst customer service ... Négatif ❌ \n","6 DISASTROUS flight with @AirParadis. 5-hour del... Négatif ❌ \n","7 How can @AirParadis dare to charge for seats t... Négatif ❌ \n","8 @AirParadis let me down. Flight canceled for n... Négatif ❌ \n","9 The food served on @AirParadis was simply ined... Négatif ❌ \n","\n"," Score de confiance Score brut Index \n","0 0.964295 0.964295 1 \n","1 0.935371 0.935371 2 \n","2 0.976377 0.976377 3 \n","3 0.969083 0.969083 4 \n","4 0.911861 0.911861 5 \n","5 0.978022 0.021978 6 \n","6 0.976990 0.023010 7 \n","7 0.977153 0.022847 8 \n","8 0.986005 0.013995 9 \n","9 0.634308 0.365692 10 "],"text/html":["\n","