1. Pendahuluan

1.1 Latar Belakang

Dataset Titanic merupakan dataset yang berisi informasi mengenai penumpang kapal Titanic yang mengalami tragedi pada tahun 1912. Dataset mencatat berbagai karakteristik penumpang, seperti jenis kelamin, umur, kelas tiket, jumlah keluarga, harga tiket, kabin, pelabuhan keberangkatan, dan status keselamatan.

Analisis data eksploratif dilakukan untuk memahami karakteristik data serta mengetahui pola yang terdapat pada data penumpang Titanic.

1.2 Rumusan Masalah

Bagaimana karakteristik dan pola penumpang Titanic berdasarkan variabel umur, jenis kelamin, dan status keselamatan?

1.3 Tujuan Analisis

Analisis dilakukan untuk mengeksplorasi karakteristik penumpang Titanic serta mengetahui pola berdasarkan variabel umur, jenis kelamin, dan status keselamatan.

2. Pengenalan Dataset

2.1 Sumber Data

Dataset Titanic yang digunakan dalam project ini diperoleh dari Kaggle (Elyamadad, n.d.): https://www.kaggle.com/datasets/elyamadad/titanic-dataset.

2.2 Membaca Data

Data yang dibaca adalah data hasil cleaning (titanic_cleaning) yang berada satu folder dengan file laporan ini.

titanic_cleaning <- "titanic_cleaning.xlsx"

if (!file.exists(titanic_cleaning)) {
  stop("File data tidak ditemukan. Pastikan file Excel berada di folder yang SAMA dengan file .Rmd, ",
       "dan namanya sama persis dengan isi 'nama_file'.")
}

data_titanic <- read_excel(titanic_cleaning)
data_titanic$Age <- as.numeric(data_titanic$Age)   

tampil(data_titanic, 6, "Tabel 2.1 Enam Baris Pertama Data")
Tabel 2.1 Enam Baris Pertama Data
PassengerId Survived Sex Age
1 0 male 22
2 1 female 38
3 1 female 26
4 1 female 35
5 0 male 35
6 0 male 29

Data yang dibaca terdiri dari 891 baris dan 4 kolom.

2.3 Identifikasi Dataset

identifikasi <- data.frame(
  Aspek = c("Nama dataset", "Sumber data", "Jumlah variabel", "Jumlah observasi (baris)", "Bentuk data"),
  Keterangan = c("Titanic Dataset",
                 "Kaggle - Titanic Dataset (Elyamadad, n.d.), https://www.kaggle.com/datasets/elyamadad/titanic-dataset",
                 "12 variabel",
                 "891 observasi (satu baris mewakili satu penumpang)",
                 "Tabel/CSV (structured data)")
)
knitr::kable(identifikasi, align = "l", caption = "Tabel 2.2 Identifikasi Dataset")
Tabel 2.2 Identifikasi Dataset
Aspek Keterangan
Nama dataset Titanic Dataset
Sumber data Kaggle - Titanic Dataset (Elyamadad, n.d.), https://www.kaggle.com/datasets/elyamadad/titanic-dataset
Jumlah variabel 12 variabel
Jumlah observasi (baris) 891 observasi (satu baris mewakili satu penumpang)
Bentuk data Tabel/CSV (structured data)

2.4 Identifikasi dan Penjelasan Variabel

