data <- read.csv("C:/Users/Joe/Downloads/LA_2020_to_Present.csv")

data$DATE.OCC <- as.POSIXlt(data$DATE.OCC, format="%m/%d/%Y %H:%M:%S %p")

data$Year <- year(data$DATE.OCC)
data$Month <- month.abb[month(data$DATE.OCC)] 
data$weekday <- wday(data$DATE.OCC)
data$Hour <- floor(data$TIME.OCC/100)*100 

Top crime categories

y2020 <- data %>% filter(Year=='2020')
y2021 <- data %>% filter(Year=='2021')



count21 <- summarise(group_by(y2021, Crm.Cd.Desc), Counts=length(Crm.Cd.Desc)) %>% arrange(desc(Counts))
count20 <- summarise(group_by(y2020, Crm.Cd.Desc), Counts=length(Crm.Cd.Desc)) %>% arrange(desc(Counts))

head(count20,n=20) %>% 
  kbl(caption = "Top 20 Crimes in 2020") %>%
  kable_classic(full_width = F, html_font = "Cambria")
Top 20 Crimes in 2020
Crm.Cd.Desc Counts
VEHICLE - STOLEN 20723
BATTERY - SIMPLE ASSAULT 16288
VANDALISM - FELONY ($400 & OVER, ALL CHURCH VANDALISMS) 12878
BURGLARY 12754
BURGLARY FROM VEHICLE 12667
ASSAULT WITH DEADLY WEAPON, AGGRAVATED ASSAULT 11518
INTIMATE PARTNER - SIMPLE ASSAULT 10787
THEFT PLAIN - PETTY ($950 & UNDER) 10767
THEFT FROM MOTOR VEHICLE - PETTY ($950 & UNDER) 9679
THEFT OF IDENTITY 7497
VANDALISM - MISDEAMEANOR ($399 OR UNDER) 6971
ROBBERY 6891
THEFT-GRAND ($950.01 & OVER)EXCPT,GUNS,FOWL,LIVESTK,PROD 5440
THEFT FROM MOTOR VEHICLE - GRAND ($400 AND OVER) 4763
CRIMINAL THREATS - NO WEAPON DISPLAYED 4178
SHOPLIFTING - PETTY THEFT ($950 & UNDER) 3542
BRANDISH WEAPON 3079
INTIMATE PARTNER - AGGRAVATED ASSAULT 2869
TRESPASSING 2849
VIOLATION OF RESTRAINING ORDER 2605
head(count21,n=20) %>% 
  kbl(caption = "Top 20 Crimea in 2021") %>%
  kable_classic(full_width = F,html_font = "Cambria")
Top 20 Crimea in 2021
Crm.Cd.Desc Counts
VEHICLE - STOLEN 9323
BATTERY - SIMPLE ASSAULT 6240
VANDALISM - FELONY ($400 & OVER, ALL CHURCH VANDALISMS) 5421
BURGLARY FROM VEHICLE 5255
ASSAULT WITH DEADLY WEAPON, AGGRAVATED ASSAULT 4975
BURGLARY 4826
INTIMATE PARTNER - SIMPLE ASSAULT 4363
THEFT PLAIN - PETTY ($950 & UNDER) 4350
THEFT FROM MOTOR VEHICLE - PETTY ($950 & UNDER) 3304
THEFT OF IDENTITY 3049
THEFT FROM MOTOR VEHICLE - GRAND ($400 AND OVER) 2886
ROBBERY 2862
VANDALISM - MISDEAMEANOR ($399 OR UNDER) 2761
THEFT-GRAND ($950.01 & OVER)EXCPT,GUNS,FOWL,LIVESTK,PROD 2112
CRIMINAL THREATS - NO WEAPON DISPLAYED 1709
BRANDISH WEAPON 1414
TRESPASSING 1198
INTIMATE PARTNER - AGGRAVATED ASSAULT 1172
SHOPLIFTING - PETTY THEFT ($950 & UNDER) 1156
VIOLATION OF RESTRAINING ORDER 1084
head(count20,n=10) %>% ggplot( aes(x=reorder(Crm.Cd.Desc,Counts), y=Counts)) +
  geom_bar(aes(fill=Crm.Cd.Desc), stat="identity") + 
   geom_label(aes(label = Counts), size = 4) +
  coord_flip() + theme(legend.position = "none") +
  labs(title = "Top 10 crimes in 2020", x="",y="Count")

