Tugas Akhir Praktikum STA 261

A. Contoh Akses Database

Apabila pengguna ingin mengakses database di R, diperlukan package DBI dan RSQlite sehingga pengguna perlu memastikan terlebih dahulu kedua package tersebut telah terinstall.

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

Kemudian panggil kedua package tersebut dengan fungsi library().

library(RSQLite)
library(DBI)

1. Menggunakan Engine SQL

Untuk menggunakan SQL engine di R pengguna memerlukan suatu objek connection yang berfungsi sebagai variabel yang menghubungkan SQL dengan aplikasi R

sql1 <- DBI::dbConnect(RSQLite::SQLite(), "C:/Users/user/OneDrive/Documents/MANDAREL/Company.db")

Syntax menunjukkan pembuatan variabel sql1 sebagai objek connection dengan engine SQL pada file tertentu yang merujuk ke device pengguna.

Pengguna dapat menggunakan syntax SQL di R seperti contoh berikut:

SELECT
  *
FROM
  DEPENDENT
WHERE
  Sex=="F";
4 records
Essn Dependent_name Sex Bdate Relationship
333445555 Alice F 1986-04-04 Daughter
333445555 Joy F 1958-05-03 Spouse
123456789 Alice F 1988-12-30 Daughter
123456789 Elizabeth F 1967-05-05 Spouse

2. Menggunakan DPLYR

Diperlukan variabel baru untuk memanggil suatu database.

dplyr1 <- DBI::dbConnect(RSQLite::SQLite(), "C:/Users/user/OneDrive/Documents/MANDAREL/Company.db")

dengan kelas:

class(dplyr1)
## [1] "SQLiteConnection"
## attr(,"package")
## [1] "RSQLite"

Untuk melihat ada tabel apa saja pada data company:

RSQLite::dbListTables(dplyr1)
## [1] "DEPARTMENT"     "DEPENDENT"      "DEPT_LOCATIONS" "EMPLOYEE"      
## [5] "PROJECT"        "WORKS_ON"

Pengguna perlu memanggil package yang akan digunakan terlebih dahulu, yaitu 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 company sebagai variabel baru di R:

z <- dplyr::tbl(dplyr1, "DEPENDENT")
z
## # Source:   table<DEPENDENT> [?? x 5]
## # Database: sqlite 3.37.0
## #   [C:\Users\user\OneDrive\Documents\MANDAREL\Company.db]
##   Essn      Dependent_name Sex   Bdate      Relationship
##   <chr>     <chr>          <chr> <chr>      <chr>       
## 1 333445555 Alice          F     1986-04-04 Daughter    
## 2 333445555 Theodore       M     1983-10-25 Son         
## 3 333445555 Joy            F     1958-05-03 Spouse      
## 4 987654321 Abner          M     1942-02-28 Spouse      
## 5 123456789 Michael        M     1988-01-04 Son         
## 6 123456789 Alice          F     1988-12-30 Daughter    
## 7 123456789 Elizabeth      F     1967-05-05 Spouse

Dalam syntax dplyr, fungsi dalam kurung dapat diubah menjadi “%>%” agar lebih mudah terbaca. Contohnya seperti berikut:

dplyr2 <- z %>%
  select(Essn, Dependent_name, Sex, Bdate, Relationship) %>%
  filter(Sex=="F") %>%
  arrange(Essn)
dplyr2
## # Source:     lazy query [?? x 5]
## # Database:   sqlite 3.37.0
## #   [C:\Users\user\OneDrive\Documents\MANDAREL\Company.db]
## # Ordered by: Essn
##   Essn      Dependent_name Sex   Bdate      Relationship
##   <chr>     <chr>          <chr> <chr>      <chr>       
## 1 123456789 Alice          F     1988-12-30 Daughter    
## 2 123456789 Elizabeth      F     1967-05-05 Spouse      
## 3 333445555 Alice          F     1986-04-04 Daughter    
## 4 333445555 Joy            F     1958-05-03 Spouse

Syntax di atas akan memanggil tabel DEPENDENT dan mencetak Essn, nama dependent, jenis kelamin, tanggal lahir, dan hubungan (relationship) dengan jenis kelamin yaitu perempuan, kemudian diurutkan berdasarkan Essn.

Pengguna dapat menggunakan syntax di bawah ini untuk melihat bagaimana jika fungsi tersebut dijalankan di SQL:

dplyr::show_query(dplyr2)
## <SQL>
## SELECT *
## FROM (SELECT `Essn`, `Dependent_name`, `Sex`, `Bdate`, `Relationship`
## FROM `DEPENDENT`)
## WHERE (`Sex` = 'F')
## ORDER BY `Essn`

B. Data Wrangling

Pada tahap ini kita akan menggunakan dataset rock yang telah tersedia pada default datasets di R.

library(datasets)
rock

