1 .Titanic

PERISTIWA TENGGELAM KAPAL TITANIC

RMS Titanic adalah sebuah kapal penumpang super Britania Raya yang tenggelam di Samudra Atlantik Utara pada tanggal 15 April 1912 setelah menabrak sebuah gunung es pada pelayaran perdananya dari Southampton, Inggris ke New York City. Tenggelamnya Titanic mengakibatkan kematian sebanyak 1.514 orang dalam salah satu bencana maritim masa damai paling mematikan sepanjang sejarah. Titanic merupakan kapal terbesar di dunia pada pelayaran perdananya. Satu dari tiga kapal samudra kelas Olympic dioperasikan oleh White Star Line. Kapal ini dibangun pada 1909 sampai 1911 oleh galangan kapal Harland and Wolff di Belfast. Kapal ini sanggup mengangkut 2.224 penumpang.

Para penumpangnya terdiri dari sejumlah orang terkaya di dunia, serta lebih dari seribu emigran dari Britania Raya, Irlandia, Skandinavia, dan negara-negara lain yang mencari kehidupan baru di Amerika Utara. Kapal ini dirancang senyaman dan semewah mungkin, dengan dilengkapi gimnasium, kolam renang, perpustakaan, restoran kelas atas dan kabin mewah. Kapal ini juga memiliki telegraf nirkabel mutakhir yang dioperasikan untuk keperluan penumpang dan operasional kapal. Meski Titanic mempunyai perlengkapan keamanan yang maju seperti kompartemen kedap air dan pintu kedap air yang bisa dioperasikan dari jarak jauh, kapal tersebut tidak memiliki sekoci yang cukup untuk menampung seluruh penumpang kapal. Karena regulasi keamanan laut yang sudah kuno, Titanic hanya mengangkut sekoci yang hanya mampu menampung 1.178 penumpang – sepertiga dari total penumpang dan awak kapalnya.

Setelah meninggalkan Southampton pada 10 April 1912, Titanic berhenti di Cherbourg, Prancis dan Queenstown (sekarang Cobh), Irlandia sebelum berlayar ke barat menuju New York. Pada tanggal 14 April 1912, empat hari pasca pelayaran, tepatnya 375 mil di selatan Newfoundland, kapal menabrak sebuah gunung es pukul 23:40 (waktu kapal; UTC-3). Tabrakan agak menggesek ini mengakibatkan pelat lambung Titanic melengkung ke dalam di sejumlah tempat di sisi kanan kapal dan mengoyak lima dari enam belas kompartemen kedap airnya. Selama dua setengah jam selanjutnya, kapal perlahan terisi air dan tenggelam. Para penumpang dan sejumlah awak kapal diungsikan ke dalam sekoci, kebanyakan sudah diluncurkan dalam keadaan setengah penuh. Banyak pria dalam jumlah yang tidak sepadan – hampir 90% di Kelas Dua - ditinggalkan karena para petugas yang memuat sekoci mematuhi protokol “wanita dan anak-anak dahulu”. Tepat sebelum pukul 2:20, Titanic patah dan haluannya tenggelam bersama seribu penumpang di dalamnya. Orang-orang di air meninggal dalam hitungan menit akibat hipotermia karena bersentuhan dengan samudra yang sangat dingin.710 penumpang selamat diangkat dari sekoci oleh RMS Carpathia beberapa jam kemudian.

Musibah ini ditanggapi dengan keterkejutan dan kemarahan dunia atas jumlah korban yang besar dan kegagalan regulasi dan operasi yang terjadi serta sekoci dan alat kelengkapan penyelamatan lainnya yang tidak memadai. Penyelidikan publik di Britania dan Amerika Serikat mendorong perbaikan besar-besaran keselamatan laut. Salah satu warisan terpenting dari bencana ini adalah penetapan Konvensi Internasional untuk Keselamatan Penumpang di Laut (SOLAS), yang masih mengatur keselamatan laut sampai sekarang. Banyak korban selamat kehilangan seluruh kekayaan dan harta benda mereka dan menjadi miskin; banyak keluarga, terutama keluarga awak kapal dari Southampton, kehilangan sumber nafkah utamanya. Mereka semua dibantu oleh banjirnya simpati dan sumbangan amal dari masyarakat. Beberapa pria yang selamat, terutama kepala White Star Line, J. Bruce Ismay, dicela sebagai pengecut karena meninggalkan kapal ketika penumpang lain masih di atasnya, dan mereka diasingkan oleh publik.

Bangkai Titanic masih ada di dasar laut, perlahan hancur di kedalaman 12.415 kaki (3.784 m). Sejak ditemukan kembali pada tahun 1985, ribuan artefak diangkat dari dasar laut dan dipamerkan di berbagai museum di seluruh dunia. Titanic telah menjadi salah satu kapal ternama dalam sejarah. Keberadaannya terus diingat oleh sejumlah buku, film, pameran, dan tugu peringatan.

1.1 .Kamus Data

1.2 Ragam Data

2 .Eksplorasi Data

  • “Install Packages”
library(readr)
library(ggplot2)
library(scales)
## 
## Attaching package: 'scales'
## The following object is masked from 'package:readr':
## 
##     col_factor
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(skimr)
library(tidyr)
library(purrr)
## 
## Attaching package: 'purrr'
## The following object is masked from 'package:scales':
## 
##     discard
library(tibble)
library(stringr)

2.1 “Pemanggilan Data”

Nama data frame “train”

train <- read_csv("train.csv")
## Rows: 891 Columns: 12
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (5): Name, Sex, Ticket, Cabin, Embarked
## dbl (7): PassengerId, Survived, Pclass, Age, SibSp, Parch, Fare
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.

Menampilkan data

  • Menampilkan 5 data teratas
head(train)
## # A tibble: 6 × 12
##   PassengerId Survived Pclass Name    Sex     Age SibSp Parch Ticket  Fare Cabin
##         <dbl>    <dbl>  <dbl> <chr>   <chr> <dbl> <dbl> <dbl> <chr>  <dbl> <chr>
## 1           1        0      3 Braund… male     22     1     0 A/5 2…  7.25 <NA> 
## 2           2        1      1 Cuming… fema…    38     1     0 PC 17… 71.3  C85  
## 3           3        1      3 Heikki… fema…    26     0     0 STON/…  7.92 <NA> 
## 4           4        1      1 Futrel… fema…    35     1     0 113803 53.1  C123 
## 5           5        0      3 Allen,… male     35     0     0 373450  8.05 <NA> 
## 6           6        0      3 Moran,… male     NA     0     0 330877  8.46 <NA> 
## # … with 1 more variable: Embarked <chr>
  • Menampilkan 5 data terbawah
