Banknotes statistics

Data - ECB

Info

source dataset .html .qmd .RData
ecb BKN [2025-08-29] https://fgee olf.com/

Data on monetary policy

source dataset Title Download Compile
bdf FM Marché financier, taux 2025-08-28 [2025-08-28]
bdf MIR Taux d'intérêt - Zone euro 2025-08-04 [2025-08-28]
bdf MIR1 Taux d'intérêt - France 2025-08-04 [2025-08-28]
bis CBPOL Policy Rates, Daily 2025-08-28 [2025-08-28]
ecb BSI Balance Sheet Items NA [2025-08-29]
ecb BSI_PUB Balance Sheet Items - Published series NA [2025-08-29]
ecb FM Financial market data NA [2025-08-29]
ecb ILM Internal Liquidity Management NA [2025-08-29]
ecb ILM_PUB Internal Liquidity Management - Published series 2024-09-10 [2025-08-29]
ecb MIR MFI Interest Rate Statistics 2025-08-28 [2025-08-29]
ecb RAI Risk Assessment Indicators 2025-08-28 [2025-08-29]
ecb SUP Supervisory Banking Statistics 2025-08-28 [2025-08-29]
ecb YC Financial market data - yield curve NA [2025-08-29]
ecb YC_PUB Financial market data - yield curve - Published series NA [2025-08-29]
ecb liq_daily Daily Liquidity 2025-06-06 [2025-08-29]
eurostat ei_mfir_m Interest rates - monthly data 2025-09-26 [2025-10-01]
eurostat irt_st_m Money market interest rates - monthly data 2025-09-26 [2025-10-01]
fred r Interest Rates 2025-10-01 [2025-10-02]
oecd MEI Main Economic Indicators 2025-07-24 [2024-04-16]
oecd MEI_FIN Monthly Monetary and Financial Statistics (MEI) 2025-07-24 [2024-09-15]

LAST_COMPILE

LAST_COMPILE
2025-10-09

Last

Code
BKN %>%
  group_by(TIME_PERIOD, FREQ) %>%
  summarise(Nobs = n()) %>%
  arrange(desc(TIME_PERIOD)) %>%
  head(5) %>%
  print_table_conditional()
TIME_PERIOD FREQ Nobs
2025-07 M 303
2025-06 M 303
2025-05 M 303
2025-04 M 303
2025-03 M 303

Info

FREQ

Code
BKN %>%
  left_join(FREQ,  by = "FREQ") %>%
  group_by(FREQ, Freq) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  {if (is_html_output()) print_table(.) else .}
FREQ Freq Nobs
M Monthly 176926
H Half-yearly 1574

REF_AREA

Code
BKN %>%
  left_join(REF_AREA,  by = "REF_AREA") %>%
  group_by(REF_AREA, Ref_area) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}

BKN_DENOM

Code
BKN %>%
  left_join(BKN_DENOM,  by = "BKN_DENOM") %>%
  group_by(BKN_DENOM, Bkn_denom) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}

BKN_SERIES

Code
BKN %>%
  left_join(BKN_SERIES,  by = "BKN_SERIES") %>%
  group_by(BKN_SERIES, Bkn_series) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}

SERIES_DENOM

Code
BKN %>%
  left_join(SERIES_DENOM,  by = "SERIES_DENOM") %>%
  group_by(SERIES_DENOM, Series_denom) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}

COLLECTION

Code
BKN %>%
  left_join(COLLECTION,  by = "COLLECTION") %>%
  group_by(COLLECTION, Collection) %>%
  summarise(Nobs = n()) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}

KEY

Code
BKN %>%
  group_by(KEY, TITLE) %>%
  summarise(Nobs = n()) %>%
  mutate(KEY = paste0('<a  target=_blank href=https://data.ecb.europa.eu/data/datasets/BKN/', KEY, ' >', KEY, '</a>')) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F, escape = F) else .}

Banknotes

Individual

Code
BKN %>%
  filter(KEY %in% c("BKN.M.U2.NC10.B.50P2.AS.S.E",
                    "BKN.M.U2.NC10.B.20P2.AS.S.E",
                    "BKN.M.U2.NC10.B.10P2.AS.S.E",
                    "BKN.M.U2.NC10.B.ALLD.AS.S.E")) %>%
  month_to_date %>%
  mutate(OBS_VALUE = OBS_VALUE/1000000) %>%
  left_join(BKN_DENOM,  by = "BKN_DENOM") %>%
  ggplot + geom_line(aes(x = date, y = OBS_VALUE, color = Bkn_denom)) +
  ylab("Banknotes") + xlab("") + theme_minimal() +
  theme(legend.position = c(0.45, 0.8),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = seq(0, 10000, 100),
                labels = dollar_format(acc = 1, pre = "", su = "Bn€")) +
  scale_x_date(breaks = as.Date(paste0(seq(1940, 2030, 2), "-01-01")),
               labels = date_format("%Y"))

Stacked

Code
BKN %>%
  filter(KEY %in% c("BKN.M.U2.NC10.B.50P2.AS.S.E",
                    "BKN.M.U2.NC10.B.20P2.AS.S.E",
                    "BKN.M.U2.NC10.B.10P2.AS.S.E")) %>%
  month_to_date %>%
  mutate(OBS_VALUE = OBS_VALUE/1000000) %>%
  ggplot + geom_col(aes(x = date, y = OBS_VALUE, fill = TITLE_COMPL)) +
  ylab("Liquidity-absorbing factors") + xlab("") + theme_minimal() +
  theme(legend.position = c(0.45, 0.8),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = seq(0, 10000, 100),
                labels = dollar_format(acc = 1, pre = "", su = "Bn€")) +
  scale_x_date(breaks = as.Date(paste0(seq(1940, 2030, 2), "-01-01")),
               labels = date_format("%Y"))