This purpose of this analysis is to identify the racial makeup of business ownership in the Berkeley-Charleston-Dorchester Council of Governments (BCDCOG) region in South Carolina.
Data on the racial makeup of business ownership is obtained from the Census Annual Business Survey (ABS) via the Census API R package censusapi. According to Census documentation, ABS “provides information on selected economic and demographic characteristics for businesses and business owners by sex, ethnicity, race, and veteran status.”
Detailed documentation on the data used in this analysis is available in this pdf. Data from 2017 (published in 2018) is used, as the more recent vintage representing 2018 is not available at the county level.
Census documentation states that, “for all firms classifiable by sex, ethnicity, race, and veteran status, the details are counted based on the person(s) owning 51 percent or more of the stock or equity in the business. These estimates are tabulated by single attribute (such as female-owned). Separate estimates are counted and tabulated for firms equally owned (50 percent/ 50 percent).”
#list al census apis
#apis <- listCensusApis()
#View(apis)
#get variables in abscs api (American Business Survey) for api query
vars <- listCensusMetadata(
name = "abscs",
vintage = 2017,
type = "variables") %>%
pull(name)
#query api for county-level data for south carolina
abs_data_county <- getCensus(
name = "abscs",
vintage = 2017,
vars = vars,
region = "county:*",
regionin = "state:45",
key = Sys.getenv("CENSUS_API_KEY")
)
#build county name lookup table
countyname_lookup <- data.frame(
county = c(
"019",
"015",
"035"),
countyname = c(
"Charleston",
"Berkeley",
"Dorchester"))
#build race lookup table
race_lookup <- data.frame(RACE_GROUP = c(
"00",
"30",
"40",
"50",
"60",
"61",
"62",
"63",
"64",
"65",
"66",
"70",
"71",
"72",
"73",
"74",
"90",
"91",
"92",
"96",
"98"),
race_group_name = c(
"Total",
"White",
"Black or African American",
"American Indian and Alaska Native",
"Asian",
"Asian Indian",
"Chinese",
"Filipino",
"Japanese",
"Korean",
"Vietnamese",
"Native Hawaiian and Other Pacific Islander",
"Native Hawaiian",
"Guamanian or Chamorro",
"Samoan",
"Other Pacific Islander",
"Minority",
"Equallyminority/nonminority",
"Nonminority",
"Classifiable",
"Unclassifiable"))
#filter dataset to essentially remove filters based on non-race characteristics
abs_data_tricounty <- abs_data_county %>%
dplyr::filter(EMPSZFI == "001", #business size class by emp num -- all
RCPSZFI == "001", #sales receipts -- all
YIBSZFI == "001", #years in business -- all
SEX == "001", #sex -- all
ETH_GROUP == "001", #ethnic -- all
VET_GROUP== "001", #vet status -- all
NAICS2017 == "00", #naic codes -- total of all codes
county %in% countyname_lookup$county) %>%
group_by(county, RACE_GROUP) %>%
summarise(firms = sum(as.numeric(FIRMPDEMP))) %>%
left_join(race_lookup) %>%
left_join(countyname_lookup) %>%
dplyr::select(firms, race_group_name, countyname)
#data documentation here
#https://www2.census.gov/programs-surveys/abs/technical-documentation/api/2018-company-summary.pdf
The following charts plot the distribution of business ownership by race and minority status by county. All charts based on data obtained from the Census Annual Business Survey (ABS), 2017.
ggplotly(abs_data_tricounty %>%
dplyr::filter(race_group_name %in% c(
"American Indian and Alaksa Native",
"Asian",
"Black or African American",
"Native Hawaiian and Other Pacific Islander",
"White")) %>%
ggplot(aes(fill=race_group_name,
y=firms,
x=countyname)) +
geom_bar(position="fill",
stat="identity") +
scale_y_continuous(labels = scales::percent) +
theme(legend.title = element_blank()) +
xlab("County") + ylab("Count of Firms") +
labs(caption="Source: Census Annual Business Survey (ABS), 2017"))
ggplotly(abs_data_tricounty %>%
dplyr::filter(race_group_name %in% c(
"Nonminority",
"Minority",
"Equallyminority/nonminority")) %>%
ggplot(aes(fill=race_group_name,
y=firms,
x=countyname)) +
geom_bar(position="fill",
stat="identity") +
scale_y_continuous(labels = scales::percent) +
theme(legend.title = element_blank()) +
xlab("County") + ylab("Count of Firms"))
ggplotly(abs_data_tricounty %>%
dplyr::filter(race_group_name %in% c(
"American Indian and Alaksa Native",
"Asian",
"Black or African American",
"Native Hawaiian and Other Pacific Islander",
"White")) %>%
ggplot(aes(fill=race_group_name,
y=firms,
x=countyname)) +
geom_bar(stat="identity") +
theme(legend.title = element_blank()) +
xlab("County") + ylab("Count of Firms"))
ggplotly(abs_data_tricounty %>%
dplyr::filter(race_group_name %in% c(
"Nonminority",
"Minority",
"Equallyminority/nonminority")) %>%
ggplot(aes(fill=race_group_name,
y=firms,
x=countyname)) +
geom_bar(stat="identity") +
theme(legend.title = element_blank()) +
xlab("County") + ylab("Count of Firms"))
The table below represents all data obtained as part of this analysis. Note that the table must be filtered by race to prevent double counting of the number of firms. Download all data using the button of your choice.
abs_data_tricounty %>%
datatable(class = 'cell-border stripe',
extensions = 'Buttons',
options = list(
dom = 'Bfrtip',
buttons = c('copy', 'csv', 'excel')
))
Renaissance Planning, jlehman@citiesthatwork.com↩︎