tail(train)
## # A tibble: 6 × 12
##   PassengerId Survived Pclass Name    Sex     Age SibSp Parch Ticket  Fare Cabin
##         <dbl>    <dbl>  <dbl> <chr>   <chr> <dbl> <dbl> <dbl> <chr>  <dbl> <chr>
## 1         886        0      3 "Rice,… fema…    39     0     5 382652 29.1  <NA> 
## 2         887        0      2 "Montv… male     27     0     0 211536 13    <NA> 
## 3         888        1      1 "Graha… fema…    19     0     0 112053 30    B42  
## 4         889        0      3 "Johns… fema…    NA     1     2 W./C.… 23.4  <NA> 
## 5         890        1      1 "Behr,… male     26     0     0 111369 30    C148 
## 6         891        0      3 "Doole… male     32     0     0 370376  7.75 <NA> 
## # … with 1 more variable: Embarked <chr>

2.2 “Inspeksi Data”

Cek Data Dapat dilakukan dengan beberapa cara berikut ini :

# fungsi "getwd()" mengetahui letak direktori data.
# getwd()
# Fungsi "str(train)" untuk dapat melihat secara keseluruhan struktur data
# meliputi tipe data,  nama kolom, serta banyak kolom dan baris :
str(train)
## spec_tbl_df [891 × 12] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ PassengerId: num [1:891] 1 2 3 4 5 6 7 8 9 10 ...
##  $ Survived   : num [1:891] 0 1 1 1 0 0 0 0 1 1 ...
##  $ Pclass     : num [1:891] 3 1 3 1 3 3 1 3 3 2 ...
##  $ Name       : chr [1:891] "Braund, Mr. Owen Harris" "Cumings, Mrs. John Bradley (Florence Briggs Thayer)" "Heikkinen, Miss. Laina" "Futrelle, Mrs. Jacques Heath (Lily May Peel)" ...
##  $ Sex        : chr [1:891] "male" "female" "female" "female" ...
##  $ Age        : num [1:891] 22 38 26 35 35 NA 54 2 27 14 ...
##  $ SibSp      : num [1:891] 1 1 0 1 0 0 0 3 0 1 ...
##  $ Parch      : num [1:891] 0 0 0 0 0 0 0 1 2 0 ...
##  $ Ticket     : chr [1:891] "A/5 21171" "PC 17599" "STON/O2. 3101282" "113803" ...
##  $ Fare       : num [1:891] 7.25 71.28 7.92 53.1 8.05 ...
##  $ Cabin      : chr [1:891] NA "C85" NA "C123" ...
##  $ Embarked   : chr [1:891] "S" "C" "S" "S" ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   PassengerId = col_double(),
##   ..   Survived = col_double(),
##   ..   Pclass = col_double(),
##   ..   Name = col_character(),
##   ..   Sex = col_character(),
##   ..   Age = col_double(),
##   ..   SibSp = col_double(),
##   ..   Parch = col_double(),
##   ..   Ticket = col_character(),
##   ..   Fare = col_double(),
##   ..   Cabin = col_character(),
##   ..   Embarked = col_character()
##   .. )
##  - attr(*, "problems")=<externalptr>
# Fungsi "summary(train)" untuk dapat mengetahui nilai data,
# meliputi panjang row, tipe data, nilai mean, median, min dan max : 
summary_train <-  summary(train)
summary_train
##   PassengerId       Survived          Pclass          Name          
##  Min.   :  1.0   Min.   :0.0000   Min.   :1.000   Length:891        
##  1st Qu.:223.5   1st Qu.:0.0000   1st Qu.:2.000   Class :character  
##  Median :446.0   Median :0.0000   Median :3.000   Mode  :character  
##  Mean   :446.0   Mean   :0.3838   Mean   :2.309                     
##  3rd Qu.:668.5   3rd Qu.:1.0000   3rd Qu.:3.000                     
##  Max.   :891.0   Max.   :1.0000   Max.   :3.000                     
##                                                                     
##      Sex                 Age            SibSp           Parch       
##  Length:891         Min.   : 0.42   Min.   :0.000   Min.   :0.0000  
##  Class :character   1st Qu.:20.12   1st Qu.:0.000   1st Qu.:0.0000  
##  Mode  :character   Median :28.00   Median :0.000   Median :0.0000  
##                     Mean   :29.70   Mean   :0.523   Mean   :0.3816  
##                     3rd Qu.:38.00   3rd Qu.:1.000   3rd Qu.:0.0000  
##                     Max.   :80.00   Max.   :8.000   Max.   :6.0000  
##                     NA's   :177                                     
##     Ticket               Fare           Cabin             Embarked        
##  Length:891         Min.   :  0.00   Length:891         Length:891        
##  Class :character   1st Qu.:  7.91   Class :character   Class :character  
##  Mode  :character   Median : 14.45   Mode  :character   Mode  :character  
##                     Mean   : 32.20                                        
##                     3rd Qu.: 31.00                                        
##                     Max.   :512.33                                        
## 
  • “Melihat Dimensi Data”
# Fungsi "dim(train)" untuk melihat dimensi suatu data :
dim(train)
## [1] 891  12
# Fungsi "names(train)" untuk menampilkan ragam kolom pada data :
names(train)
##  [1] "PassengerId" "Survived"    "Pclass"      "Name"        "Sex"        
##  [6] "Age"         "SibSp"       "Parch"       "Ticket"      "Fare"       
## [11] "Cabin"       "Embarked"
  • Melakukan cek baris dan kolom dapat menggunakan cara berikut : "nrow = baris & ncol = colom"
# Fungsi "nrow(train)" untuk menampilkan jumlah baris pada data,
# Fungsi "ncol(train)" untuk menampilkan jumlah kolom pada data.
nrow(train)
## [1] 891
ncol(train)
## [1] 12
  • Code mengetahui panjang data dan banyaknya unik data
