Trong bất kỳ đồ án AI hoặc bài toán học máy nào, dữ liệu đầu vào đóng vai trò then chốt. Một mô hình dù tốt đến đâu cũng sẽ cho kết quả tệ nếu dữ liệu đầu vào bẩn, chưa chuẩn hóa hoặc chưa được xử lý đúng cách.
Vì thế, việc xử lý dữ liệu đầu vào (data preprocessing) luôn là bước đầu tiên trong mọi dự án AI nghiêm túc. Trong bài viết này, bạn sẽ được hướng dẫn từng bước làm sạch – biến đổi – chuẩn hóa – mã hóa dữ liệu đầu vào, sao cho mô hình học máy có thể “hiểu” được.
Các thao tác sẽ được thực hiện bằng Python và thư viện scikit-learn/pandas, dễ áp dụng vào mọi đồ án sinh viên hoặc thực tế.
Tải bộ dữ liệu mẫu
Ta sẽ sử dụng dữ liệu điểm số sinh viên có cột dạng số và chữ để xử lý cho bài toán dự đoán điểm sinh viên
Bạn có thể tải một file mẫu tại đây:
Download Dataset – StudentsPerformance.csv (Kaggle)
Sau khi tải, đặt file vào thư mục data/StudentsPerformance.csv trong project của bạn.
Đọc dữ liệu và xem thông tin cơ bản
File: preprocess.py
import pandas as pd
# Đọc dữ liệu
df = pd.read_csv("data/StudentsPerformance.csv")
# Xem 5 dòng đầu
print(df.head())
# Kiểm tra thông tin
print(df.info())
print(df.describe())
Ở đây ta sẽ thấy một số cột như:
-
gender (male/female)
-
parental level of education (chữ)
-
test preparation course (none/completed)
-
math score, reading score, writing score (số)
Xử lý giá trị thiếu
Đầu tiên phải đảm bảo không có dữ liệu bị thiếu (NaN), nếu có cần xử lý:
# Kiểm tra dữ liệu thiếu print(df.isnull().sum()) # Có thể điền trung bình vào các cột số df['math score'].fillna(df['math score'].mean(), inplace=True)
Nếu cột nào quá nhiều giá trị thiếu (trên 30%), có thể cân nhắc loại bỏ hoàn toàn.
Mã hóa biến phân loại (Encoding)
Các cột dạng text cần chuyển về dạng số để mô hình hiểu được.
# Mã hóa giới tính (label encoding)
df['gender'] = df['gender'].map({'female': 0, 'male': 1})
# Mã hóa test preparation course (one-hot encoding)
df = pd.get_dummies(df, columns=['test preparation course'], drop_first=True)
Nếu bạn dùng nhiều biến phân loại, nên dùng OneHotEncoder hoặc LabelEncoder từ sklearn.preprocessing.
Chuẩn hóa dữ liệu số
Các cột số nên được chuẩn hóa về cùng thang đo, nhất là nếu bạn dùng KNN, SVM hoặc Gradient Descent.
from sklearn.preprocessing import StandardScaler scaler = StandardScaler() # Cột số cần chuẩn hóa cols_to_scale = ['math score', 'reading score', 'writing score'] df[cols_to_scale] = scaler.fit_transform(df[cols_to_scale])
Tạo cột mới từ cột có sẵn (Feature Engineering)
Bạn có thể tạo thêm các cột như:

