Nombre de ventes de logements anciens cumulé sur 12 mois - nombre-vente-maison-appartement-ancien

Data - cgedd

Nombre de transactions

Tous

Code
`nombre-vente-maison-appartement-ancien` |>
  ggplot() + theme_minimal() + xlab("") + ylab("Nombre de transactions") +
  geom_line(aes(x = date, y = nombre_transactions)) +
  scale_x_date(breaks = seq(1960, 2100, 5) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = seq(0, 6000, 100),
                labels = dollar_format(accuracy = 1, prefix = "", su = " K")) +
  theme(legend.position = c(0.3, 0.5),
        legend.title = element_blank()) +
  geom_vline(xintercept = as.Date("2022-02-01"), color = "red", linetype = "dashed")

2000-

Code
`nombre-vente-maison-appartement-ancien` |>
  filter(date >= as.Date("2000-01-01")) |>
  ggplot() + theme_minimal() + xlab("") + ylab("Nombre de transactions sur 12 mois") +
  geom_line(aes(x = date, y = nombre_transactions)) +
  scale_x_date(breaks = seq(1960, 2100, 2) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = seq(0, 6000, 100),
                labels = dollar_format(accuracy = 1, prefix = "", su = " K")) +
  theme(legend.position = c(0.3, 0.5),
        legend.title = element_blank())

2017-

Code
`nombre-vente-maison-appartement-ancien` |>
  filter(date >= as.Date("2017-01-01")) |>
  ggplot() + theme_minimal() + xlab("") + ylab("Nombre de transactions") +
  geom_line(aes(x = date, y = nombre_transactions)) +
  scale_x_date(breaks = seq(1960, 2100, 1) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = seq(0, 6000, 50),
                labels = dollar_format(accuracy = 1, prefix = "", su = " K")) +
  theme(legend.position = c(0.3, 0.5),
        legend.title = element_blank())

Glissement annuel

Code
`nombre-vente-maison-appartement-ancien` |>
  filter(date >= as.Date("2000-01-01")) |>
  arrange(date) |>
  mutate(yoy = nombre_transactions / lag(nombre_transactions, 12) - 1) |>
  filter(!is.na(yoy)) |>
  ggplot() + theme_minimal() + xlab("") + ylab("Glissement annuel") +
  geom_line(aes(x = date, y = yoy)) +
  geom_hline(yintercept = 0, linetype = "dashed") +
  scale_x_date(breaks = seq(1960, 2100, 2) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01 * seq(-50, 50, 5),
                     labels = percent_format(accuracy = 1))

Droits de mutation par transaction

Droits de mutation au taux de droit commun perçus par les départements (cumul sur 12 mois, voir droits-mutation-departement) rapportés au nombre de ventes de logements anciens sur 12 mois. Ordre de grandeur des « frais de notaire » départementaux par vente, donc approximation du prix moyen × taux. Le taux maximal est passé de 3,8 % à 4,5 % en 2014, puis jusqu’à 5 % à partir d’avril 2025 dans la plupart des départements.

Code
dmto |>
  filter(code == "FR", type == "Droit commun") |>
  arrange(date) |>
  mutate(dmto_12m = zoo::rollsumr(value, 12, fill = NA)) |>
  inner_join(`nombre-vente-maison-appartement-ancien`, by = "date") |>
  filter(!is.na(dmto_12m)) |>
  mutate(dmto_par_vente = dmto_12m / (nombre_transactions * 1000)) |>
  ggplot() + theme_minimal() + xlab("") + ylab("DMTO par vente (€)") +
  geom_line(aes(x = date, y = dmto_par_vente)) +
  scale_x_date(breaks = seq(1960, 2100, 2) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = seq(0, 20000, 1000),
                     labels = dollar_format(accuracy = 1, prefix = "", suffix = " €", big.mark = " ")) +
  geom_vline(xintercept = as.Date(c("2014-03-01", "2025-04-01")), color = "red", linetype = "dashed")

Transactions et droits de mutation (base 100 = 2019)

Code
dmto |>
  filter(code == "FR", type == "Droit commun") |>
  arrange(date) |>
  mutate(dmto_12m = zoo::rollsumr(value, 12, fill = NA)) |>
  inner_join(`nombre-vente-maison-appartement-ancien`, by = "date") |>
  filter(!is.na(dmto_12m)) |>
  transmute(date,
            `Nombre de ventes (12 mois)` = nombre_transactions,
            `Droits de mutation (12 mois)` = dmto_12m) |>
  pivot_longer(-date) |>
  group_by(name) |>
  mutate(value = 100 * value / value[date == as.Date("2019-12-31")]) |>
  ggplot() + theme_minimal() + xlab("") + ylab("100 = 2019") +
  geom_line(aes(x = date, y = value, color = name)) +
  scale_x_date(breaks = seq(1960, 2100, 2) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_y_log10(breaks = seq(0, 300, 10)) +
  theme(legend.position = c(0.3, 0.85),
        legend.title = element_blank())