Aller au contenu (Pressez Entrée)
Javier Ladino

Javier Ladino

{Data/Design/Engineer}

  • Accueil
  • Portfolio
  • A propos de moi
  • EN 🇺🇸
  • ES 🇨🇴
DataViz

L’air transparent : Un voyage à travers les données de pollution dans les Pays de la Loire en 2023

Grâce à la plateforme Air Pays de la Loire, nous explorerons la qualité de l’air pour comprendre les complexités du problème de la pollution : identifier les points chauds et corréler les niveaux avec des activités humaines spécifiques au cours de l’année 2023. Nous ferons une analyse détaillée des données de concentration de polluants enregistrées dans des stations de mesure filtrées en Loire-Atlantique. Du dioxyde d’azote aux particules PM2,5 et PM10, comprenons comment ces émissions affectent la santé et l’environnement. Rejoignez-nous dans ce voyage à travers des données révélatrices qui nous aideront à mieux comprendre les défis environnementaux et à développer des solutions pour un avenir plus propre.

Introduction

La pollution atmosphérique est un problème mondial majeur. Plus de 6000 villes dans 117 pays surveillent la qualité de l’air, mais leurs habitants respirent encore des niveaux malsains de particules fines et de dioxyde d’azote, les habitants des pays à revenu faible ou intermédiaire étant les plus exposés.

Usine d’incinération et de traitement Alcéa de la Prairie de Mauves à Nantes.


La pollution accélère le changement climatique. L’OMS estime que la pollution atmosphérique post-pandémique est associée à plus de 7 millions de décès par an. Ses conclusions soulignent l’importance de réduire l’utilisation des combustibles fossiles et de prendre d’autres mesures pour réduire les niveaux de pollution de l’air.

Savez-vous quels polluants vous respirez chaque jour ? 😷

Les agences internationales se sont concentrées sur l’analyse des types de polluants les plus courants : les concentrations de dioxyde d’azote (NO2 ), de PM2,5 et de PM10, et de dioxyde de soufre SO2.


Dioxyde d’azote (NO2 )

Le NO2 est un polluant urbain courant et un précurseur des particules et de l’ozone. Il est associé aux maladies respiratoires, en particulier à l’asthme, entraînant des symptômes respiratoires (toux, respiration sifflante ou essoufflement), des admissions à l’hôpital et des visites aux urgences.

Les oxydes d’azote sont générés par les températures élevées des processus de combustion. Dans les endroits où la circulation est intense, les véhicules à combustion interne produisent environ 60 % du total des oxydes d’azote présents dans l’atmosphère.

Les effets de ces gaz sont évidents : visibilité réduite, corrosion des matériaux, réduction de la croissance de certaines espèces végétales, etc. En outre, ils peuvent se transformer en acide nitrique qui, lorsqu’il est présent dans l’atmosphère, peut donner lieu à des pluies acides en cas de précipitations.

Les oxydes d’azote sont en grande partie responsables de la destruction de la couche d’ozone. De petites quantités de ces gaz peuvent détruire de grandes quantités d’ozone. Cette situation est aggravée par le fait qu’ils ne peuvent être éliminés de l’atmosphère que par des processus naturels, qui sont évidemment beaucoup plus lents que la production de ces gaz.

De nombreux autres gaz polluants sont libérés dans l’atmosphère, tels que les oxydes de soufre ou de carbone, ainsi que d’autres composés et métaux tels que le plomb, le cadmium, le nickel, le fer, le mercure, le chrome, le cuivre, etc. Tous contribuent par leurs effets négatifs à la dégradation de l’environnement.


PM2,5 et PM10

PM est l’abréviation de particulate matter (matière particulaire) et la valeur se réfère au diamètre des particules. Les PM2,5 ont un diamètre inférieur à 2,5 microns (μm), tandis que les PM10 ont un diamètre inférieur à 10 microns (μm). Ces deux types de particules sont plus petites que la largeur d’un cheveu humain, dont le diamètre est généralement compris entre 17 et 180 μm.

Les particules en suspension dans l’air, en particulier les PM2,5 , sont capables de pénétrer profondément dans les poumons et d’entrer dans la circulation sanguine, provoquant des impacts cardiovasculaires, cérébrovasculaires (accidents vasculaires cérébraux) et respiratoires. Il est de plus en plus évident que les particules ont un impact sur d’autres organes et provoquent également d’autres maladies. Les PM2,5 sont nocives à court terme et ont des conséquences néfastes sur les groupes vulnérables tels que les enfants et les personnes âgées. Les PM10, en revanche, sont plus nocives en cas d’exposition chronique et répétée, en particulier chez les personnes souffrant de maladies pulmonaires préexistantes.


