Structure of consumption expenditure by COICOP consumption purpose
Data - Eurostat
Info
Last observation: Annual: 2020 (N = 4,763)
First observation: Annual: 1988 (N = 1,307)
Last data update: 23 jul 2026, 22:42. Last compile: 24 jul 2026, 01:48
Structure
France, Germany
France: Consumption Structure Over Time
Food, Housing, Communications
Code
hbs_str_t211 %>%
filter(geo == "FR",
coicop %in% c("CP01", "CP04", "CP08")) %>%
year_to_date %>%
mutate(values = values/1000) %>%
ggplot + geom_line(aes(x = date, y = values, color = Coicop)) +
theme_minimal() +
theme(legend.position = c(0.3, 0.7),
legend.title = element_blank()) +
scale_x_date(breaks = as.Date(paste0(seq(1985, 2100, 5), "-01-01")),
labels = date_format("%Y")) +
xlab("") + ylab("Share of consumption expenditure") +
scale_y_continuous(labels = scales::percent_format(accuracy = 1))
coicop
France
Table
Code
hbs_str_t211 %>%
filter(geo == "FR",
substr(coicop, 1, 2) == "CP",
coicop != "CP00",
time %in% c("2015", "2020")) %>%
select(-unit) %>%
select(-geo) %>%
spread(time, values) %>%
print_table_conditional()2-digit
Code
hbs_str_t211 %>%
filter(geo == "FR",
substr(coicop, 1, 2) == "CP",
nchar(coicop) == 4,
coicop != "CP00",
time %in% c("2015", "2020")) %>%
select(-unit) %>%
select(-geo) %>%
spread(time, values) %>%
print_table_conditional()| freq | Freq | coicop | Coicop | Unit | Geo | 2015 | 2020 |
|---|---|---|---|---|---|---|---|
| A | Annual | CP01 | Food and non-alcoholic beverages | Per mille | France | 143 | 143 |
| A | Annual | CP02 | Alcoholic beverages, tobacco and narcotics | Per mille | France | 25 | 25 |
| A | Annual | CP03 | Clothing and footwear | Per mille | France | 40 | 40 |
| A | Annual | CP04 | Housing, water, electricity, gas and other fuels | Per mille | France | 289 | 289 |
| A | Annual | CP05 | Furnishings, household equipment and routine household maintenance | Per mille | France | 48 | 48 |
| A | Annual | CP06 | Health | Per mille | France | 16 | 16 |
| A | Annual | CP07 | Transport | Per mille | France | 132 | 132 |
| A | Annual | CP08 | Communications | Per mille | France | 24 | 24 |
| A | Annual | CP09 | Recreation and culture | Per mille | France | 77 | 77 |
| A | Annual | CP10 | Education | Per mille | France | 6 | 6 |
| A | Annual | CP11 | Restaurants and hotels | Per mille | France | 55 | 55 |
| A | Annual | CP12 | Miscellaneous goods and services | Per mille | France | 147 | 147 |
3-digit
Code
hbs_str_t211 %>%
filter(geo == "FR",
substr(coicop, 1, 2) == "CP",
nchar(coicop) == 5,
coicop != "CP00",
time %in% c("2015", "2020")) %>%
select(-unit) %>%
select(-geo) %>%
spread(time, values) %>%
print_table_conditional()4-digit
Code
hbs_str_t211 %>%
filter(geo == "FR",
substr(coicop, 1, 2) == "CP",
nchar(coicop) == 6,
coicop != "CP00",
time %in% c("2015", "2020")) %>%
select(-unit) %>%
select(-geo) %>%
spread(time, values) %>%
print_table_conditional()Table
2015
Code
hbs_str_t211 %>%
filter(time == "2015",
coicop %in% c("CP04", "CP041", "CP042")) %>%
select_if(~ n_distinct(.) > 1) %>%
spread(coicop, values) %>%
arrange(-CP04) %>%
mutate(Geo = ifelse(geo == "DE", "Germany", Geo)) %>%
mutate(Flag = gsub(" ", "-", str_to_lower(Geo)),
Flag = paste0('<img src="../../bib/flags/vsmall/', Flag, '.png" alt="Flag">')) %>%
select(Flag, everything()) %>%
{if (is_html_output()) datatable(., filter = 'top', rownames = F, escape = F) else .}2020
Code
hbs_str_t211 %>%
filter(time == "2020",
coicop %in% c("CP04", "CP041", "CP042")) %>%
select_if(~ n_distinct(.) > 1) %>%
spread(coicop, values) %>%
arrange(-CP04) %>%
mutate(Geo = ifelse(geo == "DE", "Germany", Geo)) %>%
mutate(Flag = gsub(" ", "-", str_to_lower(Geo)),
Flag = paste0('<img src="../../bib/flags/vsmall/', Flag, '.png" alt="Flag">')) %>%
select(Flag, everything()) %>%
{if (is_html_output()) datatable(., filter = 'top', rownames = F, escape = F) else .}