ภาพรวมบทเรียน
Data Preparation หรือการเตรียมข้อมูล เป็นขั้นตอนสำคัญก่อนทำเหมืองข้อมูลและสร้างโมเดล Machine Learning เพราะข้อมูลจริงมักมีปัญหา เช่น ค่าว่าง ข้อมูลซ้ำ รูปแบบไม่สอดคล้อง ค่าผิดปกติ และตัวแปรที่ยังไม่พร้อมให้โมเดลนำไปเรียนรู้
บทนี้จะพาผู้เรียนทำความเข้าใจตั้งแต่ข้อมูลดิบไปจนถึงชุดข้อมูลที่พร้อมใช้ โดยยึดหลักว่า “ข้อมูลที่ดี ทำให้โมเดลดีขึ้น” หากข้อมูลมีคุณภาพต่ำ โมเดลที่สร้างขึ้นอาจให้คำตอบผิดพลาด แม้ใช้อัลกอริทึมที่ทันสมัยก็ตาม
เป้าหมายของบทที่ 3
เปลี่ยน Raw Data ให้เป็น Clean, Consistent, Structured และ Model-ready Data เพื่อรองรับการวิเคราะห์ สถิติ กฎความสัมพันธ์ การจำแนกข้อมูล และการสร้างโมเดลทำนายในบทถัดไป
ผลลัพธ์การเรียนรู้
Pipeline การเตรียมข้อมูล
ภาพรวม Data Preparation Pipeline
Data Import
อ่านข้อมูลจากไฟล์ ฐานข้อมูล API หรือระบบภายนอก
Data Exploration
สำรวจชนิดข้อมูล จำนวนแถว ค่าสถิติ ค่าว่าง และข้อมูลซ้ำ
Data Cleaning
แก้ไข Missing Value, Duplicate, Inconsistent Value และ Outlier
Data Transformation
Encoding, Scaling, Discretization และสร้าง Feature ใหม่
Feature Selection และ Splitting
เลือกตัวแปรสำคัญ แบ่ง Train/Test และป้องกัน Data Leakage
ข้อมูลและประเภทข้อมูล
ข้อมูล (Data) คือข้อเท็จจริง ข่าวสาร ตัวเลข ข้อความ ภาพ เสียง หรือสัญลักษณ์ที่ยังไม่ได้ผ่านการประมวลผล ในงานเหมืองข้อมูลต้องเข้าใจประเภทข้อมูลก่อน เพราะชนิดข้อมูลมีผลต่อวิธีทำความสะอาด แปลงข้อมูล และเลือกอัลกอริทึม
ประเภทข้อมูลที่พบบ่อย
Qualitative / Categorical
ข้อมูลเชิงคุณภาพ เช่น เพศ จังหวัด กลุ่มเลือด ประเภทสินค้า หรือสถานะการสั่งซื้อ
Quantitative / Numerical
ข้อมูลเชิงปริมาณ เช่น อายุ น้ำหนัก รายได้ คะแนน หรือจำนวนการซื้อ
Structured Data
ข้อมูลแบบตาราง เช่น Excel, CSV และฐานข้อมูล SQL
Semi/Unstructured Data
JSON, XML, ข้อความ รูปภาพ เสียง วิดีโอ และข้อมูลจากโซเชียลมีเดีย
แหล่งข้อมูลและคุณภาพข้อมูล
ข้อมูลอาจมาจากหลายแหล่ง เช่น ฐานข้อมูลธุรกิจ คลังข้อมูล เว็บไซต์ ระบบ IoT แบบสอบถาม ไฟล์เอกสาร หรือ API ภายนอก ข้อมูลที่ดีควรมีความครบถ้วน ถูกต้อง สอดคล้อง ทันสมัย และเกี่ยวข้องกับปัญหาที่ต้องการวิเคราะห์
มิติคุณภาพข้อมูล
ปัญหาที่พบบ่อย
- Incomplete Data: มีค่าว่างหรือข้อมูลไม่ครบ
- Noisy Data: มีข้อมูลรบกวนหรือค่าผิดปกติ
- Inconsistent Data: ค่าเดียวกันเขียนต่างกัน เช่น กรุงเทพ, กรุงเทพฯ, กทม.
- Data Leakage: มีข้อมูลอนาคตหรือข้อมูลคำตอบปะปนในชุดฝึก ทำให้ประเมินโมเดลเกินจริง
การนำเข้าข้อมูล (Data Import)
Python สามารถนำเข้าข้อมูลได้จาก CSV, Excel, JSON, Text, SQL, API และ Web Scraping โดยนิยมใช้ Pandas เพื่ออ่านข้อมูลเข้าสู่ DataFrame
แหล่งข้อมูล → Pandas DataFrame
import pandas as pd
df_csv = pd.read_csv("data.csv")
df_excel = pd.read_excel("data.xlsx", sheet_name="Sheet1")
df_json = pd.read_json("data.json")
print(df_csv.head())การสำรวจข้อมูล (Data Exploration)
หลังจากนำเข้าข้อมูล ควรสำรวจข้อมูลเบื้องต้นเพื่อตรวจโครงสร้าง ชนิดข้อมูล ค่าสถิติ ความครบถ้วน และปัญหาเบื้องต้นก่อนเริ่มทำความสะอาด
data = pd.read_excel("data01.xlsx")
print(data.head())
print(data.shape)
print(data.info())
print(data.describe())
print(data.isnull().sum())
print(data.duplicated().sum())การทำความสะอาดข้อมูล (Data Cleaning)
Data Cleaning คือการจัดการข้อมูลที่ไม่สมบูรณ์ ผิดพลาด ไม่สอดคล้อง หรือซ้ำซ้อน เป็นขั้นตอนที่ใช้เวลามากแต่มีผลต่อคุณภาพโมเดลโดยตรง
Data Cleaning: ปัญหาและวิธีแก้
Missing Value
ข้อมูลที่หายไปอาจจัดการได้หลายวิธี เช่น ลบแถว เติมค่าเฉลี่ย เติมค่ามัธยฐาน เติมฐานนิยม หรือเติมค่าตามกลุ่มข้อมูล ขึ้นอยู่กับชนิดของข้อมูลและบริบทของปัญหา
import numpy as np
import pandas as pd
df = pd.DataFrame({
"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])Duplicate, Inconsistent Value และ Outlier
# ลบข้อมูลซ้ำ
df = df.drop_duplicates()
# ปรับค่าที่เขียนไม่สอดคล้องกัน
df["province"] = df["province"].replace({
"กรุงเทพ": "กรุงเทพมหานคร",
"กรุงเทพฯ": "กรุงเทพมหานคร",
"กทม.": "กรุงเทพมหานคร"
})
# ตรวจ Outlier ด้วย IQR
q1 = df["score"].quantile(0.25)
q3 = df["score"].quantile(0.75)
iqr = q3 - q1
lower = q1 - 1.5 * iqr
upper = q3 + 1.5 * iqr
outliers = df[(df["score"] < lower) | (df["score"] > upper)]ต้องการเตรียมข้อมูลสำหรับงานวิจัยหรือ Dashboard?
Siam2Dev ช่วยวิเคราะห์โครงสร้างข้อมูล ทำความสะอาดข้อมูล สร้างชุดข้อมูลพร้อมใช้ และต่อยอดเป็นโมเดล Machine Learning หรือ Dashboard สำหรับงานจริงได้
การรวมข้อมูล (Data Integration)
Data Integration คือการรวมข้อมูลจากหลายแหล่งให้เป็นชุดข้อมูลเดียว เช่น รวมข้อมูลลูกค้าจากระบบ CRM กับข้อมูลการขายจาก POS เพื่อให้เห็นภาพรวมของลูกค้าและพฤติกรรมการซื้อ
customers = pd.DataFrame({
"customer_id": [1, 2, 3],
"name": ["Ann", "Bob", "Chris"]
})
orders = pd.DataFrame({
"customer_id": [1, 1, 3],
"total": [250, 120, 700]
})
merged = pd.merge(customers, orders, on="customer_id", how="left")
print(merged)การแปลงข้อมูล (Data Transformation)
Data Transformation คือการปรับข้อมูลให้อยู่ในรูปแบบที่เหมาะกับการวิเคราะห์ เช่น แปลงข้อความเป็นตัวเลข แปลงวันที่ สร้างตัวแปรใหม่ แบ่งช่วงข้อมูล และปรับสเกลข้อมูล
Data Transformation ที่ใช้บ่อย
Encoding, Scaling และ Discretization
from sklearn.preprocessing import OneHotEncoder, StandardScaler
import pandas as pd
df = pd.DataFrame({
"gender": ["ชาย", "หญิง", "หญิง"],
"age": [22, 35, 45],
"income": [15000, 32000, 50000]
})
# One-hot encoding
df_encoded = pd.get_dummies(df, columns=["gender"])
# Standardization
scaler = StandardScaler()
df_encoded[["age", "income"]] = scaler.fit_transform(
df_encoded[["age", "income"]]
)
# Discretization
df["age_group"] = pd.cut(df["age"], bins=[20, 30, 40, 50],
labels=["20-30", "31-40", "41-50"])Feature Engineering จากวันที่
df["order_date"] = pd.to_datetime(df["order_date"])
df["year"] = df["order_date"].dt.year
df["month"] = df["order_date"].dt.month
df["dayofweek"] = df["order_date"].dt.dayofweekการเลือกฟีเจอร์ (Feature Selection)
Feature Selection คือการเลือกตัวแปรที่สำคัญต่อ Target เพื่อลด Noise ลดความซับซ้อน และช่วยให้โมเดลตีความง่ายขึ้น วิธีที่ใช้ได้ เช่น ความสัมพันธ์ทางสถิติ SelectKBest, Feature Importance จากต้นไม้ตัดสินใจ หรือการเลือกตามความรู้เชิงโดเมน
Feature Selection
from sklearn.feature_selection import SelectKBest, chi2
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
X_scaled = scaler.fit_transform(X)
selector = SelectKBest(score_func=chi2, k=5)
X_selected = selector.fit_transform(X_scaled, y)
print("Scores:", selector.scores_)
print("Selected shape:", X_selected.shape)ข้อมูลไม่สมดุล (Imbalanced Data)
ข้อมูลไม่สมดุลเกิดเมื่อจำนวนตัวอย่างแต่ละคลาสต่างกันมาก เช่น ธุรกรรมปกติมี 99% แต่ธุรกรรมทุจริตมี 1% หากใช้ Accuracy เพียงอย่างเดียวอาจทำให้เข้าใจผิด เพราะโมเดลที่ทำนายว่า “ปกติทั้งหมด” อาจได้ Accuracy สูงแต่ใช้งานจริงไม่ได้
Imbalanced Data และการจัดการ
from imblearn.over_sampling import SMOTE
smote = SMOTE(random_state=42)
X_resampled, y_resampled = smote.fit_resample(X_train, y_train)
print("Before:", y_train.value_counts())
print("After:", y_resampled.value_counts())การแบ่งข้อมูล Train/Test และ Data Leakage
ก่อนสร้างโมเดลควรแบ่งข้อมูลเป็น Training Set และ Test Set เพื่อประเมินว่าโมเดลสามารถทำนายข้อมูลใหม่ได้ดีเพียงใด โดยทั่วไปอาจใช้สัดส่วน 80/20 หรือ 70/30 และในกรณีข้อมูลไม่สมดุลควรใช้ stratify=y เพื่อรักษาสัดส่วนของแต่ละคลาส
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,
stratify=y
)เครื่องมือและไลบรารีที่ใช้
Pandas
จัดการข้อมูลตาราง อ่านไฟล์ ตรวจ Missing/Duplicate และแปลงข้อมูล
NumPy
จัดการอาเรย์และการคำนวณเชิงตัวเลข
Scikit-learn
แปลงข้อมูล เลือกฟีเจอร์ แบ่งข้อมูล และสร้างโมเดล
Imbalanced-learn
จัดการข้อมูลไม่สมดุล เช่น SMOTE และ Undersampling
Checklist การเตรียมข้อมูลก่อนสร้างโมเดล
จำนวนแถว คอลัมน์ ชนิดข้อมูล และความหมายของตัวแปร
Missing Value, Duplicate, Inconsistent Value และ Outlier
Encoding, Scaling, Discretization และ Date/Time Feature Engineering
เลือกตัวแปรสำคัญ แบ่ง Train/Test และป้องกัน Data Leakage
ตัวอย่างหัวข้อโครงงาน
- การวิเคราะห์พฤติกรรมนักเรียนเพื่อคาดการณ์ความเสี่ยงการลาออก
- การจัดกลุ่มลูกค้าเพื่อเสนอโปรโมชันที่เหมาะสม
- การตรวจจับการทุจริตทางการเงินด้วยเทคนิคเหมืองข้อมูล
- การวิเคราะห์แนวโน้มมลพิษในอากาศโดยใช้ข้อมูล IoT
- การวิเคราะห์ข้อมูลสภาพอากาศเพื่อเพิ่มผลผลิตทางการเกษตร
แบบฝึกหัดท้ายบท
- อธิบายความหมายของ Data Preparation และเหตุผลที่สำคัญต่อการทำเหมืองข้อมูล
- ยกตัวอย่างปัญหา Missing Value, Duplicate, Inconsistent Data และ Outlier อย่างละ 1 ตัวอย่าง
- ใช้ Pandas อ่านไฟล์ CSV หรือ Excel แล้วตรวจสอบ
head(),shape,describe(),isnull()และduplicated() - ทดลองเติม Missing Value ด้วยค่าเฉลี่ย มัธยฐาน และฐานนิยม พร้อมอธิบายว่าแต่ละวิธีเหมาะกับข้อมูลแบบใด
- สร้างตัวอย่างข้อมูล Categorical แล้วแปลงเป็นตัวเลขด้วย Label Encoding หรือ One-hot Encoding
- แบ่งข้อมูลเป็น Training Set และ Test Set พร้อมอธิบายเหตุผลของสัดส่วนที่เลือก
- ทดลองเลือก Feature ด้วยวิธีใดวิธีหนึ่ง และสรุปว่า Feature ใดสำคัญต่อ Target มากที่สุด
สรุปบทที่ 3
การเตรียมข้อมูลที่ดีช่วยเพิ่มความน่าเชื่อถือของผลการวิเคราะห์และความแม่นยำของโมเดล ผู้เรียนควรตรวจสอบคุณภาพข้อมูล ทำความสะอาด แปลงข้อมูล เลือกฟีเจอร์ และแบ่งข้อมูลอย่างถูกต้องก่อนนำไปทำสถิติ กฎความสัมพันธ์ หรือ Machine Learning ในบทถัดไป