Dioxyde de soufre SO2

Dioxyde de soufre SO2, un gaz qui provient principalement de la combustion de combustibles fossiles contenant du soufre (pétrole, combustibles solides), principalement dans le cadre de processus industriels à haute température et de la production d’électricité. Peut avoir des effets néfastes sur la santé, tels que l’irritation et l’inflammation du système respiratoire, les maladies pulmonaires et l’insuffisance pulmonaire, l’altération du métabolisme des protéines, les maux de tête ou l’anxiété, sur la biodiversité, les sols, les écosystèmes aquatiques et forestiers (peut causer des dommages à la végétation, dégradation de la chlorophylle, réduction de la photosynthèse et perte conséquente d’espèces) et même sur les bâtiments, par des processus d’acidification, car une fois émis, il réagit avec la vapeur d’eau et d’autres éléments présents dans l’atmosphère, de sorte que son oxydation dans l’air conduit à la formation d’acide sulfurique.

Tous ces éléments contribuent, par leurs effets négatifs, à la santé des personnes et de la planète elle-même. Par conséquent, toutes les mesures visant à réduire les émissions, à perfectionner, à améliorer et à optimiser les moteurs à combustion interne, ou même à restreindre la circulation dans les villes, sont positives pour notre avenir. À partir de l’ensemble des données obtenues sur la plateforme www.data.airpl.org, nous pouvons identifier les lieux les plus pollués en fonction de leur type et de l’activité humaine qui les génère.

Origine des données 📁

Les données utilisées sur les concentrations de polluants ont été enregistrées dans les stations de mesure d’Air Pays de la Loire au cours de l’année 2023.

Cabine de mesure de la qualité de l’air installée en 2022. Localisation : 15 boulevard des Frères Goncourt, Nantes.


Selon la description du site internet : https://data.airpl.org/dataset/mesures, pour obtenir ces données spécifiques, Air Pays de la Loire met en œuvre des systèmes automatisés de mesure de la concentration en particules selon la norme NF EN 16450, utilisant deux méthodes de mesure (microbalance oscillante ou atténuation par rayonnement bêta). Ces dernières sont installées dans des stations de mesure sur site, associées à des systèmes d’acquisition des données de mesure, qui les agrègent en moyennes trimestrielles. Ces données brutes sont ensuite transmises au serveur informatique central et évaluées à différents niveaux d’agrégation (validations techniques et environnementales). Les données trimestrielles validées sont ainsi agrégées en moyennes horaires, elles-mêmes agrégées en moyennes journalières, mensuelles ou annuelles.

La couche d’information produite est utilisable à une échelle allant de 1/250 000 à 1/10 000 et peut être classée par typologie de station :

  • Poste de circulation : 1/10.000
  • Station inférieure : 1/30.000 (urbain) à 1/250.000 (rural)
  • Station industrielle : 1/100.000

Description des champs de la table de données.

  • Département (/dept_name) : nom du département où se trouve la station de mesure (à partir des données IGN).
  • Commune (/nom_com) : nom de la commune où est située la station de mesure (à partir des données IGN).
  • Station ( / nom_station) : nom de la station de mesure déterminé par Air Pays de la Loire.
  • Polluant (/nom_poll) : nom du polluant mesuré par la station de mesure.
  • Valeur (/ value) : valeur de la mesure enregistrée pour un polluant à une station donnée et dans une métrique donnée.
  • Unit (/unité) : unité de la valeur mesurée du polluant.
  • Indicateur (/metrique) : niveau d’agrégation temporelle des données mesurées (heure, jour, mois, année).
  • Date / Date-time ( / date_debut) : date de début du relevé de la mesure en heure locale (heure de métropole).
  • insee_com : Code INSEE de la commune où est située la station de mesure (à partir des données IGN).
  • code_station : Code unique de la station de mesure.
  • typologie(influence) : Nature de la station de mesure déterminée par sa localisation et son influence en fonction du type de polluant qu’elle mesure.
  • ID_poll_ue : Identifiant du polluant dans le système de référence européen.
  • date_fin(/date_fin) : date de fin du rapport de mesure en heure locale (heure de métropole).
  • statut_valid : validité de la mesure annotée, ‘t’ si la mesure est validée, ‘f’ si la mesure est invalidée.
  • X_reglementaire : coordonnée x de l’emplacement de la station de mesure à Lambert 93 (EPSG : 2154).
  • Y_reglementaire : coordonnée y de l’emplacement de la station de mesure à Lambert 93 (EPSG : 2154).

Description de la méthode utilisée.

