รีวิวเทคนิค Data Wrangling ง่ายๆใน R

What is it?

Data wrangling คือทักษะการปรับเปลี่ยนหน้าตาข้อมูลให้อยู่ในรูปแบบที่เหมาะสมกับการทำ data analysis หรือ data visualization อื่นๆต่อไป บทความวันนี้เราจะแนะนำการใช้ฟังชั่นใน package dplyr ซึ่งเป็นฟังชั่นแรกๆที่เราแนะนำให้คนที่เพิ่งเริ่มเขียน R ทำให้เป็นก่อนเลย

ติดตั้งและเรียกใช้งานฟังชั่นใน package dplyr ด้วยโค้ดนี้

# install package
install.packages("dplyr")
library(dplyr)

Foundation

dplyr มี functions หลักที่ใช้ในการทำ data wranling อยู่ 6 functions เริ่มจากพื้นฐานก่อน

  • select ใช้เลือกคอลั่มที่เราต้องการ
  • filter ใช้ฟิลเตอร์แถวที่เราต้องการด้วยเงื่อนไขต่างๆ
  • arrange ใช้เรียงข้อมูล i.e. sort rows

เราใช้ pipe operator (%>%) เพื่อเขียนเชื่อมโค้ดเข้าด้วยกันแบบนี้ ลอง copy โค้ดไปลองเล่นใน RStudio ทิป – ฟังชั่น filter() สามารถใส่ได้มากกว่าหนึ่งเงื่อนไข โดยใช้ & หรือ | มาช่วย

# basic data wrangling
# 1. select columns
mtcars %>% select(mpg, hp, wt)
mtcars %>% select(1:4, 5)
# 2. filter rows
mtcars %>% filter(hp <= 100)
mtcars %>% filter(hp <= 100 & am == 1)
mtcars %>% filter(hp <= 90 | am == 0)
# 3. arrange rows
mtcars %>% arrange(mpg)
mtcars %>% arrange(desc(mpg))
view raw dplyr1.R hosted with ❤ by GitHub

อีกสามฟังชั่นใน dplyr ที่ควรใช้ให้เป็นคือ

  • mutate ใช้สร้างคอลั่มใหม่
  • summarise ใช้สรุปผลสถิติของคอลั่มที่เราเลือก
  • group_by ใช้คู่กับ summarise เพื่อสรุปผลสถิติตามกลุ่ม
# 4. create new columns
mtcars %>% mutate(hp_2 = hp * 2)
mtcars %>% mutate(log_hp = log(hp))
# 5. summarise statistics
mtcars %>%
summarise(mean_hp = mean(hp),
sd_hp = sd(hp),
n = n())
# 6. group_by() always used with summarise()
mtcars %>%
group_by(am) %>%
summarise(mean_hp = mean(hp))
view raw .R hosted with ❤ by GitHub

โค้ด line 12-14 เราสั่งให้ R จับกลุ่ม mtcars ด้วยคอลั่ม am group_by(am) แล้วค่อยหาค่าเฉลี่ย mean(hp) ตามกลุ่ม (auto vs. manual)

Join

dplyr มี functions ที่ใช้ในการ join tables อยู่สามแบบหลักๆคือ left_join, inner_join และ full_join โดย concept จะเหมือนกับการเขียน SQL เลย เขียนเป็น venn diagram ได้แบบนี้

Source: DataRockie

อ่านบทความเก่าของเรา – หัดเขียน SQL เป็นใน 10 นาที

มาลองดูโค้ดตัวอย่างใน R เราสร้าง data frame ง่ายๆขึ้นมาสองอัน df1 มีคอลั่ม {id, names} และ df2 มีคอลั่ม {id, grades} เราสามารถเขียนโค้ดเพื่อ join สอง df นี้ด้วยคอลั่ม id

# create example dataframe
df1 <- data.frame(id = 1:5, names = c("John", "Andy", "Otis", "Maive", "Jackson"))
df2 <- data.frame(id = c(1:4,6), grades = c("A", "B", "A", "F", "D"))
# join tables
inner_join(df1, df2, by = "id")
left_join(df1, df2, by = "id")
full_join(df1, df2, by = "id")
# assign to a new dataframe
new_df <- full_join(df1, df2, by = "id")
glimpse(new_df)
view raw .R hosted with ❤ by GitHub

syntax การเขียน join ใน R คือ *_join(table1, table2, by = "column") หน้าตาของ dataframe ที่ได้จากการ join แต่ละแบบเหมือนในรูปด้านล่าง โดย <NA> ในภาษา R คือค่า missing value (i.e. ไม่สามารถ map ค่าได้จากการ join df1 df2 เข้าด้วยกัน)

# inner_join(df1, df2, by = "id")
id   names    grades
1    John     A
2    Andy     B
3    Otis     A
4    Maive    F

# left_join(df1, df2, by = "id")
id   names    grades
1    John     A
2    Andy     B
3    Otis     A
4    Maive    F
5    Jackson  <NA>

# full_join(df1, df2, by = "id")
id   names    grades
1    John     A
2    Andy     B
3    Otis     A
4    Maive    F
5    Jackson  <NA>   
6    <NA>     D 

เพื่อนๆสามารถอ่านการใช้งานเพิ่มเติมและดาวน์โหลด cheat sheet ของ dplyr ได้ที่นี่

functions ที่เราแนะนำในบทความวันนี้เป็นตัวหลักที่ใช้กันเยอะมาก ฝึกใช้ให้คล่อง แล้วการทำ data wrangling กับ data frame จะไม่ใช่เรื่องยากเลย Happy wrangling!

Leave a Reply