Sustainable Statistical Programming Learning 2018

A pre-event, Saturday, 22 September 2018


Dasar R dan RStudio

R merupakan sebuah bahasa pemograman yang modern. Sifat open-source yang dimiliki oleh R menjadikan banyak developer yang turut serta dalam proses pengemabangannya. Termasuk dalam membuat package. Package dalam R dapat diartikan sebagai kumpulan script code yang dapat ditulis dalam “environment” yang berbeda. Kumpulan script code dalam package dibuat untuk menyelesaikan suatu masalah tertentu. Hal ini menjadikan pengguna package dapat menyelesaikan masalah yang sulit hanya dalam satu baris perintah saja.
Sebagai bahasa pemograman, R menggunakan banyak sekali fungsi. Package atau fungsi yang ada di R biasanya sudah bisa menjawab berbagai macam masalah yang kita miliki.

Installasi Package

Dalam menginstall package di R, dapat menggunakan fungsi install.packages(‘nama package’). Silakan copy code di bawah ini untuk mencoba melakukan instalasi package di R. Langkah lainnya, RStudio telah memberikan user interface yang nyaman bagi penggunanya. Kita bisa ke bagian window “Package” -> “Install” -> Tulis Nama Package -> “Install”.

#dplyr adalah nama package yang akan diinstal
#hapus hashtage pertama pada baris install.packages. '#' digunakan untuk memberikan komentar
#install.packages('dplyr')

Ketika package telah berhasil diinstal, langkah selanjutnya yang kita butuhkan untuk menggunakan fungsi-fungsi / syntax yang terkandung dalam package tersebut adalah dengan menyisipkan atau “load” package tersebut. Kita dapat menggunakan fungsi library(nama package) seperti pada chunck di bawah ini:

#Load package
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
Perhatikan bahwa terdapat perbedaan dalam menulis nama package dalam fungsi library dan install.packages. Pada fungsi library, nama package yang ditulis dengan tidak menggunakan tanda petik. Namun, pada fungsi install.packages, nama package ditulis dengan menggunakan tanda petik. Hal ini sebenarnya bukanlah menjadi masalah karena library(‘dplyr’) juga akan valid apabila code tersebut di-run. Namun yang sebenarnya terjadi adalah R membaca “dplyr” sebagai suatu string sedangkan apabila tidak menggunakan petik, dplyr akan dibaca sebagai sebuah objek atau variable. Hal ini akan dibahas lebih lanjut nantinya.

Variable

Dalam R, deklarasi variable dapat dilakukan secara fleksible. User dapat menggunakan = ataupun <- sebagai perintah untuk melakukan deklarasi variable. Perhatikan code di bawah ini:

#Deklarasi vairbale x dengan nilai 3
x <- 3
#Deklarasi variable z dengan nilai 'Hello World'
z = 'Hello World'

Agar dapat melihat nilai yang terkandung dalam variable, R menawarkan solusi yang lebih fleksible ketimbang bahas pemograman lainnya. Di R, kita bisa langsung menuliskan nama vairablenya dan secara otomatis R akan mengembalikan nilai yang terkandung dalam variable tersebut. Namun, kita juga dapat menggunakan fungsi print untuk menampilkan nilai yang terkadung dalam variable tersebut.

print(x)
## [1] 3
z
## [1] "Hello World"

Vektor
Saat menggunakan R, kita akan sangat bergantung dengan vektor. Dalam membuat vektor di R, kita dapat memanfaatkan function container dengan syntax “c(…)”. Isi dari container tersebut dapat berupa kumpulan titik data yang berbeda-beda. Perhatikan code di bawah ini:

#Vektor berisi data numerik
v <- c(1,2,3)
v
## [1] 1 2 3
#Vektor berisi data string / character
c <- c('hello','world')
c
## [1] "hello" "world"
#Vektor berisi data logical atau boolean
b <- c(TRUE, FALSE, TRUE)
b
## [1]  TRUE FALSE  TRUE
#Perhaitkan bahwa tipe data string / character membutuh kan tanda ' atau "
#Vektor dapat memuat beragam jenis tipe / kelas data.
r <- c(1, FALSE, 'Hai Dunia')
r
## [1] "1"         "FALSE"     "Hai Dunia"

