Indice des prix d’entretien-amélioration des bâtiments

Data - INSEE

Info

source dataset Title .html .rData
insee IPEA-2015 Indice des prix d'entretien-amélioration des bâtiments 2025-10-10 2025-10-09

Info

LAST_UPDATE

Code
`IPEA-2015` %>%
  group_by(LAST_UPDATE) %>%
  summarise(Nobs = n()) %>%
  arrange(desc(LAST_UPDATE)) %>%
  print_table_conditional()
LAST_UPDATE Nobs
2024-02-29 1720

LAST_COMPILE

LAST_COMPILE
2025-10-11

Last

Code
`IPEA-2015` %>%
  group_by(TIME_PERIOD) %>%
  summarise(Nobs = n()) %>%
  arrange(desc(TIME_PERIOD)) %>%
  head(1) %>%
  print_table_conditional()
TIME_PERIOD Nobs
2023-Q4 30

CONSTRUCTION_ACTIVITE

Code
`IPEA-2015` %>%
  left_join(CONSTRUCTION_ACTIVITE, by = "CONSTRUCTION_ACTIVITE") %>%
  group_by(CONSTRUCTION_ACTIVITE, Construction_activite) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  print_table_conditional()
CONSTRUCTION_ACTIVITE Construction_activite Nobs
43-21-H 43.21 - Installation électrique 100
43-22-H 43.22 - Plomberie, installation de chauffage et conditionnement d'air 100
43-29-H 43.29 - Autres travaux d'installation 100
43-31-H 43.31 - Plâtrerie 100
43-32-H 43.32 - Menuiserie 100
43-33-H 43.33 - Revêtement des sols et des murs 100
43-34-H 43.34 - Peinture et vitrerie 100
43-91-H 43.91 - Couverture 100
43-99-H 43.99 - Autres travaux de construction spécialisé 100
43-IPEA-H 43 hors 43.1 - IPEA 100
43-21 43.21 - Installation électrique 36
43-21-C 43.21 - Installation électrique 36
43-22 43.22 - Plomberie, installation de chauffage et conditionnement d'air 36
43-22-C 43.22 - Plomberie, installation de chauffage et conditionnement d'air 36
43-29 43.29 - Autres travaux d'installation 36
43-29-C 43.29 - Autres travaux d'installation 36
43-31 43.31 - Plâtrerie 36
43-31-C 43.31 - Plâtrerie 36
43-32 43.32 - Menuiserie 36
43-32-C 43.32 - Menuiserie 36
43-33 43.33 - Revêtement des sols et des murs 36
43-33-C 43.33 - Revêtement des sols et des murs 36
43-34 43.34 - Peinture et vitrerie 36
43-34-C 43.34 - Peinture et vitrerie 36
43-91-C 43.91 - Couverture 36
43-91-T 43.91 - Couverture 36
43-99 43.99 - Autres travaux de construction spécialisé 36
43-99-C 43.99 - Autres travaux de construction spécialisé 36
43-IPEA 43 hors 43.1 - IPEA 36
43-IPEA-C 43 hors 43.1 - IPEA 36

TYPE_BATIMENT

Code
`IPEA-2015` %>%
  left_join(TYPE_BATIMENT, by = "TYPE_BATIMENT") %>%
  group_by(TYPE_BATIMENT, Type_batiment) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  print_table_conditional()
TYPE_BATIMENT Type_batiment Nobs
RESIDENTIEL Bâtiments résidentiels 1000
NON_RESIDENTIEL Bâtiments non résidentiels 360
TOUS_BATIMENTS Tous bâtiments 360

TIME_PERIOD: 1990-

Code
`IPEA-2015` %>%
  group_by(TIME_PERIOD) %>%
  summarise(Nobs = n()) %>%
  arrange(desc(TIME_PERIOD)) %>%
  print_table_conditional()

43-IPEA

Base = 2015

Code
`IPEA-2015` %>%
  filter(CONSTRUCTION_ACTIVITE %in% c("43-IPEA-C", "43-IPEA-H", "43-IPEA")) %>%
  mutate(date = zoo::as.yearqtr(TIME_PERIOD, format = "%Y-Q%q")) %>%
  ggplot + geom_line(aes(x = date, y = OBS_VALUE, color = TYPE_BATIMENT)) + 
  theme_minimal() + xlab("") + ylab("") +
  zoo::scale_x_yearqtr(labels = date_format("%YT%q"),
                       breaks = expand.grid(1997:2100, c(1)) %>%
                         mutate(breaks = zoo::as.yearqtr(paste0(Var1, "Q", Var2))) %>%
                         pull(breaks)) +
  scale_y_log10(breaks = seq(10, 200, 5)) +
  theme(legend.position = c(0.3, 0.9),
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1))

1999-

