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 )
successful_outcomes <- c( “Sold slaves in Americas - subsequent fate unknown”, “Voyage completed as intended”, “Captured by pirates or privateers - after disembarkation”, “Condemned - Americas after disembarkation”, “Detained and condemned in the United States after slaves disembarked”, “Condemned in the Americas by British after slaves disembarked”, “Captured by pirates - slaves sold in Americas from another ship”, “Shipwrecked or destroyed, after disembarkation”, “Privateer captured slaves at sea and delivered for sale in America”, “Prisoners of war stole slaves during escape and carried to port of sale”, “Captives seized from vessel by Spanish officials and sold”, “Captured by Dutch - after disembarkation”, “Shipwrecked, slaves salvaged”, “Captured by slaves, recaptured and landed slaves in the Americas” )
rename_keys <- c( year = “voyage_dates__imp_arrival_at_port_of_dis_sparsedate__year”, slaves_embarked = “voyage_slaves_numbers__imp_total_num_slaves_embarked”, slaves_disembarked = “voyage_slaves_numbers__imp_total_num_slaves_disembarked”, particular_outcome = “voyage_outcome__particular_outcome__name”, dis_broad = “voyage_itinerary__imp_broad_region_slave_dis__name”, dis_port = “voyage_itinerary__imp_principal_port_slave_dis__name”, embark_broad = “voyage_itinerary__imp_broad_region_of_slave_purchase__name”, embark_port = “voyage_itinerary__imp_principal_place_of_slave_purchase__name”, ship_nation = “voyage_ship__imputed_nationality__name” )
trans <- trans %>% dplyr::rename( year = voyage_dates__imp_arrival_at_port_of_dis_sparsedate__year, slaves_embarked = voyage_slaves_numbers__imp_total_num_slaves_embarked, slaves_disembarked = voyage_slaves_numbers__imp_total_num_slaves_disembarked, particular_outcome = voyage_outcome__particular_outcome__name, dis_broad = voyage_itinerary__imp_broad_region_slave_dis__name, dis_port = voyage_itinerary__imp_principal_port_slave_dis__name, embark_broad = voyage_itinerary__imp_broad_region_of_slave_purchase__name, embark_port = voyage_itinerary__imp_principal_place_of_slave_purchase__name ) %>% mutate( year = as.integer(year), slaves_embarked = as.numeric(slaves_embarked), slaves_disembarked = as.numeric(slaves_disembarked) ) %>% filter( !is.na(slaves_disembarked), slaves_disembarked > 0, particular_outcome %in% successful_outcomes ) %>% mutate( decade = floor(year / 10) * 10, estimated_deaths = slaves_embarked - slaves_disembarked, is_us = dis_broad == “Mainland North America” | str_detect(dis_port, regex(“United States|Boston|Charleston|New York|Philadelphia|Savannah|New Orleans”, ignore_case = TRUE)), embark_is_us = embark_broad == “Mainland North America” | str_detect(embark_port, regex(“United States|New Orleans”, ignore_case = TRUE)), source_type = “Trans-Atlantic” )
intra <- intra %>% dplyr::rename( year = voyage_dates__imp_arrival_at_port_of_dis_sparsedate__year, slaves_embarked = voyage_slaves_numbers__imp_total_num_slaves_embarked, slaves_disembarked = voyage_slaves_numbers__imp_total_num_slaves_disembarked, particular_outcome = voyage_outcome__particular_outcome__name, dis_broad = voyage_itinerary__imp_broad_region_slave_dis__name, dis_port = voyage_itinerary__imp_principal_port_slave_dis__name, embark_broad = voyage_itinerary__imp_broad_region_of_slave_purchase__name, embark_port = voyage_itinerary__imp_principal_place_of_slave_purchase__name ) %>% mutate( year = as.integer(year), slaves_embarked = as.numeric(slaves_embarked), slaves_disembarked = as.numeric(slaves_disembarked) ) %>% filter( !is.na(slaves_disembarked), slaves_disembarked > 0, particular_outcome %in% successful_outcomes ) %>% mutate( decade = (year %/% 10) * 10, estimated_deaths = slaves_embarked - slaves_disembarked, is_us = dis_broad == “Mainland North America” | str_detect(dis_port, regex(“United States|Boston|Charleston|New York|Philadelphia|Savannah|Norfolk|Baltimore|New Orleans|Providence|Alexandria”, ignore_case = TRUE)), embark_is_us = embark_broad == “Mainland North America” | str_detect(embark_port, regex(“United States|New Orleans|Charleston|New York|Philadelphia”, ignore_case = TRUE)), source_type = “Intra-American” )
gross_us <- trans %>% filter(is_us == TRUE) %>% summarise(gross_us = sum(slaves_disembarked, na.rm = TRUE)) %>% pull(gross_us)
re_exports <- trans %>% filter(source_type == “Intra-American”, embark_is_us == TRUE, is_us == FALSE) %>% summarise(re_exports = sum(slaves_embarked, na.rm = TRUE)) %>% pull(re_exports)
net_us <- gross_us - re_exports
trans_total_embarked <- trans %>% summarize(total_embarked = sum(slaves_embarked, na.rm = TRUE)) %>% pull(total_embarked)
proportion <- net_us / trans_total_embarked
cat(“Proportion of all slaves taken from Africa (net US):”, proportion, “”) ## Proportion of all slaves taken from Africa (net US): 0.05114323
trans_clean <- trans %>% mutate( decade = (year %/% 10) * 10, us_state = case_when( str_detect(dis_port, “New Orleans”) ~ “Louisiana”, str_detect(dis_port, “Charleston”) ~ “South Carolina”, str_detect(dis_port, “Savannah”) ~ “Georgia”, str_detect(dis_port, “Virginia”) ~ “Virginia”, str_detect(dis_port, “Maryland”) ~ “Maryland”, str_detect(dis_port, “New York”) ~ “New York”, str_detect(dis_port, “Philadelphia”) ~ “Pennsylvania”, TRUE ~ “Other/Unknown” ) )
us_by_decade <- trans_clean %>% filter(is_us == TRUE) %>% group_by(decade) %>% summarise( total_imports = sum(slaves_disembarked, na.rm = TRUE), .groups = “drop” ) %>% arrange(decade)
ggplot(us_by_decade, aes(x = decade, y = total_imports)) + geom_col() + labs( title = “Slaves Imported to the US by Decade”, x = “Decade”, y = “Slaves Disembarked” ) + theme_minimal()
us_by_state <- trans_clean %>% filter(is_us == TRUE) %>% group_by(decade, us_state) %>% summarise( total_imports = sum(slaves_disembarked, na.rm = TRUE), .groups = “drop” )
ggplot(us_by_state, aes(x = decade, y = total_imports)) + geom_col() + facet_wrap(~ us_state, scales = “free_y”) + labs( title = “US Slave Imports by Decade and State”, x = “Decade”, y = “Slaves Disembarked” ) + theme_minimal() + theme(legend.position = “none”)