NYPD Complaint Data Historic

NYPD complaint trends

library(readr)
library(lubridate)
library(dplyr)
library(ggplot2)

nypd <- read_csv("~/ShinyApps/madlan/nypd.csv")

nypd<-subset(nypd, !is.na(nypd$Latitude))
nypd<-subset(nypd, !is.na(nypd$Longitude))

nypd$year<-year(mdy(nypd$CMPLNT_FR_DT))
nypd<-nypd%>%filter(year>2005)
nypd_trends<-nypd%>%group_by(LAW_CAT_CD, year)%>%summarize(n=sum(!is.na(year)))
ggplot(data=nypd_trends, aes(x=year, y=n)) +
  geom_line(aes(color=LAW_CAT_CD))

nypd_trends_aread<-nypd%>%group_by(BORO_NM,LAW_CAT_CD, year)%>%summarize(n=sum(!is.na(year)))
ggplot(data=nypd_trends_aread, aes(x=year, y=n)) +
  geom_line(aes(color=LAW_CAT_CD))+
  facet_wrap(~BORO_NM)

nypd$hour<-hour(hms(nypd$CMPLNT_FR_TM))
hour_table<-nypd%>%group_by(LAW_CAT_CD, hour)%>%summarize(n=sum(!is.na(hour)))
ggplot(hour_table, aes(x=hour, y=n, colour=LAW_CAT_CD))+geom_line()

hour_table_areas<-nypd%>%group_by(BORO_NM, LAW_CAT_CD, hour)%>%summarize(n=sum(!is.na(hour)))
ggplot(hour_table_areas, aes(x=hour, y=n, colour=LAW_CAT_CD))+geom_line()+facet_wrap(~BORO_NM)

nypd$day <- weekdays(as.Date(nypd$CMPLNT_FR_DT, "%m/%d/%Y"))
day_table<-nypd%>%group_by(LAW_CAT_CD, day)%>%summarize(n=sum(!is.na(day)))
day_table$day <- factor(day_table$day, levels= c("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"))
day_table<-day_table[order(day_table$day),]
ggplot(day_table, aes(x=day, y=n))+ geom_bar(stat = "identity")+facet_wrap(~LAW_CAT_CD)

library(leaflet)
map1<-nypd%>%filter(year==2015, BORO_NM=="MANHATTAN", OFNS_DESC=="ROBBERY")%>%select(Longitude, Latitude, PREM_TYP_DESC)
leaflet(data = map1) %>%
   addTiles() %>%
 addMarkers(clusterOptions = markerClusterOptions(), 
            label=map1$PREM_TYP_DESC)
# box<-make_bbox(data=man_fal, Longitude, Latitude)
# calc_zoom(box)
library(ggmap)
Manhattan_map = qmap("Manhattan", zoom = 13, 
    source="stamen", maptype="toner",darken = c(.3,"#BBBBBB"))
Manhattan_map + geom_point(data=map1, aes(x=Longitude, y=Latitude), 
                              color="dark green", alpha=.15, size=2)

Find effect size:

nypd1<-nypd%>%sample_n(size=1000)
nypd1$day<-factor(nypd1$day, levels = c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"),
ordered = TRUE)
nypd1$day<-as.integer(nypd1$day)
nypd2<-nypd1%>%select(KY_CD, ADDR_PCT_CD, year, hour, day, X_COORD_CD, Y_COORD_CD)
# mod_1<-lm(KY_CD ~ hour, data = nypd2)
# mod_2<-lm(KY_CD ~ day, data = nypd2)
mod_1<-lm(KY_CD ~ hour+day+ADDR_PCT_CD+year, data = nypd2)
print(mod_1)

Call:
lm(formula = KY_CD ~ hour + day + ADDR_PCT_CD + year, data = nypd2)

Coefficients:
(Intercept)         hour          day  ADDR_PCT_CD         year  
 -3202.2715       0.8427       0.6247      -0.1729       1.7362  

Analysis of Variance Table

anova(mod_1)
Analysis of Variance Table

Response: KY_CD
           Df   Sum Sq Mean Sq F value   Pr(>F)    
hour        1   242659  242659  11.246 0.000828 ***
Residuals 998 21534505   21578                     
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

The analysis above shows a good fitting for the chosen model.

