Tugas Akhir Mandarel

Engine SQL

Publikasi ini menggunakan basis data sampel chinook yang digunakan sebagai database untuk mengakses dan mengolah melalui R. Adapun beberapa package yang diperlukan, yaitu DBI dan RSQLite.

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

Selanjutnya package tidyverse yang mencakup beberapa package diretrieve. Fungsi dalam suatu package dapat juga dipanggil tanpa perintah library() atau require() jika sintaks yang ditulis menyertakan nama package tempat fungsi tersebut berasal. Penyertaan ini dengan menggunakan tanda ::.

library(tidyverse)
library(RSQLite)
library(DBI)

Secara umum, koneksi terhadap database pada R dapat menggunakan sintaks berikut: DBI::dbConnect(RSQLite::SQLite(), path = ":dbname:")

chinook<-DBI::dbConnect(RSQLite::SQLite(), "C:/SQLite/chinook.db")
RSQLite::dbListTables(chinook)
##  [1] "albums"          "artists"         "customers"       "employees"      
##  [5] "genres"          "invoice_items"   "invoices"        "media_types"    
##  [9] "playlist_track"  "playlists"       "sqlite_sequence" "sqlite_stat1"   
## [13] "tracks"

Setelah melakukan dbConnect() kita dapat melakukan perintah SQL.

SELECT 
  *
FROM
  sqlite_sequence;
Displaying records 1 - 10
name seq
genres 25
media_types 5
artists 275
albums 347
tracks 3503
employees 8
customers 59
invoices 412
invoice_items 2240
playlists 18

Setelah selesai mengolah database terkait dianjurkan memutuskan koneksi dengan fungsi dbDisconnect() dan jika ingin menyambungkan kembali cukup menggunakan kembali dbConnect()

dbDisconnect(chinook)

Menggunakan DPLYR

chinook<-DBI::dbConnect(RSQLite::SQLite(), "C:/SQLite/chinook.db")

RSQLite::dbListTables(chinook)
##  [1] "albums"          "artists"         "customers"       "employees"      
##  [5] "genres"          "invoice_items"   "invoices"        "media_types"    
##  [9] "playlist_track"  "playlists"       "sqlite_sequence" "sqlite_stat1"   
## [13] "tracks"
dplyr::tbl(chinook,"sqlite_sequence")
## # Source:   table<sqlite_sequence> [?? x 2]
## # Database: sqlite 3.37.0 [C:\sqlite\chinook.db]
##    name            seq
##    <chr>         <int>
##  1 genres           25
##  2 media_types       5
##  3 artists         275
##  4 albums          347
##  5 tracks         3503
##  6 employees         8
##  7 customers        59
##  8 invoices        412
##  9 invoice_items  2240
## 10 playlists        18
sqlite_sequence <- dplyr::tbl(chinook,"sqlite_sequence")
class(sqlite_sequence)
## [1] "tbl_SQLiteConnection" "tbl_dbi"              "tbl_sql"             
## [4] "tbl_lazy"             "tbl"
sqlite_sequence
## # Source:   table<sqlite_sequence> [?? x 2]
## # Database: sqlite 3.37.0 [C:\sqlite\chinook.db]
##    name            seq
##    <chr>         <int>
##  1 genres           25
##  2 media_types       5
##  3 artists         275
##  4 albums          347
##  5 tracks         3503
##  6 employees         8
##  7 customers        59
##  8 invoices        412
##  9 invoice_items  2240
## 10 playlists        18
query <- sqlite_sequence  %>% select(-name)
query
## # Source:   lazy query [?? x 1]
## # Database: sqlite 3.37.0 [C:\sqlite\chinook.db]
##      seq
##    <int>
##  1    25
##  2     5
##  3   275
##  4   347
##  5  3503
##  6     8
##  7    59
##  8   412
##  9  2240
## 10    18
dplyr::show_query(query)
## <SQL>
## SELECT `seq`
## FROM `sqlite_sequence`

Data Wrangling

