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.

A. Connection to Databases

1) Akses Databases Memanfaatkan Engine SQL

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.

2) Akses Databases Memanfaatkan DPLYR

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;
Displaying records 1 - 10
CustomerId FirstName LastName Company Address City State Country PostalCode Phone Fax Email 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 3
2 Leonie Köhler NA Theodor-Heuss-Straße 34 Stuttgart NA Germany 70174 +49 0711 2842222 NA 5
3 François Tremblay NA 1498 rue Bélanger Montréal QC Canada H2G 1A7 +1 (514) 721-4711 NA 3
4 Bjørn Hansen NA Ullevålsveien 14 Oslo NA Norway 0171 +47 22 44 22 22 NA 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 4
6 Helena Holý NA Rilská 3174/6 Prague NA Czech Republic 14300 +420 2 4177 0449 NA 5
7 Astrid Gruber NA Rotenturmstraße 4, 1010 Innere Stadt Vienne NA Austria 1010 +43 01 5134505 NA 5
8 Daan Peeters NA Grétrystraat 63 Brussels NA Belgium 1000 +32 02 219 03 03 NA 4
9 Kara Nielsen NA Sønder Boulevard 51 Copenhagen NA Denmark 1720 +453 3331 9991 NA 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 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";
Displaying records 1 - 10
CustomerId FirstName LastName Company Address City State Country PostalCode Phone Fax Email SupportRepId
16 Frank Harris Google Inc. 1600 Amphitheatre Parkway Mountain View CA USA 94043-1351 +1 (650) 253-0000 +1 (650) 253-0000 4
17 Jack Smith Microsoft Corporation 1 Microsoft Way Redmond WA USA 98052-8300 +1 (425) 882-8080 +1 (425) 882-8081 5
18 Michelle Brooks NA 627 Broadway New York NY USA 10012-2612 +1 (212) 221-3546 +1 (212) 221-4679 3
19 Tim Goyer Apple Inc. 1 Infinite Loop Cupertino CA USA 95014 +1 (408) 996-1010 +1 (408) 996-1011 3
20 Dan Miller NA 541 Del Medio Avenue Mountain View CA USA 94040-111 +1 (650) 644-3358 NA 4
21 Kathy Chase NA 801 W 4th Street Reno NV USA 89503 +1 (775) 223-7665 NA 5
22 Heather Leacock NA 120 S Orange Ave Orlando FL USA 32801 +1 (407) 999-7788 NA 4
23 John Gordon NA 69 Salem Street Boston MA USA 2113 +1 (617) 522-1333 NA 4
24 Frank Ralston NA 162 E Superior Street Chicago IL USA 60611 +1 (312) 332-3232 NA 3
25 Victor Stevens NA 319 N. Frances Street Madison WI USA 53703 +1 (608) 257-0597 NA 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;
Displaying records 1 - 10
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

B. Data Wrangling

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 :

  1. readr digunakan untuk mengimpor data tabula
  2. tidyr digunakan untuk merapihkan data
  3. dplyr digunakan untuk memanipulasi data
  4. ggplot2 digunakan untuk visualisasi data

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 :

1) Fungsi Summarise()

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

2) Fungsi arrange()

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

3) Fungsi filter()

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

4) Fungsi select()

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

5) Fungsi mutate()

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

Penutup

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.

Referensi

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