Data Frame
Tipe data berikutnya yang akan sering sekali ditemui dalam proses analisis data adalah data frame. Data frame dapat dipandang sebuah spreadsheet. Data frame biasanya menjadi pre-requisite bentuk data untuk package statistika. Deklarasi data frame dapat dilakukan seperti code di bawah:

dataset <- data.frame(Nama = c('Dedi','Dono','Deden'), 
                      Umur = c(23, 33, 16))
dataset
##    Nama Umur
## 1  Dedi   23
## 2  Dono   33
## 3 Deden   16

Perhatikan bahwa dalam proses analisis data, seringkali data yang kita olah merupakan data dengan ukuran jutaan baris dan puluhan hingga ratusan kolom. Dengan demikian, menampilkan seluruh dataset dalam console akan menjadi sesuatu yang mubazir. Lebih lanjut lagi, import data ke dalam RStudio Environment juga dibutuhkan agar kita dapat mengolah dataset tersebut.

#Mengambil informasi lokasi working directory
getwd()
## [1] "/Users/gojekindonesia"
#Mengganti lokasi working directory
#Gunakan setwd untuk mengganti working directory

Perhatikan code di atas! Prose di atas diperlukan untuk mempermudah kita dalam melakukan import dataset. Akibat dari code di atas, agar dataset yang kita inginkan dapat dengan mudah diimport, dataset harus disimpan di dalam working directory yang telah kita tetapkan di atas.

#dataexternal <- read.csv('~/Downloads/Kuesioner.csv')
#Perhatikan
#?read.csv "untuk mengeluarkan help mengenai function read csv"

Matrix dan List
Selain, vektor dan data frame, terdapat dua jenis tipe data lagi yang juga sering digunakan yaitu matriks dan list. List merupakan sebuah daftar yang isi elemennya dapat terdiri dari kelas data yang berbeda-beda. Perhatikan code di bawah ini!

b <- list(c(1,2,3), 'Hei', matrix(c(1,0,0,1),ncol = 2, nrow = 2))
b
## [[1]]
## [1] 1 2 3
## 
## [[2]]
## [1] "Hei"
## 
## [[3]]
##      [,1] [,2]
## [1,]    1    0
## [2,]    0    1
m <- matrix(c(1,0,0,1), ncol = 2, nrow = 2)
#Melakukan subset matrix dan list
m[2,2]
## [1] 1
b[1]
## [[1]]
## [1] 1 2 3
b[[1]]
## [1] 1 2 3
#Perhatikan kelas dari kedua subset b di atas
class(b[1])
## [1] "list"
class(b[[1]])
## [1] "numeric"
#Perhatikan kembali hasil print variable list b
#Jalankanlah code di bawah ini
names(b) <- c('VektorBilangan', 'Character', 'Matrix')
b
## $VektorBilangan
## [1] 1 2 3
## 
## $Character
## [1] "Hei"
## 
## $Matrix
##      [,1] [,2]
## [1,]    1    0
## [2,]    0    1
b$Character
## [1] "Hei"
b[[2]]
## [1] "Hei"

Operasi Aritmatika di R
Operasi aritmatika di R dapat dilakukan dengan mudah. Terutama apabila kita ingin melakukan transformasi data terhadap tiap elemen vektor ataupun matriks. Perhatikan code di bawah ini:

x <- c(1,2,3,4)
x + 3
## [1] 4 5 6 7
x * 10
## [1] 10 20 30 40
x / 10
## [1] 0.1 0.2 0.3 0.4
x - 1
## [1] 0 1 2 3

Berikut ini adalah beberapa fungsi dasar di R untuk menghitung sari numerik dari suatu vektor atau data frame.

