Installing the Package

Materi ini akan membahas pengenalan package tidyverse yang merupakan kumpulan dari beberapa package, di antaranya adalah readr, tidyr, dplyr, dan ggplot2.

  • readr digunakan untuk mengimpor data tabular

  • tidyr digunakan untuk merapihkan data

  • dplyr digunakan untuk memanipulasi data

  • ggplot2 digunakan untuk visualisasi data

Pada penggunaan pertama, silahkan install terlebih dulu package yang akan digunakan dengan cara menuliskan code berikut:

install.packages("tidyverse")

selanjutnya load package yang telah diinstall:

library(tidyverse)

Untuk melihat isi dari package, kita dapat menggunakan perintah help() atau dengan menuliskan ?? yang diikuti dengan keyword yang akan dicari.

??tidyverse

Import Data

Package tidyverse menggunakan tibble sebagai pengganti data.frame. Import data dengan format .csv yang dilakukan menggunakan fungsi read.cv() akan menyimpan data sebagai data.framesedangkan fungsi read_csv() dari package readr akan menyimpannya sebagai tibble. Untuk data berukuran besar, package readr dinilai mampu mengimpor data dengan lebih cepat.

cars1<-read.csv("https://github.com/tidyverse/readr/raw/master/inst/extdata/mtcars.csv")
class(cars1)
## [1] "data.frame"
cars2<-read_csv("https://github.com/tidyverse/readr/raw/master/inst/extdata/mtcars.csv")
## Parsed with column specification:
## cols(
##   mpg = col_double(),
##   cyl = col_double(),
##   disp = col_double(),
##   hp = col_double(),
##   drat = col_double(),
##   wt = col_double(),
##   qsec = col_double(),
##   vs = col_double(),
##   am = col_double(),
##   gear = col_double(),
##   carb = col_double()
## )
class(cars2)
## [1] "spec_tbl_df" "tbl_df"      "tbl"         "data.frame"
cars2

Menurut Hidayatuloh (2019), beberapa kelebihan tibble dibandingkan data.frame diantaranya adalah ketika menampilkan data, tibble tidak menampilkan semua baris dan kolom. Jika ada lebih dari 10 baris data, maka hanya akan ada 10 baris pertama yang ditampilkan dan beberapa variabel sesuai dengan lebar console R Anda.

#contoh mengimpor data yang berukuran besar
system.time(accident<-read_csv("https://vincentarelbundock.github.io/Rdatasets/csv/DAAG/nassCDS.csv"))
## Parsed with column specification:
## cols(
##   X1 = col_double(),
##   dvcat = col_character(),
##   weight = col_double(),
##   dead = col_character(),
##   airbag = col_character(),
##   seatbelt = col_character(),
##   frontal = col_double(),
##   sex = col_character(),
##   ageOFocc = col_double(),
##   yearacc = col_double(),
##   yearVeh = col_double(),
##   abcat = col_character(),
##   occRole = col_character(),
##   deploy = col_double(),
##   injSeverity = col_double(),
##   caseid = col_character()
## )
##    user  system elapsed 
##    0.14    0.09    0.95
accident

Dapat dilihat bahwa data accident memiliki 26,217 pengamatan. Untuk melakukan impor data menggunakan readr, pada kasus ini memerlukan user time selama sekitar 0.2 detik.

system.time(accident<-read.csv("https://vincentarelbundock.github.io/Rdatasets/csv/DAAG/nassCDS.csv"))
##    user  system elapsed 
##    2.86    0.00    2.97

Perhatikan bahwa untuk mengimpor data yang sama menggunakan fungsi read.csv(), cenderung memerlukan waktu yang lebih lama, ini terlihat dari user time sekitar 3 detik.

Pipes (%>%) Operator

Operator pipes (%>%) sangat populer digunakan oleh pengguna tidyverse. Fungsi ini awalnya dikembangkan pada package magrittr yang juga merupakan bagian dari package dplyr. Perhatikan contoh berikut untuk lebih memahami fungsi dari operator tersebut.

