ปรึกษา Data Mining
Data Mining 4124305 • Chapter 03

บทที่ 3 การเตรียมข้อมูลสำหรับการทำเหมืองข้อมูล

เรียนรู้กระบวนการเปลี่ยนข้อมูลดิบให้เป็นข้อมูลที่พร้อมวิเคราะห์ ตั้งแต่การนำเข้าข้อมูล การสำรวจข้อมูล การทำความสะอาด การแปลงข้อมูล การเลือกฟีเจอร์ การจัดการข้อมูลไม่สมดุล และการแบ่งข้อมูลสำหรับสร้างโมเดล

หัวใจของบทนี้

  • Raw Data → Tidy Data
  • Missing Value, Duplicate และ Outlier
  • Pandas, NumPy, Scikit-learn และ Imbalanced-learn

ภาพรวมบทเรียน

การเตรียมข้อมูลสำหรับการทำเหมืองข้อมูล เป็นขั้นตอนสำคัญที่ทำให้ข้อมูลดิบมีคุณภาพพอสำหรับการวิเคราะห์และสร้างโมเดล เพราะโมเดลที่ดีขึ้นอยู่กับข้อมูลที่ดี หากข้อมูลมีค่าหาย ค่าผิดปกติ หรือรูปแบบไม่สอดคล้องกัน ผลลัพธ์ที่ได้อาจผิดพลาดได้

ในสไลด์บทที่ 3 มีการทบทวนกระบวนการ CRISP-DM 6 ขั้นตอน และเน้นว่า Data Preparation เป็นขั้นตอนสำคัญก่อน Modeling โดยประกอบด้วยการคัดเลือกข้อมูล การทำความสะอาดข้อมูล และการแปลงข้อมูลให้เหมาะสมกับการวิเคราะห์

แนวคิดหลัก

ข้อมูลดิบ เช่น ไฟล์ CSV, Excel หรือฐานข้อมูล จะถูกนำผ่านกระบวนการ Data Preparation เพื่อให้กลายเป็น Tidy Data หรือข้อมูลที่จัดรูปแบบเรียบร้อย พร้อมนำไปวิเคราะห์ สร้างโมเดล และใช้ตัดสินใจ

ข้อมูลและประเภทข้อมูล

ข้อมูล (Data) คือข้อเท็จจริง ข่าวสาร เอกสาร ตัวเลข ภาษา ภาพ หรือสัญลักษณ์ต่าง ๆ ที่ยังไม่ได้ผ่านการประมวลผล ข้อมูลอาจเป็นได้ทั้งข้อมูลเชิงคุณภาพและเชิงปริมาณ

Qualitative / Categorical Data

ข้อมูลเชิงคุณภาพ เช่น เพศ สีผม สถานภาพสมรส กลุ่มเลือด หรือคุณภาพสินค้า ดี/เสีย

Quantitative / Numerical Data

ข้อมูลเชิงปริมาณ เช่น อายุ น้ำหนัก ความสูง ค่าใช้จ่าย หรือจำนวนหนังสือที่ยืม

Structured Data

ข้อมูลที่มีโครงสร้างชัดเจน เช่น ตารางฐานข้อมูล ไฟล์ Excel หรือข้อมูลยอดขายสินค้า

Unstructured / Semi-Structured Data

ข้อมูลที่ไม่มีโครงสร้างชัดเจนหรือมีโครงสร้างบางส่วน เช่น JSON, XML, อีเมล รูปภาพ วิดีโอ และข้อความบนโซเชียลมีเดีย

แหล่งข้อมูลและคุณภาพข้อมูล

แหล่งข้อมูลสำหรับเหมืองข้อมูลสามารถมาจากฐานข้อมูล คลังข้อมูล เว็บ เซ็นเซอร์ IoT และข้อมูลธุรกรรม เช่น การซื้อขายสินค้า โดยข้อมูลที่เหมาะสมควรมีปริมาณเพียงพอ มีความหลากหลาย มีคุณภาพ ทันสมัย และมีการเก็บอย่างต่อเนื่อง

