title: “Data Wrangling with R” author: “Dwike Reza fahrezy - 15425053” output: html_document ———————

Setup

library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.2.0     ✔ readr     2.2.0
## ✔ forcats   1.0.1     ✔ stringr   1.6.0
## ✔ ggplot2   4.0.2     ✔ tibble    3.3.1
## ✔ lubridate 1.9.5     ✔ tidyr     1.3.2
## ✔ purrr     1.2.1     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(nycflights13)

Dataset yang digunakan adalah flights dataset dari package nycflights13.


Data Wrangling

Data wrangling adalah proses membersihkan, memodifikasi, dan mentransformasikan data agar siap untuk dianalisis. Dalam R, proses ini biasanya dilakukan menggunakan package dplyr yang merupakan bagian dari tidyverse.


Pipe Operator

Pipe operator %>% digunakan untuk menggabungkan beberapa langkah analisis menjadi satu alur yang mudah dibaca.

flights %>%
  head()
## # A tibble: 6 × 19
##    year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time
##   <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>
## 1  2013     1     1      517            515         2      830            819
## 2  2013     1     1      533            529         4      850            830
## 3  2013     1     1      542            540         2      923            850
## 4  2013     1     1      544            545        -1     1004           1022
## 5  2013     1     1      554            600        -6      812            837
## 6  2013     1     1      554            558        -4      740            728
## # ℹ 11 more variables: arr_delay <dbl>, carrier <chr>, flight <int>,
## #   tailnum <chr>, origin <chr>, dest <chr>, air_time <dbl>, distance <dbl>,
## #   hour <dbl>, minute <dbl>, time_hour <dttm>

Pipe membaca kode dari kiri ke kanan seperti alur kerja analisis data.


filter()

Fungsi filter() digunakan untuk memilih baris data berdasarkan kondisi tertentu.

flights %>%
  filter(carrier == "AS")
## # A tibble: 714 × 19
##     year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time
##    <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>
##  1  2013     1     1      724            725        -1     1020           1030
##  2  2013     1     1     1808           1815        -7     2111           2130
##  3  2013     1     2      722            725        -3      949           1030
##  4  2013     1     2     1818           1815         3     2131           2130
##  5  2013     1     3      724            725        -1     1012           1030
##  6  2013     1     3     1817           1815         2     2121           2130
##  7  2013     1     4      725            725         0     1031           1030
##  8  2013     1     4     1808           1815        -7     2101           2130
##  9  2013     1     5      725            725         0     1011           1030
## 10  2013     1     5     1803           1815       -12     2118           2130
## # ℹ 704 more rows
## # ℹ 11 more variables: arr_delay <dbl>, carrier <chr>, flight <int>,
## #   tailnum <chr>, origin <chr>, dest <chr>, air_time <dbl>, distance <dbl>,
## #   hour <dbl>, minute <dbl>, time_hour <dttm>

Kode ini memilih semua penerbangan dari maskapai Alaska Airlines.


select()

Fungsi select() digunakan untuk memilih kolom tertentu dari dataset.

flights %>%
  select(year, month, day, dep_delay)
## # A tibble: 336,776 × 4
##     year month   day dep_delay
##    <int> <int> <int>     <dbl>
##  1  2013     1     1         2
##  2  2013     1     1         4
##  3  2013     1     1         2
##  4  2013     1     1        -1
##  5  2013     1     1        -6
##  6  2013     1     1        -4
##  7  2013     1     1        -5
##  8  2013     1     1        -3
##  9  2013     1     1        -3
## 10  2013     1     1        -2
## # ℹ 336,766 more rows

Kode ini hanya mengambil beberapa kolom yang diperlukan.


mutate()

Fungsi mutate() digunakan untuk membuat variabel baru dari variabel yang sudah ada.

flights %>%
  mutate(total_delay = dep_delay + arr_delay)
## # A tibble: 336,776 × 20
##     year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time
##    <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>
##  1  2013     1     1      517            515         2      830            819
##  2  2013     1     1      533            529         4      850            830
##  3  2013     1     1      542            540         2      923            850
##  4  2013     1     1      544            545        -1     1004           1022
##  5  2013     1     1      554            600        -6      812            837
##  6  2013     1     1      554            558        -4      740            728
##  7  2013     1     1      555            600        -5      913            854
##  8  2013     1     1      557            600        -3      709            723
##  9  2013     1     1      557            600        -3      838            846
## 10  2013     1     1      558            600        -2      753            745
## # ℹ 336,766 more rows
## # ℹ 12 more variables: arr_delay <dbl>, carrier <chr>, flight <int>,
## #   tailnum <chr>, origin <chr>, dest <chr>, air_time <dbl>, distance <dbl>,
## #   hour <dbl>, minute <dbl>, time_hour <dttm>, total_delay <dbl>

Kode ini membuat variabel baru bernama total_delay.


summarize()

Fungsi summarize() digunakan untuk membuat ringkasan statistik dari suatu variabel.

flights %>%
  summarize(mean_delay = mean(dep_delay, na.rm = TRUE))
## # A tibble: 1 × 1
##   mean_delay
##        <dbl>
## 1       12.6

Kode ini menghitung rata-rata delay keberangkatan.


group_by()

Fungsi group_by() digunakan untuk mengelompokkan data sebelum membuat ringkasan statistik.

