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;
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
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)
Loblolly

Pada 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