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 374349
100000 Total private 52317
110099 Mining and logging 7731
230000 Construction 7731
300000 Manufacturing 7731
320000 Durable goods manufacturing 7731
340000 Nondurable goods manufacturing 7731
400000 Trade, transportation, and utilities 7731
420000 Wholesale trade 7731
440000 Retail trade 7731
480099 Transportation, warehousing, and utilities 7731
510000 Information 7731
510099 Financial activities 7731
520000 Finance and insurance 7731
530000 Real estate and rental and leasing 7731
540099 Professional and business services 7731
600000 Private education and health services 7731
610000 Private educational services 7731
620000 Health care and social assistance 7731
700000 Leisure and hospitality 7731
710000 Arts, entertainment, and recreation 7731
720000 Accommodation and food services 7731
810000 Other services 7731
900000 Government 7731
910000 Federal 7731
920000 State and local 7731
923000 State and local government education 7731
929000 State and local government, excluding education 7731

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 112522
JO Job openings 112522
LD Layoffs and discharges 112522
OS Other separations 48568
QU Quits 112522
R1 First closing response rate 436
R2 Second closing response rate 398
TS Total separations 112522
UO Unemployed persons per job opening ratio 15660

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 305589
R Rate 322083

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 310074
U Not Seasonally Adjusted 317598

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")