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";| 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