A partir des données dvf 2014 et 2017 de la région Pays de la Loire contenues dans le package {variousdata} et les fonds de carte de {COGiter}, produire :

Puis, assembler ces différentes cartes sur un même graphique.

## Activation des packages
library(tidyverse)
library(sf)
library(lubridate)
library(variousdata) 
library(cowplot)
library(stringr)
library(COGiter)
library(gouvdown)

## Préparation des données

### Fonds de carte
epci_geo_r52 <- COGiter::epci_geo %>%
  left_join(COGiter::epci, by = "EPCI") %>% 
  filter(grepl("52", REGIONS_DE_L_EPCI))
epci_ppaux_r52 <- filter(epci_geo_r52, NATURE_EPCI %in% c('ME', "CU")) %>% 
  pull(EPCI)
# communes des EPCI principaux 
com_epci_ppaux_r52 <- COGiter::communes_geo %>% 
  left_join(COGiter::communes, by = "DEPCOM") %>% 
  filter(EPCI %in% epci_ppaux_r52)

### dvf

data("dvf_r52")
dvf_r52 <- dvf_r52 %>% 
  select(-c(NOM_DEPCOM:NOM_REG)) %>% 
  passer_au_cog_a_jour(code_commune = DEPCOM, garder_info_supra = TRUE, aggrege = FALSE)

# On ne conserve que les données valides de ventes de maisons, et on les tronque, en filtrant les données à 98% pour lisser les moyennes

dvf_r52_maisons <- dvf_r52 %>%
  filter(nature_mutation == "Vente", type_local == "Maison") %>%
  filter(!is.na(valeur_fonciere), !is.na(surface_reelle_bati)) %>%
  mutate(prix_m2 = valeur_fonciere / surface_reelle_bati) %>%
  arrange(prix_m2) %>%
  filter(between(row_number(), n() * .01, n() * .99)) %>%
  select(-prix_m2)

Il faut comme toujours procéder par étape.

Etape 1 : Calcul de l'évolution des prix et du nombre de ventes

prix_m2_maisons_epci <- dvf_r52_maisons %>%
  select(EPCI, NOM_EPCI, date_mutation, valeur_fonciere, surface_reelle_bati) %>%
  mutate(
    n = 1,
    annee = year(date_mutation)
  ) %>%
  select(-date_mutation) %>%
  group_by(EPCI, NOM_EPCI, annee) %>%
  summarise(across(everything(), sum), .groups = "drop") %>%
  group_by(EPCI, NOM_EPCI) %>%
  mutate(
    prix_m2 = valeur_fonciere / surface_reelle_bati,
    evo_prix_m2 = 100 * prix_m2 / lag(prix_m2) - 100
  ) %>%
  filter(annee == 2017) %>%
  ungroup()
prix_m2_maisons_com <- dvf_r52_maisons %>%
  select(EPCI, DEPCOM, date_mutation, valeur_fonciere, surface_reelle_bati) %>%
  mutate(
    n = 1,
    annee = year(date_mutation)
  ) %>%
  select(-date_mutation) %>%
  group_by(EPCI, DEPCOM, annee) %>%
  summarise(across(everything(), sum), .groups = "drop") %>%
  group_by(EPCI, DEPCOM) %>%
  mutate(
    prix_m2 = valeur_fonciere / surface_reelle_bati,
    evo_prix_m2 = 100 * prix_m2 / lag(prix_m2) - 100
  ) %>%
  filter(annee == 2017) %>%
  ungroup()
prix_m2_maisons_epci_sf <- epci_geo_r52 %>% 
  left_join(prix_m2_maisons_epci, by = c("EPCI", "NOM_EPCI")) %>%
  mutate(n = coalesce(n, 0))
prix_m2_maisons_com_sf <- com_epci_ppaux_r52 %>% 
  left_join(prix_m2_maisons_com, by = c("DEPCOM", "EPCI")) %>%
  mutate(n = coalesce(n, 0)) %>% 
  filter()

Etape 2 : Datavisualisation

p <- ggplot(prix_m2_maisons_epci_sf) +
  geom_sf(aes(fill = evo_prix_m2)) +
  scale_fill_gouv_continuous(palette = "pal_gouv_div1") +
  stat_sf_coordinates(aes(size = n), alpha = .5) +
  theme_gouv_map(plot_title_size = 16, subtitle_size = 12, plot_margin = margin(0, 0, 0, 0), 
                 plot_title_margin = 1, caption_margin = 1, subtitle_margin = 0) +
  guides(size = "none") +
  labs(
    fill = "En %", title = "Evolution du prix des maisons neuves en euros par m2",
    subtitle = "Entre 2014 et 2017",
    caption = "source : DVF"
  )
p
# Création des cartes zoom EPCI avec une fonction

creer_zoom <- function(code_epci = "244400404") {

  nom_epci <- filter(epci_geo_r52, EPCI == code_epci) %>% 
    pull(NOM_EPCI) %>% 
    str_wrap(20)

  prix_m2_maisons_com_sf %>% 
    filter(EPCI == code_epci) %>% 
    ggplot() +
    geom_sf(aes(fill = evo_prix_m2)) +
    scale_fill_gouv_continuous(palette = "pal_gouv_div1") +
    stat_sf_coordinates(aes(size = n), alpha = .5) +
    theme_gouv_map(plot_title_size = 11, plot_margin = margin(0, 0, 0, 0), plot_title_margin = 1, caption_margin = 1, subtitle_margin = 0) +
    guides(size = "none", fill = "none") +
    labs(title = nom_epci)

  }
# Réalisation des zooms

zooms <- map(.x = epci_ppaux_r52, .f = creer_zoom)
zooms[[1]]
plot_grid(p, plot_grid(zooms[[1]], zooms[[2]], zooms[[4]], nrow = 2, ncol = 3), 
          nrow = 2)


MTES-MCT/parcours_r_exercices documentation built on Dec. 3, 2024, 1:29 p.m.