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