# Gunakan fungsi "unique" untuk mengetahui unik data :
unique(train$Pclass)
## [1] 3 1 2
# Gunakan fungi "length" untuk mengetahui jumlah seluruh unik data,
# Gunakan fungi "length+unique" untuk mengetahui banyaknya unik data.
length(train$PassengerId)
## [1] 891
length(unique(train$PassengerId))
## [1] 891
length(train$Survived)
## [1] 891
length(unique(train$Survived))
## [1] 2
length(train$Pclass)
## [1] 891
length(unique(train$Pclass))
## [1] 3
length(train$Name)
## [1] 891
length(unique(train$Name))
## [1] 891
length(train$Sex)
## [1] 891
length(unique(train$Sex))
## [1] 2
length(train$Age)
## [1] 891
length(unique(train$Age))
## [1] 89
length(train$SibSp)
## [1] 891
length(unique(train$SibSp))
## [1] 7
length(train$Parch)
## [1] 891
length(unique(train$Parch))
## [1] 7
length(train$Ticket)
## [1] 891
length(unique(train$Ticket))
## [1] 681
length(train$Fare)
## [1] 891
length(unique(train$Fare))
## [1] 248
length(train$Cabin)
## [1] 891
length(unique(train$Cabin))
## [1] 148
length(train$Embarked)
## [1] 891
length(unique(train$Embarked))
## [1] 4

3 .Proses & Visualisasi Data

3.1 “Nilai Hilang (N/A)

  • Cek Data Hilang
# Fungsi "anyNA(train)"
# untuk cek adanya "missing value" pada data :
anyNA(train)
## [1] TRUE
# Fungsi "colSums(is.na(train))"
# Cek jumlah data yang hilang berdasarkan "N/A"
colSums(is.na(train))
## PassengerId    Survived      Pclass        Name         Sex         Age 
##           0           0           0           0           0         177 
##       SibSp       Parch      Ticket        Fare       Cabin    Embarked 
##           0           0           0           0         687           2
  • “Menampilkan Data Yang Hilang”
# Fungsi "train[!complete.cases(train),]" Menampilkan data yang hilang,
# ditunjukan dengan nilai "NA" pada setiap baris dari kolom :
train[!complete.cases(train),]
## # A tibble: 708 × 12
##    PassengerId Survived Pclass Name   Sex     Age SibSp Parch Ticket  Fare Cabin
##          <dbl>    <dbl>  <dbl> <chr>  <chr> <dbl> <dbl> <dbl> <chr>  <dbl> <chr>
##  1           1        0      3 Braun… male     22     1     0 A/5 2…  7.25 <NA> 
##  2           3        1      3 Heikk… fema…    26     0     0 STON/…  7.92 <NA> 
##  3           5        0      3 Allen… male     35     0     0 373450  8.05 <NA> 
##  4           6        0      3 Moran… male     NA     0     0 330877  8.46 <NA> 
##  5           8        0      3 Palss… male      2     3     1 349909 21.1  <NA> 
##  6           9        1      3 Johns… fema…    27     0     2 347742 11.1  <NA> 
##  7          10        1      2 Nasse… fema…    14     1     0 237736 30.1  <NA> 
##  8          13        0      3 Saund… male     20     0     0 A/5. …  8.05 <NA> 
##  9          14        0      3 Ander… male     39     1     5 347082 31.3  <NA> 
## 10          15        0      3 Vestr… fema…    14     0     0 350406  7.85 <NA> 
## # … with 698 more rows, and 1 more variable: Embarked <chr>
  • “Perubahan Data Sesuai Kebutuhan”
