Loading the Data Set and renaming long collumns

# Load required library
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.2
## ✔ ggplot2   4.0.0     ✔ tibble    3.3.0
## ✔ lubridate 1.9.4     ✔ tidyr     1.3.1
## ✔ purrr     1.1.0     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
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(),  # Force as 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()
)


# Load the datasets
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 columns for readability
trans1 <- trans %>%
  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,
    middle_passage_days = voyage_dates__length_middle_passage_days,
    voyage_duration = voyage_dates__imp_length_home_to_disembark,
    crew_first_landing = voyage_crew__crew_first_landing,
    crew_outset = voyage_crew__crew_voyage_outset,
    tonnage = voyage_ship__tonnage_mod,
    cash_price = voyage_slaves_numbers__imp_jamaican_cash_price,
    mortality_ratio = voyage_slaves_numbers__imp_mortality_ratio,
    pct_women = voyage_slaves_numbers__percentage_women_among_embarked_slaves,
    vessel_outcome = voyage_outcome__vessel_captured_outcome__name,
    nationality = voyage_ship__imputed_nationality__name,
    region_begin = voyage_itinerary__imp_region_voyage_begin__name,
    rig_vessel = voyage_ship__rig_of_vessel__name,
    voyage_end_place = voyage_itinerary__place_voyage_ended__name,
    purchase_month = voyage_dates__slave_purchase_began_sparsedate__month,
    pct_men = voyage_slaves_numbers__percentage_men,
    completion_month = voyage_dates__voyage_completed_sparsedate__month,
    region_return = voyage_itinerary__region_of_return__name,
    pct_boy = voyage_slaves_numbers__percentage_boy,
    principal_dis_region = voyage_itinerary__imp_principal_region_slave_dis__name,
    principal_purchase_region = voyage_itinerary__imp_principal_region_of_slave_purchase__name,
    departure_africa_month = voyage_dates__date_departed_africa_sparsedate__month,
    voyage_begin_month = voyage_dates__voyage_began_sparsedate__month,
    port_begin = voyage_itinerary__imp_port_voyage_begin__name,
    first_dis_month = voyage_dates__first_dis_of_slaves_sparsedate__month,
    dis_broad = voyage_itinerary__imp_broad_region_slave_dis__name,
    pct_girl = voyage_slaves_numbers__percentage_girl,
    particular_outcome = voyage_outcome__particular_outcome__name,
    principal_dis_port = voyage_itinerary__imp_principal_port_slave_dis__name,
    pct_child = voyage_slaves_numbers__percentage_child,
    pct_women_alt = voyage_slaves_numbers__percentage_women,
    last_landing_month = voyage_dates__departure_last_place_of_landing_sparsedate__month,
    owner_outcome = voyage_outcome__outcome_owner__name,
    slaves_outcome = voyage_outcome__outcome_slaves__name,
    principal_purchase_place = voyage_itinerary__imp_principal_place_of_slave_purchase__name,
    resistance = voyage_outcome__resistance__name,
    pct_male = voyage_slaves_numbers__percentage_male,
    pct_female = voyage_slaves_numbers__percentage_female,
    begin_broad = voyage_itinerary__imp_broad_region_voyage_begin__name,
    purchase_broad = voyage_itinerary__imp_broad_region_of_slave_purchase__name
  )

