You are on page 1of 17

26/1/2563 ฝึ กเขียนภาษา R สําหรับงาน Data Analysis | DataRockie

DATAROCKIE

ํ หร ับงาน Data Analysis


ฝึ กเขียนภาษา R สา
สรุปเนือหา R for data analysis ตงแต่
ั ระด ับพืนฐานด้วย package
tidyverse และเริมต้นการทํา machine learning ด้วย caret

..........................................

สวัสดีทก
ู๊ คนน จบไปแล ้วกับคอร์สเรียน R for Data Analysis (R4DA) ครังแรกของเพจเราทีสอนแบบสองวัน 17 &
24 มีนาคม 2561 ทีผ่านมา บล๊อกนีเรามาสรุปโค ้ดและเนือหาสําคัญๆให ้เพือนๆได ้ทบทวนอีกทีฮะ

สําหรับเพือนๆทียังไม่เคยเขียน R มาก่อน เรามีสอน R programming สําหรับผู ้เริมต ้น เรียนฟรี 2 ชวโมง


ั (ก็ทําเป็ น
ล๊าว!) ได ้ทีคอร์สออนไลน์ของเราเลยฮะ สมัครเรียนฟรีท ี https://datarockie.teachable.com

Installation R, RStudio, Package

หน ้าตาของ RStudio: popular code editor (IDE) ของภาษา R

https://datarockie.com/2018/03/26/r-for-data-analysis/ 1/17
26/1/2563 ฝึ กเขียนภาษา R สําหรับงาน Data Analysis | DataRockie

สําหรับเพือนๆทีอยากจะลองทําตาม tutorial ในบล๊อกนีด ้วยต ้องลงโปรแกรม R และ RStudio ก่อนนะฮะ สามารถ


ดาวน์โหลดทังสองโปรแกรมได ้ทีลิงนีเลย

https://cran.r-project.org/ (เลือกลงได ้เลย: Windows | Mac | Linux)


https://www.rstudio.com/

พอลงโปรแกรมทังสองตัวเสร็จแล ้ว ให ้เราเปิ ด RStudio ขึนมา แล ้ว copy โค ้ดด ้านล่างนีแปะลงไปใน console ได ้


เลยฮะ

# install and load package


install.packages("tidyverse")
library(tidyverse)

้ ยนกันในคลาส R4DA ชอว่


package ทีเราใชเรี ื า tidyverse ซงเป็
ึ น package ทีสําคัญมากในการทํางานด ้าน data
analysis | data science สําหรับ R programmers ถ ้าอยากรู ้ว่า tidyverse ทําอะไรได ้บ ้าง? ลองอ่านทีเว็บเค ้าเลย
ฮะ (optional นะ)

สําหรับการ install packages ใหม่ๆใน RStudio ทําได ้ง่ายมากๆ แค่พม


ิ พ์
install.packages("package_name") ลงไปใน console แล ้วเด๋ว RStudio จะต่อกับ server และจัดการทุก
อย่างให ้เราโดยอัตโนมัตเิ ลย

ปั จจุบน ั
ั (28 มีนาคม 2561) R community มีมากกว่า 14,xxx packages และมีฟังชนให ้
้เลือกใชงานมากกว่
า 2 ล ้าน
ั เยอะอะไรเบอร์นี !! สว่ น tidyverse ก็ตด
ฟั งชน ้
ิ อันดับ top 10 ทีมีการใชงานมากที ิ ารใช ้
สุดเลย อ ้างอิงจากสถิตก
งานบนเว็บ R Documentation

TIP: RStudio คือ IDE ย่อมาจาก “Integrated Development Environment” เป็ นโปรแกรมคล ้ายๆ advanced text
editor สําหรับเขียนภาษา R โดยเฉพาะเลย

Data Types in R
สําหรับ data types ใน R หลักๆจะมีอยู่ 5 แบบทีเราใชกั้ น ประกอบด ้วย

numeric | double | integer


logical (boolean)
character (string)
https://datarockie.com/2018/03/26/r-for-data-analysis/ 2/17
26/1/2563 ฝึ กเขียนภาษา R สําหรับงาน Data Analysis | DataRockie