Selon Air Pays de la Loire, la mesure de la qualité de l’air ambiant est réalisée selon les recommandations du référentiel professionnel du Laboratoire Central de Surveillance de la Qualité de l’Air (LCSQA), dans le respect des exigences réglementaires en vigueur.

Ces exigences couvrent l’ensemble de la chaîne de mesure, du point de vue des critères d’implantation des sites de mesure, du choix des méthodes d’analyse mises en œuvre, du suivi de la conformité métrologique du processus de mesure, de la validation et de l’agrégation des données de mesure.

Types de stations de mesure

En classant la variable typologie des stations (influence), la nature de la station de mesure est déterminée par sa localisation et son influence sur le type de polluant qu’elle mesure.

Les stations de mesure sont caractérisées en fonction de leur localisation et des sources d’émission auxquelles elles sont exposées. Il existe plusieurs types de localisation (rurale, urbaine et périurbaine) et d’influence (industrielle, de fond et de trafic). Les emplacements de fond correspondent à des zones où l’exposition de la population ou de l’environnement (végétation, écosystèmes naturels) à la pollution atmosphérique est moyenne et éloignée de toute source directe d’émissions.

Méthodologie – Mise en œuvre de l’analyse exploratoire des données (EDA)

Installation du paquet

Pour la mise en œuvre de l’analyse, nous avons choisi Python comme langage de programmation et Google COLAB comme environnement de travail, un outil en ligne créé pour le développement de projets de science des données, intégrant par défaut de nombreux paquets largement utilisés par les scientifiques des données.

  • Matplotlib : génération de graphiques à partir de listes ou de tableaux.
  • Numpy : logiciel de manipulation de vecteurs.
  • Pandas : manipulation et analyse de tableaux et de séries temporelles.
  • Scipy : outils et algorithmes mathématiques.
  • Seaborn : visualisation de données statistiques.
  • Plotly: analyse et visualisation de données en ligne.
# Importer les bibliothèques nécessaires
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import scipy.stats
import plotly
import plotly.graph_objects as go

Importation de données


Notre échantillon de données complet comprend un jeu de données au format .CSV pour chaque polluant téléchargé depuis la plateforme https://data.airpl.org/dataset/mesures, où il est nécessaire de filtrer la zone de la Loire-Atlantique, chaque polluant et d’indiquer les dates de début et de fin pendant 2023 sur une base journalière.

Afin de travailler avec la bibliothèque Pandas dans notre Notebook COLAB, nous importons nos fichiers .CSV et les convertissons en DataFrame pour une manipulation séparée en lui assignant un nom (ex : so2_df), et nous créerons également un dataframe final (ex : df_final) qui concaténera les données des quatre en une seule.

# Nous importons chaque fichier CSV et le convertissons en un cadre de données avec Pandas.
so2_df = pd.read_csv('so2_2023.csv', sep=';')
no2_df = pd.read_csv('no2_2023.csv', sep=';')
pm10_df = pd.read_csv('pm10_2023.csv', sep=';')
pm25_df = pd.read_csv('pm25_2023.csv', sep=';')

Préparation des données

Le nettoyage et l’adaptation des données pour l’analyse est une tâche obligatoire et peut-être le processus où nous apprenons le plus et obtenons la plus grande valeur de l’information pour atteindre nos objectifs.

La commande .info() de Pandas permet d’obtenir le nombre d’observations, ainsi que le nom, le nombre et le type de variables de chaque ensemble de données.

so2_df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3648 entries, 0 to 3647
Data columns (total 18 columns):
 #   Column             Non-Null Count  Dtype  
---  ------             --------------  -----  
 0   nom_dept           3648 non-null   object 
 1   nom_com            3648 non-null   object 
 2   insee_com          3648 non-null   int64  
 3   nom_station        3648 non-null   object 
 4   code_station (ue)  3648 non-null   object 
 5   influence          3648 non-null   object 
 6   nom_poll           3648 non-null   object 
 7   id_poll_ue         3648 non-null   int64  
 8   valeur             3616 non-null   float64
 9   unite              3648 non-null   object 
 10  metrique           3648 non-null   object 
 11  date_debut         3648 non-null   object 
 12  date_fin           3648 non-null   object 
 13  statut_valid       3647 non-null   object 
 14  x_wgs84            3648 non-null   float64
 15  y_wgs84            3648 non-null   float64
 16  x_reglementaire    3648 non-null   float64
 17  y_reglementaire    3648 non-null   float64
dtypes: float64(5), int64(2), object(11)
memory usage: 513.1+ KB

Pour l’exemple de l’ensemble de données so2_df, nous commençons avec 3648 observations et 18 variables disponibles pour démarrer notre analyse (n’oubliez pas qu’en parallèle, nous devons effectuer le même processus pour les trois autres ensembles de données : no2_df, pm10_df, pm25_df, et pm25_df)

