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.1
## ✔ ggplot2   3.4.4     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.1
## ✔ purrr     1.0.2     
## ── 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
#tinytex::install_tinytex()
#library(tinytex)
setwd("C:/Users/Neked Shep/Desktop/DATA110")
hatecrimes <- read_csv("hateCrimes2010.csv")
## 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.
summary("hateCrimes2010.csv")
##    Length     Class      Mode 
##         1 character character
names(hatecrimes) <- tolower(names(hatecrimes))
names(hatecrimes) <- gsub(" ","",names(hatecrimes))
head(hatecrimes)
## # A tibble: 6 × 44
##   county    year crimetype          `anti-male` `anti-female` `anti-transgender`
##   <chr>    <dbl> <chr>                    <dbl>         <dbl>              <dbl>
## 1 Albany    2016 Crimes Against Pe…           0             0                  0
## 2 Albany    2016 Property Crimes              0             0                  0
## 3 Allegany  2016 Property Crimes              0             0                  0
## 4 Bronx     2016 Crimes Against Pe…           0             0                  4
## 5 Bronx     2016 Property Crimes              0             0                  0
## 6 Broome    2016 Crimes Against Pe…           0             0                  0
## # ℹ 38 more variables: `anti-genderidentityexpression` <dbl>,
## #   `anti-age*` <dbl>, `anti-white` <dbl>, `anti-black` <dbl>,
## #   `anti-americanindian/alaskannative` <dbl>, `anti-asian` <dbl>,
## #   `anti-nativehawaiian/pacificislander` <dbl>,
## #   `anti-multi-racialgroups` <dbl>, `anti-otherrace` <dbl>,
## #   `anti-jewish` <dbl>, `anti-catholic` <dbl>, `anti-protestant` <dbl>,
## #   `anti-islamic(muslim)` <dbl>, `anti-multi-religiousgroups` <dbl>, …
hatecrimes2 <- hatecrimes |>
  select(county, year, 'anti-transgender', 'anti-age*', 'anti-white', 'anti-black', 'anti-asian', 'anti-jewish', 'anti-catholic', 'anti-islamic(muslim)', 'anti-multi-religiousgroups', 'anti-hispanic', 'anti-otherethnicity/nationalorigin', 'anti-gaymale', 'anti-gayfemale', `anti-otherethnicity/nationalorigin`) |>
  group_by(county, year)