variabel <- data.frame(
  Variabel = c("PassengerId", "Survived", "Pclass", "Name", "Sex", "Age",
               "SibSp", "Parch", "Ticket", "Fare", "Cabin", "Embarked"),
  Keterangan = c("ID penumpang", "Status keselamatan", "Kelas tiket", "Nama penumpang",
                 "Jenis kelamin", "Umur", "Jumlah saudara/pasangan", "Jumlah orang tua/anak",
                 "Nomor tiket", "Harga tiket", "Kode kabin", "Pelabuhan keberangkatan"),
  Jenis = c("Kualitatif", "Kualitatif", "Kualitatif", "Kualitatif", "Kualitatif",
            "Kuantitatif kontinu", "Kuantitatif diskrit", "Kuantitatif diskrit",
            "Kualitatif", "Kuantitatif kontinu", "Kualitatif", "Kualitatif"),
  Skala = c("Nominal", "Nominal", "Ordinal", "Nominal", "Nominal", "Rasio",
            "Rasio", "Rasio", "Nominal", "Rasio", "Nominal", "Nominal")
)
knitr::kable(variabel, align = "l", caption = "Tabel 2.3 Variabel, Jenis, dan Skala Pengukuran")
Tabel 2.3 Variabel, Jenis, dan Skala Pengukuran
Variabel Keterangan Jenis Skala
PassengerId ID penumpang Kualitatif Nominal
Survived Status keselamatan Kualitatif Nominal
Pclass Kelas tiket Kualitatif Ordinal
Name Nama penumpang Kualitatif Nominal
Sex Jenis kelamin Kualitatif Nominal
Age Umur Kuantitatif kontinu Rasio
SibSp Jumlah saudara/pasangan Kuantitatif diskrit Rasio
Parch Jumlah orang tua/anak Kuantitatif diskrit Rasio
Ticket Nomor tiket Kualitatif Nominal
Fare Harga tiket Kuantitatif kontinu Rasio
Cabin Kode kabin Kualitatif Nominal
Embarked Pelabuhan keberangkatan Kualitatif Nominal

2.5 Identifikasi Permasalahan pada Data

Pada tahap identifikasi data mentah, ditemukan tiga jenis permasalahan: missing value, outlier, dan inkonsistensi penulisan.

masalah <- data.frame(
  Jenis = c("Missing value", "Missing value", "Missing value", "Outlier", "Inkonsistensi"),
  Variabel = c("Age", "Cabin", "Embarked", "Fare", "Ticket"),
  Keterangan = c("177 data kosong",
                 "687 data kosong",
                 "2 data kosong (baris 63 dan 831)",
                 "Baris 259, 680, dan 738 bernilai sama, yaitu 512,3292",
                 "Penulisan tidak konsisten (campuran huruf, angka, dan spasi)")
)
knitr::kable(masalah, align = "l", caption = "Tabel 2.4 Permasalahan pada Data Mentah")
Tabel 2.4 Permasalahan pada Data Mentah
Jenis Variabel Keterangan
Missing value Age 177 data kosong
Missing value Cabin 687 data kosong
Missing value Embarked 2 data kosong (baris 63 dan 831)
Outlier Fare Baris 259, 680, dan 738 bernilai sama, yaitu 512,3292
Inkonsistensi Ticket Penulisan tidak konsisten (campuran huruf, angka, dan spasi)

2.6 Ringkasan 5W+1H Dataset