factor
date & time

ั is.numeric(), is.logical(), is.character() ใน R


เราสามารถตรวจสอบ class หรือ type ของข ้อมูลเราได ้ด ้วยฟั งชน
ยังมีอก ั
ี หลายฟั งชนเลยที ้
ใชในการตรวจสอบ data types ให ้ลองพิมพ์ is. ลงไปใน console แล ้วเด๋ว R จะแนะนํ า
ั งหมดทีขึนต ้นด ้วย is. ขึนมาให ้เราเลือกใชงาน
ฟั งชนทั ้

ั as.numeric(), as.logical(), as.character() ฯลฯ ตามโค ้ดตัวอย่างนี


เราสามารถเปลียน class หรือ type ด ้วยฟั งชน
เลย

# integer
x <- c(1:10)
class(x)

# logical
y <- c(TRUE, FALSE)
class(y)

# character
z <- c("Hello", "Hi", "Ni Hao")
class(z)

# convert logical to character


y <- c(TRUE, FALSE)
y <- as.character(y)
class(y)

สําหรับ factor ใน R คือตัวแปร categorical ในทางสถิตน ่ ชาย|หญิง, ซอ|ไม่


ิ ันเอง เชน ื ซอื ฯลฯ ซงึ factor แตกย่อย
ได ้สองแบบตามหลักสถิตค
ิ อ ่
ื nominal vs. ordinal ต่างกันนิดเดียวตรงที ordinal สามารถเรียงสูงกลางตําได ้เชน
รายได ้ตํา|ปานกลาง|สูง ฯลฯ

# create factor (nominal)


animals <- c("dog", "cat", "cat", "cat", "dog")
factor(animals)

# create factor (ordinal)


household.income <- c("high", "medium", "low", "low", "medium")
factor(household.income, levels = c("low", "medium", "high"), ordered = T)

https://datarockie.com/2018/03/26/r-for-data-analysis/ 3/17
26/1/2563 ฝึ กเขียนภาษา R สําหรับงาน Data Analysis | DataRockie

สว่ นข ้อมูลแบบ datetime เราสามารถใช ้package lubridate ในการ extract ข ้อมูลพวกวันที เดือน ปี ออกมาจาก
ั วอย่างด ้านล่าง
date object ได ้ง่ายๆด ้วยฟั งชนตั

# download lubridate package


install.packages("lubridate")
library(lubridate)

# lubridate key functions


today <- Sys.time()
year(today)
month(today, label = T)
day(today)
wday(today, label = T)


TIP: เวลาเจอ function ใหม่ๆทีไม่เคยใชมาก่ ื
อน เราสามารถเรียก help file ขึนมาอ่านได ้แค่กดปุ่ ม F1 ทีชอ
function นันๆ หรือพิมพ์ ?function.name หรือ help(function.name) ใน console

DataFrame vs. Tibble

https://datarockie.com/2018/03/26/r-for-data-analysis/ 4/17
26/1/2563 ฝึ กเขียนภาษา R สําหรับงาน Data Analysis | DataRockie

Dataframe and the power of data

dataframe หรือทีเราเรียกกันว่า tabular table ถือว่าเป็ นหัวใจสําคัญของการวิเคราะห์ข ้อมูลด ้วย R programming


ั read_csv และใชฟั้ งชน
เลย เราสามารถ import ข ้อมูลเข ้า RStudio ได ้ง่ายๆด ้วยฟั งชน ั write_csv ในการ
export ข ้อมูลออกจาก RStudio

โค ้ดด ้านล่าง แสดงตัวอย่างการนํ าเข ้าข ้อมูล iris.csv จากเว็บไซต์ UCI machine learning repository อ่านราย
ละเอียดเพิมเติมเกียวกับ iris dataset ได ้ทีนี

# import dataset from UCI ML website


url <- "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.d
iris <- read_csv(url, col_names = FALSE)

# export dataset as .csv file


getwd() # check working directory
write_csv(iris, "iris.csv")

