Indice des prix à la consommation - Base 2025

Data - INSEE

[1] "fr_CA.UTF-8"

Info

source dataset Title .html .rData
insee IPC-2025 Indice des prix à la consommation - Base 2025 2026-02-16 2026-02-16
insee IPCH-2025 Indices des prix à la consommation harmonisés - Base 2025 2026-02-16 2026-02-15

Données sur l’inflation en France

Title source dataset .html .RData
Budget de famille 2017 insee bdf2017 2026-02-03 2023-11-21
Échantillon d’agglomérations enquêtées de l’IPC en 2024 insee echantillon-agglomerations-IPC-2024 2026-01-27 2026-01-27
Échantillon d’agglomérations enquêtées de l’IPC en 2025 insee echantillon-agglomerations-IPC-2025 2026-01-27 2026-01-27
Indices pour la révision d’un bail commercial ou professionnel insee ILC-ILAT-ICC 2026-02-21 2026-02-21
Indices des loyers d'habitation (ILH) insee INDICES_LOYERS 2026-02-21 2026-02-21
Indice des prix à la consommation - Base 1970, 1980 insee IPC-1970-1980 2026-02-21 2026-02-21
Indices des prix à la consommation - Base 1990 insee IPC-1990 2026-02-21 2026-02-21
Indice des prix à la consommation - Base 2015 insee IPC-2015 2026-02-21 2026-02-21
Prix moyens de vente de détail insee IPC-PM-2015 2026-02-21 2026-02-21
Indices des prix à la consommation harmonisés insee IPCH-2015 2026-02-21 2026-02-21
Indices des prix à la consommation harmonisés insee IPCH-IPC-2015-ensemble 2026-02-21 2026-02-21
Indice des prix dans la grande distribution insee IPGD-2015 2026-02-21 2025-12-20
Indices des prix des logements neufs et Indices Notaires-Insee des prix des logements anciens insee IPLA-IPLNA-2015 2026-02-21 2026-02-21
Indices de prix de production et d'importation dans l'industrie insee IPPI-2015 2026-02-21 2026-02-21
Indice pour la révision d’un loyer d’habitation insee IRL 2026-01-08 2026-02-21
Liste des variétés pour la mesure de l'IPC en 2024 insee liste-varietes-IPC-2024 2026-01-27 2025-04-02
Liste des variétés pour la mesure de l'IPC en 2025 insee liste-varietes-IPC-2025 2026-01-27 2026-01-27
Pondérations élémentaires 2024 intervenant dans le calcul de l’IPC insee ponderations-elementaires-IPC-2024 2026-01-27 2025-04-02
Pondérations élémentaires 2025 intervenant dans le calcul de l’IPC insee ponderations-elementaires-IPC-2025 2026-01-27 2026-01-27
Variation des loyers insee SERIES_LOYERS 2026-02-21 2026-02-21
Consommation effective des ménages par fonction insee T_CONSO_EFF_FONCTION 2026-02-21 2025-12-22
Montants de consommation selon différentes catégories de ménages insee table_conso_moyenne_par_categorie_menages 2026-02-21 2026-01-27
Ventilation de chaque sous-classe (niveau 4 de la COICOP v2) en postes et leurs pondérations insee table_poste_au_sein_sous_classe_ecoicopv2_france_entiere_ 2026-02-21 2026-01-27
Poids de chaque tranche d’unités urbaines dans la consommation insee tranches_unitesurbaines 2026-02-21 2026-01-27

LAST_COMPILE

LAST_COMPILE
2026-02-21

LAST_UPDATE

Code
`IPC-2025` %>%
  group_by(LAST_UPDATE) %>%
  summarise(Nobs = n()) %>%
  arrange(desc(LAST_UPDATE)) %>%
  print_table_conditional()
LAST_UPDATE Nobs
2026-02-18 315417
2026-02-11 57088
2026-02-03 62451

Last

Code
`IPC-2025` %>%
  group_by(TIME_PERIOD, FREQ) %>%
  summarise(Nobs = n()) %>%
  group_by(FREQ) %>%
  filter(TIME_PERIOD == max(TIME_PERIOD)) %>%
  print_table_conditional()
TIME_PERIOD FREQ Nobs
2026 A 1457
2026-01 M 1116

Definitions

  • Moyenne annuelle: l’évolution en moyenne annuelle compare les prix d’une année donnée à ceux de l’année précédente.

  • Glissement annuel: l’évolution en glissement annuel compare les prix d’un seul mois d’une année donnée à ceux du même mois de l’année précédente.

Méthodo

  • Indice des prix à la consommation (base 100=1998) (pdf, fr, 44 Ko, 01/02/2013)
  • Indice des prix à la consommation des ménages du premier quintile de la distribution des niveaux de vie (pdf, fr, 119 Ko, 18/02/2013)
  • Indice des prix à la consommation (base 100=2015) (pdf, fr, 145 Ko, 29/01/2016)
  • Indice des prix à la consommation des ménages - base 100 en 2015 (pdf, fr, 955 Ko, 29/01/2016)
  • Pour comprendre l’indice des prix - Édition 1998 (pdf, fr, 1 Mo, 01/01/1999)
  • Indice des prix à la consommation des ménages - base 100 en 1998 (pdf, fr, 50 Ko, 01/01/1999)
  • Dossier d’information méthodologique. Indice des prix, pouvoir d’achat (pdf, fr, 229 Ko, 01/02/2004)

Documents de travail

  • L’IPC, miroir de l’évolution du coût de la vie en France ? - Ce qu’apporte l’analyse des courbes d’Engel. (pdf, fr, 615 Ko, 02/04/2010)
  • Calcul d’un indice des prix des produits de grande consommation dans la grande distribution (pdf, fr, 204 Ko, 01/01/2014)
  • Ce qui change pour l’IPC à partir du 29 janvier 2016 (pdf, fr, 129 Ko, 29/01/2016)
  • L’expérience française des indices de prix a la consommation (pdf, fr, 107 Ko, 01/01/1996) Indice des prix à la consommation CVS et indice hors tarifs publics et produits à prix volatils corrigé des mesures fiscales, CVS (pdf, fr, 71 Ko, 27/03/1996)
  • Indices mensuels des prix dans la grande distribution (pdf, fr, 126 Ko, 18/02/2016)
  • Contenu des groupes avec les fonctions, les regroupements et les groupes publiés dans la nouvelle base 1998 (pdf, fr, 42 Ko, 01/01/1999)
  • Comparaisons spatiales de prix au sein du territoire français (pdf, fr, 91 Ko, 01/12/2000)
  • Les indices à utilité constante : une référence pour mesurer l’évolution des prix (pdf, fr, 219 Ko, 01/12/2000)
  • La mesure des prix dans les domaines de la santé et de l’action sociale : quelques problèmes méthodologiques (pdf, fr, 212 Ko, 01/06/2003)
  • Indice des prix à la consommation en base 100 en 1998 - Séries longues rétropolées, de 1990 à 2002 (pdf, fr, 201 Ko, 01/09/2003)
  • Impact des ajustements de qualité dans le calcul de l’indice des prix à la consommation (pdf, fr, 53 Ko, 01/05/2004)
  • Introduction à la pratique des indices statistiques (pdf, fr, 426 Ko, 01/11/2005)
  • Note additionnelle sur les changements de l’année 2017 (pdf, fr, 228 Ko, 23/02/2017)

TEF 2020

Code
ig_b("insee", "TEF2020", "114-IPC-poids")

INDICATEUR

Code
`IPC-2025` %>%
  left_join(INDICATEUR,  by = "INDICATEUR") %>%
  group_by(INDICATEUR, Indicateur) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  print_table_conditional()
INDICATEUR Indicateur Nobs
IPC Indice des prix à la consommation (IPC) 434080
ISJ Indice d'inflation sous-jacente (ISJ) 876

PRIX_CONSO

Code
`IPC-2025` %>%
  left_join(PRIX_CONSO,  by = "PRIX_CONSO") %>%
  group_by(PRIX_CONSO, Prix_conso) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  print_table_conditional()

CORRECTION

Code
`IPC-2025` %>%
  left_join(CORRECTION,  by = "CORRECTION") %>%
  group_by(CORRECTION, Correction) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  print_table_conditional()
CORRECTION Correction Nobs
BRUT Non corrigé 432997
CVS Corrigé des variations saisonnières 1083
CVS-FISC Corrigé des mesures fiscales et des variations saisonnières 876

NATURE

Code
`IPC-2025` %>%
  left_join(NATURE,  by = "NATURE") %>%
  group_by(NATURE, Nature) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  print_table_conditional()
NATURE Nature Nobs
INDICE Indice 300790
VARIATIONS_M Variations mensuelles 48608
GLISSEMENT_ANNUEL Glissement annuel 47200
POND Pondérations d'indice 33886
VARIATIONS_A Variations annuelles 2727
CONTRIB_GLISSEMENT_ANNUEL NA 1745

FREQ

Code
`IPC-2025` %>%
  left_join(FREQ,  by = "FREQ") %>%
  group_by(FREQ, Freq) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  print_table_conditional()
FREQ Freq Nobs
M Monthly 366016
A Annual 68940

MENAGES_IPC

Code
`IPC-2025` %>%
  left_join(MENAGES_IPC,  by = "MENAGES_IPC") %>%
  group_by(MENAGES_IPC, Menages_ipc) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  print_table_conditional()

COICOP2018

All

Code
`IPC-2025` %>%
  left_join(COICOP2018,  by = "COICOP2018") %>%
  group_by(COICOP2018, Coicop2018) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  print_table_conditional()

2-digit

Code
`IPC-2025` %>%
  filter(nchar(COICOP2018) == 2) %>%
  left_join(COICOP2018,  by = "COICOP2018") %>%
  group_by(COICOP2018, Coicop2018) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  print_table_conditional()
COICOP2018 Coicop2018 Nobs
SO Sans objet 151312
00 00 - Ensemble 5703
01 01 - Produits alimentaires et boissons non alcoolisées 1000
02 02 - Boissons alcoolisées, tabac et stupéfiants 1000
03 03 - Articles d’habillement et chaussures 1000
04 04 - Logement, eau, gaz, électricité et autres combustibles 1000
05 05 - Meubles, articles de ménage et entretien courant du foyer 1000
06 06 - Santé 1000
07 07 - Transports 1000
08 08 - Information et communication 1000
09 09 - Loisirs, sport et culture 1000
10 10 - Services de l'enseignement 1000
11 11 - Services de restauration et d'hébergement 1000
12 12 - Assurance et services financiers 1000
13 13 - Soins corporels, protection sociale et biens et services divers 1000

3-digit

Code
`IPC-2025` %>%
  filter(nchar(COICOP2018) == 3) %>%
  left_join(COICOP2018,  by = "COICOP2018") %>%
  group_by(COICOP2018, Coicop2018) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  print_table_conditional()

4-digit

Code
`IPC-2025` %>%
  filter(nchar(COICOP2018) == 4) %>%
  left_join(COICOP2018,  by = "COICOP2018") %>%
  group_by(COICOP2018, Coicop2018) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  print_table_conditional()

5-digit

Code
`IPC-2025` %>%
  filter(nchar(COICOP2018) == 5) %>%
  left_join(COICOP2018,  by = "COICOP2018") %>%
  group_by(COICOP2018, Coicop2018) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  print_table_conditional()

6-digit

Code
`IPC-2025` %>%
  filter(nchar(COICOP2018) == 6) %>%
  left_join(COICOP2018,  by = "COICOP2018") %>%
  group_by(COICOP2018, Coicop2018) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  print_table_conditional()

