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