ปัญหาที่พบบ่อยในข้อมูล

  • Incomplete Data: ข้อมูลไม่สมบูรณ์หรือมี Missing Value
  • Noisy Data: ข้อมูลรบกวน มีข้อผิดพลาด หรือมี Outlier
  • Inconsistent Data: ข้อมูลไม่สอดคล้อง เช่น กรุงเทพ, กรุงเทพฯ, กทม. หมายถึงสิ่งเดียวกันแต่เขียนต่างกัน

การนำเข้าข้อมูล (Data Import)

Python สามารถนำเข้าข้อมูลได้จากหลายแหล่ง เช่น CSV, Excel, JSON, Text, ฐานข้อมูล SQL, API และ Web Scraping โดยนิยมใช้ Pandas เป็นเครื่องมือหลักในการอ่านข้อมูลเข้าสู่ DataFrame

import pandas as pd

# อ่านไฟล์ CSV
df_csv = pd.read_csv("data.csv")

# อ่านไฟล์ Excel
df_excel = pd.read_excel("data.xlsx", sheet_name="Sheet1")

# อ่านไฟล์ JSON
df_json = pd.read_json("data.json")

print(df_csv.head())

สำหรับฐานข้อมูล เช่น MySQL หรือ SQLite สามารถเชื่อมต่อฐานข้อมูลแล้วใช้ pd.read_sql() เพื่อดึงข้อมูลมาเตรียมวิเคราะห์ต่อได้

การสำรวจข้อมูล (Data Exploration)

หลังจากนำเข้าข้อมูลแล้ว ควรตรวจสอบข้อมูลเบื้องต้นเพื่อเข้าใจโครงสร้าง คุณภาพ และปัญหาที่อาจเกิดขึ้น เช่น จำนวนแถว คอลัมน์ สถิติพื้นฐาน ค่าที่ขาดหาย และข้อมูลซ้ำซ้อน

head() shape describe() isnull() duplicated()
import pandas as pd

data = pd.read_excel("data01.xlsx")

print(data.head())       # ดูตัวอย่างข้อมูล
print(data.shape)        # จำนวนแถวและคอลัมน์
print(data.describe())   # สถิติพื้นฐาน
print(data.isnull().sum())     # ตรวจ Missing Value
print(data.duplicated().sum()) # ตรวจข้อมูลซ้ำ

การทำความสะอาดข้อมูล (Data Cleaning)

Data Cleaning คือการจัดการข้อมูลที่ไม่สมบูรณ์ ผิดพลาด ไม่สอดคล้อง หรือซ้ำซ้อน สไลด์อธิบายว่าขั้นตอนนี้มีความสำคัญมาก เพราะนักวิทยาศาสตร์ข้อมูลมักใช้เวลาจำนวนมากกับการทำความสะอาดข้อมูลก่อนสร้างโมเดล

Parsing

ทำความเข้าใจหัวข้อข้อมูล ความหมายของแต่ละคอลัมน์ ค่าต่ำสุด สูงสุด และรูปแบบของข้อมูล

Correcting

แก้ไขค่าที่ผิดพลาด เช่น เพศเขียนไม่ตรงกัน หรือค่าตัวเลขผิดปกติ

Standardizing

ปรับข้อมูลให้อยู่ในรูปแบบเดียวกัน เช่น กรุงเทพฯ, กรุงเทพมหานคร, กทม. ให้เป็นค่าเดียวกัน

Duplicate Elimination

ตรวจสอบและลบข้อมูลซ้ำซ้อนออกจากชุดข้อมูล

การจัดการ Missing Value

ข้อมูลที่หายไปอาจเกิดจากไม่มีข้อมูล กรอกผิด หรือบันทึกไม่ครบ วิธีจัดการอาจใช้การลบแถว เติมค่าเฉลี่ย เติมค่ามัธยฐาน หรือเติมค่าที่เหมาะสมตามบริบท

