Ekplorasi Data Menggunakan Packages Tidyverse di R (Part 1)
pada pembahasan kali ni, akan dibahas tentang cara mengeksplorasi data menggunakan packages tidyverse di R.
Install Packages
langkah pertama adalah, kita perlu menginstall package tidyverse
dan packages lainnya yang mendukung tidyverse. Gunakan perintah berikut untuk menginstall package yang dibutuhkan.
install.packages(c("readr", "tidyr", "dplyr", "ggplot2"))
# atau
install.packages("tidyverse")
kemudian, panggil package-package tersebut menggunakan fungsi library()
sperti berikut.
# Panggil package yang sudah terisntall
library(readr)
library(tidyr)
library(dplyr)
library(ggplot2)
# atau cukup memanggil
# library(tidyverse)
Package reader
, tidyr
, dplyr
dan ggplot2
(dan beberapa package lain yang tidak digunakan di tutorial ini) termasuk dalam bagian package tidyverse
. tidyverse
adalah kumpulan package yang dibuat oleh Hadley Wickham dkk untuk kebutuhan data science menggunakan R.
RMySQL
digunakan untuk membuat koneksi antara R dan database MySQL. Beberapa fungsi yang akan digunakan pada tutorial ini antara laindbConnect()
yang berasal dari packageDBI
untuk membuat koneksi,dbReadTable()
untuk import data dari database ke R dan fungsidbDisconnect()
untuk memutuskan koneksi yang sudah tidak digunakan.readr
berguna untuk import data dari tabular data file (csv, text file, dll).tidyr
memiliki fungi-fungsi untuk “merapihkan” data. Terutama yang sering digunakan adalah fungsigather()
danspread()
.dplyr
adalah package yang sangat berguna untuk melakukan manipulasi/transformasi data menggunakan R.ggplot2
adalah salah satu package yang sangat banyak digunakan oleh pengguna R untuk kebutuhan visualisasi.
Selanjutnya, kita akan menggunakan dataset bawaan dari R yaitu data penerbangan yang terdiri dari 336,776 penerbangan dari New York City (NYC) selama tahun 2013 yang terdapat dalam packages nycflights13
. Untuk menggunakan dataset, kita perlu menginstall package dan memanggil package untuk menggunakan dataset seperti berikut.
install.packages("nycflights13")
library(nycflights13)
Dalam package nycflights13
terdapat beberapa sheet atau dataset didalamnya. diantaranya:
flights
: semua penerbangan yang berangkat dari NYC di tahun 2013.weather
: data meteorologi per jam untuk masing-masing bandara (airports).planes
: information tentang konstruksi masing-masing pesawat.airports
: nama dan lokasi bandara.airlines
: translasi antara dua huruf kodecarrier
dan namanya.prices
: daftar harga tiket (ticket
) dan biaya (cost
) per penumpang untuk masing-masing penerbangan.specialdays
: daftar hari “istimewa” di Amerika.
Untuk melihat masing-masing data tersebut, gunakan perintah berikut.
nycflights13::nama_data ###untuk melihat dataset##contoh: melihat data flights
nycflights13::flights
tidyverse
menggunakan tibble sebagai pengganti data.frame
. kelebihan dari tibble dibandingkan dengan data.frames
salahsatunya adalah ketika menampilkan data, tibble tidak akan menampilkan semua data seperti pada data.frame
melainkan hanya menampilkan beberapa data dan beberapa variabel sesuai dengan ukuran console R kita.
Eksplorasi Data Menggunakan fungsi dalam package dplyr.
Beberapa fungsi yang dapat digunakan dalam package dplyr yaitu seperti select(), fliter(), dan arrange(). biasanya ketika mengeksplorasi data, fungsi-fungsi ini digunakan secara berurutan.
Sekarang kita akan membuat eksplorasi data dari dataset flights seperti berikut.
###melihat dimensi data (banyak baris dan kolom)
dim(flights) ###melihat tipe data
glimpse(flights)
##atau
str(flights)
dim()
menampilkan banyaknya baris dan kolomdari suatu data frame.
glimpse()
memiliki fungsi yang sama dengan str()
yang bertujuan untuk menampilkan tipe dan struktur data. Fungsi ini juga menampilkan nama variabel, tipe variabel, dan beberapa baris pertama dari data.
Kemudian untuk melihat data, kita dapat menggunakan fungsi head()
atau View()
. perbedaannya adalah head()
hanya menampilkan beberapa data teratas (secara default di R menampilkan 6 data teratas). Sedangkan View()
akan menampilkan keseluruhan data namun tidak dalam console R melainkan pada jendela lain. Selain itu juga untuk melihat data terbawah dapat menggunakan tail()
. Biasanya saat kita menggunakan data baik untuk analisis lainnya atau untuk eksplorasi, kita terlebih dahulu akan melihat deskripsi data berupa ukuran pemusatan data seperti nilai rata-rata, minimum, maksimum, dan lain-lain. pada R dapat digunakan fungsi summary()
untuk menggambarkan deskripsi data tesebut.
#menampilkan data teratas
head(flights)
#menampilkan data terbawah
tail(flights)
#menamipkan keseluruhan data
View(flights)
#menamiplkan deskripsi data
summary(flights)
Mengambil nilai unik (tidak duplikasi) dari sebuah variable dengan distinct()
untuk mengambil nilai unik dari sebuah variabel dapat menggunakan funsgi distinct(nama_data, nama_variabel)
atau jika ingin mengambil nilai unik dari semua baris bedsarkan sebuah variabel, tambahkan atribut .keep_all=TRUE
ke dalam fungsi distinct()
seperti berikut.
#mengambil nilai unik sebuah satu variabel
distinct(flights,year)#mengambil nilai unik seluruh baris variabel
distinct(flights, dest, .keep_all = TRUE)
Memilih atau membuang beberapa variable yang akan/tidak digunakan dengan select()
Untuk membuat data frame dari hasil select()
kita dapat menuliskan namadataframe <- select(...)
. Argumen pertama dari select()
adalah data frame yang ingin kita subset variabel tertentu saja. Selanjutnya tuliskan nama variable yang ingin di buat data frame baru. untuk mengisi arh=gumennya , kita dapat menuliskan nama masing-masing variabel atau dapat juga dengan menuliskan urutan (indeks) variabel.
##menggunakan nama variabel
select(flights, month, day, dep_time, dep_delay, arr_time, arr_delay, origin, dest)##menggunakan indeks variabel
select(flights, c(2:4, 6:7, 9, 13:14))
Jika kita ingin membuang satu variabel, dapat menuliskan nama variabel dengan menambahkan tanda negatif (-
) di depan nama atau indeks masing-masing variabel.
##mengahapus menggunakan nama
select(flights, -year)##menghapus menggunakan indeks
select(flights, -1)
Memilih baris data berdasarkan indeks baris atau nilai pada variabel tertentu dengan slice() dan filter()
Ketika kita ingin memilih sebagian baris saja dari data frame, dapat menggunakan fungsi slice()
atau filter()
.
slice()
berfungsi untuk mensubset baris data berdasarkan indeks barisnya. Misalkan, slice(flights, 1:1000)
berarti kita memilih data pada posisi baris ke-1 s/d ke-1000. Posisi baris 1:1000 adalah vector numerik integer yang ingin dipilih. Jika ingin memilih baris tertentu saja, maka dapat menggunakan vector numerik integer dengan menuliskan indeks variabel yang ingin diambil.
# memilih baris ke-1 s/d 1000
slice(flights, 1:1000)# memilih baris ke-1,3,5,6, dan 10
slice(flights, c(1,3,5,6,10))
filter()
berfungsi untuk memilih sebagian data berdasarkan nilai dari satu atau lebih variabel.
filter(flights, dep_delay >= 10)filter(flights, dep_delay >= 10 & origin == "JFK")filter(flights, month == 1 & day == 1 & origin == "JFK" & dest == "ATL")filter(flights, is.na(dep_time))
Mengurutkan data dengan arrange()
untuk mengurutkan data, dapat menggunakan fungsi arrange()
data akan secara otomatis diurutkan dari nilai yang terbesar.
# Urutkan data frame flights berdasarkan variabel `origin`
arrange(flights, origin)# Urutkan data frame flights berdasarkan variabel `origin` dan `dest`
arrange(flights, origin, dest)
selain itu juga, kita dapat mengurutkan data variabel origin dari yang terbesar (aescending) dan data variabel dest dari yang terkecil (descending) seperti berikut. untuk mengurutkan data dari yang terkecil, digunakan fungsi desc()
di dalam fungsi arrange()
seperti berikut.
# Urutkan data frame flights berdasarkan variabel `origin` dan `dest` secara descending
arrange(flights, origin, desc(dest))
Penanganan missing values
Untuk kebutuhan ilustrasi pada bagian ini dengan fungsi na_if()
, kita akan mengganti nilai NA
(missing value) menjadi sebuah nilai tertentu, misalnya jika air_time
missing akan diganti menjadi nilai -900
.
# Banyaknya NA
sum(is.na(flights["air_time"]))flights_na900 <- flights
# Merubah NA dengan -900
flights_na900$air_time <- if_else(is.na(flights$air_time), -900, flights$air_time)
# Banyaknya NA
sum(is.na(flights_na900["air_time"]))
Selanjutanya, misalkan dari data dengan nilai -900
tadi akan diganti diganti menjadi NA
maka dapat menggunakan perintah berikut.
# Ganti nilai NA menjadi -900
flights_na900$air_time <- na_if(flights_na900$air_time, -900)
# Banyaknya -900
filter(flights_na900, air_time == -900)
setalah data berhasil diganti menjadi NA
. Maka jika kita ingin membuang data NA
tersebut, dapat menggunakan perintah drop_na()
seperti berikut.
# Membuang semua baris yang mengandung NA
flights_dropNA <- drop_na(flights)
# Mengganti NA pada masing-masing variabel dengan nilai tertentu
replace_na(flights, list(dep_time = 0, dep_delay = 0, arr_time = mean(flights$arr_time, na.rm = TRUE), arr_delay = median(flights$arr_delay, na.rm = TRUE)))
Fungsi replace_na()
menggunakan argumen sebuah list
untuk menentukan nilai pengganti NA pada sebuah variabel. Dari contoh di atas, NA pada dep_time
dan dep_delay
diganti menjadi 0 (nol), NA di arr_time
diganti dengan rata-rata arr_time
, sedangkan NA di arr_delay
diganti dengan nilai median dari arr_delay
.
Eksplorasi dengan Operator Pipes %>%
Penjelasan Operator Pipes %>%
Operator pipes digunakan untuk membuat fungsi di R, Misalkan f(a, x)
adalah sebuah fungsi di R dengan argumen a
dan x
. kemudian fungsi g(b, z)
adalah fungsi lain di R dengan argumen b
dan z
. Dengan menggunakan operator %>%
kita dapat menuliskannya sebagai berikut.
# fungsi f(a, x)
f(a, x) # atau
a %>% f(x)# fungsi g(b, z)
g(b, z) # atau
b %>% g(z)
Dari kedua contoh di atas, dapat dilihat bahwa a
adalah argumen pertama untuk fungsi f()
dan b
adalah argumen pertama untuk fungsi g()
. Operator %>%
“menyampaikan” objek a
sebagai nilai untuk mengisi argumen pertama pada fungsi f()
. Perhatikan ilustrasi di bawah ini.
Misalkan objek a
menjadi argumen pertama fungsi f()
dengan a %>% f(x)
. Kemudia hasil dari a %>% f(x)
dijadikan argumen pertama dari fungsi g()
. Dengan kata lain b <- a %>% f(x)
sehingga b %>% g(z)
. Hal ini dapat dilakukan secara berurutan dengan operator %>%
sebagai berikut.
a %>%
f(x) %>%
g(z)
“Fungsi f()
diterapkan terhadap objek a
sebagai argumen pertama dan x
sebagai argumen kedua dari fungsi f()
yang kemudian hasilnya digunakan sebagai argumen pertama pada fungsi g()
dengan z
sebagai argumen kedua.”
fungsi select()
, filter()
, arrange()
dan beberapa fungsi yang lain di dplyr
yang sering digunakan untuk transformasi dan eksplorasi data adalah data frame/tibble atau hasil dari proses sebelumnya. Misalnya, hasil dari fungsi select()
adalah data frame yang kemudian diproses dengan fungsi filter()
untuk memilih baris data tertentu dan hasilnya diteruskan lagi ke fungsi arrange()
untuk diurutkan berdasarkan variabel tertentu.
Dengan konsep tidyverse
, kita dapat menggunakan operator Pipes %>%
agar lebih mudah dalam memahami script karena script tersebut menunjukkan urutan. Perhatikan contoh di bawah ini.
flights %>%
select(dep_delay, arr_time, arr_delay, origin, dest, time_hour) %>%
filter(origin == "JFK" & between(dep_delay, -10, 100)) %>%
arrange(origin, desc(dest))
sintaks dan output diatas artinya, kita mengambil data penerbangan dari data frame flights
kemudian pilih variabel-variabel tertentu saja. Selanjutnya kita filter yang origin
-nya dari”JFK" dan waktu keberangkatan antara yang lebih awal 10 menit dan yang delay hingga 100 menit. Kemudian urutkan hasil tersebut berdasarkan origin
secara ascending dan berdasarkan dest
secara descending.
Membuat variabel baru
Selanjutnya kita akan membuat variabel baru dengan nama is_delay
dan menggunakan fungsi mutate()
. untuk caranya yaitu pertama kita ambil data penerbangan dari data frame flights
kemudian pilih variabel-variabel tertentu saja. Selanjutnya filter yang dest
-nya dari”TPA" dan waktu keberangkatan antara yang lebih awal 5 menit dan yang delay hingga 100 menit. Kemudian urutkan hasil tersebut berdasarkan dest
secara ascending dan berdasarkan origin
secara descending. Setelah itu membuat variabel baru bernama is_delay
yang menunjukkan apakah suatu penerbangan terjadi delay atau tidak. Kemudian konversi variable time_hour
yang masih bertipe character
menjadi datetime
atau <dttm>
dengan nama variabel yang sama, yaitu time_hour
.
flights %>%
select(dep_delay, arr_time, arr_delay, origin, dest, time_hour) %>%
filter(dest == "TPA" & between(dep_delay, -5, 100)) %>%
arrange(dest, desc(origin)) %>%
mutate(is_delay = if_else(dep_delay > 0, 1, 0),
time_hour = as.POSIXct(time_hour))
Sekian untuk pembahasan kali ini, Untuk lanjutannya dapat dibaca disini. Terimakasih…
Sumber:
[1] http://rstudio-pubs-static.s3.amazonaws.com/503447_57eb680b5be348b6b965df58e3547672.html