Select

Perintah select berfungsi untuk memilih kolom tertentu saja untuk dicetak.

rock %>% select(area, shape)
##     area     shape
## 1   4990 0.0903296
## 2   7002 0.1486220
## 3   7558 0.1833120
## 4   7352 0.1170630
## 5   7943 0.1224170
## 6   7979 0.1670450
## 7   9333 0.1896510
## 8   8209 0.1641270
## 9   8393 0.2036540
## 10  6425 0.1623940
## 11  9364 0.1509440
## 12  8624 0.1481410
## 13 10651 0.2285950
## 14  8868 0.2316230
## 15  9417 0.1725670
## 16  8874 0.1534810
## 17 10962 0.2043140
## 18 10743 0.2627270
## 19 11878 0.2000710
## 20  9867 0.1448100
## 21  7838 0.1138520
## 22 11876 0.2910290
## 23 12212 0.2400770
## 24  8233 0.1618650
## 25  6360 0.2808870
## 26  4193 0.1794550
## 27  7416 0.1918020
## 28  5246 0.1330830
## 29  6509 0.2252140
## 30  4895 0.3412730
## 31  6775 0.3116460
## 32  7894 0.2760160
## 33  5980 0.1976530
## 34  5318 0.3266350
## 35  7392 0.1541920
## 36  7894 0.2760160
## 37  3469 0.1769690
## 38  1468 0.4387120
## 39  3524 0.1635860
## 40  5267 0.2538320
## 41  5048 0.3286410
## 42  1016 0.2300810
## 43  5605 0.4641250
## 44  8793 0.4204770
## 45  3475 0.2007440
## 46  1651 0.2626510
## 47  5514 0.1824530
## 48  9718 0.2004470

Arrange

Perintah arrange berfungsi untuk mengurutkan tabel berdasarkan kolom tertentu yang telah ditentukan. Default dari perintah ini adalah pengurutan dari yang terkecil. Pengguna bisa menggunakan fungsi desc untuk mengurutkannya dari yang terbesar.

rock %>% arrange(desc(shape))
##     area     peri     shape   perm
## 1   5605 1145.690 0.4641250 1300.0
## 2   1468  476.322 0.4387120  100.0
## 3   8793 2280.490 0.4204770 1300.0
## 4   4895 1239.660 0.3412730  890.0
## 5   5048  941.543 0.3286410 1300.0
## 6   5318  990.388 0.3266350  950.0
## 7   6775 1728.140 0.3116460  890.0
## 8  11876 4353.140 0.2910290  142.0
## 9   6360 1977.390 0.2808870  740.0
## 10  7894 1461.060 0.2760160  890.0
## 11  7894 1461.060 0.2760160  950.0
## 12 10743 4787.620 0.2627270   58.6
## 13  1651  597.808 0.2626510  580.0
## 14  5267 1644.960 0.2538320  100.0
## 15 12212 4697.650 0.2400770  142.0
## 16  8868 3518.040 0.2316230   82.4
## 17  1016  308.642 0.2300810 1300.0
## 18 10651 4036.540 0.2285950   82.4
## 19  6509 1851.210 0.2252140  890.0
## 20 10962 4608.660 0.2043140   58.6
## 21  8393 3682.040 0.2036540  119.0
## 22  3475 1174.110 0.2007440  580.0
## 23  9718 1485.580 0.2004470  580.0
## 24 11878 4864.220 0.2000710   58.6
## 25  5980 1426.760 0.1976530  950.0
## 26  7416 1916.240 0.1918020  740.0
## 27  9333 4345.750 0.1896510   17.1
## 28  7558 3930.660 0.1833120    6.3
## 29  5514 1455.880 0.1824530  580.0
## 30  4193 1379.350 0.1794550  740.0
## 31  3469 1376.700 0.1769690  100.0
## 32  9417 3999.370 0.1725670   82.4
## 33  7979 4010.150 0.1670450   17.1
## 34  8209 4344.750 0.1641270   17.1
## 35  3524 1189.460 0.1635860  100.0
## 36  6425 3098.650 0.1623940  119.0
## 37  8233 3518.440 0.1618650  142.0
## 38  7392 1350.760 0.1541920  950.0
## 39  8874 3629.070 0.1534810   82.4
## 40  9364 4480.050 0.1509440  119.0
## 41  7002 3892.600 0.1486220    6.3
## 42  8624 3986.240 0.1481410  119.0
## 43  9867 4479.410 0.1448100   58.6
## 44  5246 1585.420 0.1330830  740.0
## 45  7943 3948.540 0.1224170   17.1
## 46  7352 3869.320 0.1170630    6.3
## 47  7838 3428.740 0.1138520  142.0
## 48  4990 2791.900 0.0903296    6.3

Filter

Perintah filter berfungsi untuk menyeleksi atau memilih baris berdasarkan ketentuan tertentu.

