Part 1: Data Loading and Cleaning

library(tidyverse)

col_types_spec <- cols_only(
  id = col_integer(),
  voyage_id = col_integer(),
  voyage_dates__imp_arrival_at_port_of_dis_sparsedate__year = col_double(),
  voyage_slaves_numbers__imp_total_num_slaves_disembarked = col_double(),
  voyage_slaves_numbers__imp_total_num_slaves_embarked = col_double(),
  voyage_dates__length_middle_passage_days = col_double(),
  voyage_dates__imp_length_home_to_disembark = col_double(),
  voyage_crew__crew_first_landing = col_double(),
  voyage_crew__crew_voyage_outset = col_double(),
  voyage_ship__tonnage_mod = col_double(),
  voyage_slaves_numbers__imp_jamaican_cash_price = col_double(),
  voyage_slaves_numbers__imp_mortality_ratio = col_double(),
  voyage_slaves_numbers__percentage_women_among_embarked_slaves = col_double(),
  voyage_outcome__vessel_captured_outcome__name = col_character(),
  voyage_ship__imputed_nationality__name = col_character(),
  voyage_itinerary__imp_region_voyage_begin__name = col_character(),
  voyage_ship__rig_of_vessel__name = col_character(),
  voyage_itinerary__place_voyage_ended__name = col_character(),
  voyage_dates__slave_purchase_began_sparsedate__month = col_double(),
  voyage_slaves_numbers__percentage_men = col_double(),
  voyage_dates__voyage_completed_sparsedate__month = col_double(),
  voyage_itinerary__region_of_return__name = col_character(),
  voyage_slaves_numbers__percentage_boy = col_double(),
  voyage_itinerary__imp_principal_region_slave_dis__name = col_character(),
  voyage_itinerary__imp_principal_region_of_slave_purchase__name = col_character(),
  voyage_dates__date_departed_africa_sparsedate__month = col_double(),
  voyage_dates__voyage_began_sparsedate__month = col_double(),
  voyage_itinerary__imp_port_voyage_begin__name = col_character(),
  voyage_dates__first_dis_of_slaves_sparsedate__month = col_double(),
  voyage_itinerary__imp_broad_region_slave_dis__name = col_character(),
  voyage_slaves_numbers__percentage_girl = col_double(),
  voyage_outcome__particular_outcome__name = col_character(),
  voyage_itinerary__imp_principal_port_slave_dis__name = col_character(),
  voyage_slaves_numbers__percentage_child = col_double(),
  voyage_slaves_numbers__percentage_women = col_double(),
  voyage_dates__departure_last_place_of_landing_sparsedate__month = col_double(),
  voyage_outcome__outcome_owner__name = col_character(),
  voyage_outcome__outcome_slaves__name = col_character(),
  voyage_itinerary__imp_principal_place_of_slave_purchase__name = col_character(),
  voyage_outcome__resistance__name = col_character(),
  voyage_slaves_numbers__percentage_male = col_double(),
  voyage_slaves_numbers__percentage_female = col_double(),
  voyage_itinerary__imp_broad_region_voyage_begin__name = col_character(),
  voyage_itinerary__imp_broad_region_of_slave_purchase__name = col_character(),
  voyage_sources = col_character(),
  enslavers = col_character()
)

trans <- read_csv(
  "https://raw.githubusercontent.com/imowerman-prog/data-3210/refs/heads/main/Data/trans-atlantic.csv",
  col_types = col_types_spec
)

intra <- read_csv(
  "https://raw.githubusercontent.com/imowerman-prog/data-3210/refs/heads/main/Data/intra-american.csv",
  col_types = col_types_spec
)
- Rename long columns
trans_cleaned <- trans %>%
  rename(
    year = voyage_dates__imp_arrival_at_port_of_dis_sparsedate__year,
    slaves_disembarked = voyage_slaves_numbers__imp_total_num_slaves_disembarked,
    slaves_embarked = voyage_slaves_numbers__imp_total_num_slaves_embarked,
    outcome = voyage_outcome__outcome_slaves__name,
    captured_outcome = voyage_outcome__vessel_captured_outcome__name,
    country = voyage_ship__imputed_nationality__name,
    dis_broad = voyage_itinerary__imp_broad_region_slave_dis__name,
    dis_region = voyage_itinerary__imp_principal_region_slave_dis__name,
    dis_port = voyage_itinerary__imp_principal_port_slave_dis__name
  )