TITLE_FR

Code
`IPC-2025` %>%
  group_by(TITLE_FR, IDBANK) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  print_table_conditional

REF_AREA

Code
`IPC-2025` %>%
  group_by(REF_AREA) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  print_table_conditional
REF_AREA Nobs
FE 253879
FM 91027
D973 21765
D971 21721
D972 21721
D974 21721
D976 3122

TIME_PERIOD

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

Depuis 2017

2-digit

Code
`IPC-2025` %>%
  filter(nchar(COICOP2018) == 2) %>%
  left_join(COICOP2018,  by = "COICOP2018") %>%
  group_by(COICOP2018, Coicop2018) %>%
  filter(FREQ == "M",
         TIME_PERIOD %in% c("2017-01", "2025-12"),
         COICOP2018 != "SO",
         MENAGES_IPC == "ENSEMBLE",
         NATURE == "INDICE",
         REF_AREA == "FE",
         PRIX_CONSO == "SO") %>%
  arrange(COICOP2018, Coicop2018) %>%
  select(TIME_PERIOD, OBS_VALUE) %>%
  spread(TIME_PERIOD, OBS_VALUE) %>%
  mutate(`%` = round(100*((`2025-12`/`2017-01`)-1), 1)) %>%
  arrange(- `%`) %>%
  print_table_conditional()
COICOP2018 Coicop2018 2017-01 2025-12 %
02 02 - Boissons alcoolisées, tabac et stupéfiants 65.19 99.96 53.3
01 01 - Produits alimentaires et boissons non alcoolisées 75.07 100.46 33.8
04 04 - Logement, eau, gaz, électricité et autres combustibles 77.46 100.10 29.2
12 12 - Assurance et services financiers 78.27 99.37 27.0
07 07 - Transports 80.06 99.90 24.8
11 11 - Services de restauration et d'hébergement 80.43 99.36 23.5
13 13 - Soins corporels, protection sociale et biens et services divers 83.25 100.44 20.6
00 00 - Ensemble 83.01 99.95 20.4
10 10 - Services de l'enseignement 84.05 100.93 20.1
03 03 - Articles d’habillement et chaussures 86.74 102.12 17.7
09 09 - Loisirs, sport et culture 85.51 99.16 16.0
05 05 - Meubles, articles de ménage et entretien courant du foyer 86.46 99.80 15.4
06 06 - Santé 104.17 99.61 -4.4
08 08 - Information et communication 126.75 99.60 -21.4

3-digit

Code
`IPC-2025` %>%
  filter(nchar(COICOP2018) == 3) %>%
  left_join(COICOP2018,  by = "COICOP2018") %>%
  group_by(COICOP2018, Coicop2018) %>%
  filter(FREQ == "M",
         TIME_PERIOD %in% c("2017-01", "2025-12"),
         COICOP2018 != "SO",
         MENAGES_IPC == "ENSEMBLE",
         NATURE == "INDICE",
         REF_AREA == "FE",
         PRIX_CONSO == "SO") %>%
  arrange(COICOP2018, Coicop2018) %>%
  select(TIME_PERIOD, OBS_VALUE) %>%
  spread(TIME_PERIOD, OBS_VALUE) %>%
  mutate(`%` = round(100*((`2025-12`/`2017-01`)-1), 1)) %>%
  arrange(- `%`) %>%
  print_table_conditional()

4-digit

Code
`IPC-2025` %>%
  filter(nchar(COICOP2018) == 4) %>%
  left_join(COICOP2018,  by = "COICOP2018") %>%
  group_by(COICOP2018, Coicop2018) %>%
  filter(FREQ == "M",
         TIME_PERIOD %in% c("2017-01", "2025-12"),
         COICOP2018 != "SO",
         MENAGES_IPC == "ENSEMBLE",
         NATURE == "INDICE",
         REF_AREA == "FE",
         PRIX_CONSO == "SO") %>%
  arrange(COICOP2018, Coicop2018) %>%
  select(TIME_PERIOD, OBS_VALUE) %>%
  spread(TIME_PERIOD, OBS_VALUE) %>%
  mutate(`%` = round(100*((`2025-12`/`2017-01`)-1), 1)) %>%
  arrange(- `%`) %>%
  print_table_conditional()

5-digit

Code
`IPC-2025` %>%
  filter(nchar(COICOP2018) == 5) %>%
  left_join(COICOP2018,  by = "COICOP2018") %>%
  group_by(COICOP2018, Coicop2018) %>%
  filter(FREQ == "M",
         TIME_PERIOD %in% c("2017-01", "2025-12"),
         COICOP2018 != "SO",
         MENAGES_IPC == "ENSEMBLE",
         NATURE == "INDICE",
         REF_AREA == "FE",
         PRIX_CONSO == "SO") %>%
  arrange(COICOP2018, Coicop2018) %>%
  select(TIME_PERIOD, OBS_VALUE) %>%
  spread(TIME_PERIOD, OBS_VALUE) %>%
  mutate(`%` = round(100*((`2025-12`/`2017-01`)-1), 1)) %>%
  arrange(- `%`) %>%
  print_table_conditional()

6-digit

Code
`IPC-2025` %>%
  filter(nchar(COICOP2018) == 6) %>%
  left_join(COICOP2018,  by = "COICOP2018") %>%
  group_by(COICOP2018, Coicop2018) %>%
  filter(FREQ == "A",
         TIME_PERIOD %in% c("2017", "2024"),
         COICOP2018 != "SO",
         MENAGES_IPC == "ENSEMBLE",
         NATURE == "INDICE",
         REF_AREA == "FE",
         PRIX_CONSO == "SO") %>%
  arrange(COICOP2018, Coicop2018) %>%
  select(TIME_PERIOD, OBS_VALUE) %>%
  spread(TIME_PERIOD, OBS_VALUE) %>%
  mutate(`%` = round(100*((`2024`/`2017`)-1), 1)) %>%
  arrange(- `%`) %>%
  print_table_conditional()

France Entiere (FE), France Métropolitaine (FM)

1990-

Code
`IPC-2025` %>%
  filter(INDICATEUR == "IPC",
         MENAGES_IPC == "ENSEMBLE",
         PRIX_CONSO %in% c("SO"),
         FREQ == "M",
         COICOP2018 %in% c("00"),
         REF_AREA %in% c("FE", "FM"),
         NATURE == "INDICE") %>%
  month_to_date %>%
  arrange(desc(date)) %>%
  group_by(REF_AREA) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot() + ylab("Indice des prix") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = REF_AREA)) +
  
  scale_x_date(breaks = seq(1920, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.75, 0.3),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(0, 200, 10),
                     labels = dollar_format(accuracy = 1, prefix = "")) +
  geom_text_repel(data = . %>%
              filter(date == max(date)), aes(x = date, y = OBS_VALUE, label = round(OBS_VALUE, 1)), size = 3)

1996-

Code
`IPC-2025` %>%
  filter(INDICATEUR == "IPC",
         MENAGES_IPC == "ENSEMBLE",
         PRIX_CONSO %in% c("SO"),
         FREQ == "M",
         COICOP2018 %in% c("00"),
         REF_AREA %in% c("FE", "FM"),
         NATURE == "INDICE") %>%
  month_to_date %>%
  filter(date >= as.Date("1996-01-01")) %>%
  arrange(desc(date)) %>%
  group_by(REF_AREA) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot() + ylab("Indice des prix") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = REF_AREA)) +
  
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.75, 0.3),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(0, 200, 10),
                     labels = dollar_format(accuracy = 1, prefix = "")) +
  geom_text_repel(data = . %>%
              filter(date == max(date)), aes(x = date, y = OBS_VALUE, label = round(OBS_VALUE, 1)), size = 3)

Alimentation, loyers, chauffage, Ensemble

2017-

Code
`IPC-2025` %>%
  filter(INDICATEUR == "IPC",
         COICOP2018 %in% c("041", "00", "01", "045"),
         FREQ == "M",
         REF_AREA == "FM",
         NATURE == "INDICE") %>%
  month_to_date %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  filter(date >= as.Date("2017-01-01")) %>%
  group_by(COICOP2018) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot() + ylab("Indice des prix") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Coicop2018)) +
  theme_minimal() + xlab("") + ylab("") +
  scale_x_date(breaks = "6 months",
               labels = date_format("%b %Y")) +
  theme(legend.position = c(0.35, 0.8),
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, vjust = 0.5, hjust=1)) +
  scale_y_log10(breaks = seq(100, 200, 5)) +
  geom_label(data = . %>%
              filter(date == max(date)), aes(x = date, y = OBS_VALUE, label = round(OBS_VALUE, 1), color = Coicop2018), size = 3)

Hausse sur 2 ans

Code
`IPC-2025` %>%
  filter(INDICATEUR == "IPC",
         COICOP2018 %in% c("041", "00", "01", "045"),
         FREQ == "M",
         REF_AREA == "FM",
         NATURE == "INDICE") %>%
  month_to_date %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  filter(date >= max(date) - years(2)) %>%
  group_by(COICOP2018) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot() + ylab("Indice des prix") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Coicop2018)) +
  theme_minimal() + xlab("") + ylab("") +
  scale_x_date(breaks = "1 month",
               labels = date_format("%b %Y")) +
  theme(legend.position = c(0.28, 0.87),
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, vjust = 0.5, hjust=1)) +
  scale_y_log10(breaks = seq(100, 130, 2),
                labels = paste0(seq(0, 30, 2), "%")) +
  geom_text_repel(data = . %>%
              filter(date == max(date)), aes(x = date, y = OBS_VALUE, label = round(OBS_VALUE, 1)), size = 3)

Par type de ménages

3 déciles

Code
`IPC-2025` %>%
  filter(MENAGES_IPC %in% c("D6-D7", "INF-D1", "D9-PLUS")) %>%
  left_join(MENAGES_IPC, by = "MENAGES_IPC") %>%
  year_to_date %>%
  group_by(MENAGES_IPC) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot + geom_line(aes(x = date, y = OBS_VALUE, color = Menages_ipc)) +
  theme_minimal() + xlab("") + ylab("") +
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.7, 0.2),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(0, 200, 5),
                     labels = dollar_format(accuracy = 1, prefix = "")) +
  geom_text_repel(data = . %>%
              filter(date == max(date)), aes(x = date, y = OBS_VALUE, label = round(OBS_VALUE, 1)), size = 3)

10 dixièmes

1998-

Code
`IPC-2025` %>%
  filter(MENAGES_IPC %in% c("INF-D1", "D1-D2", "D2-D3", "D3-D4", "D4-D5",
                            "D5-D6", "D6-D7", "D7-D8", "D8-D9", "D9-PLUS")) %>%
  left_join(MENAGES_IPC, by = "MENAGES_IPC") %>%
  year_to_date %>%
  group_by(MENAGES_IPC) %>%
  mutate(MENAGES_IPC = factor(MENAGES_IPC, levels = c("INF-D1", "D1-D2", "D2-D3", "D3-D4", "D4-D5",
                            "D5-D6", "D6-D7", "D7-D8", "D8-D9", "D9-PLUS"))) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot + geom_line(aes(x = date, y = OBS_VALUE, color = MENAGES_IPC)) +
  theme_minimal() + xlab("") + ylab("") +
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.25, 0.7),
        legend.title = element_blank()) +
  guides(color = guide_legend(ncol = 3)) +
  scale_y_log10(breaks = seq(0, 200, 5),
                     labels = dollar_format(accuracy = 1, prefix = ""))

2008-