head(count21,n=10) %>% ggplot( aes(x=reorder(Crm.Cd.Desc,Counts), y=Counts)) +
  geom_bar(aes(fill=Crm.Cd.Desc), stat="identity") + 
   geom_label(aes(label = Counts), size = 4) +
  coord_flip() + theme(legend.position = "none") +
  labs(title = "Top 10 crimes in 2021", x="",y="Count")

by_hour <- aggregate(data$Hour, by = list(Hour = data$Hour), FUN=length)
colnames(by_hour) <- c("Hour", "Total")

options(scipen = 1)
ggplot(by_hour, aes(Hour, Total)) +
  geom_line(colour="Red") +
  labs(title="Crimes By Hour",
        x ="Hour of the Day", y = "Total Crimes", caption = "Lowest at 5 AM\nHighest at Noon\nHigh period at 6 to 8 PM")

Seasonality by month. Using 2020 year: full year

y2020$Month2 <-month(y2020$DATE.OCC)
by_month <- aggregate(y2020$Month2, by = list(Month = y2020$Month2), FUN=length)

colnames(by_month) <- c("Month", "Total")
by_month$Month2 <- month.abb[by_month$Month]

ggplot(by_month, aes(reorder(Month2, Month), Total)) +
  geom_bar(fill="darkblue", stat="identity")+
   geom_label(aes(label = Total), size = 3) +
  labs(title = "2020 Crimes By Month", x="Month" , y ="Total Crimes", caption = "No general seasonality trends")  

Area Sections

by_area <- aggregate(y2020$AREA.NAME, by = list(Area = y2020$AREA.NAME), FUN=length) 
colnames(by_area) <- c("Area","Total")



head(arrange(by_area,-Total),n=20) %>% ggplot(aes(reorder(Area, Total), Total)) +
  geom_bar(fill = "blue", stat="identity") + 
  geom_label(aes(label = Total), size = 3) +
  coord_flip()+
  ggtitle("Crimes By Area") +
  xlab("Area") +
  ylab("Total Crimes")

Districts

district <- aggregate(y2020$Rpt.Dist.No, by = list(District = y2020$Rpt.Dist.No), FUN=length) 
colnames(district) <- c("District","Total")



head(arrange(district,-Total),n=20) %>% ggplot(aes(reorder(District, Total), Total)) +
  geom_bar(fill = "blue", stat="identity") + 
  geom_label(aes(label = Total), size = 3) +
  coord_flip()+
  ggtitle("Crimes By District") +
  xlab("District") +
  ylab("Total ")

Crime Premise Location

location <- y2020 %>%
  filter(!is.na(Premis.Desc)) %>%
  group_by(Premis.Desc) %>%
  tally() %>%
  ungroup() %>%
  mutate(PremiseDescription = reorder(Premis.Desc,n)) %>%
  arrange(desc(n)) %>%
  head(20)

  
location %>% ggplot(aes(x = reorder(Premis.Desc,n),y = n)) +
  geom_bar(stat='identity',colour="white", fill ="blue") +
   geom_label(aes(label = n), size = 3) +
  labs(x = "Premise Description", y = "Count", 
       title = 'Premise Description') +
  coord_flip() + 
  theme_bw()

Child Abuse

child <- y2020 %>% filter(grepl("CHILD", Crm.Cd.Desc))
child20 <- summarise(group_by(child, Crm.Cd.Desc,Vict.Sex), Counts=length(Crm.Cd.Desc)) %>% arrange(desc(Counts))
## `summarise()` has grouped output by 'Crm.Cd.Desc'. You can override using the `.groups` argument.
child20 %>% 
  kbl(caption = "Child Abuse ") %>%
  kable_classic(full_width = F, html_font = "Cambria")