mean(iris$Sepal.Length)
## [1] 5.843333

atau

iris$Sepal.Length %>% mean()
## [1] 5.843333

Kedua fungsi di atas menghasilkan angka yang sama. Konsep tidyverse memungkinkan pengguna menggunakan operator %>% agar lebih mudah dalam memahami script karena script tersebut menunjukkan urutan fungsi yang digunakan. Perhatikan contoh berikut ini.

x <- c(0.109, 0.359, 0.63, 0.996, 0.515, 0.142, 0.017, 0.829, 0.907)
# Compute the logarithm of `x`, return suitably lagged and iterated differences, 
# compute the exponential function and round the result
round(exp(diff(log(x))), 1)
## [1]  3.3  1.8  1.6  0.5  0.3  0.1 48.8  1.1

Dengan fungsi %>%, fungsi di atas dapat dituliskan sebagai berikut.

# Perform the same computations on `x` as above
x %>% log() %>%
    diff() %>%
    exp() %>%
    round(1)
## [1]  3.3  1.8  1.6  0.5  0.3  0.1 48.8  1.1

Informasi lebih lengkap tentang operator pipes dapat pula dilihat pada Willems (2017) atau silahkan klik di sini.

Introduction to dplyr Package

Seperti dijelaskan sebelumnya, tidyverse merupakan kumpulan dari beberapa package, salah satunya adalah package dplyr. Berikut adalah beberapa contoh penggunaan package dplyr.

Fungsi summarise()

Pertama, contohnya penggunaan fungsi summarise() untuk meringkas data.

#menghitung rata-rata Sepal length setiap species
iris %>% group_by(Species) %>% summarise(mean=mean(Sepal.Length), .groups='drop')

Fungsi arrange()

Menggunakan fungsi arrange() untuk mengurutkan data.

#mengurutkan berdasarkan peubah Sepal.Length dari nilai terkecil
iris %>% arrange(Sepal.Length)
#mengurutkan berdasarkan peubah Sepal.Length dari nilai terbesar
iris %>% arrange(desc(Sepal.Length))

Fungsi filter()

Menggunakan fungsi filter() untuk memilih sebagian data berdasarkan nilai tertentu.

iris %>% filter(Species=="setosa")

Fungsi select()

Fungsi select() dapat digunakan untuk memilih subset data berdasarkan peubah tertentu.

iris %>% select(Species,Petal.Width,Petal.Length)

Fungsi mutate()

Menggunakan fungsi mutate() untuk menambahkan peubah baru pada data.

iris %>% mutate(sepal=Sepal.Length+Sepal.Width)

Berbagai fungsi pada package dplyr dapat dilihat pada cheatsheet yang dapat diakses pada link ini.

Case Study: Baseball Data Set

Studi kasus dilakukan dengan menggunakan data baseball yang terdapat pada package Lahman. Untuk itu package tersebut perlu diinstall dan di-load terlebih dulu dengan script berikut:

install.packages("Lahman")
library(Lahman)

Setelah itu, kita dapat memanggil data yang akan digunakan, yaitu data Teams.

data("Teams")

Untuk mengetahui deskripsi data Teams, kita dapat menggunakan perintah help() atau ?? berikut.

??Teams

Menurut Lahman (2020), “The updated version of the database contains complete batting and pitching statistics from 1871 to 2019, plus fielding statistics, standings, team stats, managerial records, post-season data, and more”.

Data Exploration

Fungsi dim dapat digunakan untuk mengetahui ukuran data sedangkan fungsi glimpse dan head dapat digunakan untuk melihat pratinjau dari data.

dim(Teams)
## [1] 2925   48

Artinya, data Teams terdiri dari 2925 baris (pengamatan) dan 48 kolom (peubah).

head(Teams)
glimpse(Teams)

Filtering