head(hatecrimes2)
## # A tibble: 6 × 15
## # Groups:   county, year [4]
##   county    year `anti-transgender` `anti-age*` `anti-white` `anti-black`
##   <chr>    <dbl>              <dbl>       <dbl>        <dbl>        <dbl>
## 1 Albany    2016                  0           0            0            1
## 2 Albany    2016                  0           0            0            2
## 3 Allegany  2016                  0           0            0            1
## 4 Bronx     2016                  4           0            1            0
## 5 Bronx     2016                  0           0            1            0
## 6 Broome    2016                  0           0            0            1
## # ℹ 9 more variables: `anti-asian` <dbl>, `anti-jewish` <dbl>,
## #   `anti-catholic` <dbl>, `anti-islamic(muslim)` <dbl>,
## #   `anti-multi-religiousgroups` <dbl>, `anti-hispanic` <dbl>,
## #   `anti-otherethnicity/nationalorigin` <dbl>, `anti-gaymale` <dbl>,
## #   `anti-gayfemale` <dbl>
dim(hatecrimes2)
## [1] 423  15
# There are currently 12 variables with 423 rows.
summary(hatecrimes2)
##     county               year      anti-transgender    anti-age*      
##  Length:423         Min.   :2010   Min.   :0.00000   Min.   :0.00000  
##  Class :character   1st Qu.:2011   1st Qu.:0.00000   1st Qu.:0.00000  
##  Mode  :character   Median :2013   Median :0.00000   Median :0.00000  
##                     Mean   :2013   Mean   :0.04728   Mean   :0.05201  
##                     3rd Qu.:2015   3rd Qu.:0.00000   3rd Qu.:0.00000  
##                     Max.   :2016   Max.   :5.00000   Max.   :9.00000  
##    anti-white        anti-black       anti-asian      anti-jewish    
##  Min.   : 0.0000   Min.   : 0.000   Min.   :0.0000   Min.   : 0.000  
##  1st Qu.: 0.0000   1st Qu.: 0.000   1st Qu.:0.0000   1st Qu.: 0.000  
##  Median : 0.0000   Median : 1.000   Median :0.0000   Median : 0.000  
##  Mean   : 0.3357   Mean   : 1.761   Mean   :0.1773   Mean   : 3.981  
##  3rd Qu.: 0.0000   3rd Qu.: 2.000   3rd Qu.:0.0000   3rd Qu.: 3.000  
##  Max.   :11.0000   Max.   :18.000   Max.   :8.0000   Max.   :82.000  
##  anti-catholic     anti-islamic(muslim) anti-multi-religiousgroups
##  Min.   : 0.0000   Min.   : 0.0000      Min.   : 0.00000          
##  1st Qu.: 0.0000   1st Qu.: 0.0000      1st Qu.: 0.00000          
##  Median : 0.0000   Median : 0.0000      Median : 0.00000          
##  Mean   : 0.2695   Mean   : 0.4704      Mean   : 0.07565          
##  3rd Qu.: 0.0000   3rd Qu.: 0.0000      3rd Qu.: 0.00000          
##  Max.   :12.0000   Max.   :10.0000      Max.   :10.00000          
##  anti-hispanic     anti-otherethnicity/nationalorigin  anti-gaymale   
##  Min.   : 0.0000   Min.   : 0.0000                    Min.   : 0.000  
##  1st Qu.: 0.0000   1st Qu.: 0.0000                    1st Qu.: 0.000  
##  Median : 0.0000   Median : 0.0000                    Median : 0.000  
##  Mean   : 0.3735   Mean   : 0.2837                    Mean   : 1.499  
##  3rd Qu.: 0.0000   3rd Qu.: 0.0000                    3rd Qu.: 1.000  
##  Max.   :17.0000   Max.   :19.0000                    Max.   :36.000  
##  anti-gayfemale  
##  Min.   :0.0000  
##  1st Qu.:0.0000  
##  Median :0.0000  
##  Mean   :0.2411  
##  3rd Qu.:0.0000  
##  Max.   :8.0000
hatelong <- hatecrimes2 |> 
    pivot_longer(
        cols = 3:12,
        names_to = "victim_cat",
        values_to = "crimecount")

hatecrimplot <-hatelong |> 
  ggplot(aes(year, crimecount))+
  geom_point()+
  aes(color = victim_cat)+
  facet_wrap(~victim_cat)
hatecrimplot

hatenew <- hatelong |>
  filter( victim_cat %in% c("anti-black", "anti-jewish", "anti-gaymale"))|>
  group_by(year, county) |>
  arrange(desc(crimecount))
hatenew
## # A tibble: 846 × 7
## # Groups:   year, county [277]
##    county   year anti-otherethnicity/nationalo…¹ `anti-gaymale` `anti-gayfemale`
##    <chr>   <dbl>                           <dbl>          <dbl>            <dbl>
##  1 Kings    2012                               0              0                0
##  2 Kings    2016                               1              2                0
##  3 Suffolk  2014                               0              2                0
##  4 Suffolk  2012                               2              2                0
##  5 Kings    2011                               0              2                0
##  6 Kings    2013                               1              1                0
##  7 Kings    2010                               0              1                0
##  8 Nassau   2011                               0              0                0
##  9 Suffolk  2013                               0              1                0
## 10 Nassau   2016                               0              0                0
## # ℹ 836 more rows
## # ℹ abbreviated name: ¹​`anti-otherethnicity/nationalorigin`
## # ℹ 2 more variables: victim_cat <chr>, crimecount <dbl>
plot2 <- hatenew |>
  ggplot() +
  geom_bar(aes(x=year, y=crimecount, fill = victim_cat),
      position = "dodge", stat = "identity") +
  labs(fill = "Hate Crime Type",
       y = "Number of Hate Crime Incidents",
       title = "Hate Crime Type in NY Counties Between 2010-2016",
       caption = "Source: NY State Division of Criminal Justice Services")