ใน R จะมี dataframe พิเศษอีกรูปแบบหนึงทีเรียกว่า tibble (พัฒนาโดยทีมงาน RStudio และ Hadley


ึ น enhanced dataframe ทีมีประสท
Wickham คนเดิม สาย R ไม่มใี ครไม่รู ้จักคนนี) ซงเป็ ิ ธิภาพมากขึน เชน
่ การ
แสดง data type ของแต่ละคอลัม และการปรินผลใน console จะมีการจัดหน ้าตาทีเป็ นระเบียบเรียบร ้อยมากขึน
่ ปรินแค่ 10 แถวบนสุด (by default)
เชน

# change from tibble back to normal dataframe


iris <- as.data.frame(iris)
class(iris)

# change from normal dataframe to tibble


iris <- as_tibble(iris)
class(iris)

เราสามารถ subset ข ้อมูลใน dataframe เบืองต ้นด ้วย [ ]

# basic subsetting
iris[ ,1:2] # sub set all rows, columns 1-2

https://datarockie.com/2018/03/26/r-for-data-analysis/ 5/17
26/1/2563 ฝึ กเขียนภาษา R สําหรับงาน Data Analysis | DataRockie

iris[1:10, ] # subset rows 1-10, all columns


iris[1:10, 1:2] # subset rows 1-10, columns 1-2

TIP: เราสามารถใชฟั้ งชน


ั subset() ของ base R ในการเลือก columns และ rows ทีเราต ้องการได ้ง่ายๆ เชน

subset(mtcars, hp > 200, select = c("wt", "hp", "mpg")) หรือใช ้package ยอดนิยม dplyr ทีเรา
กําลังจะสอนต่อไปในบล๊อกวันนี

Load Built-in Dataset


ึ ษา พิมพ์ฟังชน
R มาพร ้อมกับ built-in dataset ให ้เราได ้ลองศก ั data() ลงไปใน console เพือเรียกดู data

ทังหมดทีมีอยูใ่ น base R ได ้เลย เราสามารถโหลด dataset เข ้ามาใน environment ของเราด ้วยฟั งชน
data(dataframe) ตามตัวอย่างด ้านล่าง

# load data set


data(mtcars)

# change class to tibble


mtcars <- as_tibble(mtcars)

# review data structure & basic summary


glimpse(mtcars)
head(mtcars) # print first 6 rows
tail(mtcars) # print last 6 rows
summary(mtcars) # compute basic statistics e.g. min, max, mean, median

็ ก่อนว่าข ้อมูลของเรามีก ี columns มีก ี rows


TIP: ทุกครังทีเราโหลด dataset ใหม่เข ้าไปใน R เราควรจะต ้องเชค
ั glimpse()
และพรีววิ ข ้อมูลเบืองต ้นด ้วยฟั งชน

Basic Statistics
ั เราสามารถใชในการคํ
R เนียเกิดมาเพือทํางานด ้าน statistics โดยเฉพาะเลยรู ้ไหม! แปลว่าฟั งชนที ้ านวณค่าสถิต ิ
ต่างๆ R มีเยอะมากๆ ด ้านล่างเป็ นแค่สว่ นหนึงทีเราใชกั้ นบ่อย ตังแต่หาค่า mean, median, mode, sd, var รวมถึง
สรุปค่าสถิตแ
ิ บบเทพๆด ้วยแพ็คเกต psych

https://datarockie.com/2018/03/26/r-for-data-analysis/ 6/17
26/1/2563 ฝึ กเขียนภาษา R สําหรับงาน Data Analysis | DataRockie

mean()
median()
modeest::mfv()
sd()
var()
mad()
max()
min()
quantile()
fivenum()
summary()
psych::describe()

สําหรับการใชงานฟั
้ ั ก็ตรงๆเลย สว่ นใหญ่มน
งชนพวกนี ั จะ take dataframe หรือว่า vector ตัวเลขเป็ น input แล ้วก็
return ค่าสถิตต
ิ า่ งๆออกมา ตัวอย่างโค ้ดด ้านล่างเลย

# compute mean, sd, summary stats of column hp in mtcars


mean(mtcars$hp)
sd(mtcars$hp)
summary(mtcars$hp)