Seandainya seorang pemain bernama Ben bergabung dengan tim New York Mets selama tahun 2004 hingga 2012, cobalah untuk meneliti bagaimana performa tim pada periode tersebut. Fungsi filter dan select dapat digunakan untuk mengidentifikasi secara cepat untuk menjawab pertanyaan tersebut.Sebagai catatan, NYN merupakan singkatan dari klub New York National League.

Langkah pertama adalah melakukan filter pada data Teams sehingga diperoleh hanya data untuk tim New York Mets.

mets<-Teams %>% filter(teamID=="NYN")
nrow(mets)
## [1] 58

Perhatikan bahwa terdapat 58 pengamatan pada data, dimulai dari tahun 1962. Hal ini karena tim the Mets baru bergabung dengan National League pada tahun 1962.

Langkah berikutnya adalah memfilter data hanya ketika Ben bergabung dengan tim, yaitu pada tahun 2004 dan 2012.

myMets<-mets %>% filter(yearID %in% 2004:2012)
myMets %>% select(yearID, teamID, W, L)

Hal ini juga dapat dilakukan sedemikian sehingga kita tidak perlu membuat data baru, sehingga kinerja program menjadi lebih efisien.

Teams %>%
  select(yearID, teamID, W, L) %>%
  filter(teamID=="NYN" & yearID %in% 2004:2012)

Script di atas dikenal pula sebagai piping syntax yang tersedia pada package dplyr. Output tersebut menunjukkan performa tim berdasarkan banyaknya kemenangan (wins (W)) dan kekalahan (losses (L)) selama Ben berada pada tim the Mets.

Setelah mencermati tabel di atas, dapat dilihat bahwa tim The Mets lebih banyak mengalami kekalahan pada periode tersebut. Untuk menelesuri apakah ini terjadi secara kebetulan atau tidak, maka kita perlu meneliti berapa rata-rata kemenangan the Mets yang sesungguhnya. Pertanyaan ini akan dapat terjawab setelah kita mempelajari lebih jauh tentang data wrangling.

Exercise

This exercise is adapted from Speegle & Clair (2020).

This problem uses the package Lahman which you will probably need to install. Consider the data set Batting, which should now be available. It contains batting statistics of all major league players broken down by season since 1871.

  • Use the command head(Batting) to get a look at the first six lines of data.

  • What is the most number of triples (X3B) that have been hit in a single season?

  • What is the playerID(s) of the person(s) who hit the most number of triples in a single season? In what year did it happen?

  • Which player hit the most number of triples in a single season since 1960?

References

Baumer, B.S., Kaplan, D.T., Horton, N.J. 2017. Modern Data Science with R. CRC Press.

Hidayatuloh, A. (June 10, 2019). Eksplorasi data Menggunakan R (Tidyverse approach). Retrieved from https://rstudio-pubs-static.s3.amazonaws.com/503447_57eb680b5be348b6b965df58e354767

Huynh, Y. W. (2019, August 6). Chapter 4 introduction to Tidyverse | R for graduate students. Retrieved from https://bookdown.org/yih_huynh/Guide-to-R-Book/tidyverse.html

Lahman, S. (2020, April 3). Lahman’s baseball database. SeanLahman.com. Retrieved from https://www.seanlahman.com/baseball-archive/statistics/

Oliver, J. (n.d.). Introduction to tidyverse packages. Retrieved from https://jcoliver.github.io/learn-r/012-intro-tidyverse.html

Panggola, S.A. (2020, January 6). Ekplorasi data Menggunakan packages Tidyverse Di R (Part 1). Retrieved from https://medium.com/@17611078/ekplorasi-data-menggunakan-packages-tidyverse-di-r-part-1-de463e92b6fb

Speegle, D., & Clair, B. (2020, August 10). Chapter 1 data in R | Foundations of statistics with R. SLU Mathematics and Statistics : Department of Mathematics and Statistics. https://mathstat.slu.edu/~speegle/_book/RData.html

Willems, K. (2017, November 17). Pipes in R tutorial for beginners. DataCamp Community. Retrieved from https://www.datacamp.com/community/tutorials/pipe-r-tutorial