80% of your data analysis is cleaning data
จากงานวิจัยหลายๆงานที่เกี่ยวข้องกับการทำ data analysis พบว่าเวลาส่วนใหญ่ของ data analyst หมดไปกับการทำความสะอาดข้อมูล โดยปัญหาที่เจอเยอะสุดคือปัญหา missing values (NAs) นั่นเอง
บทความนี้เรามาสอนวิธีการทำความสะอาดข้อมูล i.e. clean missing values ด้วย R ทำเสร็จง่ายๆภายในสองขั้นตอน โดย package หลักที่เราใช้ทำงานกับข้อมูลสำหรับ R Programmer คือ tidyverse
(ของทีม RStudio นั่นเองครัช)
Tidy Data

สำหรับเพื่อนๆที่ลง R และ RStudio ไว้ในเครื่องแล้ว ให้ลง package tidyverse
เพื่อทำตามโค้ดทั้งหมดในบทความวันนี้
เราสามารถ clean ข้อมูลง่ายๆในสองขั้นตอน
- ตรวจสอบว่าข้อมูลเรามี missing values (NAs) หรือเปล่า? ด้วยฟังชั่น
glimpse()
และsummary()
- จัดการกับคอลั่มที่มี NA ซึ่งเบื้องต้นเรามีทางเลือกสองทางในการจัดการกับ missing values คือ [2.1] ลบทุกแถวที่มี NA ทิ้งให้หมดเลยด้วย
drop_na()
[2.2] หรือใช้วิธีที่นักสถิติเรียกว่าการทำ imputation ด้วยฟังชั่นreplace_na()
คอลั่มนั้นๆด้วยค่าเฉลี่ย (mean) หรือค่ากลาง (median)
Two Easy Steps
ตัวอย่าง dataset วันนี้มาพร้อมกับ package tidyverse เลย เพื่อนๆสามารถพิมพ์ msleep
ลงไปใน console เพื่อดูหน้าตาของข้อมูลชุดนี้ด้วยโค้ดด้านล่าง
# load tidyverse and see example dataset msleep
library(tidyverse)
glimpse(msleep)
summary(msleep)
ฟังชั่น summary จะบอกเราว่าแต่ละคอลั่มมี NA อยู่เยอะมั้ย อย่างคอลั่ม sleep_rem จะเห็นว่ามี NA อยู่ตั้ง 22 ตัว หรือคิดเป็น 26.5% ของ dataset msleep เลย
ถ้าต้องการลบทุกแถวที่มี NA อยู่ แค่เราพิมพ์ว่า drop_na(dataframe_name)
clean_msleep <- drop_na(msleep)
summary(clean_msleep)
แต่ถ้าอยากทำ imputation ก็แค่หาค่าเฉลี่ย (หรือค่า median) ของคอลั่มนั้นๆก่อน เช่น คอลั่ม sleep_rem
ตามโค้ดตัวอย่างด้านล่าง เราสร้าง object ชื่อว่า avg_sleep_rem
ที่เก็บค่าเฉลี่ยของคอลั่ม sleep_rem ไว้ และค่อยนำไปแทนค่า NA ด้วยฟังชั่น replace_na()
ในไลน์ต่อไป
avg_sleep_rem <- mean(msleep$sleep_rem, na.rm=TRUE)
msleep$sleep_rem <- replace_na(msleep$sleep_rem, avg_sleep_rem)
พอเรา clean data ทั้งหมดเสร็จแล้ว ก็สามารถ export ข้อมูลของเราออกไปใช้ที่โปรแกรมอื่นได้เลยง่ายๆด้วยฟังชั่น write.csv()
เท่านี้ก็เสร็จเรียบร้อย #ง่ายอะไรเบอร์นี้
Full Code
สำหรับโค้ดแบบเต็มๆของบทความนี้ สามารถดูได้ข้างล่างเลย
- Code line 10 คือการลบทุก rows ที่มี NA ด้วย
drop_na()
- Code line 14-15 คือการทำ mean imputation ด้วย
replace_na(column, mean)
- Code line 18-19 คือการทำ median imputation ด้วย
replace_na(column, median)
# install tidyverse | |
install.packages("tidyverse") | |
library(tidyverse) | |
# step 1 — review example dataset 'msleep' in tidyverse package | |
glimpse(msleep) | |
summary(msleep) | |
# step 2.1 — remove all rows with missing values | |
clean_msleep <- drop_na(msleep) | |
# step 2.2 — impute NA with mean or median values | |
# mean imputation | |
mean_sleep_rem <- mean(msleep$sleep_rem, na.rm=TRUE) | |
msleep$sleep_rem <- replace_na(msleep$sleep_rem, mean_sleep_rem) | |
# median imputation | |
median_sleep_rem <- median(msleep$sleep_rem, na.rm=TRUE) | |
msleep$sleep_rem <- replace_na(msleep$sleep_rem, median_sleep_rem) | |
# export clean dataframe to our working directory | |
write.csv(clean_msleep, "clean_msleep.csv") | |
# finished !! |
ชอบกด Like ใช่กด Share ให้เพื่อนๆได้อ่านด้วยนะคร้าบ ติดตรงไหนทัก FB เมสเสจมาได้เลยที่ m.me/datarockie
ใครสนใจอยากเรียน Intro to R Programming สมัครเรียนคอร์สฟรีสองชั่วโมง (ออนไลน์) กับเราได้ที่ https://datarockie.teachable.com
#DataRockie — Never Stop Learning
Leave a Reply