Job Openings and Labor Turnover Survey - JT

Data - BLS

jt.industry

Code
jt.data.1.AllItems |>
  left_join(jt.series, by = "series_id") |>
  left_join(jt.industry, by = "industry_code") |>
  group_by(industry_code, industry_text) |>
  summarise(Nobs = n()) |>
  print_table_conditional()
industry_code industry_text Nobs
0 Total nonfarm 374218
100000 Total private 52135
110099 Mining and logging 7705
230000 Construction 7705
300000 Manufacturing 7705
320000 Durable goods manufacturing 7705
340000 Nondurable goods manufacturing 7705
400000 Trade, transportation, and utilities 7705
420000 Wholesale trade 7705
440000 Retail trade 7705
480099 Transportation, warehousing, and utilities 7705
510000 Information 7705
510099 Financial activities 7705
520000 Finance and insurance 7705
530000 Real estate and rental and leasing 7705
540099 Professional and business services 7705
600000 Private education and health services 7705
610000 Private educational services 7705
620000 Health care and social assistance 7705
700000 Leisure and hospitality 7705
710000 Arts, entertainment, and recreation 7705
720000 Accommodation and food services 7705
810000 Other services 7705
900000 Government 7705
910000 Federal 7705
920000 State and local 7705
923000 State and local government education 7705
929000 State and local government, excluding education 7705

jt.dataelement

Code
jt.data.1.AllItems |>
  left_join(jt.series, by = "series_id") |>
  left_join(jt.dataelement, by = "dataelement_code") |>
  group_by(dataelement_code, dataelement_text) |>
  summarise(Nobs = n()) |>
  print_table_conditional()
dataelement_code dataelement_text Nobs
HI Hires 112370
JO Job openings 112370
LD Layoffs and discharges 112370
OS Other separations 48416
QU Quits 112370
R1 First closing response rate 398
R2 Second closing response rate 360
TS Total separations 112370
UO Unemployed persons per job opening ratio 15659

jt.ratelevel

Code
jt.data.1.AllItems |>
  left_join(jt.series, by = "series_id") |>
  left_join(jt.ratelevel, by = "ratelevel_code") |>
  group_by(ratelevel_code, ratelevel_text) |>
  summarise(Nobs = n()) |>
  print_table_conditional()
ratelevel_code ratelevel_text Nobs
L Level - In Thousands 305133
R Rate 321550

jt.region

Code
jt.region %>%
  {if (is_html_output()) print_table(.) else .}
region_code region_text display_level selectable sort_sequence
00 Total US 0 T 1
MW Midwest (Only available for Total Nonfarm) 1 T 4
NE Northeast (Only available for Total Nonfarm) 1 T 2
SO South (Only available for Total Nonfarm) 1 T 3
WE West (Only available for Total Nonfarm) 1 T 5

jt.seasonal

Code
jt.data.1.AllItems |>
  left_join(jt.series, by = "series_id") |>
  left_join(jt.seasonal, by = c("seasonal" = "seasonal_code")) |>
  group_by(seasonal, seasonal_text) |>
  summarise(Nobs = n()) |>
  print_table_conditional()
seasonal seasonal_text Nobs
S Seasonally Adjusted 309617
U Not Seasonally Adjusted 317066

Monthly Job Openings, Layoffs and Quits, in Thousands

All

Code
jt.data.1.AllItems |>
  filter(series_id %in% c("JTS000000000000000LDL",
                          "JTS000000000000000QUL",
                          "JTS000000000000000JOL")) |>
  left_join(jt.series, by = "series_id") |>
  left_join(jt.dataelement, by = "dataelement_code") |>
  month_to_date() |>
  ggplot() + 
  geom_line(aes(x = date, y = value, color = dataelement_text)) + 
  theme_minimal() +
  theme(legend.title = element_blank(),
        legend.position = c(0.6, 0.85)) +
  scale_x_date(breaks = as.Date(paste0(seq(1930, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  geom_rect(data = nber_recessions |>
              filter(Peak > as.Date("1996-01-01")), 
            aes(xmin = Peak, xmax = Trough, ymin = -Inf, ymax = +Inf), 
            fill = 'grey', alpha = 0.5) + 
  scale_y_continuous(breaks = 1000*seq(0, 20, 1),
                     labels = dollar_format(suffix = "K", prefix = "")) +
  xlab("") + ylab("Monthly Levels ('000s)")

Monthly Hires and Separations, in Thousands

All

Code
jt.data.1.AllItems |>
  filter(series_id %in% c("JTS000000000000000HIL",
                          "JTS000000000000000TSL")) |>
  left_join(jt.series, by = "series_id") |>
  left_join(jt.dataelement, by = "dataelement_code") |>
  month_to_date() |>
  ggplot() + 
  geom_line(aes(x = date, y = value, color = dataelement_text)) + 
  theme_minimal() +
  theme(legend.title = element_blank(),
        legend.position = c(0.6, 0.85)) +
  scale_x_date(breaks = as.Date(paste0(seq(1930, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  geom_rect(data = nber_recessions |>
              filter(Peak > as.Date("1996-01-01")), 
            aes(xmin = Peak, xmax = Trough, ymin = -Inf, ymax = +Inf), 
            fill = 'grey', alpha = 0.5) + 
  scale_y_continuous(breaks = 1000*seq(0, 20, 1),
                     labels = dollar_format(suffix = "K", prefix = "")) +
  xlab("") + ylab("Monthly Levels ('000s)")

Limits

Code
jt.data.1.AllItems |>
  filter(series_id %in% c("JTS000000000000000HIL",
                          "JTS000000000000000TSL")) |>
  left_join(jt.series, by = "series_id") |>
  left_join(jt.dataelement, by = "dataelement_code") |>
  month_to_date() |>
  ggplot() + 
  geom_line(aes(x = date, y = value, color = dataelement_text)) + 
  theme_minimal() +
  theme(legend.title = element_blank(),
        legend.position = c(0.6, 0.85)) +
  scale_x_date(breaks = as.Date(paste0(seq(1930, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  geom_rect(data = nber_recessions |>
              filter(Peak > as.Date("1996-01-01")), 
            aes(xmin = Peak, xmax = Trough, ymin = -Inf, ymax = +Inf), 
            fill = 'grey', alpha = 0.5) + 
  scale_y_continuous(breaks = 1000*seq(0, 20, 1),
                     labels = dollar_format(suffix = "K", prefix = ""),
                     limits = c(3000, 9000)) +
  xlab("") + ylab("Monthly Levels ('000s)")

Monthly Hires, quits, Openings

All

Code
jt.data.1.AllItems |>
  filter(series_id %in% c("JTS000000000000000HIL",
                          "JTS000000000000000JOL",
                          "JTS000000000000000QUL")) |>
  left_join(jt.series, by = "series_id") |>
  left_join(jt.dataelement, by = "dataelement_code") |>
  month_to_date() |>
  ggplot() + 
  geom_line(aes(x = date, y = value, color = dataelement_text)) + 
  theme_minimal() +
  theme(legend.title = element_blank(),
        legend.position = c(0.6, 0.85)) +
  scale_x_date(breaks = as.Date(paste0(seq(1930, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  geom_rect(data = nber_recessions |>
              filter(Peak > as.Date("1996-01-01")), 
            aes(xmin = Peak, xmax = Trough, ymin = -Inf, ymax = +Inf), 
            fill = 'grey', alpha = 0.5) + 
  scale_y_continuous(breaks = 1000*seq(0, 20, 1),
                     labels = dollar_format(suffix = "K", prefix = "")) +
  xlab("") + ylab("Monthly Levels ('000s) - Source: JOLTS")