Dictionnaire des variables

Après notre importation, nous avons 18 variables de différents types de données. Dix d’entre elles sont qualitatives et huit quantitatives. Il est important de noter que les variables temporelles : date_debut et date_fin sont de type Object, et nous les changerons plus tard en type DateTime pour visualiser et manipuler les données chronologiquement.

#Type de données variables
df_final.dtypes
output
nom_dept              object
nom_com               object
insee_com              int64
nom_station           object
code_station (ue)     object
influence             object
nom_poll              object
id_poll_ue             int64
valeur               float64
unite                 object
metrique              object
date_debut            object
date_fin              object
statut_valid          object
x_wgs84              float64
y_wgs84              float64
x_reglementaire      float64
y_reglementaire      float64
dtype: object

En préparant les données pour en évaluer la qualité, nous avons vérifié les données manquantes et la proportion de valeurs nulles pour chaque variable de notre ensemble.

# Quelle est la proportion de valeurs nulles par variable dans SO2 ?
(so2_df
     .isnull()
    .melt()
    .pipe(
        lambda df: (
            sns.displot(
                data=df,
                y='variable',
                hue='value',
                multiple='fill',
                aspect=2
            )
        )
    )
)
# Vérification nombre de valeurs nulles
so2_df.isnull().sum()
nom_dept              0
nom_com               0
insee_com             0
nom_station           0
code_station (ue)     0
influence             0
nom_poll              0
id_poll_ue            0
valeur               39
unite                 0
metrique              0
date_debut            0
date_fin              0
statut_valid          1
x_wgs84               0
y_wgs84               0
x_reglementaire       0
y_reglementaire       0
dtype: int64

Nous pouvons également visualiser les valeurs nulles au sein de l’ensemble de données, validant ainsi le fait que ces valeurs ne sont pas concentrées dans une série d’observations spécifiques, mais dispersées dans l’ensemble de données.

# Afficher les valeurs nulles dans l'ensemble du jeu de données
df_final.isnull().transpose().pipe(lambda df: (sns.heatmap(data=df)))


Pour cet exemple de l’ensemble de données so2_df, nous avons 39 observations avec des valeurs nulles. Si nous analysons les informations que nous perdons en supprimant ou en imputant les données manquantes de chaque ensemble de données, nous pouvons conclure que ces valeurs nulles des quatre ensembles de données ne représentent pas un impact majeur sur notre ensemble de données si nous les imputons avec la moyenne de chaque variable. Cependant, il est toujours important d’évaluer quelle est la meilleure action pour ces données, car elles peuvent devenir des valeurs aberrantes importantes qui changent la direction de notre analyse ou de nos résultats. Je vous recommande cet article de Marta Castrillo qui m’a beaucoup aidé : How to identify and treat outliers with Python ?

📌 Remarque : N'oubliez pas d'effectuer le même processus pour l'ensemble de données de chaque polluant : so2_df, no2_df, pm10_df et pm25_df.
# Imputons la variable valuer avec la moyenne
so2_df['valeur'].fillna(so2_df['valeur'].mean(), inplace=True)
print("Missing values en valeur: " +
      str(df_final['valeur'].isnull().sum()))

# Imputons la variable évaluateur avec la moyenne
so2_df['statut_valid'].fillna(so2_df['statut_valid'].mean(), inplace=True)
print("Missing values en statut_valid: " +
      str(df_final['statut_valid'].isnull().sum()))

Missing values en valeur: 0
Missing values en statut_valid: 0
📌 Remarque : si vous supprimez des données nulles, il est bon d'indiquer la quantité de données que vous perdez et la raison de votre décision. Dans ce cas, je n'ai pas supprimé mais imputé les données, c'est-à-dire que je les ai remplacées par la valeur moyenne de la variable "Valuer", qui est la variable principale de notre analyse.

Enfin, nous avons mentionné que nous devions changer le type de données des variables date_debut et date_fin en type datetime, pour cela nous utilisons à nouveau Pandas.

# Convertir les dates au format DateTime
so2_df['date_debut'] = pd.to_datetime(so2_df['date_debut'])
so2_df['date_fin'] = pd.to_datetime(so2_df['date_fin'])
no2_df['date_debut'] = pd.to_datetime(no2_df['date_debut'])
no2_df['date_fin'] = pd.to_datetime(no2_df['date_fin'])
pm10_df['date_debut'] = pd.to_datetime(pm10_df['date_debut'])
pm10_df['date_fin'] = pd.to_datetime(pm10_df['date_fin'])
pm25_df['date_debut'] = pd.to_datetime(pm25_df['date_debut'])
pm25_df['date_fin'] = pd.to_datetime(pm25_df['date_fin'])

