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