# Fungsi "mean(train$Age, na.rm = TRUE)" Mengisi data yang hilang (N/A),
# dengan nilai rata rata pada kolom "Age" :
train$Age[is.na(train$Age)] <- mean(train$Age, na.rm = TRUE)
# Lakukan pemanggilan data train$Age untuk dapat memastikan data N/A sudah terisi dengan nilai mean :
train$Age
##   [1] 22.00000 38.00000 26.00000 35.00000 35.00000 29.69912 54.00000  2.00000
##   [9] 27.00000 14.00000  4.00000 58.00000 20.00000 39.00000 14.00000 55.00000
##  [17]  2.00000 29.69912 31.00000 29.69912 35.00000 34.00000 15.00000 28.00000
##  [25]  8.00000 38.00000 29.69912 19.00000 29.69912 29.69912 40.00000 29.69912
##  [33] 29.69912 66.00000 28.00000 42.00000 29.69912 21.00000 18.00000 14.00000
##  [41] 40.00000 27.00000 29.69912  3.00000 19.00000 29.69912 29.69912 29.69912
##  [49] 29.69912 18.00000  7.00000 21.00000 49.00000 29.00000 65.00000 29.69912
##  [57] 21.00000 28.50000  5.00000 11.00000 22.00000 38.00000 45.00000  4.00000
##  [65] 29.69912 29.69912 29.00000 19.00000 17.00000 26.00000 32.00000 16.00000
##  [73] 21.00000 26.00000 32.00000 25.00000 29.69912 29.69912  0.83000 30.00000
##  [81] 22.00000 29.00000 29.69912 28.00000 17.00000 33.00000 16.00000 29.69912
##  [89] 23.00000 24.00000 29.00000 20.00000 46.00000 26.00000 59.00000 29.69912
##  [97] 71.00000 23.00000 34.00000 34.00000 28.00000 29.69912 21.00000 33.00000
## [105] 37.00000 28.00000 21.00000 29.69912 38.00000 29.69912 47.00000 14.50000
## [113] 22.00000 20.00000 17.00000 21.00000 70.50000 29.00000 24.00000  2.00000
## [121] 21.00000 29.69912 32.50000 32.50000 54.00000 12.00000 29.69912 24.00000
## [129] 29.69912 45.00000 33.00000 20.00000 47.00000 29.00000 25.00000 23.00000
## [137] 19.00000 37.00000 16.00000 24.00000 29.69912 22.00000 24.00000 19.00000
## [145] 18.00000 19.00000 27.00000  9.00000 36.50000 42.00000 51.00000 22.00000
## [153] 55.50000 40.50000 29.69912 51.00000 16.00000 30.00000 29.69912 29.69912
## [161] 44.00000 40.00000 26.00000 17.00000  1.00000  9.00000 29.69912 45.00000
## [169] 29.69912 28.00000 61.00000  4.00000  1.00000 21.00000 56.00000 18.00000
## [177] 29.69912 50.00000 30.00000 36.00000 29.69912 29.69912  9.00000  1.00000
## [185]  4.00000 29.69912 29.69912 45.00000 40.00000 36.00000 32.00000 19.00000
## [193] 19.00000  3.00000 44.00000 58.00000 29.69912 42.00000 29.69912 24.00000
## [201] 28.00000 29.69912 34.00000 45.50000 18.00000  2.00000 32.00000 26.00000
## [209] 16.00000 40.00000 24.00000 35.00000 22.00000 30.00000 29.69912 31.00000
## [217] 27.00000 42.00000 32.00000 30.00000 16.00000 27.00000 51.00000 29.69912
## [225] 38.00000 22.00000 19.00000 20.50000 18.00000 29.69912 35.00000 29.00000
## [233] 59.00000  5.00000 24.00000 29.69912 44.00000  8.00000 19.00000 33.00000
## [241] 29.69912 29.69912 29.00000 22.00000 30.00000 44.00000 25.00000 24.00000
## [249] 37.00000 54.00000 29.69912 29.00000 62.00000 30.00000 41.00000 29.00000
## [257] 29.69912 30.00000 35.00000 50.00000 29.69912  3.00000 52.00000 40.00000
## [265] 29.69912 36.00000 16.00000 25.00000 58.00000 35.00000 29.69912 25.00000
## [273] 41.00000 37.00000 29.69912 63.00000 45.00000 29.69912  7.00000 35.00000
## [281] 65.00000 28.00000 16.00000 19.00000 29.69912 33.00000 30.00000 22.00000
## [289] 42.00000 22.00000 26.00000 19.00000 36.00000 24.00000 24.00000 29.69912
## [297] 23.50000  2.00000 29.69912 50.00000 29.69912 29.69912 19.00000 29.69912
## [305] 29.69912  0.92000 29.69912 17.00000 30.00000 30.00000 24.00000 18.00000
## [313] 26.00000 28.00000 43.00000 26.00000 24.00000 54.00000 31.00000 40.00000
## [321] 22.00000 27.00000 30.00000 22.00000 29.69912 36.00000 61.00000 36.00000
## [329] 31.00000 16.00000 29.69912 45.50000 38.00000 16.00000 29.69912 29.69912
## [337] 29.00000 41.00000 45.00000 45.00000  2.00000 24.00000 28.00000 25.00000
## [345] 36.00000 24.00000 40.00000 29.69912  3.00000 42.00000 23.00000 29.69912
## [353] 15.00000 25.00000 29.69912 28.00000 22.00000 38.00000 29.69912 29.69912
## [361] 40.00000 29.00000 45.00000 35.00000 29.69912 30.00000 60.00000 29.69912
## [369] 29.69912 24.00000 25.00000 18.00000 19.00000 22.00000  3.00000 29.69912
## [377] 22.00000 27.00000 20.00000 19.00000 42.00000  1.00000 32.00000 35.00000
## [385] 29.69912 18.00000  1.00000 36.00000 29.69912 17.00000 36.00000 21.00000
## [393] 28.00000 23.00000 24.00000 22.00000 31.00000 46.00000 23.00000 28.00000
## [401] 39.00000 26.00000 21.00000 28.00000 20.00000 34.00000 51.00000  3.00000
## [409] 21.00000 29.69912 29.69912 29.69912 33.00000 29.69912 44.00000 29.69912
## [417] 34.00000 18.00000 30.00000 10.00000 29.69912 21.00000 29.00000 28.00000
## [425] 18.00000 29.69912 28.00000 19.00000 29.69912 32.00000 28.00000 29.69912
## [433] 42.00000 17.00000 50.00000 14.00000 21.00000 24.00000 64.00000 31.00000
## [441] 45.00000 20.00000 25.00000 28.00000 29.69912  4.00000 13.00000 34.00000
## [449]  5.00000 52.00000 36.00000 29.69912 30.00000 49.00000 29.69912 29.00000
## [457] 65.00000 29.69912 50.00000 29.69912 48.00000 34.00000 47.00000 48.00000
## [465] 29.69912 38.00000 29.69912 56.00000 29.69912  0.75000 29.69912 38.00000
## [473] 33.00000 23.00000 22.00000 29.69912 34.00000 29.00000 22.00000  2.00000
## [481]  9.00000 29.69912 50.00000 63.00000 25.00000 29.69912 35.00000 58.00000
## [489] 30.00000  9.00000 29.69912 21.00000 55.00000 71.00000 21.00000 29.69912
## [497] 54.00000 29.69912 25.00000 24.00000 17.00000 21.00000 29.69912 37.00000
## [505] 16.00000 18.00000 33.00000 29.69912 28.00000 26.00000 29.00000 29.69912
## [513] 36.00000 54.00000 24.00000 47.00000 34.00000 29.69912 36.00000 32.00000
## [521] 30.00000 22.00000 29.69912 44.00000 29.69912 40.50000 50.00000 29.69912
## [529] 39.00000 23.00000  2.00000 29.69912 17.00000 29.69912 30.00000  7.00000
## [537] 45.00000 30.00000 29.69912 22.00000 36.00000  9.00000 11.00000 32.00000
## [545] 50.00000 64.00000 19.00000 29.69912 33.00000  8.00000 17.00000 27.00000
## [553] 29.69912 22.00000 22.00000 62.00000 48.00000 29.69912 39.00000 36.00000
## [561] 29.69912 40.00000 28.00000 29.69912 29.69912 24.00000 19.00000 29.00000
## [569] 29.69912 32.00000 62.00000 53.00000 36.00000 29.69912 16.00000 19.00000
## [577] 34.00000 39.00000 29.69912 32.00000 25.00000 39.00000 54.00000 36.00000
## [585] 29.69912 18.00000 47.00000 60.00000 22.00000 29.69912 35.00000 52.00000
## [593] 47.00000 29.69912 37.00000 36.00000 29.69912 49.00000 29.69912 49.00000
## [601] 24.00000 29.69912 29.69912 44.00000 35.00000 36.00000 30.00000 27.00000
## [609] 22.00000 40.00000 39.00000 29.69912 29.69912 29.69912 35.00000 24.00000
## [617] 34.00000 26.00000  4.00000 26.00000 27.00000 42.00000 20.00000 21.00000
## [625] 21.00000 61.00000 57.00000 21.00000 26.00000 29.69912 80.00000 51.00000
## [633] 32.00000 29.69912  9.00000 28.00000 32.00000 31.00000 41.00000 29.69912
## [641] 20.00000 24.00000  2.00000 29.69912  0.75000 48.00000 19.00000 56.00000
## [649] 29.69912 23.00000 29.69912 18.00000 21.00000 29.69912 18.00000 24.00000
## [657] 29.69912 32.00000 23.00000 58.00000 50.00000 40.00000 47.00000 36.00000
## [665] 20.00000 32.00000 25.00000 29.69912 43.00000 29.69912 40.00000 31.00000
## [673] 70.00000 31.00000 29.69912 18.00000 24.50000 18.00000 43.00000 36.00000
## [681] 29.69912 27.00000 20.00000 14.00000 60.00000 25.00000 14.00000 19.00000
## [689] 18.00000 15.00000 31.00000  4.00000 29.69912 25.00000 60.00000 52.00000
## [697] 44.00000 29.69912 49.00000 42.00000 18.00000 35.00000 18.00000 25.00000
## [705] 26.00000 39.00000 45.00000 42.00000 22.00000 29.69912 24.00000 29.69912
## [713] 48.00000 29.00000 52.00000 19.00000 38.00000 27.00000 29.69912 33.00000
## [721]  6.00000 17.00000 34.00000 50.00000 27.00000 20.00000 30.00000 29.69912
## [729] 25.00000 25.00000 29.00000 11.00000 29.69912 23.00000 23.00000 28.50000
## [737] 48.00000 35.00000 29.69912 29.69912 29.69912 36.00000 21.00000 24.00000
## [745] 31.00000 70.00000 16.00000 30.00000 19.00000 31.00000  4.00000  6.00000
## [753] 33.00000 23.00000 48.00000  0.67000 28.00000 18.00000 34.00000 33.00000
## [761] 29.69912 41.00000 20.00000 36.00000 16.00000 51.00000 29.69912 30.50000
## [769] 29.69912 32.00000 24.00000 48.00000 57.00000 29.69912 54.00000 18.00000
## [777] 29.69912  5.00000 29.69912 43.00000 13.00000 17.00000 29.00000 29.69912
## [785] 25.00000 25.00000 18.00000  8.00000  1.00000 46.00000 29.69912 16.00000
## [793] 29.69912 29.69912 25.00000 39.00000 49.00000 31.00000 30.00000 30.00000
## [801] 34.00000 31.00000 11.00000  0.42000 27.00000 31.00000 39.00000 18.00000
## [809] 39.00000 33.00000 26.00000 39.00000 35.00000  6.00000 30.50000 29.69912
## [817] 23.00000 31.00000 43.00000 10.00000 52.00000 27.00000 38.00000 27.00000
## [825]  2.00000 29.69912 29.69912  1.00000 29.69912 62.00000 15.00000  0.83000
## [833] 29.69912 23.00000 18.00000 39.00000 21.00000 29.69912 32.00000 29.69912
## [841] 20.00000 16.00000 30.00000 34.50000 17.00000 42.00000 29.69912 35.00000
## [849] 28.00000 29.69912  4.00000 74.00000  9.00000 16.00000 44.00000 18.00000
## [857] 45.00000 51.00000 24.00000 29.69912 41.00000 21.00000 48.00000 29.69912
## [865] 24.00000 42.00000 27.00000 31.00000 29.69912  4.00000 26.00000 47.00000
## [873] 33.00000 47.00000 28.00000 15.00000 20.00000 19.00000 29.69912 56.00000
## [881] 25.00000 33.00000 22.00000 28.00000 25.00000 39.00000 27.00000 19.00000
## [889] 29.69912 26.00000 32.00000
  • Menambahkan Kolom ” FamilyMembers & Survived1 ”
