Giới thiệu
Bạn không cần trở thành chuyên gia Python để học ML, nhưng bạn bắt buộc phải đủ thoải mái với dữ liệu dạng bảng. Bài này là bản “crash course” tập trung đúng những gì cần dùng nhiều nhất trong ML: đọc dữ liệu, lọc, biến đổi, kiểm tra thiếu dữ liệu và tạo feature đơn giản.
Mục tiêu bài học
- Đọc và khám phá dữ liệu bằng Pandas
- Thực hiện các thao tác phổ biến nhất trước khi train model
- Biết lúc nào nên dùng notebook, lúc nào nên tách code ra file riêng
1. Hai thư viện bạn sẽ dùng liên tục
NumPy
Dùng cho mảng số học và phép toán vector hóa.
Pandas
Dùng cho dữ liệu dạng bảng (DataFrame).
Trong phần lớn dự án ML cơ bản, bạn sẽ dành nhiều thời gian ở Pandas hơn là ở mô hình.
2. Tạo một DataFrame đầu tiên
import pandas as pd
df = pd.DataFrame({
'dien_tich': [45, 60, 80, 120],
'so_phong': [1, 2, 3, 4],
'gia': [1.2, 1.8, 2.6, 4.1]
})
print(df)
Kết quả là một bảng gồm hàng và cột. Trong ML:
- mỗi hàng thường là một quan sát
- mỗi cột là một feature hoặc target
3. 5 thao tác Pandas cần nhớ ngay
Xem nhanh dữ liệu
df.head()
df.shape
df.columns
df.info()
df.describe()
Chọn cột
df['dien_tich']
df[['dien_tich', 'so_phong']]
Lọc dòng
df[df['so_phong'] >= 2]
Tạo cột mới
df['gia_m2'] = df['gia'] / df['dien_tich']
Sắp xếp
df.sort_values('gia', ascending=False)
4. Đọc dữ liệu từ CSV
df = pd.read_csv('data/raw/houses.csv')
Việc đầu tiên sau khi đọc dữ liệu luôn nên là:
print(df.head())
print(df.shape)
print(df.isnull().sum())
Mục tiêu là trả lời ba câu hỏi:
- Dữ liệu có bao nhiêu dòng, bao nhiêu cột?
- Cột nào đang thiếu dữ liệu?
- Cột nào là số, cột nào là text?
5. Missing values là gì?
Missing values là ô dữ liệu bị thiếu. Ví dụ khách hàng không khai tuổi, hoặc hệ thống không ghi lại một trường nào đó.
Kiểm tra:
df.isnull().sum()
Cách xử lý cơ bản:
- bỏ dòng/cột nếu thiếu quá nhiều
- điền giá trị trung bình, trung vị hoặc mode
- thêm cờ
is_missing
Ví dụ:
df['tuoi'] = df['tuoi'].fillna(df['tuoi'].median())
6. Categorical variables
Nhiều cột không phải số, ví dụ:
- thành phố
- loại gói dịch vụ
- giới tính
ML model thường không làm việc trực tiếp với text thuần, nên cần biến đổi. Cách cơ bản nhất là one-hot encoding.
pd.get_dummies(df, columns=['thanh_pho'], drop_first=True)
7. Groupby và aggregation
Đây là kỹ năng rất mạnh để hiểu dữ liệu và tạo feature.
df.groupby('thanh_pho')['gia'].mean()
df.groupby('loai_khach')['doanh_thu'].agg(['mean', 'count'])
Ví dụ ứng dụng:
- trung bình doanh thu theo nhóm khách hàng
- số lần mua theo thành phố
- tỷ lệ churn theo gói dịch vụ
8. Merge dữ liệu
Trong thực tế, dữ liệu hiếm khi nằm trong một bảng duy nhất.
customers = pd.read_csv('customers.csv')
orders = pd.read_csv('orders.csv')
df = customers.merge(orders, on='customer_id', how='left')
Nguyên tắc quan trọng: sau khi merge, luôn kiểm tra số dòng và các giá trị null mới phát sinh.
9. Feature engineering cơ bản
Feature engineering là tạo thêm cột giúp mô hình học tốt hơn.
Ví dụ:
gia_m2 = gia / dien_tichthoi_gian_su_dung = ngay_hien_tai - ngay_dang_kytong_chi_tieu_30_ngay
Feature tốt thường đến từ hiểu bài toán hơn là từ mẹo mô hình.
10. Notebook hay script?
Dùng notebook khi:
- khám phá dữ liệu
- vẽ biểu đồ
- thử nhanh ý tưởng
Dùng script / module khi:
- code được lặp lại nhiều lần
- cần tái sử dụng
- muốn pipeline sạch và dễ maintain
Nguyên tắc thực tế:
- notebook để khám phá
src/để sản xuất code
Ví dụ ngắn: EDA đầu tiên
import pandas as pd
df = pd.read_csv('data/raw/customers.csv')
print(df.head())
print(df.shape)
print(df.isnull().sum())
print(df['plan'].value_counts())
df['monthly_spend'] = df['total_spend'] / df['months_active']
print(df[['monthly_spend', 'churn']].head())
Bài tập thực hành
- Đọc một file CSV bất kỳ và chạy
head,info,describe. - Tạo ít nhất 2 feature mới từ dữ liệu gốc.
- Viết 3 câu mô tả điều bạn học được từ EDA.
Sai lầm thường gặp
- Chỉnh dữ liệu mà không hiểu cột đó có ý nghĩa gì.
- Tạo feature dùng thông tin từ tương lai.
- Merge xong nhưng không kiểm tra lại số dòng.
Tiêu chí hoàn thành
- Đọc được CSV vào DataFrame
- Thực hiện được filter, groupby, merge cơ bản
- Tạo được feature mới có ý nghĩa cho bài toán