intra_cleaned <- intra %>%
  rename(
    year = voyage_dates__imp_arrival_at_port_of_dis_sparsedate__year,
    slaves_disembarked = voyage_slaves_numbers__imp_total_num_slaves_disembarked,
    slaves_embarked = voyage_slaves_numbers__imp_total_num_slaves_embarked,
    outcome = voyage_outcome__outcome_slaves__name,
    captured_outcome = voyage_outcome__vessel_captured_outcome__name,
    country = voyage_ship__imputed_nationality__name,
    dis_broad = voyage_itinerary__imp_broad_region_slave_dis__name,
    dis_region = voyage_itinerary__imp_principal_region_slave_dis__name,
    dis_port = voyage_itinerary__imp_principal_port_slave_dis__name
  )
- Convert year to integer, slave numbers to numeric
trans_cleaned <- trans_cleaned %>% 
  mutate(
    year = as.integer(year),
    slaves_embarked = as.numeric(slaves_embarked),
    slaves_disembarked = as.numeric(slaves_disembarked)
  )

intra_cleaned <- intra_cleaned %>% 
  mutate(
    year = as.integer(year),
    slaves_embarked = as.numeric(slaves_embarked),
    slaves_disembarked = as.numeric(slaves_disembarked)
  )
- Filter out rows where slaves_disembarked is 0 or NA
trans_cleaned <- trans_cleaned %>% 
  filter(!is.na(slaves_disembarked), slaves_disembarked>0)

intra_cleaned <- intra_cleaned %>% 
  filter(!is.na(slaves_disembarked), slaves_disembarked>0)
- Filter for successful outcomes
I filtered to voyages that show evidence of a successful arrival or completion (disembarkation, voyage completed, or slaves sold), removing voyages with no record of disembarkation.
intra_cleaned <- intra_cleaned %>%
  filter(
    outcome == "Slaves disembarked in Americas" |
      voyage_outcome__particular_outcome__name == "Voyage completed as intended" |
      voyage_outcome__particular_outcome__name == "Sold slaves in Americas - subsequent fate unknown"
  )

trans_cleaned <- trans_cleaned %>% 
   filter(
    outcome == "Slaves disembarked in Americas" |
      voyage_outcome__particular_outcome__name == "Voyage completed as intended" |
      voyage_outcome__particular_outcome__name == "Sold slaves in Americas - subsequent fate unknown"
  )
- Add new columns: decade, century, estimated_deaths, is_us
trans_cleaned <- trans_cleaned %>% 
  mutate(
    decade = floor(year / 10) * 10,
    century = floor(year / 100) * 100,
    estimated_deaths = slaves_embarked - slaves_disembarked,
    is_us = dis_broad == "Mainland North America"
  )

intra_cleaned <- intra_cleaned %>% 
  mutate(
    decade = floor(year / 10) * 10,
    century = floor(year / 100) * 100,
    estimated_deaths = slaves_embarked - slaves_disembarked,
    is_us = dis_broad == "Mainland North America"
  )
- Combine with bind_rows + source_type
all_voyages<- bind_rows(
  trans_cleaned %>% mutate(source_type = "Trans-Atlantic"),
  intra_cleaned %>% mutate(source_type = "Intra-American")
)

Part 2: Analysis and Questions

- Total slaves imported to the US
us_total <- all_voyages %>% 
  filter(is_us== TRUE) %>% 
  summarise(total_us_disembarked = sum(slaves_disembarked, na.rm= TRUE))

us_total_number <- us_total$total_us_disembarked
The total number of slaves imported to the US is 419492
- Proportion of all slaves taken from Africa
africa_total_number <- sum(trans_cleaned$slaves_embarked, na.rm = TRUE)

us_proportion <- us_total_number / africa_total_number

