
Bạn được giao một nhiệm vụ phân tích dữ liệu với một dataset thô, và chắc chắn bạn sẽ nghĩ ngay đến những quy trình thú vị mà bạn sắp sửa thực hành, như xây dựng mô hình học máy, phân tích xu hướng, hay tạo ra các dự đoán chính xác.
Tuy nhiên, trước khi bắt tay vào những bước hấp dẫn đó, bạn cần thực hiện một bước không thể thiếu: quy trình tiền xử lý dữ liệu (data preprocessing)!
Trong bài viết này, INDA Academy sẽ hướng dẫn bạn tiền xử lý dữ liệu – xây dựng 1 data preprocessing pipeline hiệu quả, ứng dụng được với mọi dataset. Chúng tôi sẽ sử dụng Python cho việc đó. Cùng tìm hiểu nhé!
Đọc thêm: ETL (extract – transform – load) là gì? Các công cụ ETL trong Data Warehouse
Mục lục
Data Preprocessing là gì? Tầm quan trọng của tiền xử lý dữ liệu

Là người theo đuổi chuyên ngành dữ liệu, hẳn bạn đã biết đến quy trình data preprocessing (tiền xử lý dữ liệu). Đây là một trong những bước đầu tiên và vô cùng quan trọng trong lĩnh vực khoa học dữ liệu, machine learning (học máy).
Hiểu một cách đơn giản, tiền xử lý dữ liệu là quá trình làm sạch, chuẩn hóa và biến đổi dữ liệu thô thành dạng phù hợp để khai thác thông tin, huấn luyện mô hình,… hiệu quả.
Vậy tại sao data preprocessing lại là một trong các bước quan trọng nhất khi làm việc với dữ liệu?
Trước hết, nó giúp làm sạch dữ liệu cho việc sử dụng. Bạn biết đấy, dữ liệu thô thường không hoàn hảo. Nó có thể chứa các giá trị còn thiếu (missing values), outliers,… Tiền xử lý dữ liệu sẽ giúp giảm sai lệch trong quá trình tính toán, phân tích, xây dựng mô hình về sau.
Tiếp đó, data preprocessing giúp chuẩn hóa dữ liệu. Các giá trị số (numeric features) sẽ được đưa về cùng thang đo, giúp giảm sai lệch khi tính toán. Các giá trị phân loại (categorical features) cũng được mã hóa hợp lý, giúp dữ liệu được mô hình xử lý dễ dàng hơn.
Các bước chính trong quy trình tiền xử lý dữ liệu (data preprocess pipeline)