ทวนความจํานิดนึง เราใช ้$ ในการเลือก column ทีเราต ้องการจาก dataframe สว่ นโค ้ดด ้านล่างเราใช ้
psych::describe ในการคํานวณค่าสถิตข
ิ องทุก columns ใน mtcars ทีเดียวเลย

# use package psych


install.packages("psych")
psych::describe(mtcars)

Data Transformation

https://datarockie.com/2018/03/26/r-for-data-analysis/ 7/17
26/1/2563 ฝึ กเขียนภาษา R สําหรับงาน Data Analysis | DataRockie

Source: https://bit.ly/2DRZ5JW

มาถึง 5 verbs ทีสําคัญมากในการทํา data transformation ใน R (จริง dplyr คล ้ายๆกับการใชงาน


้ SQL ทีหลาย
คนอาจจะเคยลองทํามาบ ้างแล ้ว)

select()
filter()
arrange()
mutate()
summarise()

สําหรับ select ใชส้ ําหรับเลือก columns ทีเราต ้องการ การเลือก columns ถือว่าเป็ นการ subset ข ้อมูลรูปแบบ
หนึงใน R

ปกติเราจะใช ้%>% pipe operator ในการเชอมโค


ื ้ดต่างๆเข ้าด ้วยกันตามตัวอย่างด ้านล่าง

# select columns
mtcars %>%
select(1:3)
mtcars %>%
select(wt, mpg, hp)
mtcars %>%
select(starts_with("m"))

https://datarockie.com/2018/03/26/r-for-data-analysis/ 8/17
26/1/2563 ฝึ กเขียนภาษา R สําหรับงาน Data Analysis | DataRockie


filter ใชในการสร ้างเงือนไข (conditions) เพือเลือก rows ทีเราต ้องการ (หรือ filter rows ทีไม่ต ้องการทิงไป)
การสร ้างเงือนไขสามารถสร ้างได ้มากกว่าหนึงข ้อ โดยใช ้& (AND) และ | (OR) operators มาชว่ ย เชน
่ wt > 2 &
gear == 4

# filter rows with conditions


mtcars %>%
filter(wt < 2) mtcars %>%
filter(wt > 2 & gear == 4)
mtcars %>%
filter(hp %in% 100:150)


arrange ใชในการ sort ข ้อมูลจากค่าน ้อยไปมาก (ascending order) หรือแบบมากไปน ้อย (descending order)
เราสามารถ sort ตัวแปรได ้มากกว่าหนึงตัวพร ้อมกัน

# arrange data (sorting)


mtcars %>%
arrange(hp)
mtcars %>%
arrange(desc(hp))


mutate ใชในการสร ้างตัวแปรใหม่ใน dataframe ของเรา

# create new variables


mtcars %>%
mutate(new.var = hp/100)
mtcars %>%
mutate(new.var = ifelse(hp >= 200, "High", "Low"))


summarise ใชในการสรุ ิ า่ งๆใน dataframe ของเรา ปกติเราจะใชคู้ ก
ปค่าสถิตต ่ บ
ั adverb function อีกหนึงตัวทีมี
ื า group_by ใชในการจั
ประโยชน์มากของ dplyr ชอว่ ้ บกลุม
่ ข ้อมูลตามตัวแปร factor ทีอยูใ่ น dataframe ของเรา
ก่อนจะคํานวณค่าสถิต ิ

https://datarockie.com/2018/03/26/r-for-data-analysis/ 9/17
26/1/2563 ฝึ กเขียนภาษา R สําหรับงาน Data Analysis | DataRockie

# summarise basic statistics


mtcars %>%
summarise(avg_hp = mean(hp),
max_hp = max(hp),
min_hp = min(hp),
stdev_hp = sd(hp),
n = n())

# group summary statistics by am variable (Auto|Manual)


mtcars %>%
group_by(factor(am)) %>%
summarise(avg_hp = mean(hp))

้ องหมาย == (เท่ากับ สองตัวติดกัน) เชน


TIP: การสร ้างเงือนไขแบบ equality conditions ใน R ต ้องใชเครื ่ 1+1 == 2
.. R จะตอบกลับมาใน console ว่า TRUE สว่ นเครืองหมาย != อ่านว่าไม่เท่ากัน

Tidy Data

Source: https://unsplash.com/

