Tugas Akhir Praktikum Mandarel

A. Contoh Akses Database

Dalam mengakses database di R, diperlukan package DBI dan RSQlite. Jadi kita perlu memastikan bahwa kedua package tersebut telah terinstall.

install.packages(c("RSQLite", "DBI"), dependencies = TRUE)

Kemudian, panggil package tersebut dengan fungsi library().

library(RSQLite)
library(DBI)

1. Engine SQL

Untuk menggunakan SQL engine di R, pengguna perlu membuat suatu objek connection sebagai variabel yang menghubungkan SQL dengan R.

x <- DBI::dbConnect(RSQLite::SQLite(), "C:/sqlite/Company.db")

Demonstrasi di atas menunjukkan pembuatan variabel x sebagai objek connection dengan engine SQL pada file tertentu yang dirujuk di device pengguna.

Dengan hal tersebut, pengguna dapat menggunakan syntax SQL di R. Sebagai contoh :

SELECT
  *
FROM
  Employee
WHERE
  Sex="M";
5 records
Fname Minit Lname Ssn Bdate Address Sex Salary Super_ssn Dno
John B Smith 123456789 1965-01-09 731 Fondren, Houston TX M 30000 333445555 5
Franklin T Wong 333445555 1965-12-08 638 Voss, Houston TX M 40000 888665555 5
Ramesh K Narayan 666884444 1962-09-15 975 Fire Oak, Humble TX M 38000 333445555 5
Ahmad V Jabbar 987987987 1969-03-29 980 Dallas, Houston TX M 25000 987654321 4
James E Borg 888665555 1937-11-10 450 Stone, Houston TX M 55000 NA 1

2. Menggunakan DPLYR

Sama seperti sebelumnya, untuk memanggil suatu database, pengguna perlu membuat variabel baru :

company <- DBI::dbConnect(RSQLite::SQLite(), "C:/sqlite/Company.db")

dengan kelas :

class(company)
## [1] "SQLiteConnection"
## attr(,"package")
## [1] "RSQLite"

Untuk melihat ada tabel apa saja pada company :

RSQLite::dbListTables(company)
## [1] "DEPARTMENT"     "DEPENDENT"      "DEPT_LOCATIONS" "EMPLOYEE"      
## [5] "PROJECT"        "WORKS_ON"

Selanjutnya, untuk dapat menggunakan fungsi-fungsi dplyr, kita pengguna perlu memanggil package yang akan digunakan. Pengguna dapat memanggil package dplry dan dbplyr atau hanya memanggil package tidyverse yang mencakup keduanya sekaligus.

library(tidyverse)

Dengan fungsi dplyr, kita dapat memanggil tabel spesifik dari database company, untuk digunakan sebagai variabel baru di R :

employee <- dplyr::tbl(company, "Employee")
employee
## # Source:   table<Employee> [?? x 10]
## # Database: sqlite 3.36.0 [C:\sqlite\Company.db]
##   Fname    Minit Lname   Ssn       Bdate  Address   Sex   Salary Super_ssn   Dno
##   <chr>    <chr> <chr>   <chr>     <chr>  <chr>     <chr>  <int> <chr>     <int>
## 1 John     B     Smith   123456789 1965-~ 731 Fond~ M      30000 333445555     5
## 2 Franklin T     Wong    333445555 1965-~ 638 Voss~ M      40000 888665555     5
## 3 Alicia   J     Zelaya  999887777 1968-~ 3321 Cas~ F      25000 987654321     4
## 4 Jennifer S     Wallace 987654321 1941-~ 291 Berr~ F      43000 888665555     4
## 5 Ramesh   K     Narayan 666884444 1962-~ 975 Fire~ M      38000 333445555     5
## 6 Joyce    A     English 453453453 1972-~ 5631 Ric~ F      25000 333445555     5
## 7 Ahmad    V     Jabbar  987987987 1969-~ 980 Dall~ M      25000 987654321     4
## 8 James    E     Borg    888665555 1937-~ 450 Ston~ M      55000 <NA>          1

Fungsi lain dplyr yaitu berada pada penggunaan operator pipe %>%. Operator pipe sangat bermafaat untuk menuliskan banyak operasi secara sekuensial atau berurutan. Contoh penggunaannya :