import pandas as pd
import numpy as np

df = pd.DataFrame({
    "Name": ["John", "Anna", "Peter", "Linda", "Bob"],
    "Age": [28, 23, np.nan, 45, 32],
    "Salary": [50000, 60000, 75000, np.nan, 80000],
    "Gender": ["Male", "Female", "Male", "Female", np.nan]
})

df["Age"] = df["Age"].fillna(df["Age"].mean())
df["Salary"] = df["Salary"].fillna(df["Salary"].median())
df["Gender"] = df["Gender"].fillna(df["Gender"].mode()[0])

print(df)

การจัดการ Outlier

Outlier คือค่าที่แตกต่างจากกลุ่มหลักอย่างชัดเจน เช่น คะแนน 120 จากคะแนนเต็ม 100 หรือค่าความสูง/น้ำหนักที่ผิดปกติ อาจเกิดจากการบันทึกผิดหรือข้อมูลจริงที่แตกต่างจากกลุ่ม

import pandas as pd

df = pd.DataFrame({"คะแนน": [85, 88, 92, 78, 94, 120, 88, 90, 89, 91]})

median_value = df["คะแนน"].median()
df["คะแนน"] = df["คะแนน"].apply(lambda x: median_value if x > 100 else x)

print(df)

การรวมข้อมูล (Data Integration)

Data Integration คือการรวมข้อมูลจากหลายแหล่งให้กลายเป็นชุดข้อมูลเดียวที่มีความสอดคล้อง เช่น รวมข้อมูลลูกค้าจากระบบ CRM และข้อมูลการขายจาก Sales System เพื่อสร้างมุมมองแบบรวมของลูกค้า

import pandas as pd

df1 = pd.DataFrame({
    "ID": [1, 2, 3, 4],
    "ชื่อ": ["John", "Alice", "Bob", "Charlie"],
    "เงินเดือน": [50000, 60000, 45000, 70000]
})

df2 = pd.DataFrame({
    "ID": [3, 4, 5, 6],
    "อายุ": [28, 35, 22, 40],
    "ที่อยู่": ["Street A", "Street B", "Street C", "Street D"]
})

merged_df = pd.merge(df1, df2, on="ID", how="inner")
print(merged_df)

การแปลงข้อมูล (Data Transformation)

Data Transformation คือการปรับเปลี่ยนรูปแบบข้อมูลให้เหมาะสมกับการวิเคราะห์ เช่น แปลงวันที่ แปลงข้อความเป็นตัวเลข แปลงข้อมูลต่อเนื่องเป็นช่วงกลุ่ม และปรับขนาดข้อมูลด้วย Normalization หรือ Standardization

Discretization

Discretization คือการแปลงข้อมูลตัวเลขแบบต่อเนื่องให้เป็นข้อมูลแบบกลุ่ม เช่น แบ่งอายุเป็นช่วง 20–30, 30–40 และ 40–50 ปี เพื่อให้ตีความง่ายและเหมาะกับบางอัลกอริทึม

import pandas as pd

df = pd.DataFrame({
    "ชื่อ": ["John", "Alice", "Bob", "Charlie", "David"],
    "อายุ": [25, 28, 35, 45, 32],
    "เงินเดือน": [50000, 60000, 70000, 80000, 55000]
})

age_bins = [20, 30, 40, 50]
df["กลุ่มอายุ"] = pd.cut(df["อายุ"], bins=age_bins, labels=["20-30", "30-40", "40-50"])

print(df)

แปลงข้อมูลข้อความเป็นตัวเลข

import pandas as pd

df = pd.DataFrame({"ความคิดเห็น": ["ดี", "ปานกลาง", "แย่"]})