intra1 <- intra %>%
  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,
    middle_passage_days = voyage_dates__length_middle_passage_days,
    voyage_duration = voyage_dates__imp_length_home_to_disembark,
    crew_first_landing = voyage_crew__crew_first_landing,
    crew_outset = voyage_crew__crew_voyage_outset,
    tonnage = voyage_ship__tonnage_mod,
    cash_price = voyage_slaves_numbers__imp_jamaican_cash_price,
    mortality_ratio = voyage_slaves_numbers__imp_mortality_ratio,
    pct_women = voyage_slaves_numbers__percentage_women_among_embarked_slaves,
    vessel_outcome = voyage_outcome__vessel_captured_outcome__name,
    nationality = voyage_ship__imputed_nationality__name,
    region_begin = voyage_itinerary__imp_region_voyage_begin__name,
    rig_vessel = voyage_ship__rig_of_vessel__name,
    voyage_end_place = voyage_itinerary__place_voyage_ended__name,
    purchase_month = voyage_dates__slave_purchase_began_sparsedate__month,
    pct_men = voyage_slaves_numbers__percentage_men,
    completion_month = voyage_dates__voyage_completed_sparsedate__month,
    region_return = voyage_itinerary__region_of_return__name,
    pct_boy = voyage_slaves_numbers__percentage_boy,
    principal_dis_region = voyage_itinerary__imp_principal_region_slave_dis__name,
    principal_purchase_region = voyage_itinerary__imp_principal_region_of_slave_purchase__name,
    departure_africa_month = voyage_dates__date_departed_africa_sparsedate__month,
    voyage_begin_month = voyage_dates__voyage_began_sparsedate__month,
    port_begin = voyage_itinerary__imp_port_voyage_begin__name,
    first_dis_month = voyage_dates__first_dis_of_slaves_sparsedate__month,
    dis_broad = voyage_itinerary__imp_broad_region_slave_dis__name,
    pct_girl = voyage_slaves_numbers__percentage_girl,
    particular_outcome = voyage_outcome__particular_outcome__name,
    principal_dis_port = voyage_itinerary__imp_principal_port_slave_dis__name,
    pct_child = voyage_slaves_numbers__percentage_child,
    pct_women_alt = voyage_slaves_numbers__percentage_women,
    last_landing_month = voyage_dates__departure_last_place_of_landing_sparsedate__month,
    owner_outcome = voyage_outcome__outcome_owner__name,
    slaves_outcome = voyage_outcome__outcome_slaves__name,
    principal_purchase_place = voyage_itinerary__imp_principal_place_of_slave_purchase__name,
    resistance = voyage_outcome__resistance__name,
    pct_male = voyage_slaves_numbers__percentage_male,
    pct_female = voyage_slaves_numbers__percentage_female,
    begin_broad = voyage_itinerary__imp_broad_region_voyage_begin__name,
    purchase_broad = voyage_itinerary__imp_broad_region_of_slave_purchase__name
  )

Cleaning and Mutating the data for intra and trans

# Clean and transform data for trans
trans_clean <- trans1 %>%
  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 &
      slaves_outcome == "Slaves disembarked in Americas"
  ) %>%
  mutate(
    decade = floor(year / 10) * 10,
    estimated_deaths = slaves_embarked - slaves_disembarked,
    is_us = dis_broad == "Mainland North America" | principal_dis_port == "New Orleans"
  ) %>%
  mutate(source_type = "Trans-Atlantic")

# Clean and transform data for intra
intra_clean <- intra1 %>%
  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 &
      slaves_outcome == "Slaves disembarked in Americas"
  ) %>%
  mutate(
    decade = floor(year / 10) * 10,
    estimated_deaths = slaves_embarked - slaves_disembarked,
    is_us = dis_broad == "Mainland North America" | principal_dis_port == "New Orleans"
  ) %>%
  mutate(source_type = "Intra-American")

Combining the Datasets

combined_data <- bind_rows(trans_clean, intra_clean)

Showing U.S Total

total_us <- combined_data %>%
  filter(is_us == TRUE) %>%
  summarise(total_disembarked_us = sum(slaves_disembarked, na.rm = TRUE)) %>%
  pull(total_disembarked_us)

print(paste("Total slaves imported to the US:", total_us))
## [1] "Total slaves imported to the US: 419492"

Proportion of all slaves taken from africa

total_africa_embarked <- trans_clean %>%
  summarise(total_embarked_africa = sum(slaves_embarked, na.rm = TRUE)) %>%
  pull(total_embarked_africa)

proportion_us <- total_us / total_africa_embarked
print(paste("Proportion of all slaves taken from Africa that went to the US:", round(proportion_us, 4)))
## [1] "Proportion of all slaves taken from Africa that went to the US: 0.0516"

Graphing the slave imports by decade to the U.S

