Büyük Veri Analitiği - R'ye Giriş
Bu bölüm, kullanıcıları R programlama diliyle tanıştırmaya ayrılmıştır. R, cran web sitesinden indirilebilir . Windows kullanıcıları için rtools ve rstudio IDE'yi kurmak yararlıdır .
Arkasındaki genel konsept R C, C ++ ve Fortran gibi derlenmiş dillerde geliştirilen diğer yazılımlara arayüz olarak hizmet etmek ve kullanıcıya verileri analiz etmek için etkileşimli bir araç sağlamaktır.
Kitap zip dosyasının klasörüne gidin bda/part2/R_introduction ve aç R_introduction.Rprojdosya. Bu bir RStudio oturumu açacaktır. Ardından 01_vectors.R dosyasını açın. Komut dosyasını satır satır çalıştırın ve koddaki açıklamaları izleyin. Öğrenmek için bir başka yararlı seçenek de sadece kodu yazmaktır, bu R sözdizimine alışmanıza yardımcı olacaktır. R'de yorumlar # sembolüyle yazılır.
Kitapta çalıştırılan R kodu sonuçlarını görüntülemek için, kod değerlendirildikten sonra, R dönüşleri sonuçları yorumlanır. Bu şekilde, kodu kitaba kopyalayıp yapıştırabilir ve doğrudan R'de bazı bölümlerini deneyebilirsiniz.
# 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"
Önceki kodda ne olduğunu inceleyelim. Sayılarla ve harflerle vektörler oluşturmanın mümkün olduğunu görebiliriz. Önceden R'ye ne tür veri istediğimizi söylememize gerek yoktu. Sonunda hem rakamlardan hem de harflerden oluşan bir vektör oluşturabildik. Mixed_vec vektörü sayıları karaktere zorlamıştır, bunu değerlerin tırnak içine nasıl yazdırıldığını görselleştirerek görebiliriz.
Aşağıdaki kod, işlev sınıfı tarafından döndürülen farklı vektörlerin veri türünü gösterir. Bir nesneyi "sorgulamak" ve ona sınıfının ne olduğunu sormak için sınıf işlevini kullanmak yaygındır.
### 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, iki boyutlu nesneleri de destekler. Aşağıdaki kodda, R'de kullanılan en popüler iki veri yapısının örnekleri vardır: matrix ve 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
Önceki örnekte gösterildiği gibi, aynı nesnede farklı veri türlerini kullanmak mümkündür. Genel olarak, veri veritabanlarında bu şekilde sunulur, API'ler verilerin bir kısmı metin veya karakter vektörleri ve diğer sayısaldır. Hangi istatistiksel veri türünün atanacağını belirlemek ve ardından bunun için doğru R veri türünü kullanmak analistin işidir. İstatistiklerde normalde değişkenlerin aşağıdaki türlerde olduğunu düşünüyoruz -
- Numeric
- Nominal veya kategorik
- Ordinal
R'de, bir vektör aşağıdaki sınıflardan olabilir -
- Sayısal - Tamsayı
- Factor
- Sıralı Faktör
R, her bir istatistiksel değişken türü için bir veri türü sağlar. Sıralı faktör ancak nadiren kullanılır, ancak fonksiyon faktörü tarafından oluşturulabilir veya sıralanabilir.
Aşağıdaki bölümde indeksleme kavramı ele alınmaktadır. Bu oldukça yaygın bir işlemdir ve bir nesnenin bölümlerini seçme ve bunlara dönüştürme yapma sorunuyla ilgilenir.
# 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