# Fungsi "train$Survived1 <-  train$Survived" 
# menambahkan kolom bernama "Survived1" :
train$Survived1 <-  train$Survived

# Cek kolom yang ditambahkan dengan
# pemanggilan data "train"
train
## # A tibble: 891 × 13
##    PassengerId Survived Pclass Name   Sex     Age SibSp Parch Ticket  Fare Cabin
##          <dbl>    <dbl>  <dbl> <chr>  <chr> <dbl> <dbl> <dbl> <chr>  <dbl> <chr>
##  1           1        0      3 Braun… male   22       1     0 A/5 2…  7.25 <NA> 
##  2           2        1      1 Cumin… fema…  38       1     0 PC 17… 71.3  C85  
##  3           3        1      3 Heikk… fema…  26       0     0 STON/…  7.92 <NA> 
##  4           4        1      1 Futre… fema…  35       1     0 113803 53.1  C123 
##  5           5        0      3 Allen… male   35       0     0 373450  8.05 <NA> 
##  6           6        0      3 Moran… male   29.7     0     0 330877  8.46 <NA> 
##  7           7        0      1 McCar… male   54       0     0 17463  51.9  E46  
##  8           8        0      3 Palss… male    2       3     1 349909 21.1  <NA> 
##  9           9        1      3 Johns… fema…  27       0     2 347742 11.1  <NA> 
## 10          10        1      2 Nasse… fema…  14       1     0 237736 30.1  <NA> 
## # … with 881 more rows, and 2 more variables: Embarked <chr>, Survived1 <dbl>
# Lakukan hal serupa untuk menambahkan kolom lainnya
# contoh : "FamilyMembers"
train$FamilyMembers <-  train$SibSp + train$Parch