Child Abuse
Crm.Cd.Desc Vict.Sex Counts
CHILD ABUSE (PHYSICAL) - SIMPLE ASSAULT F 408
CHILD ABUSE (PHYSICAL) - SIMPLE ASSAULT M 407
CHILD ANNOYING (17YRS & UNDER) F 175
CHILD NEGLECT (SEE 300 W.I.C.) M 147
CHILD NEGLECT (SEE 300 W.I.C.) F 117
CHILD ABUSE (PHYSICAL) - AGGRAVATED ASSAULT M 73
CHILD ABUSE (PHYSICAL) - AGGRAVATED ASSAULT F 72
CHILD STEALING F 47
CHILD STEALING M 47
CHILD PORNOGRAPHY M 34
CHILD ANNOYING (17YRS & UNDER) M 29
CHILD STEALING X 17
LEWD/LASCIVIOUS ACTS WITH CHILD F 17
CHILD PORNOGRAPHY F 13
CHILD ABUSE (PHYSICAL) - SIMPLE ASSAULT X 3
CHILD ABANDONMENT M 2
CHILD PORNOGRAPHY X 2
CHILD ABANDONMENT F 1
CHILD ABUSE (PHYSICAL) - AGGRAVATED ASSAULT X 1
LEWD/LASCIVIOUS ACTS WITH CHILD X 1
child20 <- summarise(group_by(child, Crm.Cd.Desc,Premis.Desc), Counts=length(Premis.Desc)) %>% arrange(desc(Counts))
## `summarise()` has grouped output by 'Crm.Cd.Desc'. You can override using the `.groups` argument.
head(child20,n=20) %>% 
  kbl(caption = "Location _ Child Abuse ") %>%
  kable_classic(full_width = F, html_font = "Cambria")
Location _ Child Abuse
Crm.Cd.Desc Premis.Desc Counts
CHILD ABUSE (PHYSICAL) - SIMPLE ASSAULT SINGLE FAMILY DWELLING 390
CHILD ABUSE (PHYSICAL) - SIMPLE ASSAULT MULTI-UNIT DWELLING (APARTMENT, DUPLEX, ETC) 248
CHILD NEGLECT (SEE 300 W.I.C.) SINGLE FAMILY DWELLING 81
CHILD NEGLECT (SEE 300 W.I.C.) STREET 81
CHILD ABUSE (PHYSICAL) - AGGRAVATED ASSAULT SINGLE FAMILY DWELLING 70
CHILD ANNOYING (17YRS & UNDER) SINGLE FAMILY DWELLING 65
CHILD ANNOYING (17YRS & UNDER) MULTI-UNIT DWELLING (APARTMENT, DUPLEX, ETC) 56
CHILD STEALING SINGLE FAMILY DWELLING 55
CHILD NEGLECT (SEE 300 W.I.C.) MULTI-UNIT DWELLING (APARTMENT, DUPLEX, ETC) 54
CHILD ABUSE (PHYSICAL) - SIMPLE ASSAULT STREET 41
CHILD ABUSE (PHYSICAL) - AGGRAVATED ASSAULT MULTI-UNIT DWELLING (APARTMENT, DUPLEX, ETC) 33
CHILD STEALING MULTI-UNIT DWELLING (APARTMENT, DUPLEX, ETC) 33
CHILD PORNOGRAPHY SINGLE FAMILY DWELLING 26
CHILD ABUSE (PHYSICAL) - AGGRAVATED ASSAULT STREET 24
CHILD ABUSE (PHYSICAL) - SIMPLE ASSAULT SIDEWALK 24
CHILD ANNOYING (17YRS & UNDER) STREET 22
CHILD PORNOGRAPHY MULTI-UNIT DWELLING (APARTMENT, DUPLEX, ETC) 18
CHILD NEGLECT (SEE 300 W.I.C.) PARKING LOT 17
CHILD ABUSE (PHYSICAL) - SIMPLE ASSAULT PARKING LOT 12
CHILD ANNOYING (17YRS & UNDER) SIDEWALK 11

Intimate Partners

partner <- y2020 %>% filter(grepl("INTIMATE", Crm.Cd.Desc))

partner20 <- summarise(group_by(partner, Crm.Cd.Desc,Vict.Sex), Counts=length(Crm.Cd.Desc)) %>% arrange(desc(Counts))
## `summarise()` has grouped output by 'Crm.Cd.Desc'. You can override using the `.groups` argument.
partner20 %>% 
  kbl(caption = "Intimate Partner Abuse ") %>%
  kable_classic(full_width = F, html_font = "Cambria")