flights %>%
  group_by(carrier) %>%
  summarize(mean_delay = mean(dep_delay, na.rm = TRUE))
## # A tibble: 16 × 2
##    carrier mean_delay
##    <chr>        <dbl>
##  1 9E           16.7 
##  2 AA            8.59
##  3 AS            5.80
##  4 B6           13.0 
##  5 DL            9.26
##  6 EV           20.0 
##  7 F9           20.2 
##  8 FL           18.7 
##  9 HA            4.90
## 10 MQ           10.6 
## 11 OO           12.6 
## 12 UA           12.1 
## 13 US            3.78
## 14 VX           12.9 
## 15 WN           17.7 
## 16 YV           19.0

Kode ini menghitung rata-rata delay untuk setiap maskapai.


arrange()

Fungsi arrange() digunakan untuk mengurutkan data.

flights %>%
  arrange(dep_delay)
## # A tibble: 336,776 × 19
##     year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time
##    <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>
##  1  2013    12     7     2040           2123       -43       40           2352
##  2  2013     2     3     2022           2055       -33     2240           2338
##  3  2013    11    10     1408           1440       -32     1549           1559
##  4  2013     1    11     1900           1930       -30     2233           2243
##  5  2013     1    29     1703           1730       -27     1947           1957
##  6  2013     8     9      729            755       -26     1002            955
##  7  2013    10    23     1907           1932       -25     2143           2143
##  8  2013     3    30     2030           2055       -25     2213           2250
##  9  2013     3     2     1431           1455       -24     1601           1631
## 10  2013     5     5      934            958       -24     1225           1309
## # ℹ 336,766 more rows
## # ℹ 11 more variables: arr_delay <dbl>, carrier <chr>, flight <int>,
## #   tailnum <chr>, origin <chr>, dest <chr>, air_time <dbl>, distance <dbl>,
## #   hour <dbl>, minute <dbl>, time_hour <dttm>

Untuk mengurutkan dari nilai terbesar:

flights %>%
  arrange(desc(dep_delay))
## # A tibble: 336,776 × 19
##     year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time
##    <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>
##  1  2013     1     9      641            900      1301     1242           1530
##  2  2013     6    15     1432           1935      1137     1607           2120
##  3  2013     1    10     1121           1635      1126     1239           1810
##  4  2013     9    20     1139           1845      1014     1457           2210
##  5  2013     7    22      845           1600      1005     1044           1815
##  6  2013     4    10     1100           1900       960     1342           2211
##  7  2013     3    17     2321            810       911      135           1020
##  8  2013     6    27      959           1900       899     1236           2226
##  9  2013     7    22     2257            759       898      121           1026
## 10  2013    12     5      756           1700       896     1058           2020
## # ℹ 336,766 more rows
## # ℹ 11 more variables: arr_delay <dbl>, carrier <chr>, flight <int>,
## #   tailnum <chr>, origin <chr>, dest <chr>, air_time <dbl>, distance <dbl>,
## #   hour <dbl>, minute <dbl>, time_hour <dttm>

join()

Join digunakan untuk menggabungkan dua dataset berdasarkan kolom yang sama.

flights %>%
  inner_join(airlines, by = "carrier")
## # A tibble: 336,776 × 20
##     year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time
##    <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>
##  1  2013     1     1      517            515         2      830            819
##  2  2013     1     1      533            529         4      850            830
##  3  2013     1     1      542            540         2      923            850
##  4  2013     1     1      544            545        -1     1004           1022
##  5  2013     1     1      554            600        -6      812            837
##  6  2013     1     1      554            558        -4      740            728
##  7  2013     1     1      555            600        -5      913            854
##  8  2013     1     1      557            600        -3      709            723
##  9  2013     1     1      557            600        -3      838            846
## 10  2013     1     1      558            600        -2      753            745
## # ℹ 336,766 more rows
## # ℹ 12 more variables: arr_delay <dbl>, carrier <chr>, flight <int>,
## #   tailnum <chr>, origin <chr>, dest <chr>, air_time <dbl>, distance <dbl>,
## #   hour <dbl>, minute <dbl>, time_hour <dttm>, name <chr>

Kode ini menggabungkan dataset flights dengan dataset airlines.


Contoh Pipeline Data Wrangling

Contoh penggunaan beberapa fungsi sekaligus dalam satu pipeline.

flights %>%
  filter(dep_delay > 60) %>%
  group_by(carrier) %>%
  summarize(avg_delay = mean(dep_delay, na.rm = TRUE)) %>%
  arrange(desc(avg_delay))
## # A tibble: 16 × 2
##    carrier avg_delay
##    <chr>       <dbl>
##  1 HA           243.
##  2 VX           146.
##  3 FL           145.
##  4 F9           145.
##  5 DL           136.
##  6 WN           132.
##  7 9E           124.
##  8 AA           123.
##  9 UA           121.
## 10 AS           118.
## 11 EV           118.
## 12 B6           118.
## 13 YV           117.
## 14 US           116.
## 15 MQ           115.
## 16 OO           109.

Langkah yang dilakukan:

  1. Memilih penerbangan dengan delay lebih dari 60 menit
  2. Mengelompokkan data berdasarkan maskapai
  3. Menghitung rata-rata delay
  4. Mengurutkan dari delay terbesar