Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • main
1 result

Target

Select target project
  • dreal-pdl/csd/ortm_rsvero
1 result
Select Git revision
  • main
1 result
Show changes
Commits on Source (4)
Showing
with 16323 additions and 246 deletions
immatriculations_vehicules.html
publications/rsvero/2024_03/export_tableur/neuf.xlsx
publications/rsvero/2024_03/export_tableur/occasion.xlsx
publications/rsvero/2024_03/footer.html
publications/rsvero/2024_03/header.html
publications/rsvero/2024_03/ortm_rsvero_2024_03.html
publications/rsvero/2024_03/images
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Certains couples catégories de véhicules / modalités (énergie, département, ...) n'ont encore jamais été observés depuis janvier 2016, ce qui a conduit à personnaliser le code des graphiques de ces catégories de véhicules.
Certains couples types de véhicules / modalités (énergie, département, ...) n'ont encore jamais été observés depuis janvier 2016, ce qui a conduit à personnaliser le code des graphiques de ces catégories de véhicules.
À vérifier chaque mois
......@@ -19,16 +19,15 @@ Certains couples catégories de véhicules / modalités (énergie, département,
## Motocyclette : pas d'hybride rechargeable
## Camping-car : pas d'hybride rechargeable
## Autobus et autocar : pas d'hybride rechargeable
## Camion : pas d'électrique
## Tracteur routier : pas d'électrique et d'hybride rechargeable
## Tracteur routier : pas d'hybride rechargeable
## Tracteur agricole : pas d'hybride rechargeable
Reste à faire :
- tableau qui donne le rapport de la part de l’électrique
À faire :
- ....
......
This diff is collapsed.
This diff is collapsed.
# Détermination du chemin du fichier le plus récent
co2_file <- paste0("X:/SCTE/CSD/DONNEES_CONFIDENTIELLES/_niveau_2/Conjoncture/rsvero/",
max(list.files("X:/SCTE/CSD/DONNEES_CONFIDENTIELLES/_niveau_2/Conjoncture/rsvero",
include.dirs = FALSE, full.names = FALSE,
pattern = "co2_dreal_COR2")))
# Ouverture des données régionales
co2_reg <- read_excel(co2_file, sheet = 1, skip = 3) %>%
rename(zone = ...1) %>%
filter(zone %in% c("52 - PAYS DE LA LOIRE", "France"))
# filter(zone %in% c("52 - PAYS DE LA\r\nLOIRE", "France"))
# Recodage d'une modalité et changement de l'ordre
co2_reg$zone <- fct_recode(co2_reg$zone, "Pays de la Loire" = "52 - PAYS DE LA LOIRE")
co2_reg$zone <- factor(co2_reg$zone,levels=c("Pays de la Loire", "France"))
# Création d'un vecteur qui détermine le nombre de colonnes du df
# NB : le fichier comprend une colonne supplémentaire chaque mois
nb_colonnes_co2 <- as.numeric(ncol(co2_reg))
# Ouverture des données départementales
co2_dep <- read_excel(co2_file, sheet = 3, skip = 3) %>%
rename(zone = ...1) %>%
filter(zone %in% c("44", "49", "53", "72", "85")) %>%
mutate(zone = as.factor(zone))
# Concaténation des deux tableaux
co2 <- bind_rows(co2_dep, co2_reg) %>%
gather(key = date, value = co2, 2:all_of(nb_colonnes_co2)) %>%
mutate(date = format(ym(date), "%Y %m")) %>%
mutate(date_2 = ym(date))
rm(co2_reg, co2_dep)
# Graphique co2 croisant mois et région (52 et FE) ----
## Filtrage de la zone
co2_reg_graph <- co2 %>%
filter(zone %in% c("Pays de la Loire", "France"))
## Mise en forme du graphique
co2_reg_ggplot <- ggplot(data=co2_reg_graph, aes(x=date_2, y=co2, color=zone, group=zone))+
scale_color_manual(values=c("#323787", "#469b36"))+
geom_line(linewidth=1.1)+
#geom_point(size=2, stroke=1.5, pch=21, fill="white")+
scale_y_continuous(breaks = seq(80, 120, 10), limits = c(80, 120), expand = c(0, 0))+
guides(color=guide_legend(nrow=3, byrow=TRUE))+
#scale_x_date(breaks = breaks_width("6 months"), expand = c(0, 0), labels = label_date_short()) +
scale_x_date(breaks = breaks_width("1 years"), expand = c(0, 0), labels = label_date_short()) +
theme(panel.background = element_rect("#dad6e9"),
panel.grid.major = element_line("white"),
panel.grid.minor = element_blank(),
legend.position = c(0.84, 0.86),
legend.spacing.x = unit(0.1, "cm"),
legend.spacing.y = unit(0.1, "cm"),
legend.key.size = unit(0.3, "cm"),
legend.key = element_rect(color = NA, fill = NA),
legend.title = element_blank(),
legend.text = element_text(size=13),
legend.background = element_rect(fill=NA),
axis.text.x = element_text(size=11, hjust=hjust_aaaa_bis, color="black"),
axis.text.y = element_text(size=12, color="black"),
axis.line.x = element_line(color="black"),
axis.line.y = element_line(color="black"),
axis.title.x = element_blank(),
axis.title.y = element_blank(),
plot.title = element_markdown(color="#323787", size=14, face="bold", hjust=0.5),
plot.subtitle = element_markdown(color="#323787", size=12, face="bold", hjust=0.5),
plot.caption = element_markdown(color="black", size=10, face="plain", hjust=0))+
labs(title = "Comparaison avec le niveau national",
caption = "Unité : gramme de CO<sub>2</sub>/km (valeurs issues de la norme WLTP)<br>
Source : SDES - Répertoire statistique des véhicules routiers (RSVéRo)")
# Graphique co2 croisant mois et département ----
## Filtrage de la zone
co2_dep_graph <- co2 %>%
filter(zone %notin% c("Pays de la Loire", "France")) %>%
spread(key = zone, value = co2) %>%
rename("Loire-Atlantique" = `44`, "Maine-et-Loire" = `49`, "Mayenne" = `53`, "Sarthe" = `72`, "Vendée" = `85`) %>%
mutate(across(where(is.numeric), ~ roll_sumr(.x/6, 6))) %>%
gather(key = zone, value = co2, 3:7)
## Mise en forme du graphique
co2_dep_ggplot <- ggplot(data=co2_dep_graph, aes(x=date_2, y=co2, color=zone, group=zone))+
scale_color_manual(values=c("#323787", "#808080", "#469b36", "#ff6600", "red"))+
geom_line(linewidth=1.1)+
#geom_point(size=2, stroke=1.5, pch=21, fill="white")+
scale_y_continuous(breaks = seq(80, 120, 10), limits = c(80, 120), expand = c(0, 0))+
guides(color=guide_legend(nrow=1, byrow=TRUE, reverse=FALSE, keyheight=0.01))+
#scale_x_date(breaks = breaks_width("6 months"), expand = c(0, 0), labels = label_date_short()) +
scale_x_date(breaks = breaks_width("1 years"), expand = c(0, 0), labels = label_date_short()) +
theme(panel.background = element_rect("#dad6e9"),
panel.grid.major = element_line("white"),
panel.grid.minor = element_blank(),
legend.position = c(0.5, 0.94),
legend.spacing.x = unit(0.1, "cm"),
legend.spacing.y = unit(0.1, "cm"),
legend.key.size = unit(0.3, "cm"),
legend.key = element_rect(color = NA, fill = NA),
legend.title = element_blank(),
legend.text = element_text(size=13),
legend.background = element_rect(fill=NA),
axis.text.x = element_text(size=11, hjust=hjust_aaaa_bis, color="black"),
axis.text.y = element_text(size=12, color="black"),
axis.line.x = element_line(color="black"),
axis.line.y = element_line(color="black"),
axis.title.x = element_blank(),
axis.title.y = element_blank(),
plot.title = element_markdown(color="#323787", size=14, face="bold", hjust=0.5),
plot.subtitle = element_markdown(color="#323787", size=12, face="bold", hjust=0.5),
plot.caption = element_markdown(color="black", size=10, face="plain", hjust=0))+
labs(title = "Comparaisons départementales (moyennes semestrielles)",
caption = "Unité : gramme de CO<sub>2</sub>/km (valeurs issues de la norme WLTP)<br>
Source : SDES - Répertoire statistique des véhicules routiers (RSVéRo)")
# Tableau co2 croisant mois et zone (séries mensuelles) ----
## Construction du tableau
co2_tableau <- co2 %>%
select(1,2,3) %>%
# mutate(zone = as.character(zone)) %>%
spread(key = zone, value = co2) %>%
rename(" " = date, "Loire-Atlantique" = `44`, "Maine-et-Loire" = `49`, "Mayenne" = `53`, "Sarthe" = `72`, "Vendée" = `85`) %>%
slice_tail(n = 25)
pied_de_tableau_3 <- paste0("Unité : gramme de dioxyde de carbone par km (valeurs issues de la norme WLTP)",
"\nSource : SDES - Répertoire statistique des véhicules routiers (RSVéRo)")
## Mise en forme du tableau
co2_kable <- kable(co2_tableau, "html", booktabs = T, escape = F,
caption = paste("Émissions conventionnelles de CO<sub>2</sub> des voitures particulières et commerciales neuves<br>immatriculées au cours des vingt-cinq derniers mois"),
align = c("l", "r", "r", "r", "r", "r", "r", "r"),
format.args = list(big.mark = " ", decimal.mark = ",")) %>%
footnote(general_title = " ",
general = pied_de_tableau_3,
footnote_as_chunk = T, title_format = "bold", fixed_small_size = T) %>%
kable_styling(font_size = 10, full_width = F, position = "center",
bootstrap_options = c("condensed", "responsive")) %>%
row_spec(0:25, background = "#dad6e9", color = "black",
extra_css = "border-bottom: 1.5px solid white;, border-top: 1.5px solid white;") %>%
row_spec(0, color = "black", bold = F, align = "c", extra_css = "border-right: 1.5px solid white;, padding: 4px 1px 4px 1px") %>%
column_spec(1:8, border_right = "1.5px solid white") %>%
column_spec(1, bold = T, width = "7em", extra_css = "padding: 4px 8px 2px 14px") %>%
column_spec(2:8, width = "12em", extra_css = "padding: 4px 42px 2px 1px")
# Tableaux de l'annexe statistique
# Séparateur décimal à la française
options(OutDec= ",")
## Tableau 1 - Immatriculations neuves par zone des vingt-cinq derniers mois ----
annexe_1_FE <- neuf_data_raw %>%
group_by(date) %>%
summarise(immat = sum(immat, na.rm = T)) %>%
ungroup() %>%
rename(`France` = `immat`)
annexe_1 <- neuf_data_raw %>%
filter(REG == 52) %>%
group_by(DEPLIB, date) %>%
summarise(immat = sum(immat, na.rm = T)) %>%
spread(key = DEPLIB, value = immat) %>%
ungroup() %>%
mutate(`Pays de la Loire` = rowSums(across(2:6)),
`France` = annexe_1_FE$`France`) %>%
rename("\U00A0" = `date`) %>%
slice_tail(n = 25)
rm(annexe_1_FE)
nb_lignes <- as.numeric(nrow(annexe_1))
annexe_1_kable <- kable(annexe_1, "html", booktabs = T, escape = F,
caption = paste("Immatriculations de véhicules routiers <span style = 'color:#469b36;'>neufs</span> au cours des vingt-cinq derniers mois"),
align = c("l", "r", "r", "r", "r", "r", "r", "r"),
format.args = list(big.mark = " ", decimal.mark = ",")) %>%
footnote(general_title = " ",
general = "Source : SDES - Répertoire statistique des véhicules routiers (RSVéRo)",
footnote_as_chunk = T, title_format = "bold", fixed_small_size = T) %>%
kable_styling(font_size = 10, full_width = F, position = "center",
bootstrap_options = c("condensed", "responsive")) %>%
row_spec(0:nb_lignes, background = "#dad6e9", color = "black",
extra_css = "border-bottom: 1.5px solid white;, border-top: 1.5px solid white;") %>%
row_spec(0, color = "black", bold = F, align = "c", extra_css = "border-right: 1.5px solid white;, padding: 4px 1px 4px 1px") %>%
column_spec(1:8, border_right = "1.5px solid white") %>%
column_spec(1, bold = T, width = "7em", extra_css = "padding: 4px 8px 2px 14px") %>%
column_spec(2:3, width = "12em", extra_css = "padding: 4px 40px 2px 1px") %>%
column_spec(4:5, width = "12em", extra_css = "padding: 4px 41px 2px 1px") %>%
column_spec(6, width = "12em", extra_css = "padding: 4px 40px 2px 1px") %>%
column_spec(7, width = "12em", extra_css = "padding: 4px 39px 2px 1px") %>%
column_spec(8, width = "12em", extra_css = "padding: 4px 35px 2px 1px")
# column_spec(7, width = "10em", extra_css = "padding: 4px 30px 2px 1px", background = "#323787", color = "white")
## Tableau 2 - Immatriculations d'occasion par zone des vingt-cinq derniers mois ----
annexe_2_FE <- occ_data_raw %>%
group_by(date) %>%
summarise(immat = sum(immat, na.rm = T)) %>%
ungroup() %>%
rename(`France` = `immat`)
annexe_2 <- occ_data_raw %>%
filter(REG == 52) %>%
group_by(DEPLIB, date) %>%
summarise(immat = sum(immat, na.rm = T)) %>%
spread(key = DEPLIB, value = immat) %>%
ungroup() %>%
mutate(`Pays de la Loire` = rowSums(across(2:6)),
`France` = annexe_2_FE$`France`) %>%
rename("\U00A0" = `date`) %>%
slice_tail(n = 25)
rm(annexe_2_FE)
annexe_2_kable <- kable(annexe_2, "html", booktabs = T, escape = F,
caption = paste("Immatriculations de véhicules routiers <span style = 'color:#469b36;'>d'occasion</span> au cours des vingt-cinq derniers mois"),
align = c("l", "r", "r", "r", "r", "r", "r", "r"),
format.args = list(big.mark = " ", decimal.mark = ",")) %>%
footnote(general_title = " ",
general = "Source : SDES - Répertoire statistique des véhicules routiers (RSVéRo)",
footnote_as_chunk = T, title_format = "bold", fixed_small_size = T) %>%
kable_styling(font_size = 10, full_width = F, position = "center",
bootstrap_options = c("condensed", "responsive")) %>%
row_spec(0:nb_lignes, background = "#dad6e9", color = "black",
extra_css = "border-bottom: 1.5px solid white;, border-top: 1.5px solid white;") %>%
row_spec(0, color = "black", bold = F, align = "c", extra_css = "border-right: 1.5px solid white;, padding: 4px 1px 4px 1px") %>%
column_spec(1:8, border_right = "1.5px solid white") %>%
column_spec(1, bold = T, width = "7em", extra_css = "padding: 4px 8px 2px 14px") %>%
column_spec(2:3, width = "12em", extra_css = "padding: 4px 40px 2px 1px") %>%
column_spec(4:5, width = "12em", extra_css = "padding: 4px 41px 2px 1px") %>%
column_spec(6, width = "12em", extra_css = "padding: 4px 40px 2px 1px") %>%
column_spec(7, width = "12em", extra_css = "padding: 4px 39px 2px 1px") %>%
column_spec(8, width = "12em", extra_css = "padding: 4px 35px 2px 1px")
# column_spec(7, width = "10em", extra_css = "padding: 4px 30px 2px 1px", background = "#323787", color = "white")
## Tableau 3 - Évolutions et ratios des vingt-cinq derniers mois ----
neuf_evolution <- neuf_data_raw %>%
filter(REG == 52) %>%
group_by(date) %>%
summarise(immat = sum(immat, na.rm = T)) %>%
ungroup() %>%
mutate(cumul_12_mois=roll_sumr(immat, 12)) %>%
mutate_if(is.numeric, funs(evolution=(.*100/lag(.,12)-100))) %>%
mutate(`Neuf - Évolution du dernier mois` = ifelse(immat_evolution > 0,
paste0("+","\U00A0",format(round(immat_evolution,1),1)," %"),
ifelse(immat_evolution < 0,
paste0("-","\U00A0",format(round(-immat_evolution,1),1)," %"),
"0,0 %"))) %>%
mutate(`Neuf - Évolution des douze derniers mois` = ifelse(cumul_12_mois_evolution > 0,
paste0("+","\U00A0",format(round(cumul_12_mois_evolution,1),1)," %"),
ifelse(cumul_12_mois_evolution < 0,
paste0("-","\U00A0",format(round(-cumul_12_mois_evolution,1),1)," %"),
"0,0 %"))) %>%
select(1, 6, 7)
occ_evolution <- occ_data_raw %>%
filter(REG == 52) %>%
group_by(date) %>%
summarise(immat = sum(immat, na.rm = T)) %>%
ungroup() %>%
mutate(cumul_12_mois=roll_sumr(immat, 12)) %>%
mutate_if(is.numeric, funs(evolution=(.*100/lag(.,12)-100))) %>%
mutate(`Occasion - Évolution du dernier mois` = ifelse(immat_evolution > 0,
paste0("+","\U00A0",format(round(immat_evolution,1),1)," %"),
ifelse(immat_evolution < 0,
paste0("-","\U00A0",format(round(-immat_evolution,1),1)," %"),
"0,0 %"))) %>%
mutate(`Occasion - Évolution des douze derniers mois` = ifelse(cumul_12_mois_evolution > 0,
paste0("+","\U00A0",format(round(cumul_12_mois_evolution,1),1)," %"),
ifelse(cumul_12_mois_evolution < 0,
paste0("-","\U00A0",format(round(-cumul_12_mois_evolution,1),1)," %"),
"0,0 %"))) %>%
select(1, 6, 7)
neuf_part_electrique <- neuf_data_raw %>%
filter(REG == 52) %>%
group_by(energie, date) %>%
summarise(immat = sum(immat, na.rm = T)) %>%
spread(key = "energie", value = "immat") %>%
ungroup() %>%
mutate(across(where(is.numeric), ~ roll_sumr(.x, 1))) %>%
mutate(`Ensemble` = rowSums(across(2:6)),
`Neuf - Part de l'électricité` = paste0(format(round(`Électricité`/`Ensemble`*100,1),1)," %")) %>%
select(1, 8)
occ_part_electrique <- occ_data_raw %>%
filter(REG == 52) %>%
group_by(energie, date) %>%
summarise(immat = sum(immat, na.rm = T)) %>%
spread(key = "energie", value = "immat") %>%
ungroup() %>%
mutate(across(where(is.numeric), ~ roll_sumr(.x, 1))) %>%
mutate(`Ensemble` = rowSums(across(2:6)),
`Occasion - Part de l'électricité` = paste0(format(round(`Électricité`/`Ensemble`*100,1),1)," %")) %>%
select(1, 8)
neuf_part_personnes_morales <- neuf_data_raw %>%
filter(REG == 52) %>%
group_by(statut, date) %>%
summarise(immat = sum(immat, na.rm = T)) %>%
spread(key = "statut", value = "immat") %>%
ungroup() %>%
mutate(across(where(is.numeric), ~ roll_sumr(.x, 1))) %>%
mutate(`Ensemble` = rowSums(across(2:4)),
`Neuf - Part des personnes morales` = paste0(format(round(`Personnes morales`/`Ensemble`*100,1),1)," %")) %>%
select(1, 6)
occ_part_personnes_morales <- occ_data_raw %>%
filter(REG == 52) %>%
group_by(statut, date) %>%
summarise(immat = sum(immat, na.rm = T)) %>%
spread(key = "statut", value = "immat") %>%
ungroup() %>%
mutate(across(where(is.numeric), ~ roll_sumr(.x, 1))) %>%
mutate(`Ensemble` = rowSums(across(2:4)),
`Occasion - Part des personnes morales` = paste0(format(round(`Personnes morales`/`Ensemble`*100,1),1)," %")) %>%
select(1, 6)
neuf_part_vpc <- neuf_data_raw %>%
filter(REG == 52) %>%
group_by(genre_14_postes, date) %>%
summarise(immat = sum(immat, na.rm = T)) %>%
spread(key = "genre_14_postes", value = "immat") %>%
ungroup() %>%
mutate(across(where(is.numeric), ~ roll_sumr(.x, 1))) %>%
mutate(`Ensemble` = rowSums(across(2:15)),
`Neuf - Part des voitures particulières et commerciales` = paste0(round(`Voiture particulière et commerciale`/`Ensemble`*100,0)," %")) %>%
select(1, 17)
occ_part_vpc <- occ_data_raw %>%
filter(REG == 52) %>%
group_by(genre_14_postes, date) %>%
summarise(immat = sum(immat, na.rm = T)) %>%
spread(key = "genre_14_postes", value = "immat") %>%
ungroup() %>%
mutate(across(where(is.numeric), ~ roll_sumr(.x, 1))) %>%
mutate(`Ensemble` = rowSums(across(2:15)),
`Occasion - Part des voitures particulières et commerciales` = paste0(round(`Voiture particulière et commerciale`/`Ensemble`*100,0)," %")) %>%
select(1, 17)
neuf_evolution_vpc <- neuf_data_raw %>%
filter(REG == 52, genre_14_postes == "Voiture particulière et commerciale") %>%
group_by(date) %>%
summarise(immat = sum(immat, na.rm = T)) %>%
ungroup() %>%
mutate(cumul_12_mois=roll_sumr(immat, 12)) %>%
mutate_if(is.numeric, funs(evolution=(.*100/lag(.,12)-100))) %>%
mutate(`VPC Neuf - Évolution du dernier mois` = ifelse(immat_evolution > 0,
paste0("+","\U00A0",format(round(immat_evolution,1),1)," %"),
ifelse(immat_evolution < 0,
paste0("-","\U00A0",format(round(-immat_evolution,1),1)," %"),
"0,0 %"))) %>%
mutate(`VPC Neuf - Évolution des douze derniers mois` = ifelse(cumul_12_mois_evolution > 0,
paste0("+","\U00A0",format(round(cumul_12_mois_evolution,1),1)," %"),
ifelse(cumul_12_mois_evolution < 0,
paste0("-","\U00A0",format(round(-cumul_12_mois_evolution,1),1)," %"),
"0,0 %"))) %>%
select(1, 6, 7)
occ_evolution_vpc <- occ_data_raw %>%
filter(REG == 52, genre_14_postes == "Voiture particulière et commerciale") %>%
group_by(date) %>%
summarise(immat = sum(immat, na.rm = T)) %>%
ungroup() %>%
mutate(cumul_12_mois=roll_sumr(immat, 12)) %>%
mutate_if(is.numeric, funs(evolution=(.*100/lag(.,12)-100))) %>%
mutate(`VPC Occasion - Évolution du dernier mois` = ifelse(immat_evolution > 0,
paste0("+","\U00A0",format(round(immat_evolution,1),1)," %"),
ifelse(immat_evolution < 0,
paste0("-","\U00A0",format(round(-immat_evolution,1),1)," %"),
"0,0 %"))) %>%
mutate(`VPC Occasion - Évolution des douze derniers mois` = ifelse(cumul_12_mois_evolution > 0,
paste0("+","\U00A0",format(round(cumul_12_mois_evolution,1),1)," %"),
ifelse(cumul_12_mois_evolution < 0,
paste0("-","\U00A0",format(round(-cumul_12_mois_evolution,1),1)," %"),
"0,0 %"))) %>%
select(1, 6, 7)
annexe_3 <- bind_cols(neuf_evolution, occ_evolution, neuf_part_electrique, occ_part_electrique,
neuf_part_personnes_morales, occ_part_personnes_morales,
neuf_part_vpc, occ_part_vpc, neuf_evolution_vpc, occ_evolution_vpc) %>%
select(1,2,5,3,6,8,10,12,14,16,18,20,23,21,24) %>%
mutate_if(is.character, ~replace(., is.na(.), "\U00A0")) %>%
rename("\U00A0" = `date...1`,
`Neuf`=2,
`Occ.`=3,
`Neuf `=4,
` Occ. `=5,
` Neuf`=6,
` Occ.`=7,
` Neuf `=8,
` Occ. `=9,
` Neuf `=10,
` Occ. `=11,
` Neuf`=12,
` Occ.`=13,
` Neuf `=14,
` Occ. `=15) %>%
slice_tail(n = 25)
rm(neuf_evolution, occ_evolution, neuf_part_electrique, occ_part_electrique,
neuf_part_personnes_morales, occ_part_personnes_morales, neuf_part_vpc, occ_part_vpc, neuf_evolution_vpc, occ_evolution_vpc)
pied_de_tableau_2 <- paste0("¹ Évolution par rapport au même mois de l'année précédente",
"\n² Évolution entre les immatriculations des douze derniers mois et celles des mêmes mois un an auparavant",
"\nSource : SDES - Répertoire statistique des véhicules routiers (RSVéRo)")
annexe_3_kable <- kable(annexe_3, "html", booktabs = T, escape = F,
caption = paste("Immatriculations de véhicules routiers dans les Pays de la Loire<br>Évolutions et ratios des vingt-cinq derniers mois"),
align = c("l", "r", "r", "r", "r", "r", "r", "r", "r", "r", "r", "r", "r", "r", "r"),
format.args = list(big.mark = " ", decimal.mark = ",")) %>%
footnote(general_title = " ",
general = pied_de_tableau_2,
footnote_as_chunk = T, title_format = "bold", fixed_small_size = T) %>%
kable_styling(font_size = 10, full_width = F, position = "center",
bootstrap_options = c("condensed", "responsive")) %>%
add_header_above(c("\U00A0",
"Évolution mensuelle¹"=2,
"Évolution annuelle²"=2,
"Part des véhicules électriques"=2,
"Part des person- nes morales"=2,
"Part dans l'ensemble"=2,
"Évolution mensuelle¹"=2,
"Évolution annuelle²"=2),
background = "#dad6e9", bold = T, color = "#424242", line = F,
extra_css = "border-right: 1.5px solid white;") %>%
add_header_above(c("\U00A0", "Ensemble des véhicules routiers"=8, "Voitures particulières et commerciales"=6),
background = "#dad6e9", bold = T, color = "black", line = F,
extra_css = "border-right: 1.5px solid white;") %>%
row_spec(0:nb_lignes, extra_css = "border-bottom: 1.5px solid white;, border-top: 1.5px solid white;") %>%
row_spec(0, background = "#dad6e9", color = "#424242", bold = F, align = "c", extra_css = "border-right: 1.5px solid white;") %>%
row_spec(1:nb_lignes, background = "#dad6e9", color = "black") %>%
column_spec(1:15, border_right = "1.5px solid white") %>%
column_spec(1, bold = T, width = "6em", extra_css = "padding: 4px 1px 2px 6px") %>%
column_spec(2:5, width = "6em", extra_css = "padding: 4px 6px 2px 1px") %>%
column_spec(6:9, width = "6em", extra_css = "padding: 4px 11px 2px 1px") %>%
column_spec(10:11, width = "6em", extra_css = "padding: 4px 13px 2px 1px") %>%
column_spec(12:15, width = "6em", extra_css = "padding: 4px 6px 2px 1px")
## Rapport de la part de l’électrique entre le neuf et l'occasion ----
part_elec_neuf <- neuf_data_raw %>%
filter(REG == 52, date == dernier_mois_rsvero_2) %>%
group_by(date, energie) %>%
summarise(immat = sum(immat, na.rm = T)) %>%
ungroup() %>%
spread(key = energie, value = "immat") %>%
mutate(Ensemble = rowSums(across(2:6)), part_elec = `Électricité`/Ensemble) %>%
select(1,8)
part_elec <- occ_data_raw %>%
filter(REG == 52, date == dernier_mois_rsvero_2) %>%
group_by(date, energie) %>%
summarise(immat = sum(immat, na.rm = T)) %>%
ungroup() %>%
spread(key = energie, value = "immat") %>%
mutate(Ensemble = rowSums(across(2:6)), part_elec = `Électricité`/Ensemble) %>%
select(1,8) %>%
mutate(ratio_part_elec = part_elec_neuf$part_elec/part_elec,
ratio_lettres = case_when(round(ratio_part_elec) == 5 ~ "cinq",
round(ratio_part_elec) == 6 ~ "six",
round(ratio_part_elec) == 7 ~ "sept",
round(ratio_part_elec) == 8 ~ "huit",
round(ratio_part_elec) == 9 ~ "neuf",
round(ratio_part_elec) == 10 ~ "dix",
round(ratio_part_elec) == 11 ~ "onze",
round(ratio_part_elec) == 12 ~ "douze",
round(ratio_part_elec) == 13 ~ "treize",
round(ratio_part_elec) == 14 ~ "quatorze",
round(ratio_part_elec) == 15 ~ "quinze",
TRUE ~ "ALERTE"))
## Sauvegarde de l'environnement
save(list = ls(), file = "data/rsvero.RData")
# Création d'objets permettant le téléchargement des fichiers
# lien_download_neuf <- paste0("export_tableur/neuf_52_",dernier_mois_rsvero,".xlsx")
# lien_download_occ <- paste0("export_tableur/occ_52_",dernier_mois_rsvero,".xlsx")
# file_download_neuf <- paste0("neuf_",dernier_mois_rsvero,".xlsx")
# file_download_occ <- paste0("occasion_",dernier_mois_rsvero,".xlsx")
# rm(lien_download_neuf, lien_download_occ, file_download_neuf, file_download_occ)
# Exemples de code pour extraire un vecteur et automatiser la rédaction des faits saillants
annexe_3[nb_lignes-12, 6] %>% pull
neuf_occ_tableau_synthese[4, 4] %>% pull
sjmisc::big_mark(neuf_ensemble_bis[13, 2], " ") %>% pull
prettyNum(neuf_ensemble_bis[13, 2], big.mark=" ")
download="ind_mois.csv"
download="neuf_2024_02"
rm(download)
This diff is collapsed.
This diff is collapsed.
library(tidyr)
library(tidyverse)
library(dplyr)
library("RcppRoll")
library(readxl)
library(xlsx)
library(shiny)
library(rmarkdown)
library(kableExtra)
library(formattable)
library(DT)
library(ggthemes)
library(janitor)
library(plotly)
library(ggplot2)
library(ggtext)
library(openxlsx)
library(grDevices)
library(forcats)
library(grid)
library(gridtext)
library(lubridate)
library(sf)
library(extrafont)
library(stringr)
library(scales)
library(rlang)
library(knitr)
library(kableExtra)
library(huxtable)
# Désactivation de la notation scientifique
options(scipen = 999)
# Séparateur décimal à la française
options(OutDec= ",")
# Création d'une fonction %notin% (inverse de %in%)
`%notin%` <- function (x, y) {
!(match(x, y, nomatch = 0L) > 0L)}
# Avant de lancer le script, il faut renommer manuellement le fichier que le SDES nous envoie chaque mois,
# de façon à ce qu'il ne contienne pas d'espace et qu'il ait à chaque fois le même nombre de caractères
# Par exemple, passer de "stat_ dreal_n_2016 _1 à 2023_8.xlsx" à "stat_dreal_n_2016_1_2023_08.xlsx
# Création de la liste de tous les fichiers RSVéRO déposés dans le dossier dédié
liste_fichiers_neuf <- list.files("X:/SCTE/CSD/DONNEES_CONFIDENTIELLES/_niveau_2/Conjoncture/rsvero",
include.dirs = FALSE, full.names = FALSE, pattern = "stat_dreal_n_2016_1_")
# Extraction des sept derniers caractères du fichier RSVéRO le plus récent
# (ces sept caractères donnent le dernier mois disponible)
dernier_mois_rsvero <- liste_fichiers_neuf %>%
substr(21,27) %>%
max()
# Reconstitution (par concaténation) du nom du fichier RSVéRO le plus récent
neuf_file <- paste0("X:/SCTE/CSD/DONNEES_CONFIDENTIELLES/_niveau_2/Conjoncture/rsvero/stat_dreal_n_2016_1_",dernier_mois_rsvero,".xlsx")
# Ouverture du fichier RSVéRO, recodage de la variable énergie et création de la segmentation des véhicules en 14 postes
neuf_data_raw_large <- read_excel(neuf_file) %>%
mutate(statut = replace_na(statut, "Statut non déterminé")) %>%
# mutate(statut = str_replace(statut, "NA", "Statut non déterminé")) %>%
mutate(statut = str_replace(statut, "ND", "Statut non déterminé")) %>%
mutate(energie = case_when(
energie %in% c("Diesel - hybride NR", "Diesel thermique") ~ "Gazole",
energie %in% c("Essence - hybride NR", "Essence thermique") ~ "Essence",
energie %in% c("Hybride rechargeable") ~ "Hybride rechargeable",
energie %in% c("Electrique et hydrogène") ~ "Électricité",
TRUE ~ "Autres motorisations")) %>%
mutate(energie = as.factor(energie)) %>%
mutate(energie = fct_relevel(energie,"Essence","Gazole","Électricité","Hybride rechargeable","Autres motorisations")) %>%
mutate(genre_14_postes = case_when(
categ == "VP" ~ "Voiture particulière et commerciale",
categ == "CATL" & genre_eu == "Cyclomoteurs" ~ "Cyclomoteur",
categ == "CATL" & genre_eu == "Motocyclettes"~ "Motocyclette",
categ == "CATL"& genre_eu %notin% c("Cyclomoteurs", "Motocyclettes") ~ "Tricycle et quadricycle à moteur",
categ == "REM" & genre_eu %notin% c("3,5-10 T", ">10 T") ~ "Remorque légère et caravane",
categ == "REM" & genre_eu %in% c("3,5-10 T", ">10 T") ~ "Remorque lourde",
genre == "VASP" & carro == "Camping-car" ~ "Camping-car",
categ == "TCP" ~ "Autobus et autocar",
genre == "VASP" & carro == "Dérivé voiture" ~ "Utilitaire dérivé de voiture (UDVP)",
categ == "VUL" & genre %in% c("Camionnettes", "Camions") ~ "Camionnette",
categ == "PL" & genre %in% c("Camionnettes", "Camions") ~ "Camion",
genre == "Tracteurs routiers" ~ "Tracteur routier",
genre == "VASP" & carro %notin% c("Camping-car", "Dérivé voiture") ~ "VASP (hors UDVP et camping-car)",
categ == "TRA" ~ "Tracteur agricole",
TRUE ~ "Autres")) %>%
mutate(genre_14_postes = as.factor(genre_14_postes)) %>%
mutate(genre_14_postes = fct_relevel(genre_14_postes, "Voiture particulière et commerciale", "Cyclomoteur", "Motocyclette",
"Tricycle et quadricycle à moteur", "Remorque légère et caravane", "Camping-car",
"Autobus et autocar", "Utilitaire dérivé de voiture (UDVP)", "Camionnette","Camion",
"Tracteur routier", "Remorque lourde", "VASP (hors UDVP et camping-car)", "Tracteur agricole")) %>%
relocate(genre_14_postes, .after = statut)
# Création d'un vecteur qui détermine le nombre de colonnes du fichier RSVéRO
# NB : le fichier comprend une colonne supplémentaire chaque mois
nb_colonnes <- as.numeric(ncol(neuf_data_raw_large))
# Mise au format long du fichier RSVéRO et simplification du mois
neuf_data_raw <- neuf_data_raw_large %>%
gather(key = date, value = immat, 16:all_of(nb_colonnes)) %>%
mutate(date = str_replace(date,"IMMAT20","20"), date = str_replace(date,"_","-")) %>%
mutate(date = format(ym(date), "%Y %m"))
# Constitution de séries mensuelles pour la note trimestrielle transports et export dans un tableur ----
series_pour_tdb <- neuf_data_raw %>%
filter(REG == 52) %>%
group_by(DEPLIB, date, genre_14_postes) %>%
summarise(immat = sum(immat, na.rm = T)) %>%
filter(genre_14_postes %in% c("Voiture particulière et commerciale",
"Utilitaire dérivé de voiture (UDVP)",
"Camionnette",
"Camion",
"Tracteur routier",
"Remorque lourde")) %>%
spread(key = genre_14_postes, value = immat) %>%
ungroup() %>%
mutate(VPC = `Voiture particulière et commerciale`, VU = rowSums(across(4:8))) %>%
select(2,9,10,1) %>%
gather(key = genre, value = immat, 2:3) %>%
select(1,3,2,4) %>%
spread(key = date, value = immat)
# Ancien code où le filtre sur le genre de véhicules (positionné au début) faisait planter R Studio
# series_pour_tdb <- neuf_data_raw %>%
# filter(REG == 52,
# genre_14_postes %in% c("Voiture particulière et commerciale",
# "Utilitaire dérivé de voiture (UDVP)",
# "Camionnette",
# "Camion",
# "Tracteur routier",
# "Remorque lourde")) %>%
# group_by(DEPLIB, date, genre_14_postes) %>%
# summarise(immat = sum(immat, na.rm = T)) %>%
# spread(key = genre_14_postes, value = immat) %>%
# ungroup() %>%
# mutate(VPC = `Voiture particulière et commerciale`, VU = rowSums(across(4:8))) %>%
# select(2,9,10,1) %>%
# gather(key = genre, value = immat, 2:3) %>%
# select(1,3,2,4) %>%
# spread(key = date, value = immat)
sortie_excel_pour_tdb <- createWorkbook()
addWorksheet(sortie_excel_pour_tdb, "VPC et VU")
writeData(sortie_excel_pour_tdb, sheet = 1, x = series_pour_tdb)
setColWidths(sortie_excel_pour_tdb, sheet = 1, cols = 1:2, widths = "auto")
setColWidths(sortie_excel_pour_tdb, sheet = 1, cols = 3:200, widths = "7")
nombre <- createStyle(numFmt = "COMMA")
addStyle(sortie_excel_pour_tdb, 1, nombre, rows = 2:99, cols = 3:200, gridExpand = TRUE)
halignright <- createStyle(halign = "right", textDecoration = "bold")
addStyle(sortie_excel_pour_tdb, 1, halignright, rows = 1, cols = 3:200, gridExpand = TRUE)
entete <- createStyle(textDecoration = "bold")
addStyle(sortie_excel_pour_tdb, 1, entete, rows = 1:200, cols = 1:2, gridExpand = TRUE)
blue <- createStyle(fontColour = "#484fb5", numFmt = "COMMA")
addStyle(sortie_excel_pour_tdb, 1, blue, rows = 2:6, cols = 3:200, gridExpand = TRUE)
couleur <- createStyle(fontColour = "#484fb5", textDecoration = "bold")
addStyle(sortie_excel_pour_tdb, 1, couleur, rows = 2:6, cols = 1:2, gridExpand = TRUE)
freezePane(sortie_excel_pour_tdb, 1, firstActiveRow = 2, firstActiveCol = "C")
saveWorkbook(sortie_excel_pour_tdb, "export_tableur/tdb.xlsx", overwrite = T)
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.