Introduction
Ce projet sera ma première expérience avec les outils de Web Scraping, où en utilisant le langage Python j’ai l’intention, à la fin, de faire une analyse visuelle des mots les plus communs entre les discours d’investiture des présidents François Hollande (2012) et Emmanuel Macron (2022), ces discours ont été obtenus à partir du site officiel https://www.vie-publique.fr/ .
Nous utiliserons la dépendance BeatifulSoup de Python pour extraire les informations de chaque discours dans son url spécifique, puis nous utiliserons le paquet Word_cloud pour les convertir en un nuage des mots les plus utilisés, réalisant ainsi notre première visualisation de données.
Ensuite, en utilisant la dépendance Matplotlib, nous obtiendrons une visualisation des 10 mots les plus fréquents, permettant de comparer visuellement chaque discours en fonction de son texte.
Nous conclurons par quelques hypothèses à la fin de l’exercice, où à côté des résultats nous comprendrons l’utilité de chaque outil pour le traitement et la visualisation des données vers la connaissance.
Données
Toutes les informations utilisées sont publiées sur le portail officiel de la Vie Publique du gouvernement français, dont le lien est accessible à tous et à des fins académiques uniquement.
Par souci de chronologie, j’ai choisi le dernier discours d’investiture du président Macron, le 7 mai 2022 et celui du président Hollande, le 15 mai 2012. (Le discours de réélection provisoire du président Macron du 14 mai 2017 a été omis).
Techniquement, le projet est implémenté en Python sur un notebook JupyterLab en local et tous ses fichiers seront hébergés sur GitHub pour consultation et mise à jour.
MÉTHODOLOGIE
Importation des dépendances
Nous importons toutes les dépendances qui seront utilisées dans notre notebook.
#Import requests for web scraping
import pandas as pd
import requests as rq
import numpy as np
import collections
# Matplotlib and associated plotting modules
import matplotlib.cm as cm
import matplotlib.colors as colors
import matplotlib as mpl
import matplotlib.pyplot as plt
# import k-means from clustering stage
from PIL import Image
from matplotlib import rcParams
Si vous voulez expérimenter avec d’autres dépendances ou installer plus de paquets en fonction des objectifs de votre projet, vous pouvez le faire directement sur le notebook, par ex :
!pip install lxml
J’essaie toujours de travailler avec des notebooks en JupyterLab localement sous un environnement virtuel Anaconda (Conda env), j’utilise également COLAB et Deepnote qui fonctionnent très bien en tant que machines virtuelles si le projet s’y prête (cela dépendra toujours de la consommation de la machine dans le traitement des données et de la qualité de la connexion internet).
Processus de collecte et de nettoyage des données
Nous importons BeautifulSoup pour extraire l’intégralité du document html de chaque discours et le convertir ensuite en texte (STR).
Nous utilisons d’abord le discours du président Hollande du 15 mai 2012
#Import BeautifulSoup for html structure information from our request
from bs4 import BeautifulSoup
page = rq.get('https://www.vie-publique.fr/discours/185063-declaration-de-m-francois-hollande-president-de-la-republique-sur-son')
soup = BeautifulSoup(page.text, 'lxml')
data = [element.text for element in soup.find_all('span', {'class': 'text-formatted'})] #Retrieving text
data = str(data) #Convert to string
data
Vous avez 3 options comme parser de Beatifulsoup, à la fin j’ai choisi lxml.
Vous trouverez les différences dans la documentation de la bibliothèque:
html.parser– intégré – pas de dépendances supplémentaires nécessaires.html5lib– le plus indulgent – à utiliser si le HTML est cassé.lxml– le plus rapide.
Une fois que nous avons obtenu les informations sous forme de texte, nous installons le paquet Word_clouds pour Python, ce qui nous permet de visualiser notre premier « nuage de mots« .

Vous devez savoir qu’il existe un paquet appelé StopWords, qui, selon Wikipedia, est le nom donné aux mots sans signification tels que les articles, les pronoms, les prépositions, etc. qui sont filtrés avant ou après le traitement des données en langage naturel. Pour cela, nous l’installons sur notre ordinateur portable comme ceci :
!pip -q install stop-words
Cela évite que ces mots entrent en concurrence avec notre analyse.
Nuage de mots
Le nuage de mots est une technique de visualisation des données textuelles dans laquelle la taille de chaque mot indique sa fréquence ou son importance.
Nous proposons d’utiliser la silhouette de chaque président comme conteneur de notre Word Cloud, ce qui nous permet d’associer les données à leur origine de manière visuelle.



