Structure of consumption expenditure by activity and employment status of the reference person and COICOP consumption purpose
Data - Eurostat
Info
Last observation: Annual: 2020 (N = 9,868)
First observation: Annual: 1988 (N = 3,310)
Last data update: 11 aoû 2026, 20:54. Last compile: 12 aoû 2026, 00:06
Structure
Budget Structure, Latest Year, France
Code
latest_yr <- hbs_str_t221 |>
filter(geo == "FR",
nchar(coicop) == 4,
substr(coicop, 1, 2) == "CP",
!is.na(values)) |>
summarise(m = max(time)) |>
pull(m)
hbs_str_t221 |>
filter(geo == "FR",
nchar(coicop) == 4,
substr(coicop, 1, 2) == "CP",
wstatus %in% c("MW_IS", "NMW_IS", "RET", "UNE"),
time == latest_yr) |>
mutate(values = round(values / 10, 1)) |>
select(Coicop, Wstatus, values) |>
spread(Wstatus, values) |>
print_table_conditional()| Coicop | Manual workers in industry and services | Non-manual workers in industry and services | Retired persons | Unemployed persons |
|---|---|---|---|---|
| Alcoholic beverages, tobacco and narcotics | 3.2 | 2.2 | 2.3 | 3.2 |
| Clothing and footwear | 4.7 | 4.6 | 2.4 | 4.9 |
| Communications | 2.8 | 2.2 | 2.1 | 3.5 |
| Education | 0.5 | 0.8 | 0.1 | 0.5 |
| Food and non-alcoholic beverages | 14.5 | 12.6 | 16.8 | 15.2 |
| Furnishings, household equipment and routine household maintenance | 4.1 | 4.7 | 5.6 | 3.8 |
| Health | 1.5 | 1.6 | 1.7 | 1.7 |
| Housing, water, electricity, gas and other fuels | 27.6 | 27.0 | 32.4 | 31.1 |
| Miscellaneous goods and services | 14.3 | 14.7 | 15.6 | 13.3 |
| Recreation and culture | 7.1 | 8.4 | 7.2 | 7.0 |
| Restaurants and hotels | 5.0 | 7.2 | 2.9 | 4.6 |
| Transport | 14.7 | 14.0 | 10.8 | 11.3 |
coicop
France - Compare
2020, HBS
Code
hbs_str_t221 |>
filter(time == "2020",
geo == "FR") %>%
select_if(~ n_distinct(.) > 1) |>
spread(wstatus, values) %>%
select_if(~ n_distinct(.) > 1) |>
print_table_conditional()2015, HBS
All
Code
hbs_str_t221 |>
filter(time == "2015",
geo == "FR") %>%
select_if(~ n_distinct(.) > 1) |>
spread(wstatus, values) %>%
select_if(~ n_distinct(.) > 1) |>
print_table_conditional()2-digit
Code
hbs_str_t221 |>
filter(time == "2015",
geo == "FR",
nchar(coicop) == 4) %>%
select_if(~ n_distinct(.) > 1) |>
spread(wstatus, values) %>%
select_if(~ n_distinct(.) > 1) |>
print_table_conditional()All quintiles
Sums
2-digit
Code
hbs_str_t221 |>
filter(time == "2020",
substr(coicop, 1, 2) == "CP",
nchar(coicop) == 4) %>%
select_if(~ n_distinct(.) > 1) |>
group_by(wstatus, geo, Geo) |>
summarise(values = sum(values)) |>
spread(wstatus, values) |>
print_table_conditional()| geo | Geo | INAC_OTH | MW_IS | NMW_IS | NSAL | RET | UNE | UNK |
|---|---|---|---|---|---|---|---|---|
| AT | Austria | 1000 | 1002 | 999 | 1000 | 1002 | 999 | NA |
| BE | Belgium | 1000 | 999 | 998 | 1000 | 998 | 999 | NA |
| BG | Bulgaria | 1000 | 1002 | 1000 | 999 | 999 | 1002 | NA |
| CY | Cyprus | 1001 | 1000 | 999 | 998 | 1000 | 1001 | NA |
| DE | Germany | 1000 | 1000 | 1000 | 999 | 1001 | 1000 | NA |
| DK | Denmark | 1001 | 999 | 1001 | 1000 | 1000 | 1000 | 1001 |
| EE | Estonia | 1002 | 1001 | 1001 | 1001 | 1000 | 1000 | 999 |
| EL | Greece | 1002 | 998 | 999 | 997 | 1000 | 999 | NA |
| ES | Spain | 1000 | 1001 | 1000 | 999 | 999 | 1002 | NA |
| EU27_2020 | European Union - 27 countries (from 2020) | 998 | 1002 | 1000 | 1000 | 1000 | 1000 | NA |
| FI | Finland | 999 | 1000 | 1000 | 1000 | 1001 | 1001 | NA |
| FR | France | 998 | 1000 | 1000 | 999 | 999 | 1001 | 1001 |
| HR | Croatia | 1000 | 999 | 1000 | 999 | 999 | 999 | NA |
| HU | Hungary | 1001 | 1001 | 999 | 1002 | 1002 | 1000 | 1000 |
| IE | Ireland | 1000 | 1001 | 999 | 999 | 999 | 1000 | 1000 |
| IT | Italy | 999 | 1000 | 1000 | 1002 | 999 | 999 | 999 |
| LT | Lithuania | 1000 | 1001 | 1000 | 1001 | 1001 | 1000 | NA |
| LU | Luxembourg | 1001 | 1000 | 1001 | 999 | 1002 | 1000 | NA |
| LV | Latvia | 1000 | 999 | 1002 | 1002 | 1001 | 1000 | NA |
| ME | Montenegro | 1002 | 1001 | 999 | 999 | 999 | 1000 | NA |
| MT | Malta | 1000 | 1000 | 999 | 999 | 1000 | 998 | 1001 |
| NO | Norway | NA | NA | NA | NA | NA | NA | 1001 |
| PL | Poland | 1001 | 1000 | 998 | 1001 | 1001 | 1000 | 1000 |
| RO | Romania | 1001 | 1000 | 998 | 999 | 1001 | 999 | 999 |
| RS | Serbia | 1000 | 1000 | 1002 | 1000 | 999 | 999 | NA |
| SI | Slovenia | 1001 | 1001 | 1001 | 1000 | 1000 | 998 | 1000 |
| SK | Slovakia | 1000 | 1002 | 1001 | 999 | 1000 | 1000 | NA |
| TR | Türkiye | 1001 | 999 | 1001 | 1001 | 1000 | 1001 | 1001 |
3-digit
Code
hbs_str_t221 |>
filter(time == "2020",
substr(coicop, 1, 2) == "CP",
nchar(coicop) == 5) %>%
select_if(~ n_distinct(.) > 1) |>
group_by(wstatus, geo, Geo) |>
summarise(values = sum(values)) |>
spread(wstatus, values) |>
print_table_conditional()| geo | Geo | INAC_OTH | MW_IS | NMW_IS | NSAL | RET | UNE | UNK |
|---|---|---|---|---|---|---|---|---|
| AT | Austria | 1000 | 999 | 1000 | 1002 | 998 | 1004 | NA |
| BE | Belgium | 1001 | 998 | 998 | 1002 | 1000 | 998 | NA |
| BG | Bulgaria | 998 | 999 | 1001 | 1000 | 998 | 996 | NA |
| CY | Cyprus | 994 | 998 | 998 | 1000 | 993 | 996 | NA |
| DE | Germany | 978 | 988 | 992 | 988 | 993 | 999 | NA |
| DK | Denmark | 998 | 1002 | 1003 | 1002 | 999 | 1002 | 1003 |
| EE | Estonia | 984 | 986 | 989 | 988 | 984 | 983 | 978 |
| EL | Greece | 999 | 999 | 1000 | 1000 | 999 | 995 | NA |
| ES | Spain | 998 | 998 | 1000 | 1001 | 1000 | 1000 | NA |
| FI | Finland | 979 | 986 | 970 | 973 | 990 | 981 | NA |
| FR | France | 994 | 995 | 988 | 982 | 990 | 1000 | 998 |
| HR | Croatia | 1001 | 1000 | 1003 | 999 | 995 | 998 | NA |
| HU | Hungary | 1003 | 998 | 997 | 1003 | 1001 | 1000 | 1001 |
| IE | Ireland | 1003 | 1000 | 999 | 1000 | 1001 | 1000 | 999 |
| IT | Italy | 996 | 1000 | 999 | 1001 | 998 | 1003 | 1002 |
| LT | Lithuania | 999 | 1001 | 1000 | 1003 | 999 | 997 | NA |
| LU | Luxembourg | 1002 | 1001 | 1001 | 998 | 997 | 1000 | NA |
| LV | Latvia | 998 | 1002 | 1001 | 997 | 1001 | 1000 | NA |
| ME | Montenegro | 989 | 981 | 987 | 989 | 982 | 981 | NA |
| MT | Malta | 1003 | 999 | 1001 | 1000 | 999 | 999 | 998 |
| NO | Norway | NA | NA | NA | NA | NA | NA | 991 |
| PL | Poland | 1000 | 997 | 996 | 996 | 996 | 1001 | 999 |
| RS | Serbia | 1002 | 996 | 999 | 1002 | 999 | 1000 | NA |
| SI | Slovenia | 999 | 998 | 1000 | 999 | 1002 | 996 | 999 |
| SK | Slovakia | 998 | 1000 | 1001 | 998 | 998 | 999 | NA |
| TR | Türkiye | 998 | 1002 | 999 | 1002 | 1001 | 997 | 1002 |
CP041, CP042, CP041_042
2015
France
Code
hbs_str_t221 |>
filter(coicop %in% c("CP041", "CP042"),
time == "2015",
geo %in% c("FR")) |>
spread(coicop, values) |>
mutate(CP041_042 = CP041 + CP042) |>
gather(coicop, values, CP041, CP042, CP041_042) |>
mutate(Coicop = ifelse(coicop == "CP041_042", "Imputed rentals plus actual rentals", Coicop),
wstatus = ifelse(wstatus == "Y_GE60", "Y60+", wstatus),
wstatus = ifelse(wstatus == "Y_LT30", "Y30-", wstatus)) |>
ggplot() + geom_line(aes(x = Wstatus, y = values/1000, color = Coicop, group = Coicop)) +
theme_minimal() +
xlab("") + ylab("Weight in CPI") +
scale_y_continuous(breaks = 0.01*seq(-30, 50, 2),
labels = percent_format(accuracy = 1)) +
theme(legend.position = c(0.2, 0.9),
legend.title = element_blank(),
axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1))