Code
`IPC-2025` %>%
  filter(MENAGES_IPC %in% c("INF-D1", "D1-D2", "D2-D3", "D3-D4", "D4-D5",
                            "D5-D6", "D6-D7", "D7-D8", "D8-D9", "D9-PLUS")) %>%
  left_join(MENAGES_IPC, by = "MENAGES_IPC") %>%
  year_to_date %>%
  group_by(MENAGES_IPC) %>%
  mutate(MENAGES_IPC = factor(MENAGES_IPC,
                              levels = c("INF-D1", "D1-D2", "D2-D3", "D3-D4", "D4-D5",
                                         "D5-D6", "D6-D7", "D7-D8", "D8-D9", "D9-PLUS"))) %>%
  arrange(date) %>%
  filter(date >= as.Date("2008-01-01")) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot + geom_line(aes(x = date, y = OBS_VALUE, color = MENAGES_IPC)) +
  theme_minimal() + xlab("") + ylab("") +
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.25, 0.7),
        legend.title = element_blank()) +
  guides(color = guide_legend(ncol = 3)) +
  scale_y_log10(breaks = seq(0, 200, 2),
                     labels = dollar_format(accuracy = 1, prefix = ""))

1er quintile, Tous

All

Code
`IPC-2025` %>%
  filter(MENAGES_IPC %in% c("PREMIERQUINTILE", "ENSEMBLE"),
         FREQ == "M",
         PRIX_CONSO == "4018",
         REF_AREA == "FE",
         COICOP2018 == "SO",
         NATURE == "INDICE") %>%
  left_join(MENAGES_IPC, by = "MENAGES_IPC") %>%
  month_to_date %>%
  ggplot + geom_line(aes(x = date, y = OBS_VALUE, color = Menages_ipc)) +
  theme_minimal() + xlab("") + ylab("") +
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.7, 0.2),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(0, 200, 5),
                     labels = dollar_format(accuracy = 1, prefix = ""))

1998-

Code
`IPC-2025` %>%
  filter(MENAGES_IPC %in% c("PREMIERQUINTILE", "ENSEMBLE"),
         FREQ == "M",
         PRIX_CONSO == "4018",
         REF_AREA == "FE",
         COICOP2018 == "SO",
         NATURE == "INDICE") %>%
  left_join(MENAGES_IPC, by = "MENAGES_IPC") %>%
  month_to_date %>%
  filter(date >= as.Date("1998-01-01")) %>%
  group_by(MENAGES_IPC) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot + geom_line(aes(x = date, y = OBS_VALUE, color = Menages_ipc)) +
  theme_minimal() + xlab("") + ylab("") +
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.6, 0.2),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(0, 200, 5),
                     labels = dollar_format(accuracy = 1, prefix = ""))

2012-

Code
`IPC-2025` %>%
  filter(MENAGES_IPC %in% c("PREMIERQUINTILE", "ENSEMBLE"),
         FREQ == "M",
         PRIX_CONSO == "4018",
         REF_AREA == "FE",
         COICOP2018 == "SO",
         NATURE == "INDICE") %>%
  left_join(MENAGES_IPC, by = "MENAGES_IPC") %>%
  month_to_date %>%
  filter(date >= as.Date("2012-01-01")) %>%
  group_by(MENAGES_IPC) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot + geom_line(aes(x = date, y = OBS_VALUE, color = Menages_ipc)) +
  theme_minimal() + xlab("") + ylab("") +
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.4, 0.9),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(0, 200, 2),
                     labels = dollar_format(accuracy = 1, prefix = "")) +
  geom_text_repel(data = . %>%
              filter(date == max(date)), aes(x = date, y = OBS_VALUE, label = round(OBS_VALUE, 1)), size = 3)

Glissement sur 2 ans

Code
`IPC-2025` %>%
  filter(MENAGES_IPC %in% c("PREMIERQUINTILE", "ENSEMBLE"),
         FREQ == "M",
         PRIX_CONSO == "4018",
         REF_AREA == "FE",
         COICOP2018 == "SO",
         NATURE == "INDICE") %>%
  left_join(MENAGES_IPC, by = "MENAGES_IPC") %>%
  month_to_date %>%
  filter(date >= as.Date("2021-09-01")) %>%
  group_by(MENAGES_IPC) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot + geom_line(aes(x = date, y = OBS_VALUE, color = Menages_ipc)) +
  theme_minimal() + xlab("") + ylab("") +
  scale_x_date(breaks = "1 month",
               labels = date_format("%b %Y")) +
  theme(legend.position = c(0.65, 0.2),
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, vjust = 0.5, hjust=1)) +
  scale_y_log10(breaks = seq(0, 200, 1),
                     labels = dollar_format(accuracy = 1, prefix = "")) +
  geom_text_repel(aes(x = date, y = OBS_VALUE, label = round(OBS_VALUE, 1)), 
                  fontface ="plain", color = "black", size = 3)

Cadres, Ouvriers, Retraités

Code
`IPC-2025` %>%
  filter(MENAGES_IPC %in% c("CADRE", "OUVRIER", "RETRAITE", "ACTIF")) %>%
  left_join(MENAGES_IPC, by = "MENAGES_IPC") %>%
  year_to_date %>%
  group_by(MENAGES_IPC) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot + geom_line(aes(x = date, y = OBS_VALUE, color = Menages_ipc)) +
  theme_minimal() + xlab("") + ylab("") +
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.7, 0.2),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(0, 200, 5),
                     labels = dollar_format(accuracy = 1, prefix = "")) +
  geom_text_repel(data = . %>%
              filter(date == max(date)), aes(x = date, y = OBS_VALUE, label = round(OBS_VALUE, 1)), size = 3)

Inflation - Tous

Table - COICOP2018

Table - PRIX_CONSO

Code
`IPC-2025` %>%
  filter(INDICATEUR == "IPC",
         MENAGES_IPC == "ENSEMBLE",
         REF_AREA == "FE",
         NATURE == "INDICE",
         COICOP2018 == "SO",
         TIME_PERIOD %in% c("1990", "2000", "2010", "2020")) %>%
  left_join(COICOP2018,  by = "COICOP2018") %>%
  left_join(PRIX_CONSO,  by = "PRIX_CONSO") %>%
  select(PRIX_CONSO, Prix_conso, TIME_PERIOD, OBS_VALUE) %>%
  spread(TIME_PERIOD, OBS_VALUE) %>%
  print_table_conditional
PRIX_CONSO Prix_conso 2000 2010 2020
4000 Alimentation NaN 70.66 81.14
4001 Produits frais NaN 58.49 80.85
4002 Autres produits alimentaires NaN 72.94 81.19
4003 Produits manufacturés NaN 97.13 93.80
4004 Habillement, chaussures NaN 92.34 93.88
4005 Produits de santé NaN 138.22 106.24
4006 Autres produits manufacturés NaN 90.47 91.08
4007 Énergie NaN 59.21 72.08
4008 Produits pétroliers NaN 70.30 76.30
4009 Services NaN 78.29 88.67
4010 Services : Loyers, eau et enlèvement des ordures ménagères NaN 81.16 89.47
4011 Services : Services de santé NaN 92.68 98.63
4012 Services : Transports et communications NA 102.59 95.10
4013 Autres services NaN 71.44 85.61
4014 Alimentation, y compris tabac NaN 66.50 80.59
4015 Produits manufacturés, y compris énergie NaN 86.13 87.63
4017 Ensemble hors énergie NaN 80.37 88.12
4018 Ensemble hors tabac NaN 79.34 86.79
4023 Ensemble hors tabac et alcool NA 79.43 86.76
4024 Ensemble non alimentaire, y compris tabac NaN 79.92 87.73
4025 Ensemble hors produits frais NaN 78.87 86.73
4026 Alimentation, y compris restaurants, cantines, cafés NaN 70.89 82.26
4034 Tabac NA 40.71 76.25
4037 Biens durables NaN 93.28 91.41
4038 Produits manufacturés, hors habillement, biens durables et produits de santé NaN 87.77 90.89
4566 Services : Transports, communications, hôtellerie NA NA 86.19
5000 NA NA NA 86.43
5272 Services : Transports 60.83 74.05 79.68
5273 Services : Communications 161.17 149.44 119.44
5329 Produits manufacturés, hors habillement et chaussures NaN 98.31 93.95

Inflation par catégorie

Tabac, Loyers, Ensemble, Carburants

