Overview

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

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.

Note on firms with more than one owner

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

Charts

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.

Racial Composition of Business Ownership by County

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

Minority Status Composition of Business Ownership by County

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

Count of Firms by Business Ownership Race by County

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

Count of Firms by Business Ownership Race by County

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

Table/Download Data

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

  1. Renaissance Planning, ↩︎