w5h1 <- data.frame(
  Pertanyaan = c("Dari mana data diperoleh?", "Siapa yang mengumpulkan?", "Mengapa data dikumpulkan?",
                 "Kapan data dikumpulkan?", "Dalam bentuk apa data disimpan?", "Bagaimana data disusun?",
                 "Apa yang direpresentasikan dalam satu baris?", "Hubungan data dengan sumber lain",
                 "Apakah tersedia metadata/data dictionary?", "Riwayat data hingga menjadi dataset yang digunakan"),
  Jawaban = c(
    "Kaggle.",
    "Anonim; tidak diketahui berdasarkan informasi yang tersedia pada dataset.",
    "Untuk memprediksi penumpang yang selamat dari bencana dengan menganalisis faktor seperti usia, jenis kelamin, kelas, dan tiket.",
    "Peristiwa yang dicatat adalah tenggelamnya Titanic pada 15 April 1912. Data penumpang dikumpulkan melalui komite investigasi setelah kecelakaan; dataset yang diunggah ke Kaggle tidak mencantumkan tanggal tepatnya.",
    "Tabel/CSV (structured data).",
    "Setiap baris mewakili seorang penumpang, sedangkan kolom berisi variabel karakteristik penumpang (PassengerId, Survived, Pclass, Name, Sex, Age, SibSp, Parch, Ticket, Fare, Cabin, dan Embarked).",
    "Karakteristik masing-masing penumpang. Dataset berisi 891 observasi/baris.",
    "Titanic: Triumph and Tragedy karya Eaton & Haas (1994).",
    "Ya, tersedia.",
    "Data berasal dari berbagai sumber sejarah dan penelitian, kemudian diperbaiki serta dilengkapi menggunakan Encyclopedia Titanica. Data ini selanjutnya digunakan untuk analisis statistik dan machine learning, termasuk pada dataset Titanic di Kaggle."
  )
)
knitr::kable(w5h1, align = "l", caption = "Tabel 2.5 Ringkasan 5W+1H Dataset Titanic")
Tabel 2.5 Ringkasan 5W+1H Dataset Titanic
Pertanyaan Jawaban
Dari mana data diperoleh? Kaggle.
Siapa yang mengumpulkan? Anonim; tidak diketahui berdasarkan informasi yang tersedia pada dataset.
Mengapa data dikumpulkan? Untuk memprediksi penumpang yang selamat dari bencana dengan menganalisis faktor seperti usia, jenis kelamin, kelas, dan tiket.
Kapan data dikumpulkan? Peristiwa yang dicatat adalah tenggelamnya Titanic pada 15 April 1912. Data penumpang dikumpulkan melalui komite investigasi setelah kecelakaan; dataset yang diunggah ke Kaggle tidak mencantumkan tanggal tepatnya.
Dalam bentuk apa data disimpan? Tabel/CSV (structured data).
Bagaimana data disusun? Setiap baris mewakili seorang penumpang, sedangkan kolom berisi variabel karakteristik penumpang (PassengerId, Survived, Pclass, Name, Sex, Age, SibSp, Parch, Ticket, Fare, Cabin, dan Embarked).
Apa yang direpresentasikan dalam satu baris? Karakteristik masing-masing penumpang. Dataset berisi 891 observasi/baris.
Hubungan data dengan sumber lain Titanic: Triumph and Tragedy karya Eaton & Haas (1994).
Apakah tersedia metadata/data dictionary? Ya, tersedia.
Riwayat data hingga menjadi dataset yang digunakan Data berasal dari berbagai sumber sejarah dan penelitian, kemudian diperbaiki serta dilengkapi menggunakan Encyclopedia Titanica. Data ini selanjutnya digunakan untuk analisis statistik dan machine learning, termasuk pada dataset Titanic di Kaggle.

3. Data Cleaning

3.1 Tahapan Cleaning

Proses pembersihan data dilakukan melalui lima tahap:

  1. Pilih kolom: fokus pada variabel yang akan dianalisis.
  2. Cek area kosong: ditemukan 177 data kosong (missing value) khusus pada kolom Age.
  3. Imputasi data: data kosong pada Age dilengkapi dari sumber Ensiklopedia Titanic Dataset dan Titanic Universe.
  4. Mencari median: missing value yang masih ada dilengkapi dengan nilai median variabel Age.
  5. Validasi: memeriksa kembali apakah masih terdapat missing value.

3.2 Melihat Missing Value

Tahap imputasi dilakukan pada berkas Excel sebelum data dibaca ke R. Pemeriksaan di R menunjukkan jumlah missing value pada Age sebanyak 0.

sum(is.na(data_titanic$Age))
## [1] 0
cek_missing <- data.frame(Variabel = names(data_titanic),
                          Jumlah_Missing = as.integer(colSums(is.na(data_titanic))))
tabel(cek_missing, 0, "Tabel 3.1 Jumlah Missing Value per Variabel pada Data yang Digunakan")
Tabel 3.1 Jumlah Missing Value per Variabel pada Data yang Digunakan
Variabel Jumlah_Missing
PassengerId 0
Survived 0
Sex 0
Age 0

3.3 Memilih Variabel

Dipilih 4 variabel yang dianalisis (PassengerId, Survived, Sex, dan Age) dengan membuang 8 variabel lainnya.

data_variabel <- data_titanic[, !(names(data_titanic) %in%
  c("Pclass", "Name", "SibSp", "Parch", "Ticket", "Fare", "Cabin", "Embarked"))]

tampil(data_variabel, 10, "Tabel 3.2 Data Setelah Cleaning (10 Baris Pertama)")
Tabel 3.2 Data Setelah Cleaning (10 Baris Pertama)
PassengerId Survived Sex Age
1 0 male 22
2 1 female 38
3 1 female 26
4 1 female 35
5 0 male 35
6 0 male 29
7 0 male 54
8 0 male 2
9 1 female 27
10 1 female 14

3.4 Perbandingan Sebelum dan Sesudah Cleaning