C’est une bonne pratique de toujours vérifier les changements, dans ce cas nous le faisons avec .dtypes.

so2_df.dtypes
nom_dept                     object
nom_com                      object
insee_com                     int64
nom_station                  object
code_station (ue)            object
influence                    object
nom_poll                     object
id_poll_ue                    int64
valeur                      float64
unite                        object
metrique                     object
date_debut           datetime64[ns]
date_fin             datetime64[ns]
statut_valid                 object
x_wgs84                     float64
y_wgs84                     float64
x_reglementaire             float64
y_reglementaire             float64
dtype: object

Avant de passer au comptage et à la mise en rapport de nos ensembles de données, créons ou concaténons un cadre de données final ou général qui unifie les quatre polluants : df_final

# Concaténer les DataFrames en une seule DataFrame par ligne
contaminants = [no2_df, so2_df, pm10_df, pm25_df]
df_final = pd.concat(contaminants, axis=0, ignore_index=True)
df_final.head() 

# Maintenant df_final contient les données des 4 polluants avec le même nombre de colonnes


Statistiques descriptives

Mesures de tendance centrale et mesures de dispersion générale de la variable à étudier.

De toutes les variables quantitatives, nous constatons que la principale à analyser est la valeur. Avec Numpy et la méthode .describe, nous pouvons visualiser les mesures de tendance centrale.

# Mesures de tendance centrale, uniquement pour les variables numériques
df_final.describe(include=[np.number])

Cette variable « Valeur » indique l’indice de pollution à calculer en tant que variable quantitative.

Les variables centrales du dataframe df_final sont définies comme suit : la moyenne (8,485196 µg/m3) et la médiane (6,4 µg/m3).

En ce qui concerne les indicateurs de dispersion, nous utiliserons le BoxPlot pour vérifier le niveau de dispersion entre la moyenne et la médiane.

Nous constatons que le box plot de la variable « valeur » a sa plus grande distribution de données entre 2,2 ~ 12, se présentant comme asymétrique vers la droite, assez dispersé avec une large gamme parce qu’il y a des données qui atteignent un maximum de 75.

Statistiques descriptives univariées

Nous allons ici extraire les variables qualitatives de notre dataframe df_final :

# Uniquement les variables catégorielles
df_final.describe(include=object)
Statistiques de nos variables qualitatives – catégorielles.

Pour étudier les variables qualitatives, nous commencerons par visualiser la répartition par commune en Loire-Atlantique.


Ainsi, 23% des mesures sont effectuées sur la commune de Donges, suivie de Nantes (20%) et de Saint-Nazaire (12%). Si l’on comptabilise les observations par commune (nom_com), on constate leur répartition, avec Donges et Nantes comme principaux sites de mesure. En effet, Donges est la région qui compte le plus de stations de mesure de la qualité de l’air (4 stations), suivie de Nantes (3 stations), ce qui explique qu’elle compte presque deux fois plus d’observations que Saint-Nazaire qui arrive en troisième position (2 stations).

Région de Donges.


En analysant la carte de la Loire-Atlantique, on constate que la région de Donges a un fort impact industriel en raison de la présence de la raffinerie Total Energies, où une fuite d’essence s’est produite à partir d’un réservoir de stockage le 21 décembre 2022, ce qui explique que plusieurs mesures de surveillance et de contrôle de la qualité de l’air aient été mises en place dans la région.

Donges est la région qui compte le plus grand nombre de stations de mesure de la qualité de l’air (4 stations).
df_final.value_counts('nom_com', sort=True)
nom_com
Donges                      3646
Nantes                      3249
Saint-Nazaire               1841
Saint-Etienne-De-Montluc    1461
Montoir-De-Bretagne         1460
Frossay                     1318
Bouguenais                  1095
Rezé                         787
Paimbœuf                     365
Trignac                      365
Savenay                      364
dtype: int64

Quelle est la commune où la concentration moyenne de polluants est la plus élevée ?

Il est important de noter qu’en visualisant la concentration des polluants par commune, il n’y a pas de corrélation entre la commune ayant le plus d’observations (Donges) et la commune ayant les indices de concentration les plus élevés, où dans notre cas c’est Rezé, suivie de Nantes, qui occupent les premières places.

