Harmonised index of consumer prices (HICP) - ECOICOP ver.2 - indices and rates of change, monthly data (index)

Data - Eurostat

Info

Last observation: Monthly: 2026M06 (N = 95,620)

First observation: Monthly: 1996M01 (N = 9,930)

Last data update: 23 jul 2026, 22:16. Last compile: 24 jul 2026, 03:40

Structure

Tobacco (CP041)

Germany, France, Italy, Spain, Europe

1996-

Code
prc_hicp_minr %>%
  filter(coicop18 %in% c("CP041"),
         geo %in% c("DE", "FR", "IT", "ES", "EA"),
         unit == "I25") %>%
  mutate(Geo = ifelse(geo == "EA", "Europe", Geo)) %>%
  select_if(~ n_distinct(.) > 1) %>%
  month_to_date %>%
  group_by(Geo) %>%
  mutate(values = 100*values/values[date == as.Date("1996-01-01")]) %>%
  add_colors %>%
  ggplot(.) + geom_line(aes(x = date, y = values, color = color)) + 
  theme_minimal() + xlab("") + ylab("") +
  scale_x_date(breaks = seq(1960, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_log10(breaks = seq(0, 10000, 50)) +
  scale_color_identity() + add_flags +
  theme(legend.position = "none")

2017-

Code
prc_hicp_minr %>%
  filter(coicop18 %in% c("CP041"),
         geo %in% c("DE", "FR", "IT", "ES", "EA"),
         unit == "I25") %>%
  mutate(Geo = ifelse(geo == "EA", "Europe", Geo)) %>%
  select_if(~ n_distinct(.) > 1) %>%
  month_to_date %>%
  group_by(Geo) %>%
  filter(date >= as.Date("2017-01-01")) %>%
  mutate(values = 100*values/values[date == as.Date("2017-01-01")]) %>%
  add_colors %>%
  ggplot(.) + geom_line(aes(x = date, y = values, color = color)) + 
  theme_minimal() + xlab("") + ylab("") +
  scale_x_date(breaks = seq(1960, 2100, 1) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_log10(breaks = seq(0, 10000, 2)) +
  scale_color_identity() + add_flags +
  theme(legend.position = "none")

Tobacco (CP023)

Germany, France, Italy, Spain

Code
prc_hicp_minr %>%
  filter(coicop18 %in% c("CP023"),
         geo %in% c("DE", "FR", "IT", "ES"),
         unit == "I25") %>%
  select_if(~ n_distinct(.) > 1) %>%
  month_to_date %>%
  group_by(Geo) %>%
  mutate(values = 100*values/values[date == as.Date("1996-01-01")]) %>%
  add_colors %>%
  ggplot(.) + geom_line(aes(x = date, y = values, color = color)) + 
  theme_minimal() + xlab("") + ylab("") +
  scale_x_date(breaks = seq(1960, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_log10(breaks = seq(0, 10000, 50)) +
  scale_color_identity() + add_flags +
  theme(legend.position = "none")

Germany, France, Italy, Spain, Europe

Code
prc_hicp_minr %>%
  filter(coicop18 %in% c("CP023"),
         geo %in% c("DE", "FR", "IT", "ES", "EA"),
         unit == "I25") %>%
  mutate(Geo = ifelse(geo == "EA", "Europe", Geo)) %>%
  select_if(~ n_distinct(.) > 1) %>%
  month_to_date %>%
  group_by(Geo) %>%
  mutate(values = 100*values/values[date == as.Date("1996-01-01")]) %>%
  add_colors %>%
  ggplot(.) + geom_line(aes(x = date, y = values, color = color)) + 
  theme_minimal() + xlab("") + ylab("") +
  scale_x_date(breaks = seq(1960, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_log10(breaks = seq(0, 10000, 50)) +
  scale_color_identity() + add_flags +
  theme(legend.position = "none")

Weighted

Method 1

Code
prc_hicp_minr %>%
  filter(coicop18 %in% c("TOT_X_NRG_FOOD", "TOTAL"),
         unit == "RCH_A") %>%
  mutate(year = substr(time, 1, 4)) %>%
  left_join(geo, by = "geo") %>%
  #filter(!(Geo %in% intersect(eurozone_countries, CEEC_countries))) %>%
  left_join(prc_hicp_cw %>%
              filter(statinfo == "COWEA21", geo != "EA21") %>%
              transmute(geo, year = time, country_weights = values, uniform_weights = 1),
            by = c("geo", "year")) %>%
  month_to_date %>%
  filter(date >= as.Date("2000-01-01")) %>%
  group_by(coicop18, date) %>%
  summarise(values = sqrt(Hmisc::wtd.var(values/100, country_weights))) %>%
  rename(coicop = coicop18) %>%
  left_join(coicop, by = "coicop") %>%
  
  ggplot(.) + geom_line(aes(x = date, y = values, color = Coicop)) + 
  theme_minimal() + xlab("") + ylab("Standard Deviation of Inflation\nWeighted, EA-21 (%)") +
  scale_x_date(breaks = seq(1960, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_color_manual(values = c("#1E1C1C", "#A81630")) + 
  scale_y_continuous(breaks = 0.01*seq(-20, 20, .5),
                     labels = percent_format(a = .1)) + 
  theme(legend.position = c(0.55, 0.90),
        legend.title = element_blank())