Mengubah data harian menjadi data periode bulanan, triwulanan, dan tahunan |
Halo teman-teman, berjumpa kembali dengan blog sederhana ini. Setelah membahas mengenai visualisasi menggunakan Gephi, kita coba balik lagi menggunakan R dan membahas visualisasi data runtun waktu (time series data).
Data runtun waktu atau time series merupakan salah satu jenis data yang paling diminati banyak penelitian. Sebab, dengan menggunakan data runtun waktu, selain kita dapat mempelajari pola sebuah data, kita dapat pula melakukan prediksi atau peramalan beberapa waktu ke depan atau beberapa waktu ke belakang menggunakan pola dari data tersebut. Kendati demikian, dalam pemodelan menggunakan runtun waktu atau time series ini biasa rentan sekali terganggu oleh asumsi autokorelasi atau korelasi serial antar residual antar waktu amatan.
Kali ini kita akan mencoba belajar bagaimana melakukan manipulasi data atau istilah kerennya data manipulation menggunakan 2 jenis package yang kalau di Python, mirip dengan package pandas, yaitu package lubridate dan dplyr. Inti perbedaan dari kedua package ini, kalau lubridate adalah package untuk manipulasi pada aspek waktu atau periode dari sebuah data, sedangkan package dplyr biasanya digunakan untuk melakukan manipulasi salah satunya pada aspek agregasi data atau pivot data.
Data manipulation merupakan sebuah proses mengubah struktur data agar lebih mudah dibaca dan lebih terorganisir untuk disajikan atau digunakan pada proses berikutnya
Untuk praktikum menggunakan dua package ini, saya telah menyiapkan data periode harian jumlah penerbangan komersil yang tercatat secara realtime di Bandar Udara Juanda Surabaya di Sidoarjo Jawa Timur selama 2019. Data ini saya peroleh dengan menggunakan teknik web scraping menggunakan R. Bagi teman-teman yang ingin belajar mengenai web scraping dengan R dapat mengunjungi tautan berikut. Adapun data yang saya siapkan tersebut bisa teman-teman unduh terlebih dahulu pada tautan berikut dan setelah itu kita akan melakukan data manipulation menggunakan beberapa code berikut ini:
#Instal dan Aktivasi package
library(lubridate)
library(dplyr)
#Import data
library(readxl)
terbang <- read_excel("C:/Users/Joko Ade/Downloads/terbang.xlsx")
head(terbang, 10)
## # A tibble: 10 x 2
## periode penerbangan
## <dttm> <dbl>
## 1 2019-01-01 00:00:00 128717
## 2 2019-01-02 00:00:00 162303
## 3 2019-01-03 00:00:00 169310
## 4 2019-01-04 00:00:00 173386
## 5 2019-01-05 00:00:00 161288
## 6 2019-01-06 00:00:00 156172
## 7 2019-01-07 00:00:00 163601
## 8 2019-01-08 00:00:00 163535
## 9 2019-01-09 00:00:00 167080
## 10 2019-01-10 00:00:00 172335
#Melihat Struktur data awal
str(terbang)
## tibble [365 x 2] (S3: tbl_df/tbl/data.frame)
## $ periode : POSIXct[1:365], format: "2019-01-01" "2019-01-02" "2019-01-03" ...
## $ penerbangan: num [1:365] 128717 162303 169310 173386 161288 ...
#Mengubah tipe periode menjadi date
terbang$periode <- as.Date(terbang$periode)
#Melihat hasil ubah struktur
str(terbang)
## tibble [365 x 2] (S3: tbl_df/tbl/data.frame)
## $ periode : Date[1:365], format: "2019-01-01" "2019-01-02" "2019-01-03" ...
## $ penerbangan: num [1:365] 128717 162303 169310 173386 161288 ...
#Deskriptif data
summary(terbang)
## periode penerbangan
## Min. :2019-01-01 Min. :120212
## 1st Qu.:2019-04-02 1st Qu.:175300
## Median :2019-07-02 Median :190876
## Mean :2019-07-02 Mean :189019
## 3rd Qu.:2019-10-01 3rd Qu.:203062
## Max. :2019-12-31 Max. :230409
#Menampilkan Histogram
hist(terbang$penerbangan, main = "Histogram Sebaran Jumlah Penerbangan \nBandar Udara Juanda Selama 2019",
xlab = "Jumlah Penerbangan", ylab = "Frekuensi")
Histogram |
#Plot data harian
plot(ts(terbang$penerbangan, start = 2019, frequency = 365),
main = "Jumlah Penerbangan Non-Komersil Harian \nBandar Udara Juanda Selama 2019",
ylab = "Jumlah Penerbangan", xlab = "Periode")
Plot data harian |
#Mengubah data harian menjadi data mingguan
terbang$minggu <- floor_date(terbang$periode, "week")
terbang %>%
group_by(minggu) %>%
summarize(jumlah = sum(penerbangan))
## # A tibble: 53 x 2
## minggu jumlah
## <date> <dbl>
## 1 2018-12-30 795004
## 2 2019-01-06 1139166
## 3 2019-01-13 1123597
## 4 2019-01-20 1150497
## 5 2019-01-27 1143284
## 6 2019-02-03 1130726
## 7 2019-02-10 1167594
## 8 2019-02-17 1188634
## 9 2019-02-24 1213346
## 10 2019-03-03 1189471
## # ... with 43 more rows
#Visualisasi data mingguan
w <- terbang %>%
group_by(minggu) %>%
summarize(jumlah = sum(penerbangan))
plot(ts(w$jumlah, start = 2019, frequency = 53),
main = "Jumlah Penerbangan Non-Komersil Mingguan \nBandar Udara Juanda Selama 2019",
ylab = "Jumlah Penerbangan", xlab = "Periode")
Plot data mingguan |
#Mengubah data harian menjadi bulanan
terbang$bulan <- floor_date(terbang$periode, "month")
terbang %>%
group_by(bulan) %>%
summarize(jumlah = sum(penerbangan))
## # A tibble: 12 x 2
## bulan jumlah
## <date> <dbl>
## 1 2019-01-01 5030796
## 2 2019-02-01 4687711
## 3 2019-03-01 5480727
## 4 2019-04-01 5568775
## 5 2019-05-01 5939960
## 6 2019-06-01 6141644
## 7 2019-07-01 6527801
## 8 2019-08-01 6525953
## 9 2019-09-01 6096469
## 10 2019-10-01 6005009
## 11 2019-11-01 5510504
## 12 2019-12-01 5476661
#Visualisasi data mingguan
m <- terbang %>%
group_by(bulan) %>%
summarize(jumlah = sum(penerbangan))
plot(ts(m$jumlah, start = 2019.1, frequency = 12),
main = "Jumlah Penerbangan Non-Komersil Bulanan \nBandar Udara Juanda Selama 2019",
ylab = "Jumlah Penerbangan", xlab = "Periode")
Plot data bulanan |
#Mengubah data bulanan menjadi data triwulanan
terbang %>%
mutate(quarter = paste(quarters(periode), year(periode)), year = year(periode)) %>%
group_by(quarter, year, .add = T) %>%
summarise(jumlah = sum(penerbangan)) %>%
arrange(year)
## `summarise()` has grouped output by 'quarter'. You can override using the `.groups` argument.
## # A tibble: 4 x 3
## # Groups: quarter [4]
## quarter year jumlah
## <chr> <dbl> <dbl>
## 1 Q1 2019 2019 15199234
## 2 Q2 2019 2019 17650379
## 3 Q3 2019 2019 19150223
## 4 Q4 2019 2019 16992174
#Visualisasi data
x <- terbang %>%
mutate(triwulan = paste(quarters(periode), year(periode)), tahun = year(periode)) %>%
group_by(triwulan, tahun, .add = T) %>%
summarise(jumlah = sum(penerbangan)) %>%
arrange(tahun)
## `summarise()` has grouped output by 'triwulan'. You can override using the `.groups` argument.
x[-2]
## # A tibble: 4 x 2
## # Groups: triwulan [4]
## triwulan jumlah
## <chr> <dbl>
## 1 Q1 2019 15199234
## 2 Q2 2019 17650379
## 3 Q3 2019 19150223
## 4 Q4 2019 16992174
plot(ts(x$jumlah, start = 2020, frequency = 4), type = "l", col = "blue",
main = "Jumlah Penerbangan Non-Komersil Triwulanan \nBandar Udara Juanda Selama 2019",
ylab = "Jumlah Penerbangan", xlab = "Periode")
Plot data triwulanan |
#Mengubah data bulanan menjadi data tahunan
terbang %>%
mutate(tahun = paste(year(periode)), tahun = year(periode)) %>%
group_by(tahun, .add = T) %>%
summarise(jumlah = sum(penerbangan))
## # A tibble: 1 x 2
## tahun jumlah
## <dbl> <dbl>
## 1 2019 68992010
Demikian sekilas bagaimana kita melakukan data manipulation menggunakan R menggunakan package lubridate dan dplyr. Selamat memahami dan mempraktikkan!