Intimate Partner Abuse
Crm.Cd.Desc Vict.Sex Counts
INTIMATE PARTNER - SIMPLE ASSAULT F 8064
INTIMATE PARTNER - SIMPLE ASSAULT M 2702
INTIMATE PARTNER - AGGRAVATED ASSAULT F 2177
INTIMATE PARTNER - AGGRAVATED ASSAULT M 689
INTIMATE PARTNER - SIMPLE ASSAULT X 20
INTIMATE PARTNER - AGGRAVATED ASSAULT X 3
INTIMATE PARTNER - SIMPLE ASSAULT H 1
##----------------------
partner20 <- summarise(group_by(partner, Crm.Cd.Desc,Premis.Desc), Counts=length(Premis.Desc)) %>% arrange(desc(Counts))
## `summarise()` has grouped output by 'Crm.Cd.Desc'. You can override using the `.groups` argument.
head(partner20,n=20) %>% 
  kbl(caption = "Location _  Abuse ") %>%
  kable_classic(full_width = F, html_font = "Cambria")
Location _ Abuse
Crm.Cd.Desc Premis.Desc Counts
INTIMATE PARTNER - SIMPLE ASSAULT SINGLE FAMILY DWELLING 3668
INTIMATE PARTNER - SIMPLE ASSAULT MULTI-UNIT DWELLING (APARTMENT, DUPLEX, ETC) 3589
INTIMATE PARTNER - SIMPLE ASSAULT STREET 1353
INTIMATE PARTNER - AGGRAVATED ASSAULT SINGLE FAMILY DWELLING 932
INTIMATE PARTNER - AGGRAVATED ASSAULT MULTI-UNIT DWELLING (APARTMENT, DUPLEX, ETC) 900
INTIMATE PARTNER - SIMPLE ASSAULT SIDEWALK 509
INTIMATE PARTNER - AGGRAVATED ASSAULT STREET 443
INTIMATE PARTNER - SIMPLE ASSAULT PARKING LOT 372
INTIMATE PARTNER - SIMPLE ASSAULT HOTEL 193
INTIMATE PARTNER - SIMPLE ASSAULT VEHICLE, PASSENGER/TRUCK 176
INTIMATE PARTNER - AGGRAVATED ASSAULT SIDEWALK 135
INTIMATE PARTNER - SIMPLE ASSAULT MOTEL 113
INTIMATE PARTNER - AGGRAVATED ASSAULT PARKING LOT 83
INTIMATE PARTNER - SIMPLE ASSAULT DRIVEWAY 77
INTIMATE PARTNER - SIMPLE ASSAULT PARK/PLAYGROUND 65
INTIMATE PARTNER - SIMPLE ASSAULT ALLEY 60
INTIMATE PARTNER - AGGRAVATED ASSAULT HOTEL 58
INTIMATE PARTNER - AGGRAVATED ASSAULT VEHICLE, PASSENGER/TRUCK 56
INTIMATE PARTNER - SIMPLE ASSAULT OTHER BUSINESS 56
INTIMATE PARTNER - SIMPLE ASSAULT OTHER RESIDENCE 56
##-------------------------
partnerweapon20 <- summarise(group_by(partner, Crm.Cd.Desc,Weapon.Desc), Counts=length(Weapon.Desc)) %>% arrange(desc(Counts))
## `summarise()` has grouped output by 'Crm.Cd.Desc'. You can override using the `.groups` argument.
head(partnerweapon20,n=20) %>% 
  kbl(caption = "Weapon _  Intimate Partner Cases ") %>%
  kable_classic(full_width = F, html_font = "Cambria")
