Explanation

History of Titanic Tragedy

RMS Titanic adalah sebuah kapal penumpang super Britania Raya yang tenggelam di Samudera 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. (source : https://id.wikipedia.org/wiki/RMS_Titanic)

Pada kesempatan kali ini saya akan melakukan Data Visualization pada dataset yang berisi tentang biodata dari penumpang kapal Titanic tersebut. Dataset ini didapatkan dari https://www.kaggle.com/c/titanic yang diambil pada bulan Maret 2021. Dalam pembahasan kali ini akan menampilkan beberapa plot yang akan ditampilkan sehingga dapat memudahkan kita dalam membaca atau mengambil insight dari data Titanic ini.

Import Library

library(ggplot2)
library(dplyr)
library(ggthemes)

Read Data

Setelah mengimport library yang dibutuhkan, selanjutnya import data yang akan digunakan yaitu dataset train dan test. Untuk mempermudahkan dalam pengolahannya, maka dilakukan penggabungan kedua dataset tersebut kedalam satu dataframe.

# Membaca dan Mengecek data train.csv & test.csv
train <- read.csv("data/train.csv")

test <- read.csv("data/test.csv")
test$Survived <- NA

titanic <- rbind(train, test)
str(titanic)
## 'data.frame':    1309 obs. of  12 variables:
##  $ PassengerId: int  1 2 3 4 5 6 7 8 9 10 ...
##  $ Survived   : int  0 1 1 1 0 0 0 0 1 1 ...
##  $ Pclass     : int  3 1 3 1 3 3 1 3 3 2 ...
##  $ Name       : chr  "Braund, Mr. Owen Harris" "Cumings, Mrs. John Bradley (Florence Briggs Thayer)" "Heikkinen, Miss. Laina" "Futrelle, Mrs. Jacques Heath (Lily May Peel)" ...
##  $ Sex        : chr  "male" "female" "female" "female" ...
##  $ Age        : num  22 38 26 35 35 NA 54 2 27 14 ...
##  $ SibSp      : int  1 1 0 1 0 0 0 3 0 1 ...
##  $ Parch      : int  0 0 0 0 0 0 0 1 2 0 ...
##  $ Ticket     : chr  "A/5 21171" "PC 17599" "STON/O2. 3101282" "113803" ...
##  $ Fare       : num  7.25 71.28 7.92 53.1 8.05 ...
##  $ Cabin      : chr  "" "C85" "" "C123" ...
##  $ Embarked   : chr  "S" "C" "S" "S" ...

Preprocessing Data

Data Wragling

Data Cleansing

Pada kolom Cabin terdapat nilai kosong "", agar dapat mengetahui jumlah Missing Value (NA) pada data maka dapat dilakukan imputasi dengan mengisikan nilai NA pada data.

titanic$Cabin[titanic$Cabin == ""] <- NA
# Mengetahui jumlah Missing Value pada masing-masing kolom di Dataset
colSums(is.na(titanic))
## PassengerId    Survived      Pclass        Name         Sex         Age 
##           0         418           0           0           0         263 
##       SibSp       Parch      Ticket        Fare       Cabin    Embarked 
##           0           0           0           1        1014           0

Dari hasil diatas dapat kita lihat, bahwa kolom Age terdapat banyak nilai NA hampir sebanyak 20% dari data, agar datanya dapat kita gunakan lebih optimal maka akan dilakukan proses imputasi dengan nilai NA menggunakan nilai median pada kolom Age, hal yang sama juga dilakukan pada kolom Fare. Sedangkan pada kolom Survived terdapat sebanyak 418 NA yang sudah di set kedalam observasi dan Cabin sebesar 1014 yang akan dihilangkan.

# Median `Age`
median(titanic$Age[!is.na(titanic$Age)])
## [1] 28
# Median `Fare`
median(titanic$Fare[!is.na(titanic$Fare)])
## [1] 14.4542
titanic <- subset(x = titanic, select = -c(Cabin))
titanic$Age[is.na(titanic$Age)] = 28
titanic$Fare[is.na(titanic$Fare)] = 14.454
titanic$Embarked[titanic$Embarked == ""] = "C"

Adjusted Type Data

str(titanic)
## 'data.frame':    1309 obs. of  11 variables:
##  $ PassengerId: int  1 2 3 4 5 6 7 8 9 10 ...
##  $ Survived   : int  0 1 1 1 0 0 0 0 1 1 ...
##  $ Pclass     : int  3 1 3 1 3 3 1 3 3 2 ...
##  $ Name       : chr  "Braund, Mr. Owen Harris" "Cumings, Mrs. John Bradley (Florence Briggs Thayer)" "Heikkinen, Miss. Laina" "Futrelle, Mrs. Jacques Heath (Lily May Peel)" ...
##  $ Sex        : chr  "male" "female" "female" "female" ...
##  $ Age        : num  22 38 26 35 35 28 54 2 27 14 ...
##  $ SibSp      : int  1 1 0 1 0 0 0 3 0 1 ...
##  $ Parch      : int  0 0 0 0 0 0 0 1 2 0 ...
##  $ Ticket     : chr  "A/5 21171" "PC 17599" "STON/O2. 3101282" "113803" ...
##  $ Fare       : num  7.25 71.28 7.92 53.1 8.05 ...
##  $ Embarked   : chr  "S" "C" "S" "S" ...

Masih terdapat beberapa kolom dengan type data yang belum sesuai, maka dari itu type data dengan kolom yang belum sesuai harus disesuaikan terlebih dahulu. Kolom yang belum sesuai type data nya sebagai berikut :

  • Survived dirubah menjadi Factor
  • Pclass dirubah menjadi Factor
  • Sex dirubah menjadi Factor
  • Embarked dirubah menjadi Factor

Sebelum itu, dapat kita lihat pada data Survived, Pclass dan Embarked isi datanya masih menggunakan alias keterangan, agar lebih jelas mari kita memberikan nama pada masing-masingnya.

# Memberi nama masing-masing data `Survived`, `Pclass`, `Embarked`
titanic$Survived <- ifelse(titanic$Survived == 1, "Survived", "Dead")

titanic$Pclass <- sapply(as.character(titanic$Pclass), switch,
                         "1" = "1st Class",
                         "2" = "2nd Class",
                         "3" = "3rd Class")

titanic$Embarked <- sapply(titanic$Embarked, switch, 
                           "C" = "Cherbourg",
                           "Q" = "Queenstown",
                           "S" = "Southampton")
# Mengubah data menjadi factor
titanic[, c("Pclass","Sex","Embarked","Survived")] <- lapply(
  titanic[, c("Pclass","Sex","Embarked","Survived")], as.factor)
str(titanic)
## 'data.frame':    1309 obs. of  11 variables:
##  $ PassengerId: int  1 2 3 4 5 6 7 8 9 10 ...
##  $ Survived   : Factor w/ 2 levels "Dead","Survived": 1 2 2 2 1 1 1 1 2 2 ...
##  $ Pclass     : Factor w/ 3 levels "1st Class","2nd Class",..: 3 1 3 1 3 3 1 3 3 2 ...
##  $ Name       : chr  "Braund, Mr. Owen Harris" "Cumings, Mrs. John Bradley (Florence Briggs Thayer)" "Heikkinen, Miss. Laina" "Futrelle, Mrs. Jacques Heath (Lily May Peel)" ...
##  $ Sex        : Factor w/ 2 levels "female","male": 2 1 1 1 2 2 2 2 1 1 ...
##  $ Age        : num  22 38 26 35 35 28 54 2 27 14 ...
##  $ SibSp      : int  1 1 0 1 0 0 0 3 0 1 ...
##  $ Parch      : int  0 0 0 0 0 0 0 1 2 0 ...
##  $ Ticket     : chr  "A/5 21171" "PC 17599" "STON/O2. 3101282" "113803" ...
##  $ Fare       : num  7.25 71.28 7.92 53.1 8.05 ...
##  $ Embarked   : Factor w/ 3 levels "Cherbourg","Queenstown",..: 3 1 3 3 3 2 3 3 3 1 ...

Type data di atas sudah sesuai seperti yang diinginkan.

Feature Engineering

Untuk mengetahui lebih spesifik tentang Age dan Sex dapat dilakukan dengan feature engineering dengan mengekstrak title dari variable Name. Fungsi gsub dapat digunakan dalam kasus ini, dan dalam hal ini variable title akan dibedakan menjadi 6 title yang berbeda. Diantaranya : Mr, Mrs, Master, Miss, Honorific Titles dan Officers.

# menggunakan fungsi gsub
titanic$Title <- gsub("(.*\\,|\\..*)", "", titanic$Name) %>%    gsub("[[:space:]]", "", .)

# membedakan variable title
titanic$Title[titanic$Title %in% c("Don", "Sir")] <- "Mr"
titanic$Title[titanic$Title %in% c("Ms", "Mme", "Mlle", "Lady", "Dona", "theCountess")] <- "Mrs"
titanic$Title[titanic$Title %in% c("Jonkheer", "Dr")] <- "Honorific Titles"
titanic$Title[titanic$Title %in% c("Capt", "Col", "Major", "Rev")] <- "Officers"

Mengelompokkan Usia Age ke dalam beberapa kelompok.

Ages <- function(x){
  if(x < 20) {
    x <- "< 20"
  } else if (x >= 20 & x <= 29) {
    x <- "20-29"
  } else if (x >= 30 & x <= 39) {
    x <- "30-39"
  } else if (x >= 40 & x <= 49) {
    x <- "40-49"
  } else if (x >= 50 & x <= 59) {
    x <- "50-59" 
  } else if (x >= 60 & x <= 69) {
    x <- "60-69"
  } else if (x >= 70 & x <= 79) {
    x <- "70-79"
  } else (x <- "> 80")
}
titanic$Ages <- as.factor(sapply(titanic$Age, Ages))

Data Inspection

head(titanic)
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Embarked Title Ages
1 Dead 3rd Class Braund, Mr. Owen Harris male 22 1 0 A/5 21171 7.2500 Southampton Mr 20-29
2 Survived 1st Class Cumings, Mrs. John Bradley (Florence Briggs Thayer) female 38 1 0 PC 17599 71.2833 Cherbourg Mrs 30-39
3 Survived 3rd Class Heikkinen, Miss. Laina female 26 0 0 STON/O2. 3101282 7.9250 Southampton Miss 20-29
4 Survived 1st Class Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35 1 0 113803 53.1000 Southampton Mrs 30-39
5 Dead 3rd Class Allen, Mr. William Henry male 35 0 0 373450 8.0500 Southampton Mr 30-39
6 Dead 3rd Class Moran, Mr. James male 28 0 0 330877 8.4583 Queenstown Mr 20-29
tail(titanic)
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Embarked Title Ages
1304 1304 NA 3rd Class Henriksson, Miss. Jenny Lovisa female 28.0 0 0 347086 7.7750 Southampton Miss 20-29
1305 1305 NA 3rd Class Spector, Mr. Woolf male 28.0 0 0 A.5. 3236 8.0500 Southampton Mr 20-29
1306 1306 NA 1st Class Oliva y Ocana, Dona. Fermina female 39.0 0 0 PC 17758 108.9000 Cherbourg Mrs 30-39
1307 1307 NA 3rd Class Saether, Mr. Simon Sivertsen male 38.5 0 0 SOTON/O.Q. 3101262 7.2500 Southampton Mr 30-39
1308 1308 NA 3rd Class Ware, Mr. Frederick male 28.0 0 0 359309 8.0500 Southampton Mr 20-29
1309 1309 NA 3rd Class Peter, Master. Michael J male 28.0 1 1 2668 22.3583 Cherbourg Master 20-29
dim(titanic)
## [1] 1309   13
colnames(titanic)
##  [1] "PassengerId" "Survived"    "Pclass"      "Name"        "Sex"        
##  [6] "Age"         "SibSp"       "Parch"       "Ticket"      "Fare"       
## [11] "Embarked"    "Title"       "Ages"
str(titanic)
## 'data.frame':    1309 obs. of  13 variables:
##  $ PassengerId: int  1 2 3 4 5 6 7 8 9 10 ...
##  $ Survived   : Factor w/ 2 levels "Dead","Survived": 1 2 2 2 1 1 1 1 2 2 ...
##  $ Pclass     : Factor w/ 3 levels "1st Class","2nd Class",..: 3 1 3 1 3 3 1 3 3 2 ...
##  $ Name       : chr  "Braund, Mr. Owen Harris" "Cumings, Mrs. John Bradley (Florence Briggs Thayer)" "Heikkinen, Miss. Laina" "Futrelle, Mrs. Jacques Heath (Lily May Peel)" ...
##  $ Sex        : Factor w/ 2 levels "female","male": 2 1 1 1 2 2 2 2 1 1 ...
##  $ Age        : num  22 38 26 35 35 28 54 2 27 14 ...
##  $ SibSp      : int  1 1 0 1 0 0 0 3 0 1 ...
##  $ Parch      : int  0 0 0 0 0 0 0 1 2 0 ...
##  $ Ticket     : chr  "A/5 21171" "PC 17599" "STON/O2. 3101282" "113803" ...
##  $ Fare       : num  7.25 71.28 7.92 53.1 8.05 ...
##  $ Embarked   : Factor w/ 3 levels "Cherbourg","Queenstown",..: 3 1 3 3 3 2 3 3 3 1 ...
##  $ Title      : chr  "Mr" "Mrs" "Miss" "Mrs" ...
##  $ Ages       : Factor w/ 8 levels "< 20","> 80",..: 3 4 3 4 4 3 6 1 3 1 ...

Dari hasil Data Inspection didapatkan bahwa Data Titanic memiliki 1309 rows dan 13 columns. Terdapat kolom PassengerId yang dapat kita lihat, kolom ini hanyalah sebuah indeks dan bukan merupakan attribute dari penumpang kapal titanic. Berikut attribute atau variabel yang dapat kita analisis, adalah :

  • Survived : Tipe data Factor, data penumpang (Survived = 1) atau tidak (0)
  • Pclass : Tipe data Factor, data kelas penumpang
  • Name : Tipe data Character, data nama penumpang
  • Sex : Tipe data Factor, data jenis kelamin penumpang
  • Age : Tipe data Numeric, data umur penumpang
  • SibSp : Tipe data Integer, data jumlah saudara kandung (Siblings) atau pasangan (spouses)
  • Parch : Tipe data Integer, data jumlah orang tua (parents) atau anak (children)
  • Ticket : Tipe data Character, data identitas ticket penumpang
  • Fare : Tipe data Numeric, data kekayaan atau status sosial penumpang
  • Embarked : Tipe data Factor, data embarkasi
  • Title : Tipe data Character, data identitas name
  • Ages : Tipe data Factor, data pengelompokkan Usia

Missing Value

Dilakukan pengecetakan ulang pada dataset, mengecek Missing Value (NA) yang dapat menyulitkan pengolahan data. Oleh karena itu perlu dideteksi dan bila ada perlu diberi perlakuan.

# cek keseluruhan data
anyNA(titanic)
## [1] TRUE
colSums(is.na(titanic))
## PassengerId    Survived      Pclass        Name         Sex         Age 
##           0         418           0           0           0           0 
##       SibSp       Parch      Ticket        Fare    Embarked       Title 
##           0           0           0           0           0           0 
##        Ages 
##           0

Terdapat Missing value (NA) pada variable Survived, tetapi karena variable ini merupakan dependent variable/targets maka tidak dilakukan perlakuan karena akan mempengaruhi keseluruhan data yang lain.

Summary Statistic

Summary digunakan untuk mendapatkan deskripsi nilai statistik dari data numeric dengan menggunakan function summary(). Function akan membantu untuk mendapatkan quick insight dari data yang kita miliki.

summary(titanic)
##   PassengerId       Survived         Pclass        Name               Sex     
##  Min.   :   1   Dead    :549   1st Class:323   Length:1309        female:466  
##  1st Qu.: 328   Survived:342   2nd Class:277   Class :character   male  :843  
##  Median : 655   NA's    :418   3rd Class:709   Mode  :character               
##  Mean   : 655                                                                 
##  3rd Qu.: 982                                                                 
##  Max.   :1309                                                                 
##                                                                               
##       Age            SibSp            Parch          Ticket         
##  Min.   : 0.17   Min.   :0.0000   Min.   :0.000   Length:1309       
##  1st Qu.:22.00   1st Qu.:0.0000   1st Qu.:0.000   Class :character  
##  Median :28.00   Median :0.0000   Median :0.000   Mode  :character  
##  Mean   :29.50   Mean   :0.4989   Mean   :0.385                     
##  3rd Qu.:35.00   3rd Qu.:1.0000   3rd Qu.:0.000                     
##  Max.   :80.00   Max.   :8.0000   Max.   :9.000                     
##                                                                     
##       Fare                Embarked      Title                Ages    
##  Min.   :  0.000   Cherbourg  :272   Length:1309        20-29  :607  
##  1st Qu.:  7.896   Queenstown :123   Class :character   30-39  :232  
##  Median : 14.454   Southampton:914   Mode  :character   < 20   :225  
##  Mean   : 33.281                                        40-49  :135  
##  3rd Qu.: 31.275                                        50-59  : 70  
##  Max.   :512.329                                        60-69  : 32  
##                                                         (Other):  8

Interpretaion :

  1. Nilai Max. : 1309 pada PassengerId mendeskripsikan jumlah penumpang dalam kapal Titanic sebanyak 1309.
  2. Survived (1) penumpang Titanic selamat 342 orang
  3. Jenis kelamin Sex penumpang kapal Titanic masing-masing Laki-laki sebanyak 843 orang dan Perempuan 466
  4. Usia Age dari penumpang kapal Titanic berusia paling kecil = 0.17 dan usia paling tua 80
  5. Tarif penumpang Fare paling tinggi sebesar 512.319
  6. Embarked tujuan terbanyak penumpang kapal Titanic ke tujuan S= Southampton sebanyak 914, diikuti oleh C = Cherbourg sebanyak 272 dan Q = Queenstown sebanyak 123.
  7. Range Usia penumpang Ages berumur :
  • < 20 tahun sebanyak 225 orang
  • 20-29 tahun sebanyak 607 orang
  • 30-39 tahun sebanyak 232 orang
  • 40-49 tahun sebanyak 135 orang
  • 50-59 tahun sebanyak 70 orang
  • 60-69 tahun sebanyak 32 orang
  • sisanya sebanyak 8 orang

Data Processing dan Plotting

Apakah laki-laki lebih banyak dari perempuan pada setiap Pclass ?

ggplot(data = titanic, aes(x=Pclass, fill=Sex)) +
  geom_bar(position = "dodge", width = 0.4)

Lebih banyak Laki-laki pada semua Pclass. Namun, rasio laki-laki dan perempuan jauh lebih tinggi pada Pclass 3.

Bagaimana tingkat kelangsungan hidup Survived pada masing-masing Pclass, apakah mereka yang lebih membayar lebih di prioritaskan untuk selamat ?

# Filter Survived dan Dead pada variable `Survived
titanic.clean <- titanic[titanic$Survived %in% c("Survived", "Dead"),]
ggplot(data = titanic.clean, aes(x=Pclass, fill= Survived)) +
  geom_bar(position = "dodge") +
  scale_fill_brewer(palette = "Set1")

>Ya, ternyata mereka yang berada pada Pclass 1 memiliki peluang bertahan hidup jauh lebih baik dibandingkan dengan yang lain.

Bagaimana Tingkat kelangsungan hidup Survived berdasarkan Title nama?

ggplot(data = titanic.clean, aes(x=Title, fill=Survived)) +
  geom_bar(position = "dodge") +
  scale_fill_brewer(palette = "Set1")

titanic.clean.title <- as.data.frame(table(titanic.clean$Survived, titanic.clean$Title))

titanic.clean.title
Var1 Var2 Freq
Dead Honorific Titles 5
Survived Honorific Titles 3
Dead Master 17
Survived Master 23
Dead Miss 55
Survived Miss 127
Dead Mr 437
Survived Mr 82
Dead Mrs 26
Survived Mrs 105
Dead Officers 9
Survived Officers 2
ggplot(titanic.clean.title, aes(x=Var2, y=Freq, fill= Var1)) +
  geom_col(position="fill") + 
  ggthemes::theme_economist() + 
  scale_color_gdocs() + 
  ggthemes::scale_fill_gdocs() + 
    scale_fill_brewer(palette = "Set1") +
  geom_text(aes(label = Freq), position = position_fill(vjust = .5), col = "white") + coord_flip() +
  labs(fill = "Survived",
       x = "Title")

  • Laki-laki dengan Title Mr memiliki tingkat kelangsungan hidup terburuk
  • Perempuan memiliki tingkat kelangsungan hidup yang lebih baik daripada Laki-laki.
  • Tingkat kelangsungan hidup Honorific Titles dan Officers lebih buruk dibanding tingkat kematiannya.
  • Master digunakan di inggris untuk anak laki-laki yang teralalu muda untuk dipanggil Mister, sepertinya anak-anak memiliki peluang lebih baik untuk bertahan hidup.

Perempuan memiliki tingkat kelangsungan hidup yang lebih baik, tapi bagaimana kalau dilihat berdasarkan Pclass nya, apakah tingkat kelangsungan hidupnya masih lebih tinggi ?

ggplot(data = titanic.clean, aes(x=Sex, fill=Survived)) +
  geom_bar(position = "dodge") +
  scale_fill_brewer(palette = "Set1") +
  facet_wrap(~Pclass, nrow = 3, scales = "free_y")

  • Dalam Pclass 1, perempuan memiliki tingkat kelangsungan hidup yang sangat tinggi dengan sangat pasti, sedangkan laki-laki jauh lebih tinggi tingkat kematiannya.
  • Pada Pclass 2, hampir sama dengan apa yang terjadi pada Pclass 1 hanya jumlahnya saja yang berbeda.
  • Sedangkan pada Pclass 3, tingkat kelangsungan hidupnya hampir 50/50, sangat kontras dengan tingkat kelangsungan hidup laki-laki yang jauh lebih tinggi tingkat kematiannya.

Apakah dengan memiliki keluarga dapat mempengaruhi kelangsungan hidup penumpang ?

titanic.clean$Family <- titanic.clean$SibSp + titanic.clean$Parch + 1
ggplot(data = titanic.clean, aes(x=Family, fill=Survived)) +
  geom_bar(stat = "count", position = "dodge") +
  scale_x_continuous(breaks = c(1:11)) +
  scale_fill_brewer(palette = "Set1") +
  ylim(c(0, 400)) +
  labs( x = "Family Size" ) +
  theme_bw()

Terlihat Seperti itu : - Jika penumpang tidak memiliki keluarga, peluang bertahan hidup lebih buruk - Keluarga yang lebih kecil (2-4) memiliki peluang bertahan hidup lebih baik - Namun, keluarga yang besar (+5) tidak memiliki peluang bertahan hidup yang lebih baik

Bagaimana sebaran penumpang yang selamat dan tidak berdasarkan umur dan tiket pclass masing-masing?

# Filter Pclass 1st Class
titanic.pclass1 <- titanic.clean[titanic.clean$Pclass %in% "1st Class", ]
# Plot Penumpang Tiket Pclass 1st Class
p1 <- ggplot(data = titanic.pclass1, aes(x = Fare, y = Age)) +
  geom_point(colour = "yellow", shape = 21, size =3, aes(fill = Survived)) +
  scale_fill_brewer(palette = "Set1") +
  theme_minimal() +
  labs(title = "Penumpang Tiket Kelas 1")

# Filter Pclass 2nd Class
titanic.pclass2 <- titanic.clean[titanic.clean$Pclass %in% "2nd Class", ]

# Plot Penumpang Tiket Pclass 2nd Class
p2 <- ggplot(data = titanic.pclass2, aes(x = Fare, y = Age)) +
  geom_point(colour = "yellow", shape = 21, size =3, aes(fill = Survived)) +
  scale_fill_brewer(palette = "Set1") +
  theme_minimal() +
  labs(title = "Penumpang Tiket Kelas 2")

# Filter Pclass 3nd Class
titanic.pclass3 <- titanic.clean[titanic.clean$Pclass %in% "3rd Class", ]

# Plot Penumpang Tiket Pclass 3nd Class
p3 <- ggplot(data = titanic.pclass3, aes(x = Fare, y = Age)) +
  geom_point(colour = "yellow", shape = 21, size =3, aes(fill = Survived)) +
  scale_fill_brewer(palette = "Set1") +
  theme_minimal() +
  labs(title = "Penumpang Tiket Kelas 3")

require(gridExtra)
grid.arrange(p1,p2,p3, ncol=1)

Bagaimana proporsi tingkat keselamatan penumpang berdasarkan rentang usia nya ?

titanic.clean.prop <- as.data.frame(table(titanic.clean$Survived,titanic.clean$Ages))
titanic.clean.prop
Var1 Var2 Freq
Dead < 20 85
Survived < 20 79
Dead > 80 0
Survived > 80 1
Dead 20-29 268
Survived 20-29 129
Dead 30-39 94
Survived 30-39 73
Dead 40-49 55
Survived 40-49 34
Dead 50-59 28
Survived 50-59 20
Dead 60-69 13
Survived 60-69 6
Dead 70-79 6
Survived 70-79 0
ggplot(data = titanic.clean.prop, mapping = aes(x = Freq, y = reorder(Var2, Freq))) +
  geom_col(mapping = aes(fill = Var1), position = "stack") +
  labs(x = "Proporsi Keselamatan Penumpang",
       y = NULL,
       fill = NULL,
       title = "Proporsi Keselamatan Penumpang Kapal Titanic",
       subtitle = "Berdasarkan Rentang Usia") +
  scale_fill_brewer(palette = "Set1") +
  theme_minimal() +
  theme(legend.position = "top")

Rentang usia 20-29 tahun memiliki tingkat keselamatan lebih tinggi dari yang lain, tetapi memiliki tingkat kematian yang melebihi dan sangat tinggi dari yang lain pula.

Bagaimana proporsi tingkat keselamatan penumpang berdasarkan Embarkednya ?

titanic.clean.emb <- as.data.frame(table(titanic.clean$Survived, titanic.clean$Embarked))
titanic.clean.emb
Var1 Var2 Freq
Dead Cherbourg 75
Survived Cherbourg 95
Dead Queenstown 47
Survived Queenstown 30
Dead Southampton 427
Survived Southampton 217
ggplot(titanic.clean.emb, aes(x=Var2, y=Freq, fill= Var1)) +
  geom_col(position = "fill") +
  ggthemes::theme_economist() +
  scale_color_gdocs() +
  ggthemes::scale_fill_gdocs() +
  scale_fill_brewer(palette = "Set1") +
  geom_text(aes(label = Freq), position = position_fill(vjust = .5), col = "white") +
labs(fill = "Survived",
     x = "Embarked")

  • Untuk Embarked Cherbourg penumpang yang selamat sebanyak 95 orang dan penumpang meninggal sebanyak 75 orang.
  • Pada Embarked Queenstown penumpang yang selamat sebanyak 30 orang dan penumpang meninggal sebanyak 47 orang.
  • Sedangkan untuk Embarked Southampton penumpang yang selamat sebanyak 217 orang dan penumpang meninggal sebanyak 427 orang.