sebelum_sesudah <- data.frame(
  Aspek = c("Jumlah variabel", "Jumlah observasi", "Missing value pada Age"),
  Sebelum_Cleaning = c("12", "891", "177"),
  Sesudah_Cleaning = c(as.character(ncol(data_variabel)),
                       as.character(nrow(data_variabel)),
                       as.character(sum(is.na(data_variabel$Age))))
)
knitr::kable(sebelum_sesudah, align = "c", caption = "Tabel 3.3 Perbandingan Data Sebelum dan Sesudah Cleaning")
Tabel 3.3 Perbandingan Data Sebelum dan Sesudah Cleaning
Aspek Sebelum_Cleaning Sesudah_Cleaning
Jumlah variabel 12 4
Jumlah observasi 891 891
Missing value pada Age 177 0

Sebelum cleaning, variabel Age memiliki 177 missing value dan terdapat 12 variabel. Setelah cleaning, missing value pada Age sudah teratasi dan variabel yang digunakan hanya 4, yaitu PassengerId, Survived, Sex, Age.

4. Pemeriksaan Karakteristik Data

4.1 Statistik Deskriptif

age <- data_titanic$Age
stat_age <- data.frame(
  Statistik = c("Jumlah Data", "Mean", "Median", "Standar Deviasi", "Minimum", "Maksimum"),
  Nilai = c(as.character(sum(!is.na(age))), fmt(mean(age, na.rm = TRUE)), fmt(median(age, na.rm = TRUE)),
            fmt(sd(age, na.rm = TRUE)), fmt(min(age, na.rm = TRUE)), fmt(max(age, na.rm = TRUE)))
)
knitr::kable(stat_age, align = "c", caption = "Tabel 4.1 Statistik Deskriptif Variabel Age")
Tabel 4.1 Statistik Deskriptif Variabel Age
Statistik Nilai
Jumlah Data 891
Mean 29,60
Median 28,00
Standar Deviasi 14,15
Minimum 0,42
Maksimum 80,00

Variabel Age memiliki 891 data dan tidak terdapat missing value. Rata-rata umur adalah 29,60 tahun, median 28,00 tahun, dan standar deviasi 14,15, dengan umur minimum 0,42 dan maksimum 80,00 tahun.

4.2 Histogram

ggplot(data_titanic, aes(x = Age)) +
  geom_histogram(bins = 20, fill = "steelblue", color = "white", alpha = 0.9) +
  labs(
    title = "Distribusi Usia Penumpang",
    x = "Usia (Tahun)",
    y = "Total Penumpang"
  ) +
  theme_minimal()
Gambar 4.1 Histogram distribusi usia penumpang

Gambar 4.1 Histogram distribusi usia penumpang

Histogram digunakan untuk melihat bentuk distribusi usia secara visual. Usia penumpang memiliki konsentrasi terbesar pada usia muda hingga dewasa, dengan penyebaran ke arah usia yang lebih tinggi.

4.3 Density Plot

ggplot(data_titanic, aes(x = Age)) +
  geom_density() +
  labs(
    title = "Density Plot Usia Penumpang",
    x = "Usia",
    y = "Density"
  ) +
  theme_minimal()
Gambar 4.2 Density plot usia penumpang

Gambar 4.2 Density plot usia penumpang

Density plot digunakan untuk melihat pola distribusi secara lebih halus. Pada data Age, distribusinya tidak sepenuhnya simetris dan terdapat kecenderungan penyimpangan dari bentuk normal.

4.4 Q-Q Plot

ggplot(data_titanic, aes(sample = Age)) +
  stat_qq() +
  stat_qq_line() +
  labs(
    title = "Q-Q Plot Usia Penumpang"
  ) +
  theme_minimal()
Gambar 4.3 Q-Q plot usia penumpang

Gambar 4.3 Q-Q plot usia penumpang

Pada Q-Q plot, jika data berdistribusi normal maka titik-titik akan mengikuti garis acuan. Pada data Age, titik-titik tidak seluruhnya mengikuti garis, terutama pada bagian ujung distribusi. Hal ini menunjukkan adanya penyimpangan dari distribusi normal, dan bagian tail distribusi tidak sepenuhnya sesuai dengan distribusi normal.

4.5 Uji Normalitas Shapiro-Wilk

Hipotesis: H0: data Age berdistribusi normal; H1: data Age tidak berdistribusi normal. Taraf signifikansi yang digunakan adalah 5%.

