Exploring the Fatal Encounters Dataset

Benson Bai

2024-10-18

Fatal Encounters

df <- read.csv("fatal_encounters.csv")
df %>% head
##   Unique.ID                    Name Age Gender                    Race
## 1     31495        Ashley McClendon  28 Female  African-American/Black
## 2     31496 Name withheld by police     Female        Race unspecified
## 3     31497 Name withheld by police       Male        Race unspecified
## 4     31491    Johnny C. Martin Jr.  36   Male        Race unspecified
## 5     31492           Dennis McHugh  44   Male European-American/White
## 6     31493      Ny'Darius McKinney  21   Male        Race unspecified
##    Race.with.imputations Imputation.probability
## 1 African-American/Black            Not imputed
## 2                   <NA>                   <NA>
## 3                   <NA>                   <NA>
## 4                   <NA>                   <NA>
## 5                   <NA>                   <NA>
## 6                   <NA>                   <NA>
##                                                URL.of.image..PLS.NO.HOTLINKS.
## 1 https://fatalencounters.org/wp-content/uploads/2022/01/Ashley-McClendon.jpg
## 2                                                                            
## 3                                                                            
## 4                                                                            
## 5                                                                            
## 6                                                                            
##   Date.of.injury.resulting.in.death..month.day.year.
## 1                                         12/31/2021
## 2                                         12/31/2021
## 3                                         12/31/2021
## 4                                         12/30/2021
## 5                                         12/30/2021
## 6                                         12/30/2021
##       Location.of.injury..address. Location.of.death..city. State
## 1 South Pearl Street and Tory Road                 Pageland    SC
## 2                 1500 21st Street                 Meridian    MS
## 3                 1500 21st Street                 Meridian    MS
## 4                    Martinez Lane                 Nicholls    GA
## 5                 435 E 4th Street                 Beaumont    CA
## 6    State Rd S-29-296 & Bethel Rd                Lancaster    SC
##   Location.of.death..zip.code. Location.of.death..county.
## 1                        29728               Chesterfield
## 2                        39301                 Lauderdale
## 3                        39301                 Lauderdale
## 4                        31554                     Coffee
## 5                        92223                  Riverside
## 6                        29720                  Lancaster
##                                                      Full.Address   Latitude
## 1 South Pearl Street and Tory Road Pageland SC 29728 Chesterfield 34.7452955
## 2                   1500 21st Street Meridian MS 39301 Lauderdale 32.3793294
## 3                   1500 21st Street Meridian MS 39301 Lauderdale 32.3793294
## 4                          Martinez Lane Nicholls GA 31554 Coffee 31.5307934
## 5                    400 E 4th Street Beaumont CA 92223 Riverside 33.9261462
## 6      State Rd S-29-296 & Bethel Rd Lancaster SC 29720 Lancaster 34.6608217
##    Longitude
## 1  -80.39306
## 2  -88.69397
## 3  -88.69397
## 4  -82.63782
## 5 -116.97715
## 6  -80.83714
##                                                                    Agency.or.agencies.involved
## 1                                                                   Pageland Police Department
## 2                                                                   Meridian Police Department
## 3                                                                   Meridian Police Department
## 4                                                               Coffee County Sheriff's Office
## 5 Riverside County Sheriff's Department, Beaumont Police Department, Banning Police Department
## 6                                                      South Carolina Law Enforcement Division
##   Highest.level.of.force UID.Temporary Name.Temporary Armed.Unarmed
## 1                Vehicle            NA                             
## 2                Gunshot            NA                             
## 3                Gunshot            NA                             
## 4                Gunshot            NA                             
## 5                Gunshot            NA                             
## 6                Vehicle            NA                             
##   Alleged.weapon Aggressive.physical.movement Fleeing.Not.fleeing
## 1                                                                
## 2                                                                
## 3                                                                
## 4                                                                
## 5                                                                
## 6                                                                
##   Description.Temp URL.Temp
## 1                          
## 2                          
## 3                          
## 4                          
## 5                          
## 6                          
##                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Brief.description
## 1                                                                                                                         Ashley McClendon's boyfriend, 33-year-old Marcus Allen Davis, allegedly was driving a 1996 Ford Coupe back to Pageland when an officer reportedly saw the car run a stop sign before midnight on Dec. 31. A traffic stop was attempted, but Davis refused to stop. As the car fled down South Pearl Street near Tory Road it left the road and struck a tree, killing passenger McClendon.
## 2                                                                                                                                                                                                                                                                          Police responded to a man causing a disturbance who was covered in blood. The man had a gun in each hand at a home. Once officers arrived, they were met with gunfire. Officers responded back with gunfire. A man and woman were killed.
## 3                                                                                                                                                                                                                                                                          Police responded to a man causing a disturbance who was covered in blood. The man had a gun in each hand at a home. Once officers arrived, they were met with gunfire. Officers responded back with gunfire. A man and woman were killed.
## 4                                                                   Johnny C. Martin, Jr. arrived at a gas station at 7:10 p.m. While at the gas station, Martin allegedly carjacked a woman, shooting at her while stealing her car. The Ware County Sheriff's Office and the Georgia State Patrol found the stolen car driven by Martin and pursued. Martin eventually went off the road into a field. When officers approached the car, they found Martin with a fatal gunshot to the head and a gun in his hand.
## 5 Deputies responded to a domestic violence call. When deputies arrived, the man was gone. The man reportedly had a felony warrant for a violation of an assault with a deadly weapon, domestic violence, kidnapping, vandalism, and a domestic violence restraining order violation. Deputies learned the suspect was in the city of Beaumont. A helicopter found the suspect's car. When officers located the man, he tried to flee by ramming his car into other cars. An officer and deputy shot and killed him.
## 6                                                                                                                                                                       About 5:35 p.m., Joseph Jemar Hinson was allegedly driving a car when police tried to pull him over, and he fled. Police pursued him until he ran off the left side of the roadway, struck a fence and wrecked, killing back seat passenger Ny'Darius McKinney. Hinson was charged with failure to stop for a blue light resulting in death.
##   Dispositions.Exclusions.INTERNAL.USE..NOT.FOR.ANALYSIS
## 1                                               Criminal
## 2                                  Pending investigation
## 3                                  Pending investigation
## 4                                                Suicide
## 5                                  Pending investigation
## 6                                               Criminal
##   Intended.use.of.force..Developing.
## 1                            Pursuit
## 2                       Deadly force
## 3                       Deadly force
## 4                            Suicide
## 5                       Deadly force
## 6                            Pursuit
##                                                                                            Supporting.document.link
## 1 https://www.wsoctv.com/news/1-person-dead-after-attempting-escape-police-troopers-say/QXA244QPUZGJ5GAGRADGDWBAEU/
## 2                                                        https://www.wtok.com/2022/01/01/officer-involved-shooting/
## 3                                                        https://www.wtok.com/2022/01/01/officer-involved-shooting/
## 4   https://gbi.georgia.gov/press-releases/2021-12-31/gbi-perry-and-douglas-offices-investigating-related-shootings
## 5                                   https://kesq.com/news/2021/12/31/officer-involved-shooting-unfolds-in-beaumont/
## 6                   https://www.thelancasternews.com/content/21-year-old-man-killed-when-car-fleeing-police-crashes
##    X X.1 Unique.ID.formula Unique.identifier..redundant.
## 1 NA  NA                NA                         31495
## 2 NA  NA                NA                         31496
## 3 NA  NA                NA                         31497
## 4 NA  NA                NA                         31491
## 5 NA  NA                NA                         31492
## 6 NA  NA                NA                         31493

