Rows: 423 Columns: 44
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (2): County, Crime Type
dbl (42): Year, Anti-Male, Anti-Female, Anti-Transgender, Anti-Gender Identi...
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Check the dimensions and the summary to make sure no missing values
dim(hatecrimes2)
[1] 423 10
# There are currently 13 variables with 423 rows.summary(hatecrimes2)
county year anti-black anti-white
Length:423 Min. :2010 Min. : 0.000 Min. : 0.0000
Class :character 1st Qu.:2011 1st Qu.: 0.000 1st Qu.: 0.0000
Mode :character Median :2013 Median : 1.000 Median : 0.0000
Mean :2013 Mean : 1.761 Mean : 0.3357
3rd Qu.:2015 3rd Qu.: 2.000 3rd Qu.: 0.0000
Max. :2016 Max. :18.000 Max. :11.0000
anti-jewish anti-catholic anti-age* anti-islamic(muslim)
Min. : 0.000 Min. : 0.0000 Min. :0.00000 Min. : 0.0000
1st Qu.: 0.000 1st Qu.: 0.0000 1st Qu.:0.00000 1st Qu.: 0.0000
Median : 0.000 Median : 0.0000 Median :0.00000 Median : 0.0000
Mean : 3.981 Mean : 0.2695 Mean :0.05201 Mean : 0.4704
3rd Qu.: 3.000 3rd Qu.: 0.0000 3rd Qu.:0.00000 3rd Qu.: 0.0000
Max. :82.000 Max. :12.0000 Max. :9.00000 Max. :10.0000
anti-gaymale anti-hispanic
Min. : 0.000 Min. : 0.0000
1st Qu.: 0.000 1st Qu.: 0.0000
Median : 0.000 Median : 0.0000
Mean : 1.499 Mean : 0.3735
3rd Qu.: 1.000 3rd Qu.: 0.0000
Max. :36.000 Max. :17.0000
Use Facet_Wrap
Look at each set of hate-crimes for each type for each year. Use the package “tidyr” to convert the dataset from wide to long with the command “gather”. It will take each column’s hate-crime type combine them all into one column called “id”. Then each cell count will go into the new column, “crimecount”. Finally, we are only doing this for the quantitiative variables, which are in columns 3 - 10. Note the command facet_wrap requires (~) before “id”.
Looking deeper into crimes blacks, gay males, and jews
From the facet_wrap plot above, anti-black, anti-gay males, and anti-jewish categories seem to have highest rates of offenses reported. Filter out just for those 3 crimes.
hatenew <- hatecrimeslong %>%filter( id=="anti-black"| id =="anti-jewish"| id =="anti-gaymale")%>%group_by(year, county) %>%arrange(desc(crimecount))hatenew
plot2 <- hatenew %>%ggplot() +geom_bar(aes(x=year, y=crimecount, fill = id),position ="dodge", stat ="identity") +ggtitle("Hate Crime Type in NY Counties Between 2010-2016") +ylab("Number of Hate Crime Incidents") +labs(fill ="Hate Crime Type")plot2
What about the counties?
plot3 <- hatenew %>%ggplot() +geom_bar(aes(x=county, y=crimecount, fill = id),position ="dodge", stat ="identity") +ggtitle("Hate Crime Type in NY Counties Between 2010-2016") +ylab("Number of Hate Crime Incidents") +labs(fill ="Hate Crime Type")plot3
Looking at 5 counties with the highest number of incidents
`summarise()` has grouped output by 'county'. You can override using the
`.groups` argument.
counties
# A tibble: 277 × 3
# Groups: county [60]
county year sum
<chr> <dbl> <dbl>
1 Kings 2012 136
2 Kings 2010 110
3 Kings 2016 101
4 Kings 2013 96
5 Kings 2014 94
6 Kings 2015 90
7 Kings 2011 86
8 New York 2016 86
9 Suffolk 2012 83
10 New York 2013 75
# ℹ 267 more rows
A barplot for the 5 counties in 2012 with the highest incidents of hate-crimes.
plot4 <- hatenew %>%filter(county =="Kings"| county =="New York"| county =="Suffolk"| county =="Nassau"| county =="Queens") %>%ggplot() +geom_bar(aes(x=county, y=crimecount, fill = id),position ="dodge", stat ="identity") +labs(ylab ="Number of Hate Crime Incidents",title ="5 Counties in NY with Highest Incidents of Hate Crimes",subtitle ="Between 2010-2016", fill ="Hate Crime Type")plot4
How would calculations be affected by looking at the hate crimes in counties per year by population densities?
Bring in census data for populations of New York counties. These are estimates from the 2010 census.
Rows: 62 Columns: 8
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (1): Geography
dbl (7): 2010, 2011, 2012, 2013, 2014, 2015, 2016
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Clean the county name to match the other dataset
Rename the variable “Geography” as “county” so that it matches in the other dataset.
# A tibble: 6 × 3
county year population
<chr> <dbl> <dbl>
1 Albany , New York 2010 304078
2 Allegany , New York 2010 48949
3 Bronx , New York 2010 1388240
4 Broome , New York 2010 200469
5 Cattaraugus , New York 2010 80249
6 Cayuga , New York 2010 79844
Focus on 2012
Since 2012 had the highest counts of hate crimes, let’s look at the populations of the counties in 2012. Clean the nypoplong12 variable, county, so that matches the counties12 variable by Cutting off the “, New York” portion of the county listing
nypoplong12 <- nypoplong %>%filter(year ==2012) %>%arrange(desc(population)) %>%head(10)nypoplong12$county<-gsub(" , New York","",nypoplong12$county)nypoplong12
# A tibble: 10 × 3
county year population
<chr> <dbl> <dbl>
1 Kings 2012 2572282
2 Queens 2012 2278024
3 New York 2012 1625121
4 Suffolk 2012 1499382
5 Bronx 2012 1414774
6 Nassau 2012 1350748
7 Westchester 2012 961073
8 Erie 2012 920792
9 Monroe 2012 748947
10 Richmond 2012 470978
Recall the total hate crime counts:
Kings 713 New York 459 Suffolk 360 Nassau 298 Queens 235
# A tibble: 41 × 5
# Groups: county [41]
county year sum population rate
<chr> <dbl> <dbl> <dbl> <dbl>
1 Suffolk 2012 83 1499382 5.54
2 Kings 2012 136 2572282 5.29
3 New York 2012 71 1625121 4.37
4 Richmond 2012 18 470978 3.82
5 Nassau 2012 48 1350748 3.55
6 Erie 2012 28 920792 3.04
7 Queens 2012 48 2278024 2.11
8 Bronx 2012 23 1414774 1.63
9 Westchester 2012 13 961073 1.35
10 Monroe 2012 5 748947 0.668
# ℹ 31 more rows
Notice that the highest rates of hate crimes in 2012 happened in:
dt <- datajoinrate[,c("county","rate")]dt
# A tibble: 41 × 2
# Groups: county [41]
county rate
<chr> <dbl>
1 Suffolk 5.54
2 Kings 5.29
3 New York 4.37
4 Richmond 3.82
5 Nassau 3.55
6 Erie 3.04
7 Queens 2.11
8 Bronx 1.63
9 Westchester 1.35
10 Monroe 0.668
# ℹ 31 more rows
But the highest populated counties were: Kings (Brooklyn), Queens, New York, Suffolk (Long Island), Bronx, and Nassau. They do not correspond directly, though they are similar, to the counties with highest rates of hate crimes. # Follow Up ## Aggregating some of the categories
# A tibble: 1,692 × 5
county year crimetype id crimecount
<chr> <dbl> <chr> <chr> <dbl>
1 Albany 2016 Crimes Against Persons anti-transgender 0
2 Albany 2016 Property Crimes anti-transgender 0
3 Allegany 2016 Property Crimes anti-transgender 0
4 Bronx 2016 Crimes Against Persons anti-transgender 4
5 Bronx 2016 Property Crimes anti-transgender 0
6 Broome 2016 Crimes Against Persons anti-transgender 0
7 Cayuga 2016 Property Crimes anti-transgender 0
8 Chemung 2016 Crimes Against Persons anti-transgender 0
9 Chemung 2016 Property Crimes anti-transgender 0
10 Chenango 2016 Crimes Against Persons anti-transgender 0
# ℹ 1,682 more rows
My Thoughts:
The positive aspects of this dataset is that it raised awareness of hate crimes. The negative aspects of this dataset is that there may be less or over reporting of hate crimes which can lead to misrepresentation and flawed dataset. I would like to study hate crimes among white, and islamic religion. After seeing these results, I would follow up by asking the local law enforcement agencies how they collect hate crime data. Second, publish the data with visualitzation to the public to raise discussions.