Clean Missing Values in Two Easy Steps with 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)

ชอบกด Like ใช่กด Share ให้เพื่อนๆได้อ่านด้วยนะคร้าบ ติดตรงไหนทัก FB เมสเสจมาได้เลยที่ m.me/datarockie

ใครสนใจอยากเรียน Intro to R Programming สมัครเรียนคอร์สฟรีสองชั่วโมง (ออนไลน์) กับเราได้ที่ https://datarockie.teachable.com

#DataRockie — Never Stop Learning

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s