Code
`IPC-2025` %>%
  filter(COICOP2018 %in% c("00", "045", "022", "0722"),
         NATURE == "INDICE",
         REF_AREA == "FE",
         FREQ == "M",
         is.na(MENAGES_IPC) | MENAGES_IPC == "ENSEMBLE",
         is.na(PRIX_CONSO) | PRIX_CONSO == "SO") %>%
  month_to_date %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  group_by(COICOP2018) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = OBS_VALUE/lag(OBS_VALUE, 12)-1) %>%
  filter(date >= max(date) - years(2)) %>%
  select(date, OBS_VALUE, Coicop2018) %>%
  na.omit %>%
  ggplot() + ylab("Inflation sur un an (IPC, IPCH)") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Coicop2018)) +
  
  scale_x_date(breaks = "1 month",
               labels = date_format("%b %Y")) +
  theme(legend.position = c(0.72, 0.9),
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  scale_y_continuous(breaks = 0.01*seq(-100, 300, 5),
                     labels = percent_format(accuracy = 1, prefix = "")) +
  geom_text_repel(aes(x = date, y = OBS_VALUE, label = percent(OBS_VALUE, acc = 0.1)), 
                  fontface ="plain", color = "black", size = 3)

Tabac, Loyers, Ensemble

Glissement 1 an

Code
`IPC-2025` %>%
  filter(COICOP2018 %in% c("00", "01", "022"),
         NATURE == "INDICE",
         REF_AREA == "FE",
         FREQ == "M",
         is.na(MENAGES_IPC) | MENAGES_IPC == "ENSEMBLE",
         is.na(PRIX_CONSO) | PRIX_CONSO == "SO") %>%
  month_to_date %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  group_by(COICOP2018) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = OBS_VALUE/lag(OBS_VALUE, 12)-1) %>%
  filter(date >= max(date) - years(2)) %>%
  select(date, OBS_VALUE, Coicop2018) %>%
  na.omit %>%
  ggplot() + ylab("Inflation sur un an (IPC, IPCH)") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Coicop2018)) +
  
  scale_x_date(breaks = "1 month",
               labels = date_format("%b %Y")) +
  theme(legend.position = c(0.3, 0.9),
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  scale_y_continuous(breaks = 0.01*seq(-100, 300, 1),
                     labels = percent_format(accuracy = 1, prefix = "")) +
  geom_text_repel(aes(x = date, y = OBS_VALUE, label = percent(OBS_VALUE, acc = 0.1)), 
                  fontface ="plain", color = "black", size = 3)

Glissement 2 ans

Code
`IPC-2025` %>%
  filter(COICOP2018 %in% c("00", "01", "022"),
         NATURE == "INDICE",
         REF_AREA == "FE",
         FREQ == "M",
         is.na(MENAGES_IPC) | MENAGES_IPC == "ENSEMBLE",
         is.na(PRIX_CONSO) | PRIX_CONSO == "SO") %>%
  month_to_date %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  group_by(COICOP2018) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = OBS_VALUE/lag(OBS_VALUE, 24)-1) %>%
  filter(date >= max(date) - years(2)) %>%
  select(date, OBS_VALUE, Coicop2018) %>%
  na.omit %>%
  ggplot() + ylab("Glissement sur 2 ans (IPC, IPCH)") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Coicop2018)) +
  
  scale_x_date(breaks = "1 month",
               labels = date_format("%b %Y")) +
  theme(legend.position = c(0.3, 0.9),
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  scale_y_continuous(breaks = 0.01*seq(-100, 300, 1),
                     labels = percent_format(accuracy = 1, prefix = "")) +
  geom_text_repel(aes(x = date, y = OBS_VALUE, label = percent(OBS_VALUE, acc = 0.1)), 
                  fontface ="plain", color = "black", size = 3)

Alimentation, Loyers, Ensemble

Glissement 1 an

Code
`IPC-2025` %>%
  filter(COICOP2018 %in% c("00", "01", "041"),
         NATURE == "INDICE",
         REF_AREA == "FE",
         FREQ == "M",
         is.na(MENAGES_IPC) | MENAGES_IPC == "ENSEMBLE",
         is.na(PRIX_CONSO) | PRIX_CONSO == "SO") %>%
  month_to_date %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  group_by(COICOP2018) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = OBS_VALUE/lag(OBS_VALUE, 12)-1) %>%
  filter(date >= max(date) - years(2)) %>%
  select(date, OBS_VALUE, Coicop2018) %>%
  na.omit %>%
  ggplot() + ylab("Glissement sur 1 an (IPC, IPCH)") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Coicop2018)) +
  
  scale_x_date(breaks = "1 month",
               labels = date_format("%b %Y")) +
  theme(legend.position = c(0.3, 0.9),
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  scale_y_continuous(breaks = 0.01*seq(-100, 300, 1),
                     labels = percent_format(accuracy = 1, prefix = "")) +
  geom_text_repel(aes(x = date, y = OBS_VALUE, label = percent(OBS_VALUE, acc = 0.1)), 
                  fontface ="plain", color = "black", size = 3)

Glissement 2 ans

Code
`IPC-2025` %>%
  filter(COICOP2018 %in% c("00", "01", "041"),
         NATURE == "INDICE",
         REF_AREA == "FE",
         FREQ == "M",
         is.na(MENAGES_IPC) | MENAGES_IPC == "ENSEMBLE",
         is.na(PRIX_CONSO) | PRIX_CONSO == "SO") %>%
  month_to_date %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  group_by(COICOP2018) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = OBS_VALUE/lag(OBS_VALUE, 24)-1) %>%
  filter(date >= max(date) - years(2)) %>%
  select(date, OBS_VALUE, Coicop2018) %>%
  na.omit %>%
  ggplot() + ylab("Glissement sur 2 ans (IPC, IPCH)") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Coicop2018)) +
  
  scale_x_date(breaks = "1 month",
               labels = date_format("%b %Y")) +
  theme(legend.position = c(0.3, 0.9),
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  scale_y_continuous(breaks = 0.01*seq(-100, 300, 1),
                     labels = percent_format(accuracy = 1, prefix = "")) +
  geom_text_repel(aes(x = date, y = OBS_VALUE, label = percent(OBS_VALUE, acc = 0.1)), 
                  fontface ="plain", color = "black", size = 3)

Chauffage du logement, Loyers, Ensemble

Glissement 1 an

Code
`IPC-2025` %>%
  filter(COICOP2018 %in% c("00", "041", "045"),
         NATURE == "INDICE",
         REF_AREA == "FE",
         FREQ == "M",
         is.na(MENAGES_IPC) | MENAGES_IPC == "ENSEMBLE",
         is.na(PRIX_CONSO) | PRIX_CONSO == "SO") %>%
  month_to_date %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  group_by(COICOP2018) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = OBS_VALUE/lag(OBS_VALUE, 12)-1) %>%
  filter(date >= max(date) - years(2)) %>%
  select(date, OBS_VALUE, Coicop2018) %>%
  na.omit %>%
  ggplot() + ylab("Inflation sur un an (IPC, IPCH)") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Coicop2018)) +
  
  scale_x_date(breaks = "1 month",
               labels = date_format("%b %Y")) +
  theme(legend.position = c(0.4, 0.45),
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  scale_y_continuous(breaks = 0.01*seq(-100, 300, 2),
                     labels = percent_format(accuracy = 1, prefix = "")) +
  geom_text_repel(aes(x = date, y = OBS_VALUE, label = percent(OBS_VALUE, acc = 0.1)), 
                  fontface ="plain", color = "black", size = 3)

Glissement 2 ans

Code
`IPC-2025` %>%
  filter(COICOP2018 %in% c("00", "041", "045"),
         NATURE == "INDICE",
         REF_AREA == "FE",
         FREQ == "M",
         is.na(MENAGES_IPC) | MENAGES_IPC == "ENSEMBLE",
         is.na(PRIX_CONSO) | PRIX_CONSO == "SO") %>%
  month_to_date %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  group_by(COICOP2018) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = OBS_VALUE/lag(OBS_VALUE, 24)-1) %>%
  filter(date >= max(date) - years(2)) %>%
  select(date, OBS_VALUE, Coicop2018) %>%
  na.omit %>%
  ggplot() + ylab("Glissement sur 2 ans (IPC, IPCH)") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Coicop2018)) +
  
  scale_x_date(breaks = "1 month",
               labels = date_format("%b %Y")) +
  theme(legend.position = c(0.4, 0.45),
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  scale_y_continuous(breaks = 0.01*seq(-100, 300, 2),
                     labels = percent_format(accuracy = 1, prefix = "")) +
  geom_text_repel(aes(x = date, y = OBS_VALUE, label = percent(OBS_VALUE, acc = 0.1)), 
                  fontface ="plain", color = "black", size = 3)

Pondérations d’indice

Table - COICOP2018

All

Code
`IPC-2025` %>%
  filter(INDICATEUR == "IPC",
         MENAGES_IPC == "ENSEMBLE",
         REF_AREA == "FE",
         NATURE == "POND",
         PRIX_CONSO == "SO",
         CORRECTION == "BRUT",
         TIME_PERIOD %in% c("1990", "2000", "2010", "2020")) %>%
  left_join(COICOP2018,  by = "COICOP2018") %>%
  select(COICOP2018, Coicop2018, TIME_PERIOD, OBS_VALUE) %>%
  spread(TIME_PERIOD, OBS_VALUE) %>%
  print_table_conditional

2-digit

Javascript

Code
`IPC-2025` %>%
  filter(INDICATEUR == "IPC",
         MENAGES_IPC == "ENSEMBLE",
         REF_AREA == "FE",
         NATURE == "POND",
         PRIX_CONSO == "SO",
         TIME_PERIOD %in% c("1990", "2000", "2010", "2020"),
         nchar(COICOP2018) == 2) %>%
  left_join(COICOP2018,  by = "COICOP2018") %>%
  select(COICOP2018, Coicop2018, TIME_PERIOD, OBS_VALUE) %>%
  spread(TIME_PERIOD, OBS_VALUE) %>%
  print_table_conditional
COICOP2018 Coicop2018 2000 2010 2020
00 00 - Ensemble 10000 10000 10000
01 01 - Produits alimentaires et boissons non alcoolisées 1557 1477 1422
02 02 - Boissons alcoolisées, tabac et stupéfiants 382 329 391
03 03 - Articles d’habillement et chaussures 545 481 383
04 04 - Logement, eau, gaz, électricité et autres combustibles 1381 1362 1427
05 05 - Meubles, articles de ménage et entretien courant du foyer 633 602 482
06 06 - Santé 898 1004 1053
07 07 - Transports 1711 1672 1606
08 08 - Information et communication 431 522 390
09 09 - Loisirs, sport et culture 657 680 700
10 10 - Services de l'enseignement 23 25 5
11 11 - Services de restauration et d'hébergement 804 683 810
12 12 - Assurance et services financiers 236 285 352
13 13 - Soins corporels, protection sociale et biens et services divers 742 878 979

3-digit

Javascript

Code
`IPC-2025` %>%
  filter(INDICATEUR == "IPC",
         MENAGES_IPC == "ENSEMBLE",
         REF_AREA == "FE",
         NATURE == "POND",
         PRIX_CONSO == "SO",
         CORRECTION == "BRUT",
         TIME_PERIOD %in% c("1990", "2000", "2010", "2020"),
         nchar(COICOP2018) == 3) %>%
  left_join(COICOP2018,  by = "COICOP2018") %>%
  select(COICOP2018, Coicop2018, TIME_PERIOD, OBS_VALUE) %>%
  spread(TIME_PERIOD, OBS_VALUE) %>%
  print_table_conditional

4-digit

Code
`IPC-2025` %>%
  filter(INDICATEUR == "IPC",
         MENAGES_IPC == "ENSEMBLE",
         REF_AREA == "FE",
         NATURE == "POND",
         PRIX_CONSO == "SO",
         CORRECTION == "BRUT",
         TIME_PERIOD %in% c("1990", "2000", "2010", "2020"),
         nchar(COICOP2018) == 4) %>%
  left_join(COICOP2018,  by = "COICOP2018") %>%
  select(COICOP2018, Coicop2018, TIME_PERIOD, OBS_VALUE) %>%
  spread(TIME_PERIOD, OBS_VALUE) %>%
  print_table_conditional

5-digit

Code
`IPC-2025` %>%
  filter(INDICATEUR == "IPC",
         MENAGES_IPC == "ENSEMBLE",
         REF_AREA == "FE",
         NATURE == "POND",
         PRIX_CONSO == "SO",
         CORRECTION == "BRUT",
         TIME_PERIOD %in% c("1990", "2000", "2010", "2020"),
         nchar(COICOP2018) == 5) %>%
  left_join(COICOP2018,  by = "COICOP2018") %>%
  select(COICOP2018, Coicop2018, TIME_PERIOD, OBS_VALUE) %>%
  spread(TIME_PERIOD, OBS_VALUE) %>%
  print_table_conditional

Table - PRIX_CONSO

1990, 2000, 2010, 2020

Code
`IPC-2025` %>%
  filter(INDICATEUR == "IPC",
         MENAGES_IPC == "ENSEMBLE",
         REF_AREA == "FE",
         NATURE == "POND",
         CORRECTION == "BRUT",
         COICOP2018 == "SO",
         TIME_PERIOD %in% c("1990", "2000", "2010", "2020")) %>%
  left_join(COICOP2018,  by = "COICOP2018") %>%
  left_join(PRIX_CONSO,  by = "PRIX_CONSO") %>%
  select(PRIX_CONSO, Prix_conso, TIME_PERIOD, OBS_VALUE) %>%
  spread(TIME_PERIOD, OBS_VALUE) %>%
  print_table_conditional
PRIX_CONSO Prix_conso 2000 2010 2020
4000 Alimentation 1745 1625 1610
4001 Produits frais 222 195 230
4002 Autres produits alimentaires 1523 1430 1380
4003 Produits manufacturés 3056 3110 2491
4004 Habillement, chaussures 531 470 380
4005 Produits de santé 375 476 412
4006 Autres produits manufacturés 2150 2164 1699
4007 Énergie 776 730 808
4008 Produits pétroliers 480 428 439
4009 Services 4226 4360 4886
4010 Services : Loyers, eau et enlèvement des ordures ménagères 780 759 752
4011 Services : Services de santé 506 521 604
4012 Services : Transports et communications 474 533 515
4013 Autres services 2466 2547 3015
4014 Alimentation, y compris tabac 1942 1800 1815
4015 Produits manufacturés, y compris énergie 3832 3839 3311
4017 Ensemble hors énergie 9224 9270 9192
4018 Ensemble hors tabac 9803 9825 9795
4023 Ensemble hors tabac et alcool 9618 9670 NaN
4024 Ensemble non alimentaire, y compris tabac 8255 8375 8390
4025 Ensemble hors produits frais 9743 9762 9790
4026 Alimentation, y compris restaurants, cantines, cafés 2379 2150 2239
4034 Tabac 197 175 205
4037 Biens durables NA NA 730
4038 Produits manufacturés, hors habillement, biens durables et produits de santé NA NA 975
4566 Services : Transports, communications, hôtellerie NA NA 2440
5000 NA NA NA 9185
5272 Services : Transports 229 244 300
5273 Services : Communications 245 289 215
5329 Produits manufacturés, hors habillement et chaussures 2525 2640 2111

2016, 2017, 2018, 2019, 2020

Code
`IPC-2025` %>%
  filter(INDICATEUR == "IPC",
         MENAGES_IPC == "ENSEMBLE",
         REF_AREA == "FE",
         NATURE == "POND",
         CORRECTION == "BRUT",
         COICOP2018 == "SO",
         TIME_PERIOD %in% c("2016", "2017", "2018", "2019", "2020")) %>%
  left_join(COICOP2018,  by = "COICOP2018") %>%
  left_join(PRIX_CONSO,  by = "PRIX_CONSO") %>%
  select(PRIX_CONSO, Prix_conso, TIME_PERIOD, OBS_VALUE) %>%
  spread(TIME_PERIOD, OBS_VALUE) %>%
  print_table_conditional()
PRIX_CONSO Prix_conso 2016 2017 2018 2019 2020
4000 Alimentation 1615 1627 1627 1619 1610
4001 Produits frais 217 235 243 244 230
4002 Autres produits alimentaires 1398 1392 1384 1375 1380
4003 Produits manufacturés 2651 2617 2594 2556 2491
4004 Habillement, chaussures 414 433 416 400 380
4005 Produits de santé 466 433 425 416 412
4006 Autres produits manufacturés 1771 1751 1753 1740 1699
4007 Énergie 773 748 777 804 808
4008 Produits pétroliers 419 378 408 425 439
4009 Services 4766 4820 4809 4830 4886
4010 Services : Loyers, eau et enlèvement des ordures ménagères 768 779 764 746 752
4011 Services : Services de santé 598 600 617 604 604
4012 Services : Transports et communications 524 524 505 504 515
4013 Autres services 2876 2917 2923 2976 3015
4014 Alimentation, y compris tabac 1810 1815 1820 1810 1815
4015 Produits manufacturés, y compris énergie 3434 3375 3382 3371 3311
4017 Ensemble hors énergie 9227 9252 9223 9196 9192
4018 Ensemble hors tabac 9805 9812 9807 9809 9795
4023 Ensemble hors tabac et alcool NaN NaN NaN NaN NaN
4024 Ensemble non alimentaire, y compris tabac 8385 8373 8373 8381 8390
4025 Ensemble hors produits frais 9798 9785 9776 9777 9790
4026 Alimentation, y compris restaurants, cantines, cafés 2185 2214 2229 2238 2239
4034 Tabac 195 188 193 191 205
4037 Biens durables 745 739 753 755 730
4038 Produits manufacturés, hors habillement, biens durables et produits de santé 1033 1019 1005 990 975
4566 Services : Transports, communications, hôtellerie 2304 2289 2359 2403 2440
5000 NA 9183 9183 9192 9208 9185
5272 Services : Transports 279 282 282 285 300
5273 Services : Communications 245 242 223 219 215
5329 Produits manufacturés, hors habillement et chaussures 2237 2184 2178 2156 2111

Alimentation, Produits alimentaires

Code
`IPC-2025` %>%
  filter(INDICATEUR == "IPC",
         MENAGES_IPC == "ENSEMBLE",
         COICOP2018 %in% c("01", "011"),
         REF_AREA == "FE",
         NATURE == "POND") %>%
  year_to_date %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  mutate(OBS_VALUE = OBS_VALUE/10000) %>%
  ggplot() + ylab("Poids de l'alimentation dans l'indice des prix") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Coicop2018)) +
  scale_x_date(breaks = seq(1920, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.65, 0.9),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = 0.01*seq(0, 40, 0.5),
                     labels = percent_format(accuracy = .1))

