dir.create("data", showWarnings = FALSE)
download.file(
paste0(
"https://aureliennicosiaulaval.github.io/",
"eiom-2026-modelisation/data/",
"requetes_311_montreal_2024_eiom.csv"
),
"data/requetes_311_montreal_2024_eiom.csv",
mode = "wb"
)Préparer votre poste
À faire avant la première matinée
Logiciels
Installez une version récente de R, RStudio Desktop et Quarto. Le matériel a été validé avec R 4.5.0 et Quarto 1.9.38.
Obtenir le matériel
La solution recommandée consiste à télécharger tout le projet avant la première matinée:
- téléchargez l’archive ZIP du projet;
- décompressez l’archive dans un dossier où vous avez le droit d’écrire;
- ouvrez le dossier
eiom-2026-modelisation-maindans RStudio; - vérifiez avec
getwd()que le dossier courant contient_quarto.yml,scriptsetdata.
Si vous possédez déjà le projet, mais pas le fichier du jour 3, exécutez ce bloc depuis sa racine:
Le fichier téléchargé doit contenir 18 000 lignes et 15 colonnes. Il s’agit d’un extrait pédagogique préparé à partir des données ouvertes 311 de Montréal.
Installer les paquets
Exécutez ensuite le script suivant depuis la racine du projet.
source("scripts/installer_paquets.R")Le script installe uniquement les paquets manquants.
Tester l’environnement
# Load libraries
library(tidyverse)
library(tidymodels)
library(AmesHousing)
library(titanic)
library(rpart)
# Load the Day 1 data set
ames <- make_ames()
stopifnot(identical(
levels(ames$Overall_Qual),
c(
"Very_Poor", "Poor", "Fair", "Below_Average", "Average",
"Above_Average", "Good", "Very_Good", "Excellent",
"Very_Excellent"
)
))
# Check the first observations and dimensions
glimpse(ames)Rows: 2,930
Columns: 81
$ MS_SubClass <fct> One_Story_1946_and_Newer_All_Styles, One_Story_1946…
$ MS_Zoning <fct> Residential_Low_Density, Residential_High_Density, …
$ Lot_Frontage <dbl> 141, 80, 81, 93, 74, 78, 41, 43, 39, 60, 75, 0, 63,…
$ Lot_Area <int> 31770, 11622, 14267, 11160, 13830, 9978, 4920, 5005…
$ Street <fct> Pave, Pave, Pave, Pave, Pave, Pave, Pave, Pave, Pav…
$ Alley <fct> No_Alley_Access, No_Alley_Access, No_Alley_Access, …
$ Lot_Shape <fct> Slightly_Irregular, Regular, Slightly_Irregular, Re…
$ Land_Contour <fct> Lvl, Lvl, Lvl, Lvl, Lvl, Lvl, Lvl, HLS, Lvl, Lvl, L…
$ Utilities <fct> AllPub, AllPub, AllPub, AllPub, AllPub, AllPub, All…
$ Lot_Config <fct> Corner, Inside, Corner, Corner, Inside, Inside, Ins…
$ Land_Slope <fct> Gtl, Gtl, Gtl, Gtl, Gtl, Gtl, Gtl, Gtl, Gtl, Gtl, G…
$ Neighborhood <fct> North_Ames, North_Ames, North_Ames, North_Ames, Gil…
$ Condition_1 <fct> Norm, Feedr, Norm, Norm, Norm, Norm, Norm, Norm, No…
$ Condition_2 <fct> Norm, Norm, Norm, Norm, Norm, Norm, Norm, Norm, Nor…
$ Bldg_Type <fct> OneFam, OneFam, OneFam, OneFam, OneFam, OneFam, Twn…
$ House_Style <fct> One_Story, One_Story, One_Story, One_Story, Two_Sto…
$ Overall_Qual <fct> Above_Average, Average, Above_Average, Good, Averag…
$ Overall_Cond <fct> Average, Above_Average, Above_Average, Average, Ave…
$ Year_Built <int> 1960, 1961, 1958, 1968, 1997, 1998, 2001, 1992, 199…
$ Year_Remod_Add <int> 1960, 1961, 1958, 1968, 1998, 1998, 2001, 1992, 199…
$ Roof_Style <fct> Hip, Gable, Hip, Hip, Gable, Gable, Gable, Gable, G…
$ Roof_Matl <fct> CompShg, CompShg, CompShg, CompShg, CompShg, CompSh…
$ Exterior_1st <fct> BrkFace, VinylSd, Wd Sdng, BrkFace, VinylSd, VinylS…
$ Exterior_2nd <fct> Plywood, VinylSd, Wd Sdng, BrkFace, VinylSd, VinylS…
$ Mas_Vnr_Type <fct> Stone, None, BrkFace, None, None, BrkFace, None, No…
$ Mas_Vnr_Area <dbl> 112, 0, 108, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6…
$ Exter_Qual <fct> Typical, Typical, Typical, Good, Typical, Typical, …
$ Exter_Cond <fct> Typical, Typical, Typical, Typical, Typical, Typica…
$ Foundation <fct> CBlock, CBlock, CBlock, CBlock, PConc, PConc, PConc…
$ Bsmt_Qual <fct> Typical, Typical, Typical, Typical, Good, Typical, …
$ Bsmt_Cond <fct> Good, Typical, Typical, Typical, Typical, Typical, …
$ Bsmt_Exposure <fct> Gd, No, No, No, No, No, Mn, No, No, No, No, No, No,…
$ BsmtFin_Type_1 <fct> BLQ, Rec, ALQ, ALQ, GLQ, GLQ, GLQ, ALQ, GLQ, Unf, U…
$ BsmtFin_SF_1 <dbl> 2, 6, 1, 1, 3, 3, 3, 1, 3, 7, 7, 1, 7, 3, 3, 1, 3, …
$ BsmtFin_Type_2 <fct> Unf, LwQ, Unf, Unf, Unf, Unf, Unf, Unf, Unf, Unf, U…
$ BsmtFin_SF_2 <dbl> 0, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1120, 0…
$ Bsmt_Unf_SF <dbl> 441, 270, 406, 1045, 137, 324, 722, 1017, 415, 994,…
$ Total_Bsmt_SF <dbl> 1080, 882, 1329, 2110, 928, 926, 1338, 1280, 1595, …
$ Heating <fct> GasA, GasA, GasA, GasA, GasA, GasA, GasA, GasA, Gas…
$ Heating_QC <fct> Fair, Typical, Typical, Excellent, Good, Excellent,…
$ Central_Air <fct> Y, Y, Y, Y, Y, Y, Y, Y, Y, Y, Y, Y, Y, Y, Y, Y, Y, …
$ Electrical <fct> SBrkr, SBrkr, SBrkr, SBrkr, SBrkr, SBrkr, SBrkr, SB…
$ First_Flr_SF <int> 1656, 896, 1329, 2110, 928, 926, 1338, 1280, 1616, …
$ Second_Flr_SF <int> 0, 0, 0, 0, 701, 678, 0, 0, 0, 776, 892, 0, 676, 0,…
$ Low_Qual_Fin_SF <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
$ Gr_Liv_Area <int> 1656, 896, 1329, 2110, 1629, 1604, 1338, 1280, 1616…
$ Bsmt_Full_Bath <dbl> 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, …
$ Bsmt_Half_Bath <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
$ Full_Bath <int> 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 3, 2, …
$ Half_Bath <int> 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, …
$ Bedroom_AbvGr <int> 3, 2, 3, 3, 3, 3, 2, 2, 2, 3, 3, 3, 3, 2, 1, 4, 4, …
$ Kitchen_AbvGr <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
$ Kitchen_Qual <fct> Typical, Typical, Good, Excellent, Typical, Good, G…
$ TotRms_AbvGrd <int> 7, 5, 6, 8, 6, 7, 6, 5, 5, 7, 7, 6, 7, 5, 4, 12, 8,…
$ Functional <fct> Typ, Typ, Typ, Typ, Typ, Typ, Typ, Typ, Typ, Typ, T…
$ Fireplaces <int> 2, 0, 0, 2, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, …
$ Fireplace_Qu <fct> Good, No_Fireplace, No_Fireplace, Typical, Typical,…
$ Garage_Type <fct> Attchd, Attchd, Attchd, Attchd, Attchd, Attchd, Att…
$ Garage_Finish <fct> Fin, Unf, Unf, Fin, Fin, Fin, Fin, RFn, RFn, Fin, F…
$ Garage_Cars <dbl> 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, …
$ Garage_Area <dbl> 528, 730, 312, 522, 482, 470, 582, 506, 608, 442, 4…
$ Garage_Qual <fct> Typical, Typical, Typical, Typical, Typical, Typica…
$ Garage_Cond <fct> Typical, Typical, Typical, Typical, Typical, Typica…
$ Paved_Drive <fct> Partial_Pavement, Paved, Paved, Paved, Paved, Paved…
$ Wood_Deck_SF <int> 210, 140, 393, 0, 212, 360, 0, 0, 237, 140, 157, 48…
$ Open_Porch_SF <int> 62, 0, 36, 0, 34, 36, 0, 82, 152, 60, 84, 21, 75, 0…
$ Enclosed_Porch <int> 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
$ Three_season_porch <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
$ Screen_Porch <int> 0, 120, 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, 0, 0, 140, …
$ Pool_Area <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
$ Pool_QC <fct> No_Pool, No_Pool, No_Pool, No_Pool, No_Pool, No_Poo…
$ Fence <fct> No_Fence, Minimum_Privacy, No_Fence, No_Fence, Mini…
$ Misc_Feature <fct> None, None, Gar2, None, None, None, None, None, Non…
$ Misc_Val <int> 0, 0, 12500, 0, 0, 0, 0, 0, 0, 0, 0, 500, 0, 0, 0, …
$ Mo_Sold <int> 5, 6, 6, 4, 3, 6, 4, 1, 3, 6, 4, 3, 5, 2, 6, 6, 6, …
$ Year_Sold <int> 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 201…
$ Sale_Type <fct> WD , WD , WD , WD , WD , WD , WD , WD , WD , WD , W…
$ Sale_Condition <fct> Normal, Normal, Normal, Normal, Normal, Normal, Nor…
$ Sale_Price <int> 215000, 105000, 172000, 244000, 189900, 195500, 213…
$ Longitude <dbl> -93.61975, -93.61976, -93.61939, -93.61732, -93.638…
$ Latitude <dbl> 42.05403, 42.05301, 42.05266, 42.05125, 42.06090, 4…
dim(ames)[1] 2930 81
# Load the Day 2 data set
data("titanic_train")
dim(titanic_train)[1] 891 12
# Load the Day 3 data set
requetes_311 <- read_csv(
"data/requetes_311_montreal_2024_eiom.csv",
show_col_types = FALSE
)
dim(requetes_311)[1] 18000 15
Vous devriez obtenir 2 930 lignes et 81 colonnes pour Ames, 891 lignes et 12 colonnes pour titanic_train, puis 18 000 lignes et 15 colonnes pour les demandes 311. Les 342 valeurs égales à 1 dans Survived correspondent aux passagers enregistrés comme ayant survécu dans l’échantillon Titanic (P. Hendricks, 2015).
Test de modélisation
# Prepare the variables shared by the Day 1 material
ames_modele <- ames |>
transmute(
sale_price = Sale_Price,
gr_liv_area = Gr_Liv_Area,
overall_qual = as.integer(Overall_Qual),
year_built = Year_Built,
garage_cars = Garage_Cars
)
# Fit a reproducible linear model
modele_test <- lm(
sale_price ~ gr_liv_area + overall_qual + year_built + garage_cars,
data = ames_modele
)
summary(modele_test)
Call:
lm(formula = sale_price ~ gr_liv_area + overall_qual + year_built +
garage_cars, data = ames_modele)
Residuals:
Min 1Q Median 3Q Max
-368847 -22613 -2004 18428 292647
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -8.201e+05 6.006e+04 -13.66 <2e-16 ***
gr_liv_area 5.727e+01 1.817e+00 31.53 <2e-16 ***
overall_qual 2.396e+04 7.767e+02 30.85 <2e-16 ***
year_built 3.769e+02 3.157e+01 11.94 <2e-16 ***
garage_cars 1.472e+04 1.275e+03 11.55 <2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 38760 on 2925 degrees of freedom
Multiple R-squared: 0.7649, Adjusted R-squared: 0.7646
F-statistic: 2379 on 4 and 2925 DF, p-value: < 2.2e-16
Si ce bloc s’exécute sans erreur, votre poste est prêt.
Rappels utiles
Les tutoriels donnent du code complet et exécutable. Les pratiques proposent des blocs à compléter. Travaillez dans un nouveau script R ou une copie locale du document afin de conserver vos essais.
En cas de problème
- Vérifiez que le dossier courant est la racine du projet.
- Relancez
source("scripts/installer_paquets.R"). - Redémarrez la session R.
- Exécutez
quarto checkdans le terminal. - Gardez une copie de l’erreur complète pour le soutien en classe.