Exploratory Data Analysis (EDA) là gì? Hướng dẫn thực hiện chi tiết bằng Python
Trong quy trình Khoa học dữ liệu (Data Science), trước khi áp dụng bất kỳ thuật toán Machine Learning phức tạp nào, có một bước “sống còn” mà bạn không thể bỏ qua: Exploratory Data Analysis (EDA).
Vậy EDA là gì? Tại sao nó lại quan trọng đến vậy và làm thế nào để thực hiện EDA hiệu quả bằng Python? Bài viết này sẽ giải đáp tất cả thắc mắc của bạn từ lý thuyết đến thực hành.
Exploratory Data Analysis (Phân tích dữ liệu khám phá) là quá trình sử dụng các phương pháp thống kê và công cụ trực quan hóa để tìm hiểu sơ bộ về dữ liệu.
Hãy tưởng tượng bạn là một thám tử. Trước khi kết luận ai là thủ phạm (xây dựng mô hình), bạn cần phải khám phá hiện trường, xem xét manh mối và tìm ra các điểm bất thường (EDA).
Tại sao EDA lại quan trọng?
Hiểu cấu trúc dữ liệu: Biết dữ liệu có bao nhiêu dòng, cột, kiểu dữ liệu gì.
Phát hiện lỗi: Tìm ra các giá trị bị thiếu (missing values), dữ liệu trùng lặp hoặc nhiễu.
Nhận diện Outlier (Giá trị ngoại lai): Những điểm dữ liệu bất thường có thể làm sai lệch mô hình.
Tìm ra mối liên hệ (Correlation): Các biến số ảnh hưởng lẫn nhau như thế nào?
Quy tắc vàng: “Garbage In, Garbage Out”. Nếu bạn đưa dữ liệu rác vào mô hình mà không qua bước EDA và làm sạch, kết quả đầu ra cũng sẽ là rác.
2. Bộ công cụ Python cần thiết cho EDA
Để thực hiện EDA, chúng ta sẽ sử dụng 4 thư viện “huyền thoại” của Python:
Pandas: Công cụ mạnh mẽ nhất để thao tác và xử lý dữ liệu dạng bảng (DataFrame).
NumPy: Hỗ trợ tính toán toán học và mảng đa chiều.
Matplotlib: Thư viện vẽ biểu đồ cơ bản.
Seaborn: Thư viện vẽ biểu đồ nâng cao, đẹp mắt và dễ sử dụng hơn (được xây dựng dựa trên Matplotlib).
3. Quy trình thực hiện EDA từng bước (Kèm Code mẫu)
Giả sử chúng ta đang có một tập dữ liệu kinh điển là Titanic (dự đoán hành khách sống sót). Dưới đây là các bước EDA chuẩn:
Bước 1: Thu thập và Đọc dữ liệu
Đầu tiên, hãy import thư viện và đọc dữ liệu.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# Đọc dữ liệu
df = pd.read_csv('titanic.csv')Bước 2: Tổng quan về dữ liệu (Data Overview)
Bạn cần nhìn lướt qua xem dữ liệu trông như thế nào.
df.head(): Xem 5 dòng đầu tiên.df.shape: Xem kích thước dữ liệu (số dòng, số cột).df.info(): Kiểm tra kiểu dữ liệu (int, float, object) và số lượng giá trị không bị rỗng.
# Xem 5 dòng đầu
print(df.head())
# Kiểm tra tổng quan
print(df.info())Bước 3: Làm sạch dữ liệu (Data Cleaning)
Đây là bước tốn nhiều thời gian nhất. Bạn cần xử lý dữ liệu bị thiếu và trùng lặp.
Kiểm tra Missing Values:
# Đếm số lượng giá trị null trong mỗi cột
print(df.isnull().sum())
Gợi ý xử lý:
Nếu thiếu ít (< 5%): Có thể xóa dòng đó (
dropna).Nếu thiếu nhiều: Điền bằng giá trị trung bình (mean), trung vị (median) hoặc mode (
fillna).
Bước 4: Phân tích đơn biến (Univariate Analysis)
Phân tích từng biến một cách độc lập để hiểu sự phân phối của nó.
Đối với biến số (Numerical Variable – ví dụ: Tuổi, Giá vé): Sử dụng Histogram hoặc Boxplot để xem phân phối và phát hiện Outlier.
# Vẽ biểu đồ phân phối độ tuổi
sns.histplot(df['Age'], kde=True)
plt.title('Phân phối độ tuổi hành khách')
plt.show()
# Vẽ Boxplot để tìm Outlier của giá vé
sns.boxplot(x=df['Fare'])
plt.title('Biểu đồ hộp giá vé')
plt.show()
Đối với biến phân loại (Categorical Variable – ví dụ: Giới tính, Hạng vé): Sử dụng Bar Chart (Biểu đồ cột) hoặc Pie Chart.
Python
sns.countplot(x='Sex', data=df)
plt.title('Số lượng hành khách Nam/Nữ')
plt.show()Bước 5: Phân tích đa biến (Bivariate/Multivariate Analysis)
Tìm mối quan hệ giữa các biến. Ví dụ: Giới tính có ảnh hưởng đến tỷ lệ sống sót không?
Mối quan hệ giữa Biến số & Biến số (Correlation): Sử dụng Heatmap là cách tốt nhất để xem mức độ tương quan.
# Tính ma trận tương quan
corr = df.corr()
# Vẽ Heatmap
sns.heatmap(corr, annot=True, cmap='coolwarm')
plt.title('Biểu đồ nhiệt tương quan')
plt.show()
Mối quan hệ giữa Biến phân loại & Biến mục tiêu: Ví dụ: So sánh tỷ lệ sống sót (Survived) giữa Nam và Nữ.
sns.barplot(x='Sex', y='Survived', data=df)
plt.title('Tỷ lệ sống sót theo giới tính')
plt.show()4. Các câu hỏi cần đặt ra khi làm EDA
Làm EDA không chỉ là chạy code, mà là tư duy. Hãy luôn tự hỏi:
Dữ liệu này có phân phối chuẩn (Normal Distribution) không?
Tại sao cột này lại có nhiều giá trị bị thiếu (NaN)?
Những giá trị ngoại lai (Outliers) này là lỗi nhập liệu hay là hiện tượng thực tế?
Các biến độc lập (Independent variables) có bị tương quan quá mạnh với nhau không? (Hiện tượng đa cộng tuyến).
Kết luận
Exploratory Data Analysis (EDA) là bước đệm vững chắc giúp bạn hiểu rõ “tính cách” của dữ liệu. Một quy trình EDA kỹ lưỡng sẽ giúp mô hình Machine Learning của bạn hoạt động chính xác và hiệu quả hơn rất nhiều.
Đừng vội vàng nhảy vào build model (mô hình). Hãy dành 70% thời gian để làm bạn với dữ liệu thông qua EDA!