Weapon _ Intimate Partner Cases
Crm.Cd.Desc Weapon.Desc Counts
INTIMATE PARTNER - SIMPLE ASSAULT STRONG-ARM (HANDS, FIST, FEET OR BODILY FORCE) 10121
INTIMATE PARTNER - AGGRAVATED ASSAULT STRONG-ARM (HANDS, FIST, FEET OR BODILY FORCE) 1673
INTIMATE PARTNER - SIMPLE ASSAULT UNKNOWN WEAPON/OTHER WEAPON 462
INTIMATE PARTNER - AGGRAVATED ASSAULT UNKNOWN WEAPON/OTHER WEAPON 207
INTIMATE PARTNER - AGGRAVATED ASSAULT KNIFE WITH BLADE 6INCHES OR LESS 102
INTIMATE PARTNER - AGGRAVATED ASSAULT VEHICLE 98
INTIMATE PARTNER - AGGRAVATED ASSAULT HAND GUN 80
INTIMATE PARTNER - AGGRAVATED ASSAULT OTHER KNIFE 72
INTIMATE PARTNER - AGGRAVATED ASSAULT BOTTLE 61
INTIMATE PARTNER - AGGRAVATED ASSAULT KITCHEN KNIFE 60
INTIMATE PARTNER - AGGRAVATED ASSAULT MACE/PEPPER SPRAY 52
INTIMATE PARTNER - AGGRAVATED ASSAULT CLUB/BAT 44
INTIMATE PARTNER - AGGRAVATED ASSAULT FOLDING KNIFE 39
INTIMATE PARTNER - AGGRAVATED ASSAULT STICK 37
INTIMATE PARTNER - AGGRAVATED ASSAULT KNIFE WITH BLADE OVER 6 INCHES IN LENGTH 33
INTIMATE PARTNER - AGGRAVATED ASSAULT SCISSORS 32
INTIMATE PARTNER - SIMPLE ASSAULT 32
INTIMATE PARTNER - AGGRAVATED ASSAULT BLUNT INSTRUMENT 31
INTIMATE PARTNER - AGGRAVATED ASSAULT PIPE/METAL PIPE 30
INTIMATE PARTNER - AGGRAVATED ASSAULT SEMI-AUTOMATIC PISTOL 30
##-------------------------
partnerrace20 <- summarise(group_by(partner, Crm.Cd.Desc,Vict.Descent), Counts=length(Vict.Descent)) %>% arrange(desc(Counts))
## `summarise()` has grouped output by 'Crm.Cd.Desc'. You can override using the `.groups` argument.
head(partnerrace20,n=20) %>% 
  kbl(caption = "Demographic factor: Race _  Intimate Partner Cases ") %>%
  kable_classic(full_width = F, html_font = "Cambria")
Demographic factor: Race _ Intimate Partner Cases
Crm.Cd.Desc Vict.Descent Counts
INTIMATE PARTNER - SIMPLE ASSAULT H 5587
INTIMATE PARTNER - SIMPLE ASSAULT B 2629
INTIMATE PARTNER - SIMPLE ASSAULT W 1780
INTIMATE PARTNER - AGGRAVATED ASSAULT H 1282
INTIMATE PARTNER - AGGRAVATED ASSAULT B 1014
INTIMATE PARTNER - SIMPLE ASSAULT O 526
INTIMATE PARTNER - AGGRAVATED ASSAULT W 422
INTIMATE PARTNER - SIMPLE ASSAULT A 195
INTIMATE PARTNER - AGGRAVATED ASSAULT O 89
INTIMATE PARTNER - AGGRAVATED ASSAULT A 51
INTIMATE PARTNER - SIMPLE ASSAULT X 39
INTIMATE PARTNER - SIMPLE ASSAULT K 23
INTIMATE PARTNER - AGGRAVATED ASSAULT K 5
INTIMATE PARTNER - AGGRAVATED ASSAULT X 5
INTIMATE PARTNER - SIMPLE ASSAULT F 3
INTIMATE PARTNER - SIMPLE ASSAULT I 2
INTIMATE PARTNER - AGGRAVATED ASSAULT F 1
INTIMATE PARTNER - SIMPLE ASSAULT G 1
INTIMATE PARTNER - SIMPLE ASSAULT J 1
INTIMATE PARTNER - SIMPLE ASSAULT U 1
##------------------
partnerage20 <- summarise(group_by(partner, Vict.Age), Counts=length(Vict.Age)) %>% arrange(Vict.Age)
partnerage20 %>% 
  kbl(caption = "Demographic factor: Age _  Intimate Partner Cases ") %>%
  kable_classic(full_width = F, html_font = "Cambria")
Demographic factor: Age _ Intimate Partner Cases
Vict.Age Counts
0 135
4 2
7 1
8 1
9 2
12 2
13 2
14 3
15 12
16 31
17 71
18 159
19 258
20 311
21 325
22 408
23 456
24 511
25 515
26 578
27 543
28 541
29 562
30 514
31 516
32 467
33 464
34 481
35 412
36 394
37 365
38 377
39 335
40 309
41 288
42 284
43 234
44 221
45 209
46 227
47 204
48 177
49 147
50 155
51 170
52 113
53 122
54 101
55 110
56 114
57 85
58 87
59 93
60 68
61 49
62 49
63 45
64 37
65 26
66 21
67 10
68 21
69 14
70 16
71 12
72 3
73 14
74 11
75 7
76 3
77 2
78 9
79 3
80 10
81 3
82 1
83 3
84 2
85 1
87 1
88 2
96 1
98 1
99 7

