PÉTITION "POUR UN AIR PUR À VAL-DAVID"
Tout a commencé avec l'installation d'un capteur de la compagnie IQAir, acquis pour un coût de 500 $. Ce capteur, connecté par câble réseau et installé à l'extérieur selon les recommandations de l'entreprise, a été validé par celle-ci avant le début de la collecte des données. Initialement, l'objectif était de diffuser la mesure en ligne, mais nous avons rapidement rencontré des problèmes.
En effet, la validation des données était faite en fonction des capteurs environnants, notamment des capteurs gouvernementaux, le plus proche étant situé à Mont-Blanc (anciennement Saint-Faustin-Lac-Carré). Ce capteur, comme plusieurs autres au Québec, était positionné loin du périmètre urbain et ainsi des zones habitées, souvent en forêt ou sur une montagne. Cela faussait la mesure locale à Val-David, puisque notre capteur était ajusté en fonction d'une zone beaucoup moins exposée à la pollution urbaine. Ce système de validation, utile en milieu très urbain avec plusieurs capteurs, s'est donc avéré peu pertinent pour notre contexte.
Pour obtenir des données plus fidèles, nous avons décidé de passer à un capteur PurpleAir, qui affiche directement les données brutes sur sa plateforme. Ce système nous a permis un accès plus simple et transparent aux données, ainsi qu'à celles d'autres capteurs standardisés. L'utilisation d'une API pour le téléchargement et l'analyse des données a également facilité notre travail.
Au départ, nous avons comparé ces mesures avec celles des capteurs du Gouvernement du Québec et de la Ville de Montréal pour les années 2022-2024. Cependant, nous avons rapidement constaté que ces capteurs, étant souvent mal positionnés pour mesurer la pollution près des zones habitées, rendaient la comparaison peu pertinente. De plus, ces capteurs utilisent une technologie différente. Nous avons donc laissé tomber l'intégration des capteurs gouvernementaux dans cette analyse et nous nous fions désormais aux capteurs PurpleAir, dont les données sont standardisées, comparables à l'échelle du Québec et leur localisation est beaucoup plus représentative des milieux habités en région.
Pour ce qui est de l'échantillonnage à l'échelle du Québec, nous avons pris en compte environ 60 capteurs Purple Air communautaires (non gouvernementaux) répartis sur environ 45 localités, y compris des villages autochtones du Grand Nord. Bien que l'échantillonnage ne soit pas parfait (il manque plusieurs villes d'importance), il offre un bon début pour comparer Val-David aux différents milieux, des grandes villes aux petites communautés. Nous avons sélectionné les capteurs pour leur constance dans le temps et la qualité des données (écart minimal entre capteur A et B des modules de mesure) ainsi que par leur emplacement à l'intérieur de zone habitées. Le nombre réduit de capteurs dans les grandes villes peut être expliqué par la présence de capteurs gouvernementaux, comme à Montréal, où un suivi de la qualité de l'air est déjà assuré par la municipalité. Cela peut expliquer pourquoi il y a moins de capteurs communautaires dans ces zones. Nous continuons à surveiller la couverture pour refléter au mieux la diversité des environnements du Québec en comparaison à Val-David.
Sur le territoire du Québec, plus de 140 capteurs actifs de qualité de l'air PurpleAir ont été recensés. Grâce à des outils de géomatique, nous avons identifié et extrait ces données en utilisant l’outil de PurpleAir. Toutefois, un filtrage a été nécessaire pour assurer la fiabilité des informations.
En plus des capteurs gouvernementaux et de la Ville de Montréal (voir section précédente), certains capteurs PurpleAir ont été exclus, notamment ceux situés à l’intérieur des bâtiments, ceux dont les données étaient incomplètes ou ceux qui présentaient des écarts trop importants entre les deux capteurs d’une même station (A et B). Chaque station comporte en effet deux capteurs pour valider la précision des mesures.
Après cette analyse et ce filtrage, environ 60 capteurs ont été retenus pour l'analyse selon la période (voir tableau plus bas).
Les capteurs PurpleAir sont des capteurs optiques, tout comme ceux installés à Saint-Sauveur par le Gouvernement du Québec. Contrairement aux stations officielles plus sophistiquées, les capteurs optiques peuvent être influencés à la hausse par des hauts taux d'humidité. Toutefois, en plus d'une correction interne prévue à cet effet dans ces capteurs, cet effet demeure mineur et ne remet pas en question la validité globale des données recueillies.
Les indicateurs horaires/journaliers permettent d'ajuster nos activités quotidiennes et d'illustrer des épisodes de pollution élevées à l'échelle quotidienne. Les seuils annuels recommandés sont des normes de référence établies en prenant en compte les effets cumulatifs sur la santé de la pollution de l'air à long terme.
Nous avons choisi d’adopter l’AQI-US (Air Quality Index des États-Unis) comme indicateur principal pour "widget" de Purple Air, le bilan des journées et le calendrier, tous trois situés en haut de la page d'accueil. Cette décision repose avant tout sur le fait qu'il est largement utilisé à l'échelle internationale et que PurpleAir, la plateforme dont nous utilisons la cartographie et le widget en temps réel, affiche par défaut l’AQI-US avec une échelle de couleurs bien connue (vert : « Bonne », jaune : « Modéré », orange : « Médiocre », etc.). Lorsque l’utilisateur navigue simultanément sur notre site et sur la carte PurpleAir, il retrouve ainsi immédiatement les mêmes codes couleurs et seuils, sans risque de confusion visuelle. Les indices québécois (IQA-Québec) et canadiens (CAAQS, c’est-à-dire le NCPAA) ne sont pas disponibles au choix dans PurpleAir. Seul l’AQHI+ (version actualisée de l’AQHI Canada pour mieux prendre en compte les PM₂,₅ lors des feux de forêt) apparaîtrait, mais celui-ci nous semblait moins pertinent notamment puisqu’il a été conçu au départ pour se baser sur plusieurs polluants (ozone, NO₂, PM₂,₅).
En termes de granularité, l’AQI-US présente un avantage majeur : il distingue plusieurs paliers intermédiaires. Depuis sa révision de 2024, le premier seuil pour la PM₂,₅ (catégorie « Good ») a été abaissé à 9 µg/m³. À l’inverse, l’AQI-Québec ne comporte que trois catégories (« Bonne », « Acceptable » et « Mauvaise ») et classe encore comme « Bonne » une journée où la concentration de PM₂,₅ atteint 17 µg/m³. De plus, alors que le niveau le plus élevé indiqué par l'AQI-Québec est de 35 mcg, l'AQI US indique des niveaux beaucoup plus élevés allant jusqu'à 225 mcg.
Nous avons également tenu à y ajouter la méthode québécoise de l'IQA-Québec pour identifier les « journées de smog », c’est-à-dire les épisodes où les PM₂,₅ restent supérieurs à 35 µg/m³ pendant au moins trois heures consécutives. La Ville de Montréal utilise ce même indicateur pour calculer les jours de smog sur son territoire. Ainsi, en comparant le nombre de journées de smog à Montréal et à Val-David, nous avons constaté un nombre beaucoup plus élevé de jours de smog à Val-David. D'ailleurs, le nombre d'alertes que nous avons reçus des autorités publiques a été dérisoire par rapport au nombre d'alertes que nous aurions dû recevoir.
L'indicateur IQA-Québec implique un critère de couverture de territoire, soit 75 % de l’agglomération doit être concernée, mais ce critère n'est pas adapté à Val-David, étant donné que la majorité de la population habite dans le périmètre urbain circonscrit sur le territoire. Nous appliquons donc ici uniquement la condition horaire : dès qu’un ou plusieurs capteurs relèvent trois heures consécutives à ≥ 35 µg/m³ (soit dans l’AQI-US la catégorie « Médiocre » ou au-dessus), nous qualifions la journée de « Jour de smog ».
Nous utilisons les mesures brutes de PM₂,₅ pour le reste des analyses. En particulier, nous comparons les données de Val-David à celles des capteurs validés ailleurs au Québec. Par ailleurs, en croisant les concentrations horaires de PM₂,₅ avec la pression atmosphérique et la température, nous observons l’impact des inversions thermiques sur l’accumulation de particules dans la vallée. Ces analyses approfondies nous donnent une vision plus fine des mécanismes locaux de pollution.
Enfin, pour prendre en compte les effets cumulatifs sur la santé à plus long terme, nous utilisons le seuil annuel recommandé par l’OMS (moyenne annuelle de 5 µg/m³ de PM₂,₅). L’OMS, qui élabore ses lignes directrices sur la base des données scientifiques probantes et récentes (Lignes directrices de l'OMS 2021, haut de la page 5), a estimé que réduire la moyenne annuelle à 5 µg/m³ pourrait éviter, selon un scénario, jusqu’à 80 % des effets sanitaires liés aux PM₂,₅ (maladies respiratoires, cardiovasculaires, cancers). En comparaison, la norme canadienne tient davantage compte de contraintes économiques et politiques, d’où son seuil plus permissif (8,8 µg/m³ de PM₂,₅).
Nous utilisons un outil de téléchargement des données PurpleAir, qui nous permet d'extraire une grande quantité de données à faible coût. Ces données, structurées de manière uniforme, facilitent l'analyse avec des scripts Python développés pour traiter et visualiser les résultats sous forme de graphiques et d'indicateurs clairs tout en facilitant la mise à jour.
Afin de mieux représenter les périodes d'utilisation des foyers au bois, nous avons choisi de diviser l'analyse en saisons froides et saisons chaudes. Cette approche nous permet de mieux visualiser les tendances de pollution en fonction des périodes lors desquelles l'usage du chauffage au bois est plus fréquent. En effet, les foyers sont une source majeure d'émissions de particules fines en hiver, alors que d'autres facteurs comme les feux de forêt ou les feux extérieurs peuvent influencer les niveaux de pollution en été. Cette distinction permet une analyse plus pertinente des données et une meilleure compréhension des sources de pollution.
Toutes les données utilisées pour ces analyses sont accessibles publiquement. Toute personne intéressée à vérifier, valider ou contribuer à l'analyse est invitée à les consulter directement sur cette page. Nous encourageons la collaboration et la transparence dans l'interprétation des données afin d'affiner nos analyses et d'améliorer la compréhension de la situation concernant la qualité de l'air à Val-David.
Carte des capteur Purple Air actifs au Québec. (En vert : capteurs en zone habité, en rouge : non habité et en gris : intérieur)
Classement des capteurs selon la qualité de leurs données.
Nous mettons à disposition les données brutes collectées ainsi que les données structurées et consolidées issues de nos analyses (sous forme de scripts Python et de fichiers CSV). Ces données sont accessibles pour quiconque souhaite les utiliser, que ce soit pour valider nos résultats, approfondir certains aspects ou explorer d'autres pistes d'analyse que nous n'avons pas encore abordées.
Pour accéder aux données, il vous suffit de cliquer sur les dossiers situés juste à côté. Vous pourrez télécharger les fichiers individuels ou l’ensemble du dossier si vous le souhaitez. Les données sont disponibles en lecture seule : vous pouvez les télécharger, mais vous ne pourrez pas les modifier directement sur la plateforme.
Nous avons structuré ces données du mieux que nous le pouvions, en fonction du temps et des ressources dont nous disposions. Toutefois, certains éléments d’automatisation et de mises à jour pourraient ne pas être parfaitement documentés. Si vous avez des questions particulières ou des difficultés à interpréter certains éléments, n’hésitez pas à nous écrire.
Cette série de scripts est utilisée pour traiter et analyser des fichiers CSV contenant des données sur la qualité de l'air. Chaque script exécute une étape spécifique du pipeline de traitement des données, en suivant un ordre logique basé sur la numérotation des fichiers.
Les scripts fournis sont conçus pour fonctionner en mode relatif, ce qui signifie qu'ils pointent vers les fichiers et dossiers en fonction de leur emplacement dans la structure définie. Peu importe l'endroit où ces scripts sont exécutés, ils retrouveront automatiquement les fichiers nécessaires tant que la structure des dossiers et les noms des fichiers restent inchangés.
⚠️ Il est donc crucial de ne pas modifier les noms des dossiers et fichiers, ni leur organisation, sous peine de provoquer des erreurs lors de l'exécution des scripts un coup téléchargés sur votre ordinateur.
1.0-Ajout champs ID.py
Objectif : Ajouter une colonne ID à chaque fichier CSV brut, en extrayant l’identifiant du nom de fichier.
Fichiers en entrée : Tous les CSV contenus dans CSV Brute/ (nommés par ex. 1234 données.csv).
Fichiers en sortie : Même nom de fichier dans CSV avec ID/, chaque ligne précédée de la valeur ID.
Étapes clés :
Parcours du dossier source.
Extraction de l’identifiant (premier segment du nom de fichier).
Lecture/écriture en CSV, insertion de l’entête ID en première colonne, puis ajout de la valeur sur chaque ligne.
Particularités : Création automatique du dossier de destination si nécessaire; impression d’un message de confirmation pour chaque fichier traité.
2.0-Fusion CSV et liste capteurs pour download purple air tool.py
Objectif :
Fusionner tous les CSV enrichis d’ID en un seul fichier consolidé sans doublons basés sur (ID, time-stamp).
Générer un rapport d’importation et un fichier listant les capteurs pour l’outil PurpleAir.
Fichiers en entrée : Tous les CSV de CSV avec ID/.
Fichiers en sortie :
CSV consolides/CSV consolides.csv (fusion de toutes les lignes valides + colonne Statut Importation).
CSV consolides/rapport_importation.csv (état de chaque fichier et lignes ignorées).
CSV consolides/lignes_ignorées.csv (lignes vides ou mal formées).
Capteurs/Liste de capteurs pour outils telechargement PurpleAir.csv (IDs uniques).
Étapes clés :
Lecture de chaque fichier, vérification de l’en-tête.
Filtrage des lignes vides, marquage des doublons (ID, time-stamp).
Écriture du CSV fusionné et du rapport.
Extraction et tri des IDs pour créer la liste de capteurs.
Particularités : Gestion fine des erreurs de fichiers vides, duplication et rapport détaillé.
3.0-Ajout champs temporels.py
Objectif : À partir du CSV consolidé, enrichir chaque enregistrement de colonnes temporelles lisibles en français.
Fichiers en entrée : CSV consolides/CSV consolides.csv.
Fichiers en sortie : CSV consolides/CSV consolides temps.csv.
Étapes clés :
Lecture de la colonne time_stamp au format ISO+TZ.
Conversion en objet datetime, extraction de l’heure (HH:MM:SS), jour de semaine, mois et année.
Traduction jour/mois en français via dictionnaires.
Particularités :
Gestion d’erreurs de parsing avec valeurs Erreur en cas de ligne problématique.
Encodage UTF-8 pour prise en charge des accents.
5.0-Fusion nom.py
Objectif : Fusionner les données consolidées avec un fichier de correspondances sensor_index → name.
Fichiers en entrée :
CSV consolides/CSV consolides temps.csv.
Capteurs/Extraction auto Quebec/capteurs_quebec_exterieur_habite.csv (colonnes sensor_index, name).
Fichiers en sortie : CSV consolides/CSV consolides avec noms.csv.
Étapes clés :
Lecture du mapping sensor_index→name.
Ajout d’une colonne name aux données consolidées, valeur Nom Inconnu si pas de correspondance.
Particularités : Vérification préalable de la présence des colonnes requises et message d’erreur clair si manquant.
5.1-Fusion municipalite et regions.py
Objectif : Enrichir le CSV précédent avec les colonnes Municipalite et Region extraites du même fichier de référence.
Fichiers en entrée :
CSV consolides/CSV consolides avec noms.csv.
Capteurs/Extraction auto Quebec/capteurs_quebec_exterieur_habite.csv (colonnes sensor_index, MUS_NM_MUN, MUS_NM_REG).
Fichiers en sortie : CSV consolides/CSV consolides avec municipalite_region.csv.
Étapes clés :
Chargement du mapping ID→(Municipalite, Region).
Ajout de deux colonnes, valeur "Inconnue" par défaut si absence de correspondance.
Particularités : Gestion des erreurs de structure de fichier et confirmation de succès.
5.2-Classification des capteurs.py
Objectif : Produire un rapport de classification des capteurs par saison et un graphique récapitulatif.
Fichiers en entrée : CSV consolides/CSV consolides avec municipalite_region.csv.
Fichiers en sortie :
CSV consolides/capteurs_classification_par_saison.csv (pour chaque (ID, saison) : nombre d’heures, anomalies, pourcentages, classification OK, à surveiller ou problématique).
CSV consolides/graphique_classification_saison.png.
Étapes clés :
Définition des saisons (chaude avril-septembre, froide octobre-mars).
Calcul d’anomalies entre canaux A/B avec seuils hybrides.
Comptage total et manquant, calcul de pourcentages et évaluation des seuils seuils (5 % / 10 % / 15 %).
Écriture du CSV et génération d’un bar chart par classification.
Particularités : Adaptation dynamique de la fin de saison si elle dépasse la date du jour.
6.0-Ajout AQI US et anomalies.py
Objectif : Calculer l’AQI_US d’après la concentration PM2.5 et détecter les anomalies A-B.
Fichiers en entrée : CSV consolides/CSV consolides avec municipalite_region.csv.
Fichiers en sortie :
CSV consolides/CSV avec AQI_US.csv (colonnes ajoutées AQI_US et anomalie_A_B).
CSV consolides/bilan_traitement.csv (compteurs de lignes totales, anomalies, hors plage, invalides).
Étapes clés :
Définition des paliers AQI EPA 2024 pour PM2.5.
Fonction de calcul linéaire de l’AQI.
Marquage des anomalies et gestion des valeurs hors plage ou invalides.
Bilan global des différentes catégories.
Particularités : Séparation claire des anomalies A-B et des calculs AQI, messages console de confirmation.
12.0-Classification journée.py
Objectif : Classifier chaque jour en fonction de la pire moyenne sur 3 heures glissantes d’AQI, puis produire un graphique mensuel empilé.
Fichiers en entrée : Capteurs/Donnees IQAIR/Fusion_Val-David.csv (timestamp UTC + AQI_US/AQI US).
Fichiers en sortie : Capteurs/Donnees IQAIR/Graphiques/AQI_Classification_Par_Mois_3h.png.
Étapes clés :
Conversion des timestamps en fuseau America/Toronto.
Rolling window de 3 heures pour moyenne et minimum, détection de plages consécutives.
Attribution d’une catégorie (Bon, Modéré, Médiocre, Mauvais).
Agrégation par jour et par mois, création d’un bar chart empilé avec fond saisonnier.
Particularités : Gestion dynamique des groupes (par capteur ou global), annotation du nombre de jours sur chaque segment.
13.0-Classement nb heures niveaux VD vs Quebec.py
Objectif : Exclure les capteurs problématiques, puis comparer pour chaque municipalité la répartition en pourcentage des heures par classe AQI_US et générer des rapports et graphiques par saison.
Fichiers en entrée :
CSV consolides/CSV avec AQI_US.csv.
CSV consolides/capteurs_classification_par_saison.csv.
Fichiers en sortie :
Graphiques/13.0-Classement nb heures niveaux VD vs Quebec_exclusion_capteurs.txt (liste des capteurs exclus).
Graphiques/AQI_repartition_municipalite_<saison>.png (bar chart horizontal du % d’heures par catégorie).
Étapes clés :
Filtrage des capteurs classés OK ou à surveiller.
Classification AQI_US en 4 classes selon paliers EPA.
Calcul du pourcentage d’heures par municipalité, tri par %>50.
Mise en évidence de Val-David avec encadrement.
Particularités : Génération d’un rapport texte, encadrement de Val-David, suppression des axes inutiles pour clarté.
13.1-Classement nb heures niveaux VD vs Quebec - capteurs.py
Objectif : Similarité avec 13.0, mais centré sur la moyenne PM2.5 par capteur validé, avec visualisation colorée selon seuil OMS.
Fichiers en entrée :
CSV consolides/CSV avec AQI_US.csv.
CSV consolides/capteurs_classification_par_saison.csv.
Fichiers en sortie :
Graphiques/PM25_moyenne_<saison>_OMS.png pour chaque saison.
Graphiques/exclusion_capteurs_par_saison.txt.
Étapes clés :
Filtrage des anomalies A-B et classification valide.
Calcul de la moyenne pm2.5_atm par (ID, Municipalite, Saison).
Tri des capteurs, assignation d’un rang.
Bar chart horizontal coloré avec normalization TwoSlopeNorm centré sur le seuil OMS (5 µg/m³).
Mise en gris de la ligne Val-David, liste manuelle des villes à mettre en gras.
Particularités : Utilisation de TwoSlopeNorm pour la colorimétrie, annotation du seuil OMS sur le graphique.
14. 14.0-Classement VD moyenne saison froide Quebec.py
Fonctionnalité :
Calcule, pour chaque municipalité et chaque saison, la moyenne de la concentration PM2.5 (pm2.5_atm) des capteurs validés, met en avant Val-David et génère un bar chart coloré selon l’échelle OMS.
Fichiers en entrée :
CSV consolides/CSV avec AQI_US.csv
CSV consolides/capteurs_classification_par_saison.csv
Fichiers en sortie :
Pour chaque saison (chaude ou froide) un PNG dans Graphiques/PM25_moyenne_municipalite_<saison>.png.
Étapes clés et particularités :
Filtre des anomalies A-B (anomalie_A_B == "OK").
Conversion UTC→local et attribution d’un libellé de saison (ex. saison froide 2024-2025).
Fusion avec la classification pour ne garder que les capteurs “OK” ou “à surveiller”.
Calcul de la moyenne et du nombre de capteurs uniques par municipalité.
Palette dégradée centrée sur le seuil OMS annuel (5 µg/m³) via TwoSlopeNorm.
Encadrement gris transparent de la ligne Val-David et mise en gras de certaines villes listées manuellement.
15. 15.0-Creation calendrier couleur.py
Fonctionnalité :
Génère, pour une municipalité donnée (par défaut “Val-David”), des calendriers mensuels où chaque jour est représenté par un cercle coloré selon la classe AQI et annoté smog si “Médiocre” ou pire.
Fichiers en entrée :
Synthese donnees/classification_jour_qualite_air_municipalite.csv
Fichiers en sortie :
Pour chaque saison et mois, un PNG dans Graphiques/Calendrier_AQI_classification_<Municipalite>_<Season>.png.
Étapes clés et particularités :
Lecture et filtrage sur la municipalité.
Attribution d’un libellé de saison (chaude / froide) et extraction Year, Month, Day, Classe.
Utilisation de matplotlib + patches pour dessiner un calendrier 2×3 : week-ends en gris clair, cercles AQI, cercles de fond sombre pour jours de smog.
Légende des classes + “Journée de smog” et noms de mois en français.
16. 16.0-Creation courbe evolution AQI Val-David.py
Fonctionnalité :
Trace, pour Val-David, l’évolution horaire de l’AQI_US (moyennes horaires) mois par mois, avec un fond dégradé aux couleurs EPA.
Fichiers en entrée :
CSV consolides/CSV avec AQI_US.csv
Fichiers en sortie :
Pour chaque saison et “saison_annee” (période), un PNG dans Graphiques/Qualité_de_l'air_à_Val-David_<label>.png.
Étapes clés et particularités :
Filtrage sur “Val-David” et conversion UTC→local.
Séparation en saisons froide/chaude, étiquetage “2023-2024”, etc.
Pour chaque mois, création d’une sous-figure avec :
Bandes colorées en arrière-plan selon paliers EPA (0–50, 50–100, …).
Courbe AQI_US noire épaisse.
Axe X formaté par semaines, axes et grille stylisés.
17. 17.0-Creation graphique AQI heure.py
Fonctionnalité :
Compare la répartition horaire de PM₂.₅ (pm2.5_atm) entre plusieurs municipalités (Val-David, Québec, Montréal, Saint-Sauveur, Lachute, Longueuil), pour chaque saison.
Fichiers en entrée :
CSV consolides/CSV avec AQI_US.csv
CSV consolides/capteurs_classification_par_saison.csv
Fichiers en sortie :
Pour chaque saison, un PNG dans Graphiques/Repartition_PM25_heure_<saison>.png.
Étapes clés et particularités :
Filtre anomalies A-B et capteurs valides par saison (“OK”/“à surveiller”).
Conversion UTC→local, extraction de l’heure (0–23).
Calcul d’une pivot table heure × municipalité (moyenne PM₂.₅).
Traçage : ligne épaisse en pointillés pour Val-David (couleur bleue), lignes fines pour les autres.
Légende indiquant le nombre de capteurs par municipalité.
18. 17.1-Creation graphique AQI heure – semaine vs fin de semaine.py
Fonctionnalité :
Pour Val-David uniquement, compare la moyenne horaire PM₂.₅ semaine vs week-end, saison par saison.
Fichiers en entrée :
CSV consolides/CSV avec AQI_US.csv
CSV consolides/capteurs_classification_par_saison.csv
Fichiers en sortie :
PNG nommés FinSemaine_Semaine_PM25_ValDavid_<saison>.png dans Graphiques/.
Étapes clés et particularités :
Filtre anomalies A-B, conversion UTC→local, extraction weekday (0=Lundi…6=Dimanche) et heure.
Sélection des jours de semaine (weekday<5) et week-end (weekday>=5).
Pivot table heure→moyennes PM₂.₅, calcul des nombres de capteurs distincts.
Tracé avec codes couleurs distincts (vert pour week-end, bleu pour semaine), styles de ligne différents.
19. 18.0-Creation graphique AQI jour.py
Fonctionnalité :
Trace la répartition moyenne de PM₂.₅ par jour de la semaine pour plusieurs municipalités, chaque saison.
Fichiers en entrée :
CSV consolides/CSV avec AQI_US.csv
CSV consolides/capteurs_classification_par_saison.csv
Fichiers en sortie :
Pour chaque saison, un PNG dans Graphiques/Repartition_PM25_jour_<saison>.png.
Étapes clés et particularités :
Filtre anomalies et capteurs validés.
Conversion UTC→local, extraction weekday_num (0–6) puis mappage vers noms français.
Pivot table weekday_num×municipalité → moyennes PM₂.₅.
Traçage : ligne pointillée et épaisse pour Val-David, lignes pleines pour les autres, palette harmonisée.
20. 19.0-Resume textuel VD site web.py
Fonctionnalité :
Génère, pour Val-David et chaque saison, un mini-rapport HTML listant le nombre et pourcentage de jours par catégorie AQI + un décompte “Jours de smog” (Médiocre + Mauvais).
Fichiers en entrée :
Synthese donnees/classification_jour_qualite_air_municipalite.csv
Fichiers en sortie :
Dans Synthese donnees/, un HTML resume_qualite_air_<saison>_Val-David.html par saison, plus un log d’erreurs erreur_log.txt.
Étapes clés et particularités :
Filtrage Val-David, parsing et validation des dates.
Détermination du libellé de saison.
Comptage des jours par libellé (Bon, Modéré, etc.), calcul du total et des “Jours de smog”.
Génération de blocs <div> colorés HTML avec style inline.
Gestion d’erreurs robuste avec trace dans log_erreur.
21. Execution_all_scripts.py
Fonctionnalité :
Exécute automatiquement tous les scripts .py du dossier (sauf lui-même) dans l’ordre naturel (1.0, 2.0, …), capture leur sortie, calcule durées et codes de retour, puis compile un rapport texte.
Fichiers en entrée :
Tous les scripts .py du répertoire.
Fichiers en sortie :
rapport.txt (log complet d’exécution avec date, durée, code de sortie, sortie stdout/stderr).
Étapes clés et particularités :
Tri “naturel” des noms de fichier (natural_sort_key) pour ordonner 1.0<2.0<10.0<…12.0<… etc.
Boucle subprocess.Popen pour chaque script, lecture ligne à ligne en temps réel.
Mesure du temps avec time.time(), enregistrement du résumé.
Réencodage UTF-8 de la sortie pour éviter les erreurs de caractères.