Tugas Akhir Praktikum Mandarel
A. Contoh Akses Database
Sebelum mengakses database pada aplikasi R, diperlukan package DBI dan RSQlite. Jadi perlu dipastikan 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. Menggunakan Engine SQL
Pengguna perlu membuat suatu objek connection sebagai variabel yang menghubungkan SQL dengan R Untuk menggunakan SQL engine di R.
dt <- DBI::dbConnect(RSQLite::SQLite(), "C:/sqlite/Company.db")Program tersebut menunjukkan pembuatan variabel dt sebagai objek connection dengan engine SQL pada file tertentu yang merujuk ke device pengguna.
Kemudian pengguna dapat menggunakan syntax SQL di R seperti contoh berikut:
SELECT
*
FROM
Employee
WHERE
Salary>=30000;| 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 |
| Jennifer | S | Wallace | 987654321 | 1941-06-20 | 291 Berry, Bellaire TX | F | 43000 | 888665555 | 4 |
| Ramesh | K | Narayan | 666884444 | 1962-09-15 | 975 Fire Oak, Humble TX | M | 38000 | 333445555 | 5 |
| James | E | Borg | 888665555 | 1937-11-10 | 450 Stone, Houston TX | M | 55000 | NA | 1 |
2. Menggunakan DPLYR
Seperti penggunaan engine SQL sebelumnya, diperlukan variabel baru untuk memanggil suatu database.
dt2 <- DBI::dbConnect(RSQLite::SQLite(), "C:/sqlite/Company.db")kelas variabel tersebut diketahui dengan:
class(dt2)## [1] "SQLiteConnection"
## attr(,"package")
## [1] "RSQLite"
Untuk melihat ada tabel apa saja pada company:
RSQLite::dbListTables(dt2)## [1] "DEPARTMENT" "DEPENDENT" "DEPT_LOCATIONS" "EMPLOYEE"
## [5] "PROJECT" "WORKS_ON"
Sebelum menggunakan fungsi-fungsi dplyr, pengguna perlu memanggil package yang akan digunakan terlebih dahulu. Pengguna dapat memanggil package dplry dan dbplyr atau hanya memanggil package tidyverse yang mencakup keduanya sekaligus.
library(dplyr)
library(dbplyr)Dengan menggunakan fungsi dplyr, kita dapat memanggil tabel spesifik dari database dt2 sebagai variabel baru di R:
employee <- dplyr::tbl(dt2, "Employee")
employee## # Source: table<Employee> [?? x 10]
## # Database: sqlite 3.37.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 12345~ 1965-0~ 731 Fondren,~ M 30000 333445555 5
## 2 Frankl~ T Wong 33344~ 1965-1~ 638 Voss, Ho~ M 40000 888665555 5
## 3 Alicia J Zelaya 99988~ 1968-0~ 3321 Castle,~ F 25000 987654321 4
## 4 Jennif~ S Walla~ 98765~ 1941-0~ 291 Berry, B~ F 43000 888665555 4
## 5 Ramesh K Naray~ 66688~ 1962-0~ 975 Fire Oak~ M 38000 333445555 5
## 6 Joyce A Engli~ 45345~ 1972-0~ 5631 Rice, H~ F 25000 333445555 5
## 7 Ahmad V Jabbar 98798~ 1969-0~ 980 Dallas, ~ M 25000 987654321 4
## 8 James E Borg 88866~ 1937-1~ 450 Stone, H~ M 55000 <NA> 1
dplyr juga memudahkan pengguna untuk membuat syntax yang cukup kompleks. Dalam syntax dplyr, fungsi dalam kurung dapat diubah menjadi “%>%” agar lebih mudah terbaca. Contoh penggunaannya :
dt3 <- employee %>%
select(Fname, Ssn, Bdate, Salary) %>%
filter(Salary<=40000) %>%
arrange(Bdate)
dt3## # Source: lazy query [?? x 4]
## # Database: sqlite 3.37.0 [C:\sqlite\Company.db]
## # Ordered by: Bdate
## Fname Ssn Bdate Salary
## <chr> <chr> <chr> <int>
## 1 Ramesh 666884444 1962-09-15 38000
## 2 John 123456789 1965-01-09 30000
## 3 Franklin 333445555 1965-12-08 40000
## 4 Alicia 999887777 1968-01-19 25000
## 5 Ahmad 987987987 1969-03-29 25000
## 6 Joyce 453453453 1972-07-31 25000
Syntax di atas memanggil tabel employee dan mencetak nama pegawai, Ssn, tanggal lahir, dan gaji dari pegawai dengan gaji kurang dari 40000 kemudian diurutkan berdasarkan tanggal lahir.
Pengguna dapat menggunakan syntax berikut untuk melihat bagaimana jika fungsi tersebut dijalankan di SQL:
dplyr::show_query(dt3)## <SQL>
## SELECT *
## FROM (SELECT `Fname`, `Ssn`, `Bdate`, `Salary`
## FROM `Employee`)
## WHERE (`Salary` <= 40000.0)
## ORDER BY `Bdate`
B. Data Wrangling
Pada program Data Wrangling ini kita akan menggunakan dataset Loblolly yang telah tersedia pada default datasets di R.
library(datasets)
LoblollyPada dataset Loblolly, akan digunakan fungsi select, arrange, filter, mutate, dan summarise.
Select
Perintah select berfungsi untuk memilih kolom tertentu saja untuk dicetak.
Loblolly %>% select(height, age)## height age
## 1 4.51 3
## 15 10.89 5
## 29 28.72 10
## 43 41.74 15
## 57 52.70 20
## 71 60.92 25
## 2 4.55 3
## 16 10.92 5
## 30 29.07 10
## 44 42.83 15
## 58 53.88 20
## 72 63.39 25
## 3 4.79 3
## 17 11.37 5
## 31 30.21 10
## 45 44.40 15
## 59 55.82 20
## 73 64.10 25
## 4 3.91 3
## 18 9.48 5
## 32 25.66 10
## 46 39.07 15
## 60 50.78 20
## 74 59.07 25
## 5 4.81 3
## 19 11.20 5
## 33 28.66 10
## 47 41.66 15
## 61 53.31 20
## 75 63.05 25
## 6 3.88 3
## 20 9.40 5
## 34 25.99 10
## 48 39.55 15
## 62 51.46 20
## 76 59.64 25
## 7 4.32 3
## 21 10.43 5
## 35 27.16 10
## 49 40.85 15
## 63 51.33 20
## 77 60.07 25
## 8 4.57 3
## 22 10.57 5
## 36 27.90 10
## 50 41.13 15
## 64 52.43 20
## 78 60.69 25
## 9 3.77 3
## 23 9.03 5
## 37 25.45 10
## 51 38.98 15
## 65 49.76 20
## 79 60.28 25
## 10 4.33 3
## 24 10.79 5
## 38 28.97 10
## 52 42.44 15
## 66 53.17 20
## 80 61.62 25
## 11 4.38 3
## 25 10.48 5
## 39 27.93 10
## 53 40.20 15
## 67 50.06 20
## 81 58.49 25
## 12 4.12 3
## 26 9.92 5
## 40 26.54 10
## 54 37.82 15
## 68 48.43 20
## 82 56.81 25
## 13 3.93 3
## 27 9.34 5
## 41 26.08 10
## 55 37.79 15
## 69 48.31 20
## 83 56.43 25
## 14 3.46 3
## 28 9.05 5
## 42 25.85 10
## 56 39.15 15
## 70 49.12 20
## 84 59.49 25
Arrange
Perintah arrange berfungsi untuk mengurutkan tabel berdasarkan kolom tertentu yang telah ditentukan. Default dari perintah ini adalah pengurutan dari yang terkecil atau terawal. Kita bisa menggunakan fungsi desc untuk mengurutkannya dari yang terbesar (atau dari Z dalam alfabet).
Loblolly %>% arrange(desc(age))## height age Seed
## 71 60.92 25 301
## 72 63.39 25 303
## 73 64.10 25 305
## 74 59.07 25 307
## 75 63.05 25 309
## 76 59.64 25 311
## 77 60.07 25 315
## 78 60.69 25 319
## 79 60.28 25 321
## 80 61.62 25 323
## 81 58.49 25 325
## 82 56.81 25 327
## 83 56.43 25 329
## 84 59.49 25 331
## 57 52.70 20 301
## 58 53.88 20 303
## 59 55.82 20 305
## 60 50.78 20 307
## 61 53.31 20 309
## 62 51.46 20 311
## 63 51.33 20 315
## 64 52.43 20 319
## 65 49.76 20 321
## 66 53.17 20 323
## 67 50.06 20 325
## 68 48.43 20 327
## 69 48.31 20 329
## 70 49.12 20 331
## 43 41.74 15 301
## 44 42.83 15 303
## 45 44.40 15 305
## 46 39.07 15 307
## 47 41.66 15 309
## 48 39.55 15 311
## 49 40.85 15 315
## 50 41.13 15 319
## 51 38.98 15 321
## 52 42.44 15 323
## 53 40.20 15 325
## 54 37.82 15 327
## 55 37.79 15 329
## 56 39.15 15 331
## 29 28.72 10 301
## 30 29.07 10 303
## 31 30.21 10 305
## 32 25.66 10 307
## 33 28.66 10 309
## 34 25.99 10 311
## 35 27.16 10 315
## 36 27.90 10 319
## 37 25.45 10 321
## 38 28.97 10 323
## 39 27.93 10 325
## 40 26.54 10 327
## 41 26.08 10 329
## 42 25.85 10 331
## 15 10.89 5 301
## 16 10.92 5 303
## 17 11.37 5 305
## 18 9.48 5 307
## 19 11.20 5 309
## 20 9.40 5 311
## 21 10.43 5 315
## 22 10.57 5 319
## 23 9.03 5 321
## 24 10.79 5 323
## 25 10.48 5 325
## 26 9.92 5 327
## 27 9.34 5 329
## 28 9.05 5 331
## 1 4.51 3 301
## 2 4.55 3 303
## 3 4.79 3 305
## 4 3.91 3 307
## 5 4.81 3 309
## 6 3.88 3 311
## 7 4.32 3 315
## 8 4.57 3 319
## 9 3.77 3 321
## 10 4.33 3 323
## 11 4.38 3 325
## 12 4.12 3 327
## 13 3.93 3 329
## 14 3.46 3 331
Filter
Perintah filter berfungsi untuk menyeleksi atau memilih baris berdasarkan ketentuan tertentu.
Loblolly %>% filter(height>30)## height age Seed
## 43 41.74 15 301
## 57 52.70 20 301
## 71 60.92 25 301
## 44 42.83 15 303
## 58 53.88 20 303
## 72 63.39 25 303
## 31 30.21 10 305
## 45 44.40 15 305
## 59 55.82 20 305
## 73 64.10 25 305
## 46 39.07 15 307
## 60 50.78 20 307
## 74 59.07 25 307
## 47 41.66 15 309
## 61 53.31 20 309
## 75 63.05 25 309
## 48 39.55 15 311
## 62 51.46 20 311
## 76 59.64 25 311
## 49 40.85 15 315
## 63 51.33 20 315
## 77 60.07 25 315
## 50 41.13 15 319
## 64 52.43 20 319
## 78 60.69 25 319
## 51 38.98 15 321
## 65 49.76 20 321
## 79 60.28 25 321
## 52 42.44 15 323
## 66 53.17 20 323
## 80 61.62 25 323
## 53 40.20 15 325
## 67 50.06 20 325
## 81 58.49 25 325
## 54 37.82 15 327
## 68 48.43 20 327
## 82 56.81 25 327
## 55 37.79 15 329
## 69 48.31 20 329
## 83 56.43 25 329
## 56 39.15 15 331
## 70 49.12 20 331
## 84 59.49 25 331
Mutate
Terkadang kita membutuhkan data kolom baru yang merupakan turunan dari kolom sebelumnya yang sudah ada. mutate adalah perintah yang dapat membuat kolom baru dengan melakukan operasi pada kolom yang sudah ada. Pada tahap ini akan dibuat variabel baru growth yang menunjukkan perbandingan antara umur (age) dan tinggi (height) tanaman. Dengan anggapan bahwa satuan dari age adalah pekan, dan satuan height adalah cm. Maka interpretasi growth adalah jumlah pekan yang diperlukan tanaman untuk bertambah tinggi 1 cm.
Loblolly %>% mutate(growth=age/height)## height age Seed growth
## 1 4.51 3 301 0.6651885
## 15 10.89 5 301 0.4591368
## 29 28.72 10 301 0.3481894
## 43 41.74 15 301 0.3593675
## 57 52.70 20 301 0.3795066
## 71 60.92 25 301 0.4103743
## 2 4.55 3 303 0.6593407
## 16 10.92 5 303 0.4578755
## 30 29.07 10 303 0.3439972
## 44 42.83 15 303 0.3502218
## 58 53.88 20 303 0.3711952
## 72 63.39 25 303 0.3943840
## 3 4.79 3 305 0.6263048
## 17 11.37 5 305 0.4397537
## 31 30.21 10 305 0.3310162
## 45 44.40 15 305 0.3378378
## 59 55.82 20 305 0.3582945
## 73 64.10 25 305 0.3900156
## 4 3.91 3 307 0.7672634
## 18 9.48 5 307 0.5274262
## 32 25.66 10 307 0.3897116
## 46 39.07 15 307 0.3839263
## 60 50.78 20 307 0.3938558
## 74 59.07 25 307 0.4232267
## 5 4.81 3 309 0.6237006
## 19 11.20 5 309 0.4464286
## 33 28.66 10 309 0.3489184
## 47 41.66 15 309 0.3600576
## 61 53.31 20 309 0.3751641
## 75 63.05 25 309 0.3965107
## 6 3.88 3 311 0.7731959
## 20 9.40 5 311 0.5319149
## 34 25.99 10 311 0.3847634
## 48 39.55 15 311 0.3792668
## 62 51.46 20 311 0.3886514
## 76 59.64 25 311 0.4191818
## 7 4.32 3 315 0.6944444
## 21 10.43 5 315 0.4793864
## 35 27.16 10 315 0.3681885
## 49 40.85 15 315 0.3671971
## 63 51.33 20 315 0.3896357
## 77 60.07 25 315 0.4161811
## 8 4.57 3 319 0.6564551
## 22 10.57 5 319 0.4730369
## 36 27.90 10 319 0.3584229
## 50 41.13 15 319 0.3646973
## 64 52.43 20 319 0.3814610
## 78 60.69 25 319 0.4119295
## 9 3.77 3 321 0.7957560
## 23 9.03 5 321 0.5537099
## 37 25.45 10 321 0.3929273
## 51 38.98 15 321 0.3848127
## 65 49.76 20 321 0.4019293
## 79 60.28 25 321 0.4147313
## 10 4.33 3 323 0.6928406
## 24 10.79 5 323 0.4633920
## 38 28.97 10 323 0.3451847
## 52 42.44 15 323 0.3534402
## 66 53.17 20 323 0.3761520
## 80 61.62 25 323 0.4057124
## 11 4.38 3 325 0.6849315
## 25 10.48 5 325 0.4770992
## 39 27.93 10 325 0.3580380
## 53 40.20 15 325 0.3731343
## 67 50.06 20 325 0.3995206
## 81 58.49 25 325 0.4274235
## 12 4.12 3 327 0.7281553
## 26 9.92 5 327 0.5040323
## 40 26.54 10 327 0.3767898
## 54 37.82 15 327 0.3966155
## 68 48.43 20 327 0.4129672
## 82 56.81 25 327 0.4400634
## 13 3.93 3 329 0.7633588
## 27 9.34 5 329 0.5353319
## 41 26.08 10 329 0.3834356
## 55 37.79 15 329 0.3969304
## 69 48.31 20 329 0.4139930
## 83 56.43 25 329 0.4430268
## 14 3.46 3 331 0.8670520
## 28 9.05 5 331 0.5524862
## 42 25.85 10 331 0.3868472
## 56 39.15 15 331 0.3831418
## 70 49.12 20 331 0.4071661
## 84 59.49 25 331 0.4202387
Summarise
Perintah summarise berfungsi untuk meringkas atau mengagregasi baris data. Salah satu fungsi tambahan yang dapat digunakan adalah group_by agar informasi yang dicetak lebih mudah dianalisis.
Loblolly %>% group_by(age) %>%
summarise (rata_tinggi=mean(height))## # A tibble: 6 x 2
## age rata_tinggi
## <dbl> <dbl>
## 1 3 4.24
## 2 5 10.2
## 3 10 27.4
## 4 15 40.5
## 5 20 51.5
## 6 25 60.3
Melakukan kelima perintah secara bersamaan
Kita juga dapat melakukan perintah select, arrange, filter, mutate, dan summarise secara bersamaan untuk mempersingkat program.
Loblolly %>% select(height, age, Seed) %>%
arrange(desc(age)) %>%
filter(height>30) %>%
mutate(growth=age/height) %>%
summarise (rata_tinggi=mean(height))## rata_tinggi
## 1 50.28907