# Cek kolom yang ditambahkan dengan
# pemanggilan data "train"
train
## # A tibble: 891 × 14
##    PassengerId Survived Pclass Name   Sex     Age SibSp Parch Ticket  Fare Cabin
##          <dbl>    <dbl>  <dbl> <chr>  <chr> <dbl> <dbl> <dbl> <chr>  <dbl> <chr>
##  1           1        0      3 Braun… male   22       1     0 A/5 2…  7.25 <NA> 
##  2           2        1      1 Cumin… fema…  38       1     0 PC 17… 71.3  C85  
##  3           3        1      3 Heikk… fema…  26       0     0 STON/…  7.92 <NA> 
##  4           4        1      1 Futre… fema…  35       1     0 113803 53.1  C123 
##  5           5        0      3 Allen… male   35       0     0 373450  8.05 <NA> 
##  6           6        0      3 Moran… male   29.7     0     0 330877  8.46 <NA> 
##  7           7        0      1 McCar… male   54       0     0 17463  51.9  E46  
##  8           8        0      3 Palss… male    2       3     1 349909 21.1  <NA> 
##  9           9        1      3 Johns… fema…  27       0     2 347742 11.1  <NA> 
## 10          10        1      2 Nasse… fema…  14       1     0 237736 30.1  <NA> 
## # … with 881 more rows, and 3 more variables: Embarked <chr>, Survived1 <dbl>,
## #   FamilyMembers <dbl>
# Mengubah data dari setiap baris sesuai unik data pada kolom, ubah nama sesuai kebutuhan anda.
train$Embarked <- recode(train$Embarked,
                  "C" = "Cherbourg", "Q" = "Queenstown", S = "Southmapton")
train$Pclass <-  recode(train$Pclass, "1" = "Upper", "2" = "Middle", "3" = "Lower")
train$Survived <-  recode(train$Survived, "0" = "Dead", "1" = "Alive")
# Mengisi data yang hilang (N/A) dengan "Character"
train$Cabin[is.na(train$Cabin)] = "unknow"
train$Embarked[is.na(train$Embarked)] = "unknow"
  • Pastikan kembali data “N/A” sudah terisi sesuai kebutuhan
train
## # A tibble: 891 × 14
##    PassengerId Survived Pclass Name   Sex     Age SibSp Parch Ticket  Fare Cabin
##          <dbl> <chr>    <chr>  <chr>  <chr> <dbl> <dbl> <dbl> <chr>  <dbl> <chr>
##  1           1 Dead     Lower  Braun… male   22       1     0 A/5 2…  7.25 unkn…
##  2           2 Alive    Upper  Cumin… fema…  38       1     0 PC 17… 71.3  C85  
##  3           3 Alive    Lower  Heikk… fema…  26       0     0 STON/…  7.92 unkn…
##  4           4 Alive    Upper  Futre… fema…  35       1     0 113803 53.1  C123 
##  5           5 Dead     Lower  Allen… male   35       0     0 373450  8.05 unkn…
##  6           6 Dead     Lower  Moran… male   29.7     0     0 330877  8.46 unkn…
##  7           7 Dead     Upper  McCar… male   54       0     0 17463  51.9  E46  
##  8           8 Dead     Lower  Palss… male    2       3     1 349909 21.1  unkn…
##  9           9 Alive    Lower  Johns… fema…  27       0     2 347742 11.1  unkn…
## 10          10 Alive    Middle Nasse… fema…  14       1     0 237736 30.1  unkn…
## # … with 881 more rows, and 3 more variables: Embarked <chr>, Survived1 <dbl>,
## #   FamilyMembers <dbl>
  • Pastikan kembali data “N/A” sudah tidak ada atau “0”
colSums(is.na(train))
##   PassengerId      Survived        Pclass          Name           Sex 
##             0             0             0             0             0 
##           Age         SibSp         Parch        Ticket          Fare 
##             0             0             0             0             0 
##         Cabin      Embarked     Survived1 FamilyMembers 
##             0             0             0             0

3.2 “Penyesuaian Tipe Data”

Penyesuaian Tipe Data, Sesuaikan Tipe Data Sesuai Kebutuhan

# Gunakan subset untuk mengelompokan kolom :
traininteger <-
  train[,c("SibSp", "Parch", "Survived1")]
trainnumeric <-
  train[,c("Age" ,"Fare")]
trainkategori <-
  train[,c("Pclass", "Cabin", "Survived", "Ticket", "Embarked", "Sex")]
# Fungsi "lapply" untuk mengubah tipe data lebih dari satu :
traininteger <-
  lapply(train[,c("SibSp", "Parch", "Survived1")], as.integer)
trainnumeric <-
  lapply(train[,c("Age" ,"Fare")], as.numeric)
trainkategori <-
  lapply(train[,c("Pclass", "Cabin", "Survived", "Ticket", "Embarked", "Sex")]
               , as.factor)

str(train)
## spec_tbl_df [891 × 14] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ PassengerId  : num [1:891] 1 2 3 4 5 6 7 8 9 10 ...
##  $ Survived     : chr [1:891] "Dead" "Alive" "Alive" "Alive" ...
##  $ Pclass       : chr [1:891] "Lower" "Upper" "Lower" "Upper" ...
##  $ Name         : chr [1:891] "Braund, Mr. Owen Harris" "Cumings, Mrs. John Bradley (Florence Briggs Thayer)" "Heikkinen, Miss. Laina" "Futrelle, Mrs. Jacques Heath (Lily May Peel)" ...
##  $ Sex          : chr [1:891] "male" "female" "female" "female" ...
##  $ Age          : num [1:891] 22 38 26 35 35 ...
##  $ SibSp        : num [1:891] 1 1 0 1 0 0 0 3 0 1 ...
##  $ Parch        : num [1:891] 0 0 0 0 0 0 0 1 2 0 ...
##  $ Ticket       : chr [1:891] "A/5 21171" "PC 17599" "STON/O2. 3101282" "113803" ...
##  $ Fare         : num [1:891] 7.25 71.28 7.92 53.1 8.05 ...
##  $ Cabin        : chr [1:891] "unknow" "C85" "unknow" "C123" ...
##  $ Embarked     : chr [1:891] "Southmapton" "Cherbourg" "Southmapton" "Southmapton" ...
##  $ Survived1    : num [1:891] 0 1 1 1 0 0 0 0 1 1 ...
##  $ FamilyMembers: num [1:891] 1 1 0 1 0 0 0 4 2 1 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   PassengerId = col_double(),
##   ..   Survived = col_double(),
##   ..   Pclass = col_double(),
##   ..   Name = col_character(),
##   ..   Sex = col_character(),
##   ..   Age = col_double(),
##   ..   SibSp = col_double(),
##   ..   Parch = col_double(),
##   ..   Ticket = col_character(),
##   ..   Fare = col_double(),
##   ..   Cabin = col_character(),
##   ..   Embarked = col_character()
##   .. )
##  - attr(*, "problems")=<externalptr>

