---
title: "New Jersey Unemployment Rate by Race and Ethnicity"
output:
  html_document:
    df_print: paged
    code_download: true
---

```{r setup, include=FALSE}
library(tidyverse)
library(tidycensus)
library(scales)
library(plotly)
options(scipen = 999)
```

```{r echo=F, message=F, warning=F}
acs5_subject <- load_variables(year = 2021, dataset = "acs5/subject", cache = T) 

s2301_vars <- acs5_subject |> 
  filter(grepl("S2301", name))

## create a table of all unemployment rate variables in the ACS subject tables
unemployment <- s2301_vars |> 
  filter(name == "S2301_C04_001" | 
           (grepl("RACE AND HISPANIC OR LATINO ORIGIN", label) & grepl("Unemployment rate", label))) |> 
  mutate(description = case_when(name == "S2301_C01_001" ~ "pop",
                                 name == "S2301_C04_001" ~ "Total Population",
                                 name == "S2301_C04_012" ~ "White",
                                 name == "S2301_C04_013" ~ "Black",
                                 name == "S2301_C04_014" ~ "Native",
                                 name == "S2301_C04_015" ~ "Asian",
                                 name == "S2301_C04_016" ~ "PI",
                                 name == "S2301_C04_017" ~ "Other",
                                 name == "S2301_C04_018" ~ "Multiracial",
                                 name == "S2301_C04_019" ~ "Latinx/Hispanic",
                                 name == "S2301_C04_020" ~ "White, Not Latinx/Hispanic")) |> 
  select(name, description)

### make a list of the variables I want from one of the columns of my dataframe
unemployment_vars <- as.list(unemployment$name)

### import the data from acs
# notice that I am not using the output = "wide parameter
# the long format is better for the bar chart I'm making
nj_raw_unemployment <- get_acs(survey = "acs5",
                               geography = "state", 
                               state = "NJ",
                               variables= unemployment_vars, 
                               year = 2021) |> 
  left_join(unemployment, by = c("variable" = "name"))

### create a variable that holds the statewide unemployment rate to create a line in the barchart
## this extracts the value of estimate for the row where description =="Total Population"
## I'm dividing it by 100 so that it is normal percentage format
nj_raw_statewide_unemployment_rate = nj_raw_unemployment$estimate[nj_raw_unemployment$description =="Total Population"]/100

nj_unemployment <- nj_raw_unemployment |> 
  select(-variable) |> 
  rename(group = description,
         unemployment_rate = estimate) |> 
  select(group, unemployment_rate, moe) |> 
  ### remove rows with very high margin of error and rows that I don't want to include in my plot
  filter(moe < 1,
         group != "White",
         group != "Total Population") |> 
  ### divid by 100 so that it is normal percentage format
  mutate(unemployment_rate = unemployment_rate/100) 
```

```{r echo=F, message=F, warning=F}

### notice that I am using the title of the R Notebook to be the title of my plot
nj_unemployment_plot <- ggplot(data=nj_unemployment, aes(x=reorder(group,unemployment_rate), 
                                 y=unemployment_rate,
                                 text = paste0("The unemployment rate for people that identify as <br>", group, 
                                               " in the Census is ",
                                               scales::percent(unemployment_rate, accuracy=1),
                                               " (+/- ", scales::comma(moe, accuracy=.1), ")."))) +
  geom_col(fill = "#c5c6d0") +
  geom_hline(aes(yintercept = 0.055),size = 1, colour = "#32a991", linetype="dotted") + 
  theme(axis.text.x=element_text(angle=25,hjust=1),
        axis.title = element_blank()) +
  scale_y_continuous(label=scales::percent_format(accuracy = 1L)) +
  annotate("text", x=1.75, y=nj_raw_statewide_unemployment_rate, label= "State-wide Unemployment Rate", color = "#32a991") +
  theme(panel.border = element_blank(), 
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(), 
        panel.background = element_blank(), 
        axis.line = element_line(colour = "black"))

ggplotly(nj_unemployment_plot, tooltip = "text") |>
  layout(margin = list(t = 25))

```
