MISE EN SITUATION Le jeu de données Demande_Électricité.csv contient
l’historique de la demande horaire d’électricité (en Mégawattheures) au
Québec entre 2019 et 2022 1. Le jeu de données Population.csv contient
quant a lui la population totale du Québec, évaluéea chaque
trimestre entre 2019 et 2022.
setwd("~/USHERBROOKE/ESCUELA/ÉTÉ/MQG813 - Statistiques décisionnelles avancées/D1")
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.2 ✔ tibble 3.2.1
## ✔ lubridate 1.9.4 ✔ tidyr 1.3.1
## ✔ purrr 1.0.4
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(lubridate)
library(rio)
data_dem <-import("Demande_Électricité.csv")
data_pop <- import("Population.csv")
view(data_pop)
view(data_dem)
QUESTION 1 (12 points) `A partir du jeu de données Demande_Électricité.csv, on souhaite analyser le comportement de la demande quotidienne d’électricité au deuxiéme trimestre de 2019. (a) D’abord, effectuez les manipulations suivantes et présentez une capture d’écran des 10 derniéres lignes du jeu de données final.
donnees_quitidiennes<-data_dem%>%
group_by(DATE)%>%
summarise(demande_GWh=sum(DEMANDE)/1000)
donnees_quitidiennes
donnees_quitidiennes<- mutate(donnees_quitidiennes,ANNEE = year(DATE), TRIMESTRE = paste0("T", quarter(DATE)),jour_semaine = wday(DATE, label = TRUE, abbr = FALSE, week_start = 1))
view(donnees_quitidiennes)
donnees_quitidiennes %>%
distinct(ANNEE, TRIMESTRE) %>%
count(ANNEE)
donnees_quitidiennes_T2_2019<-donnees_quitidiennes %>% filter(ANNEE==2019,TRIMESTRE == "T2")
View(donnees_quitidiennes_T2_2019)
commentaire:
cet graphique presente la demande quotidienne d’electricite durant la 2eme trimestre de 2019, avec 2 courbes de tendances superposees. La courbe bleu montre de facon souple les variations. La droite de regression lineare montre la meme tendance de maniere plus rigide.La demande est plus importante au début du trimestre, puis elle diminue peu à peu avant de se maintenir à un niveau plus bas en juin (ou on reste autour di 400GWh depuis la fin mai). Ce qui peut etre lié a la transition vers des temperature plus chaudes et la diminution de lusage du chauffage. On peut aussi observer leffet saisonniere: chaque 5-6 jours d’ une demande haute, on observe 2-3 jours d’un baisse remarque de la demande(souvent en fin de semaine).
ggplot(donnees_quitidiennes_T2_2019, aes(x=DATE, y=demande_GWh)) +
geom_line() +
geom_point() +
geom_smooth(se=F) + geom_smooth(method="lm", se=F, color="orange") +
labs(x="Date",
y="Demande (GWh)",
title="Demandes Quotidiennes d’Électricité ",
subtitle= "au deuxiéme trimestre de 2019") +
theme_bw()
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
## `geom_smooth()` using formula = 'y ~ x'
n_distinct(donnees_quitidiennes_T2_2019$DATE)
## [1] 91
Présentez et commentez les graphiques séquentiels saisonniers des demandes quotidiennes d’électricité au deuxiéme trimestre de 2019. ici les saissons sont les jour de la semaine
commentaire: Le graphique coloré permet de visualiser rapidement les hausses et baisses répétées au cours des semaines.
Lautre graphique (un par jour) rend plus visibles les variations spécifiques à chaque jour.
La demande est généralement plus forte du mardi au jeudi, avec une moyenne d’environ 430 GWh le mardi, tandis qu’elle baisse le samedi et atteint son minimum le dimanche, avec une moyenne autour de 400 GWh.
Cette dynamique reflète des motifs réguliers, probablement liés aux horaires de travail et à la consommation dans les bureaux ou les services publics.
On observe également une légère baisse globale de la demande sur le trimestre.
Toutefois, il est difficile d’identifier un effet cyclique à plus long terme, car les données disponibles ne couvrent que trois mois
ggplot(donnees_quitidiennes_T2_2019, aes(x=DATE, y=demande_GWh, color= jour_semaine))+
geom_line() +
geom_point()
labs(x="Date",
y="Demande (GWh)",
title="Demandes Quotidiennes d’Électricité par jour de la semaine ",
subtitle= "au deuxiéme trimestre de 2019" ) +
theme_bw()
## NULL
Grapiques separees
ggplot(donnees_quitidiennes_T2_2019, aes(x = DATE, y = demande_GWh)) +
geom_line() +
facet_wrap(~ jour_semaine, ncol = 2) +
labs(
x = "Date",
y = "Demande (GWh)",
title = "Demandes quotidiennes d’électricité par jour de la semaine",
subtitle = "T2 2019"
) +
theme_bw()
Boite a moustache commentaire: autre visuel aussi mieux lisible que le premier. Les jours ouvrables (comme le mardi, mercredi et jeudi) présentent des médianes autour de 420 à 430 GWh.
Ces jours montrent aussi une plus grande dispersion, c’est-à-dire que les valeurs de la demande varient davantage entre les jours : il y a plus d’écart entre les plus faibles et les plus fortes demandes, ce qui est visible par des boîtes et des “moustaches” plus longues. À l’inverse, les week-ends (surtout le dimanche) ont des médianes plus basses (environ 400 GWh) et une dispersion plus faible, ce qui signifie que la demande reste plus stable, avec peu de variation d’un dimanche à l’autre.
Cela reflète probablement une consommation plus régulière les fins de semaine, en lien avec la baisse d’activité dans les secteurs résidentiel, commercial ou industriel..
ggplot(donnees_quitidiennes_T2_2019, aes(x=jour_semaine, y=demande_GWh))+ geom_boxplot(fill="lightblue")+
labs(x="Date",
y="Demande (GWh)",
title="Demandes Quotidiennes d’Électricité par jour de la semaine ",
subtitle= "au deuxiéme trimestre de 2019")
theme_bw()
## List of 136
## $ line :List of 6
## ..$ colour : chr "black"
## ..$ linewidth : num 0.5
## ..$ linetype : num 1
## ..$ lineend : chr "butt"
## ..$ arrow : logi FALSE
## ..$ inherit.blank: logi TRUE
## ..- attr(*, "class")= chr [1:2] "element_line" "element"
## $ rect :List of 5
## ..$ fill : chr "white"
## ..$ colour : chr "black"
## ..$ linewidth : num 0.5
## ..$ linetype : num 1
## ..$ inherit.blank: logi TRUE
## ..- attr(*, "class")= chr [1:2] "element_rect" "element"
## $ text :List of 11
## ..$ family : chr ""
## ..$ face : chr "plain"
## ..$ colour : chr "black"
## ..$ size : num 11
## ..$ hjust : num 0.5
## ..$ vjust : num 0.5
## ..$ angle : num 0
## ..$ lineheight : num 0.9
## ..$ margin : 'margin' num [1:4] 0points 0points 0points 0points
## .. ..- attr(*, "unit")= int 8
## ..$ debug : logi FALSE
## ..$ inherit.blank: logi TRUE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## $ title : NULL
## $ aspect.ratio : NULL
## $ axis.title : NULL
## $ axis.title.x :List of 11
## ..$ family : NULL
## ..$ face : NULL
## ..$ colour : NULL
## ..$ size : NULL
## ..$ hjust : NULL
## ..$ vjust : num 1
## ..$ angle : NULL
## ..$ lineheight : NULL
## ..$ margin : 'margin' num [1:4] 2.75points 0points 0points 0points
## .. ..- attr(*, "unit")= int 8
## ..$ debug : NULL
## ..$ inherit.blank: logi TRUE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## $ axis.title.x.top :List of 11
## ..$ family : NULL
## ..$ face : NULL
## ..$ colour : NULL
## ..$ size : NULL
## ..$ hjust : NULL
## ..$ vjust : num 0
## ..$ angle : NULL
## ..$ lineheight : NULL
## ..$ margin : 'margin' num [1:4] 0points 0points 2.75points 0points
## .. ..- attr(*, "unit")= int 8
## ..$ debug : NULL
## ..$ inherit.blank: logi TRUE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## $ axis.title.x.bottom : NULL
## $ axis.title.y :List of 11
## ..$ family : NULL
## ..$ face : NULL
## ..$ colour : NULL
## ..$ size : NULL
## ..$ hjust : NULL
## ..$ vjust : num 1
## ..$ angle : num 90
## ..$ lineheight : NULL
## ..$ margin : 'margin' num [1:4] 0points 2.75points 0points 0points
## .. ..- attr(*, "unit")= int 8
## ..$ debug : NULL
## ..$ inherit.blank: logi TRUE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## $ axis.title.y.left : NULL
## $ axis.title.y.right :List of 11
## ..$ family : NULL
## ..$ face : NULL
## ..$ colour : NULL
## ..$ size : NULL
## ..$ hjust : NULL
## ..$ vjust : num 1
## ..$ angle : num -90
## ..$ lineheight : NULL
## ..$ margin : 'margin' num [1:4] 0points 0points 0points 2.75points
## .. ..- attr(*, "unit")= int 8
## ..$ debug : NULL
## ..$ inherit.blank: logi TRUE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## $ axis.text :List of 11
## ..$ family : NULL
## ..$ face : NULL
## ..$ colour : chr "grey30"
## ..$ size : 'rel' num 0.8
## ..$ hjust : NULL
## ..$ vjust : NULL
## ..$ angle : NULL
## ..$ lineheight : NULL
## ..$ margin : NULL
## ..$ debug : NULL
## ..$ inherit.blank: logi TRUE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## $ axis.text.x :List of 11
## ..$ family : NULL
## ..$ face : NULL
## ..$ colour : NULL
## ..$ size : NULL
## ..$ hjust : NULL
## ..$ vjust : num 1
## ..$ angle : NULL
## ..$ lineheight : NULL
## ..$ margin : 'margin' num [1:4] 2.2points 0points 0points 0points
## .. ..- attr(*, "unit")= int 8
## ..$ debug : NULL
## ..$ inherit.blank: logi TRUE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## $ axis.text.x.top :List of 11
## ..$ family : NULL
## ..$ face : NULL
## ..$ colour : NULL
## ..$ size : NULL
## ..$ hjust : NULL
## ..$ vjust : num 0
## ..$ angle : NULL
## ..$ lineheight : NULL
## ..$ margin : 'margin' num [1:4] 0points 0points 2.2points 0points
## .. ..- attr(*, "unit")= int 8
## ..$ debug : NULL
## ..$ inherit.blank: logi TRUE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## $ axis.text.x.bottom : NULL
## $ axis.text.y :List of 11
## ..$ family : NULL
## ..$ face : NULL
## ..$ colour : NULL
## ..$ size : NULL
## ..$ hjust : num 1
## ..$ vjust : NULL
## ..$ angle : NULL
## ..$ lineheight : NULL
## ..$ margin : 'margin' num [1:4] 0points 2.2points 0points 0points
## .. ..- attr(*, "unit")= int 8
## ..$ debug : NULL
## ..$ inherit.blank: logi TRUE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## $ axis.text.y.left : NULL
## $ axis.text.y.right :List of 11
## ..$ family : NULL
## ..$ face : NULL
## ..$ colour : NULL
## ..$ size : NULL
## ..$ hjust : num 0
## ..$ vjust : NULL
## ..$ angle : NULL
## ..$ lineheight : NULL
## ..$ margin : 'margin' num [1:4] 0points 0points 0points 2.2points
## .. ..- attr(*, "unit")= int 8
## ..$ debug : NULL
## ..$ inherit.blank: logi TRUE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## $ axis.text.theta : NULL
## $ axis.text.r :List of 11
## ..$ family : NULL
## ..$ face : NULL
## ..$ colour : NULL
## ..$ size : NULL
## ..$ hjust : num 0.5
## ..$ vjust : NULL
## ..$ angle : NULL
## ..$ lineheight : NULL
## ..$ margin : 'margin' num [1:4] 0points 2.2points 0points 2.2points
## .. ..- attr(*, "unit")= int 8
## ..$ debug : NULL
## ..$ inherit.blank: logi TRUE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## $ axis.ticks :List of 6
## ..$ colour : chr "grey20"
## ..$ linewidth : NULL
## ..$ linetype : NULL
## ..$ lineend : NULL
## ..$ arrow : logi FALSE
## ..$ inherit.blank: logi TRUE
## ..- attr(*, "class")= chr [1:2] "element_line" "element"
## $ axis.ticks.x : NULL
## $ axis.ticks.x.top : NULL
## $ axis.ticks.x.bottom : NULL
## $ axis.ticks.y : NULL
## $ axis.ticks.y.left : NULL
## $ axis.ticks.y.right : NULL
## $ axis.ticks.theta : NULL
## $ axis.ticks.r : NULL
## $ axis.minor.ticks.x.top : NULL
## $ axis.minor.ticks.x.bottom : NULL
## $ axis.minor.ticks.y.left : NULL
## $ axis.minor.ticks.y.right : NULL
## $ axis.minor.ticks.theta : NULL
## $ axis.minor.ticks.r : NULL
## $ axis.ticks.length : 'simpleUnit' num 2.75points
## ..- attr(*, "unit")= int 8
## $ axis.ticks.length.x : NULL
## $ axis.ticks.length.x.top : NULL
## $ axis.ticks.length.x.bottom : NULL
## $ axis.ticks.length.y : NULL
## $ axis.ticks.length.y.left : NULL
## $ axis.ticks.length.y.right : NULL
## $ axis.ticks.length.theta : NULL
## $ axis.ticks.length.r : NULL
## $ axis.minor.ticks.length : 'rel' num 0.75
## $ axis.minor.ticks.length.x : NULL
## $ axis.minor.ticks.length.x.top : NULL
## $ axis.minor.ticks.length.x.bottom: NULL
## $ axis.minor.ticks.length.y : NULL
## $ axis.minor.ticks.length.y.left : NULL
## $ axis.minor.ticks.length.y.right : NULL
## $ axis.minor.ticks.length.theta : NULL
## $ axis.minor.ticks.length.r : NULL
## $ axis.line : list()
## ..- attr(*, "class")= chr [1:2] "element_blank" "element"
## $ axis.line.x : NULL
## $ axis.line.x.top : NULL
## $ axis.line.x.bottom : NULL
## $ axis.line.y : NULL
## $ axis.line.y.left : NULL
## $ axis.line.y.right : NULL
## $ axis.line.theta : NULL
## $ axis.line.r : NULL
## $ legend.background :List of 5
## ..$ fill : NULL
## ..$ colour : logi NA
## ..$ linewidth : NULL
## ..$ linetype : NULL
## ..$ inherit.blank: logi TRUE
## ..- attr(*, "class")= chr [1:2] "element_rect" "element"
## $ legend.margin : 'margin' num [1:4] 5.5points 5.5points 5.5points 5.5points
## ..- attr(*, "unit")= int 8
## $ legend.spacing : 'simpleUnit' num 11points
## ..- attr(*, "unit")= int 8
## $ legend.spacing.x : NULL
## $ legend.spacing.y : NULL
## $ legend.key : NULL
## $ legend.key.size : 'simpleUnit' num 1.2lines
## ..- attr(*, "unit")= int 3
## $ legend.key.height : NULL
## $ legend.key.width : NULL
## $ legend.key.spacing : 'simpleUnit' num 5.5points
## ..- attr(*, "unit")= int 8
## $ legend.key.spacing.x : NULL
## $ legend.key.spacing.y : NULL
## $ legend.frame : NULL
## $ legend.ticks : NULL
## $ legend.ticks.length : 'rel' num 0.2
## $ legend.axis.line : NULL
## $ legend.text :List of 11
## ..$ family : NULL
## ..$ face : NULL
## ..$ colour : NULL
## ..$ size : 'rel' num 0.8
## ..$ hjust : NULL
## ..$ vjust : NULL
## ..$ angle : NULL
## ..$ lineheight : NULL
## ..$ margin : NULL
## ..$ debug : NULL
## ..$ inherit.blank: logi TRUE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## $ legend.text.position : NULL
## $ legend.title :List of 11
## ..$ family : NULL
## ..$ face : NULL
## ..$ colour : NULL
## ..$ size : NULL
## ..$ hjust : num 0
## ..$ vjust : NULL
## ..$ angle : NULL
## ..$ lineheight : NULL
## ..$ margin : NULL
## ..$ debug : NULL
## ..$ inherit.blank: logi TRUE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## $ legend.title.position : NULL
## $ legend.position : chr "right"
## $ legend.position.inside : NULL
## $ legend.direction : NULL
## $ legend.byrow : NULL
## $ legend.justification : chr "center"
## $ legend.justification.top : NULL
## $ legend.justification.bottom : NULL
## $ legend.justification.left : NULL
## $ legend.justification.right : NULL
## $ legend.justification.inside : NULL
## $ legend.location : NULL
## $ legend.box : NULL
## $ legend.box.just : NULL
## $ legend.box.margin : 'margin' num [1:4] 0cm 0cm 0cm 0cm
## ..- attr(*, "unit")= int 1
## $ legend.box.background : list()
## ..- attr(*, "class")= chr [1:2] "element_blank" "element"
## $ legend.box.spacing : 'simpleUnit' num 11points
## ..- attr(*, "unit")= int 8
## [list output truncated]
## - attr(*, "class")= chr [1:2] "theme" "gg"
## - attr(*, "complete")= logi TRUE
## - attr(*, "validate")= logi TRUE
Q2
Afin de présenter des résultats plus précis, on souhaite analyser
l’évolution de la demande d’électricité par habitant. En repartant des
jeux de données originaux nomm´es Demande_Électricité.csv (sans le
filtre appliqué
a la question 1) et Population.csv, effectuez les manipulations suivantes et présentez une capture d’´ecran des 10 premieres
lignes du jeu de données final.
dem <-import("Demande_Électricité.csv")
pop <- import("Population.csv")
view(pop)
view(dem)
dem<- dem %>%
mutate(dem,ANNEE = year(DATE), TRIMESTRE = paste0("Q", quarter(DATE))
)
view(dem)
donnees_Trim<-dem %>%
group_by(ANNEE,TRIMESTRE)%>%
summarise(demande_MWh=sum(DEMANDE))
## `summarise()` has grouped output by 'ANNEE'. You can override using the
## `.groups` argument.
view(donnees_Trim)
donnees_Trim<-donnees_Trim %>%
mutate (PERIODE=str_c(ANNEE,TRIMESTRE, sep = "-"))
donnees_Trim
pop<-pop %>%
mutate (PERIODE=str_c(ANNEE,TRIMESTRE, sep="-"))
pop
pop_clean<- pop[,-c(1,2)]
pop_clean
dem_pop <- left_join(donnees_Trim,pop_clean, by="PERIODE")
print(dem_pop)
## # A tibble: 16 × 5
## # Groups: ANNEE [4]
## ANNEE TRIMESTRE demande_MWh PERIODE POPULATION
## <dbl> <chr> <dbl> <chr> <int>
## 1 2019 Q1 60465918. 2019-Q1 8430363
## 2 2019 Q2 40284742. 2019-Q2 8447632
## 3 2019 Q3 37072268. 2019-Q3 8483186
## 4 2019 Q4 50394340. 2019-Q4 8521542
## 5 2020 Q1 57927860. 2020-Q1 8537376
## 6 2020 Q2 39663615. 2020-Q2 8550900
## 7 2020 Q3 37609018. 2020-Q3 8551095
## 8 2020 Q4 49156015. 2020-Q4 8551865
## 9 2021 Q1 58213472. 2021-Q1 8550561
## 10 2021 Q2 40289445. 2021-Q2 8556015
## 11 2021 Q3 38959681. 2021-Q3 8572020
## 12 2021 Q4 50019551. 2021-Q4 8603553
## 13 2022 Q1 63605145. 2022-Q1 8613999
## 14 2022 Q2 41565992. 2022-Q2 8627524
## 15 2022 Q3 39356762. 2022-Q3 8672185
## 16 2022 Q4 49770676. 2022-Q4 8730868
Petite rappelle dem_pop <- dem_pop %>% left_join(donnees_Trim, pop_clean, by = “PERIODE”) incorrecte
left_join(dem_pop, donnees_Trim, pop_clean, by = “PERIODE”) # ❌ Error de demasiados argumentos
dem_pop <- dem_pop %>%
mutate(demandemoy_kWh_pp = (demande_MWh * 1000) / POPULATION)
dem_pop
dem_pop<-dem_pop %>%
mutate(
surdemande= if_else(demandemoy_kWh_pp> 6000,"oui","non")
)
dem_pop
dem_pop1<-dem_pop %>%
rename(DEMANDE_MOYENNE= demandemoy_kWh_pp)
resultat_final<-dem_pop1%>%
arrange(desc(DEMANDE_MOYENNE))
resultat_final
resultat_final[1:10, c(4:6)]