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 Diamond pada package Ecdat. 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