Case study : Diamond Dataset
Studi kasus dilakukan dengan menggunakan data Diamond yang terdapat pada package Ecdat. Untuk itu package tersebut perlu diinstall terlebih dulu dengan script berikut :
install.packages("Ecdat")
Selanjutnya load packages yang akan di gunakan pada studi kasus ini :
library(Ecdat)## Loading required package: Ecfun
##
## Attaching package: 'Ecfun'
## The following object is masked from 'package:base':
##
## sign
##
## Attaching package: 'Ecdat'
## The following object is masked from 'package:datasets':
##
## Orange
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
Setelah itu, dilanjutkan dengan memanggil dataset Diamond.
data("Diamond")
Diamond<-tibble::as_tibble(Diamond)Untuk mengetahui deskripsi data Diamond, dapat menggunakan perintah help() atau ?? berikut.
??Diamond
- Data yang di gunakan adalah data yang berasal dari dataset
Diamondpada packageEcdat. Deskripsi dari data yaitu : a cross-section from 2000, country : Singapore
Source : Chu, Singfat (2001) “Pricing the C’s of Diamond Stones”, Journal of Statistics Education.
- Dataset ini berisi infromasi mengenai Diamond yaitu :
carat : weight of diamond stones in carat unit
colour : a factor with levels (D,E,F,G,H,I)
clarity : a factor with levels (IF,VVS1,VVS2,VS1,VS2)
certification : certification body, a factor with levels ( GIA, IGI, HRD)
price : price in Singapore \$
Data Exploration
Fungsi yang digunakan untuk mengetahui ukuran data adalah fungsi dim().
dim(Diamond)## [1] 308 5
Artinya, data Diamond terdiri dari 308 baris dan 5 kolom. Selanjutnya untuk mencari ringkasan data, fungsi yang di gunakan adalah summary()
summary(Diamond)## carat colour clarity certification price
## Min. :0.1800 D:16 IF :44 GIA:151 Min. : 638
## 1st Qu.:0.3500 E:44 VS1 :81 HRD: 79 1st Qu.: 1625
## Median :0.6200 F:82 VS2 :53 IGI: 78 Median : 4215
## Mean :0.6309 G:65 VVS1:52 Mean : 5019
## 3rd Qu.:0.8500 H:61 VVS2:78 3rd Qu.: 7446
## Max. :1.1000 I:40 Max. :16008
Untuk memunculkan n baris pertama digunakan fungsi head(), dengan default = 6 baris.
head(Diamond,5)## # A tibble: 5 x 5
## carat colour clarity certification price
## <dbl> <fct> <fct> <fct> <int>
## 1 0.3 D VS2 GIA 1302
## 2 0.3 E VS1 GIA 1510
## 3 0.3 G VVS1 GIA 1510
## 4 0.3 G VS1 GIA 1260
## 5 0.31 D VS1 GIA 1641
Untuk memunculkan n baris terakhir digunakan fungsi tail(), dengan default = 6 baris.
tail(Diamond,5)## # A tibble: 5 x 5
## carat colour clarity certification price
## <dbl> <fct> <fct> <fct> <int>
## 1 1.01 I VS1 HRD 8175
## 2 1.02 F VVS2 HRD 10796
## 3 1.06 H VVS2 HRD 9890
## 4 1.02 H VS2 HRD 8959
## 5 1.09 I VVS2 HRD 9107
Untuk check missing values di gunakan fungsi is.na().
print(paste('jumlah data missing =',sum(is.na(Diamond))))## [1] "jumlah data missing = 0"
Pada dataset ini tidak terdapat missing value.
Selecting Columns
Fungsi select() dapat digunakan untuk memilih subset data berdasarkan peubah tertentu.
Untuk memanggil data diamond dengan kolom tertentu seperti hanya memanggil kolom colour, certification, and price menggunakan script sebagai berikut.
Diamond %>% select(colour, certification, price)## # A tibble: 308 x 3
## colour certification price
## <fct> <fct> <int>
## 1 D GIA 1302
## 2 E GIA 1510
## 3 G GIA 1510
## 4 G GIA 1260
## 5 D GIA 1641
## 6 E GIA 1555
## 7 F GIA 1427
## 8 G GIA 1427
## 9 H GIA 1126
## 10 I GIA 1126
## # ... with 298 more rows
Untuk memanggil data diamond tanpa kolom colour menggunakan script sebagai berikut.
Diamond %>% select(-colour)## # A tibble: 308 x 4
## carat clarity certification price
## <dbl> <fct> <fct> <int>
## 1 0.3 VS2 GIA 1302
## 2 0.3 VS1 GIA 1510
## 3 0.3 VVS1 GIA 1510
## 4 0.3 VS1 GIA 1260
## 5 0.31 VS1 GIA 1641
## 6 0.31 VS1 GIA 1555
## 7 0.31 VS1 GIA 1427
## 8 0.31 VVS2 GIA 1427
## 9 0.31 VS2 GIA 1126
## 10 0.31 VS1 GIA 1126
## # ... with 298 more rows
Untuk memanggil data diamond berurutan mulai dari kolom colour sampai kolom certification menggunakan script sebagai berikut.
Diamond %>% select(colour:certification)## # A tibble: 308 x 3
## colour clarity certification
## <fct> <fct> <fct>
## 1 D VS2 GIA
## 2 E VS1 GIA
## 3 G VVS1 GIA
## 4 G VS1 GIA
## 5 D VS1 GIA
## 6 E VS1 GIA
## 7 F VS1 GIA
## 8 G VVS2 GIA
## 9 H VS2 GIA
## 10 I VS1 GIA
## # ... with 298 more rows
Arrange Function
Untuk mengurutkan data Diamond berdasarkan berat carat terkecil script yang digunakan adalah :
Diamond %>% arrange(carat)## # A tibble: 308 x 5
## carat colour clarity certification price
## <dbl> <fct> <fct> <fct> <int>
## 1 0.18 F VVS1 IGI 823
## 2 0.18 F VVS2 IGI 765
## 3 0.18 G IF IGI 803
## 4 0.18 G IF IGI 803
## 5 0.18 G VVS2 IGI 705
## 6 0.18 H IF IGI 725
## 7 0.19 D VVS2 IGI 967
## 8 0.19 E IF IGI 1050
## 9 0.19 F IF IGI 967
## 10 0.19 F VVS1 IGI 863
## # ... with 298 more rows
Untuk mengurutkan data Diamond berdasarkan clarity dan jumlah carat (dari jumlah terbesar - kecil), script yang digunakan adalah :
Diamond %>% arrange(clarity, desc(carat))## # A tibble: 308 x 5
## carat colour clarity certification price
## <dbl> <fct> <fct> <fct> <int>
## 1 1.04 I IF GIA 9563
## 2 1 F IF GIA 13913
## 3 0.81 H IF HRD 7358
## 4 0.8 F IF HRD 8611
## 5 0.76 D IF GIA 9885
## 6 0.71 G IF HRD 6372
## 7 0.63 E IF GIA 6512
## 8 0.6 H IF GIA 4291
## 9 0.58 H IF HRD 3792
## 10 0.55 H IF GIA 3605
## # ... with 298 more rows
Filter Function
Fungsi filter() digunakan untuk memilih sebagian data berdasarkan nilai tertentu.
Jika ingin mengambil data Diamond yang memiliki certification GIA, maka menggunakan script sebagai berikut
Diamond %>% filter(certification=="GIA")## # A tibble: 151 x 5
## carat colour clarity certification price
## <dbl> <fct> <fct> <fct> <int>
## 1 0.3 D VS2 GIA 1302
## 2 0.3 E VS1 GIA 1510
## 3 0.3 G VVS1 GIA 1510
## 4 0.3 G VS1 GIA 1260
## 5 0.31 D VS1 GIA 1641
## 6 0.31 E VS1 GIA 1555
## 7 0.31 F VS1 GIA 1427
## 8 0.31 G VVS2 GIA 1427
## 9 0.31 H VS2 GIA 1126
## 10 0.31 I VS1 GIA 1126
## # ... with 141 more rows
Untuk menghitung jumlah baris dari data yang di filter, dapat menggunakan fungsi nrow()
nrow(Diamond %>% filter(certification=="GIA"))## [1] 151
Jika ingin mengambil data Diamond yang jumlah carat lebih besar dari 0.50, maka menggunakan script sebagai berikut
Diamond %>% filter(carat > 0.50)## # A tibble: 204 x 5
## carat colour clarity certification price
## <dbl> <fct> <fct> <fct> <int>
## 1 0.51 F VVS2 GIA 3567
## 2 0.51 G VS1 GIA 3205
## 3 0.52 D VS2 GIA 3490
## 4 0.52 E VS1 GIA 3635
## 5 0.52 F VVS2 GIA 3635
## 6 0.52 F VS1 GIA 3418
## 7 0.53 D VS1 GIA 3921
## 8 0.53 F VVS2 GIA 3701
## 9 0.53 F VS1 GIA 3480
## 10 0.53 G VVS2 GIA 3407
## # ... with 194 more rows
Jika ingin mengambil data Diamond yang memiliki colour D dan E, maka menggunakan script sebagai berikut
Diamond %>% filter(colour %in% c("D", "E"))## # A tibble: 60 x 5
## carat colour clarity certification price
## <dbl> <fct> <fct> <fct> <int>
## 1 0.3 D VS2 GIA 1302
## 2 0.3 E VS1 GIA 1510
## 3 0.31 D VS1 GIA 1641
## 4 0.31 E VS1 GIA 1555
## 5 0.33 E VS2 GIA 1327
## 6 0.34 E VS1 GIA 1693
## 7 0.35 E VS1 GIA 1738
## 8 0.46 E VVS2 GIA 2942
## 9 0.5 E VS1 GIA 3501
## 10 0.5 E VS1 GIA 3501
## # ... with 50 more rows
Mutate Function
Fungsi mutate() digunakan untuk menambahkan peubah baru pada data.
Pada studi kasus ini, fungsi mutate() di gunakan untuk menambahkan kolom pricepercarat yang berisi harga 1 carat dari masing-masing Diamond di tiap barisnya. Isi dari kolom tersebut adalah \(price/carat\). Script yang digunakan adalah sebagai berikut.
data <- Diamond %>% mutate(pricepercarat=price/carat)
data <-tibble::as_tibble(data)
data## # A tibble: 308 x 6
## carat colour clarity certification price pricepercarat
## <dbl> <fct> <fct> <fct> <int> <dbl>
## 1 0.3 D VS2 GIA 1302 4340
## 2 0.3 E VS1 GIA 1510 5033.
## 3 0.3 G VVS1 GIA 1510 5033.
## 4 0.3 G VS1 GIA 1260 4200
## 5 0.31 D VS1 GIA 1641 5294.
## 6 0.31 E VS1 GIA 1555 5016.
## 7 0.31 F VS1 GIA 1427 4603.
## 8 0.31 G VVS2 GIA 1427 4603.
## 9 0.31 H VS2 GIA 1126 3632.
## 10 0.31 I VS1 GIA 1126 3632.
## # ... with 298 more rows
Summarise Function
Untuk menghitung harga rata-rata pricepercarat Diamond berdasarkan certification, script yang digunakan adalah :
data %>% group_by(certification) %>% summarise(mean = mean(pricepercarat))## # A tibble: 3 x 2
## certification mean
## <fct> <dbl>
## 1 GIA 7226.
## 2 HRD 8524.
## 3 IGI 5431.
Jika ingin melihat jumlah rata-rata dari berat carat Diamond yang ada berdasarkan colour, dapat di cari dengan script sebagai berikut.
data %>% group_by(colour) %>% summarise(mean=mean(carat))## # A tibble: 6 x 2
## colour mean
## <fct> <dbl>
## 1 D 0.638
## 2 E 0.623
## 3 F 0.593
## 4 G 0.581
## 5 H 0.673
## 6 I 0.731
Combine Function
Penggabungan dari fungsi di gunakan untuk memilih kolom apa saja yang akan di ambil (certification, clarity, carat, price) dari tabel Diamond dengan menggunakan fungsi select(), kemudian mengurutkan data berdasarkan berat carat terkecil. Data yang ada kemudian di filter dengan kondisi data yang di ambil adalah data dengan carat lebih dari 0.50. Setelah itu untuk mengetahui harga per karat Diamond, di tambahkan kolom pricepercarat, dengan isi dari kolom adalah \(price/carat\)
Diamond %>%
select(certification, clarity, carat, price)%>%
arrange(carat)%>%
filter(carat>0.50)%>%
mutate(pricepercarat=price/carat)## # A tibble: 204 x 5
## certification clarity carat price pricepercarat
## <fct> <fct> <dbl> <int> <dbl>
## 1 GIA VVS2 0.51 3567 6994.
## 2 GIA VS1 0.51 3205 6284.
## 3 GIA VVS1 0.51 3851 7551.
## 4 IGI VVS2 0.51 3722 7298.
## 5 IGI VVS1 0.51 3722 7298.
## 6 HRD VVS1 0.51 3851 7551.
## 7 GIA VS2 0.52 3490 6712.
## 8 GIA VS1 0.52 3635 6990.
## 9 GIA VVS2 0.52 3635 6990.
## 10 GIA VS1 0.52 3418 6573.
## # ... with 194 more rows
Untuk menghitung average, min, max, dan total dari data pricepercarat, berdasarkan clarity, script yang digunakan adalah :
data %>%
group_by(clarity) %>%
summarise(avg= mean(pricepercarat),
min = min(pricepercarat),
max = max(pricepercarat),
total = n()) ## # A tibble: 5 x 5
## clarity avg min max total
## <fct> <dbl> <dbl> <dbl> <int>
## 1 IF 5969. 3989. 13913 44
## 2 VS1 7030. 3493. 11419 81
## 3 VS2 7083. 3190 9757 53
## 4 VVS1 7898. 3941. 15850. 52
## 5 VVS2 7309. 3673. 13775 78