y <- employee %>%
  select(Fname, Lname, Ssn, Salary) %>%
  filter(Salary>=30000) %>%
  arrange(salary)
y
## # Source:     lazy query [?? x 4]
## # Database:   sqlite 3.36.0 [C:\sqlite\Company.db]
## # Ordered by: salary
##   Fname    Lname   Ssn       Salary
##   <chr>    <chr>   <chr>      <int>
## 1 John     Smith   123456789  30000
## 2 Ramesh   Narayan 666884444  38000
## 3 Franklin Wong    333445555  40000
## 4 Jennifer Wallace 987654321  43000
## 5 James    Borg    888665555  55000

Syntax di atas memanggil tabel employee dan mencetak nama, Ssn, dan gaji dari setiap karyawan yang tidak kurang dari 30000, kemudian diurutkan dari gaji yang terkecil.

Untuk memperlihatkan bagaimana jika fungsi tersebut dijalankan di SQL, pengguna dapat menggunakan syntax sebagai berikut :

dplyr::show_query(y)
## <SQL>
## SELECT *
## FROM (SELECT `Fname`, `Lname`, `Ssn`, `Salary`
## FROM `Employee`)
## WHERE (`Salary` >= 30000.0)
## ORDER BY `salary`

B. Data Wrangling

Pada bagian ini, kita akan menggunakan dataset Orange yang telah tersedia pada library datasets di R.

library(datasets)
Orange
##    Tree  age circumference
## 1     1  118            30
## 2     1  484            58
## 3     1  664            87
## 4     1 1004           115
## 5     1 1231           120
## 6     1 1372           142
## 7     1 1582           145
## 8     2  118            33
## 9     2  484            69
## 10    2  664           111
## 11    2 1004           156
## 12    2 1231           172
## 13    2 1372           203
## 14    2 1582           203
## 15    3  118            30
## 16    3  484            51
## 17    3  664            75
## 18    3 1004           108
## 19    3 1231           115
## 20    3 1372           139
## 21    3 1582           140
## 22    4  118            32
## 23    4  484            62
## 24    4  664           112
## 25    4 1004           167
## 26    4 1231           179
## 27    4 1372           209
## 28    4 1582           214
## 29    5  118            30
## 30    5  484            49
## 31    5  664            81
## 32    5 1004           125
## 33    5 1231           142
## 34    5 1372           174
## 35    5 1582           177

Pada dataset tersebut, akan digunakan fungsi select, arrange, filter, mutate, dan summarise.

Select

Perintah select berfungsi untuk memilih kolom tertentu saja untuk dicetak.

Orange %>% select(age, circumference)
##     age circumference
## 1   118            30
## 2   484            58
## 3   664            87
## 4  1004           115
## 5  1231           120
## 6  1372           142
## 7  1582           145
## 8   118            33
## 9   484            69
## 10  664           111
## 11 1004           156
## 12 1231           172
## 13 1372           203
## 14 1582           203
## 15  118            30
## 16  484            51
## 17  664            75
## 18 1004           108
## 19 1231           115
## 20 1372           139
## 21 1582           140
## 22  118            32
## 23  484            62
## 24  664           112
## 25 1004           167
## 26 1231           179
## 27 1372           209
## 28 1582           214
## 29  118            30
## 30  484            49
## 31  664            81
## 32 1004           125
## 33 1231           142
## 34 1372           174
## 35 1582           177

Arrange

Perintah arrange berfungsi untuk mengurutkan tabel berdasarkan kolom tertentu. Default dari perintah ini adalah pengurutan dari yang terkecil. Kita bisa menggunakan fungsi desc untuk mengurutkannya dari yang terbesar (atau dari Z dalam alfabet).

Orange %>% arrange(desc(circumference))
##    Tree  age circumference
## 1     4 1582           214
## 2     4 1372           209
## 3     2 1372           203
## 4     2 1582           203
## 5     4 1231           179
## 6     5 1582           177
## 7     5 1372           174
## 8     2 1231           172
## 9     4 1004           167
## 10    2 1004           156
## 11    1 1582           145
## 12    1 1372           142
## 13    5 1231           142
## 14    3 1582           140
## 15    3 1372           139
## 16    5 1004           125
## 17    1 1231           120
## 18    1 1004           115
## 19    3 1231           115
## 20    4  664           112
## 21    2  664           111
## 22    3 1004           108
## 23    1  664            87
## 24    5  664            81
## 25    3  664            75
## 26    2  484            69
## 27    4  484            62
## 28    1  484            58
## 29    3  484            51
## 30    5  484            49
## 31    2  118            33
## 32    4  118            32
## 33    1  118            30
## 34    3  118            30
## 35    5  118            30

