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

I graphed the data by century and region instead of decade to make
the long term trends easier to interpret in the graph.
- 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.