```markdown
# Pendahuluan
## Latar Belakang
Data kejadian kriminal dapat digunakan untuk melihat karakteristik korban dan tersangka berdasarkan aspek demografi. Analisis dilakukan terhadap umur, jenis kelamin, race, dan kategori kejahatan untuk memperoleh gambaran mengenai profil demografi kriminalitas antara pelaku dan korban.
## Tujuan Analisis
Analisis ini bertujuan untuk menganalisis profil demografi kriminalitas antara pelaku dan korban melalui proses data wrangling, encoding, transformasi data, dan eksplorasi visualisasi.
# Persiapan Data
## Memuat Package
``` r
library(readxl)
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(tidyr)
library(ggplot2)
data_clean <- read_excel("Crime_Incidents_Clean Kelompok Mantull.xlsx")
dim(data_clean)
## [1] 5249 10
dim(data_clean)
## [1] 5249 10
str(data_clean)
## tibble [5,249 × 10] (S3: tbl_df/tbl/data.frame)
## $ Victim ID : chr [1:5249] "VIC00642" "VIC00262" "VIC00518" "VIC00243" ...
## $ Victim Name : chr [1:5249] "Robert Torres" "John Martin" "Richard Hill" "Susan Young" ...
## $ Victim Age Clean : num [1:5249] 51 50 29 50 51 15 72 50 55 10 ...
## $ Victim Gender Clean : chr [1:5249] "Unknown" "Unknown" "Other" "Unknown" ...
## $ Suspect ID : chr [1:5249] "SUS00281" "SUS00376" "SUS00560" "SUS00468" ...
## $ Suspect Name : chr [1:5249] "Barbara Thomas" "Barbara Harris" "Richard Scott" "Michael Thomas" ...
## $ Suspect Age Clean : num [1:5249] 51 46 19 46 75 73 58 73 26 46 ...
## $ Suspect Gender Clean: chr [1:5249] "Male" "Other" "Female" "Male" ...
## $ Suspect Race Clean : chr [1:5249] "Asian" "Black" "Asian" "Black" ...
## $ Crime Category : chr [1:5249] "Assault & Battery" "Burglary / B&E" "Other" "Property Damage" ...
data_clean <- data_clean %>%
mutate(
incident_pair_id = paste(
`Victim ID`,
`Suspect ID`,
sep = "_"
)
)
head(data_clean$incident_pair_id)
## [1] "VIC00642_SUS00281" "VIC00262_SUS00376" "VIC00518_SUS00560"
## [4] "VIC00243_SUS00468" "VIC00512_SUS00751" "VIC00473_SUS00454"
data_clean <- data_clean %>%
mutate(
victim_gender_female = ifelse(`Victim Gender Clean` == "Female", 1, 0),
victim_gender_male = ifelse(`Victim Gender Clean` == "Male", 1, 0),
victim_gender_other = ifelse(`Victim Gender Clean` == "Other", 1, 0),
victim_gender_unknown = ifelse(`Victim Gender Clean` == "Unknown", 1, 0)
)
head(
data_clean %>%
select(
`Victim Gender Clean`,
victim_gender_female,
victim_gender_male,
victim_gender_other,
victim_gender_unknown
)
)
## # A tibble: 6 × 5
## `Victim Gender Clean` victim_gender_female victim_gender_male
## <chr> <dbl> <dbl>
## 1 Unknown 0 0
## 2 Unknown 0 0
## 3 Other 0 0
## 4 Unknown 0 0
## 5 Male 0 1
## 6 Unknown 0 0
## # ℹ 2 more variables: victim_gender_other <dbl>, victim_gender_unknown <dbl>
data_clean <- data_clean %>%
mutate(
victim_age_group = case_when(
`Victim Age Clean` >= 10 & `Victim Age Clean` <= 17 ~ "Anak-Anak",
`Victim Age Clean` >= 18 & `Victim Age Clean` <= 35 ~ "Dewasa Muda",
`Victim Age Clean` >= 36 & `Victim Age Clean` <= 60 ~ "Dewasa",
`Victim Age Clean` >= 61 & `Victim Age Clean` <= 90 ~ "Lansia"
)
)
head(
data_clean %>%
select(`Victim Age Clean`, victim_age_group)
)
## # A tibble: 6 × 2
## `Victim Age Clean` victim_age_group
## <dbl> <chr>
## 1 51 Dewasa
## 2 50 Dewasa
## 3 29 Dewasa Muda
## 4 50 Dewasa
## 5 51 Dewasa
## 6 15 Anak-Anak
data_clean <- data_clean %>%
mutate(
victim_age_group_Dewasa =
ifelse(victim_age_group == "Dewasa", 1, 0),
victim_age_group_Dewasa_Muda =
ifelse(victim_age_group == "Dewasa Muda", 1, 0),
victim_age_group_Lansia =
ifelse(victim_age_group == "Lansia", 1, 0)
)
head(
data_clean %>%
select(
victim_age_group,
victim_age_group_Dewasa,
victim_age_group_Dewasa_Muda,
victim_age_group_Lansia
)
)
## # A tibble: 6 × 4
## victim_age_group victim_age_group_Dewasa victim_age_group_Dewasa_Muda
## <chr> <dbl> <dbl>
## 1 Dewasa 1 0
## 2 Dewasa 1 0
## 3 Dewasa Muda 0 1
## 4 Dewasa 1 0
## 5 Dewasa 1 0
## 6 Anak-Anak 0 0
## # ℹ 1 more variable: victim_age_group_Lansia <dbl>
data_clean <- data_clean %>%
mutate(
victim_age_z = (
`Victim Age Clean` - mean(`Victim Age Clean`, na.rm = TRUE)
) / sd(`Victim Age Clean`, na.rm = TRUE),
suspect_age_z = (
`Suspect Age Clean` - mean(`Suspect Age Clean`, na.rm = TRUE)
) / sd(`Suspect Age Clean`, na.rm = TRUE)
)
head(
data_clean %>%
select(
`Victim Age Clean`,
victim_age_z,
`Suspect Age Clean`,
suspect_age_z
)
)
## # A tibble: 6 × 4
## `Victim Age Clean` victim_age_z `Suspect Age Clean` suspect_age_z
## <dbl> <dbl> <dbl> <dbl>
## 1 51 0.0528 51 0.368
## 2 50 0.00526 46 0.0316
## 3 29 -0.993 19 -1.78
## 4 50 0.00526 46 0.0316
## 5 51 0.0528 75 1.98
## 6 15 -1.66 73 1.85
ggplot(data_clean, aes(x = victim_age_group)) +
geom_bar() +
labs(
title = "Distribusi Kelompok Umur Korban",
x = "Kelompok Umur",
y = "Jumlah Korban"
) +
theme_minimal()
ggplot(data_clean, aes(x = `Victim Gender Clean`)) +
geom_bar() +
labs(
title = "Distribusi Gender Korban",
x = "Jenis Kelamin Korban",
y = "Jumlah Korban"
) +
theme_minimal()
ggplot(data_clean, aes(x = `Suspect Race Clean`)) +
geom_bar() +
labs(
title = "Distribusi Race Tersangka",
x = "Race",
y = "Jumlah Tersangka"
) +
theme_minimal() +
theme(
axis.text.x = element_text(angle = 45, hjust = 1)
)
ggplot(data_clean, aes(x = `Crime Category`)) +
geom_bar() +
labs(
title = "Distribusi Kategori Kejahatan",
x = "Kategori Kejahatan",
y = "Jumlah Kejadian"
) +
theme_minimal() +
theme(
axis.text.x = element_text(angle = 45, hjust = 1)
)
ggplot(data_clean) +
geom_histogram(
aes(x = `Victim Age Clean`),
binwidth = 5,
alpha = 0.5
) +
geom_histogram(
aes(x = `Suspect Age Clean`),
binwidth = 5,
alpha = 0.5
) +
labs(
title = "Distribusi Umur Korban dan Tersangka",
x = "Umur",
y = "Jumlah"
) +
theme_minimal()
data_clean %>%
select(
`Victim Gender Clean`,
victim_gender_female,
victim_gender_male,
victim_gender_other,
victim_gender_unknown,
victim_age_group,
victim_age_group_Dewasa,
victim_age_group_Dewasa_Muda,
victim_age_group_Lansia
) %>%
head(10)
## # A tibble: 10 × 9
## `Victim Gender Clean` victim_gender_female victim_gender_male
## <chr> <dbl> <dbl>
## 1 Unknown 0 0
## 2 Unknown 0 0
## 3 Other 0 0
## 4 Unknown 0 0
## 5 Male 0 1
## 6 Unknown 0 0
## 7 Female 1 0
## 8 Female 1 0
## 9 Other 0 0
## 10 Unknown 0 0
## # ℹ 6 more variables: victim_gender_other <dbl>, victim_gender_unknown <dbl>,
## # victim_age_group <chr>, victim_age_group_Dewasa <dbl>,
## # victim_age_group_Dewasa_Muda <dbl>, victim_age_group_Lansia <dbl>
summary(
data_clean %>%
select(
`Victim Age Clean`,
`Suspect Age Clean`,
victim_age_z,
suspect_age_z
)
)
## Victim Age Clean Suspect Age Clean victim_age_z suspect_age_z
## Min. :10.00 Min. :15.00 Min. :-1.896198 Min. :-2.05311
## 1st Qu.:34.00 1st Qu.:36.00 1st Qu.:-0.755322 1st Qu.:-0.64090
## Median :50.00 Median :46.00 Median : 0.005262 Median : 0.03158
## Mean :49.89 Mean :45.53 Mean : 0.000000 Mean : 0.00000
## 3rd Qu.:65.00 3rd Qu.:55.00 3rd Qu.: 0.718309 3rd Qu.: 0.63681
## Max. :90.00 Max. :75.00 Max. : 1.906722 Max. : 1.98178
data_clean %>%
count(`Victim Gender Clean`, sort = TRUE)
## # A tibble: 4 × 2
## `Victim Gender Clean` n
## <chr> <int>
## 1 Male 1824
## 2 Female 1683
## 3 Unknown 1382
## 4 Other 360
data_clean %>%
count(victim_age_group, sort = TRUE)
## # A tibble: 4 × 2
## victim_age_group n
## <chr> <int>
## 1 Dewasa 2277
## 2 Lansia 1577
## 3 Dewasa Muda 959
## 4 Anak-Anak 436
data_clean %>%
count(`Crime Category`, sort = TRUE)
## # A tibble: 16 × 2
## `Crime Category` n
## <chr> <int>
## 1 Assault & Battery 963
## 2 Fraud & Scam 457
## 3 Arson 369
## 4 Drug Offense 362
## 5 Theft / Larceny 348
## 6 Kidnapping 343
## 7 Robbery 334
## 8 Burglary / B&E 329
## 9 Domestic Violence 329
## 10 Cybercrime 318
## 11 DUI / Drunk Driving 307
## 12 Homicide / Murder 297
## 13 Vandalism 284
## 14 Other 122
## 15 Property Damage 49
## 16 Sexual Assault 38
data_clean %>%
count(
`Victim Gender Clean`,
victim_age_group,
sort = TRUE
)
## # A tibble: 16 × 3
## `Victim Gender Clean` victim_age_group n
## <chr> <chr> <int>
## 1 Unknown Dewasa 741
## 2 Male Dewasa 716
## 3 Female Dewasa 671
## 4 Male Lansia 589
## 5 Female Lansia 521
## 6 Unknown Lansia 364
## 7 Male Dewasa Muda 363
## 8 Female Dewasa Muda 329
## 9 Unknown Dewasa Muda 192
## 10 Female Anak-Anak 162
## 11 Male Anak-Anak 156
## 12 Other Dewasa 149
## 13 Other Lansia 103
## 14 Unknown Anak-Anak 85
## 15 Other Dewasa Muda 75
## 16 Other Anak-Anak 33
ggplot(
data_clean,
aes(
x = victim_age_group,
fill = `Victim Gender Clean`
)
) +
geom_bar(position = "dodge") +
labs(
title = "Distribusi Kelompok Umur Berdasarkan Gender Korban",
x = "Kelompok Umur",
y = "Jumlah Korban",
fill = "Gender Korban"
) +
theme_minimal()
Berdasarkan hasil eksplorasi data kejadian kriminal, dapat diketahui bahwa data korban dan tersangka telah melalui proses data wrangling, encoding, transformasi Z-score, serta visualisasi. Distribusi korban dapat dilihat berdasarkan gender, kelompok umur, dan kategori kejahatan. Hasil analisis juga menunjukkan adanya variasi karakteristik umur antara korban dan tersangka serta perbedaan distribusi kelompok umur berdasarkan gender korban. Dengan demikian, proses eksplorasi data dapat memberikan gambaran mengenai profil demografi kriminalitas antara pelaku dan korban.