Santé

Code
`IPC-2025` %>%
  filter(INDICATEUR == "IPC",
         MENAGES_IPC == "ENSEMBLE",
         COICOP2018 %in% c("06"),
         REF_AREA == "FE",
         NATURE == "POND") %>%
  year_to_date %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  mutate(OBS_VALUE = OBS_VALUE/10000) %>%
  ggplot() + ylab("Poids de la santé dans l'indice des prix") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE)) +
  
  scale_x_date(breaks = seq(1920, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(0, 20, 0.5),
                     labels = percent_format(accuracy = .1))

Logement total

Code
`IPC-2025` %>%
  filter(INDICATEUR == "IPC",
         MENAGES_IPC == "ENSEMBLE",
         COICOP2018 %in% c("04", "041"),
         REF_AREA == "FE",
         NATURE == "POND") %>%
  year_to_date %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  mutate(OBS_VALUE = OBS_VALUE/10000) %>%
  ggplot() + ylab("Poids du logement dans l'indice des prix IPC") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Coicop2018)) +
  
  scale_x_date(breaks = seq(1920, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.4, 0.9),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = 0.01*seq(0, 20, 0.5),
                     labels = percent_format(accuracy = .1))

Santé, Assurance santé complémentaire

All

Code
`IPC-2025` %>%
  filter(INDICATEUR == "IPC",
         MENAGES_IPC == "ENSEMBLE",
         COICOP2018 %in% c("06", "1253"),
         REF_AREA == "FE",
         NATURE == "POND") %>%
  year_to_date %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  mutate(OBS_VALUE = OBS_VALUE/10000) %>%
  ggplot() + ylab("Poids de la santé dans l'indice des prix") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Coicop2018)) +
  scale_color_manual(values = viridis(2)[1:2]) +
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.15, 0.9),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = 0.01*seq(0, 20, 0.5),
                     labels = percent_format(accuracy = .1))

1996-

Code
`IPC-2025` %>%
  filter(INDICATEUR == "IPC",
         MENAGES_IPC == "ENSEMBLE",
         COICOP2018 %in% c("06", "1253"),
         REF_AREA == "FE",
         NATURE == "POND") %>%
  year_to_date %>%
  filter(date >= as.Date("1996-01-01")) %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  mutate(OBS_VALUE = OBS_VALUE/10000) %>%
  ggplot() + ylab("Poids de la santé dans l'indice des prix") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Coicop2018)) +
  scale_color_manual(values = viridis(2)[1:2]) +
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.15, 0.9),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = 0.01*seq(0, 20, 0.5),
                     labels = percent_format(accuracy = .1))

Santé

Santé, Assurance Santé vs. Ensemble

1990-

Code
`IPC-2025` %>%
  filter(INDICATEUR == "IPC",
         MENAGES_IPC == "ENSEMBLE",
         PRIX_CONSO == "SO",
         COICOP2018 %in% c("06", "1253", "00"),
         FREQ == "M",
         REF_AREA == "FE",
         NATURE == "INDICE") %>%
  month_to_date %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  group_by(Coicop2018) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot() + ylab("Indice des prix") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Coicop2018)) +
  
  scale_x_date(breaks = seq(1920, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.15, 0.9),
        legend.title = element_blank()) +
  scale_y_log10(breaks = c(100, 164, 200, 400, 816, seq(100, 180, 10)),
                     labels = dollar_format(accuracy = 1, prefix = ""))

1996-

Code
`IPC-2025` %>%
  filter(INDICATEUR == "IPC",
         MENAGES_IPC == "ENSEMBLE",
         PRIX_CONSO == "SO",
         COICOP2018 %in% c("06", "1253", "00"),
         FREQ == "M",
         REF_AREA == "FE",
         NATURE == "INDICE") %>%
  month_to_date %>%
  filter(date >= as.Date("1996-01-01")) %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  group_by(Coicop2018) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot() + ylab("Indice des prix, IPC") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Coicop2018)) +
  
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.15, 0.9),
        legend.title = element_blank()) +
  scale_y_log10(breaks = c(100, 164, 200, 400, 816, seq(100, 180, 10)),
                     labels = dollar_format(accuracy = 1, prefix = ""))

Péages

Péages vs. Ensemble

1990-

Code
`IPC-2025` %>%
  filter(INDICATEUR == "IPC",
         MENAGES_IPC == "ENSEMBLE",
         PRIX_CONSO == "SO",
         COICOP2018 %in% c("07242", "0724", "00"),
         FREQ == "M",
         REF_AREA == "FE",
         NATURE == "INDICE") %>%
  month_to_date %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  group_by(Coicop2018) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot() + ylab("Indice des prix") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Coicop2018)) +
  
  scale_x_date(breaks = seq(1920, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.35, 0.9),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(100, 400, 10),
                     labels = dollar_format(accuracy = 1, prefix = ""))

1996-

Code
`IPC-2025` %>%
  filter(INDICATEUR == "IPC",
         MENAGES_IPC == "ENSEMBLE",
         PRIX_CONSO == "SO",
         COICOP2018 %in% c("07242", "0724", "00"),
         FREQ == "M",
         REF_AREA == "FE",
         NATURE == "INDICE") %>%
  month_to_date %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  filter(date >= as.Date("1996-01-01")) %>%
  group_by(Coicop2018) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot() + ylab("Indice des prix") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Coicop2018)) +
  
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.35, 0.9),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(100, 400, 10),
                     labels = dollar_format(accuracy = 1, prefix = ""))

Pondération des péages, services divers dans l’IPC

1990-

Code
`IPC-2025` %>%
  filter(INDICATEUR == "IPC",
         MENAGES_IPC == "ENSEMBLE",
         COICOP2018 %in% c("07242", "0724"),
         REF_AREA == "FE",
         NATURE == "POND") %>%
  year_to_date %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  mutate(OBS_VALUE = OBS_VALUE/10000) %>%
  ggplot() + ylab("Poids des péages dans l'indice des prix") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Coicop2018)) +
  
  theme(legend.position = c(0.35, 0.9),
        legend.title = element_blank()) +
  scale_x_date(breaks = seq(1920, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(0, 10, 0.1),
                     labels = percent_format(accuracy = .1),
                     limits = c(0, 0.016))

1996-

Code
`IPC-2025` %>%
  filter(INDICATEUR == "IPC",
         MENAGES_IPC == "ENSEMBLE",
         COICOP2018 %in% c("07242", "0724"),
         REF_AREA == "FE",
         NATURE == "POND") %>%
  year_to_date %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  mutate(OBS_VALUE = OBS_VALUE/10000) %>%
  filter(date >= as.Date("1996-01-01")) %>%
  ggplot() + ylab("Poids des péages dans l'indice des prix") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Coicop2018)) +
  
  theme(legend.position = c(0.35, 0.9),
        legend.title = element_blank()) +
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(0, 10, 0.1),
                     labels = percent_format(accuracy = .1),
                     limits = c(0, 0.016))

Services à domicile

Services à domicile vs. Ensemble

1998-

Code
`IPC-2025` %>%
  filter(INDICATEUR == "IPC",
         MENAGES_IPC == "ENSEMBLE",
         PRIX_CONSO == "SO",
         COICOP2018 %in% c("05621", "00"),
         FREQ == "M",
         REF_AREA == "FE",
         NATURE == "INDICE") %>%
  month_to_date %>%
  filter(date >= as.Date("1998-01-01")) %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  group_by(Coicop2018) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot() + ylab("Indice des prix") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Coicop2018)) +
  
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.35, 0.9),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(100, 200, 10),
                     labels = dollar_format(accuracy = 1, prefix = ""))