plot2

plot3 <- hatenew |>
  ggplot() +
  geom_bar(aes(x=county, y=crimecount, fill = victim_cat),
      position = "dodge", stat = "identity") +
  labs(fill = "Hate Crime Type",
       y = "Number of Hate Crime Incidents",
       title = "Hate Crime Type in NY Counties Between 2010-2016",
       caption = "Source: NY State Division of Criminal Justice Services")
plot3

counties <- hatenew |>
  group_by(year, county)|>
  summarize(sum = sum(crimecount)) |>
  arrange(desc(sum))
## `summarise()` has grouped output by 'year'. You can override using the
## `.groups` argument.
counties
## # A tibble: 277 × 3
## # Groups:   year [7]
##     year county    sum
##    <dbl> <chr>   <dbl>
##  1  2012 Kings     124
##  2  2010 Kings      89
##  3  2016 Kings      83
##  4  2012 Suffolk    80
##  5  2014 Kings      69
##  6  2015 Kings      69
##  7  2011 Kings      68
##  8  2013 Kings      68
##  9  2014 Suffolk    65
## 10  2013 Suffolk    64
## # ℹ 267 more rows
counties2 <- hatenew |>
  group_by(county)|>
  summarize(sum = sum(crimecount)) |>
  slice_max(order_by = sum, n=5)
counties2
## # A tibble: 5 × 2
##   county     sum
##   <chr>    <dbl>
## 1 Kings      570
## 2 Suffolk    317
## 3 Nassau     283
## 4 New York   266
## 5 Queens     175
plot4 <- hatenew |>
  filter(county %in% c("Kings", "New York", "Suffolk", "Nassau", "Queens")) |>
  ggplot() +
  geom_bar(aes(x=county, y=crimecount, fill = victim_cat),
      position = "dodge", stat = "identity") +
  labs(y = "Number of Hate Crime Incidents",
       title = "5 Counties in NY with Highest Incidents of Hate Crimes",
       subtitle = "Between 2010-2016", 
       fill = "Hate Crime Type",
      caption = "Source: NY State Division of Criminal Justice Services")
plot4

setwd("C:/Users/Neked Shep/Desktop/DATA110")
nypop <- read_csv("newyorkpopulation.csv")
## 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.
nypop$Geography <- gsub(" , New York", "", nypop$Geography)
nypop$Geography <- gsub("County", "", nypop$Geography)
nypoplong <- nypop |>
  rename(county = Geography) |>
  gather("year", "population", 2:8) 
nypoplong$year <- as.double(nypoplong$year)
head(nypoplong)
## # 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
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
counties12 <- counties |>
  filter(year == 2012) |>
  arrange(desc(sum)) 
counties12
## # A tibble: 41 × 3
## # Groups:   year [1]
##     year county     sum
##    <dbl> <chr>    <dbl>
##  1  2012 Kings      124
##  2  2012 Suffolk     80
##  3  2012 New York    54
##  4  2012 Nassau      48
##  5  2012 Queens      38
##  6  2012 Erie        20
##  7  2012 Bronx       19
##  8  2012 Richmond    16
##  9  2012 Multiple    14
## 10  2012 Dutchess     9
## # ℹ 31 more rows
datajoin <- counties12 |>
  full_join(nypoplong12, by=c("county", "year"))
datajoin
## # A tibble: 41 × 4
## # Groups:   year [1]
##     year county     sum population
##    <dbl> <chr>    <dbl>      <dbl>
##  1  2012 Kings      124    2572282
##  2  2012 Suffolk     80    1499382
##  3  2012 New York    54    1625121
##  4  2012 Nassau      48    1350748
##  5  2012 Queens      38    2278024
##  6  2012 Erie        20     920792
##  7  2012 Bronx       19    1414774
##  8  2012 Richmond    16     470978
##  9  2012 Multiple    14         NA
## 10  2012 Dutchess     9         NA
## # ℹ 31 more rows
datajoinrate <- datajoin |>
  mutate(rate = sum/population*100000) |>
  arrange(desc(rate))