We found out that latitude is nor a numeric column so we need to convert it.

df$Latitude <- as.numeric(df$Latitude)
## Warning: NAs introduced by coercion

We can now turn the dataframe into an sf object with its latitude and longitude (remove the NAs first).

df <- df %>% filter(!is.na(Latitude) & !is.na(Longitude)) %>%
  filter(Latitude >= -90 & Latitude <= 90,
         Longitude >= -180 & Longitude <= 180)
incidents <- df %>% st_as_sf(coords = c("Longitude", "Latitude"), crs = 4326)

We can get the state boundaries as well as population data from census bureau.

states <- get_acs(geography = "state",
              variables = c(hhincome = 'B19013_001', population = 'B01003_001'),
              survey = "acs5", 
              geometry = TRUE, 
              output = "wide",
              progress = FALSE) %>% 
  rename(hhincome = hhincomeE, population = populationE) %>% 
  st_transform(4326)
## Getting data from the 2018-2022 5-year ACS
## Downloading feature geometry from the Census website.  To cache shapefiles for use in future sessions, set `options(tigris_use_cache = TRUE)`.

The “States” column in the original dataset is in abbreviation, but the census tract data is not. I found another source with the abbreviations of each state.

abbr <- read.csv("https://raw.githubusercontent.com/jasonong/List-of-US-States/refs/heads/master/states.csv")
states_1 <- states %>% rename(State = NAME) %>% left_join(abbr, by = "State")