Tabac

Tabac vs. Ensemble

1990-

Code
`IPC-2025` %>%
  filter(INDICATEUR == "IPC",
         MENAGES_IPC == "ENSEMBLE",
         PRIX_CONSO %in% c("SO"),
         COICOP2018 %in% c("022", "00"),
         FREQ == "M",
         REF_AREA == "FE",
         NATURE == "INDICE") %>%
  month_to_date %>%
  arrange(date) %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  group_by(Coicop2018) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot() + ylab("Indice des prix") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Coicop2018)) +
  
  scale_x_date(breaks = seq(1920, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.15, 0.9),
        legend.title = element_blank()) +
  scale_y_log10(breaks = c(100, 164, 200, 400, 600, 800, 1000),
                     labels = dollar_format(accuracy = 1, prefix = "")) +
  geom_text(data = . %>%
              filter(date == max(date)), aes(x = date, y = OBS_VALUE, label = round(OBS_VALUE, 1)), size = 3)

1992-2022

Code
`IPC-2025` %>%
  filter(INDICATEUR == "IPC",
         MENAGES_IPC == "ENSEMBLE",
         PRIX_CONSO == "SO",
         COICOP2018 %in% c("022", "00"),
         FREQ == "M",
         REF_AREA == "FE",
         NATURE == "INDICE") %>%
  month_to_date %>%
  arrange(date) %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  group_by(Coicop2018) %>%
  arrange(date) %>%
  filter(date >= as.Date("1992-01-01"),
         date <= as.Date("2022-01-01")) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  mutate(Coicop2018 = factor(Coicop2018, levels = c("02.2 - Tabac", "00 - Ensemble"), labels = c("Tabac", "Ensemble de l'IPC"))) %>%
  ggplot() + ylab("Indice des prix (100 = Janvier 1992)") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Coicop2018), size = 1) +
  
  scale_x_date(breaks = seq(1992, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_color_manual(values = viridis(3)[1:2]) +
  theme(legend.position = c(0.15, 0.9),
        legend.title = element_blank()) +
  scale_y_log10(breaks = c(100, 200, 400, 600, 800, 1000),
                     labels = dollar_format(accuracy = 1, prefix = "")) +
  geom_label(data = . %>%
              filter(date == max(date)), aes(x = date, y = OBS_VALUE, label = round(OBS_VALUE, 1), color = Coicop2018), size = 4, show.legend = F)

1992-

Code
`IPC-2025` %>%
  filter(INDICATEUR == "IPC",
         MENAGES_IPC == "ENSEMBLE",
         COICOP2018 %in% c("022", "00"),
         FREQ == "M",
         PRIX_CONSO == "SO",
         REF_AREA == "FE",
         NATURE == "INDICE") %>%
  month_to_date %>%
  filter(date >= as.Date("1992-01-01")) %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  group_by(Coicop2018) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot() + ylab("Indice des prix") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Coicop2018)) +
  
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.25, 0.8),
        legend.title = element_blank()) +
  scale_y_log10(breaks = c(100, 164, 200, 400, 816),
                     labels = dollar_format(accuracy = 1, prefix = "")) +
  geom_text(data = . %>%
              filter(date == max(date)), aes(x = date, y = OBS_VALUE, label = round(OBS_VALUE, 1), color = Coicop2018), size = 3, show.legend = F)

1996-

Code
`IPC-2025` %>%
  filter(INDICATEUR == "IPC",
         MENAGES_IPC == "ENSEMBLE",
         COICOP2018 %in% c("022", "00"),
         FREQ == "M",
         PRIX_CONSO == "SO",
         REF_AREA == "FE",
         NATURE == "INDICE") %>%
  month_to_date %>%
  filter(date >= as.Date("1996-01-01")) %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  group_by(Coicop2018) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot() + ylab("Indice des prix") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Coicop2018)) +
  
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.25, 0.8),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(100, 1000, 100),
                     labels = dollar_format(accuracy = 1, prefix = "")) +
  geom_text(data = . %>%
              filter(date == max(date)), aes(x = date, y = OBS_VALUE, label = round(OBS_VALUE, 1), color = Coicop2018), size = 3, show.legend = F)

2000-

Code
`IPC-2025` %>%
  filter(INDICATEUR == "IPC",
         MENAGES_IPC == "ENSEMBLE",
         COICOP2018 %in% c("022", "00"),
         FREQ == "M",
         PRIX_CONSO == "SO",
         REF_AREA == "FE",
         NATURE == "INDICE") %>%
  month_to_date %>%
  filter(date >= as.Date("2000-01-01")) %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  group_by(Coicop2018) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot() + ylab("Indice des prix") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Coicop2018)) +
  
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.25, 0.8),
        legend.title = element_blank()) +
  scale_y_log10(breaks = c(seq(0, 100, 20), seq(0, 1000, 50)),
                     labels = dollar_format(accuracy = 1, prefix = "")) +
  geom_text(data = . %>%
              filter(date == max(date)), aes(x = date, y = OBS_VALUE, label = round(OBS_VALUE, 1), color = Coicop2018), size = 3, show.legend = F)

2012-

Code
`IPC-2025` %>%
  filter(INDICATEUR == "IPC",
         MENAGES_IPC == "ENSEMBLE",
         COICOP2018 %in% c("022", "00"),
         FREQ == "M",
         PRIX_CONSO == "SO",
         REF_AREA == "FE",
         NATURE == "INDICE") %>%
  month_to_date %>%
  filter(date >= as.Date("2012-01-01")) %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  group_by(Coicop2018) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot() + ylab("Indice des prix") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Coicop2018)) +
  
  scale_x_date(breaks = seq(1920, 2100, 1) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.25, 0.8),
        legend.title = element_blank()) +
  scale_y_log10(breaks = c(seq(0, 100, 10), seq(0, 1000, 10)),
                     labels = dollar_format(accuracy = 1, prefix = "")) +
  geom_text(data = . %>%
              filter(date == max(date)), aes(x = date, y = OBS_VALUE, label = round(OBS_VALUE, 1), color = Coicop2018), size = 3, show.legend = F)

2017-

Code
`IPC-2025` %>%
  filter(INDICATEUR == "IPC",
         MENAGES_IPC == "ENSEMBLE",
         COICOP2018 %in% c("022", "00"),
         FREQ == "M",
         PRIX_CONSO == "SO",
         REF_AREA == "FE",
         NATURE == "INDICE") %>%
  month_to_date %>%
  filter(date >= as.Date("2017-01-01")) %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  group_by(Coicop2018) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot() + ylab("Indice des prix") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Coicop2018)) +
  
  scale_x_date(breaks = seq(1920, 2100, 1) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.25, 0.8),
        legend.title = element_blank()) +
  scale_y_log10(breaks = c(seq(0, 100, 10), seq(0, 1000, 10)),
                     labels = dollar_format(accuracy = 1, prefix = "")) +
  geom_label(data = . %>%
              filter(date == max(date)), aes(x = date, y = OBS_VALUE, label = round(OBS_VALUE, 1), color = Coicop2018), size = 3, show.legend = F)

Tabac, Alcool

2017-

Code
`IPC-2025` %>%
  filter(INDICATEUR == "IPC",
         MENAGES_IPC == "ENSEMBLE",
         COICOP2018 %in% c("022", "00", "021"),
         FREQ == "M",
         PRIX_CONSO == "SO",
         REF_AREA == "FE",
         NATURE == "INDICE") %>%
  month_to_date %>%
  filter(date >= as.Date("2017-01-01")) %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  group_by(Coicop2018) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot() + ylab("Indice des prix") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Coicop2018)) +
  
  scale_x_date(breaks = seq(1920, 2100, 1) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.25, 0.8),
        legend.title = element_blank()) +
  scale_y_log10(breaks = c(seq(0, 100, 10), seq(0, 1000, 10)),
                     labels = dollar_format(accuracy = 1, prefix = "")) +
  geom_label_repel(data = . %>%
              filter(date == max(date)), aes(x = date, y = OBS_VALUE, label = round(OBS_VALUE, 1), color = Coicop2018), size = 3, show.legend = F)

Ensemble avec Tabac (IdBank: 001763852, 001759970)

1992-

Code
`IPC-2025` %>%
  filter(INDICATEUR == "IPC",
         MENAGES_IPC == "ENSEMBLE",
         PRIX_CONSO %in% c("4035", "4018", "00"),
         FREQ == "M",
         REF_AREA == "FE",
         NATURE == "INDICE") %>%
  month_to_date %>%
  filter(date >= as.Date("1992-01-01")) %>%
  left_join(PRIX_CONSO, by = "PRIX_CONSO") %>%
  group_by(Prix_conso) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot() + ylab("Indice des prix") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Prix_conso)) +
  
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.75, 0.3),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(0, 200, 10),
                     labels = dollar_format(accuracy = 1, prefix = "")) +
  geom_text_repel(data = . %>%
              filter(date == max(date)), aes(x = date, y = OBS_VALUE, label = round(OBS_VALUE, 1)), size = 3)

1996-

Code
`IPC-2025` %>%
  filter(INDICATEUR == "IPC",
         MENAGES_IPC == "ENSEMBLE",
         PRIX_CONSO %in% c("4035", "4018", "00"),
         FREQ == "M",
         REF_AREA == "FE",
         NATURE == "INDICE") %>%
  month_to_date %>%
  filter(date >= as.Date("1996-01-01")) %>%
  left_join(PRIX_CONSO, by = "PRIX_CONSO") %>%
  group_by(Prix_conso) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot() + ylab("Indice des prix") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Prix_conso)) +
  
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.75, 0.3),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(0, 200, 10),
                     labels = dollar_format(accuracy = 1, prefix = "")) +
  geom_text_repel(data = . %>%
              filter(date == max(date)), aes(x = date, y = OBS_VALUE, label = round(OBS_VALUE, 1)), size = 3)

2000-

Code
`IPC-2025` %>%
  filter(INDICATEUR == "IPC",
         MENAGES_IPC == "ENSEMBLE",
         PRIX_CONSO %in% c("4035", "4018", "00"),
         FREQ == "M",
         REF_AREA == "FE",
         NATURE == "INDICE") %>%
  month_to_date %>%
  filter(date >= as.Date("2000-01-01")) %>%
  left_join(PRIX_CONSO, by = "PRIX_CONSO") %>%
  group_by(Prix_conso) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot() + ylab("Indice des prix") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Prix_conso)) +
  
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.75, 0.3),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(0, 200, 5),
                     labels = dollar_format(accuracy = 1, prefix = "")) +
  geom_text_repel(data = . %>%
              filter(date == max(date)), aes(x = date, y = OBS_VALUE, label = round(OBS_VALUE, 1)), size = 3)

2012-

Code
`IPC-2025` %>%
  filter(INDICATEUR == "IPC",
         MENAGES_IPC == "ENSEMBLE",
         PRIX_CONSO %in% c("4035", "4018", "00"),
         FREQ == "M",
         REF_AREA == "FE",
         NATURE == "INDICE") %>%
  month_to_date %>%
  filter(date >= as.Date("2012-01-01")) %>%
  left_join(PRIX_CONSO, by = "PRIX_CONSO") %>%
  group_by(Prix_conso) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot() + ylab("Indice des prix") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Prix_conso)) +
  
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.35, 0.8),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(0, 200, 1),
                     labels = dollar_format(accuracy = 1, prefix = "")) +
  geom_text_repel(data = . %>%
              filter(date == max(date)), aes(x = date, y = OBS_VALUE, label = round(OBS_VALUE, 1)), size = 3)