3.3 “Proses Pengolahan Data”

# Fungsi "range" mengetahui jarak nilai Terendah sampai tertinggi pada data
# sehingga dapat mengetahui selisih jarak antara nilai :
range(train$Age)
## [1]  0.42 80.00
range(train$SibSp)
## [1] 0 8
range(train$Parch)
## [1] 0 6
# Mencari nilai rata rata (mean) dari kolom "Age"
mean(train$Age)
## [1] 29.69912
# Mencari nilai rata rata (mean) dari kolom "Age" dengan nilai pembulatan
round(mean(train$Age))
## [1] 30
# Mencari nilai rata rata (mean) dari kolom "SibSp"
mean(train$SibSp)
## [1] 0.5230079
# Mencari nilai rata rata (median) dari kolom "SibSp"
median(train$SibSp)
## [1] 0
# Mencari nilai rata rata (mean) dari kolom "SibSp" dengan nilai pembulatan
round(mean(train$SibSp))
## [1] 1
# Mengetahui jumlah banyaknya Saudara pada kolom SibSp
sum(train$SibSp)
## [1] 466
# Mengetahui nilai maksimum dari setiap baris pada kolom SibSp
max(train$SibSp)
## [1] 8
# Mengetahui nilai minimum dari setiap baris pada kolom SibSp
min(train$SibSp)
## [1] 0
# Mencari nilai rata rata (mean) dari kolom "Parch"
mean(train$Parch)
## [1] 0.3815937
# Mencari nilai rata rata (median) dari kolom "Parch"
median(train$Parch)
## [1] 0
# Mencari nilai rata rata (mean) dari kolom "Parch" dengan nilai pembulatan
round(mean(train$Parch))
## [1] 0
# Mengetahui jumlah banyaknya Saudara pada kolom Parch
sum(train$Parch)
## [1] 340
# Mengetahui nilai maksimum dari setiap baris pada kolom Parch
max(train$Parch)
## [1] 6
# Mengetahui nilai minimum dari setiap baris pada kolom Parch
min(train$Parch)
## [1] 0
# Menggunakan fungsi aggragate untuk mengatuhi rata-rata tingkat kematian berdasarkan umur
aggregate(Age~Survived, train, mean)
##   Survived      Age
## 1    Alive 28.54978
## 2     Dead 30.41510
# Output data diatas adalah 
# Dead dengan rata-rata 30,4 Tahun, Alive dengan rata-rata 28,5 Tahun.

3.4 “Proses Data & Visualisasi”

hist(train$Age, main = "Persebaran Data Age",
     xlab = "Umur Penumpang",
     ylab = "Jumlah Penumpang", col = "#f8dfa7")
abline(v = min(train$Age), col = "red")
abline(v = max(train$Age), col = "blue")
abline(v = median(train$Age), col = "green")

hist(train$SibSp, main = "Persebaran Data Saudara",
     xlab = "Saudara",
     ylab = "Jumlah Penumpang", col = "#f8dfa7")
abline(v = min(train$SibSp), col = "red")
abline(v = max(train$SibSp), col = "blue")
abline(v = median(train$SibSp), col = "green")

hist(train$Parch, main = "Persebaran Data Orang Tua & Anak-anak",
     xlab = "Orang Tua & Anak-anak",
     ylab = "Jumlah Penumpang", col = "#f8dfa7")
abline(v = min(train$Parch), col = "red")
abline(v = max(train$Parch), col = "blue")
abline(v = median(train$Parch), col = "green")

str(train)
## spec_tbl_df [891 × 14] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ PassengerId  : num [1:891] 1 2 3 4 5 6 7 8 9 10 ...
##  $ Survived     : chr [1:891] "Dead" "Alive" "Alive" "Alive" ...
##  $ Pclass       : chr [1:891] "Lower" "Upper" "Lower" "Upper" ...
##  $ Name         : chr [1:891] "Braund, Mr. Owen Harris" "Cumings, Mrs. John Bradley (Florence Briggs Thayer)" "Heikkinen, Miss. Laina" "Futrelle, Mrs. Jacques Heath (Lily May Peel)" ...
##  $ Sex          : chr [1:891] "male" "female" "female" "female" ...
##  $ Age          : num [1:891] 22 38 26 35 35 ...
##  $ SibSp        : num [1:891] 1 1 0 1 0 0 0 3 0 1 ...
##  $ Parch        : num [1:891] 0 0 0 0 0 0 0 1 2 0 ...
##  $ Ticket       : chr [1:891] "A/5 21171" "PC 17599" "STON/O2. 3101282" "113803" ...
##  $ Fare         : num [1:891] 7.25 71.28 7.92 53.1 8.05 ...
##  $ Cabin        : chr [1:891] "unknow" "C85" "unknow" "C123" ...
##  $ Embarked     : chr [1:891] "Southmapton" "Cherbourg" "Southmapton" "Southmapton" ...
##  $ Survived1    : num [1:891] 0 1 1 1 0 0 0 0 1 1 ...
##  $ FamilyMembers: num [1:891] 1 1 0 1 0 0 0 4 2 1 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   PassengerId = col_double(),
##   ..   Survived = col_double(),
##   ..   Pclass = col_double(),
##   ..   Name = col_character(),
##   ..   Sex = col_character(),
##   ..   Age = col_double(),
##   ..   SibSp = col_double(),
##   ..   Parch = col_double(),
##   ..   Ticket = col_character(),
##   ..   Fare = col_double(),
##   ..   Cabin = col_character(),
##   ..   Embarked = col_character()
##   .. )
##  - attr(*, "problems")=<externalptr>
# Ranking berdasarkan banyaknya data pada kolom "Embarked" dengan menampilkan nama saja
names(sort(table(train$Embarked), decreasing = TRUE))
## [1] "Southmapton" "Cherbourg"   "Queenstown"  "unknow"
# Ranking berdasarkan banyaknya data pada "kolom" dengan menampilkan seluruh data
Embarked_rank <- sort(table(train$Embarked), decreasing = T)
Fare_rank <- sort(table( train$Fare), decreasing = T)
Parch_rank <- sort(table(train$Parch), decreasing = T)
SibSp_rank <- sort(table(train$SibSp), decreasing = T)
Age_rank <-  sort(table(train$Age), decreasing = T)
Sex_rank <- sort(table(train$Sex), decreasing = T)
Pclass_rank <- sort(table(train$Pclass), decreasing = T)
Survived_rank <- sort(table(train$Survived), decreasing = T)