us_imports_by_decade <- combined_data %>%
  filter(is_us == TRUE) %>%
  group_by(decade) %>%
  summarise(total_disembarked = sum(slaves_disembarked, na.rm = TRUE), .groups = "drop")

ggplot(us_imports_by_decade, aes(x = factor(decade), y = total_disembarked)) +
  geom_bar(stat = "identity", fill = "steelblue") +
  theme_minimal() +
  labs(title = "Slave Imports to the US by Decade",
       x = "Decade",
       y = "Total Slaves Disembarked") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

# Imports the U.S by region & decade

us_data <- combined_data %>%
  filter(is_us == TRUE) %>%
  mutate(state = case_when(
    str_detect(principal_dis_port, "Charleston") ~ "South Carolina",
    str_detect(principal_dis_port, "Savannah") ~ "Georgia",
    str_detect(principal_dis_port, "New Orleans") ~ "Louisiana",
    str_detect(principal_dis_port, "Baltimore") ~ "Maryland",
    str_detect(principal_dis_port, "Richmond") ~ "Virginia",
    str_detect(principal_dis_port, "Norfolk") ~ "Virginia",
    str_detect(principal_dis_port, "Alexandria") ~ "Virginia",
    str_detect(principal_dis_port, "Mobile") ~ "Alabama",
    str_detect(principal_dis_port, "Pensacola") ~ "Florida",
    str_detect(principal_dis_port, "Galveston") ~ "Texas",
    str_detect(principal_dis_port, "New York") ~ "New York",
    str_detect(principal_dis_port, "Philadelphia") ~ "Pennsylvania",
    str_detect(principal_dis_port, "Boston") ~ "Massachusetts",
    str_detect(principal_dis_port, "Newport|Providence|Bristol") ~ "Rhode Island",
    TRUE ~ principal_dis_region  # Fallback to region if port not matched
  ))

us_by_decade_region_port_state <- us_data %>%
  group_by(decade, principal_dis_region, principal_dis_port, state) %>%
  summarise(total_disembarked = sum(slaves_disembarked, na.rm = TRUE), .groups = "drop") %>%
  arrange(decade, desc(total_disembarked))

# Display table
print("US Imports by Decade, Region, Port, and Approximate State:")
## [1] "US Imports by Decade, Region, Port, and Approximate State:"
print(us_by_decade_region_port_state)
## # A tibble: 330 × 5
##    decade principal_dis_region principal_dis_port        state total_disembarked
##     <dbl> <chr>                <chr>                     <chr>             <dbl>
##  1   1610 Virginia             Hampton                   Virg…                29
##  2   1620 Virginia             Virginia, port unspecifi… Virg…                 3
##  3   1630 New York             New York                  New …                53
##  4   1630 Virginia             Virginia, port unspecifi… Virg…                13
##  5   1630 Massachusetts        Boston                    Mass…                 7
##  6   1640 New York             New York                  New …                69
##  7   1640 Virginia             Virginia, port unspecifi… Virg…                12
##  8   1650 New York             New York                  New …               477
##  9   1650 Virginia             Virginia, port unspecifi… Virg…               125
## 10   1650 Maryland             Maryland, port unspecifi… Mary…                 5
## # ℹ 320 more rows
# Faceted bar plot by state
ggplot(us_by_decade_region_port_state, aes(x = factor(decade), y = total_disembarked, fill = state)) +
  geom_bar(stat = "identity") +
  facet_wrap(~ state, scales = "free_y") +
  theme_minimal() +
  labs(title = "US Slave Imports by Decade and Approximate State",
       x = "Decade",
       y = "Total Slaves Disembarked") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1),
        legend.position = "none")

Summary of the data

The united states received roughly 5 percent of all slaves from that were embarked from Africa.

The slave imports peaked in the early 18 and 19th centuries which is shown through the bar plots.

The top three regions where slaved were imported were; South Carolina, Louisiana, and Virginia This was shown through the bar charts about imports by decade and region

The United States account for a small proportion of all the slaves that disembarked from Africa as others went to south america and caribbean