Hướng Dẫn Tối Ưu Hóa Dữ Liệu: Làm Sạch và Chuẩn Bị
Khi bắt đầu làm việc với tư cách là một Nhà phân tích Dữ liệu, bước đầu tiên không phải là xây dựng bảng điều khiển hay tạo biểu đồ. Bước đầu tiên luôn là làm sạch và chuẩn bị tập dữ liệu.
👉 Nếu tập dữ liệu không sạch, phân tích cuối cùng sẽ sai hoặc gây hiểu lầm.
Trong bài viết này, chúng ta sẽ đi qua mọi nhiệm vụ quan trọng mà bạn nên thực hiện với một tập dữ liệu mới (bất kể đó là dữ liệu bán hàng, dữ liệu nhân sự, dữ liệu COVID, dữ liệu ngân hàng hay bất kỳ loại dữ liệu nào khác).
Chúng ta sẽ sử dụng Python (pandas) cho các ví dụ, nhưng các bước này áp dụng cho mọi tập dữ liệu.
Mục Lục
- Nhập Thư Viện và Tải Dữ Liệu
- Kiểm Tra Kích Thước Tập Dữ Liệu
- Lấy Thông Tin Tập Dữ Liệu
- Kiểm Tra Một Số Dòng Đầu và Cuối
- Kiểm Tra Tên Cột
- Xử Lý Kiểu Dữ Liệu
- Kiểm Tra Giá Trị Thiếu
- Kiểm Tra Bản Sao
- Khám Phá Giá Trị Độc Nhất
- Thống Kê Mô Tả
- Xử Lý Giá Trị Ngoại Lệ
- Chuẩn Hóa Dữ Liệu Văn Bản
- Đổi Tên hoặc Xóa Cột
- Tạo Tính Năng Mới
- Kiểm Tra Tính Nhất Quán Dữ Liệu
- Sắp Xếp và Đặt Lại Chỉ Số
- Lưu Cuối
- Danh Sách Kiểm Tra Cuối
- Kết Luận
Nhập Thư Viện và Tải Dữ Liệu
python
import pandas as pd
# Ví dụ cho tập tin CSV
df = pd.read_csv("data.csv")
# Ví dụ cho tập tin Excel
# df = pd.read_excel("data.xlsx")
# Ví dụ cho cơ sở dữ liệu SQL
# import sqlite3
# conn = sqlite3.connect("data.db")
# df = pd.read_sql("SELECT * FROM table_name", conn)
print(df.head())
Luôn bắt đầu bằng cách tải dữ liệu và xem một vài dòng đầu tiên.
Kiểm Tra Kích Thước Tập Dữ Liệu
python
print(df.shape)
Kết quả ví dụ:
(10000, 15)
- 10,000 dòng (mục dữ liệu)
- 15 cột (biến số)
Điều này giúp bạn biết kích thước của tập dữ liệu.
Lấy Thông Tin Tập Dữ Liệu
python
print(df.info())
Điều này cho thấy:
- Tên cột
- Kiểu dữ liệu (int, float, object, datetime)
- Số lượng không null
Ví dụ:
order_id 10000 non-null int64
order_date 9990 non-null object
sales_amount 9800 non-null float64
customer_name 10000 non-null object
Kiểm Tra Một Số Dòng Đầu và Cuối
python
print(df.head(10))
print(df.tail(10))
Giúp bạn:
- Xác nhận thứ tự cột
- Kiểm tra sắp xếp (thời gian, id, v.v.)
- Phát hiện giá trị lạ
Kiểm Tra Tên Cột
python
print(df.columns)
Ví dụ:
['Order ID', 'Order Date', 'Sales Amount', 'Customer Name']
Đôi khi tên có khoảng trắng, ký hiệu hoặc chữ hoa. Làm sạch chúng:
python
df.columns = df.columns.str.strip().str.lower().str.replace(" ", "_")
Giờ tên cột là:
['order_id', 'order_date', 'sales_amount', 'customer_name']
Xử Lý Kiểu Dữ Liệu
Luôn kiểm tra xem mỗi cột có kiểu dữ liệu đúng hay không:
python
print(df.dtypes)
Ví dụ về các sửa lỗi:
python
# Chuyển đổi cột ngày
df['order_date'] = pd.to_datetime(df['order_date'], errors='coerce')
# Chuyển đổi các cột số
df['sales_amount'] = pd.to_numeric(df['sales_amount'], errors='coerce')
# Chuyển đổi các cột phân loại
df['customer_name'] = df['customer_name'].astype('category')
Kiểm Tra Giá Trị Thiếu
python
print(df.isnull().sum())
Kết quả ví dụ:
order_date 10
sales_amount 200
customer_name 0
Cách xử lý các giá trị thiếu:
- Xóa các hàng/cột
python
df.dropna(subset=['order_date'], inplace=True)
- Điền bằng giá trị trung bình/trung vị/mode
python
df['sales_amount'].fillna(df['sales_amount'].median(), inplace=True)
- Điền tiến lên/lùi lại (dữ liệu chuỗi thời gian)
python
df['sales_amount'].fillna(method='ffill', inplace=True)
Kiểm Tra Bản Sao
python
print(df.duplicated().sum())
df = df.drop_duplicates()
Tránh việc tính toán gấp đôi.
Khám Phá Giá Trị Độc Nhất
python
print(df['customer_name'].unique())
print(df['customer_name'].nunique())
Giúp tìm lỗi chính tả như "John Smith" so với "Jon Smith".
Thống Kê Mô Tả
python
print(df.describe(include='all'))
Ví dụ:
sales_amount min: -50 max: 100000 mean: 2500
Giúp phát hiện:
- Giá trị ngoại lệ
- Giá trị âm (không thể có cho doanh thu)
- Giá trị quá lớn
Xử Lý Giá Trị Ngoại Lệ
Ví dụ: Doanh thu âm không thể tồn tại.
python
df = df[df['sales_amount'] >= 0]
Hoặc giới hạn các giá trị cực trị:
python
q1 = df['sales_amount'].quantile(0.25)
q3 = df['sales_amount'].quantile(0.75)
iqr = q3 - q1
lower = q1 - 1.5 * iqr
upper = q3 + 1.5 * iqr
df = df[(df['sales_amount'] >= lower) & (df['sales_amount'] <= upper)]
Chuẩn Hóa Dữ Liệu Văn Bản
Ví dụ: tên khách hàng, tên sản phẩm, thành phố
python
df['customer_name'] = df['customer_name'].str.strip().str.title()
Loại bỏ khoảng trắng thừa và chuẩn hóa chữ.
Đổi Tên hoặc Xóa Cột
python
df.rename(columns={'sales_amount': 'revenue'}, inplace=True)
df.drop(columns=['unnecessary_column'], inplace=True)
Tạo Tính Năng Mới
Ví dụ:
- Biên lợi nhuận
- Năm, Tháng từ ngày
- Nhóm tuổi
python
df['year'] = df['order_date'].dt.year
df['month'] = df['order_date'].dt.month
Kiểm Tra Tính Nhất Quán Dữ Liệu
- Ngày tháng phải theo đúng thứ tự
- ID phải là duy nhất
- Các loại phải hợp lý
python
print(df['year'].unique())
print(df['order_id'].nunique(), df.shape[0])
Sắp Xếp và Đặt Lại Chỉ Số
python
df = df.sort_values(by=['order_date'])
df = df.reset_index(drop=True)
Lưu Cuối
python
df.to_csv("clean_data.csv", index=False)
Giờ tập dữ liệu đã sẵn sàng cho phân tích hoặc bảng điều khiển (Power BI, Tableau, v.v.).
Danh Sách Kiểm Tra Cuối cho Mọi Tập Dữ Liệu
✅ Nhập tập dữ liệu
✅ Kiểm tra kích thước, thông tin, đầu/cuối
✅ Làm sạch tên cột
✅ Sửa kiểu dữ liệu
✅ Xử lý giá trị thiếu
✅ Xóa bản sao
✅ Kiểm tra giá trị độc nhất
✅ Thống kê mô tả
✅ Xử lý ngoại lệ
✅ Chuẩn hóa văn bản
✅ Xóa/đổi tên cột
✅ Tạo tính năng mới
✅ Kiểm tra tính nhất quán
✅ Sắp xếp và đặt lại chỉ số
✅ Lưu tập dữ liệu sạch
Kết Luận
Bất kể bạn đang làm việc với tập dữ liệu nào (Bán hàng, Nhân sự, Tài chính, COVID, Marketing, Ngân hàng, Thương mại điện tử), các bước này sẽ luôn giúp bạn làm cho tập dữ liệu sạch và sẵn sàng cho phân tích.
👉 Dữ liệu sạch = Thông tin tốt hơn + Bảng điều khiển chính xác + Khách hàng hài lòng.