Nous allons maintenant tracer avec Matplotlib en Python les 10 mots les plus répétés du discours du Président Hollande.

C’est maintenant au tour de visualiser le discours d’investiture du président Macron le 7 mai 2022 en utilisant la même procédure que ci-dessus.


Analyse des résultats
Discours d’investiture du président François Hollande le 15 mai 2012.
Les 10 premiers mots: France, besoin, République, toutes, confiance, place, justice, démocratie, Français, pays.

Discours d’investiture du Président Macron le 7 mai 2022
Les 10 premiers mots: France, pays, peuple, République, projet, Agir, temps, mandat, continuer, mai.

Conclusion
Nous pouvons générer plusieurs hypothèses en réalisant cet exercice de visualisation, surtout si nous partons du fait qu’en 10 ans de différence, de nombreux événements sont survenus qui ont modifié le discours présidentiel, se sont ajoutés à l’explosion de l’information (et de la désinformation) générée sur les réseaux sociaux et sur internet, aux problèmes de sécurité avec les attaques terroristes, aux problèmes et aux actions contre le changement climatique, à la crise sociale et économique due au déplacement forcé d’immigrants dans le monde entier, à la pandémie de Covid-19 et à la fragilité du système médical, pour finir par une guerre entre l’Ukraine et la Russie avec une menace nucléaire qui déstabilise tous les secteurs de la société.
2012 a été une année intense en France, avec une campagne électorale entachée par le terrorisme et le retour au pouvoir des socialistes, avec de nombreux défis et une faible popularité pour François Hollande, tandis que 2022 (toujours en cours) est accablée par les résultats de toutes sortes laissés par la pandémie de Covid-19, ajouté à la position de la France (et de l’Union européenne) face au conflit armé en Ukraine et en Russie, où, suite à la réélection d’Emmanuel Macron, une grande responsabilité incombe au pays pour redresser le pays au milieu de l’incertitude énergétique, sociale et sociale qui balaie le monde.
Nous pouvons noter que les mots communs entre les deux discours sont : La France, la République et la Patrie, qui sont posées comme base d’un texte présidentiel qui engage toute la Nation, son sentiment d’appartenance, de fierté et de liberté, un sentiment qui fait avant tout partie du peuple français sur l’ensemble de son territoire.
Pour le discours de 2012, il faut noter l’équivalence de sept mots en deuxième position d’utilisation (besoin, république, tous, confiance, lieu, justice et démocratie), la confiance étant, à mon avis, le mot qui encadre l’axe de son message, d’abord parce qu’après 17 ans, le socialisme revient au pouvoir et ensuite parce qu’il marque une différence entre lui et son prédécesseur, Nicolas Sarkozy, en s’appuyant sur l’exercice du pouvoir avec dignité et simplicité.
Maintenant, pour 2022, Emmanuel Macron après avoir battu l’extrême droite Marine Le Pen au second tour, a utilisé dans son discours un langage qui implique la projection, la diplomatie et l’inclusion, où de mon point de vue sont les mots : Projet et Agir, qui donnent forme à ce futur qui est désiré par tous les Français, impliquant ses partisans et ses détracteurs pour faire face à la situation et continuer avec le développement du pays malgré les temps qui sont vécus au milieu de l’incertitude.
Nous pouvons conclure que l’utilisation d’outils tels que le Web Scraping en Python pour faciliter la compréhension des discours présidentiels nous aide à identifier visuellement des modèles qui sont normalement liés à la situation actuelle, mais qui ont également un contexte interprété par chaque personne en fonction de sa position personnelle.
Il va sans dire qu’il ne s’agit que de mon opinion et d’une interprétation de plus du message qu’un président d’une nation veut transmettre lorsqu’il prend le pouvoir devant des millions de personnes.

Voir le code Python de l’ensemble du projet dans GitHub
References
- https://github.com/amueller/word_cloud/
- https://www.vie-publique.fr/discours/202852-declaration-de-m-emmanuel-macron-president-de-la-republique-sur-les-p
- https://www.vie-publique.fr/discours/285059-emmanuel-macron-07052022-investiture-president-de-la-republique
- https://matplotlib.org/
Ce projet est mis en œuvre en suivant le tutoriel de Luis Novelo que vous pouvez trouver dans son GitHub, grâce à lui et à ses cours à Platzi je suis très motivé pour ne jamais cesser d’apprendre.

