Passer d’une exploration visuelle à une analyse reproductible : comprendre les données, choisir un groupe, comparer les graphiques et expliquer ce que les résultats permettent de dire.
Ce tutoriel s’adresse à une première exploration avec R et ggplot2. Les quatre bibliothèques peuvent être installées une première fois avec install.packages(c("readr", "dplyr", "ggplot2", "scales")).
Une ligne décrit une unité d’évaluation à un logement dans la ville de Québec. Le fichier contient 600 unités tirées sans remise parmi 99 072 unités admissibles, selon les critères de la méthode.
La valeur foncière est une évaluation administrative, sans prix de vente observé. L’aire d’étages est brute; elle peut inclure un garage intégré. Le rôle est entré en vigueur en 2025, avec une référence au marché le 1er juillet 2023. Le fichier a été extrait en 2026.
# Charger explicitement les bibliothèques.library(readr)library(dplyr)library(ggplot2)library(scales)# Dans le dépôt, utiliser le CSV figé; ailleurs, utiliser le fichier# téléchargé ou récupérer cette même version publique.fichier <-"maisons-quebec.csv"if (file.exists("assets/data/maisons-quebec.csv")) { fichier <-"assets/data/maisons-quebec.csv"} elseif (file.exists("../assets/data/maisons-quebec.csv")) { fichier <-"../assets/data/maisons-quebec.csv"}if (!file.exists(fichier)) {download.file("https://donneesbleues.ca/assets/data/maisons-quebec.csv", fichier, mode ="wb")}maisons <-read_csv(fichier, show_col_types =FALSE, col_types =cols(maison_id =col_character(),arrondissement_code =col_character(),voisinage_code =col_character(),lien_physique_code =col_character(),genre_construction_code =col_character()))stopifnot(nrow(maisons) ==600L, ncol(maisons) ==19L,!anyDuplicated(maisons$maison_id),all(maisons$annee_role ==2025),all(maisons$date_reference_marche ==as.Date("2023-07-01")))maisons |>summarise(nombre =n(),valeurs_manquantes =sum(is.na(pick(everything()))),valeur_mediane_cad =median(valeur_fonciere_cad),aire_mediane_m2 =median(aire_etages_m2) )
# A tibble: 1 × 4
nombre valeurs_manquantes valeur_mediane_cad aire_mediane_m2
<int> <int> <dbl> <dbl>
1 600 0 366000 108.
Les 19 variables sont complètes dans ce tirage. Cela ne signifie pas que tous les champs du fichier administratif initial sont complets. Le dictionnaire définit chaque variable.
Avant de tracer un graphique, identifier l’unité statistique, la population couverte et les dates. Quel énoncé serait incorrect si l’on remplaçait « valeur évaluée » par « prix de vente » ?
2. Choisir un groupe et conserver son effectif
Dans l’application, sélectionner les maisons détachées et jumelées, puis les années 1950 à 2000. Voici les mêmes choix dans R :
Le groupe retenu contient 403 maisons. Les bornes sont incluses. Aucun seuil de valeur ou de superficie n’est ajouté et aucune valeur extrême n’est retirée.
Comparer les médianes sans regarder les effectifs peut masquer des groupes très différents. Le filtre définit la question descriptive; il ne fournit pas un effet causal du type de maison.
3. Comparer deux échelles
# Conserver les observations utilisables pour les deux échelles.donnees_graphique <- maisons_filtrees |>filter(if_all(c(aire_etages_m2, valeur_fonciere_cad),~is.finite(.x) & .x >0))nrow(maisons_filtrees) -nrow(donnees_graphique)
Sur les axes logarithmiques, des rapports égaux occupent des distances égales. Les deux graphiques portent ici sur les mêmes observations et conservent les mêmes unités sur les étiquettes. L’échelle change leur représentation.
L’aire est une caractéristique parmi d’autres. Même si les valeurs évaluées augmentent avec l’aire sur un graphique, ce constat ne mesure pas l’effet d’agrandir une maison.
Les points affichent toutes les observations utilisables. L’option outlier.shape = NA évite de dessiner certains points deux fois; elle ne retire aucune maison du calcul. Dans l’application, les boîtes sont calculées dans l’échelle choisie.
L’onglet « Code R » de l’application fournit un script autonome qui reprend les filtres, les variables, le type de graphique et l’échelle. L’exécuter dans un dossier contenant le CSV, puis comparer les effectifs et la figure. Le script écrit aussi le CSV filtré et le PNG.
Pour enregistrer les résultats du présent tutoriel :
Refaire les résumés pour toutes les années. Indiquer le nouvel effectif avant d’interpréter les médianes.
Dans l’application, comparer un histogramme avec 10, 30 puis 60 classes. Garder les mêmes filtres et la même échelle. Quelles caractéristiques sont stables ?
Passer à l’échelle logarithmique. Les classes sont alors équidistantes après transformation; elles n’ont plus une largeur constante en CAD.
Rédiger trois phrases : un constat observable, une limite du fichier et une conclusion que ces données ne permettent pas d’établir.
Les deux groupes totalisent 557 maisons. Un changement de médiane après filtrage décrit un changement de composition; il ne démontre pas une évolution du marché dans le temps.
Données et texte : CC BY 4.0. Code original : MIT. Les adresses et matricules ont été omis; cette omission ne garantit pas l’anonymat. Le tutoriel a été exécuté techniquement; son utilisation en classe n’est pas documentée.