Dataset yang digunakan adalah storms yang tersedia pada package default R datasets.

library(datasets)
library(help = "datasets")
Indometh
##    Subject time conc
## 1        1 0.25 1.50
## 2        1 0.50 0.94
## 3        1 0.75 0.78
## 4        1 1.00 0.48
## 5        1 1.25 0.37
## 6        1 2.00 0.19
## 7        1 3.00 0.12
## 8        1 4.00 0.11
## 9        1 5.00 0.08
## 10       1 6.00 0.07
## 11       1 8.00 0.05
## 12       2 0.25 2.03
## 13       2 0.50 1.63
## 14       2 0.75 0.71
## 15       2 1.00 0.70
## 16       2 1.25 0.64
## 17       2 2.00 0.36
## 18       2 3.00 0.32
## 19       2 4.00 0.20
## 20       2 5.00 0.25
## 21       2 6.00 0.12
## 22       2 8.00 0.08
## 23       3 0.25 2.72
## 24       3 0.50 1.49
## 25       3 0.75 1.16
## 26       3 1.00 0.80
## 27       3 1.25 0.80
## 28       3 2.00 0.39
## 29       3 3.00 0.22
## 30       3 4.00 0.12
## 31       3 5.00 0.11
## 32       3 6.00 0.08
## 33       3 8.00 0.08
## 34       4 0.25 1.85
## 35       4 0.50 1.39
## 36       4 0.75 1.02
## 37       4 1.00 0.89
## 38       4 1.25 0.59
## 39       4 2.00 0.40
## 40       4 3.00 0.16
## 41       4 4.00 0.11
## 42       4 5.00 0.10
## 43       4 6.00 0.07
## 44       4 8.00 0.07
## 45       5 0.25 2.05
## 46       5 0.50 1.04
## 47       5 0.75 0.81
## 48       5 1.00 0.39
## 49       5 1.25 0.30
## 50       5 2.00 0.23
## 51       5 3.00 0.13
## 52       5 4.00 0.11
## 53       5 5.00 0.08
## 54       5 6.00 0.10
## 55       5 8.00 0.06
## 56       6 0.25 2.31
## 57       6 0.50 1.44
## 58       6 0.75 1.03
## 59       6 1.00 0.84
## 60       6 1.25 0.64
## 61       6 2.00 0.42
## 62       6 3.00 0.24
## 63       6 4.00 0.17
## 64       6 5.00 0.13
## 65       6 6.00 0.10
## 66       6 8.00 0.09

The Indometh data frame has 66 rows and 3 columns of data on the pharmacokinetics of indometacin (or, older spelling, ‘indomethacin’). Untuk mengetahui informasi terkait dataset dapat menggunakan sintaks ?sebelum nama dataset .

?Indometh
View(Indometh)

Dataset tersebut akan dilakukan perintah arrange , mutate ,filter,select, dan summarise.