avg_concentration_by_comuna = df_final.groupby('nom_com')['valeur'].mean().sort_values(ascending=False)
plt.figure(figsize=(12, 6))
avg_concentration_by_comuna.plot(kind='bar', color='skyblue', hue='nom_com')
plt.title('Average Concentration per Commune')
plt.xlabel('Commune')
plt.ylabel('Average Concentration')
plt.show()
avg_concentration_by_comuna.head()
nom_com
Rezé                   13.108880
Nantes                 13.063650
Bouguenais             11.697341
Trignac                 8.307994
Montoir-De-Bretagne     7.894922
Name: valeur, dtype: float64
# Analyse de la concentration des polluants par commune en df_final
plt.figure(figsize=(15, 6))
sns.boxplot(x="nom_com", y="valeur", data=df_final)
plt.title("Concentration of pollutants by commune")
plt.xticks(rotation=45, ha="right")
plt.show()

Il est maintenant temps d’analyser la distribution par « typologie » : (influence), l’une des catégories les plus importantes de l’ensemble des données (df_final), qui nous permet d’établir les pourcentages de l’activité humaine influençant la pollution dans la région, en fonction du nombre d’observations.

On constate que 63% des mesures effectuées ont une influence « industrielle« . Si l’on met en relation la typologie avec la mesure par polluant (nom_poll), on confirme l’origine de celle-ci.


Combinaison de variables : statistiques descriptives bivariées

La combinaison de variables permet de déterminer si une variable en influence une autre.

La variable qualitative « valeur » étant celle que nous voulons étudier, nous allons faire des statistiques bivariées en nous concentrant sur cette variable.


Lors des études univariées, nous avons réalisé un box plot sur la valeur du polluant. Il semble logique d’utiliser ce diagramme en ajoutant une variable qualitative pour effectuer une comparaison de la dispersion.

Nous avons remarqué que les stations de background naturel et les stations industrielles ont une dispersion similaire avec des quantiles, des médianes et des maxima à des niveaux faibles, tandis que les stations spécifiques et les stations de trafic ont des indicateurs de dispersion plus élevés. Une fois encore, la répartition des stations en fonction de leur influence ou de leur origine nous montre que l' »industrie » a le plus grand nombre d’observations dans notre ensemble de données, mais que c’est le « trafic » dont les valeurs montrent que c’est l’activité humaine qui a le plus d’impact sur la pollution.

Par conséquent, nous pouvons déduire la typologie qui influence notamment le taux de ses valeurs polluantes dans chaque lieu de la région : les environnements qui montrent un volume élevé de « Trafic » ont des niveaux plus élevés de valeurs polluantes et il serait donc conseillé de les éviter afin de vivre ou de rester près de ces points.

Les initiatives telles que NAOAIR deviennent des solutions importantes pour nous informer en temps réel sur la qualité de l’air, que nous choisissions de voyager ou de faire du sport.

Depuis des années, la Commission européenne souligne que la pollution de l’environnement est trop élevée et que les substances nocives dépassent les limites légales. Ce reportage d’EuroNews étudie l’impact de cette situation dans certaines villes françaises.

Les polluants les plus préoccupants :

La concentration moyenne des polluants montre que les PM10 ☣️ sont les plus répandues et donc les plus préoccupantes pour la santé des habitants de la région.

Relation entre la concentration de polluants et l’activité humaine par commune :

Variation temporelle de la concentration de polluants par polluant :

Calculer les jours de mesure et les stations présentant les valeurs de pollution les plus élevées par polluant :

Les stations de surveillance enregistrent des niveaux constamment élevés :

# Calculer le nombre de jours de mesure
num_days = df_final['date_debut'].nunique()
print(f "Nombre de jours de mesure : {num_jours}")

# Identifier les stations avec le plus de valeurs de pollution
stations_avec_le_plus_de_pollution = df_final.groupby('nom_station')['valeur'].mean().sort_values(ascending=False).head(5)
print("Stations avec le plus de valeurs de contamination :")
print(stations_avec_le_plus_de_pollution)

# Afficher les résultats
plt.figure(figsize=(12, 6))
sns.barplot(x=stations_avec_le_plus_de_pollution.index, y=stations_avec_le_plus_de_pollution.valeurs, palette="viridis")
plt.title("Stations avec les valeurs de pollution les plus élevées")
plt.xlabel("Nom de la station")
plt.ylabel("Concentration moyenne de polluants")
plt.xticks(rotation=45, ha="right")
plt.show()

Nombre de jours de mesure : 365
Stations avec plus de valeurs de pollution :
nom_station
FRERES GONCOURT 17.466060
TRENTEMOULT 13.108880
LES COUETS 11.697341
CIM BOUTEILLERIE 11.027805
LA CHAUVINIERE 10.841820
Nom : valeur, dtype : float64
<ipython-input-447-77ba1b50069e>:12: FutureWarning:
La station présentant les valeurs de contamination par les polluants les plus élevées est la station Frères Goncourt, située au 15 boulevard des Frères Goncourt, à Nantes.

