Standard NI underlying detail tables - NIUnderlyingDetail

Data - BEA


List of Main Tables

Code
paste0("https://apps.bea.gov/api/data/?&",
       "UserID=", bea_key, "&",
       "method=GetParameterValues&",
       "datasetname=NIUnderlyingDetail&",
       "ParameterName=TableName&") |>
  fromJSON() |>
  pluck("BEAAPI", "Results", "ParamValue") |>
  select(TableName, Description) %>%
  filter(TableName %in% (list.files(pattern = "\\.qmd$") %>% gsub(".qmd$", "", .))) |>
  mutate(html = paste0('<a  target=_blank href=', TableName, '.html > html </a>')) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F, escape = F) else .}

List of Parameters

Code
paste0("https://apps.bea.gov/api/data/?&",
       "UserID=", bea_key, "&",
       "method=GetParameterList&",
       "DataSetName=NIUnderlyingDetail&") |>
  fromJSON() |>
  pluck("BEAAPI", "Results", "Parameter") |> 
  select(ParameterName, ParameterDataType, ParameterDescription) %>%
  {if (is_html_output()) print_table(.) else .}
ParameterName ParameterDataType ParameterDescription
Frequency string A - Annual, Q-Quarterly, M-Monthly
TableID integer The standard NI underlying detail table identifier
TableName string The new NIPA table identifier
Year integer List of year(s) of data to retrieve (X for All)

List of 75 Tables

Code
paste0("https://apps.bea.gov/api/data/?&",
       "UserID=", bea_key, "&",
       "method=GetParameterValues&",
       "datasetname=NIUnderlyingDetail&",
       "ParameterName=TableName&") |>
  fromJSON() |>
  pluck("BEAAPI", "Results", "ParamValue") |>
  select(TableName, Description) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}

List of Frequencies

Code
paste0("https://apps.bea.gov/api/data/?&",
       "UserID=", bea_key, "&",
       "method=GetParameterValues&",
       "datasetname=NIUnderlyingDetail&",
       "ParameterName=Frequency&") |>
  fromJSON() |>
  pluck("BEAAPI", "Results", "ParamValue") %>%
  {if (is_html_output()) print_table(.) else .}
FrequencyID Description
A Annual
Q Quarterly
M Monthly

Ex 1

Code
paste0("https://apps.bea.gov/api/data/?&",
       "UserID=", bea_key, "&",
       "method=GetData&",
       "DataSetName=NIUnderlyingDetail&",
       "TableName=U20405&",
       "Frequency=A&",
       "Year=ALL&",
       "ResultFormat=JSON") |>
  fromJSON() |> 
  pluck("BEAAPI", "Results", "Data") |> 
  select(TableName, LineDescription, TimePeriod, SeriesCode, DataValue, LineNumber) %>%
  mutate_at(vars(DataValue, LineNumber), funs(gsub(",", "", .) |> as.numeric())) |>
  mutate(date = TimePeriod |> paste0("-01-01") |> as.Date()) |>
  select(LineNumber, LineDescription, SeriesCode, date, DataValue) |>
  arrange(date, LineNumber) |>
  filter(date == as.Date("2018-01-01")) |>
  select(-date) %>%
  mutate(`Share (%)` = (100*DataValue / DataValue[1]) |> round(digits = 2)) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}

Ex 2

Code
paste0("https://apps.bea.gov/api/data/?&",
       "UserID=", bea_key, "&",
       "method=GetData&",
       "DataSetName=NIUnderlyingDetail&",
       "TableName=U20405&",
       "Frequency=Q&",
       "Year=ALL&",
       "ResultFormat=JSON") |>
  fromJSON() |> 
  pluck("BEAAPI", "Results", "Data") %>% 
  mutate(DataValue = DataValue %>% gsub(",", "", .) |> as.numeric()) %>%
  mutate(year = substr(TimePeriod, 1, 4),
         qtr = substr(TimePeriod, 6, 6) |> as.numeric(),
         month = ((qtr-1)*3+1) |> str_pad(2, pad = "0"),
         date = paste0(year, "-", month, "-01") |> as.Date()) |>
  filter(LineNumber == 1,
         date >= as.Date("2006-01-01"), 
         date <= as.Date("2010-01-01")) |>
  mutate(DataValue = DataValue/1000) |>
  ggplot() + geom_line(aes(x = date, y = DataValue)) + theme_minimal() +
  scale_x_date(breaks = seq(1870, 2100, 1) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = function(x) seq(1000*floor(min(x)/1000), max(x), 100),
                     labels = dollar_format(suffix = "Bn", prefix = "$")) + 
  xlab("") + ylab("Total Consumption") + 
  geom_vline(xintercept = as.Date("2008-09-15"), linetype = "dashed", color = viridis(3)[2])