LS0tCnRpdGxlOiAiRXhwbG9yaW5nIE5ZUEQgQ29tcGxhaW50cyIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKW05ZUEQgQ29tcGxhaW50IERhdGEgSGlzdG9yaWNdKGh0dHBzOi8vZGF0YS5jaXR5b2ZuZXd5b3JrLnVzL1B1YmxpYy1TYWZldHkvTllQRC1Db21wbGFpbnQtRGF0YS1IaXN0b3JpYy9xZ2VhLWk1NmkpCgpOWVBEIGNvbXBsYWludCB0cmVuZHMgCmBgYHtyLCBlY2hvPVRSVUUsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmxpYnJhcnkocmVhZHIpCmxpYnJhcnkobHVicmlkYXRlKQpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KGdncGxvdDIpCgpueXBkIDwtIHJlYWRfY3N2KCJ+L1NoaW55QXBwcy9tYWRsYW4vbnlwZC5jc3YiKQoKbnlwZDwtc3Vic2V0KG55cGQsICFpcy5uYShueXBkJExhdGl0dWRlKSkKbnlwZDwtc3Vic2V0KG55cGQsICFpcy5uYShueXBkJExvbmdpdHVkZSkpCgpueXBkJHllYXI8LXllYXIobWR5KG55cGQkQ01QTE5UX0ZSX0RUKSkKbnlwZDwtbnlwZCU+JWZpbHRlcih5ZWFyPjIwMDUpCgpgYGAKCgpgYGB7ciwgZWNobz1UUlVFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpueXBkX3RyZW5kczwtbnlwZCU+JWdyb3VwX2J5KExBV19DQVRfQ0QsIHllYXIpJT4lc3VtbWFyaXplKG49c3VtKCFpcy5uYSh5ZWFyKSkpCgpnZ3Bsb3QoZGF0YT1ueXBkX3RyZW5kcywgYWVzKHg9eWVhciwgeT1uKSkgKwogIGdlb21fbGluZShhZXMoY29sb3I9TEFXX0NBVF9DRCkpCgpueXBkX3RyZW5kc19hcmVhZDwtbnlwZCU+JWdyb3VwX2J5KEJPUk9fTk0sTEFXX0NBVF9DRCwgeWVhciklPiVzdW1tYXJpemUobj1zdW0oIWlzLm5hKHllYXIpKSkKZ2dwbG90KGRhdGE9bnlwZF90cmVuZHNfYXJlYWQsIGFlcyh4PXllYXIsIHk9bikpICsKICBnZW9tX2xpbmUoYWVzKGNvbG9yPUxBV19DQVRfQ0QpKSsKICBmYWNldF93cmFwKH5CT1JPX05NKQpgYGAKCmBgYHtyLCBlY2hvPVRSVUUsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9Cm55cGQkaG91cjwtaG91cihobXMobnlwZCRDTVBMTlRfRlJfVE0pKQpob3VyX3RhYmxlPC1ueXBkJT4lZ3JvdXBfYnkoTEFXX0NBVF9DRCwgaG91ciklPiVzdW1tYXJpemUobj1zdW0oIWlzLm5hKGhvdXIpKSkKZ2dwbG90KGhvdXJfdGFibGUsIGFlcyh4PWhvdXIsIHk9biwgY29sb3VyPUxBV19DQVRfQ0QpKStnZW9tX2xpbmUoKQoKaG91cl90YWJsZV9hcmVhczwtbnlwZCU+JWdyb3VwX2J5KEJPUk9fTk0sIExBV19DQVRfQ0QsIGhvdXIpJT4lc3VtbWFyaXplKG49c3VtKCFpcy5uYShob3VyKSkpCmdncGxvdChob3VyX3RhYmxlX2FyZWFzLCBhZXMoeD1ob3VyLCB5PW4sIGNvbG91cj1MQVdfQ0FUX0NEKSkrZ2VvbV9saW5lKCkrZmFjZXRfd3JhcCh+Qk9ST19OTSkKCgpgYGAKCgpgYGB7ciwgZWNobz1UUlVFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpueXBkJGRheSA8LSB3ZWVrZGF5cyhhcy5EYXRlKG55cGQkQ01QTE5UX0ZSX0RULCAiJW0vJWQvJVkiKSkKZGF5X3RhYmxlPC1ueXBkJT4lZ3JvdXBfYnkoTEFXX0NBVF9DRCwgZGF5KSU+JXN1bW1hcml6ZShuPXN1bSghaXMubmEoZGF5KSkpCmRheV90YWJsZSRkYXkgPC0gZmFjdG9yKGRheV90YWJsZSRkYXksIGxldmVscz0gYygiU3VuZGF5IiwgIk1vbmRheSIsICJUdWVzZGF5IiwgIldlZG5lc2RheSIsICJUaHVyc2RheSIsICJGcmlkYXkiLCAiU2F0dXJkYXkiKSkKZGF5X3RhYmxlPC1kYXlfdGFibGVbb3JkZXIoZGF5X3RhYmxlJGRheSksXQpnZ3Bsb3QoZGF5X3RhYmxlLCBhZXMoeD1kYXksIHk9bikpKyBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IikrZmFjZXRfd3JhcCh+TEFXX0NBVF9DRCkKCmBgYApgYGB7ciwgZWNobz1UUlVFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpsaWJyYXJ5KGxlYWZsZXQpCgptYXAxPC1ueXBkJT4lZmlsdGVyKHllYXI9PTIwMTUsIEJPUk9fTk09PSJNQU5IQVRUQU4iLCBPRk5TX0RFU0M9PSJST0JCRVJZIiklPiVzZWxlY3QoTG9uZ2l0dWRlLCBMYXRpdHVkZSwgUFJFTV9UWVBfREVTQykKbGVhZmxldChkYXRhID0gbWFwMSkgJT4lCiAgIGFkZFRpbGVzKCkgJT4lCiBhZGRNYXJrZXJzKGNsdXN0ZXJPcHRpb25zID0gbWFya2VyQ2x1c3Rlck9wdGlvbnMoKSwgCiAgICAgICAgICAgIGxhYmVsPW1hcDEkUFJFTV9UWVBfREVTQykKCmBgYAoKCmBgYHtyLCBlY2hvPVRSVUUsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CiMgYm94PC1tYWtlX2Jib3goZGF0YT1tYW5fZmFsLCBMb25naXR1ZGUsIExhdGl0dWRlKQojIGNhbGNfem9vbShib3gpCmxpYnJhcnkoZ2dtYXApCk1hbmhhdHRhbl9tYXAgPSBxbWFwKCJNYW5oYXR0YW4iLCB6b29tID0gMTMsIAogICAgc291cmNlPSJzdGFtZW4iLCBtYXB0eXBlPSJ0b25lciIsZGFya2VuID0gYyguMywiI0JCQkJCQiIpKQoKTWFuaGF0dGFuX21hcCArIGdlb21fcG9pbnQoZGF0YT1tYXAxLCBhZXMoeD1Mb25naXR1ZGUsIHk9TGF0aXR1ZGUpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9ImRhcmsgZ3JlZW4iLCBhbHBoYT0uMTUsIHNpemU9MikKYGBgCgpGaW5kIGVmZmVjdCBzaXplOgpgYGB7ciwgZWNobz1UUlVFfQpueXBkMTwtbnlwZCU+JXNhbXBsZV9uKHNpemU9MTAwMCkKbnlwZDEkZGF5PC1mYWN0b3IobnlwZDEkZGF5LCBsZXZlbHMgPSBjKCJNb25kYXkiLCAiVHVlc2RheSIsICJXZWRuZXNkYXkiLCAiVGh1cnNkYXkiLCAiRnJpZGF5IiwgIlNhdHVyZGF5IiwgIlN1bmRheSIpLApvcmRlcmVkID0gVFJVRSkKbnlwZDEkZGF5PC1hcy5pbnRlZ2VyKG55cGQxJGRheSkKbnlwZDI8LW55cGQxJT4lc2VsZWN0KEtZX0NELCBBRERSX1BDVF9DRCwgeWVhciwgaG91ciwgZGF5LCBYX0NPT1JEX0NELCBZX0NPT1JEX0NEKQoKIyBtb2RfMTwtbG0oS1lfQ0QgfiBob3VyLCBkYXRhID0gbnlwZDIpCiMgbW9kXzI8LWxtKEtZX0NEIH4gZGF5LCBkYXRhID0gbnlwZDIpCm1vZF8xPC1sbShLWV9DRCB+IGhvdXIrZGF5K0FERFJfUENUX0NEK3llYXIsIGRhdGEgPSBueXBkMikKcHJpbnQobW9kXzEpCgpgYGAKCkFuYWx5c2lzIG9mIFZhcmlhbmNlIFRhYmxlCmBgYHtyfQphbm92YShtb2RfMSkKYGBgClRoZSBhbmFseXNpcyBhYm92ZSBzaG93cyBhIGdvb2QgZml0dGluZyBmb3IgdGhlIGNob3NlbiBtb2RlbC4KCmBgYHtyLCBldmFsPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQogbGlicmFyeShyYW5kb21Gb3Jlc3QpCnJhbmRvbUZvcmVzdChLWV9DRCB+IGhvdXIgKyBkYXkreWVhciwgZGF0YSA9IG55cGQyLCBudHJlZSA9IDI1KQpgYGAKCmBgYHtyLCBldmFsPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQpueXBkMzwtbnlwZCU+JXNhbXBsZV9uKHNpemU9MTAwMCkKbnlwZDM8LW55cGQzJT4lc2VsZWN0KEtZX0NELCBBRERSX1BDVF9DRCwgeWVhciwgaG91ciwgZGF5LCBYX0NPT1JEX0NELCBZX0NPT1JEX0NEKQpueXBkMyRkYXk8LWZhY3RvcihueXBkMyRkYXksIGxldmVscyA9IGMoIk1vbmRheSIsICJUdWVzZGF5IiwgIldlZG5lc2RheSIsICJUaHVyc2RheSIsICJGcmlkYXkiLCAiU2F0dXJkYXkiLCAiU3VuZGF5IiksCm9yZGVyZWQgPSBUUlVFKQpueXBkMyRkYXk8LWFzLmludGVnZXIobnlwZDMkZGF5KQoKbGlicmFyeShjYXJldCkKbGlicmFyeShlMTA3MSkKc2V0LnNlZWQoMSkKbW9kZWwgPSBLWV9DRCB+IGhvdXIgKyBkYXkgKyBBRERSX1BDVF9DRCArIHllYXIKc3ZtID0gc3ZtKG1vZGVsLCAKICAgICAgICAgICAgZGF0YSA9IG55cGQyICAsIAogICAgICAgICAgICBrZXJuZWwgPSAnbGluZWFyJywgCiAgICAgICAgICAgIHByb2JhYmlsaXR5ID0gVCwKICAgICAgICAgICAgY29zdCA9IDAuMDEsIAogICAgICAgICAgICBzY2FsZSA9IFQpCgpwcmludChsZW5ndGgoc3ZtJGluZGV4KSkKCmxpYnJhcnkoZGF0YS50YWJsZSkKdHJhaW5fc3Vic2V0X3ByZWQgPSBkYXRhLnRhYmxlKHByZWRpY3Qoc3ZtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3ZGF0YSA9IG55cGQyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjaXNpb24udmFsdWVzID0gRikpCgoKbnlwZDIkcHJlZCA9IHRyYWluX3N1YnNldF9wcmVkJFYxCiAgICAKICAgICMgVmlldyB0cmFpbmluZyBhY2N1cmFjeS4KCnRhYmxlKG55cGQyJEtZX0NEID09IG55cGQyJHByZWQpCgptb2RlbC5tdGNhcnNfbG0gPC0gdHJhaW4oS1lfQ0QgfiBob3VyLAogICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gbnlwZDIsCiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCA9ICJsbSIKICAgICAgICAgICAgICAgICAgICAgICAgKQoKY29lZi5pY2VwdCA8LSBjb2VmKG1vZGVsLm10Y2Fyc19sbSRmaW5hbE1vZGVsKVsxXQpjb2VmLnNsb3BlIDwtIGNvZWYobW9kZWwubXRjYXJzX2xtJGZpbmFsTW9kZWwpWzJdCgpnZ3Bsb3QoZGF0YSA9IG55cGQyLCBhZXMoeCA9IEtZX0NELCB5ID0gaG91cikpICsKICBnZW9tX3BvaW50KCkgKwogIGdlb21fYWJsaW5lKHNsb3BlID0gY29lZi5zbG9wZSwgaW50ZXJjZXB0ID0gY29lZi5pY2VwdCwgY29sb3IgPSAicmVkIikKCmBgYAoK