https://datarockie.com/2018/03/26/r-for-data-analysis/ 10/17
26/1/2563 ฝึ กเขียนภาษา R สําหรับงาน Data Analysis | DataRockie

หลักการของ tidy data ถูกนํ าเสนอโดย Hadley Wickham (อีกแล ้ว !!) ในปี 2014 โดยนิยามหลักๆของมันคือ “a
variable forms a column” และ “an observation forms a row”


tidyr เป็ นอีกหนึง package หลักใน tidyverse ทีใชในการ ่
transform data ให ้อยูใ่ นรูปของ tidy format เชน
การเปลียนจาก wide → long format ด ้วยคําสงั gather หรือเปลียนจาก long → wide format ด ้วยคําสงั spread
(อ่านความแตกต่างระหว่าง wide vs. long ได ้ทีนี)

สว่ น separate และ unite อย่างทีชอมั


ื นบอกเป็ นนัยๆคือการแยกและ รวมคอลัมตามลําดับ ลองดูตวั อย่างการใช ้
งาน และการเขียนโค ้ดเบืองต ้นด ้านล่างเลยฮะ

gather()
spread()
separate()
unite()

# prepare data for our tutorial


data(WorldPhones)
df <- as.data.frame(WorldPhones)
df$Year <- rownames(df)
rownames(df) <- NULL
glimpse(df)

# transformation: wide to long format


df.long <- df %>%
gather(1:7, key = Region, value = Sales)
print(df.long)

# transformation: long to wide format


df.long %>%
spread(key = Region, value = Sales)

# separate() and unite() columns


table5 %>%
separate(rate, into = c("infected", "population"), sep = "/") %>%
unite(new.year, century, year, sep = "")

https://datarockie.com/2018/03/26/r-for-data-analysis/ 11/17
26/1/2563 ฝึ กเขียนภาษา R สําหรับงาน Data Analysis | DataRockie


ถ ้าเข ้าใจฟั งชนและทํ าได ้ครบทัง dplyr และ tidyr ก็สด
ุ ยอดแล ้วฮะ เรา transform data ได ้หลายรูปแบบเลย ถ ้า
อยากเข ้าใจเชงิ ลึกเรือง tidy data เราแนะนํ าให ้อ่านเปเปอร์ของ Hadley Wickham ทีลิงนีเลย
https://www.jstatsoft.org/article/view/v059i10/v59i10.pdf (2014)

TIP: R ชอบข ้อมูลแบบ long format มากกว่าสําหรับการทํา exploratory data analysis ชวี ต
ิ เราจะง่ายมว๊าก ถ ้า “a
variable forms a column” และ “an observation forms a row” ตาม tidy data concept

Missing Values
่ กัน i.e. ไม่ม ี missing values หรือ NA มากวนใจเราตอนวิเคราะห์ผล ใน R
tidy data ทีดีควรจะมี data ทีสมบูรณ์เชน
ั complete.cases(dataframe)
เราสามารถตรวจสอบว่า dataframe ของเรามีคา่ NA หรือเปล่าง่ายๆด ้วยฟั งชน
ั จะ return ค่า FALSE ถ ้าเกิด row ไหนใน dataframe มีข ้อมูลไม่ครบ (i.e NA presence)
โดยฟั งชนนี

เราสามารถ drop rows ทีมี missing value ทิงได ้เลยด ้วยคําสงั na.omit

# load data for this tutorial


install.package("MASS")
data(biopsy, package = "MASS")

# check if dataframe has any missing values (row by row)


complete.cases(biopsy)
mean(complete.cases(biopsy)) # 97.7% complete, 2.3% missing

# drop rows that have missing values


biopsy <- na.omit(biopsy)

ิ ใจไม่ drop rows เนืองจาก sample size (n) เราน ้อย ให ้เราทํา imputation ค่า missing value ในคอลั
ถ ้าเราตัดสน
่ แทนที NA ด ้วยค่า mean, median, หรือค่า mode ของคอลัมนัน
มนันๆก็ได ้เชน

ตัวอย่างโค ้ดด ้านล่าง เราใช ้filter เพือกรองเอา rows ทีมีคา่ NA ออกมาดู แล ้วค่อย impute NA ในคอลัมนัน
ด ้วยค่า mode ของตัวแปร V6

