Pipeline Tiền xử lý Dữ liệu Bảng Chuẩn mực với pandas
Dữ liệu người dùng thu thập từ ứng dụng thực tế luôn chứa lỗi: trùng lặp mã định danh, thiếu tuổi, sai định dạng ngày tháng. Một pipeline dữ liệu không chuẩn mực làm rò rỉ dữ liệu…
Tiến độ của tôi ở bài này
Điểm được lưu vào tài khoản sau khi chấm bài.
Đang tải điểm của bạn…
Kiến thức và chủ đề
Kiến thức tiên quyết: python-basics.
Nội dung đề bài
Mục tiêu kiến thức
- Nắm vững tính bất biến (immutability) trong pipeline dữ liệu: không làm biến đổi DataFrame đầu vào.
- Chuẩn hóa tên cột tự động: chuyển chữ thường, loại bỏ khoảng trắng thừa, thay khoảng trắng bằng dấu gạch dưới
_. - Xử lý thiếu dữ liệu (missing values) có chiến lược: điền trung vị (median) cho dữ liệu số và nhãn mặc định cho dữ liệu chuỗi.
- Định dạng chuỗi thời gian sang chuẩn UTC và sắp xếp dữ liệu.
Mô tả bài toán
Dữ liệu người dùng thu thập từ ứng dụng thực tế luôn chứa lỗi: trùng lặp mã định danh, thiếu tuổi, sai định dạng ngày tháng. Một pipeline dữ liệu không chuẩn mực làm rò rỉ dữ liệu hoặc thay đổi dữ liệu gốc sẽ phá hủy tính toàn vẹn của mô hình Machine Learning.
Yêu cầu
Viết hàm clean_user_behavior_data(df: pd.DataFrame) -> pd.DataFrame thực hiện đúng thứ tự các bước:
- Tạo bản sao độc lập: Tuyệt đối không sửa đổi
dfgốc. - Chuẩn hóa tên cột: Loại bỏ khoảng trắng đầu/cuối, chuyển toàn bộ về chữ thường, thay khoảng trắng giữa các từ bằng
_(ví dụ:" User ID "→"user_id"). - Xóa dòng trùng lặp: Dựa trên cột
user_id, nếu có trùng lặp thì giữ lại bản ghi xuất hiện sau cùng (keep='last'). - Điền giá trị thiếu (Imputation):
- Cột
age: Ép kiểu về số thực, điền các giá trịNaNbằng giá trị trung vị (median) của các bản ghi không rỗng trong cộtage. - Cột
city: Ép kiểu chuỗi, điền các giá trị thiếu bằng"Unknown". - Định dạng thời gian: Chuyển cột
timestampsang kiểu datetime với múi giờ chuẩn UTC (pd.to_datetime(utc=True)). - Sắp xếp: Sắp xếp bảng theo thứ tự tăng dần của
timestamp, đặt lại chỉ mục index từ0đếnN-1(reset_index(drop=True)). - Trả về DataFrame đã làm sạch.
import pandas as pd
def clean_user_behavior_data(df: pd.DataFrame) -> pd.DataFrame:
passInput
- Hàm
clean_user_behavior_data(df): Các tham số đầu vào chứa dữ liệu Tensor/mảng NumPy hoặc giá trị siêu tham số tương ứng.
Output
- Hàm
clean_user_behavior_data: Trả về kết quả kiểupd.DataFrametheo đúng đặc tả kỹ thuật và kích thước quy định.
Ràng buộc
- Thời gian chạy tối đa: 3000ms.
- Giới hạn bộ nhớ: 512MB.
- Dữ liệu đầu vào hợp lệ theo đúng kiểu dữ liệu và miền giá trị được mô tả.
Ví dụ 1
Input
raw_data = {' User ID ': [101, 102, 101], ' Age ': [20.0, np.nan, 30.0], 'City': ['Hanoi', None, 'Hanoi'], 'Timestamp': ['2026-01-01 10:00:00', '2026-01-02 12:00:00', '2026-01-03 08:00:00']}
raw_df = pd.DataFrame(raw_data)
backup_df = raw_df.copy(deep=True)
cleaned = clean_user_behavior_data(raw_df)Output
user_id age city timestamp
0 102 30.0 Unknown 2026-01-02 12:00:00+00:00
1 101 30.0 Hanoi 2026-01-03 08:00:00+00:00Giải thích
Hàm/lớp được gọi với các tham số mẫu trên và trả về kết quả số học / kích thước tensor tương ứng theo đúng thiết kế.
Ví dụ 2
Input
data = {'user_id': [1, 2, 3, 4], 'age': [10.0, np.nan, 20.0, 90.0], 'city': ['HN', 'SG', 'DN', 'HP'], 'timestamp': ['2026-04-01', '2026-01-01', '2026-02-01', '2026-03-01']}
df = pd.DataFrame(data)
cleaned = clean_user_behavior_data(df)Output
user_id age city timestamp
0 2 20.0 SG 2026-01-01 00:00:00+00:00
1 3 20.0 DN 2026-02-01 00:00:00+00:00
2 4 90.0 HP 2026-03-01 00:00:00+00:00
3 1 10.0 HN 2026-04-01 00:00:00+00:00Giải thích
Hàm/lớp được gọi với các tham số mẫu trên và trả về kết quả số học / kích thước tensor tương ứng theo đúng thiết kế.
Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.
Góp ý & báo lỗi bài tập
Đề bài chưa rõ, test có vấn đề hay bạn có ý tưởng giúp bài tốt hơn? Gửi cho đội ngũ AI Empire nhé — mỗi góp ý đều được đọc.
