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