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