Filter

filter digunakan untuk menyeleksi atau memilih baris berdasarkan nilai tertentu.

Orange %>% filter(age>1000)
##    Tree  age circumference
## 1     1 1004           115
## 2     1 1231           120
## 3     1 1372           142
## 4     1 1582           145
## 5     2 1004           156
## 6     2 1231           172
## 7     2 1372           203
## 8     2 1582           203
## 9     3 1004           108
## 10    3 1231           115
## 11    3 1372           139
## 12    3 1582           140
## 13    4 1004           167
## 14    4 1231           179
## 15    4 1372           209
## 16    4 1582           214
## 17    5 1004           125
## 18    5 1231           142
## 19    5 1372           174
## 20    5 1582           177

Mutate

Selain menggunakan kolom yang sudah tersedia dalam data, seringkali kita ingin membuat kolom baru yang merupakan turunan dari kolom yang sudah ada. mutate adalah perintah yang dapat membuat kolom baru tersebut. Dalam bahasan ini, saya akan membuat variabel baru growth yang menunjukkan perbandingan antara umur (age) jeruk dan kelilingnya (circumference). Misalkan satuan dari age adalah hari, dan satuan circumference adalah cm. Maka interpretasi growth adalah banyaknya hari yang diperlukan jeruk untuk menumbuhkan 1 cm kelilingnya.

Orange %>% mutate(growth=age/circumference)
##    Tree  age circumference    growth
## 1     1  118            30  3.933333
## 2     1  484            58  8.344828
## 3     1  664            87  7.632184
## 4     1 1004           115  8.730435
## 5     1 1231           120 10.258333
## 6     1 1372           142  9.661972
## 7     1 1582           145 10.910345
## 8     2  118            33  3.575758
## 9     2  484            69  7.014493
## 10    2  664           111  5.981982
## 11    2 1004           156  6.435897
## 12    2 1231           172  7.156977
## 13    2 1372           203  6.758621
## 14    2 1582           203  7.793103
## 15    3  118            30  3.933333
## 16    3  484            51  9.490196
## 17    3  664            75  8.853333
## 18    3 1004           108  9.296296
## 19    3 1231           115 10.704348
## 20    3 1372           139  9.870504
## 21    3 1582           140 11.300000
## 22    4  118            32  3.687500
## 23    4  484            62  7.806452
## 24    4  664           112  5.928571
## 25    4 1004           167  6.011976
## 26    4 1231           179  6.877095
## 27    4 1372           209  6.564593
## 28    4 1582           214  7.392523
## 29    5  118            30  3.933333
## 30    5  484            49  9.877551
## 31    5  664            81  8.197531
## 32    5 1004           125  8.032000
## 33    5 1231           142  8.669014
## 34    5 1372           174  7.885057
## 35    5 1582           177  8.937853

Summarise

Perintah summarise berfungsi untuk meringkas atau mengagregasi baris data. Dalam bahasan ini, saya akan menggunakan fungsi tambahan yaitu group_by supaya informasi yang dicetak lebih bisa diaplikasikan.

Orange %>% group_by(Tree) %>% 
           summarise(avg_age=mean(age), avg_circumference=mean(circumference))
## # A tibble: 5 x 3
##   Tree  avg_age avg_circumference
##   <ord>   <dbl>             <dbl>
## 1 3        922.              94  
## 2 1        922.              99.6
## 3 5        922.             111. 
## 4 2        922.             135. 
## 5 4        922.             139.

Melakukan kelima perintah secara bersamaan

Orange %>% select(Tree, age, circumference) %>% 
           arrange(desc(circumference)) %>% 
           filter(age>1000) %>% 
           mutate(growth=age/circumference) %>% 
           summarise(avg_age=mean(age), avg_circumference=mean(circumference),
                     avg_growth=mean(growth))
##   avg_age avg_circumference avg_growth
## 1 1297.25            157.25   8.462347