When you call 9-1-1, you expect a fairly quick response. The police may not be at your door the second you hang up the phone, but they should not show up eight hours after the crime was committed. But does everyone get the quickest response time possible? Do response times vary widely between neighborhoods or can you expect a similar response regardless of where you live? For my geospatial project, I decided to map the location of a crime and determine if its location had any impact on the police response time.
The city I chose to focus on was New Orleans, and the data for this project can be found here. I chose New Orleans for a couple reasons. First, the data set provided the six columns I deemed necessary in order to write a thorough report. TimeCreate and TimeArrive would help me analyze the response times within the NOPD. TimeCreate is when the report for a crime was created, and TimeArrive is when the police arrived at the scene or met up with the victim. TypeText listed what type of crime was committed with words, rather than the codes assigned to crimes within the NOPD. Zip provided the zip code for the crime, and the latitude and longitude columns could provide an exact location. Some data sets I looked at did not provide all six columns, which made New Orleans more appealing. Second, the New Orleans Police Department had been previously criticized for their response times. The article just focused on the city overall, so I decided to see if zip codes had experienced a similar trend. Was the whole city improving, or were certain neighborhoods seeing more positive trends than others?
In terms of what crimes I focused on, I chose the five types of most common crimes according to Criminal Degree Justice Hub. In no particular order, the most common crimes were theft, burglary, auto theft, aggravated assault, and robbery. I chose these crimes for a few reasons. First, I would be more likely to find sufficient data for all of these crimes. Not every neighborhood is going to have multiple reports of murder, but there are going to be multiple reports about theft. Even though choosing these crimes does not guarantee sufficient data, my chances would be higher since these crimes are more common. Second, these crimes are probably what the New Orleans Police Department respond to the most. While different crimes can have different response times, common crimes should, theoretically, have the shortest response time possible. Large deviations from the city average in different neighborhoods would be easier to spot.
I also decided to focus on just July and August for this project. 911 calls are higher than average during these months, at least according to this performance report. Even with the limited amount of crimes I had chosen, I still had over 26,000 results. Choosing the busiest months would produce the most data without feeling overwhelmed. I could also create clearer visualizations as opposed to seeing large areas of dots on my maps. With these limitations established, I then started cleaning my data.
Before I cleaned the data, I uploaded the packages I would be using to help me analyze the data set.
library(tidyverse)
library(lubridate)
library(ggthemes)
As stated above, I gathered the most common crimes. Some crimes had multiple types, like burglary and robbery. Since the source did not specify what types were the most common, I included any crime I thought would fit under the label. I also filtered out reports without a zip code, a time of arrival, or a time of creation. While I listed six columns earlier, I did not consider latitude or longitude at this step. I used those columns when creating my map visualizations in Tableau.
Call_for_Service_2020 <- read_csv("Downloads/Call_for_Service_2020.csv")
col_types = cols(TimeCreate = col_character())
Call_for_Service_2020 %>%
select(TypeText,TimeCreate, TimeArrive, Zip) %>%
filter(TypeText %in% c("AGGRAVATED ASSAULT", "AGGRAVATED BURGLARY", "AUTO THEFT", "BURGLAR ALARM, LOCAL", "BURGLAR ALARM, SILENT", "BURGLAR ALARM, SILENT, FAR NO RESPONSE", "BUSINESS BURGLARY", "RESIDENCE BURGLARY", "SIMPLE ROBBERY", "SIMPLE ROBBERY, PROPERTY SNATCHING", "THEFT") & !Zip %in% "None" & !TimeCreate %in% NA & !TimeArrive %in% NA) -> service_calls
The data was more manageable now, but the dates and times were uploaded as characters. I needed to convert the two columns into times in order to calculate the response time, as well as make it easier to get the data for just July and August. Once I got the columns formatted correctly, I could then find the difference between when the report was created and when the police arrived. I created a new column that found this value, which was listed as seconds since it was a difference in time. I reformatted that column to give me a numeric value for my calculations.
service_calls$TimeCreate <- parse_date_time(service_calls$TimeCreate, '%m/%d/%Y :%I:%M:%S %p')
service_calls$TimeArrive <- parse_date_time(service_calls$TimeArrive, '%m/%d/%Y :%I:%M:%S %p')
service_calls %>%
mutate(difference = difftime(TimeArrive, TimeCreate)) %>%
filter(TimeCreate >= as.Date("2020-07-01"), TimeCreate <= as.Date("2020-08-31")) -> service_calls
as.numeric(service_calls$difference) -> service_calls$difference
Now that the data was cleaned and everything was formatted correctly, I was able to begin analyzing it.
Since I had over 5,000 points left after applying my filters, it was hard to pinpoint what exactly was common. Some zip codes appeared to have a higher crime density than others, mostly due to the size of the neighborhood. The more points that were located in a certain area, the more the points overlapped each other. As I zoomed in more, I was able to get a better picture of what types of crimes occurred more often and what their typical response time looked like.
At first glance, the response times appeared normal. The police arrived within an hour for most points I randomly chose. There were some significant outliers, but seeing an outlier happened very infrequently. The outliers also happened in various neighborhoods, not just in one area. I then started my calculations to back up claims about my observations.
To determine what a typical response time was, I took the average response for each different type of crime. These values would serve as my guide when focusing on certain zip codes. The average was divided by 60 so I could get a value that represented the response time in minutes.
service_calls %>%
group_by(TypeText) %>%
summarize(average = mean(difference)/60) %>%
arrange(-average)
## # A tibble: 10 x 2
## TypeText average
## <chr> <dbl>
## 1 RESIDENCE BURGLARY 243.
## 2 THEFT 217.
## 3 AUTO THEFT 167.
## 4 SIMPLE ROBBERY, PROPERTY SNATCHING 95.2
## 5 BUSINESS BURGLARY 89.2
## 6 SIMPLE ROBBERY 56.6
## 7 BURGLAR ALARM, SILENT 26.9
## 8 AGGRAVATED BURGLARY 26.2
## 9 BURGLAR ALARM, LOCAL 25.2
## 10 AGGRAVATED ASSAULT 24.7
As I stated earlier, different crimes have different response times. Calls that focused on preventing a more serious situation from happening had quicker response times. Take the silent burglar alarms for example. If police wait too long to respond, the criminal can potentially get away. When analyzing these types of crimes, I’ll be referring to them as “potential threat” crimes, or PT crimes for short. Calls that may have been made after the event happened, like the residence burglaries, are not considered as urgent as PT crimes. The crime may have already been committed and the person is calling after the fact. Since the police do not have to be on the scene immediately, the response time is slower. I’ll be referring to these types of crimes as “potentially already committed” crimes, or PAC crimes, for the rest of this report.
Now that I had a sense of what trends to expect from the response times, I focused on certain zip codes. The zip codes I chose were 70124, 70115, and 70126. I chose these zip codes based on their income levels, which I will discuss in further detail before my analysis. I got three different income levels: rich, “middle class”, and poor. I tried to get a zip code with an income level between the richest and poorest zip code, although I will admit the area I chose is closer to the rich end of the spectrum than the poor end. Because it falls in between the two extremes, I decided to classify the area as middle class. I got the rich and middle class zip codes from this list, and the poor zip code was determined by this one.
Before this part of my analysis, I created a second map with just the zip codes I wanted to analyze. I could see where exactly the zip codes were located as well as zoom in further on the areas.70115 looked like it had more points than the other two neighborhoods, but it also was the smallest neighborhood of the three. 70124 appeared to have the fewest points, so I wondered if there would be sufficient data for the area. Since 70126 looked to be the biggest neighborhood, I assumed the response times would be slightly higher due to its size. To get a sense of what the neighborhoods were truly like, I started researching the neighborhoods and analyzing them in depth.
70124 is the wealthiest zip code within the metro New Orleans area. The median income is $93,428, and the gross adjusted income is $149,820. It is 6.66 square miles and has a population of 16,824. In terms of demographics, the neighborhood is 90.1% white, 4.8% African American, and 2.4% Asian American. There were 204 reports created over July and August, giving 70124 a crime density of 30.6 crimes per square mile.
Though there are 11 different crimes analyzed above, I only focused on crimes with at least five occurrences in this section. The first reason is because I wanted to have a decent amount of data to analyze. If a crime only happened once over July and August, then I could not claim that the response time is typical for the neighborhood. I have no other data to back up that claim. The second reason is because of potential outliers. Before applying this filter, I noticed residential burglaries had the highest average response time at 519 minutes. Upon further inspection, I learned only three burglaries had occurred and one instance had a response time of over 24 hours. I am unsure why the police took a day to finally respond, but I knew it did not represent an accurate representation of the residence burglary response time. Even though filtering out crimes does reduce the amount of crimes I can analyze, I can get a better sense of what response times typically look like for the NOPD.
## # A tibble: 6 x 2
## # Groups: TypeText [6]
## TypeText n
## <chr> <int>
## 1 BURGLAR ALARM, SILENT 168
## 2 THEFT 14
## 3 AUTO THEFT 12
## 4 BURGLAR ALARM, LOCAL 5
## 5 RESIDENCE BURGLARY 3
## 6 AGGRAVATED ASSAULT 2
I then removed the crimes that did not meet the criteria listed above and calculated the average response time for the remaining four.
service_calls %>%
filter(Zip %in% 70124, !TypeText %in% c("AGGRAVATED ASSAULT", "RESIDENCE BURGLARY")) %>%
group_by(TypeText) %>%
summarize(average = mean(difference)/60) %>%
arrange(-average)
## # A tibble: 4 x 2
## TypeText average
## <chr> <dbl>
## 1 AUTO THEFT 262.
## 2 THEFT 162.
## 3 BURGLAR ALARM, SILENT 10.4
## 4 BURGLAR ALARM, LOCAL 5.48
For this neighborhood, each category had two crimes. The PAC crimes were auto theft and theft, while the PT crimes were the local and silent burglar alarms. For the PAC crimes, response times were mixed. There was a 57% increase in response time for auto theft and a 25% decrease for theft. In comparison, response times for the PT crimes improved drastically. Silent alarms had a 62% decrease in response time and local alarms had a 80% decrease.
Despite the limited data, I could say response times in general improved for 70124. A decrease in the average response time shows that the city values with short response times are more likely to be located in this neighborhood. Since most crimes saw decreases, a person in 70124 can expect a fairly quick response time when calling the police.
70115 is what I classified as my “middle class” zip code. The area is not as wealthy as 70124, but it is also not as poor as 70126. The median income is $65,158, and the gross adjusted income is $115,820. It is 3.88 square miles and has a population of 31,695. In terms of demographics, the neighborhood is 62.1% white, 32.8% African American, and 1.4% Asian American. The neighborhood had 388 reports filed, giving 70115 a crime density of 100 crimes per square mile.
Like 70124, I filtered out any crime with less than five occurrences. Since the types of crime and the occurrences may not be the same as 70124, I had to make sure I filtered the right crimes for each neighborhood.
## # A tibble: 8 x 2
## # Groups: TypeText [8]
## TypeText n
## <chr> <int>
## 1 BURGLAR ALARM, SILENT 280
## 2 THEFT 57
## 3 AUTO THEFT 36
## 4 BUSINESS BURGLARY 18
## 5 AGGRAVATED ASSAULT 12
## 6 BURGLAR ALARM, LOCAL 9
## 7 RESIDENCE BURGLARY 6
## 8 SIMPLE ROBBERY, PROPERTY SNATCHING 1
Now that I knew what crimes did not meet my criteria, I calculated the average response time for 70115.
service_calls %>%
filter(Zip %in% 70115, !TypeText %in% "SIMPLE ROBBERY, PROPERTY SNATCHING") %>%
group_by(TypeText) %>%
summarize(average = mean(difference)/60) %>%
arrange(-average)
## # A tibble: 7 x 2
## TypeText average
## <chr> <dbl>
## 1 THEFT 165.
## 2 AUTO THEFT 127.
## 3 BUSINESS BURGLARY 112.
## 4 RESIDENCE BURGLARY 69.5
## 5 BURGLAR ALARM, SILENT 13.0
## 6 BURGLAR ALARM, LOCAL 9.93
## 7 AGGRAVATED ASSAULT 9.48
For this neighborhood, I classified theft, auto theft, and business and residence burglaries as PAC crimes. Silent and local burglar alarms as well as aggravated assault were classified as PT crimes. Like 70124, PAC crimes mostly saw improvements in response time. Theft and auto theft both had a 24% decrease in response time, and residence burglary had a 71% decrease. Business burglary was the only type that was worse than the city average. It had a 21% increase in response time. PT crimes, on the other hand, all improved compared to the city average. Silent burglar alarms had a 51% decrease in response time, local burglar alarms had a 60% decrease, and aggravated assault had a 64% decrease.
Compared to 70124, the improvement was about the same. Both neighborhoods only had one time be worse than the city average, and both crimes fell under the PAC crimes category. All PT crimes in both neighborhoods saw decreases of over 50%, indicating both neighborhoods typically experience quicker response times. 70115 appeared to have better response times overall, considering they saw a 21% increase in time compared to 70124’s 57% increase. The types of crime may not be the same, but having a smaller increase indicates progress in decreasing response times.
70126 is the poorest zip code within the metro New Orleans area. The median income is $26,425, and the adjusted gross income is $32,750. It is 10.1 square miles and has a population of 23,958. In terms of demographics, the neighborhood is 91.3% African American, 5.8% white, and 0.6% Asian American. There were 350 reports filed, giving 70126 a crime density of 34.7 crimes per square mile.
As with the previous two zip codes, I filtered out any crimes with less than five occurrences.
## # A tibble: 9 x 2
## # Groups: TypeText [9]
## TypeText n
## <chr> <int>
## 1 BURGLAR ALARM, SILENT 166
## 2 AUTO THEFT 74
## 3 THEFT 56
## 4 AGGRAVATED ASSAULT 26
## 5 RESIDENCE BURGLARY 13
## 6 BUSINESS BURGLARY 10
## 7 BURGLAR ALARM, LOCAL 5
## 8 SIMPLE ROBBERY 3
## 9 AGGRAVATED BURGLARY 1
In terms of total crimes, 70126 had fewer crimes than 70115 but more than 70124. The types of crimes were the same as 70115 as well, so I was interested to see if their response times would be similar too.
service_calls %>%
filter(Zip %in% 70126, !TypeText %in% c("SIMPLE ROBBERY", "AGGRAVATED BURGLARY")) %>%
group_by(TypeText) %>%
summarize(average = mean(difference)/60) %>%
arrange(-average)
## # A tibble: 7 x 2
## TypeText average
## <chr> <dbl>
## 1 RESIDENCE BURGLARY 459.
## 2 THEFT 349.
## 3 AUTO THEFT 180.
## 4 BURGLAR ALARM, LOCAL 119.
## 5 BUSINESS BURGLARY 79.0
## 6 BURGLAR ALARM, SILENT 71.9
## 7 AGGRAVATED ASSAULT 30.2
As stated above, the PAC crimes and PT crimes for 70126 are the same as 70115. Unlike the previous two neighborhoods, most PAC crimes had a longer response time than the city average. Only one crime in this category improved. Residence burglaries had an 88% increase in response time, theft had a 60% increase, auto theft had an 8% increase, and business burglary had a 11% decrease. All PT crimes had worse response times compared to the city average. Local burglar alarms had a 376% increase in response time, silent burglar alarms had a 163% increase, and aggravated assault had a 20% increase.
Despite having fewer total crimes than 70115, the response times were significantly longer. There were 114 fewer calls in 70126 about silent burglar alarms than 70115, yet the response time is 4.5 times higher. 70126 is also the only neighborhood where PT crimes had higher response times than the city average, and two types saw increases of over 100%. This observation implies that most crimes of this nature with a longer response time are more likely occur in this neighborhood. Though 70126 is the largest neighborhood, it does not fully explain why the response times why were so much longer. Larger areas mean police have more area to patrol, but that justification is easier to explain a 10% increase in response time, not a 100% increase.
Where you live has some impact on police response time. Since I do not have all the details surrounding every incident, I can not confirm or deny if any other factors played a role in the slow response times. I also did not analyze every category to see if every type had a very large outlier like residence burglaries did in 70124. However, one large outlier does not explain a 376% increase in response time in a single neighborhood. When said increase is for the most common crime in the neighborhood, then there are issues outside of just the location of the crime. Even though response times as a whole have improved for New Orleans, the progress mostly happened in wealthier areas. Poorer areas saw little progress, if any even happened at all. You may not think location plays a major factor in response times, but where the crime is committed does impact when the police finally arrive. No one should deserve to wait eight hours for police to finally arrive, especially for a factor out of their control.