```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)

Import Data

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 Wrangling

Membuat Incident Pair ID

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"

Encoding Gender Korban

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>

Membuat Kelompok Umur Korban

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

Encoding Kelompok Umur

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>

Z-Score Umur

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

Visualisasi Kelompok Umur

ggplot(data_clean, aes(x = victim_age_group)) +
  geom_bar() +
  labs(
    title = "Distribusi Kelompok Umur Korban",
    x = "Kelompok Umur",
    y = "Jumlah Korban"
  ) +
  theme_minimal()

Visualisasi Gender Korban

ggplot(data_clean, aes(x = `Victim Gender Clean`)) +
  geom_bar() +
  labs(
    title = "Distribusi Gender Korban",
    x = "Jenis Kelamin Korban",
    y = "Jumlah Korban"
  ) +
  theme_minimal()

Visualisasi Race Tersangka

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)
  )

Visualisasi Kategori Kejahatan

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)
  )

Perbandingan Umur Korban dan Tersangka

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()

Pengecekan Hasil Encoding

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>

Statistik Deskriptif Umur

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

Jumlah Korban Berdasarkan Gender

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

Jumlah Korban Berdasarkan Kelompok Umur

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

Jumlah Kategori Kejahatan

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

Gender dan Kelompok Umur

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

Grafik Gender Berdasarkan Kelompok Umur

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()

Kesimpulan

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.