Rape

rape <- y2020 %>% filter(grepl("RAPE", Crm.Cd.Desc))
rape20 <- summarise(group_by(rape, Crm.Cd.Desc,Vict.Sex), Counts=length(Crm.Cd.Desc)) %>% arrange(desc(Counts))
## `summarise()` has grouped output by 'Crm.Cd.Desc'. You can override using the `.groups` argument.
rape20 %>% 
  kbl(caption = "RAPE ") %>%
  kable_classic(full_width = F, html_font = "Cambria")
RAPE
Crm.Cd.Desc Vict.Sex Counts
RAPE, FORCIBLE F 793
RAPE, ATTEMPTED F 69
RAPE, FORCIBLE M 5
rape20 <- summarise(group_by(rape, Crm.Cd.Desc,Premis.Desc), Counts=length(Premis.Desc)) %>% arrange(desc(Counts))
## `summarise()` has grouped output by 'Crm.Cd.Desc'. You can override using the `.groups` argument.
head(rape20,n=20) %>% 
  kbl(caption = "Location _  Rape ") %>%
  kable_classic(full_width = F, html_font = "Cambria")
Location _ Rape
Crm.Cd.Desc Premis.Desc Counts
RAPE, FORCIBLE SINGLE FAMILY DWELLING 235
RAPE, FORCIBLE MULTI-UNIT DWELLING (APARTMENT, DUPLEX, ETC) 203
RAPE, FORCIBLE STREET 84
RAPE, FORCIBLE VEHICLE, PASSENGER/TRUCK 36
RAPE, FORCIBLE HOTEL 29
RAPE, FORCIBLE PARKING LOT 28
RAPE, FORCIBLE MOTEL 27
RAPE, FORCIBLE SIDEWALK 26
RAPE, ATTEMPTED MULTI-UNIT DWELLING (APARTMENT, DUPLEX, ETC) 17
RAPE, FORCIBLE PARK/PLAYGROUND 15
RAPE, ATTEMPTED SINGLE FAMILY DWELLING 14
RAPE, FORCIBLE ALLEY 14
RAPE, ATTEMPTED STREET 13
RAPE, ATTEMPTED SIDEWALK 10
RAPE, FORCIBLE OTHER PREMISE 9
RAPE, FORCIBLE MOBILE HOME/TRAILERS/CONSTRUCTION TRAILERS/RV’S/MOTORHOME 8
RAPE, FORCIBLE OTHER BUSINESS 8
RAPE, FORCIBLE OTHER RESIDENCE 7
RAPE, FORCIBLE TRANSIENT ENCAMPMENT 7
RAPE, FORCIBLE OTHER/OUTSIDE 6
rapeweapon20 <- summarise(group_by(rape, Crm.Cd.Desc,Weapon.Desc), Counts=length(Weapon.Desc)) %>% arrange(desc(Counts))
## `summarise()` has grouped output by 'Crm.Cd.Desc'. You can override using the `.groups` argument.
head(rapeweapon20,n=20) %>% 
  kbl(caption = "Weapon _  Rape Cases ") %>%
  kable_classic(full_width = F, html_font = "Cambria")