Survived_rank
## 
##  Dead Alive 
##   549   342
# Melihat outlier pada kolom "Age"
boxplot(train$Age, main = "Boxplot Data Umur",
     xlab = "Rentang Umur", col = "#f8dfa7",
     horizontal = T)

# Melihat outlier pada kolom "SibSp"
boxplot(train$SibSp, main = "Boxplot Data Saudara",
     xlab = "Jumlah Saudara", col = "#f8dfa7",pch = 5,
     horizontal = T)

# Melihat outlier pada kolom "Parch"
boxplot(train$Parch, main = "Boxplot Data Orang Tua & Anak-anak",
     xlab = "Jumlah Orang Tua & Anak-anak", col = "#f8dfa7",pch = 8,
     horizontal = T)

Berdasarkan boxplot diatas dapat diketahui banyaknya persebaran data untuk :
Age : Adanya penumpang dengan rentang umur lansia berkisar 55 tahun sampai dengan 80 tahun
SibSp : Adanya penumpang yang membawa saudara
Parch : Adanya penumpang yang membawa Orang Tua & Anak-anak

Embarked_rank1 <- sort(table(train$Embarked), decreasing = F)
Fare_rank1 <- sort(table( train$Fare), decreasing = F)
Parch_rank1 <- sort(table(train$Parch), decreasing = F)
SibSp_rank1 <- sort(table(train$SibSp), decreasing = F)
Age_rank1 <-  sort(table(train$Age), decreasing = F)
Sex_rank1 <- sort(table(train$Sex), decreasing = F)
Pclass_rank1 <- sort(table(train$Pclass), decreasing = F)
barplot(sort(Survived_rank), main = "Data Hidup & Meninggal",
     xlab = "Jumlah Penumpang", xlim = c(0,600), col = "#F7290A", horiz = T)

Survived_rank
## 
##  Dead Alive 
##   549   342
barplot(Sex_rank1, main = "Data Hidup & Meninggal",
     xlab = "Jumlah Penumpang", xlim = c(0,600), col = "#F7290A", horiz = T)

Sex_rank
## 
##   male female 
##    577    314
barplot(Pclass_rank1, main = "Data Penumpang Berdasarkan Kelas",
     xlab = "Jumlah Penumpang", xlim = c(0,600), col = "#F7290A", horiz = T)

Pclass_rank
## 
##  Lower  Upper Middle 
##    491    216    184
ggplot(train, aes(Sex, fill = train$Survived)) +
  geom_bar(stat = "count", position = "dodge") +
  xlab("Jenis Kelamin")+
  ylab("Jumlah Penumpang")+
  scale_fill_discrete("Warna Indikator") + ggtitle("Data Penumpang Berdasarkan Kelamin")

# Memiliki hubungan korelasi yang lemah
cov(train$Age, train$SibSp)
## [1] -3.335345
cor(train$Age, train$SibSp)
## [1] -0.2326246
# Scatterplot Age - SibSp
plot(train$Age, train$SibSp)
abline(lm(train$SibSp ~ train$Age),
       col='red')

# Memiliki hubungan korelasi yang lemah
cov(train$Parch, train$SibSp)
## [1] 0.3687386
cor(train$Parch, train$SibSp)
## [1] 0.4148377
# Scatterplot Parch - SibSp
plot(train$Parch, train$SibSp)
abline(lm(train$SibSp ~ train$Parch),
       col = 'red')

# Memiliki hubungan korelasi yang lemah
cov(train$Parch, train$Age)
## [1] -1.877987
cor(train$Parch, train$Age)
## [1] -0.1791909
# Scatterplot Parch - Age
plot(train$Parch, train$Age)
abline(lm(train$Age ~ train$Parch),
       col = 'red')

Berdasarkan scaterplot diatas dapat disimpulkan bahwa korelasi dan kovariansi tidak berpengaruh dan variable yang digunakan tidak tepat

plot(aggregate(Survived1~Embarked + Pclass + Survived + SibSp + Age + Parch, train, max))

barplot(xtabs(train$Parch ~ Embarked + Sex, train))

barplot(xtabs(train$SibSp ~ Embarked + Sex, train))

barplot(xtabs(train$SibSp ~ Embarked + Pclass, train))

barplot(xtabs(train$Parch ~ Embarked + Pclass, train))

# Jumlah "Dead & Alive" berdasarkan "Pclass"
barplot(table(train$Survived1, train$Pclass))

4 . Wawasan Mendalam Titanic

Berdasarkan data yang kita olah dapat kita ketahui penumpang kapal titanic tergolong menjadi 3 kelas yaitu kelas “Atas”, “Menengah”, dan “Bawah”, berdasarkan jumlah penumpang didominasi oleh penumpang “kelas Bawah” dengan total penumpang sebanyak 491 sementara untuk “kelas menengah” berada di angka 216 dan “kelas Atas” 184. Banyaknya total kematian didominasi oleh penumpang dengan kelamin Laki-laki dibandingkan dengan Wanita, dikarenkan pada realita kejadian tenggelamnya Kapal Titanic pada proses pertolongan mengutamakan Penumpang dengan kelamin Wanita, Orang Tua/Lansia dan Anak-anak. dan korban terbanyak berada di kelas menengah - kelas bawah dikarenakan posisi penumpang berada pada bagian perut kapal.Kejadian tenggleamnya Kapal Titanic menelan korban hingga lebih dari 50% penumpang dengan data spesifik Total Penumpang meninggal 549 Jiwa, & Total Penumpang Selamat 342 jiwa dimana penumpang selamat di dominasi oleh penumpang Wanita, Orangtua/Lansia, dan Anak-anak