df["คะแนนความคิดเห็น"] = df["ความคิดเห็น"].apply(
    lambda x: 5 if x == "ดี" else 3 if x == "ปานกลาง" else 1
)

print(df)

การเลือกฟีเจอร์ (Feature Selection)

Feature Selection คือการเลือกคุณลักษณะที่สำคัญสำหรับการวิเคราะห์หรือสร้างโมเดล เพื่อลดความซับซ้อน ลดตัวแปรที่ไม่เกี่ยวข้อง และช่วยให้โมเดลทำงานได้ดีขึ้น

Feature Importance

ใช้เทคนิค เช่น Random Forest เพื่อวัดความสำคัญของฟีเจอร์แต่ละตัว

Statistical Selection

ใช้ SelectKBest หรือ chi-square เพื่อเลือกฟีเจอร์ที่สัมพันธ์กับเป้าหมายมากที่สุด

ข้อมูลไม่สมดุลและการแบ่งข้อมูล

ข้อมูลไม่สมดุลเกิดขึ้นเมื่อจำนวนตัวอย่างของแต่ละกลุ่มแตกต่างกันมาก เช่น กลุ่มปกติมีจำนวนมาก แต่กลุ่มผิดปกติมีจำนวนน้อย วิธีจัดการ ได้แก่ Oversampling เช่น SMOTE และ Undersampling เช่น RandomUnderSampler

ก่อนสร้างโมเดลควรแบ่งข้อมูลเป็น Training Set และ Test Set เพื่อใช้ฝึกและทดสอบประสิทธิภาพของโมเดล

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(
    X, y,
    test_size=0.2,
    random_state=42
)

เครื่องมือและไลบรารีที่ใช้ในการเตรียมข้อมูล

Pandas

จัดการข้อมูลเชิงตาราง อ่านไฟล์ CSV/Excel ตรวจสอบและแปลงข้อมูล

NumPy

จัดการอาเรย์ ตัวเลข และการคำนวณเชิงคณิตศาสตร์

Scikit-learn

ใช้แปลงข้อมูล เลือกฟีเจอร์ แบ่งข้อมูล และสร้างโมเดล Machine Learning

Imbalanced-learn

ช่วยจัดการข้อมูลที่ไม่สมดุล เช่น SMOTE และ Undersampling

ตัวอย่างหัวข้อโครงงาน

บทเรียนนี้สามารถต่อยอดเป็นหัวข้อโครงงานเหมืองข้อมูลได้หลายด้าน เช่น การศึกษา ธุรกิจ สุขภาพ สิ่งแวดล้อม สังคม การเงิน และการเกษตร

  • การวิเคราะห์พฤติกรรมนักเรียนเพื่อคาดการณ์ความเสี่ยงการลาออก
  • การจัดกลุ่มลูกค้าเพื่อเสนอโปรโมชันที่เหมาะสม
  • การตรวจจับการทุจริตทางการเงินด้วยเทคนิคเหมืองข้อมูล
  • การวิเคราะห์แนวโน้มมลพิษในอากาศโดยใช้ข้อมูล IoT
  • การวิเคราะห์ข้อมูลสภาพอากาศเพื่อเพิ่มผลผลิตทางการเกษตร

สรุปบทที่ 3

การเตรียมข้อมูลที่ดีช่วยเพิ่มความน่าเชื่อถือของผลการวิเคราะห์และความแม่นยำของโมเดล การใช้ Python ร่วมกับ Pandas, NumPy, Scikit-learn และ Imbalanced-learn ช่วยให้กระบวนการเตรียมข้อมูลทำได้เป็นระบบและยืดหยุ่นมากขึ้น

อ่านต่อ

ต่อยอดความรู้ด้าน Data Mining

อ่านบทเรียนก่อนหน้าและบทความที่เกี่ยวข้อง เพื่อเชื่อมโยงแนวคิดการเตรียมข้อมูลกับ AI, IoT และการวิเคราะห์ข้อมูลจริง