There has been a longstanding history of tension between the communities that comprise Northeast Ohio and the police units that operate in the area. Since the killing of Tamir Rice, an unarmed 12 year old boy who was shot dead by a police officer in 2014, the greater Cleveland area has been at the forefront of the dialogue surrounding police violence and reform.
The aim of this analysis is to get a better idea of the landscape of police brutality against unarmed civilians in Northeast Ohio, through a comparison of police killings from the statewide level, to the regional level of Cuyahoga County (the county in which Cleveland lies).
Firstly, let’s load in our data and clean it.
raw <- readRDS('./data/fe_data_sf.rds')
coords <- raw %>%
st_coordinates()
p_k <- raw %>%
st_drop_geometry() %>%
mutate(y = coords[,'X'], x = coords[,'Y']) %>%
st_as_sf(coords = c('x','y'), crs = 4326)
states <- tigris::states(year = 2020, progress_bar = FALSE) %>%
select(c(NAME, geometry)) %>%
st_transform(st_crs(p_k))
ohio <- states %>%
filter(NAME == 'Ohio')
ohio_counties <- tigris::counties(state = 'Ohio', progress_bar = FALSE, year = 2019) %>%
select(c(NAME, geometry)) %>%
st_transform(st_crs(p_k))
cuya <- ohio_counties %>%
filter(NAME == 'Cuyahoga')
ohio_tracts <- tigris::tracts(state = 'Ohio', progress_bar = FALSE, year = 2020) %>%
select(c(NAME, geometry)) %>%
st_transform(st_crs(p_k))
cleaned <- p_k %>%
mutate(`Armed` = case_when(
`Armed?` == 'Armed' ~ 'Armed',
`Armed?` == 'Unarmed' ~ 'Unarmed',
`Armed?` == 'Arrmed' ~ 'Armed',
`Armed?` == 'Gunshot' ~ 'Armed',
`Armed?` == '' ~ as.character(NA),
`Armed?` == 'None' ~ 'Unarmed',
`Armed?` == 'Uncertain' ~ 'Uncertain',
TRUE ~ as.character(NA)
), .keep = 'unused') %>%
mutate(`Force` = case_when(
`IntendedForce` == '' ~ as.character(NA),
`IntendedForce` == 'No' ~ as.character(NA),
`IntendedForce` == 'Undetermined' ~ as.character(NA),
`IntendedForce` == 'Vehic/Purs' ~ 'Pursuit',
`IntendedForce` == 'Vehicle' ~ 'Pursuit',
TRUE ~ `IntendedForce`
), .keep = 'unused') %>%
mutate(FatalityDate = as.POSIXct(FatalityDate, format = '%m/%d/%Y')) %>%
mutate(year = lubridate::year(FatalityDate))
ohio_pk <- cleaned %>%
st_filter(ohio, .predicate = st_within)
armedPer <- cleaned %>%
st_drop_geometry() %>%
mutate(year = lubridate::year(FatalityDate)) %>%
group_by(year) %>%
summarize('DFRate' = sum(Force == 'Deadly force') / n(), 'LTLFRate' = sum(Force == 'Less-than-lethal-force') / n(), 'PursuitRate' = sum(Force == 'Pursuit') / n())
tmap_mode('view')
## tmap mode set to interactive viewing
tm_shape(ohio_counties) +
tm_borders(lty = 'dashed') +
tm_shape(ohio) +
tm_borders(lwd = 2) +
tm_shape(ohio_pk %>% filter(Armed == 'Unarmed'), bbox = st_bbox(ohio)) +
tm_dots(col = 'Force', size = .25, alpha = 0.8) +
tm_layout(legend.title.color = 'white', legend.outside = TRUE)
tm_shape(cuya) +
tm_borders(lwd = 2) +
tm_shape(ohio_pk %>% filter(Armed == 'Unarmed') %>% st_filter(cuya, .predicate = st_within)) +
tm_dots(col = 'Force', size = .25, alpha = 0.8) +
tm_layout(legend.position = c('LEFT','TOP'), legend.title.color = 'white', legend.outside = TRUE)
## legend.postion is used for plot mode. Use view.legend.position in tm_view to set the legend position in view mode.
On the state scale, we can see a majority of killings are clustered around the major population centers of Cincinnati, Columbus, and Cleveland. However, there does appear to be a higher density of unarmed killings in the Northeast Ohio area.
When we zoom in to Cuyahoga County, we see that most of the killings are clustered around the Northeast section of the county. This area is likely East Cleveland– an over policed, under-served community which has a high Black population.
Now, the above spatial visualizations answer the question of where, but we are also interested in the question of how. More specifically, under what circumstances are these killings occurring? To get better insight to this question we will analyze the force used by the police officer at the time of killing:
palette <- c('#fc7b72', '#71abde', '#e3e07f', '#75d98b')
ggplot(cleaned %>% filter(Armed == 'Unarmed'), aes(x = year, fill = Force)) +
geom_bar(stat = 'count') +
dark_mode() +
scale_fill_manual(values = palette) +
labs(x = 'Year', y = '', title = 'Police Killings of Unarmed Civilians', subtitle = 'Entire US') +
scale_x_continuous(breaks = c(2012, 2015, 2020))
## Inverted geom defaults of fill and color/colour.
## To change them back, use invert_geom_defaults().
ggplot(cleaned %>% filter(Armed == 'Unarmed') %>% st_filter(ohio, .predicate = st_within), aes(x =year, fill = Force)) +
geom_bar(stat = 'count') +
scale_fill_manual(values = palette) +
dark_mode() +
labs(x = 'Year', y = '', title = 'Police Killings of Unarmed Civilians', subtitle = 'Ohio')+
scale_x_continuous(breaks = c(2012, 2015, 2020))
ggplot(cleaned %>% filter(Armed == 'Unarmed') %>% st_filter(cuya, .predicate = st_within), aes(x =year, fill = Force)) +
geom_bar(stat = 'count') +
scale_fill_manual(values = palette) +
dark_mode() +
labs(x = 'Year', y = '', title = 'Police Killings of Unarmed Civilians', subtitle = 'Cuyahoga County, Ohio')+
scale_x_continuous(breaks = c(2012, 2015, 2020))
As we can see with the visualizations above, killings in Ohio, as well as Northeast Ohio more generally follow a national trend with respect to how the killings occurred. In most cases, the killings of unarmed civilians are the result of pursuit based scenarios. However, what is most striking to me is the fact that deadly forced is used more commonly than less-than-lethal force in unarmed scenarios.
To me, this data says that the issues I have scene in my hometown of Cleveland are not just regional phenomenon, but rather a national trend.