Big Data Analytics - ข้อมูลเบื้องต้นเกี่ยวกับ R

ส่วนนี้มีไว้เพื่อแนะนำผู้ใช้ให้รู้จักกับภาษาโปรแกรม R R สามารถดาวน์โหลดได้จากเว็บไซต์ Cran สำหรับผู้ใช้ Windows จะเป็นประโยชน์ในการติดตั้ง rtoolsและrstudio IDE

แนวคิดทั่วไปที่อยู่เบื้องหลัง R คือทำหน้าที่เป็นอินเทอร์เฟซสำหรับซอฟต์แวร์อื่น ๆ ที่พัฒนาในภาษาคอมไพล์เช่น C, C ++ และ Fortran และเพื่อให้ผู้ใช้มีเครื่องมือโต้ตอบในการวิเคราะห์ข้อมูล

ไปที่โฟลเดอร์ของไฟล์ zip ของหนังสือ bda/part2/R_introduction และเปิดไฟล์ R_introduction.Rprojไฟล์. เพื่อเปิดเซสชัน RStudio จากนั้นเปิดไฟล์ 01_vectors.R เรียกใช้สคริปต์ทีละบรรทัดและทำตามความคิดเห็นในโค้ด อีกทางเลือกหนึ่งที่มีประโยชน์ในการเรียนรู้คือเพียงแค่พิมพ์โค้ดซึ่งจะช่วยให้คุณคุ้นเคยกับไวยากรณ์ R ในความคิดเห็น R เขียนด้วยสัญลักษณ์ #

เพื่อแสดงผลลัพธ์ของการรันโค้ด R ในหนังสือหลังจากประเมินโค้ดแล้วผลลัพธ์ R จะแสดงความคิดเห็น ด้วยวิธีนี้คุณสามารถคัดลอกและวางโค้ดในหนังสือและลองใช้ส่วนต่างๆใน 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"

มาวิเคราะห์กันว่าเกิดอะไรขึ้นในโค้ดก่อนหน้านี้ เราจะเห็นว่ามันเป็นไปได้ที่จะสร้างเวกเตอร์ด้วยตัวเลขและตัวอักษร เราไม่จำเป็นต้องบอก R ว่าเราต้องการข้อมูลประเภทใดล่วงหน้า ในที่สุดเราก็สามารถสร้างเวกเตอร์ที่มีทั้งตัวเลขและตัวอักษร เวกเตอร์ mixed_vec บังคับตัวเลขให้เป็นอักขระเราสามารถเห็นสิ่งนี้ได้โดยการแสดงภาพว่าค่าถูกพิมพ์ภายในเครื่องหมายคำพูด

รหัสต่อไปนี้แสดงชนิดข้อมูลของเวกเตอร์ที่แตกต่างกันตามที่ส่งคืนโดยคลาสฟังก์ชัน เป็นเรื่องปกติที่จะใช้ฟังก์ชันคลาสเพื่อ "ซักถาม" วัตถุโดยถามเขาว่าคลาสของเขาคืออะไร

### 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 รองรับวัตถุสองมิติด้วย ในโค้ดต่อไปนี้มีตัวอย่างโครงสร้างข้อมูลที่นิยมใช้กันมากที่สุดสองแบบที่ใช้ใน R: เมทริกซ์และ 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

ดังที่แสดงในตัวอย่างก่อนหน้านี้คุณสามารถใช้ชนิดข้อมูลที่แตกต่างกันในออบเจ็กต์เดียวกันได้ โดยทั่วไปนี่คือวิธีการนำเสนอข้อมูลในฐานข้อมูลส่วน API ของข้อมูลคือข้อความหรือเวกเตอร์อักขระและตัวเลขอื่น ๆ In เป็นงานของนักวิเคราะห์ในการกำหนดประเภทข้อมูลทางสถิติที่จะกำหนดจากนั้นใช้ชนิดข้อมูล R ที่ถูกต้องสำหรับข้อมูลนั้น โดยปกติแล้วในทางสถิติเราถือว่าตัวแปรเป็นประเภทต่อไปนี้ -

  • Numeric
  • ระบุหรือจัดหมวดหมู่
  • Ordinal

ใน R เวกเตอร์สามารถเป็นคลาสต่อไปนี้ -

  • ตัวเลข - จำนวนเต็ม
  • Factor
  • ปัจจัยสั่งซื้อ

R จัดเตรียมชนิดข้อมูลสำหรับตัวแปรทางสถิติแต่ละประเภท อย่างไรก็ตามปัจจัยที่มีการสั่งซื้อนั้นแทบจะไม่ถูกใช้ แต่สามารถสร้างขึ้นโดยฟังก์ชันแฟกเตอร์หรือตามลำดับ

ส่วนต่อไปนี้ใช้กับแนวคิดของการจัดทำดัชนี นี่เป็นการดำเนินการที่ค่อนข้างบ่อยและเกี่ยวข้องกับปัญหาในการเลือกส่วนของวัตถุและทำการแปลง

# 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