datajoinrate
## # A tibble: 41 × 5
## # Groups:   year [1]
##     year county        sum population  rate
##    <dbl> <chr>       <dbl>      <dbl> <dbl>
##  1  2012 Suffolk        80    1499382 5.34 
##  2  2012 Kings         124    2572282 4.82 
##  3  2012 Nassau         48    1350748 3.55 
##  4  2012 Richmond       16     470978 3.40 
##  5  2012 New York       54    1625121 3.32 
##  6  2012 Erie           20     920792 2.17 
##  7  2012 Queens         38    2278024 1.67 
##  8  2012 Bronx          19    1414774 1.34 
##  9  2012 Monroe          5     748947 0.668
## 10  2012 Westchester     6     961073 0.624
## # ℹ 31 more rows
dt <- datajoinrate[,c("county","rate")]
dt
## # A tibble: 41 × 2
##    county       rate
##    <chr>       <dbl>
##  1 Suffolk     5.34 
##  2 Kings       4.82 
##  3 Nassau      3.55 
##  4 Richmond    3.40 
##  5 New York    3.32 
##  6 Erie        2.17 
##  7 Queens      1.67 
##  8 Bronx       1.34 
##  9 Monroe      0.668
## 10 Westchester 0.624
## # ℹ 31 more rows
aggregategroups <- hatecrimes |>
  pivot_longer(
    cols = 4:44,
    names_to = "victim_cat",
    values_to = "crimecount"
  )
unique(aggregategroups$victim_cat)
##  [1] "anti-male"                               
##  [2] "anti-female"                             
##  [3] "anti-transgender"                        
##  [4] "anti-genderidentityexpression"           
##  [5] "anti-age*"                               
##  [6] "anti-white"                              
##  [7] "anti-black"                              
##  [8] "anti-americanindian/alaskannative"       
##  [9] "anti-asian"                              
## [10] "anti-nativehawaiian/pacificislander"     
## [11] "anti-multi-racialgroups"                 
## [12] "anti-otherrace"                          
## [13] "anti-jewish"                             
## [14] "anti-catholic"                           
## [15] "anti-protestant"                         
## [16] "anti-islamic(muslim)"                    
## [17] "anti-multi-religiousgroups"              
## [18] "anti-atheism/agnosticism"                
## [19] "anti-religiouspracticegenerally"         
## [20] "anti-otherreligion"                      
## [21] "anti-buddhist"                           
## [22] "anti-easternorthodox(greek,russian,etc.)"
## [23] "anti-hindu"                              
## [24] "anti-jehovahswitness"                    
## [25] "anti-mormon"                             
## [26] "anti-otherchristian"                     
## [27] "anti-sikh"                               
## [28] "anti-hispanic"                           
## [29] "anti-arab"                               
## [30] "anti-otherethnicity/nationalorigin"      
## [31] "anti-non-hispanic*"                      
## [32] "anti-gaymale"                            
## [33] "anti-gayfemale"                          
## [34] "anti-gay(maleandfemale)"                 
## [35] "anti-heterosexual"                       
## [36] "anti-bisexual"                           
## [37] "anti-physicaldisability"                 
## [38] "anti-mentaldisability"                   
## [39] "totalincidents"                          
## [40] "totalvictims"                            
## [41] "totaloffenders"
aggregategroups <- aggregategroups |>
  mutate(group = case_when(
    victim_cat %in% c("anti-transgender", "anti-gayfemale", "anti-gendervictim_catendityexpression", "anti-gaymale", "anti-gay(maleandfemale", "anti-bisexual") ~ "anti-lgbtq",
    victim_cat %in% c("anti-multi-racialgroups", "anti-jewish", "anti-protestant", "anti-multi-religousgroups", "anti-religiouspracticegenerally", "anti-buddhist", "anti-hindu", "anti-mormon", "anti-sikh", "anti-catholic", "anti-islamic(muslim)", "anti-atheism/agnosticism", "anti-otherreligion", "anti-easternorthodox(greek,russian,etc.)", "anti-jehovahswitness", "anti-otherchristian") ~ "anti-religion", 
    victim_cat %in% c("anti-asian", "anti-arab", "anti-non-hispanic", "anti-white", "anti-americanindian/alaskannative", "anti-nativehawaiian/pacificislander", "anti-otherrace", "anti-hispanic", "anti-otherethnicity/nationalorigin") ~ "anti-ethnicity",
    victim_cat %in% c("anti-physicaldisability", "anti-mentaldisability") ~ "anti-disability",
    victim_cat %in% c("anti-female", "anti-male") ~ "anti-gender",
    TRUE ~ "others"))
