Tableau de bord exploratoire de la qualité de l'air
Que change la couverture des mesures dans l’analyse exploratoire de l’air?
À produire : Les nombres de mesures et de stations par contaminant, puis les séries PM2.5 et les journées élevées avec leur nombre d’heures valides.
Prérequis : Savoir ouvrir un projet RStudio et exécuter un script R. Savoir lire un tableau groupé et un graphique descriptif; repérer les valeurs manquantes.
Préparation enseignante
Télécharger la trousse ci-dessous. Extraire le ZIP, puis double-cliquer sur Donnees-bleues.Rproj. Avant la séance, ouvrir installer-packages.R et cliquer sur Source avec une connexion Internet.
Une fois les packages installés, les scripts utilisent les fichiers inclus et peuvent être exécutés hors ligne.
Télécharger la trousse avec les données
1 083 Ko. Préparation : 05/09/2026 à 08:46 (heure du Québec).
Les fichiers de données sont inclus dans la trousse.
Conditions de la source · Provenance et empreinte du ZIP
Fichiers inclus
-
episodes_pm25_2025.csv: 25 lignes, 13 colonnes. -
resume_contaminants_2025.csv: 11 lignes, 11 colonnes. -
resume_journalier_contaminants_2025.csv: 46 723 lignes, 13 colonnes.
Contexte
Cette activité utilise la fiche Qualité de l’air au Québec. Unité : Un résumé journalier par station et contaminant, calculé à partir de valeurs horaires de 2025.
Source : Données Québec / MELCCFP / RSQAQ. Les dates de préparation, les fichiers et les conditions de réutilisation sont indiqués dans la trousse.
Consignes
- Ouvrir
activite-longue.Rdans le sous-dossierdatasets/qualite-air-horairedu projet RStudio et cliquer sur Source. Les tableaux apparaissent dans Console et les graphiques dans Plots. - Comparer les nombres de mesures et de stations entre contaminants sans mélanger leurs valeurs.
- Examiner les séries PM2.5 et les résumés des journées élevées, avec leur nombre d’heures valides.
- Rédiger une réponse à la question en nommant l’unité observée et une limite de la source.
Limites à faire nommer
Les PM2,5-T640 sont exprimées en µg/m³. Les jours sont regroupés en HNE (UTC-5 fixe) à partir de la fin des intervalles horaires, avec au moins 18 heures valides. Ce filtre pédagogique ne constitue pas une évaluation réglementaire ou sanitaire.
Vérifier le travail
- L’unité, la période ou la portée documentaire et les variables utilisées sont nommées.
- La conclusion répond à la question et explique au moins une limite précise.
Objectifs et adaptations
Adaptations
- Débuter avec le script exécuté par la personne enseignante, puis faire interpréter une seule sortie.
- Pour approfondir, modifier une sélection ou un regroupement et justifier ce que cela change.
Statut documenté : Documentation de source et ressources de classe fournies.
Contribution pédagogique : Aurélien Nicosia. Usage en cours non documenté.
- Ajout
- Mise à jour
Code complet
Ce script complet est celui de la trousse. Il lit les fichiers locaux et affiche les résultats dans RStudio.
Afficher le script R
# Tableau de bord exploratoire de la qualité de l'air
# Ouvrir le projet RStudio de l’archive, puis exécuter ce script.
# Source : https://www.donneesquebec.ca/recherche/dataset/rsqaq-donnees-horaires-continues
# Les données de classe sont figées; ce script ne les télécharge pas.
# Load libraries
library(dplyr)
library(ggplot2)
library(readr)
# Prepare official data
# Import prepared files
air_jour <- read_csv(
"data/processed/qualite-air-horaire/resume_journalier_contaminants_2025.csv",
show_col_types = FALSE
)
resume_contaminants <- read_csv(
"data/processed/qualite-air-horaire/resume_contaminants_2025.csv",
show_col_types = FALSE
)
episodes_pm25 <- read_csv(
"data/processed/qualite-air-horaire/episodes_pm25_2025.csv",
show_col_types = FALSE
)
# Coverage by contaminant
print(resume_contaminants |>
arrange(desc(n_mesures)) |>
select(contaminant_source, unite, n_mesures, n_stations, moyenne, p95, maximum))
# PM2.5 exploratory time series
pm25 <- air_jour |>
filter(contaminant_source == "PM2.5-T640", n_heures_valides >= 18)
print(ggplot(pm25, aes(x = date, y = moyenne, group = station_id)) +
geom_line(alpha = 0.25, linewidth = 0.3) +
labs(
title = "Moyennes journalières de PM2.5 par station, 2025",
x = "Date",
y = "Concentration moyenne de PM2,5 (µg/m³)",
subtitle = "Jours en HNE; au moins 18 heures valides"
) +
theme_minimal())
# Highest daily PM2.5 summaries
print(episodes_pm25 |>
select(date, station_name, n_heures_valides, moyenne, maximum, p95) |>
slice_head(n = 10))