Professional Documents
Culture Documents
DATAROCKIE
..........................................
สวัสดีทก
ู๊ คนน จบไปแล ้วกับคอร์สเรียน R for Data Analysis (R4DA) ครังแรกของเพจเราทีสอนแบบสองวัน 17 &
24 มีนาคม 2561 ทีผ่านมา บล๊อกนีเรามาสรุปโค ้ดและเนือหาสําคัญๆให ้เพือนๆได ้ทบทวนอีกทีฮะ
https://datarockie.com/2018/03/26/r-for-data-analysis/ 1/17
26/1/2563 ฝึ กเขียนภาษา R สําหรับงาน Data Analysis | DataRockie
ปั จจุบน ั
ั (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 แบบทีเราใชกั้ น ประกอบด ้วย
factor
date & time
# integer
x <- c(1:10)
class(x)
# logical
y <- c(TRUE, FALSE)
class(y)
# character
z <- c("Hello", "Hi", "Ni Hao")
class(z)
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 ได ้ง่ายๆด ้วยฟั งชนตั
้
TIP: เวลาเจอ function ใหม่ๆทีไม่เคยใชมาก่ ื
อน เราสามารถเรียก help file ขึนมาอ่านได ้แค่กดปุ่ ม F1 ทีชอ
function นันๆ หรือพิมพ์ ?function.name หรือ help(function.name) ใน console
https://datarockie.com/2018/03/26/r-for-data-analysis/ 4/17
26/1/2563 ฝึ กเขียนภาษา R สําหรับงาน Data Analysis | DataRockie
โค ้ดด ้านล่าง แสดงตัวอย่างการนํ าเข ้าข ้อมูล iris.csv จากเว็บไซต์ UCI machine learning repository อ่านราย
ละเอียดเพิมเติมเกียวกับ iris dataset ได ้ทีนี
# 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
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 ค่าสถิตต
ิ า่ งๆออกมา ตัวอย่างโค ้ดด ้านล่างเลย
ทวนความจํานิดนึง เราใช ้$ ในการเลือก column ทีเราต ้องการจาก dataframe สว่ นโค ้ดด ้านล่างเราใช ้
psych::describe ในการคํานวณค่าสถิตข
ิ องทุก columns ใน 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
select()
filter()
arrange()
mutate()
summarise()
สําหรับ select ใชส้ ําหรับเลือก columns ทีเราต ้องการ การเลือก columns ถือว่าเป็ นการ subset ข ้อมูลรูปแบบ
หนึงใน R
# 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
้
arrange ใชในการ sort ข ้อมูลจากค่าน ้อยไปมาก (ascending order) หรือแบบมากไปน ้อย (descending order)
เราสามารถ sort ตัวแปรได ้มากกว่าหนึงตัวพร ้อมกัน
้
mutate ใชในการสร ้างตัวแปรใหม่ใน dataframe ของเรา
้
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
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 ได ้ทีนี)
gather()
spread()
separate()
unite()
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
ิ ใจไม่ drop rows เนืองจาก sample size (n) เราน ้อย ให ้เราทํา imputation ค่า missing value ในคอลั
ถ ้าเราตัดสน
่ แทนที NA ด ้วยค่า mean, median, หรือค่า mode ของคอลัมนัน
มนันๆก็ได ้เชน
ตัวอย่างโค ้ดด ้านล่าง เราใช ้filter เพือกรองเอา rows ทีมีคา่ NA ออกมาดู แล ้วค่อย impute NA ในคอลัมนัน
ด ้วยค่า mode ของตัวแปร 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
Data Visualization
้
ggplot2 เป็ นอีกหนึง package ทีรวมอยูใ่ น tidyverse แล ้วฮะ เราสามารถเรียกใชงานฟั ั ggplot() เพือสร ้าง
งชน
plots เบืองต ้นได ้เลย
# 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()
# 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()
TIP: สําหรับ ggplot2 เป็ น package ทีทําอะไรได ้อีกเยอะมากๆ ทีเราสอนกันในคลาส R4DA แค่ประมาณ 20-30%
ั งหมดใน ggplot2 เอง สําหรับเพือนๆทีสนใจอยากศก
ของฟั งชนทั ึ ษาเพิมเติม ลองดาวน์โหลด Cheat Sheet
ggplot2 ได ้ทีนีเลย
Machine Learning in R
Source: https://www.entrepreneur.com/article/304945
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 ว่าวัตถุนันเป็ นหินหรือว่าแร่ธาตุ
ลองโยน train data ของเราให ้กับ Random Forest algorithm เรียนรู ้และใช ้k-fold cross validation (k = 5) ใน
การเทรนโมเดลเพือให ้ได ้Accuracy สูงทีสุด i.e. metric = “Accuracy” เสร็จแล ้วก็ evaluate results ของ fit.rf
ด ้วย confusion matrix
# 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
และนีคือโค ้ด template เบืองต ้นในการเทรนโมเดลของเราด ้วย caret package นันเอง ง่ายอะไรเบอร์น!ี ปกติเรา
จะเทรน algorithms หลายๆตัว เพือหาว่าตัวไหนดีทสุ ่ ได ้Accuracy สูงสุด) สําหรับปั ญหานันๆของเรา
ี ด (เชน
ื
TIP: ถ ้าเราต ้องการเทรน algorithms แบบอืนด ้วย template ด ้านบน แค่เปลียน method = "rf" เป็ นชอ
่ naive bayes "nb" หรือ decision tree "rpart" เป็ นต ้น อ่านคูม
algorithms ตัวอืนๆ เชน ่ อ ้
ื การใชงาน caret ได ้
ทังหมดที link นีเลย
สําหรับเพือนๆทีสนใจอยากเรียน basic statistics | data science | R & Python Programming เบืองต ้น สามารถ
ติดตามคอร์สเรียนออนไลน์ใหม่ๆของเพจเราได ้ที https://datarockie.teachable.com
https://datarockie.com/2018/03/26/r-for-data-analysis/ 17/17