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