rock %>% filter(area > 9427)
##    area    peri    shape  perm
## 1 10651 4036.54 0.228595  82.4
## 2 10962 4608.66 0.204314  58.6
## 3 10743 4787.62 0.262727  58.6
## 4 11878 4864.22 0.200071  58.6
## 5  9867 4479.41 0.144810  58.6
## 6 11876 4353.14 0.291029 142.0
## 7 12212 4697.65 0.240077 142.0
## 8  9718 1485.58 0.200447 580.0

Mutate

Perintah mutate berfungsi untuk membuat kolom baru dari kolom yang sudah ada.

rock %>% mutate(zone = area)
##     area     peri     shape   perm  zone
## 1   4990 2791.900 0.0903296    6.3  4990
## 2   7002 3892.600 0.1486220    6.3  7002
## 3   7558 3930.660 0.1833120    6.3  7558
## 4   7352 3869.320 0.1170630    6.3  7352
## 5   7943 3948.540 0.1224170   17.1  7943
## 6   7979 4010.150 0.1670450   17.1  7979
## 7   9333 4345.750 0.1896510   17.1  9333
## 8   8209 4344.750 0.1641270   17.1  8209
## 9   8393 3682.040 0.2036540  119.0  8393
## 10  6425 3098.650 0.1623940  119.0  6425
## 11  9364 4480.050 0.1509440  119.0  9364
## 12  8624 3986.240 0.1481410  119.0  8624
## 13 10651 4036.540 0.2285950   82.4 10651
## 14  8868 3518.040 0.2316230   82.4  8868
## 15  9417 3999.370 0.1725670   82.4  9417
## 16  8874 3629.070 0.1534810   82.4  8874
## 17 10962 4608.660 0.2043140   58.6 10962
## 18 10743 4787.620 0.2627270   58.6 10743
## 19 11878 4864.220 0.2000710   58.6 11878
## 20  9867 4479.410 0.1448100   58.6  9867
## 21  7838 3428.740 0.1138520  142.0  7838
## 22 11876 4353.140 0.2910290  142.0 11876
## 23 12212 4697.650 0.2400770  142.0 12212
## 24  8233 3518.440 0.1618650  142.0  8233
## 25  6360 1977.390 0.2808870  740.0  6360
## 26  4193 1379.350 0.1794550  740.0  4193
## 27  7416 1916.240 0.1918020  740.0  7416
## 28  5246 1585.420 0.1330830  740.0  5246
## 29  6509 1851.210 0.2252140  890.0  6509
## 30  4895 1239.660 0.3412730  890.0  4895
## 31  6775 1728.140 0.3116460  890.0  6775
## 32  7894 1461.060 0.2760160  890.0  7894
## 33  5980 1426.760 0.1976530  950.0  5980
## 34  5318  990.388 0.3266350  950.0  5318
## 35  7392 1350.760 0.1541920  950.0  7392
## 36  7894 1461.060 0.2760160  950.0  7894
## 37  3469 1376.700 0.1769690  100.0  3469
## 38  1468  476.322 0.4387120  100.0  1468
## 39  3524 1189.460 0.1635860  100.0  3524
## 40  5267 1644.960 0.2538320  100.0  5267
## 41  5048  941.543 0.3286410 1300.0  5048
## 42  1016  308.642 0.2300810 1300.0  1016
## 43  5605 1145.690 0.4641250 1300.0  5605
## 44  8793 2280.490 0.4204770 1300.0  8793
## 45  3475 1174.110 0.2007440  580.0  3475
## 46  1651  597.808 0.2626510  580.0  1651
## 47  5514 1455.880 0.1824530  580.0  5514
## 48  9718 1485.580 0.2004470  580.0  9718

Summarise

Perintah summarise berfungsi untuk meringkas atau mengagregasi baris data. Digunakan fungsi group_by agar informasi yang dicetak lebih mudah dianalisis.

rock %>% group_by(perm) %>%
         summarise (avg_area=mean(area))
## # A tibble: 12 x 2
##      perm avg_area
##     <dbl>    <dbl>
##  1    6.3    6726.
##  2   17.1    8366 
##  3   58.6   10862.
##  4   82.4    9452.
##  5  100      3432 
##  6  119      8202.
##  7  142     10040.
##  8  580      5090.
##  9  740      5804.
## 10  890      6518.
## 11  950      6646 
## 12 1300      5116.

Melakukan kelima perintah secara bersamaan

Selain itu, pengguna dapat menjalankan kelima perintah tersebut secara bersamaan untuk mempersingkat program.

rock %>% select(area, peri, shape, perm) %>%
         arrange(desc(shape)) %>%
         filter(area > 9427)  %>%
         mutate(zone = area) %>%
         summarise (avg_area=mean(area))
##   avg_area
## 1 10988.38