us_proportion <- round(us_proportion *100, 1 )
The proportion of enslaved people taken from Africa who were imported to the US is 5.2%.
- Graph slave imports by decade to the US
us_by_decade <- all_voyages %>% 
  filter(is_us==TRUE) %>% 
  group_by(decade) %>% 
  summarise(us_disembarked = sum(slaves_disembarked, na.rm=TRUE)) %>% 
  arrange(decade)

ggplot(us_by_decade, aes(x = decade, y = us_disembarked)) +
  geom_col() +
  labs(
    title = "US Slave Imports Change Over Time by Decade",
    x = "Decade",
    y = "Total Slaves Disembarked (US)"
  ) +
  theme_classic()

- Imports to the US by century and region/state
us_region_century <- all_voyages %>%
  filter(is_us) %>%
  group_by(century, dis_region) %>%
  summarise(us_disembarked = sum(slaves_disembarked, na.rm = TRUE), .groups = "drop")

# TABLE
us_region_century %>%
  arrange(desc(us_disembarked)) %>% 
  slice_head(n = 15)
## # A tibble: 15 × 3
##    century dis_region     us_disembarked
##      <dbl> <chr>                   <dbl>
##  1    1700 South Carolina         118244
##  2    1700 Virginia                84804
##  3    1800 Gulf coast              68960
##  4    1800 South Carolina          48529
##  5    1700 Maryland                19562
##  6    1700 Georgia                 17309
##  7    1700 Gulf coast              15181
##  8    1700 New York                 9091
##  9    1800 Georgia                  5756
## 10    1800 Florida                  4498
## 11    1700 North Carolina           4119
## 12    1600 Virginia                 4059
## 13    1600 Maryland                 2902
## 14    1800 Texas                    2735
## 15    1700 Massachusetts            2579
# PLOT
ggplot(us_region_century, aes(x = dis_region, y = us_disembarked)) +
  geom_col(fill = "steelblue") +
  coord_flip() +
  facet_wrap(~century, scales = "free_y") +
  labs(
    title = "US Slave Imports by Disembarkation Region Across Centuries",
    x = "Disembarkation Region",
    y = "Total Slaves Disembarked"
  ) +
  theme_classic()

- Countries partcipating in export from Africa, by decade. Counting unique voyages by decade and country
trans_cleaned_countries <- trans_cleaned %>%
  filter(!is.na(country), country != "0")

country_decade_voyages <- trans_cleaned_countries %>%
  group_by(decade, country) %>%
  summarise(voyages = n_distinct(voyage_id), .groups = "drop") %>%
  arrange(desc(voyages))

country_decade_voyages %>% slice_head(n = 20)
## # A tibble: 20 × 3
##    decade country           voyages
##     <dbl> <chr>               <int>
##  1   1760 Great Britain        1270
##  2   1790 Great Britain        1199
##  3   1770 Great Britain        1168
##  4   1820 Portugal / Brazil    1107
##  5   1800 Great Britain        1097
##  6   1750 Great Britain         903
##  7   1730 Great Britain         840
##  8   1810 Portugal / Brazil     756
##  9   1720 Great Britain         752
## 10   1780 Great Britain         747
## 11   1830 Portugal / Brazil     747
## 12   1710 Great Britain         636
## 13   1810 Spain / Uruguay       621
## 14   1740 Great Britain         587
## 15   1780 France                580
## 16   1700 Great Britain         565
## 17   1800 Portugal / Brazil     492
## 18   1800 U.S.A.                492
## 19   1770 France                477
## 20   1790 Portugal / Brazil     408
Great Britain dominated export voyages during the peak decades of the slave trade. The late 18th century represents the highest concentration of voyages among participating countries.

Part 3: Summary

- Approximately 419,492 enslaved people were imported to the United States, representing about 5.2% of all enslaved people taken from Africa in the trans-Atlantic trade.

- Although the United States is often viewed as the largest importer of enslaved people, the data shows that most enslaved individuals were transported to other regions, especially the Caribbean and South America.

- South Carolina and Virginia were the primary disembarkation regions in the 1700s, while the Gulf Coast became more significant in the 1800s.