Tendance générale de la concentration de polluants au cours de l’année écoulée :

# Trouver le jour le plus pollué et les saisons associées
most_polluted_day = df_final.loc[df_final.groupby('date_debut')['valeur'].idxmax()]
most_polluted_day_sorted = most_polluted_day.sort_values(by='valeur', ascending=False)

Jour le plus pollué de l'année (de la valeur la plus élevée à la valeur la plus basse) :
      date_debut       nom_station  valeur
9362  2023-09-06  CIM BOUTEILLERIE    75.0
3855  2023-02-14   FRERES GONCOURT    70.0
3907  2023-02-10   FRERES GONCOURT    68.0
11651 2023-02-09        LES COUETS    66.0
1379  2023-09-08   FRERES GONCOURT    65.0
...          ...               ...     ...
11078 2023-04-02       TRENTEMOULT    11.0
9473  2023-08-27       TRENTEMOULT    10.0
1667  2023-08-15   FRERES GONCOURT     9.4
10692 2023-05-08       TRENTEMOULT     9.4
10702 2023-05-07       TRENTEMOULT     7.2

# Si vous souhaitez également afficher les valeurs de polluants de ce jour pour toutes les stations
most_polluted_day_all_stations = df_final[df_final['date_debut'] == most_polluted_day_sorted.iloc[0]['date_debut']]
most_polluted_day_all_stations_sorted = most_polluted_day_all_stations.sort_values(by='valeur', ascending=False)
Valeurs des polluants pour ce jour-là dans toutes les stations (classées de la valeur la plus élevée à la valeur la plus faible) :
      date_debut               nom_station     valeur nom_poll
9362  2023-09-06          CIM BOUTEILLERIE  75.000000     PM10
9359  2023-09-06            LA CHAUVINIERE  64.000000     PM10
9356  2023-09-06              LA MEGRETAIS  62.000000     PM10
9363  2023-09-06               TRENTEMOULT  62.000000     PM10
9358  2023-09-06  SAINT ETIENNE DE MONTLUC  61.000000     PM10
9365  2023-09-06                     CAMEE  55.000000     PM10
9357  2023-09-06                   FROSSAY  53.000000     PM10
9361  2023-09-06        PARSCAU DU PLESSIS  50.000000     PM10
9360  2023-09-06                 LEON BLUM  48.000000     PM10
1403  2023-09-06           FRERES GONCOURT  39.000000      NO2
13408 2023-09-06                 LEON BLUM  23.000000    PM2.5
13414 2023-09-06           FRERES GONCOURT  23.000000    PM2.5
13410 2023-09-06          CIM BOUTEILLERIE  22.000000    PM2.5
1401  2023-09-06                LES COUETS  22.000000      NO2
13407 2023-09-06            LA CHAUVINIERE  20.000000    PM2.5
13406 2023-09-06  SAINT ETIENNE DE MONTLUC  19.000000    PM2.5
1399  2023-09-06             PARC PAYSAGER  19.000000      NO2
13412 2023-09-06                LES COUETS  18.000000    PM2.5
13405 2023-09-06                   FROSSAY  18.000000    PM2.5
13404 2023-09-06              LA MEGRETAIS  18.000000    PM2.5
1402  2023-09-06                     CAMEE  18.000000      NO2
1395  2023-09-06               JULES VERNE  18.000000      NO2
1397  2023-09-06                 LEON BLUM  17.000000      NO2
13413 2023-09-06                     CAMEE  17.000000    PM2.5
13411 2023-09-06               TRENTEMOULT  17.000000    PM2.5
1396  2023-09-06            LA CHAUVINIERE  16.000000      NO2
13409 2023-09-06        PARSCAU DU PLESSIS  16.000000    PM2.5
1392  2023-09-06              LA MEGRETAIS  16.000000      NO2
1398  2023-09-06        PARSCAU DU PLESSIS  16.000000      NO2
1400  2023-09-06          CIM BOUTEILLERIE  14.000000      NO2
9364  2023-09-06                LES COUETS   8.448881     PM10
9366  2023-09-06           FRERES GONCOURT   8.448881     PM10
1393  2023-09-06                   FROSSAY   8.300000      NO2
1394  2023-09-06  SAINT ETIENNE DE MONTLUC   7.000000      NO2
5585  2023-09-06              LA MEGRETAIS   3.500000      SO2
5592  2023-09-06             PARC PAYSAGER   1.700000      SO2
5590  2023-09-06                 CUTULLIC2   1.600000      SO2
5586  2023-09-06                   PASTEUR   0.650000      SO2
5584  2023-09-06                    AMPERE   0.440000      SO2
5591  2023-09-06        PARSCAU DU PLESSIS   0.280000      SO2
5587  2023-09-06                   FROSSAY   0.240000      SO2
5593  2023-09-06                     CAMEE   0.070000      SO2
5589  2023-09-06  SAINT ETIENNE DE MONTLUC   0.000000      SO2
5588  2023-09-06                   SAVENAY   0.000000      SO2