We can now count the number of incidents in each state. I also calculated a column with incidents per 100 thousand population.

state_incidents_count <- df %>%
  group_by(State) %>%
  summarise(count = n())
states_new <- states_1 %>%
  left_join(state_incidents_count, by = c("Abbreviation"="State"))
states_new$incident_per_100k <- states_new$count / states_new$population * 100000

Plotting the map.

tmap_mode("view")
## tmap mode set to interactive viewing
tm_shape(states_new) + tm_polygons(id = "State", col = "incident_per_100k", popup.vars = c("Incidents Per 100k Population"="incident_per_100k"))

We can see that the state with most police killings rate (highest number of incidents per 100k population) in New Mexico. Other states in the South or Southwest are also quite high, the exceptions being Texas and Florida. The New England regions have the lowest rates.

We are now exploring a specific variable in this dataset in order to tell a compelling story. In this case I’ll choose the Race variable. We could first use barplot to see each category’s distribution.

library(plotly)
## 
## Attaching package: 'plotly'
## The following object is masked from 'package:httr':
## 
##     config
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout
p <- ggplot(df, aes(x=Race)) +
  geom_bar(fill = "steelblue")  +
  ylab("Number of Incidents") +
  xlab("Race") +
  ggtitle("Police Killings By Race") +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1))
plotly::ggplotly(p)

There is an apparant wrong data in this chart, so we should remove it and plot again. We also need to clean the data and merge similar values.

df1 <- df %>%
  filter(Race != "Christopher Anthony Alexander") %>%
  mutate(Race = case_when(
    Race == "european-American/White" ~ "European-American/White",
    Race == "European-American/European-American/White" ~ "European-American/White",
    Race == "African-American/Black African-American/Black Not imputed" ~ "African-American/Black",
    TRUE ~ Race  # Keeps all other values unchanged
  ))
p <- ggplot(df1, aes(x=Race)) +
  geom_bar(fill = "steelblue")  +
  ylab("Number of Incidents") +
  xlab("Race") +
  ggtitle("Police Killings By Race") +
theme(axis.text.x = element_text(angle = 45, vjust = 0.5, hjust = 1))
ggplotly(p)

The prevailing race in the dataset is White, the next being African American.

We can try to plot incidents by race on a map (remove the unspecified race incidents for better visualization).

df2 <- df1 %>% filter(Race != "Race unspecified")
tmap_mode("view")
## tmap mode set to interactive viewing
incidents1 <- df2 %>% st_as_sf(coords = c("Longitude", "Latitude"), crs = 4326)
tm_shape(incidents1) + tm_dots(col = "Race",
                               palette=c("royalblue", "yellow", "pink", "red", "orange", "purple"))

We can see the race distributions are not surprising, as white people being killed by police is spread out over the country, African American people are more in southern states, and incidents involving Hispanic people take place mainly in Southwest. Asian/Pacific Islander are only seen in big cities in continental US, as well as the state of Hawaii. In large metropolitan areas like New York or Chicago, the prevailing race would still be African American people.

To see each state’s prevailing race (most incidents by race), we can group by state and race columns of the data.

state_incidents_race <- df2 %>%
  group_by(State, Race) %>%
  summarise(count = n(), .groups = 'drop') %>%
  group_by(State) %>%
  slice(which.max(count)) %>% 
  ungroup()
state_incidents_race
## # A tibble: 51 × 3
##    State Race                    count
##    <chr> <chr>                   <int>
##  1 AK    European-American/White    42
##  2 AL    European-American/White   236
##  3 AR    European-American/White   162
##  4 AZ    European-American/White   321
##  5 CA    Hispanic/Latino          1551
##  6 CO    European-American/White   270
##  7 CT    European-American/White    53
##  8 DC    African-American/Black     59
##  9 DE    African-American/Black     24
## 10 FL    European-American/White   697
## # ℹ 41 more rows
states_race <- states_1 %>%
  left_join(state_incidents_race, by = c("Abbreviation"="State"))
tmap_mode("view")
## tmap mode set to interactive viewing
tm_shape(states_race) + tm_polygons(id = "State", col = "Race", )

The map resonates with the previous one, indicating the majority of states prevails white people in police killing incidents, while a few states in the east ans southeast prevails African American, and some other states in Southwest prevails Hispanic. Hawaii prevails Asian/Pacific Islanders.

Overall, through manipulating and analyzing the Fatal Encounters data set, we are able to display each state’s rate of incidents of police killings, plot the race variable’s distribution, visualize the incidents on the race variable, and analyze the spatial distribution of people with different race involved in those incidents.