1 Explanation

Kapal Titanic dikenal sebagail kapal yang tidak dapat tenggelam dan merupakan kapal penumang terbesar dan termewah pada masanya. sayangnya, kapal Titanic tenggelam pada tanggal 15 april 1912, menewaskan lebih dari 1500 orang sementara hanya 705 orang yang selamat. pada kesempatan kali ini saya akan melakukan Exploratory Data Analysis pada data kapal Titanic.

2 Read data

dt <- read.csv("data_input/train.csv")
dt2 <- read.csv("data_input/test.csv")

3 Preprocessing data

3.1 Feature Engineering

Selanjutnya kita akan membuat kolom baru survived dengan nilai NA tujuannya agar jumlah kolom sama dan bisa di joinkan

dt2$Survived <- NA
total <- rbind(dt,dt2)

3.2 Data inspection

head(total, 10)
tail(total, 10)
dim(total)
#> [1] 1309   12
colnames(total)
#>  [1] "PassengerId" "Survived"    "Pclass"      "Name"        "Sex"        
#>  [6] "Age"         "SibSp"       "Parch"       "Ticket"      "Fare"       
#> [11] "Cabin"       "Embarked"
str(total)
#> '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" ...

Dari hasil Data inspection kita dapat mengetahui bahwa data titanic memiliki 1309x12 row dan column.

Selanjutnya kita akan melakukan cleansing data

3.3 Data cleansing

Terdapat nilai "" pada kolom cabin, maka kita akan replace dengan NA tujuannya agar mengetahui jumlah NA pada data.

total$Cabin[total$Cabin== ""] <- NA
colSums(is.na(total))
#> PassengerId    Survived      Pclass        Name         Sex         Age 
#>           0         418           0           0           0         263 
#>       SibSp       Parch      Ticket        Fare       Cabin    Embarked 
#>           0           0           0           1        1014           0

Jika kita lihat kolom Age terdapat banyak nilai NA hampir 20% dari data, maka akan kita akan replace nilai NA menggunakan nilai median, dan survived 418 NA yang sudah di set kedalam observasi dan cabin sebesar 1014 kita akan menghilangkan kolom tersebut.

total <- subset(x = total, select = -c(Cabin))
total$Age[is.na(total$Age)] = 28
total$Fare[is.na(total$Fare)] = 14.454
total$Embarked[total$Embarked==""]="C"

3.4 Adjusted type data

str(total)
#> '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" ...

Dari hasil struktur data di atas masih ada beberapa type data yang belum sesuai, maka kita akan menyesuaikan type data tersebut.

total[, c("Pclass", "Sex", "SibSp", "Parch", "Embarked", "Survived")] <- lapply(total[, c("Pclass", "Sex", "SibSp", "Parch", "Embarked","Survived")], as.factor)

3.5 Summary Statistics

Summary akan membantu mendapatkan deskripsi nilai statistik pada kolom numerik, metode ini sangat membantu untuk mendapatkan quick insight, mari kita check deskripsi statistik dari data titanic

summary(total)
#>   PassengerId   Survived   Pclass      Name               Sex     
#>  Min.   :   1   0   :549   1:323   Length:1309        female:466  
#>  1st Qu.: 328   1   :342   2:277   Class :character   male  :843  
#>  Median : 655   NA's:418   3:709   Mode  :character               
#>  Mean   : 655                                                     
#>  3rd Qu.: 982                                                     
#>  Max.   :1309                                                     
#>                                                                   
#>       Age        SibSp       Parch         Ticket               Fare        
#>  Min.   : 0.17   0:891   0      :1002   Length:1309        Min.   :  0.000  
#>  1st Qu.:22.00   1:319   1      : 170   Class :character   1st Qu.:  7.896  
#>  Median :28.00   2: 42   2      : 113   Mode  :character   Median : 14.454  
#>  Mean   :29.50   3: 20   3      :   8                      Mean   : 33.281  
#>  3rd Qu.:35.00   4: 22   4      :   6                      3rd Qu.: 31.275  
#>  Max.   :80.00   5:  6   5      :   6                      Max.   :512.329  
#>                  8:  9   (Other):   4                                       
#>  Embarked
#>  C:272   
#>  Q:123   
#>  S:914   
#>          
#>          
#>          
#> 

Interpretaion

  1. PassengerId nilai Max 1309 mengindikasikan jumlah penumpang dalam kapal titanic
  2. Age usia paling kecil dari penumpang kapal titanic muda 0.17 dan paling tua 80
  3. fare atau tarif penumpang paling tinggi 512.319
  4. survived penumpang titanic 61.6% lebih dari 1/2 rombongan penumpang kapal titanic selamat
  5. Embarked tujuan terbanyak penumpang kapal titanic ke southampton 914 diikuti oleh Cherbourg 272 dan Queenstown 123.

4 Data Manipulation & Data Transformation

Kita akan melakukan pengelompokan usia menggunakan function()

Age_g <-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")}

total$ageg <- as.factor(sapply(total$Age, Age_g))

kita ingin mengurutkan harga tiket dari jumlah terbesar ke terendah dengan kondisi apakah dia survived (0) atau tidak (1) dan berdasarkan pengelompokan usia penumpang.

order.fare <- aggregate(Fare~ageg+Survived, total, FUN = sum)

order.fare[order(order.fare$Fare, decreasing = T), ]

Kita ingin melihat berapa proporsi penumpang yang survived

prop.table(table(total$Survived))
#> 
#>         0         1 
#> 0.6161616 0.3838384

Interpretaion

mayoritas penumpang kapal titanic selamat dengan selisih 38.4% dengan penumpang tidak selamat.

plot(barplot(table(total$Survived)))

Jika dilihat dari graph di atas maka jumlah penumpang yang survived meliki angka yang lebih besar yaitu 549.

Selanjutnya kita ingin mengetahui jumlah penjualan tiket terbesar ke berbagai tujuan

aggregate(Fare~Embarked, total, sum)

Interpretaion

Port of Embarkation/Tujuan pelabuhan (C = Cherbourg, Q = Queenstown, S = Southampton), Tujuan pelabuhan yang mimiliki jumlah penjualan tiket terbesar yaitu ke southampton = 25047.840

kita ingin mengetahui penumpang yang survived dan paling banyak di kelas berapa

table(total$Pclass, total$Survived)
#>    
#>       0   1
#>   1  80 136
#>   2  97  87
#>   3 372 119
plot(table(total$Pclass, total$Survived))

5 Final Conclusion

Dari hasil Eda di atas kita dapat ambil Kesimpulan bahwa data pada kapal titanic membuktikan bahwa adanya kolerasi yang signifikan antara sosial ekonomi dan survival, kedua variabel tersebut belum bisa dijelaskan secara lebih mendalam, hanya gambaran secara umum bahwa sosial ekomoni yang lebih baik memiliki peluang lebih besar untuk survived di dalam kapal.