shapiro.test(data_titanic$Age)
## 
##  Shapiro-Wilk normality test
## 
## data:  data_titanic$Age
## W = 0.97916, p-value = 5.666e-10
sw   <- shapiro.test(data_titanic$Age)
n_sw <- sum(!is.na(data_titanic$Age))
sw_W <- unname(sw$statistic)
sw_p <- sw$p.value

tabel_sw <- data.frame(
  Statistik = c("Jumlah data (n)", "Statistik W", "p-value"),
  Nilai = c(as.character(n_sw), fmt(sw_W, 4), fmt_p(sw_p))
)
knitr::kable(tabel_sw, align = "c", caption = "Tabel 4.2 Hasil Uji Shapiro-Wilk")
Tabel 4.2 Hasil Uji Shapiro-Wilk
Statistik Nilai
Jumlah data (n) 891
Statistik W 0,9792
p-value 5,666e-10

Uji Shapiro-Wilk pada 891 data menghasilkan W = 0,9792 dan p-value = 5,666e-10. Dengan taraf signifikansi 5%, p-value < 0,05 sehingga H0 ditolak, artinya data Age (usia) tidak berdistribusi normal.

Namun, sesuai konsep EDA, hasil ini tidak berarti bahwa data tersebut buruk. Data usia memang dapat memiliki distribusi yang tidak normal. Normalitas harus dilihat berdasarkan tujuan analisis dan metode statistik yang akan digunakan.

4.6 Variasi Antar Kelompok dan Boxplot

Selanjutnya diperiksa apakah penyebaran Age antara kelompok laki-laki dan perempuan relatif sama. Variabel Sex berperan sebagai kelompok, dan variabel Age sebagai nilai yang dibandingkan.

tabel_sex_stat <- data_titanic %>%
  group_by(Sex) %>%
  summarise(Jumlah = n(),
            Mean_Age = mean(Age, na.rm = TRUE),
            Median = median(Age, na.rm = TRUE),
            Varians = var(Age, na.rm = TRUE),
            .groups = "drop")
tabel(tabel_sex_stat, 2, "Tabel 4.3 Ringkasan Usia Berdasarkan Jenis Kelamin")
Tabel 4.3 Ringkasan Usia Berdasarkan Jenis Kelamin
Sex Jumlah Mean_Age Median Varians
female 314 27,94 27 195,64
male 577 30,51 28 200,88
n_m    <- tabel_sex_stat$Jumlah[tabel_sex_stat$Sex == "male"]
n_f    <- tabel_sex_stat$Jumlah[tabel_sex_stat$Sex == "female"]
mean_m <- tabel_sex_stat$Mean_Age[tabel_sex_stat$Sex == "male"]
mean_f <- tabel_sex_stat$Mean_Age[tabel_sex_stat$Sex == "female"]
var_m  <- tabel_sex_stat$Varians[tabel_sex_stat$Sex == "male"]
var_f  <- tabel_sex_stat$Varians[tabel_sex_stat$Sex == "female"]
ggplot(data_titanic, aes(x = Sex, y = Age, fill = Sex)) +
  geom_boxplot() +
  scale_fill_manual(
    values = c(
      "male" = "skyblue",
      "female" = "pink"
    )
  ) +
  labs(
    title = "Boxplot Usia Berdasarkan Jenis Kelamin",
    x = "Jenis Kelamin",
    y = "Usia",
    fill = "Jenis Kelamin"
  ) +
  theme_minimal()
Gambar 4.4 Boxplot usia berdasarkan jenis kelamin

Gambar 4.4 Boxplot usia berdasarkan jenis kelamin

Berdasarkan tabel, jumlah penumpang laki-laki (male) adalah 577 orang dan perempuan (female) 314 orang. Rata-rata usia laki-laki 30,5 tahun, sedangkan perempuan 27,9 tahun, sehingga laki-laki cenderung lebih tua. Varians usia laki-laki 201 dan perempuan 196, menunjukkan penyebaran usia laki-laki sedikit lebih besar. Pada boxplot, penyebaran usia kedua kelompok tampak relatif mirip.

4.7 Uji Homogenitas Varians (Levene’s Test)

  • H0: varians usia kelompok laki-laki dan perempuan sama (homogen).
  • H1: varians usia kelompok laki-laki dan perempuan berbeda (tidak homogen).
