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

Data - Eurostat

Info

Last observation: 2026M07 (N = 750)

First observation: 1996M01 (N = 9930)

Last data update: 14 aoû 2026, 20:04. Last compile: 18 aoû 2026, 03:50

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())