Structure of consumption expenditure by activity and employment status of the reference person and COICOP consumption purpose

Data - Eurostat

Info

source dataset .html .RData
eurostat hbs_str_t221 2024-11-01 2024-10-08
insee bdf2017 2024-11-05 2023-11-21
insee if203 2024-11-05 2023-07-20

Data on housing

source dataset .html .RData
bdf RPP 2024-07-26 2024-07-01
bis LONG_PP 2024-08-09 2024-05-10
bis SELECTED_PP 2024-10-31 2024-10-31
ecb RPP 2024-10-08 2024-10-30
eurostat ei_hppi_q 2024-11-05 2024-10-23
eurostat hbs_str_t223 2024-11-01 2024-11-05
eurostat prc_hicp_midx 2024-11-01 2024-11-05
eurostat prc_hpi_q 2024-11-01 2024-10-09
fred housing 2024-11-01 2024-11-01
insee IPLA-IPLNA-2015 2024-11-05 2024-11-05
oecd housing 2024-09-15 2020-01-18
oecd SNA_TABLE5 2024-09-11 2023-10-19

LAST_COMPILE

LAST_COMPILE
2024-11-05

Last

Code
hbs_str_t221 %>%
  group_by(time) %>%
  summarise(Nobs = n()) %>%
  arrange(desc(time)) %>%
  head(2) %>%
  print_table_conditional()
time Nobs
2020 9785
2015 12108

coicop

All

Code
hbs_str_t221 %>%
  left_join(coicop, by = "coicop") %>%
  group_by(coicop, Coicop) %>%
  summarise(Nobs = n()) %>%
  print_table_conditional()

2-digit

Code
hbs_str_t221 %>%
  filter(nchar(coicop) == 4) %>%
  left_join(coicop, by = "coicop") %>%
  group_by(coicop, Coicop) %>%
  summarise(Nobs = n()) %>%
  print_table_conditional()
coicop Coicop Nobs
CP01 Food and non-alcoholic beverages 1119
CP02 Alcoholic beverages, tobacco and narcotics 1116
CP03 Clothing and footwear 1119
CP04 Housing, water, electricity, gas and other fuels 1119
CP05 Furnishings, household equipment and routine household maintenance 1119
CP06 Health 1116
CP07 Transport 1116
CP08 Communications 1119
CP09 Recreation and culture 1119
CP10 Education 1101
CP11 Restaurants and hotels 1116
CP12 Miscellaneous goods and services 1119

3-digit

Code
hbs_str_t221 %>%
  filter(nchar(coicop) == 5) %>%
  left_join(coicop, by = "coicop") %>%
  group_by(coicop, Coicop) %>%
  summarise(Nobs = n()) %>%
  print_table_conditional()

4-digit

Code
hbs_str_t221 %>%
  filter(nchar(coicop) == 6) %>%
  left_join(coicop, by = "coicop") %>%
  group_by(coicop, Coicop) %>%
  summarise(Nobs = n()) %>%
  print_table_conditional()

wstatus

Code
hbs_str_t221 %>%
  left_join(wstatus, by = "wstatus") %>%
  group_by(wstatus, Wstatus) %>%
  summarise(Nobs = n()) %>%
  print_table_conditional()
wstatus Wstatus Nobs
INAC_OTH Other persons outside the labour force (former name: inactive persons) 10075
MW_IS Manual workers in industry and services 10150
NMW_IS Non-manual workers in industry and services 9986
NSAL Employed persons except employees 10343
RET Retired persons 10201
UNE Unemployed persons 10021
UNK Unknown 3859

geo

Code
hbs_str_t221 %>%
  left_join(geo, by = "geo") %>%
  group_by(geo, Geo) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  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 .}

unit

Code
hbs_str_t221 %>%
  group_by(unit) %>%
  summarise(Nobs = n()) %>%
  print_table_conditional()
unit Nobs
PM 64635

time

Code
hbs_str_t221 %>%
  group_by(time) %>%
  summarise(Nobs = n()) %>%
  print_table_conditional()
time Nobs
1988 3310
1994 5529
1999 4870
2005 11381
2010 17652
2015 12108
2020 9785

France - Compare

2020, HBS

Code
hbs_str_t221 %>%
  filter(time == "2020",
         geo == "FR") %>%
  left_join(coicop, by = "coicop") %>%
  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") %>%
  left_join(coicop, by = "coicop") %>%
  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) %>%
  left_join(coicop, by = "coicop") %>%
  select_if(~ n_distinct(.) > 1) %>%
  spread(wstatus, values) %>%
  select_if(~ n_distinct(.) > 1) %>%
  print_table_conditional
coicop Coicop INAC_OTH MW_IS NMW_IS NSAL RET UNE UNK
CP01 Food and non-alcoholic beverages 154 145 126 125 168 152 124
CP02 Alcoholic beverages, tobacco and narcotics 39 32 22 24 23 32 23
CP03 Clothing and footwear 51 47 46 38 24 49 40
CP04 Housing, water, electricity, gas and other fuels 316 276 270 262 324 311 304
CP05 Furnishings, household equipment and routine household maintenance 39 41 47 47 56 38 45
CP06 Health 14 15 16 12 17 17 9
CP07 Transport 89 147 140 165 108 113 215
CP08 Communications 35 28 22 21 21 35 16
CP09 Recreation and culture 70 71 84 83 72 70 78
CP10 Education 24 5 8 10 1 5 3
CP11 Restaurants and hotels 52 50 72 70 29 46 46
CP12 Miscellaneous goods and services 115 143 147 142 156 133 98

All quintiles

Sums

2-digit

Code
hbs_str_t221 %>%
  filter(time == "2020",
         substr(coicop, 1, 2) == "CP",
         nchar(coicop) == 4) %>%
  left_join(geo, by = "geo") %>%
  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
CZ Czechia NA NA NA NA NA NA 1000
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) 1000 1001 1001 1001 1000 999 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
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
NL Netherlands 999 NA NA 1001 1000 1000 999
PL Poland 1001 1000 998 1001 1001 1000 1000
PT Portugal NA NA NA NA NA NA 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) %>%
  left_join(geo, by = "geo") %>%
  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
CZ Czechia NA NA NA NA NA NA 1000
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
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
NL Netherlands 998 NA NA 1000 999 999 1002
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) %>%
  left_join(wstatus, by = "wstatus") %>%
  left_join(coicop, by = "coicop") %>%
  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))