x <- c(10,3,23,11)
#Jumlah total
sum(x)
## [1] 47
#Jumlah perkalian
prod(x)
## [1] 7590
#Rataan
mean(x)
## [1] 11.75
#Maksimum
max(x)
## [1] 23
#Minimum
min(x)
## [1] 3
#Banyak datum
length(x)
## [1] 4
#Standard Deviasi
sd(x)
## [1] 8.301606
#Variansi
var(x)
## [1] 68.91667
#Quantile
quantile(x,0.5)
##  50% 
## 10.5
#Hal yang perlu diingat!
#Perhatikan bahwa di tiap fungsi memiliki atribut na.rm = FALSE.. Mengubah atribut ini menjadi
#na.rm = TRUE apabila terhadap elemen not available dalam data
mat <- matrix(c(1,2,3,4), ncol = 2, nrow = 2)
sum(mat)
## [1] 10
mean(mat)
## [1] 2.5
max(mat)
## [1] 4
min(mat)
## [1] 1

Looping dan Ifelse

for (i in seq(1,3,0.5)){
  print(i)
}
## [1] 1
## [1] 1.5
## [1] 2
## [1] 2.5
## [1] 3
x <- 0
while(x <= 5){
  print(x)
  x <- x + 1
}
## [1] 0
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5
z <- 0
z <- 3
ifelse(z < 2 & x < 8, TRUE, FALSE)
## [1] FALSE

Analisis Data Frame

class(iris)
## [1] "data.frame"
head(iris, n = 6)
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
## 3          4.7         3.2          1.3         0.2  setosa
## 4          4.6         3.1          1.5         0.2  setosa
## 5          5.0         3.6          1.4         0.2  setosa
## 6          5.4         3.9          1.7         0.4  setosa
head(iris, n = 10)
##    Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1           5.1         3.5          1.4         0.2  setosa
## 2           4.9         3.0          1.4         0.2  setosa
## 3           4.7         3.2          1.3         0.2  setosa
## 4           4.6         3.1          1.5         0.2  setosa
## 5           5.0         3.6          1.4         0.2  setosa
## 6           5.4         3.9          1.7         0.4  setosa
## 7           4.6         3.4          1.4         0.3  setosa
## 8           5.0         3.4          1.5         0.2  setosa
## 9           4.4         2.9          1.4         0.2  setosa
## 10          4.9         3.1          1.5         0.1  setosa
tail(iris, n = 5)
##     Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
## 146          6.7         3.0          5.2         2.3 virginica
## 147          6.3         2.5          5.0         1.9 virginica
## 148          6.5         3.0          5.2         2.0 virginica
## 149          6.2         3.4          5.4         2.3 virginica
## 150          5.9         3.0          5.1         1.8 virginica
tail(iris)
##     Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
## 145          6.7         3.3          5.7         2.5 virginica
## 146          6.7         3.0          5.2         2.3 virginica
## 147          6.3         2.5          5.0         1.9 virginica
## 148          6.5         3.0          5.2         2.0 virginica
## 149          6.2         3.4          5.4         2.3 virginica
## 150          5.9         3.0          5.1         1.8 virginica
summary(iris)
##   Sepal.Length    Sepal.Width     Petal.Length    Petal.Width   
##  Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100  
##  1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300  
##  Median :5.800   Median :3.000   Median :4.350   Median :1.300  
##  Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199  
##  3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800  
##  Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500  
##        Species  
##  setosa    :50  
##  versicolor:50  
##  virginica :50  
##                 
##                 
## 
str(iris)
## 'data.frame':    150 obs. of  5 variables:
##  $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
##  $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
##  $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
##  $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
##  $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
#Subsetting data frame
#Ingin diambil baris pertama dari data set iris
iris[1,]
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
#Ingin dilihat priview head dari vektor data Sepal.Length
head(iris[1])
##   Sepal.Length
## 1          5.1
## 2          4.9
## 3          4.7
## 4          4.6
## 5          5.0
## 6          5.4
head(iris$Sepal.Length)
## [1] 5.1 4.9 4.7 4.6 5.0 5.4
#Subsetting dengan kondisi tertentu
setosa1 <- iris[iris$Species == 'setosa',]
head(setosa1)
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
## 3          4.7         3.2          1.3         0.2  setosa
## 4          4.6         3.1          1.5         0.2  setosa
## 5          5.0         3.6          1.4         0.2  setosa
## 6          5.4         3.9          1.7         0.4  setosa
setosa2 <- iris[iris$Species == 'setosa' & iris$Sepal.Length < 4.9,]