# filter rows with missing value (NAs)


biopsy %>%
filter(!complete.cases(.)) # all NAs identified in column V6

https://datarockie.com/2018/03/26/r-for-data-analysis/ 12/17
26/1/2563 ฝึ กเขียนภาษา R สําหรับงาน Data Analysis | DataRockie

# NA imputation
table(biopsy$V6) # find mode in this column
biopsy$V6[is.na(biopsy$V6)] <- 1

ั มีประโยชน์มากในการ impute NA คือ tidyr::replace_na() ในตัวอย่าง biopsy ด ้านบน เรา


TIP: ฟั งชนที
สามารถพิมพ์ replace_na(biopsy$V6, 1) เพือแทนที NA ด ้วยเลข 1 (ค่า mode) ได ้เลยง่ายๆ

Data Visualization

ตัวอย่างการใช ้งาน ggplot() สร ้าง plots เบืองต ้น


ggplot2 เป็ นอีกหนึง package ทีรวมอยูใ่ น tidyverse แล ้วฮะ เราสามารถเรียกใชงานฟั ั ggplot() เพือสร ้าง
งชน
plots เบืองต ้นได ้เลย

้ ้าง scatter plot


geom_point() ใชสร
้ ้าง smooth line หรือ linear ก็ได ้
geom_smooth() ใชสร
้ ้าง histogram
geom_histogram() ใชสร
้ ้างกราฟแท่ง
geom_bar() ใชสร
้ ้างไลน์ชาร์ทเพือดูเทรนด์ (พวก time series)
geom_line() ใชสร
้ ้าง boxplot เพือดู outliers
geom_boxplot() ใชสร

# scatter plot
ggplot(data = mtcars, mapping = aes(x = wt, y = mpg)) +

https://datarockie.com/2018/03/26/r-for-data-analysis/ 13/17
26/1/2563 ฝึ กเขียนภาษา R สําหรับงาน Data Analysis | DataRockie

geom_point()

# scatter plot + smoother


ggplot(data = mtcars, mapping = aes(x = wt, y = mpg)) +
geom_point() +
geom_smooth()

# histogram
ggplot(data = mtcars, mapping = aes(x = mpg)) +
geom_histogram(bins = 15)

# bar plot
data(diamonds)
ggplot(data = diamonds, mapping = aes(x = clarity)) +
geom_bar()

# line plot
data(economics)
ggplot(data = economics, mapping = aes(x = date, y = pop)) +
geom_line()

# boxplot
ggplot(data = diamonds, mapping = aes(x = cut, y = price)) +
geom_boxplot()

อีกหนึงเทคนิคทีทําให ้เราชอบใช ้ggplot2 มากๆคือการทํา facet แบ่ง plot ของเราเป็ นกรุป


๊ ตามตัวแปร factor |
category ทีอยูใ่ น dataframe ของเราตามตัวอย่างด ้านล่าง

ตัวอย่างการใช ้งาน facet_wrap ใน ggplot2


https://datarockie.com/2018/03/26/r-for-data-analysis/ 14/17
26/1/2563 ฝึ กเขียนภาษา R สําหรับงาน Data Analysis | DataRockie

# facet plots by factor variable in dataframe


ggplot(df, aes(carat, price)) +
geom_point(alpha = 0.3) +
geom_smooth() +
theme_minimal() +
facet_wrap(~ cut, ncol = 5)

TIP: สําหรับ ggplot2 เป็ น package ทีทําอะไรได ้อีกเยอะมากๆ ทีเราสอนกันในคลาส R4DA แค่ประมาณ 20-30%
ั งหมดใน ggplot2 เอง สําหรับเพือนๆทีสนใจอยากศก
ของฟั งชนทั ึ ษาเพิมเติม ลองดาวน์โหลด Cheat Sheet
ggplot2 ได ้ทีนีเลย

Machine Learning in R

Source: https://www.entrepreneur.com/article/304945

อีกหนึงสุดยอด package ขวัญใจโปรแกรมเมอร์สาย R สําหรับการทํา Machine Learning คือ caret นันเองฮะ


