R adalah bahasa pemrograman dan lingkungan perangkat lunak bebas untuk komputasi statistik dan grafik yang didukung oleh R Core Team dan R Foundation for Statistical Computing. Software ini merupakan bahasa pemrograman untuk analisis statistik yang paling banyak digunakan, karena dengan menggunakan R memungkinkan kamu untuk melakukan import data dari berbagai sumber database dan format yang berbeda yang didukung oleh lebih dari 7000 packages dengan fungsi yang berbeda-beda. Software R juga memungkinkan kita melakukan data wrangling.
Pada halaman ini, saya akan menyajikan bagaimana cara kita mengakses database menggunakan R serta melakukan data wrangling memanfaatkan software R.
R memungkinkan kita untuk mengakses databases yang sebelumnya telah kita unduh dengan menggunakan packages RSQLite, DBI, juga tidyverse. Untuk melakukannya, kita perlu mendownload ketiga packages tersebut.
install.packages(c(“RSQLite”, “DBI”), dependencies = TRUE) install.packages(c(“tidyverse”))
Selanjutnya, kita bangkitkan ketiga packages tersebut menggunakan fungsi library.
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.1.2
## -- Attaching packages --------------------------------------- tidyverse 1.3.1 --
## v ggplot2 3.3.5 v purrr 0.3.4
## v tibble 3.1.6 v dplyr 1.0.7
## v tidyr 1.1.4 v stringr 1.4.0
## v readr 2.1.1 v forcats 0.5.1
## Warning: package 'ggplot2' was built under R version 4.1.2
## Warning: package 'tibble' was built under R version 4.1.2
## Warning: package 'tidyr' was built under R version 4.1.2
## Warning: package 'readr' was built under R version 4.1.2
## Warning: package 'purrr' was built under R version 4.1.2
## Warning: package 'dplyr' was built under R version 4.1.2
## Warning: package 'stringr' was built under R version 4.1.2
## Warning: package 'forcats' was built under R version 4.1.2
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
library(RSQLite)
## Warning: package 'RSQLite' was built under R version 4.1.2
library(DBI)
## Warning: package 'DBI' was built under R version 4.1.2
Secara umum, akses terhadap databases menggunakan R dapat dilaksakan dengan menggunakan syntax sebagai berikut :
DBI::dbConnect(RSQLite::SQLite(), path = ":dbname:")
## <SQLiteConnection>
## Path:
## Extensions: TRUE
Path pada syntax tersebut nantinya dapat kita gantikan dengan lokasi file databases yang akan kita akses dalam komputer.
chinook<-DBI::dbConnect(RSQLite::SQLite(), "C:/Users/ASUS/OneDrive/Documents/Kuliah/Semester 3/Manajemen Data Relationship/Software/chinook.db")
Dengan syntax tersebut, kini kita memiliki sebuah objek bernama chinook yang berisikan data-data dalam databases chinook. Untuk melihat entity-entity atau tabel-tabel apa saja yang terdapat dalam databases tersebut, kita bisa menggunakan fungsi dbListTables.
dbListTables(chinook)
## [1] "albums" "artists" "customers" "employees"
## [5] "genres" "invoice_items" "invoices" "media_types"
## [9] "playlist_track" "playlists" "sqlite_sequence" "sqlite_stat1"
## [13] "tracks"
Kini kita dapat melihat 13 tabel yang berdapat dalam databases tersebut. Untuk mengakses tabel pada database dapat digunakan fungsi tbl(database, “table”) dari package dplyr yang tersimpan dalam packages tidyverse. Misalkan, kita ingin melihat isi tabel customers pada databases tersebut.
Customers <- tbl(chinook,"customers")
Customers
## # Source: table<customers> [?? x 13]
## # Database: sqlite 3.37.0 [C:\Users\ASUS\OneDrive\Documents\Kuliah\Semester
## # 3\Manajemen Data Relationship\Software\chinook.db]
## CustomerId FirstName LastName Company Address City State Country PostalCode
## <int> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 1 Luís Gonçalves Embrae~ Av. Br~ São ~ SP Brazil 12227-000
## 2 2 Leonie Köhler <NA> Theodo~ Stut~ <NA> Germany 70174
## 3 3 François Tremblay <NA> 1498 r~ Mont~ QC Canada H2G 1A7
## 4 4 Bjørn Hansen <NA> Ullevå~ Oslo <NA> Norway 0171
## 5 5 František Wichterl~ JetBra~ Klanov~ Prag~ <NA> Czech ~ 14700
## 6 6 Helena Holý <NA> Rilská~ Prag~ <NA> Czech ~ 14300
## 7 7 Astrid Gruber <NA> Rotent~ Vien~ <NA> Austria 1010
## 8 8 Daan Peeters <NA> Grétry~ Brus~ <NA> Belgium 1000
## 9 9 Kara Nielsen <NA> Sønder~ Cope~ <NA> Denmark 1720
## 10 10 Eduardo Martins Woodst~ Rua Dr~ São ~ SP Brazil 01007-010
## # ... with more rows, and 4 more variables: Phone <chr>, Fax <chr>,
## # Email <chr>, SupportRepId <int>
Kita dapat melihat detail isi dari tabel customers dengan menggunakan fungsi view(Customers).
Selain mengakses databases, software R juga memungkinkan kita untuk memanipulasi data dalam tabel tersebut. Misalkan, kita ingin mengamati pelanggan-pelanggan kita yang berasal dari negara Amerika Serikat.
CFUSA<-Customers %>%
filter(Country =="USA")
CFUSA
## # Source: lazy query [?? x 13]
## # Database: sqlite 3.37.0 [C:\Users\ASUS\OneDrive\Documents\Kuliah\Semester
## # 3\Manajemen Data Relationship\Software\chinook.db]
## CustomerId FirstName LastName Company Address City State Country PostalCode
## <int> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 16 Frank Harris Google ~ 1600 A~ Moun~ CA USA 94043-1351
## 2 17 Jack Smith Microso~ 1 Micr~ Redm~ WA USA 98052-8300
## 3 18 Michelle Brooks <NA> 627 Br~ New ~ NY USA 10012-2612
## 4 19 Tim Goyer Apple I~ 1 Infi~ Cupe~ CA USA 95014
## 5 20 Dan Miller <NA> 541 De~ Moun~ CA USA 94040-111
## 6 21 Kathy Chase <NA> 801 W ~ Reno NV USA 89503
## 7 22 Heather Leacock <NA> 120 S ~ Orla~ FL USA 32801
## 8 23 John Gordon <NA> 69 Sal~ Bost~ MA USA 2113
## 9 24 Frank Ralston <NA> 162 E ~ Chic~ IL USA 60611
## 10 25 Victor Stevens <NA> 319 N.~ Madi~ WI USA 53703
## # ... with more rows, and 4 more variables: Phone <chr>, Fax <chr>,
## # Email <chr>, SupportRepId <int>
Contoh lainnya, kita ingin mengelompokkan pelanggan berdasarkan SupportRepId dan mengurutkannya dari SupportRepId terbesar menuju terkecil.
Pelanggan <- tbl(chinook, sql("SELECT FirstName, lastName, Country, SupportRepId FROM customers ORDER BY SupportRepId DESC"))
Pelanggan
## # Source: SQL [?? x 4]
## # Database: sqlite 3.37.0 [C:\Users\ASUS\OneDrive\Documents\Kuliah\Semester
## # 3\Manajemen Data Relationship\Software\chinook.db]
## FirstName lastName Country SupportRepId
## <chr> <chr> <chr> <int>
## 1 Luis Rojas Chile 5
## 2 Steve Murray United Kingdom 5
## 3 Joakim Johansson Sweden 5
## 4 Enrique Muñoz Spain 5
## 5 Johannes Van der Berg Netherlands 5
## 6 Lucas Mancini Italy 5
## 7 Marc Dubois France 5
## 8 Hannah Schneider Germany 5
## 9 Martha Silk Canada 5
## 10 Julia Barnett USA 5
## # ... with more rows
Demikian contoh mengakses databases menggunakan Engine SQL di R, untuk lebih mendalam silahkan mengunjungi laman https://rpubs.com/nurussadad/database-with-R dimana pembahasan lebih mendalam dan mudah dipahami.
Software R memfasilitasi kita untuk mengeksekusi syntax SQL dengan menggunakan package rmarkdown
Dalam melakukannya, kita perlu membuat suatu objek menjadi connection terlebih dahulu, lalu objek tersebut digunakan bersama engine SQL
Secara umum, membuat suatu objek menjadi connection adalah sebagai berikut :
Nama_objek<- DBI::dbConnect(RSQLite::SQLite(), path = ":dbname:")
Misal kita membuat objek chinook sebagai connection
chinook<-DBI::dbConnect(RSQLite::SQLite(), "C:/Users/ASUS/OneDrive/Documents/Kuliah/Semester 3/Manajemen Data Relationship/Software/chinook.db")
Sekarang kita memiliki objek chinook sebagai connection yang akan kita gunakan bersama engine SQL
Sehingga kita bisa membuat syntax sebagai berikut :
select
*
from
customers;
| CustomerId | FirstName | LastName | Company | Address | City | State | Country | PostalCode | Phone | Fax | SupportRepId | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Luís | Gonçalves | Embraer - Empresa Brasileira de Aeronáutica S.A. | Av. Brigadeiro Faria Lima, 2170 | São José dos Campos | SP | Brazil | 12227-000 | +55 (12) 3923-5555 | +55 (12) 3923-5566 | luisg@embraer.com.br | 3 |
| 2 | Leonie | Köhler | NA | Theodor-Heuss-Straße 34 | Stuttgart | NA | Germany | 70174 | +49 0711 2842222 | NA | leonekohler@surfeu.de | 5 |
| 3 | François | Tremblay | NA | 1498 rue Bélanger | Montréal | QC | Canada | H2G 1A7 | +1 (514) 721-4711 | NA | ftremblay@gmail.com | 3 |
| 4 | Bjørn | Hansen | NA | Ullevålsveien 14 | Oslo | NA | Norway | 0171 | +47 22 44 22 22 | NA | bjorn.hansen@yahoo.no | 4 |
| 5 | František | Wichterlová | JetBrains s.r.o. | Klanova 9/506 | Prague | NA | Czech Republic | 14700 | +420 2 4172 5555 | +420 2 4172 5555 | frantisekw@jetbrains.com | 4 |
| 6 | Helena | Holý | NA | Rilská 3174/6 | Prague | NA | Czech Republic | 14300 | +420 2 4177 0449 | NA | hholy@gmail.com | 5 |
| 7 | Astrid | Gruber | NA | Rotenturmstraße 4, 1010 Innere Stadt | Vienne | NA | Austria | 1010 | +43 01 5134505 | NA | astrid.gruber@apple.at | 5 |
| 8 | Daan | Peeters | NA | Grétrystraat 63 | Brussels | NA | Belgium | 1000 | +32 02 219 03 03 | NA | daan_peeters@apple.be | 4 |
| 9 | Kara | Nielsen | NA | Sønder Boulevard 51 | Copenhagen | NA | Denmark | 1720 | +453 3331 9991 | NA | kara.nielsen@jubii.dk | 4 |
| 10 | Eduardo | Martins | Woodstock Discos | Rua Dr. Falcão Filho, 155 | São Paulo | SP | Brazil | 01007-010 | +55 (11) 3033-5446 | +55 (11) 3033-4564 | eduardo@woodstock.com.br | 4 |
Dengan pola seperti itu, kita dapat mengeksekusi syntax SQL di R dengan memanfaatkan package rmarkdown
Misalkan, kita ingin mengakses tabel customers dari database chinook yang telah kita akses saat membangun objek chinook dan ingin mengamati pelanggan-pelanggan kita yang berasal dari negara Amerika Serikat. Maka, kita dapat mengeksekusi syntax berikut ini:
```sql
select
*
from
customers
where
Country = "USA";
| CustomerId | FirstName | LastName | Company | Address | City | State | Country | PostalCode | Phone | Fax | SupportRepId | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 16 | Frank | Harris | Google Inc. | 1600 Amphitheatre Parkway | Mountain View | CA | USA | 94043-1351 | +1 (650) 253-0000 | +1 (650) 253-0000 | fharris@google.com | 4 |
| 17 | Jack | Smith | Microsoft Corporation | 1 Microsoft Way | Redmond | WA | USA | 98052-8300 | +1 (425) 882-8080 | +1 (425) 882-8081 | jacksmith@microsoft.com | 5 |
| 18 | Michelle | Brooks | NA | 627 Broadway | New York | NY | USA | 10012-2612 | +1 (212) 221-3546 | +1 (212) 221-4679 | michelleb@aol.com | 3 |
| 19 | Tim | Goyer | Apple Inc. | 1 Infinite Loop | Cupertino | CA | USA | 95014 | +1 (408) 996-1010 | +1 (408) 996-1011 | tgoyer@apple.com | 3 |
| 20 | Dan | Miller | NA | 541 Del Medio Avenue | Mountain View | CA | USA | 94040-111 | +1 (650) 644-3358 | NA | dmiller@comcast.com | 4 |
| 21 | Kathy | Chase | NA | 801 W 4th Street | Reno | NV | USA | 89503 | +1 (775) 223-7665 | NA | kachase@hotmail.com | 5 |
| 22 | Heather | Leacock | NA | 120 S Orange Ave | Orlando | FL | USA | 32801 | +1 (407) 999-7788 | NA | hleacock@gmail.com | 4 |
| 23 | John | Gordon | NA | 69 Salem Street | Boston | MA | USA | 2113 | +1 (617) 522-1333 | NA | johngordon22@yahoo.com | 4 |
| 24 | Frank | Ralston | NA | 162 E Superior Street | Chicago | IL | USA | 60611 | +1 (312) 332-3232 | NA | fralston@gmail.com | 3 |
| 25 | Victor | Stevens | NA | 319 N. Frances Street | Madison | WI | USA | 53703 | +1 (608) 257-0597 | NA | vstevens@yahoo.com | 5 |
Contoh lainnya, kita ingin mengelompokkan pelanggan berdasarkan SupportRepId dan mengurutkannya dari SupportRepId terbesar menuju terkecil.
select
FirstName, lastName, Country, SupportRepId
from
customers
where
Country = "USA"
ORDER BY
SupportRepId
DESC;
| FirstName | LastName | Country | SupportRepId |
|---|---|---|---|
| Julia | Barnett | USA | 5 |
| Victor | Stevens | USA | 5 |
| Kathy | Chase | USA | 5 |
| Jack | Smith | USA | 5 |
| Patrick | Gray | USA | 4 |
| Richard | Cunningham | USA | 4 |
| John | Gordon | USA | 4 |
| Heather | Leacock | USA | 4 |
| Dan | Miller | USA | 4 |
| Frank | Harris | USA | 4 |
Dengan demikian, kita dapat mengeksekusi syntax-syntax SQL yang kita inginkan menggunakan R
Data wrangling adalah metode penggunaan yang tidak terorganisir, tidak berarti (dalam dirinya sendiri), data yang rumit dan membersihkannya bersama dengan memperpendek data untuk membuatnya dapat diakses untuk mendekati, mengatur dan mencermati sesuai (Voleti R, 2020). Dengan kata lain,data wrangling adalah proses pembersihan, penataan, dan pengayaan data mentah ke dalam format yang diinginkan. Dengan proses ini, kita dapat menghasilkan data yang siap untuk dianalisis dan di uji coba.
Software R memungkinkan user melakukan data wrangling dengan memanfaatkan package tidyverse.
Package tidyverse adalah kumpulan beberapa packages yang secara bersama-sama memungkinkan user melakukan proses data wrangling. Kumpulan packages tersebut adalah :
Untuk melakukan data wrangling di R, pertama-tama kita perlu mengistal package tidyverse lalu membangkitkannya.
Instal package tidyverse : instal.package(tidyverse)
library(tidyverse)
Selanjutnya, kita dapat mengimport data dengan menggunakan fungsi read.scv ataupun memanfaatkan dataset yang telah ada dalam R.
Dataset tersebut dapat dibangkitkan dengan memanfaatkan package datasets yang kemudian dibangkitkan dengan fungsi library.
library(datasets)
data("Loblolly")
Loblolly <- tibble::as_tibble(Loblolly)
Package dplyr yang terdapat dalam package tidyverse memungkinkan penggguna untuk memanipulasi data. Kemampuan inilah yang digunakan untuk melakukan data wrangling di R.
Package dplyr memiliki banyak fungsi untuk memanipulasi data, diantaranya :
Fungsi ini digunakan untuk meringkas data
Loblolly %>%
group_by(Seed)%>%
summarise(mean=mean(height), .groups = 'drop')
## # A tibble: 14 x 2
## Seed mean
## <ord> <dbl>
## 1 329 30.3
## 2 327 30.6
## 3 325 31.9
## 4 307 31.3
## 5 331 31.0
## 6 311 31.7
## 7 315 32.4
## 8 321 31.2
## 9 319 32.9
## 10 301 33.2
## 11 323 33.6
## 12 309 33.8
## 13 303 34.1
## 14 305 35.1
Fungsi ini digunakan untuk mengurutkan data berdasarkan suatu peubah.
Loblolly %>% arrange(age)
## # A tibble: 84 x 3
## height age Seed
## <dbl> <dbl> <ord>
## 1 4.51 3 301
## 2 4.55 3 303
## 3 4.79 3 305
## 4 3.91 3 307
## 5 4.81 3 309
## 6 3.88 3 311
## 7 4.32 3 315
## 8 4.57 3 319
## 9 3.77 3 321
## 10 4.33 3 323
## # ... with 74 more rows
Loblolly %>%
group_by(Seed)%>%
summarise(mean=mean(height), .groups = 'drop') %>%
arrange(desc(Seed))
## # A tibble: 14 x 2
## Seed mean
## <ord> <dbl>
## 1 305 35.1
## 2 303 34.1
## 3 309 33.8
## 4 323 33.6
## 5 301 33.2
## 6 319 32.9
## 7 321 31.2
## 8 315 32.4
## 9 311 31.7
## 10 331 31.0
## 11 307 31.3
## 12 325 31.9
## 13 327 30.6
## 14 329 30.3
Fungsi filter() digunakan untuk menyaring data berdasarkan suatu kategori
Loblolly %>% filter(age<10)
## # A tibble: 28 x 3
## height age Seed
## <dbl> <dbl> <ord>
## 1 4.51 3 301
## 2 10.9 5 301
## 3 4.55 3 303
## 4 10.9 5 303
## 5 4.79 3 305
## 6 11.4 5 305
## 7 3.91 3 307
## 8 9.48 5 307
## 9 4.81 3 309
## 10 11.2 5 309
## # ... with 18 more rows
Loblolly %>%
group_by(Seed)%>%
summarise(mean=mean(height), .groups = 'drop') %>%
filter(mean>32, mean<34)
## # A tibble: 5 x 2
## Seed mean
## <ord> <dbl>
## 1 315 32.4
## 2 319 32.9
## 3 301 33.2
## 4 323 33.6
## 5 309 33.8
Fungsi select() digunakan untuk mengambil sebagian data/subset data berdasarkan peubah tertentu
Loblolly %>% select(height,age)
## # A tibble: 84 x 2
## height age
## <dbl> <dbl>
## 1 4.51 3
## 2 10.9 5
## 3 28.7 10
## 4 41.7 15
## 5 52.7 20
## 6 60.9 25
## 7 4.55 3
## 8 10.9 5
## 9 29.1 10
## 10 42.8 15
## # ... with 74 more rows
Fungsi ini digunakan untuk menambah peubah baru pada data
Loblolly %>% mutate("Rata-rata pertambahan per tahun" =height/age)
## # A tibble: 84 x 4
## height age Seed `Rata-rata pertambahan per tahun`
## <dbl> <dbl> <ord> <dbl>
## 1 4.51 3 301 1.50
## 2 10.9 5 301 2.18
## 3 28.7 10 301 2.87
## 4 41.7 15 301 2.78
## 5 52.7 20 301 2.64
## 6 60.9 25 301 2.44
## 7 4.55 3 303 1.52
## 8 10.9 5 303 2.18
## 9 29.1 10 303 2.91
## 10 42.8 15 303 2.86
## # ... with 74 more rows
Kelima fungsi tersebut adalah sebagian dari begitu banyak fungsi lainnya yang terdapat dalam package dplyr. Mengenai fungsi-fungsi lainnya dapat dilihat pada laman https://www.rstudio.com/wp-content/uploads/2015/02/data-wrangling-cheatsheet.pdf
Demikianlah halaman ini saya sajikan, saya sangat menyadari kekurangan saya dalam penyajian rpubs maupun konten yang saya sajikan untuk itu saya memohon maaf kepada setiap pembaca. Terima kasih banyak saya lantunkan kepada Mas Azis dan Mbak Laily selaku asisten praktikum yang telah membimbing saya. Sekiranya halaman ini dapat memberikan suatu insight baru bagi pembaca.
Nurassad, A.A.(2021, Desember 21).Praktikum 01 - Pengenalan tidyverse.Retrieved from https://rpubs.com/nurussadad/STA581-01-tidyverse
Nurassad, A.A.(2021, Desember 18).Query Database dengan SQL di Software R.Retrieved from https://rpubs.com/nurussadad/Query-SQL-di-R
Nurassad, A.A.(2021, Desember 19).P3a-Database Queries with R.Retrieved from https://rpubs.com/nurussadad/database-with-R
Safa.(2021, Desember 24).Belajar Bahasa Pemrograman R.Retrieved from https://algorit.ma/blog/belajar-bahasa-pemrograman-r-rstudio/
Voleti R.2020.Data Wrangling- A Goliath of Data Industry.International Journal of Engineering Research & Technology (IJERT).9:273.ISSN: 2278-0181