Les jours où les niveaux de pollution ont été les plus élevés en 2023 ont été la mi-février et la première semaine de septembre, qui correspondent aux jours les plus froids de l’hiver et à la semaine de la rentrée scolaire et des vacances de fin d’année.

Variation de la concentration au cours des différentes saisons de l’année :

Plus de questions 🤔

Voici quelques questions supplémentaires qui pourraient nous aider à explorer les corrélations, les causalités ou les différences qui peuvent être liées aux problèmes sociaux liés aux émissions de polluants :

  • Existe-t-il une corrélation entre la concentration de polluants et les taux de maladies respiratoires dans la population de chaque commune ?
  • Existe-t-il une relation entre l’activité industrielle dans une commune et les niveaux de pollution de l’air dans cette zone ?
  • Existe-t-il une différence significative de la qualité de l’air entre les zones urbaines et rurales ?
  • Comment les conditions météorologiques, telles que la température et la vitesse du vent, affectent-elles la dispersion des polluants ?
  • Existe-t-il des preuves de disparités socio-économiques dans l’exposition aux polluants, et quel est le lien avec les décisions d’urbanisme ?
  • La présence d’espaces verts ou de parcs dans une commune est-elle corrélée à des niveaux plus faibles de polluants ?
  • La mise en œuvre de politiques environnementales ou de restrictions réglementaires a-t-elle eu un impact observable sur la réduction des émissions de polluants ?
  • Peut-on établir une relation entre la mobilité urbaine (utilisation des transports publics, véhicules électriques, etc.) et la qualité de l’air ?
  • Comment la perception de la qualité de l’air par le public varie-t-elle par rapport aux données objectives sur la pollution ?
  • Existe-t-il des différences dans les niveaux de polluants entre les jours de semaine et les week-ends, et comment cela peut-il être lié aux schémas d’activité humaine ?

Ces questions permettent de mieux comprendre les facteurs sociaux, économiques et environnementaux qui contribuent aux problèmes liés aux émissions de polluants et à la qualité de l’air.

L’analyse révèle des points chauds de pollution dans certaines communes, soulignant la nécessité d’interventions spécifiques. Des corrélations entre l’activité industrielle, les conditions météorologiques et les concentrations de polluants ont été identifiées. La mise en œuvre de politiques environnementales et la promotion de la mobilité durable pourraient atténuer les effets négatifs sur la qualité de l’air. En outre, les disparités socio-économiques dans l’exposition aux polluants soulignent l’importance de traiter les problèmes environnementaux dans une perspective équitable et axée sur la santé publique.

Ce projet a été entrepris dans le but de comprendre le problème de la pollution environnementale et de mettre en pratique les connaissances acquises dans le domaine de la science des données. Il va sans dire qu’il s’agit d’un exercice de jugement personnel et de valeur, et qu’il sera sûrement plein de corrections que j’espère pouvoir continuer à apporter grâce aux commentaires de chacun. 😊

Dashboard interactive en Looker Studio 👇
https://lookerstudio.google.com/reporting/4534372d-c6af-4361-ad26-e555bfe7c05c

Sources:

https://data.airpl.org/dataset/mesures

https://www.lcsqa.org/fr/rapport/2016/imt-ld-ineris/guide-methodologique-stations-francaises-surveillance-qualite-air

https://www.statistiques.developpement-durable.gouv.fr/sites/default/files/2020-09/datalab_71_bilan_qualite_air_france_2019_septembre2020.pdf

This EuroNews report investigates their impact in some French cities.

https://www.airpl.org/rapport/qualite-de-l-air-liee-a-l-incident-de-la-raffinerie-de-donges-rapport-ndeg2-des-mesures-effectuees

How to identify and treat outliers with Python ?

#qualityair #dataanalyst #LinkedInAnalysis #DataScience #EnvironmentalSustainability #pollution #climatechange #environnement #nantes #paydelaloire #loireatlantique #climat

Projets similaires

🌍 Analyse géospatiale de l’offre touristique des restaurants dans les Pays de la Loire 🍽️

octobre 6, 2025

Analyse visuelle du discours présidentiel français avec python

mai 25, 2022

Visualisation du vote présidentiel dans les villes les plus corrompues de Colombie 🗳🇨🇴

juin 16, 2022
© Copyright 2026 Javier Ladino. Perfect Portfolio | Développé par Rara Theme. Propulsé par WordPress.