Big Data Analytics - Pengantar R
Bagian ini dikhususkan untuk memperkenalkan pengguna pada bahasa pemrograman R. R dapat diunduh dari situs web cran . Untuk pengguna Windows, menginstal rtools dan rstudio IDE akan berguna .
Konsep umum dibalik R berfungsi sebagai antarmuka ke perangkat lunak lain yang dikembangkan dalam bahasa terkompilasi seperti C, C ++, dan Fortran dan untuk memberi pengguna alat interaktif untuk menganalisis data.
Arahkan ke folder file zip buku bda/part2/R_introduction dan buka R_introduction.Rprojmengajukan. Ini akan membuka sesi RStudio. Kemudian buka file 01_vectors.R. Jalankan skrip baris demi baris dan ikuti komentar di kode. Pilihan lain yang berguna untuk belajar adalah dengan mengetikkan kode, ini akan membantu Anda terbiasa dengan sintaks R. Di R komentar ditulis dengan simbol #.
Untuk menampilkan hasil menjalankan kode R di buku, setelah kode dievaluasi, hasil R kembali dikomentari. Dengan cara ini, Anda dapat menyalin dan menempel kode di buku dan mencoba langsung bagian-bagiannya di R.
# Create a vector of numbers
numbers = c(1, 2, 3, 4, 5)
print(numbers)
# [1] 1 2 3 4 5
# Create a vector of letters
ltrs = c('a', 'b', 'c', 'd', 'e')
# [1] "a" "b" "c" "d" "e"
# Concatenate both
mixed_vec = c(numbers, ltrs)
print(mixed_vec)
# [1] "1" "2" "3" "4" "5" "a" "b" "c" "d" "e"
Mari kita analisis apa yang terjadi di kode sebelumnya. Kita dapat melihat bahwa dimungkinkan untuk membuat vektor dengan angka dan huruf. Kami tidak perlu memberi tahu R tipe data apa yang kami inginkan sebelumnya. Akhirnya, kami dapat membuat vektor dengan angka dan huruf. Vektor mixed_vec telah memaksa angka menjadi karakter, kita dapat melihatnya dengan memvisualisasikan bagaimana nilai dicetak di dalam tanda kutip.
Kode berikut menunjukkan tipe data dari berbagai vektor yang dikembalikan oleh kelas fungsi. Biasanya menggunakan fungsi kelas untuk "menginterogasi" sebuah objek, menanyakan kelasnya.
### Evaluate the data types using class
### One dimensional objects
# Integer vector
num = 1:10
class(num)
# [1] "integer"
# Numeric vector, it has a float, 10.5
num = c(1:10, 10.5)
class(num)
# [1] "numeric"
# Character vector
ltrs = letters[1:10]
class(ltrs)
# [1] "character"
# Factor vector
fac = as.factor(ltrs)
class(fac)
# [1] "factor"
R juga mendukung objek dua dimensi. Pada kode berikut, terdapat contoh dari dua struktur data terpopuler yang digunakan di R: matrix dan data.frame.
# Matrix
M = matrix(1:12, ncol = 4)
# [,1] [,2] [,3] [,4]
# [1,] 1 4 7 10
# [2,] 2 5 8 11
# [3,] 3 6 9 12
lM = matrix(letters[1:12], ncol = 4)
# [,1] [,2] [,3] [,4]
# [1,] "a" "d" "g" "j"
# [2,] "b" "e" "h" "k"
# [3,] "c" "f" "i" "l"
# Coerces the numbers to character
# cbind concatenates two matrices (or vectors) in one matrix
cbind(M, lM)
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
# [1,] "1" "4" "7" "10" "a" "d" "g" "j"
# [2,] "2" "5" "8" "11" "b" "e" "h" "k"
# [3,] "3" "6" "9" "12" "c" "f" "i" "l"
class(M)
# [1] "matrix"
class(lM)
# [1] "matrix"
# data.frame
# One of the main objects of R, handles different data types in the same object.
# It is possible to have numeric, character and factor vectors in the same data.frame
df = data.frame(n = 1:5, l = letters[1:5])
df
# n l
# 1 1 a
# 2 2 b
# 3 3 c
# 4 4 d
# 5 5 e
Seperti yang ditunjukkan pada contoh sebelumnya, dimungkinkan untuk menggunakan tipe data yang berbeda dalam objek yang sama. Secara umum, ini adalah bagaimana data disajikan dalam database, API bagian dari data adalah teks atau vektor karakter dan numerik lainnya. Tugas analis adalah untuk menentukan tipe data statistik mana yang akan ditetapkan dan kemudian menggunakan tipe data R yang benar untuknya. Dalam statistik, kami biasanya menganggap variabel adalah dari jenis berikut -
- Numeric
- Nominal atau kategoris
- Ordinal
Di R, vektor bisa dari kelas berikut -
- Numerik - Integer
- Factor
- Faktor yang Dipesan
R menyediakan tipe data untuk setiap tipe statistik variabel. Faktor terurut jarang digunakan, tetapi dapat dibuat oleh faktor fungsi, atau dipesan.
Bagian berikut membahas konsep pengindeksan. Ini adalah operasi yang cukup umum, dan menangani masalah pemilihan bagian dari suatu objek dan membuat transformasi padanya.
# Let's create a data.frame
df = data.frame(numbers = 1:26, letters)
head(df)
# numbers letters
# 1 1 a
# 2 2 b
# 3 3 c
# 4 4 d
# 5 5 e
# 6 6 f
# str gives the structure of a data.frame, it’s a good summary to inspect an object
str(df)
# 'data.frame': 26 obs. of 2 variables:
# $ numbers: int 1 2 3 4 5 6 7 8 9 10 ...
# $ letters: Factor w/ 26 levels "a","b","c","d",..: 1 2 3 4 5 6 7 8 9 10 ...
# The latter shows the letters character vector was coerced as a factor.
# This can be explained by the stringsAsFactors = TRUE argumnet in data.frame
# read ?data.frame for more information
class(df)
# [1] "data.frame"
### Indexing
# Get the first row
df[1, ]
# numbers letters
# 1 1 a
# Used for programming normally - returns the output as a list
df[1, , drop = TRUE]
# $numbers
# [1] 1
#
# $letters
# [1] a
# Levels: a b c d e f g h i j k l m n o p q r s t u v w x y z
# Get several rows of the data.frame
df[5:7, ]
# numbers letters
# 5 5 e
# 6 6 f
# 7 7 g
### Add one column that mixes the numeric column with the factor column
df$mixed = paste(df$numbers, df$letters, sep = ’’)
str(df)
# 'data.frame': 26 obs. of 3 variables:
# $ numbers: int 1 2 3 4 5 6 7 8 9 10 ...
# $ letters: Factor w/ 26 levels "a","b","c","d",..: 1 2 3 4 5 6 7 8 9 10 ...
# $ mixed : chr "1a" "2b" "3c" "4d" ...
### Get columns
# Get the first column
df[, 1]
# It returns a one dimensional vector with that column
# Get two columns
df2 = df[, 1:2]
head(df2)
# numbers letters
# 1 1 a
# 2 2 b
# 3 3 c
# 4 4 d
# 5 5 e
# 6 6 f
# Get the first and third columns
df3 = df[, c(1, 3)]
df3[1:3, ]
# numbers mixed
# 1 1 1a
# 2 2 2b
# 3 3 3c
### Index columns from their names
names(df)
# [1] "numbers" "letters" "mixed"
# This is the best practice in programming, as many times indeces change, but
variable names don’t
# We create a variable with the names we want to subset
keep_vars = c("numbers", "mixed")
df4 = df[, keep_vars]
head(df4)
# numbers mixed
# 1 1 1a
# 2 2 2b
# 3 3 3c
# 4 4 4d
# 5 5 5e
# 6 6 6f
### subset rows and columns
# Keep the first five rows
df5 = df[1:5, keep_vars]
df5
# numbers mixed
# 1 1 1a
# 2 2 2b
# 3 3 3c
# 4 4 4d
# 5 5 5e
# subset rows using a logical condition
df6 = df[df$numbers < 10, keep_vars]
df6
# numbers mixed
# 1 1 1a
# 2 2 2b
# 3 3 3c
# 4 4 4d
# 5 5 5e
# 6 6 6f
# 7 7 7g
# 8 8 8h
# 9 9 9i