Weapon _ Rape Cases
Crm.Cd.Desc Weapon.Desc Counts
RAPE, FORCIBLE STRONG-ARM (HANDS, FIST, FEET OR BODILY FORCE) 744
RAPE, ATTEMPTED STRONG-ARM (HANDS, FIST, FEET OR BODILY FORCE) 57
RAPE, FORCIBLE UNKNOWN WEAPON/OTHER WEAPON 25
RAPE, FORCIBLE HAND GUN 10
RAPE, FORCIBLE KNIFE WITH BLADE 6INCHES OR LESS 4
RAPE, FORCIBLE OTHER KNIFE 4
RAPE, ATTEMPTED KNIFE WITH BLADE 6INCHES OR LESS 3
RAPE, FORCIBLE VERBAL THREAT 3
RAPE, ATTEMPTED FOLDING KNIFE 2
RAPE, ATTEMPTED HAND GUN 2
RAPE, ATTEMPTED UNKNOWN WEAPON/OTHER WEAPON 2
RAPE, ATTEMPTED VERBAL THREAT 2
RAPE, FORCIBLE UNKNOWN FIREARM 2
RAPE, ATTEMPTED OTHER KNIFE 1
RAPE, FORCIBLE FOLDING KNIFE 1
RAPE, FORCIBLE KITCHEN KNIFE 1
RAPE, FORCIBLE KNIFE WITH BLADE OVER 6 INCHES IN LENGTH 1
RAPE, FORCIBLE OTHER FIREARM 1
RAPE, FORCIBLE PHYSICAL PRESENCE 1
RAPE, FORCIBLE PIPE/METAL PIPE 1
raperace20 <- summarise(group_by(rape, Crm.Cd.Desc,Vict.Descent), Counts=length(Vict.Descent)) %>% arrange(desc(Counts))
## `summarise()` has grouped output by 'Crm.Cd.Desc'. You can override using the `.groups` argument.
head(raperace20,n=20) %>% 
  kbl(caption = "Demographic factor: Race _  Rape Cases ") %>%
  kable_classic(full_width = F, html_font = "Cambria")
Demographic factor: Race _ Rape Cases
Crm.Cd.Desc Vict.Descent Counts
RAPE, FORCIBLE H 347
RAPE, FORCIBLE B 202
RAPE, FORCIBLE W 190
RAPE, FORCIBLE O 30
RAPE, ATTEMPTED H 28
RAPE, ATTEMPTED B 23
RAPE, FORCIBLE A 21
RAPE, ATTEMPTED W 11
RAPE, ATTEMPTED O 5
RAPE, FORCIBLE K 3
RAPE, FORCIBLE X 3
RAPE, ATTEMPTED A 2
RAPE, FORCIBLE C 1
RAPE, FORCIBLE F 1
rapeage20 <- summarise(group_by(rape, Vict.Age), Counts=length(Vict.Age)) %>% arrange(Vict.Age)

rapeage20 %>% 
  kbl(caption = "Demographic factor: Age _  Rape Cases ") %>%
  kable_classic(full_width = F, html_font = "Cambria")
Demographic factor: Age _ Rape Cases
Vict.Age Counts
0 8
5 1
6 1
7 3
8 1
9 2
10 7
11 8
12 17
13 16
14 24
15 35
16 33
17 26
18 29
19 43
20 46
21 21
22 26
23 43
24 25
25 34
26 21
27 25
28 26
29 27
30 17
31 16
32 20
33 20
34 14
35 15
36 14
37 11
38 12
39 11
40 14
41 5
42 9
43 14
44 14
45 6
46 7
47 10
48 8
49 12
50 7
51 5
52 7
53 3
54 5
55 4
56 1
57 3
58 2
59 1
60 4
61 5
62 1
63 2
64 2
65 5
66 2
67 3
69 1
74 2
78 2
80 2
82 1

Victims by gender

gender <- y2020 %>%  
  group_by(`Vict.Sex`, `Crm.Cd.Desc`) %>%
 
  summarise(total = n()) 
## `summarise()` has grouped output by 'Vict.Sex'. You can override using the `.groups` argument.
gender$Vict.Sex[gender$Vict.Sex==""] <- NA
 
gender <- na.omit(gender) %>% filter(total>1000)  %>% arrange(desc(total)) 



top_n(gender,n=10) %>%
  ggplot(aes(reorder(x = `Crm.Cd.Desc`, total), y = total)) +
  geom_col(fill = 'lightgreen') +
  geom_text(aes(label=total), color='black', hjust = 0.8, size = 3) +
  coord_flip() +
  facet_wrap(~ `Vict.Sex`) +
  labs(x = 'Crime', 
       y = "Total")
## Selecting by total

Ages of Victims

Note : 48,076 crime activities with no information on victim’s age

y2020$Vict.Age[y2020$Vict.Age==0] <- NA  
age <- y2020 %>% 
  group_by(`Vict.Age`) %>%
  summarise(total = n()) 


age <- age %>% filter( Vict.Age !='NA') 

age %>%
  ggplot(aes(x = `Vict.Age`, y = total)) +
  geom_line(group = 1,color="blue") +
  geom_point(size = 1,color="red") +
  labs(title = "Ages Most Likely To Become Crime Victim", 
       x = "Victim Age", 
       y = "Total")