Indometh%>% select(Subject, time, conc)
##    Subject time conc
## 1        1 0.25 1.50
## 2        1 0.50 0.94
## 3        1 0.75 0.78
## 4        1 1.00 0.48
## 5        1 1.25 0.37
## 6        1 2.00 0.19
## 7        1 3.00 0.12
## 8        1 4.00 0.11
## 9        1 5.00 0.08
## 10       1 6.00 0.07
## 11       1 8.00 0.05
## 12       2 0.25 2.03
## 13       2 0.50 1.63
## 14       2 0.75 0.71
## 15       2 1.00 0.70
## 16       2 1.25 0.64
## 17       2 2.00 0.36
## 18       2 3.00 0.32
## 19       2 4.00 0.20
## 20       2 5.00 0.25
## 21       2 6.00 0.12
## 22       2 8.00 0.08
## 23       3 0.25 2.72
## 24       3 0.50 1.49
## 25       3 0.75 1.16
## 26       3 1.00 0.80
## 27       3 1.25 0.80
## 28       3 2.00 0.39
## 29       3 3.00 0.22
## 30       3 4.00 0.12
## 31       3 5.00 0.11
## 32       3 6.00 0.08
## 33       3 8.00 0.08
## 34       4 0.25 1.85
## 35       4 0.50 1.39
## 36       4 0.75 1.02
## 37       4 1.00 0.89
## 38       4 1.25 0.59
## 39       4 2.00 0.40
## 40       4 3.00 0.16
## 41       4 4.00 0.11
## 42       4 5.00 0.10
## 43       4 6.00 0.07
## 44       4 8.00 0.07
## 45       5 0.25 2.05
## 46       5 0.50 1.04
## 47       5 0.75 0.81
## 48       5 1.00 0.39
## 49       5 1.25 0.30
## 50       5 2.00 0.23
## 51       5 3.00 0.13
## 52       5 4.00 0.11
## 53       5 5.00 0.08
## 54       5 6.00 0.10
## 55       5 8.00 0.06
## 56       6 0.25 2.31
## 57       6 0.50 1.44
## 58       6 0.75 1.03
## 59       6 1.00 0.84
## 60       6 1.25 0.64
## 61       6 2.00 0.42
## 62       6 3.00 0.24
## 63       6 4.00 0.17
## 64       6 5.00 0.13
## 65       6 6.00 0.10
## 66       6 8.00 0.09
Indometh %>% arrange(desc(time))
##    Subject time conc
## 1        1 8.00 0.05
## 2        2 8.00 0.08
## 3        3 8.00 0.08
## 4        4 8.00 0.07
## 5        5 8.00 0.06
## 6        6 8.00 0.09
## 7        1 6.00 0.07
## 8        2 6.00 0.12
## 9        3 6.00 0.08
## 10       4 6.00 0.07
## 11       5 6.00 0.10
## 12       6 6.00 0.10
## 13       1 5.00 0.08
## 14       2 5.00 0.25
## 15       3 5.00 0.11
## 16       4 5.00 0.10
## 17       5 5.00 0.08
## 18       6 5.00 0.13
## 19       1 4.00 0.11
## 20       2 4.00 0.20
## 21       3 4.00 0.12
## 22       4 4.00 0.11
## 23       5 4.00 0.11
## 24       6 4.00 0.17
## 25       1 3.00 0.12
## 26       2 3.00 0.32
## 27       3 3.00 0.22
## 28       4 3.00 0.16
## 29       5 3.00 0.13
## 30       6 3.00 0.24
## 31       1 2.00 0.19
## 32       2 2.00 0.36
## 33       3 2.00 0.39
## 34       4 2.00 0.40
## 35       5 2.00 0.23
## 36       6 2.00 0.42
## 37       1 1.25 0.37
## 38       2 1.25 0.64
## 39       3 1.25 0.80
## 40       4 1.25 0.59
## 41       5 1.25 0.30
## 42       6 1.25 0.64
## 43       1 1.00 0.48
## 44       2 1.00 0.70
## 45       3 1.00 0.80
## 46       4 1.00 0.89
## 47       5 1.00 0.39
## 48       6 1.00 0.84
## 49       1 0.75 0.78
## 50       2 0.75 0.71
## 51       3 0.75 1.16
## 52       4 0.75 1.02
## 53       5 0.75 0.81
## 54       6 0.75 1.03
## 55       1 0.50 0.94
## 56       2 0.50 1.63
## 57       3 0.50 1.49
## 58       4 0.50 1.39
## 59       5 0.50 1.04
## 60       6 0.50 1.44
## 61       1 0.25 1.50
## 62       2 0.25 2.03
## 63       3 0.25 2.72
## 64       4 0.25 1.85
## 65       5 0.25 2.05
## 66       6 0.25 2.31
Indometh %>% filter(time>1.00)
##    Subject time conc
## 1        1 1.25 0.37
## 2        1 2.00 0.19
## 3        1 3.00 0.12
## 4        1 4.00 0.11
## 5        1 5.00 0.08
## 6        1 6.00 0.07
## 7        1 8.00 0.05
## 8        2 1.25 0.64
## 9        2 2.00 0.36
## 10       2 3.00 0.32
## 11       2 4.00 0.20
## 12       2 5.00 0.25
## 13       2 6.00 0.12
## 14       2 8.00 0.08
## 15       3 1.25 0.80
## 16       3 2.00 0.39
## 17       3 3.00 0.22
## 18       3 4.00 0.12
## 19       3 5.00 0.11
## 20       3 6.00 0.08
## 21       3 8.00 0.08
## 22       4 1.25 0.59
## 23       4 2.00 0.40
## 24       4 3.00 0.16
## 25       4 4.00 0.11
## 26       4 5.00 0.10
## 27       4 6.00 0.07
## 28       4 8.00 0.07
## 29       5 1.25 0.30
## 30       5 2.00 0.23
## 31       5 3.00 0.13
## 32       5 4.00 0.11
## 33       5 5.00 0.08
## 34       5 6.00 0.10
## 35       5 8.00 0.06
## 36       6 1.25 0.64
## 37       6 2.00 0.42
## 38       6 3.00 0.24
## 39       6 4.00 0.17
## 40       6 5.00 0.13
## 41       6 6.00 0.10
## 42       6 8.00 0.09
Indometh %>% mutate(duration=time*conc)
##    Subject time conc duration
## 1        1 0.25 1.50   0.3750
## 2        1 0.50 0.94   0.4700
## 3        1 0.75 0.78   0.5850
## 4        1 1.00 0.48   0.4800
## 5        1 1.25 0.37   0.4625
## 6        1 2.00 0.19   0.3800
## 7        1 3.00 0.12   0.3600
## 8        1 4.00 0.11   0.4400
## 9        1 5.00 0.08   0.4000
## 10       1 6.00 0.07   0.4200
## 11       1 8.00 0.05   0.4000
## 12       2 0.25 2.03   0.5075
## 13       2 0.50 1.63   0.8150
## 14       2 0.75 0.71   0.5325
## 15       2 1.00 0.70   0.7000
## 16       2 1.25 0.64   0.8000
## 17       2 2.00 0.36   0.7200
## 18       2 3.00 0.32   0.9600
## 19       2 4.00 0.20   0.8000
## 20       2 5.00 0.25   1.2500
## 21       2 6.00 0.12   0.7200
## 22       2 8.00 0.08   0.6400
## 23       3 0.25 2.72   0.6800
## 24       3 0.50 1.49   0.7450
## 25       3 0.75 1.16   0.8700
## 26       3 1.00 0.80   0.8000
## 27       3 1.25 0.80   1.0000
## 28       3 2.00 0.39   0.7800
## 29       3 3.00 0.22   0.6600
## 30       3 4.00 0.12   0.4800
## 31       3 5.00 0.11   0.5500
## 32       3 6.00 0.08   0.4800
## 33       3 8.00 0.08   0.6400
## 34       4 0.25 1.85   0.4625
## 35       4 0.50 1.39   0.6950
## 36       4 0.75 1.02   0.7650
## 37       4 1.00 0.89   0.8900
## 38       4 1.25 0.59   0.7375
## 39       4 2.00 0.40   0.8000
## 40       4 3.00 0.16   0.4800
## 41       4 4.00 0.11   0.4400
## 42       4 5.00 0.10   0.5000
## 43       4 6.00 0.07   0.4200
## 44       4 8.00 0.07   0.5600
## 45       5 0.25 2.05   0.5125
## 46       5 0.50 1.04   0.5200
## 47       5 0.75 0.81   0.6075
## 48       5 1.00 0.39   0.3900
## 49       5 1.25 0.30   0.3750
## 50       5 2.00 0.23   0.4600
## 51       5 3.00 0.13   0.3900
## 52       5 4.00 0.11   0.4400
## 53       5 5.00 0.08   0.4000
## 54       5 6.00 0.10   0.6000
## 55       5 8.00 0.06   0.4800
## 56       6 0.25 2.31   0.5775
## 57       6 0.50 1.44   0.7200
## 58       6 0.75 1.03   0.7725
## 59       6 1.00 0.84   0.8400
## 60       6 1.25 0.64   0.8000
## 61       6 2.00 0.42   0.8400
## 62       6 3.00 0.24   0.7200
## 63       6 4.00 0.17   0.6800
## 64       6 5.00 0.13   0.6500
## 65       6 6.00 0.10   0.6000
## 66       6 8.00 0.09   0.7200
Indometh %>% group_by(time)%>%summarise(mean=mean(conc))
## # A tibble: 11 x 2
##     time   mean
##    <dbl>  <dbl>
##  1  0.25 2.08  
##  2  0.5  1.32  
##  3  0.75 0.918 
##  4  1    0.683 
##  5  1.25 0.557 
##  6  2    0.332 
##  7  3    0.198 
##  8  4    0.137 
##  9  5    0.125 
## 10  6    0.09  
## 11  8    0.0717
Indometh
##    Subject time conc
## 1        1 0.25 1.50
## 2        1 0.50 0.94
## 3        1 0.75 0.78
## 4        1 1.00 0.48
## 5        1 1.25 0.37
## 6        1 2.00 0.19
## 7        1 3.00 0.12
## 8        1 4.00 0.11
## 9        1 5.00 0.08
## 10       1 6.00 0.07
## 11       1 8.00 0.05
## 12       2 0.25 2.03
## 13       2 0.50 1.63
## 14       2 0.75 0.71
## 15       2 1.00 0.70
## 16       2 1.25 0.64
## 17       2 2.00 0.36
## 18       2 3.00 0.32
## 19       2 4.00 0.20
## 20       2 5.00 0.25
## 21       2 6.00 0.12
## 22       2 8.00 0.08
## 23       3 0.25 2.72
## 24       3 0.50 1.49
## 25       3 0.75 1.16
## 26       3 1.00 0.80
## 27       3 1.25 0.80
## 28       3 2.00 0.39
## 29       3 3.00 0.22
## 30       3 4.00 0.12
## 31       3 5.00 0.11
## 32       3 6.00 0.08
## 33       3 8.00 0.08
## 34       4 0.25 1.85
## 35       4 0.50 1.39
## 36       4 0.75 1.02
## 37       4 1.00 0.89
## 38       4 1.25 0.59
## 39       4 2.00 0.40
## 40       4 3.00 0.16
## 41       4 4.00 0.11
## 42       4 5.00 0.10
## 43       4 6.00 0.07
## 44       4 8.00 0.07
## 45       5 0.25 2.05
## 46       5 0.50 1.04
## 47       5 0.75 0.81
## 48       5 1.00 0.39
## 49       5 1.25 0.30
## 50       5 2.00 0.23
## 51       5 3.00 0.13
## 52       5 4.00 0.11
## 53       5 5.00 0.08
## 54       5 6.00 0.10
## 55       5 8.00 0.06
## 56       6 0.25 2.31
## 57       6 0.50 1.44
## 58       6 0.75 1.03
## 59       6 1.00 0.84
## 60       6 1.25 0.64
## 61       6 2.00 0.42
## 62       6 3.00 0.24
## 63       6 4.00 0.17
## 64       6 5.00 0.13
## 65       6 6.00 0.10
## 66       6 8.00 0.09

Melakukan kelima perintah bersamaan

Indometh%>% select(Subject, time, conc) %>% arrange(desc(time)) %>%  filter(time>1.00)%>% mutate(duration=time*conc)%>% group_by(time)%>%summarise(mean=mean(conc))
## # A tibble: 7 x 2
##    time   mean
##   <dbl>  <dbl>
## 1  1.25 0.557 
## 2  2    0.332 
## 3  3    0.198 
## 4  4    0.137 
## 5  5    0.125 
## 6  6    0.09  
## 7  8    0.0717