(พัฒนาและดูแลโค ้ดทังหมดโดย Max Kuhn)

# install package caret


install.packages("caret")
library(caret)

https://datarockie.com/2018/03/26/r-for-data-analysis/ 15/17
26/1/2563 ฝึ กเขียนภาษา R สําหรับงาน Data Analysis | DataRockie

สําหรับการสร ้าง machine learning models เบืองต ้น กระบวนการทํางานจะมี 4 ขันตอน ประกอบด ้วย

1. Data preparation
2. Train models
3. Tune models
4. Evaluate results

ตอนนีสมมติวา่ ข ้อมูลของเรา clean & prep มาเรียบร ้อยแล ้ว i.e. ไม่ม ี NA (missing values) หรือทําพวก feature
engineering หรือ transformation มาเสร็จแล ้ว เราจะข ้ามไปสอนที step 2-4 เลย

โค ้ดตัวอย่างด ้านล่าง เราโหลดข ้อมูล Sonar สําหรับปั ญหา binary classification i.e. Class = R or M เพือทีจะใช ้
predict ว่าวัตถุนันเป็ นหินหรือว่าแร่ธาตุ

# load dataset SONAR


data(Sonar)
glimpse(Sonar)

# split data into train | test sets


set.seed(1)
id <- sample(nrow(Sonar), 0.8*nrow(Sonar))
train <- Sonar[id, ]
test <- Sonar[-id, ]

ลองโยน train data ของเราให ้กับ Random Forest algorithm เรียนรู ้และใช ้k-fold cross validation (k = 5) ใน
การเทรนโมเดลเพือให ้ได ้Accuracy สูงทีสุด i.e. metric = “Accuracy” เสร็จแล ้วก็ evaluate results ของ fit.rf
ด ้วย confusion matrix

# train RandomForest algorithm


fit.rf <- train(Class ~ .,
data = train,
method = "rf",
metric = "Accuracy",
trControl = trainControl(method = "cv", number = 5))

# evaluate results
print(fit.rf)
predictions <- predict(fit.rf, test)

https://datarockie.com/2018/03/26/r-for-data-analysis/ 16/17
26/1/2563 ฝึ กเขียนภาษา R สําหรับงาน Data Analysis | DataRockie

tab1 <- table(predictions, test$Class) # confusion matrix


sum(diag(tab1)) / nrow(test) # accuracy of test data

และนีคือโค ้ด template เบืองต ้นในการเทรนโมเดลของเราด ้วย caret package นันเอง ง่ายอะไรเบอร์น!ี ปกติเรา
จะเทรน algorithms หลายๆตัว เพือหาว่าตัวไหนดีทสุ ่ ได ้Accuracy สูงสุด) สําหรับปั ญหานันๆของเรา
ี ด (เชน


TIP: ถ ้าเราต ้องการเทรน algorithms แบบอืนด ้วย template ด ้านบน แค่เปลียน method = "rf" เป็ นชอ
่ naive bayes "nb" หรือ decision tree "rpart" เป็ นต ้น อ่านคูม
algorithms ตัวอืนๆ เชน ่ อ ้
ื การใชงาน caret ได ้
ทังหมดที link นีเลย

Thank You for Joining R4DA Class


อัน ท๊อป
ทอย มาร์ช
เหลียง – ทีม
งาน
DataRocki
e Not a
Hotdog

ขอบคุณเพือนๆทุกคนมาเรียน R4DA กับเราทังสองอาทิตย์ทผ่


ี านมาครับ ขอบคุณเพือนๆทีติดตามอ่านบล๊อกนีของ
่ กัน หากมีคําถามเกียวกับบล๊อกวันนี ทักมาคุยเล่นกับเราได ้ที m.me/datarockie
เราจนจบเชน

สําหรับเพือนๆทีสนใจอยากเรียน basic statistics | data science | R & Python Programming เบืองต ้น สามารถ
ติดตามคอร์สเรียนออนไลน์ใหม่ๆของเพจเราได ้ที https://datarockie.teachable.com

https://datarockie.com/2018/03/26/r-for-data-analysis/ 17/17

You might also like