ai-006Đọc toàn bộ đề miễn phí

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…

AITrung bình35 phút

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ủ đề

pandasdata-cleaningimmutabilitymissing-valuestype-casting

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 df gố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ị NaN bằng giá trị trung vị (median) của các bản ghi không rỗng trong cột age.
  • 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 timestamp sang 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 đến N-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:
    pass

Input

  • 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ểu pd.DataFrame theo đú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:00

Giả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:00

Giả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ế.

3 cấp độ gợi ýMở dần khi bạn thật sự cần hỗ trợ.
Phân tích lời giảiGiải thích hướng tư duy và thuật toán.
Code tham khảoDùng để đối chiếu sau khi tự làm.

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.