data_levene     <- data_variabel
data_levene$Sex <- as.factor(data_levene$Sex)

car::leveneTest(Age ~ Sex, data = data_levene)
## Levene's Test for Homogeneity of Variance (center = median)
##        Df F value Pr(>F)
## group   1  0.2307 0.6311
##       889
lev   <- car::leveneTest(Age ~ Sex, data = data_levene)
lev_F <- lev[1, "F value"]
lev_p <- lev[1, "Pr(>F)"]

tabel_lev <- data.frame(Statistik = c("F", "p-value"),
                        Nilai = c(fmt(lev_F, 4), fmt(lev_p, 4)))
knitr::kable(tabel_lev, align = "c", caption = "Tabel 4.4 Hasil Uji Levene")
Tabel 4.4 Hasil Uji Levene
Statistik Nilai
F 0,2307
p-value 0,6311

Uji Levene (car::leveneTest, dengan pusat median sebagai pengaturan bawaan) menghasilkan F = 0,2307 dan p-value = 0,6311. Karena p-value > 0,05, maka H0 tidak ditolak. Artinya, tidak terdapat bukti yang cukup bahwa varians usia laki-laki dan perempuan berbeda secara statistik, sehingga varians dapat dianggap homogen.

4.8 Kesimpulan Normalitas dan Homogenitas

Tabel 4.5 Ringkasan Pemeriksaan Normalitas dan Homogenitas
Aspek Temuan
Normalitas Histogram dan density plot menunjukkan bentuk distribusi usia yang tidak sepenuhnya normal; Q-Q plot menunjukkan penyimpangan titik dari garis acuan terutama pada bagian ujung.
Normalitas (uji) Shapiro-Wilk: p-value = 5,666e-10 (p < 0,05, Age tidak berdistribusi normal).
Homogenitas Boxplot menunjukkan penyebaran usia laki-laki dan perempuan relatif mirip.
Homogenitas (uji) Levene: p-value = 0,6311 (p > 0,05, varians Age berdasarkan Sex dapat dianggap homogen).

5. Integrasi Data

Data karakteristik penumpang (Sex dan Age) dan data keselamatan (Survived) dipisahkan menjadi dua tabel, lalu diintegrasikan menggunakan PassengerId sebagai key.

tabel_karakteristik <- data_titanic %>%
  dplyr::select(PassengerId, Sex, Age)

tabel_keselamatan <- data_titanic %>%
  dplyr::select(PassengerId, Survived)

nrow(tabel_karakteristik)
## [1] 891
nrow(tabel_keselamatan)
## [1] 891
length(unique(tabel_karakteristik$PassengerId))
## [1] 891
length(unique(tabel_keselamatan$PassengerId))
## [1] 891
data_integrasi <- tabel_karakteristik %>%
  left_join(tabel_keselamatan, by = "PassengerId")

cek_integrasi <- data.frame(
  Pemeriksaan = c("Jumlah baris tabel_karakteristik", "Jumlah baris tabel_keselamatan",
                  "PassengerId unik pada tabel_karakteristik", "PassengerId unik pada tabel_keselamatan",
                  "Jumlah baris data_integrasi", "Jumlah missing value pada data_integrasi"),
  Hasil = c(nrow(tabel_karakteristik), nrow(tabel_keselamatan),
            length(unique(tabel_karakteristik$PassengerId)),
            length(unique(tabel_keselamatan$PassengerId)),
            nrow(data_integrasi), sum(is.na(data_integrasi)))
)
tabel(cek_integrasi, 0, "Tabel 5.1 Pemeriksaan Sebelum dan Sesudah Integrasi")
Tabel 5.1 Pemeriksaan Sebelum dan Sesudah Integrasi
Pemeriksaan Hasil
Jumlah baris tabel_karakteristik 891
Jumlah baris tabel_keselamatan 891
PassengerId unik pada tabel_karakteristik 891
PassengerId unik pada tabel_keselamatan 891
Jumlah baris data_integrasi 891
Jumlah missing value pada data_integrasi 0
tampil(data_integrasi, 10, "Tabel 5.2 Data Hasil Integrasi (10 Baris Pertama)")
Tabel 5.2 Data Hasil Integrasi (10 Baris Pertama)
PassengerId Sex Age Survived
1 male 22 0
2 female 38 1
3 female 26 1
4 female 35 1
5 male 35 0
6 male 29 0
7 male 54 0
8 male 2 0
9 female 27 1
10 female 14 1