2017-

Code
`IPC-2025` %>%
  filter(INDICATEUR == "IPC",
         MENAGES_IPC == "ENSEMBLE",
         PRIX_CONSO %in% c("4035", "4018", "00"),
         FREQ == "M",
         REF_AREA == "FE",
         NATURE == "INDICE") %>%
  month_to_date %>%
  filter(date >= as.Date("2017-01-01")) %>%
  left_join(PRIX_CONSO, by = "PRIX_CONSO") %>%
  group_by(Prix_conso) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot() + ylab("Indice des prix") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Prix_conso)) +
  
  scale_x_date(breaks = seq(1920, 2100, 1) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.35, 0.8),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(0, 200, 1),
                     labels = dollar_format(accuracy = 1, prefix = "")) +
  geom_text_repel(data = . %>%
              filter(date == max(date)), aes(x = date, y = OBS_VALUE, label = round(OBS_VALUE, 1)), size = 3)

Glissement sur 3 ans

Code
`IPC-2025` %>%
  filter(INDICATEUR == "IPC",
         MENAGES_IPC == "ENSEMBLE",
         PRIX_CONSO %in% c("4035", "4018"),
         FREQ == "M",
         REF_AREA == "FE",
         NATURE == "INDICE") %>%
  left_join(PRIX_CONSO, by = "PRIX_CONSO") %>%
  month_to_date %>%
  filter(date >= max(date) - years(3)) %>%
  group_by(Prix_conso) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot + geom_line(aes(x = date, y = OBS_VALUE, color = Prix_conso)) +
  theme_minimal() + xlab("") + ylab("") +
  scale_x_date(breaks = "1 month",
               labels = date_format("%b %Y")) +
  theme(legend.position = c(0.65, 0.2),
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, vjust = 0.5, hjust=1)) +
  scale_y_log10(breaks = seq(0, 200, 1),
                     labels = dollar_format(accuracy = 1, prefix = "")) +
  geom_text_repel(aes(x = date, y = OBS_VALUE, label = round(OBS_VALUE, 1)), 
                  fontface ="plain", color = "black", size = 3)

Glissement sur 2 ans

Code
`IPC-2025` %>%
  filter(INDICATEUR == "IPC",
         MENAGES_IPC == "ENSEMBLE",
         PRIX_CONSO %in% c("4035", "4018", "00"),
         FREQ == "M",
         REF_AREA == "FE",
         NATURE == "INDICE") %>%
  left_join(PRIX_CONSO, by = "PRIX_CONSO") %>%
  month_to_date %>%
  filter(date >= max(date) - years(2)) %>%
  group_by(Prix_conso) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot + geom_line(aes(x = date, y = OBS_VALUE, color = Prix_conso)) +
  theme_minimal() + xlab("") + ylab("") +
  scale_x_date(breaks = "1 month",
               labels = date_format("%b %Y")) +
  theme(legend.position = c(0.65, 0.2),
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, vjust = 0.5, hjust=1)) +
  scale_y_log10(breaks = seq(0, 200, 1),
                     labels = dollar_format(accuracy = 1, prefix = "")) +
  geom_text_repel(aes(x = date, y = OBS_VALUE, label = round(OBS_VALUE, 1)), 
                  fontface ="plain", color = "black", size = 3)

Glissement sur 1 an

Code
`IPC-2025` %>%
  filter(INDICATEUR == "IPC",
         MENAGES_IPC == "ENSEMBLE",
         PRIX_CONSO %in% c("4035", "4018", "00"),
         FREQ == "M",
         REF_AREA == "FE",
         NATURE == "INDICE") %>%
  left_join(PRIX_CONSO, by = "PRIX_CONSO") %>%
  month_to_date %>%
  filter(date >= max(date) - years(1)) %>%
  group_by(Prix_conso) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot + geom_line(aes(x = date, y = OBS_VALUE, color = Prix_conso)) +
  theme_minimal() + xlab("") + ylab("") +
  scale_x_date(breaks = "1 month",
               labels = date_format("%b %Y")) +
  theme(legend.position = c(0.65, 0.2),
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, vjust = 0.5, hjust=1)) +
  scale_y_log10(breaks = seq(0, 200, 1),
                     labels = dollar_format(accuracy = 1, prefix = "")) +
  geom_text_repel(aes(x = date, y = OBS_VALUE, label = round(OBS_VALUE, 1)), 
                  fontface ="plain", color = "black", size = 3)

Immobilier

4003, 4009, 4034

Code
`IPC-2025` %>%
  filter(INDICATEUR == "IPC",
         MENAGES_IPC == "ENSEMBLE",
         PRIX_CONSO %in% c("4003", "4009", "4034"),
         FREQ == "M",
         REF_AREA == "FE",
         NATURE == "INDICE") %>%
  month_to_date %>%
  left_join(PRIX_CONSO, by = "PRIX_CONSO") %>%
  ggplot() + ylab("Indice des prix") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Prix_conso, linetype = Prix_conso)) +
  
  scale_x_date(breaks = seq(1920, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.75, 0.3),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(0, 200, 10),
                     labels = dollar_format(accuracy = 1, prefix = ""))

041, 043, 044

Code
`IPC-2025` %>%
  filter(INDICATEUR == "IPC",
         MENAGES_IPC == "ENSEMBLE",
         COICOP2018 %in% c("041", "043", "044"),
         FREQ == "M",
         REF_AREA == "FE",
         NATURE == "INDICE",
         #OBS_STATUS == "A"
         ) %>%
  month_to_date %>%
  left_join(PRIX_CONSO, by = "PRIX_CONSO") %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  ggplot() + ylab("Indice des prix") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Coicop2018)) +
  
  scale_x_date(breaks = seq(1920, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.6, 0.3),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(0, 200, 10),
                     labels = dollar_format(accuracy = 1, prefix = ""))

041 Loyers effectifs, 00 Ensemble

1996-

Code
`IPC-2025` %>%
  filter(INDICATEUR == "IPC",
         MENAGES_IPC == "ENSEMBLE",
         COICOP2018 %in% c("041", "00"),
         FREQ == "M",
         REF_AREA == "FE",
         NATURE == "INDICE") %>%
  month_to_date %>%
  left_join(PRIX_CONSO, by = "PRIX_CONSO") %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  group_by(Coicop2018, Prix_conso) %>%
  filter(date >= as.Date("1996-01-01")) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[date == as.Date("1996-01-01")]) %>%
  mutate(Variable = paste0(Coicop2018, " - ", Prix_conso),
         Variable = gsub(" - Sans objet", "", Variable)) %>%
  ggplot() + ylab("Indice des prix") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Variable)) +
  
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.7, 0.2),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(0, 200, 5),
                     labels = dollar_format(accuracy = 1, prefix = ""))

1999-

Code
`IPC-2025` %>%
  filter(INDICATEUR == "IPC",
         MENAGES_IPC == "ENSEMBLE",
         COICOP2018 %in% c("041", "00"),
         FREQ == "M",
         REF_AREA == "FE",
         NATURE == "INDICE") %>%
  month_to_date %>%
  left_join(PRIX_CONSO, by = "PRIX_CONSO") %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  group_by(Coicop2018, Prix_conso) %>%
  filter(date >= as.Date("1999-01-01")) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[date == as.Date("1999-01-01")]) %>%
  ggplot() + ylab("Indice des prix") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = paste0(Coicop2018, " - ", Prix_conso))) +
  
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.7, 0.2),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(0, 200, 5),
                     labels = dollar_format(accuracy = 1, prefix = ""))

2000-

Code
`IPC-2025` %>%
  filter(INDICATEUR == "IPC",
         MENAGES_IPC == "ENSEMBLE",
         COICOP2018 %in% c("041", "00"),
         FREQ == "M",
         REF_AREA == "FE",
         NATURE == "INDICE") %>%
  month_to_date %>%
  left_join(PRIX_CONSO, by = "PRIX_CONSO") %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  group_by(Coicop2018, Prix_conso) %>%
  filter(date >= as.Date("2000-01-01")) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[date == as.Date("2000-01-01")]) %>%
  ggplot() + ylab("Indice des prix") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = paste0(Coicop2018, " - ", Prix_conso))) +
  
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.7, 0.2),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(0, 200, 5),
                     labels = dollar_format(accuracy = 1, prefix = ""))

2017-

Code
`IPC-2025` %>%
  filter(INDICATEUR == "IPC",
         MENAGES_IPC == "ENSEMBLE",
         COICOP2018 %in% c("041", "00"),
         FREQ == "M",
         REF_AREA == "FE",
         NATURE == "INDICE") %>%
  month_to_date %>%
  left_join(PRIX_CONSO, by = "PRIX_CONSO") %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  group_by(Coicop2018, Prix_conso) %>%
  filter(date >= as.Date("2017-01-01")) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[date == as.Date("2017-01-01")]) %>%
  ggplot() + ylab("Base 100 = Janvier 2017") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = paste0(Coicop2018, " - ", Prix_conso))) +
  
  scale_x_date(breaks = seq(1920, 2100, 1) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.35, 0.8),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(0, 200, 2),
                     labels = dollar_format(accuracy = 1, prefix = ""))

Glissement sur 2 ans

Code
`IPC-2025` %>%
  filter(INDICATEUR == "IPC",
         MENAGES_IPC == "ENSEMBLE",
         COICOP2018 %in% c("041", "00"),
         FREQ == "M",
         REF_AREA == "FE",
         NATURE == "INDICE") %>%
  month_to_date %>%
  filter(date >= max(date) - years(2)) %>%
  left_join(PRIX_CONSO, by = "PRIX_CONSO") %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  group_by(COICOP2018) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot() + ylab("Indice des prix") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = paste0(Coicop2018, " - ", Prix_conso))) +
  theme_minimal() + xlab("") + ylab("") +
  scale_x_date(breaks = "1 month",
               labels = date_format("%b %Y")) +
  theme(legend.position = c(0.28, 0.87),
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, vjust = 0.5, hjust=1)) +
  scale_y_log10(breaks = seq(0, 200, 2),
                     labels = dollar_format(accuracy = 1, prefix = "")) +
  geom_text_repel(aes(x = date, y = OBS_VALUE, label = round(OBS_VALUE, 1)), 
                  fontface ="plain", color = "black", size = 3)

Insee calcule y compris loyers fictifs

Categories

Par Deciles - INF-D1, D5-D6, D9-PLUS

Code
`IPC-2025` %>%
  filter(MENAGES_IPC %in% c("INF-D1", "D5-D6", "D9-PLUS")) %>%
  year_to_date %>%
  left_join(MENAGES_IPC, by = "MENAGES_IPC") %>%
  group_by(MENAGES_IPC) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot() + ylab("Indice des prix") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Menages_ipc)) +
  
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.35, 0.9),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(0, 200, 5),
                     labels = dollar_format(accuracy = 1, prefix = "")) +
  geom_text_repel(data = . %>%
              filter(date == max(date)), aes(x = date, y = OBS_VALUE, label = round(OBS_VALUE, 1)), size = 3)

Par CSP - Actif, Retraité, Cadre, Ouvrier

