DataRockie

ทำความสะอาดข้อมูลง่ายๆเพียงสองขั้นตอนใน R

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

clean
ทำความสะอาดข้อมูลง่ายๆด้วย tidyverse

สำหรับเพื่อนๆที่ลง R และ RStudio ไว้ในเครื่องแล้ว ให้ลง package tidyverse เพื่อทำตามโค้ดทั้งหมดในบทความวันนี้

เราสามารถ clean ข้อมูลง่ายๆในสองขั้นตอน

  1. ตรวจสอบว่าข้อมูลเรามี missing values (NAs) หรือเปล่า? ด้วยฟังชั่น glimpse() และ summary()
  2. จัดการกับคอลั่มที่มี 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