Code
`IPEA-2015` %>%
  mutate(date = zoo::as.yearqtr(TIME_PERIOD, format = "%Y-Q%q")) %>%
  filter(CONSTRUCTION_ACTIVITE %in% c("43-IPEA-C", "43-IPEA-H", "43-IPEA"),
         date >= zoo::as.yearqtr("1999 Q1")) %>%
  group_by(TYPE_BATIMENT) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot + geom_line(aes(x = date, y = OBS_VALUE, color = TYPE_BATIMENT)) + 
  theme_minimal() + xlab("") + ylab("") +
  zoo::scale_x_yearqtr(labels = date_format("%YT%q"),
                       breaks = expand.grid(1999:2100, c(1)) %>%
                         mutate(breaks = zoo::as.yearqtr(paste0(Var1, "Q", Var2))) %>%
                         pull(breaks)) +
  scale_y_log10(breaks = seq(10, 200, 5)) +
  theme(legend.position = c(0.3, 0.9),
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1))

2008-

Code
`IPEA-2015` %>%
  mutate(date = zoo::as.yearqtr(TIME_PERIOD, format = "%Y-Q%q")) %>%
  filter(CONSTRUCTION_ACTIVITE %in% c("43-IPEA-C", "43-IPEA-H", "43-IPEA"),
         date >= zoo::as.yearqtr("2008 Q1")) %>%
  group_by(TYPE_BATIMENT) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot + geom_line(aes(x = date, y = OBS_VALUE, color = TYPE_BATIMENT)) + 
  theme_minimal() + xlab("") + ylab("Indice de prix des travaux d’entretien-amélioration des bâtiments (100 = 2008T1)") +
  zoo::scale_x_yearqtr(labels = date_format("%YT%q"),
                       breaks = expand.grid(2008:2023, c(1, 3)) %>%
                         mutate(breaks = zoo::as.yearqtr(paste0(Var1, "Q", Var2))) %>%
                         pull(breaks)) +
  scale_y_log10(breaks = seq(10, 200, 5)) +
  theme(legend.position = c(0.3, 0.9),
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1))

2015-

Code
`IPEA-2015` %>%
  mutate(date = zoo::as.yearqtr(TIME_PERIOD, format = "%Y-Q%q")) %>%
  filter(CONSTRUCTION_ACTIVITE %in% c("43-IPEA-C", "43-IPEA-H", "43-IPEA"),
         date >= zoo::as.yearqtr("2015 Q1")) %>%
  left_join(TYPE_BATIMENT, by = "TYPE_BATIMENT") %>%
  group_by(TYPE_BATIMENT) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot + geom_line(aes(x = date, y = OBS_VALUE, color = Type_batiment)) + 
  theme_minimal() + xlab("") + ylab("Indice de prix des travaux d’entretien-amélioration des bâtiments (100 = 2017T1)") +
  zoo::scale_x_yearqtr(labels = date_format("%YT%q"),
                       breaks = expand.grid(2015:2023, c(1, 3)) %>%
                         mutate(breaks = zoo::as.yearqtr(paste0(Var1, "Q", Var2))) %>%
                         pull(breaks)) +
  scale_y_log10(breaks = seq(10, 200, 5)) +
  theme(legend.position = c(0.3, 0.9),
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1))

2017-

Code
`IPEA-2015` %>%
  mutate(date = zoo::as.yearqtr(TIME_PERIOD, format = "%Y-Q%q")) %>%
  filter(CONSTRUCTION_ACTIVITE %in% c("43-IPEA-C", "43-IPEA-H", "43-IPEA"),
         date >= zoo::as.yearqtr("2017 Q1")) %>%
  group_by(TYPE_BATIMENT) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot + geom_line(aes(x = date, y = OBS_VALUE, color = TYPE_BATIMENT)) + 
  theme_minimal() + xlab("") + ylab("Indice de prix des travaux d’entretien-amélioration des bâtiments (100 = 2017T1)") +
  zoo::scale_x_yearqtr(labels = date_format("%YT%q"),
                       breaks = expand.grid(2017:2023, c(1, 3)) %>%
                         mutate(breaks = zoo::as.yearqtr(paste0(Var1, "Q", Var2))) %>%
                         pull(breaks)) +
  scale_y_log10(breaks = seq(10, 200, 5)) +
  theme(legend.position = c(0.3, 0.9),
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1))

2020-

Code
`IPEA-2015` %>%
  mutate(date = zoo::as.yearqtr(TIME_PERIOD, format = "%Y-Q%q")) %>%
  filter(CONSTRUCTION_ACTIVITE %in% c("43-IPEA-C", "43-IPEA-H", "43-IPEA"),
         date >= zoo::as.yearqtr("2020 Q1")) %>%
  left_join(TYPE_BATIMENT, by = "TYPE_BATIMENT") %>%
  group_by(Type_batiment) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot + geom_line(aes(x = date, y = OBS_VALUE, color = Type_batiment)) + 
  theme_minimal() + xlab("") + ylab("Indice de prix des travaux d’entretien-amélioration \ndes bâtiments (100 = 2020T1)") +
  zoo::scale_x_yearqtr(labels = date_format("%YT%q"),
                       breaks = expand.grid(2020:2023, c(1, 2, 3, 4)) %>%
                         mutate(breaks = zoo::as.yearqtr(paste0(Var1, "Q", Var2))) %>%
                         pull(breaks)) +
  scale_y_log10(breaks = seq(10, 200, 2)) +
  theme(legend.position = c(0.3, 0.9),
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1))