Code
`IPC-2025` %>%
  filter(MENAGES_IPC %in% c("ACTIF", "RETRAITE", "CADRE", "OUVRIER")) %>%
  year_to_date %>%
  left_join(MENAGES_IPC, by = "MENAGES_IPC") %>%
  group_by(MENAGES_IPC) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot() + ylab("Indice des prix") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Menages_ipc)) +
  
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.35, 0.85),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(0, 200, 5),
                     labels = dollar_format(accuracy = 1, prefix = "")) +
  geom_text_repel(data = . %>%
              filter(date == max(date)), aes(x = date, y = OBS_VALUE, label = round(OBS_VALUE, 1)), size = 3)

Par Age - 30-44, 45-59, 60-74

All

Code
`IPC-2025` %>%
  filter(MENAGES_IPC %in% c("MOINS-29", "30-44", "45-59", "60-74", "PLUS-75")) %>%
  year_to_date %>%
  left_join(MENAGES_IPC, by = "MENAGES_IPC") %>%
  group_by(MENAGES_IPC) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot() + ylab("Indice des prix") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Menages_ipc)) +
  scale_color_manual(values = viridis(6)[1:5]) +
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.75, 0.3),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(0, 200, 5),
                     labels = dollar_format(accuracy = 1, prefix = ""))

Locataire VS Propriétaire VS Accédant

Code
`IPC-2025` %>%
  filter(MENAGES_IPC %in% c("ACCES-PROPRIETE", "LOCATAIRE", "PROPRIETAIRE")) %>%
  year_to_date %>%
  left_join(MENAGES_IPC, by = "MENAGES_IPC") %>%
  group_by(MENAGES_IPC) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot() + ylab("Indice des prix") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Menages_ipc, linetype = Menages_ipc)) +
  
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.75, 0.3),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(0, 200, 5),
                     labels = dollar_format(accuracy = 1, prefix = ""))

Cantines

1990-

Code
`IPC-2025` %>%
  filter(COICOP2018 %in% c("00", "1112"),
         REF_AREA == "FM",
         FREQ == "M") %>%
  month_to_date %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  filter(date >= as.Date("1990-01-01")) %>%
  group_by(COICOP2018) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot() + ylab("Indice des prix") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Coicop2018)) +
  
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.25, 0.9),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(0, 200, 5),
                     labels = dollar_format(accuracy = 1, prefix = ""))

2000-

Code
`IPC-2025` %>%
  filter(COICOP2018 %in% c("00", "1112"),
         REF_AREA == "FM",
         FREQ == "M") %>%
  month_to_date %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  filter(date >= as.Date("2000-01-01")) %>%
  group_by(COICOP2018) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot() + ylab("Indice des prix") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Coicop2018)) +
  
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.25, 0.9),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(0, 200, 5),
                     labels = dollar_format(accuracy = 1, prefix = ""))

2010-

Code
`IPC-2025` %>%
  filter(COICOP2018 %in% c("00", "1112"),
         REF_AREA == "FM",
         FREQ == "M") %>%
  month_to_date %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  filter(date >= as.Date("2010-01-01")) %>%
  group_by(COICOP2018) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot() + ylab("Indice des prix") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Coicop2018)) +
  
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.25, 0.9),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(0, 200, 5),
                     labels = dollar_format(accuracy = 1, prefix = ""))

Assurance santé

1990-

Code
`IPC-2025` %>%
  filter(COICOP2018 %in% c("00", "12532", "1253"),
         REF_AREA == "FM",
         FREQ == "M") %>%
  month_to_date %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  filter(date >= as.Date("1990-01-01")) %>%
  group_by(COICOP2018) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot() + ylab("Indice des prix") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Coicop2018)) +
  
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.25, 0.9),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(0, 200, 5),
                     labels = dollar_format(accuracy = 1, prefix = ""))

2000-

Code
`IPC-2025` %>%
  filter(COICOP2018 %in% c("00", "12532", "1253"),
         REF_AREA == "FM",
         FREQ == "M") %>%
  month_to_date %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  filter(date >= as.Date("2000-01-01")) %>%
  group_by(COICOP2018) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot() + ylab("Indice des prix") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Coicop2018)) +
  
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.25, 0.9),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(0, 200, 5),
                     labels = dollar_format(accuracy = 1, prefix = ""))

2010-

Code
`IPC-2025` %>%
  filter(COICOP2018 %in% c("00", "12532"),
         REF_AREA == "FM",
         FREQ == "M") %>%
  month_to_date %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  filter(date >= as.Date("2010-01-01")) %>%
  group_by(COICOP2018) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot() + ylab("Indice des prix") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Coicop2018)) +
  
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.25, 0.9),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(0, 200, 5),
                     labels = dollar_format(accuracy = 1, prefix = ""))

2-digit

Boissons Alcoolisées, Logement, Restaurants et hôtels

All

Code
`IPC-2025` %>%
  filter(COICOP2018 %in% c("00", "02", "11", "04"),
         REF_AREA == "FM",
         FREQ == "M") %>%
  month_to_date %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  group_by(COICOP2018) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot() + ylab("Indice des prix") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Coicop2018)) +
  
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.3, 0.85),
        legend.title = element_blank()) +
  scale_y_log10(breaks = c(100, 120, 150, 200, 220, 250, 300, 400, 500),
                     labels = dollar_format(accuracy = 1, prefix = ""))

Glissement sur 2 ans

Code
`IPC-2025` %>%
  filter(COICOP2018 %in% c("00", "02", "11", "04"),
         REF_AREA == "FM",
         FREQ == "M") %>%
  month_to_date %>%
  filter(date >= max(date) - years(2)) %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  group_by(COICOP2018) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot + geom_line(aes(x = date, y = OBS_VALUE, color = Coicop2018)) +
  theme_minimal() + xlab("") + ylab("") +
  scale_x_date(breaks = "1 month",
               labels = date_format("%b %Y")) +
  theme(legend.position = c(0.28, 0.87),
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, vjust = 0.5, hjust=1)) +
  scale_y_log10(breaks = seq(0, 200, 1),
                     labels = dollar_format(accuracy = 1, prefix = "")) +
  geom_text_repel(aes(x = date, y = OBS_VALUE, label = round(OBS_VALUE, 1)), 
                  fontface ="plain", color = "black", size = 3)

Transports, Enseignement, B&S Divers

Tous

Code
`IPC-2025` %>%
  filter(COICOP2018 %in% c("00", "10", "07", "12"),
         REF_AREA == "FM",
         FREQ == "M") %>%
  month_to_date %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  group_by(COICOP2018) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot() + ylab("Indice des prix") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Coicop2018)) +
  
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.3, 0.85),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(100, 300, 10),
                     labels = dollar_format(accuracy = 1, prefix = ""))

Glissement sur 2 ans

Code
`IPC-2025` %>%
  filter(COICOP2018 %in% c("00", "10", "07", "12"),
         REF_AREA == "FM",
         FREQ == "M") %>%
  month_to_date %>%
  filter(date >= max(date) - years(2)) %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  group_by(COICOP2018) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot + geom_line(aes(x = date, y = OBS_VALUE, color = Coicop2018)) +
  theme_minimal() + xlab("") + ylab("") +
  scale_x_date(breaks = "1 month",
               labels = date_format("%b %Y")) +
  theme(legend.position = c(0.18, 0.87),
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, vjust = 0.5, hjust=1)) +
  scale_y_log10(breaks = seq(0, 200, 2),
                     labels = dollar_format(accuracy = 1, prefix = "")) +
  geom_text_repel(aes(x = date, y = OBS_VALUE, label = round(OBS_VALUE, 1)), 
                  fontface ="plain", color = "black", size = 3)

Alimentation, Habillement, Meubles

Tous

Code
`IPC-2025` %>%
  filter(COICOP2018 %in% c("00", "05", "01", "03"),
         REF_AREA == "FM",
         FREQ == "M") %>%
  month_to_date %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  group_by(COICOP2018) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot() + ylab("Indice des prix") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Coicop2018)) +
  
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.35, 0.85),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(100, 300, 10),
                     labels = dollar_format(accuracy = 1, prefix = ""))

Glissement sur 2 ans

Code
`IPC-2025` %>%
  filter(COICOP2018 %in% c("00", "05", "01", "03"),
         REF_AREA == "FM",
         FREQ == "M") %>%
  month_to_date %>%
  filter(date >= max(date) - years(2)) %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  group_by(COICOP2018) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot + geom_line(aes(x = date, y = OBS_VALUE, color = Coicop2018)) +
  theme_minimal() + xlab("") + ylab("") +
  scale_x_date(breaks = "1 month",
               labels = date_format("%b %Y")) +
  theme(legend.position = c(0.28, 0.87),
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, vjust = 0.5, hjust=1)) +
  scale_y_log10(breaks = seq(0, 200, 2),
                     labels = dollar_format(accuracy = 1, prefix = "")) +
  geom_text_repel(aes(x = date, y = OBS_VALUE, label = round(OBS_VALUE, 1)), 
                  fontface ="plain", color = "black", size = 3)

Santé, Communications, Loisirs

Tous

Code
`IPC-2025` %>%
  filter(COICOP2018 %in% c("00", "06", "09", "08"),
         REF_AREA == "FM",
         FREQ == "M") %>%
  month_to_date %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  group_by(COICOP2018) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot() + ylab("Indice des prix") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Coicop2018)) +
  
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.2, 0.2),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(10, 300, 10),
                     labels = dollar_format(accuracy = 1, prefix = ""))

1996-

Code
`IPC-2025` %>%
  filter(COICOP2018 %in% c("00", "06", "09", "08"),
         REF_AREA == "FM",
         FREQ == "M") %>%
  month_to_date %>%
  filter(date >= as.Date("1996-01-01")) %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  group_by(COICOP2018) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot() + ylab("Indice des prix") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Coicop2018)) +
  
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.2, 0.2),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(10, 300, 10),
                     labels = dollar_format(accuracy = 1, prefix = ""))

2000-

Code
`IPC-2025` %>%
  filter(COICOP2018 %in% c("00", "06", "09", "08"),
         REF_AREA == "FM",
         FREQ == "M") %>%
  month_to_date %>%
  filter(date >= as.Date("2000-01-01")) %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  group_by(COICOP2018) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot() + ylab("Indice des prix") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Coicop2018)) +
  
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.18, 0.22),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(10, 300, 10),
                     labels = dollar_format(accuracy = 1, prefix = ""))

Glissement sur 2 ans

Code
`IPC-2025` %>%
  filter(COICOP2018 %in% c("00", "06", "09", "08"),
         REF_AREA == "FM",
         FREQ == "M") %>%
  month_to_date %>%
  filter(date >= max(date) - years(2)) %>%
  left_join(COICOP2018, by = "COICOP2018") %>%
  group_by(COICOP2018) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot + geom_line(aes(x = date, y = OBS_VALUE, color = Coicop2018)) +
  theme_minimal() + xlab("") + ylab("") +
  scale_x_date(breaks = "1 month",
               labels = date_format("%b %Y")) +
  theme(legend.position = c(0.28, 0.87),
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, vjust = 0.5, hjust=1)) +
  scale_y_log10(breaks = seq(0, 200, 2),
                     labels = dollar_format(accuracy = 1, prefix = "")) +
  geom_text_repel(aes(x = date, y = OBS_VALUE, label = round(OBS_VALUE, 1)), 
                  fontface ="plain", color = "black", size = 3)

Comparer l’IPC et le déflateur de la consommation

Revenu primaire au RDB

Code
ig_b("insee", "FPS2021", "revenu-primaire-RDB")

Déflateur consommation finale des ménages

Code
ig_b("insee", "FPS2021", "depense-consommation-finale-menages")