Trước khi đi vào tìm hiểu từng bước cụ thể, chúng tôi sẽ giới thiệu khái niệm Data preprocessing pipeline – quy trình tiền xử lý dữ liệu. Đây là tập hợp các bước tuần tự giúp làm sạch và chuẩn bị dữ liệu một cách có hệ thống. Có nghĩa là, quy trình này đảm bảo mọi thao tác được thực hiện nhất quán, và có thể áp dụng lại trên các bộ dữ liệu khác nhau.
Tiếp theo, đi vào chi tiết các bước nhé.
Quy trình tiền xử lý dữ liệu thường bao gồm các bước quan trọng sau:
- Làm sạch dữ liệu: Xử lý các giá trị thiếu (missing values) và loại bỏ dữ liệu không hợp lệ. Điều này giúp dữ liệu có đầy đủ thông tin và chính xác hơn.
- Phát hiện và xử lý ngoại lệ: Sử dụng các kỹ thuật như IQR (Interquartile Range) hoặc biểu đồ để xác định và loại bỏ ngoại lệ trong các đặc trưng số.
- Chuẩn hóa dữ liệu: Các đặc trưng số (numeric features) được chuẩn hóa bằng MinMaxScaler hoặc StandardScaler để đưa chúng về cùng một thang đo.
- Xử lý đặc trưng phân loại: Đối với các đặc trưng phân loại (categorical features), dữ liệu được mã hóa bằng phương pháp one-hot encoding hoặc label encoding.
- Tích hợp và chuyển đổi dữ liệu: Kết hợp các đặc trưng từ nhiều nguồn khác nhau và thực hiện các biến đổi cần thiết để phù hợp với mục tiêu phân tích.
Việc xây dựng một data preprocessing pipeline giúp quy trình xử lý dữ liệu trở nên tự động, tiết kiệm thời gian và hạn chế sai sót. Tóm lại, quy trình tiền xử lý dữ liệu là chìa khóa quan trọng giúp nâng cao chất lượng dữ liệu, và tối ưu hóa kết quả của các thuật toán machine learning.
Hướng dẫn tiền xử lý dữ liệu bằng Python (Xây dựng Data preprocess pipeline bằng Python)
Sau đây, INDA sẽ hướng dẫn các bạn xây dựng một quy trình tiền xử lý dữ liệu bằng Python.
Vì sao chúng tôi lại sử dụng Python để hướng dẫn quy trình này? Python là một ngôn ngữ lập trình phổ biến trong khoa học dữ liệu nhờ vào cú pháp dễ hiểu, thư viện phong phú như Pandas, NumPy, và Scikit-learn, hỗ trợ mạnh mẽ cho việc xử lý dữ liệu và xây dựng mô hình. Python cho phép bạn xây dựng các pipeline linh hoạt, dễ dàng tích hợp và kiểm tra trên nhiều bộ dữ liệu khác nhau.
Bạn có thể đăng ký học thử khóa Data Engineer tại INDA để được thực hành các bài tập tương tự.
Dưới đây là cách tạo một Data Preprocessing pipeline sử dụng Python. Mọi pipeline tiền xử lý dữ liệu nên có các bước sau:
Bước 1: Import các thư viện
import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler
Trong bước đầu tiên của quy trình tiền xử lý dữ liệu, chúng ta sẽ import các thư viện cần thiết để thực hiện các thao tác xử lý dữ liệu.
- Pandas giúp tải và xử lý dữ liệu từ các file CSV hoặc Excel.
- NumPy hỗ trợ các phép toán số học và ma trận.
- StandardScaler từ Scikit-learn sẽ được sử dụng để chuẩn hóa các đặc trưng số, đảm bảo rằng dữ liệu có cùng thang đo, giúp các thuật toán máy học hoạt động hiệu quả hơn.
Bước 2: Xác định các numeric và categorical features trong dataset
def data_preprocessing_pipeline(data):
#Identify numeric and categorical features
numeric_features = data.select_dtypes(include=['float', 'int']).columns
categorical_features = data.select_dtypes(include=['object']).columns
Trong bước này, quy trình tiền xử lý dữ liệu sẽ phân loại các đặc trưng trong bộ dữ liệu thành hai nhóm chính: numeric features (đặc trưng số) và categorical features (đặc trưng phân loại). Các đặc trưng số thường có kiểu dữ liệu là float hoặc int, trong khi các đặc trưng phân loại có kiểu dữ liệu là object. Việc xác định rõ ràng các đặc trưng này giúp quá trình xử lý dữ liệu trở nên hiệu quả hơn, vì mỗi loại dữ liệu sẽ yêu cầu những phương pháp xử lý khác nhau.
Bước 3: Xử lý dữ liệu thiếu trong numeric features
#Handle missing values in numeric features
data[numeric_features] = data[numeric_features].fillna(data[numeric_features].mean())
Quy trình tiền xử lý dữ liệu sẽ xử lý tất cả các giá trị thiếu có trong các đặc trưng số (numeric features). Các giá trị thiếu này được thay thế bằng giá trị trung bình (mean) của mỗi đặc trưng số tương ứng (hoặc thay thế bằng mode, median,…). Việc này đảm bảo dữ liệu thiếu không làm cản trở các phân tích và phép tính tiếp theo trong quy trình tiền xử lý dữ liệu.
Bước 4: Phát hiện & xử lý outliers trong numeric features
#Detect and handle outliers in numeric features using IQR
for feature in numeric_features:
Q1 = data[feature].quantile(0.25)
Q3 = data[feature].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - (1.5 * IQR)
upper_bound = Q3 + (1.5 * IQR)
data[feature] = np.where((data[feature] < lower_bound) | (data[feature] > upper_bound),
data[feature].mean(), data[feature])
Bước này sử dụng phương pháp IQR để phát hiện các ngoại lệ trong các đặc trưng số, bằng cách xác định các giá trị nằm ngoài phạm vi bình thường của dữ liệu. Những giá trị này sẽ được thay thế bằng giá trị trung bình của đặc trưng để tránh ảnh hưởng đến kết quả phân tích trong quy trình tiền xử lý dữ liệu.
Bước 5: Chuẩn hóa numeric features
#Normalize numeric features
scaler = StandardScaler()
scaled_data = scaler.fit_transform(data[numeric_features])
data[numeric_features] = scaler.transform(data[numeric_features])
Bước này sử dụng StandardScaler để chuẩn hóa các đặc trưng số, giúp tất cả các giá trị có cùng thang đo. Phương pháp này điều chỉnh các giá trị sao cho có trung bình là 0 và độ lệch chuẩn là 1, giúp cải thiện hiệu quả các thuật toán học máy. Việc chuẩn hóa này rất quan trọng trong quy trình tiền xử lý dữ liệu, vì nó giúp các mô hình học máy hoạt động chính xác hơn và không bị ảnh hưởng bởi sự chênh lệch lớn giữa các giá trị đặc trưng.
Bước 6: Xử lý dữ liệu thiếu trong categorical features & Kết thúc
#Handle missing values in categorical features
data[categorical_features] = data[categorical_features].fillna(data[categorical_features].mode().iloc[0])
return data
Bước cuối cùng trong quy trình tiền xử lý dữ liệu là xử lý các dữ liệu thiếu trong các đặc trưng phân loại (categorical features). Chúng ta thay thế các giá trị thiếu bằng giá trị mode (giá trị xuất hiện nhiều nhất) của mỗi đặc trưng phân loại, giúp đảm bảo rằng các mô hình học máy không bị thiếu dữ liệu và có thể hoạt động hiệu quả. Sau khi xử lý xong, chúng ta trả về dữ liệu đã được tiền xử lý hoàn chỉnh, sẵn sàng cho các bước phân tích hoặc xây dựng mô hình tiếp theo.
Tạm kết
Như vậy, INDA Academy vừa hướng dẫn bạn xây dựng 1 data preprocessing pipeline – quy trình tiền xử lý dữ liệu bằng Python. Chúng tôi có một lời khuyên cho bạn khi bắt đầu quy trình này: Hãy hiểu lý do của từng bước, trước khi thực hiện đúng kỹ thuật của bước đó. Bởi chỉ khi bạn hiểu thấu đáo ý nghĩa của từng bước trong pipeline, bạn mới có thể tạo ra 1 pipeline xử lý dữ liệu hiệu quả, và biết cách điều chỉnh khi phát sinh vấn đề.
>> Đọc thêm:
KHOÁ HỌC SQL NÂNG CAO
KHÓA HỌC DATA WAREHOUSE : TỔNG HỢP, CHUẨN HÓA VÀ XÂY DỰNG KHO DỮ LIỆU
KHÓA HỌC DATA MODEL – THIẾT KẾ MÔ HÌNH DỮ LIỆU
LỘ TRÌNH TRỞ THÀNH KỸ SƯ DỮ LIỆU (DATA ENGINEER)