Tugas Praktikum Mandarel

A. Akses Database

1. Engine SQL

Untuk membentuk suatu objek db, buatlah suatu objek connection yang akan digunakan bersama dengan engine SQL.

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

Syntax SQL dapat ditulis di R ketika opsi connection menggunakan objek db dan opsi engine menggunakan "sql".

SELECT
  *
FROM
  Category;
8 records
Id CategoryName Description
1 Beverages Soft drinks, coffees, teas, beers, and ales
2 Condiments Sweet and savory sauces, relishes, spreads, and seasonings
3 Confections Desserts, candies, and sweet breads
4 Dairy Products Cheeses
5 Grains/Cereals Breads, crackers, pasta, and cereal
6 Meat/Poultry Prepared meats
7 Produce Dried fruit and bean curd
8 Seafood Seaweed and fish

2. Menggunakan dplyr

Untuk memanggil database pada R software, diperlukan variabel baru.

Northwind<-DBI::dbConnect(RSQLite::SQLite(), "C:/sqlite/Northwind_large.sqlite")

Kelas pada database:

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

Tabel yang terdapat dalam database:

RSQLite::dbListTables(Northwind)
##  [1] "Category"             "Customer"             "CustomerCustomerDemo"
##  [4] "CustomerDemographic"  "Employee"             "EmployeeTerritory"   
##  [7] "Order"                "OrderDetail"          "Product"             
## [10] "ProductDetails_V"     "Region"               "Shipper"             
## [13] "Supplier"             "Territory"

Fungsi tbl(database, "table") dari package dplyr digunakan untuk mengakses tabel yang diinginkan.

OrderDetail<-dplyr::tbl(Northwind,"OrderDetail")
class(OrderDetail)
## [1] "tbl_SQLiteConnection" "tbl_dbi"              "tbl_sql"             
## [4] "tbl_lazy"             "tbl"
OrderDetail
## # Source:   table<OrderDetail> [?? x 6]
## # Database: sqlite 3.36.0 [C:\sqlite\Northwind_large.sqlite]
##    Id       OrderId ProductId UnitPrice Quantity Discount
##    <chr>      <int>     <int>     <dbl>    <int>    <dbl>
##  1 10248/11   10248        11      14         12     0   
##  2 10248/42   10248        42       9.8       10     0   
##  3 10248/72   10248        72      34.8        5     0   
##  4 10249/14   10249        14      18.6        9     0   
##  5 10249/51   10249        51      42.4       40     0   
##  6 10250/41   10250        41       7.7       10     0   
##  7 10250/51   10250        51      42.4       35     0.15
##  8 10250/65   10250        65      16.8       15     0.15
##  9 10251/22   10251        22      16.8        6     0.05
## 10 10251/57   10251        57      15.6       15     0.05
## # ... with more rows
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union

Syntax berikut digunakan jika kita ingin mengetahui pada tabel OrderDetail dengan ProductId samadengan 10.

q<-OrderDetail%>%
  select(Id, OrderId, ProductId)%>%
  filter(ProductId==10)
q
## # Source:   lazy query [?? x 3]
## # Database: sqlite 3.36.0 [C:\sqlite\Northwind_large.sqlite]
##    Id       OrderId ProductId
##    <chr>      <int>     <int>
##  1 10273/10   10273        10
##  2 10276/10   10276        10
##  3 10357/10   10357        10
##  4 10389/10   10389        10
##  5 10449/10   10449        10
##  6 10450/10   10450        10
##  7 10478/10   10478        10
##  8 10519/10   10519        10
##  9 10524/10   10524        10
## 10 10568/10   10568        10
## # ... with more rows

Untuk mengetahui fungsi di atas dengan syntax SQL dapat menggunakan syntax di bawah ini.

dplyr::show_query(q)
## <SQL>
## SELECT *
## FROM (SELECT `Id`, `OrderId`, `ProductId`
## FROM `OrderDetail`)
## WHERE (`ProductId` = 10.0)

B. Data Wrangling

Pada tahap ini, contoh dataset yang digunakan adalah airquality. Dataset ini telah tersedia pada packages datasets di R.