Proses left_join() menggabungkan informasi Sex dan Age dengan Survived berdasarkan PassengerId yang sama, sehingga diperoleh satu dataset (data_integrasi) berisi 891 baris yang memuat karakteristik dan status keselamatan setiap penumpang. Dataset hasil integrasi inilah yang digunakan untuk analisis selanjutnya.

6. Transformasi Data Kategorik

6.1 Transformasi Kategorik I: Label Encoding

Sebelum encoding, variabel Sex memiliki nilai kategorik berupa male dan female. Setelah encoding, nilai tersebut diubah menjadi angka, yaitu 1 = male dan 0 = female, sehingga data lebih mudah digunakan dalam proses analisis atau pemodelan.

data_label <- data_integrasi %>%
  mutate(Sex_Label = ifelse(Sex == "male", 1, 0))

tampil(data_label, 10, "Tabel 6.1 Hasil Label Encoding Variabel Sex")
Tabel 6.1 Hasil Label Encoding Variabel Sex
PassengerId Sex Age Survived Sex_Label
1 male 22 0 1
2 female 38 1 0
3 female 26 1 0
4 female 35 1 0
5 male 35 0 1
6 male 29 0 1
7 male 54 0 1
8 male 2 0 1
9 female 27 1 0
10 female 14 1 0
table(Sex = data_label$Sex, Sex_Label = data_label$Sex_Label)
##         Sex_Label
## Sex        0   1
##   female 314   0
##   male     0 577

6.2 Transformasi Kategorik II: One-Hot Encoding

Pada one-hot encoding, data yang semula berbentuk kategori teks (male dan female) diubah menjadi kolom indikator (0/1) untuk setiap kategori.

titanic_onehot <- data_integrasi
titanic_sex <- dummy_cols(
  data_integrasi,
  select_columns = "Sex",
  remove_first_dummy = FALSE,
  remove_selected_columns = TRUE
)

tabel_sex <- titanic_sex %>%
  dplyr::select(PassengerId, Sex_male, Sex_female)

tampil(tabel_sex, 10, "Tabel 6.2 Hasil One-Hot Encoding Variabel Sex")
Tabel 6.2 Hasil One-Hot Encoding Variabel Sex
PassengerId Sex_male Sex_female
1 1 0
2 0 1
3 0 1
4 0 1
5 1 0
6 1 0
7 1 0
8 1 0
9 0 1
10 0 1

Hasilnya adalah dua kolom indikator, Sex_male dan Sex_female, di mana setiap penumpang bernilai 1 pada kolom kategorinya dan 0 pada kolom lainnya.

7. Kesimpulan

7.1 Kesimpulan

  1. Data cleaning. Dari 12 variabel, dipilih 4 variabel yang dianalisis (PassengerId, Survived, Sex, Age). Setelah imputasi, jumlah missing value pada Age adalah 0 dari 891 baris.
  2. Distribusi jenis kelamin dan umur. Penumpang laki-laki berjumlah 577 orang dan perempuan 314 orang. Rata-rata umur seluruh penumpang adalah 29,60 tahun dengan median 28,00 tahun.
  3. Normalitas. Berdasarkan histogram, density plot, Q-Q plot, dan uji Shapiro-Wilk (p-value = 5,666e-10), variabel Age tidak berdistribusi normal. Namun, sesuai konsep EDA, hal ini tidak berarti data buruk; normalitas harus dilihat berdasarkan tujuan analisis dan metode statistik yang akan digunakan.
  4. Homogenitas. Uji Levene (p-value = 0,6311) menunjukkan bahwa varians usia laki-laki dan perempuan dapat dianggap homogen.
  5. Integrasi data. Tabel karakteristik dan tabel keselamatan berhasil digabungkan dengan left_join() berdasarkan PassengerId menjadi 891 baris data.
  6. Transformasi data kategorik. Variabel Sex berhasil diubah ke bentuk numerik melalui label encoding (1 = male, 0 = female) dan one-hot encoding (Sex_male dan Sex_female), sehingga data siap digunakan untuk analisis atau pemodelan.

Daftar Pustaka