aggregategroups
## # A tibble: 17,343 × 6
##    county  year crimetype              victim_cat               crimecount group
##    <chr>  <dbl> <chr>                  <chr>                         <dbl> <chr>
##  1 Albany  2016 Crimes Against Persons anti-male                         0 anti…
##  2 Albany  2016 Crimes Against Persons anti-female                       0 anti…
##  3 Albany  2016 Crimes Against Persons anti-transgender                  0 anti…
##  4 Albany  2016 Crimes Against Persons anti-genderidentityexpr…          0 othe…
##  5 Albany  2016 Crimes Against Persons anti-age*                         0 othe…
##  6 Albany  2016 Crimes Against Persons anti-white                        0 anti…
##  7 Albany  2016 Crimes Against Persons anti-black                        1 othe…
##  8 Albany  2016 Crimes Against Persons anti-americanindian/ala…          0 anti…
##  9 Albany  2016 Crimes Against Persons anti-asian                        0 anti…
## 10 Albany  2016 Crimes Against Persons anti-nativehawaiian/pac…          0 anti…
## # ℹ 17,333 more rows
lgbtq <- hatecrimes |>
  pivot_longer(
      cols = 4:44,
      names_to = "victim_cat",
      values_to = "crimecount") |>
filter(victim_cat %in% c("anti-transgender", "anti-gayfemale", "anti-gendervictim_catendityexpression", "anti-gaymale", "anti-gay(maleandfemale", "anti-bisexual"))
lgbtq
## # A tibble: 1,692 × 5
##    county    year crimetype              victim_cat       crimecount
##    <chr>    <dbl> <chr>                  <chr>                 <dbl>
##  1 Albany    2016 Crimes Against Persons anti-transgender          0
##  2 Albany    2016 Crimes Against Persons anti-gaymale              1
##  3 Albany    2016 Crimes Against Persons anti-gayfemale            0
##  4 Albany    2016 Crimes Against Persons anti-bisexual             0
##  5 Albany    2016 Property Crimes        anti-transgender          0
##  6 Albany    2016 Property Crimes        anti-gaymale              0
##  7 Albany    2016 Property Crimes        anti-gayfemale            0
##  8 Albany    2016 Property Crimes        anti-bisexual             0
##  9 Allegany  2016 Property Crimes        anti-transgender          0
## 10 Allegany  2016 Property Crimes        anti-gaymale              0
## # ℹ 1,682 more rows
  1. The positive aspects of this dataset are that the data is very specific. There is lots of data going back as far as 5 years. The data is also very specific in the sense of documenting who is experiencing the hate crimes.
  2. One thing I would like to study more about this data set is why are there counties reporting zero hate crimes? Its a good thing that there aren’t any hate crimes, but how accurate is the information? Another thing I would like to study is what the exact hate crime was. Was it violent, was it verbal, etc.
  3. To follow up after seeing the output, I would like to show the graphs with in different formats, so that there are different ways to present the dataset. Another thing I would do is provide text for the reader to gain more detailed information about the data set.