library(datasets)
airquality<-as_tibble(airquality)
airquality
## # A tibble: 153 x 6
##    Ozone Solar.R  Wind  Temp Month   Day
##    <int>   <int> <dbl> <int> <int> <int>
##  1    41     190   7.4    67     5     1
##  2    36     118   8      72     5     2
##  3    12     149  12.6    74     5     3
##  4    18     313  11.5    62     5     4
##  5    NA      NA  14.3    56     5     5
##  6    28      NA  14.9    66     5     6
##  7    23     299   8.6    65     5     7
##  8    19      99  13.8    59     5     8
##  9     8      19  20.1    61     5     9
## 10    NA     194   8.6    69     5    10
## # ... with 143 more rows

Select

Fungsi select() dapat digunakan untuk memilih peubah tertentu sesuai yang diinginkan.

airquality %>% select(Ozone, Temp)
## # A tibble: 153 x 2
##    Ozone  Temp
##    <int> <int>
##  1    41    67
##  2    36    72
##  3    12    74
##  4    18    62
##  5    NA    56
##  6    28    66
##  7    23    65
##  8    19    59
##  9     8    61
## 10    NA    69
## # ... with 143 more rows

Arrange

Fungsi arrange() digunakan untuk mengurutkan data.

airquality %>% arrange(Ozone)
## # A tibble: 153 x 6
##    Ozone Solar.R  Wind  Temp Month   Day
##    <int>   <int> <dbl> <int> <int> <int>
##  1     1       8   9.7    59     5    21
##  2     4      25   9.7    61     5    23
##  3     6      78  18.4    57     5    18
##  4     7      NA   6.9    74     5    11
##  5     7      48  14.3    80     7    15
##  6     7      49  10.3    69     9    24
##  7     8      19  20.1    61     5     9
##  8     9      24  13.8    81     8     2
##  9     9      36  14.3    72     8    22
## 10     9      24  10.9    71     9    14
## # ... with 143 more rows

Summarise

Fungsi summarise() digunakan untuk meringkas data.

airquality %>% group_by(Month) %>% summarise(Temp.mean=mean(Temp), .groups = 'drop')
## # A tibble: 5 x 2
##   Month Temp.mean
##   <int>     <dbl>
## 1     5      65.5
## 2     6      79.1
## 3     7      83.9
## 4     8      84.0
## 5     9      76.9

Filter

Fungsi filter digunakan untuk memilih sebagian data sesuai perintah yang diinginkan.

airquality %>% filter(Day==1)
## # A tibble: 5 x 6
##   Ozone Solar.R  Wind  Temp Month   Day
##   <int>   <int> <dbl> <int> <int> <int>
## 1    41     190   7.4    67     5     1
## 2    NA     286   8.6    78     6     1
## 3   135     269   4.1    84     7     1
## 4    39      83   6.9    81     8     1
## 5    96     167   6.9    91     9     1

Mutate

Fungsi mutate() digunakan untuk menambahkan peubah baru pada data.

airquality %>% mutate(CelciusTemp=(5/9*(Temp-32)))
## # A tibble: 153 x 7
##    Ozone Solar.R  Wind  Temp Month   Day CelciusTemp
##    <int>   <int> <dbl> <int> <int> <int>       <dbl>
##  1    41     190   7.4    67     5     1        19.4
##  2    36     118   8      72     5     2        22.2
##  3    12     149  12.6    74     5     3        23.3
##  4    18     313  11.5    62     5     4        16.7
##  5    NA      NA  14.3    56     5     5        13.3
##  6    28      NA  14.9    66     5     6        18.9
##  7    23     299   8.6    65     5     7        18.3
##  8    19      99  13.8    59     5     8        15  
##  9     8      19  20.1    61     5     9        16.1
## 10    NA     194   8.6    69     5    10        20.6
## # ... with 143 more rows

Menggunakan fungsi bersama-sama

Berikut merupakan contoh apabila fungsi digunakan bersamaan

airqualitydata <- airquality %>%
                  group_by(Month) %>%
                  summarise(Temp.mean=mean(Temp), Wind.mean=mean(Wind)) %>%
                  mutate(CelciusTemp=(5/9*(Temp.mean-32)))%>%
                  filter(CelciusTemp>20)%>%
                  arrange(Wind.mean)%>%
                  select(Month, Wind.mean, CelciusTemp)
                  
airqualitydata
## # A tibble: 4 x 3
##   Month Wind.mean CelciusTemp
##   <int>     <dbl>       <dbl>
## 1     8      8.79        28.9
## 2     7      8.94        28.8
## 3     9     10.2         24.9
## 4     6     10.3         26.2