Nền tảng của mọi dự án khoa học dữ liệu thành công là dữ liệu sạch và nhất quán. Tuy nhiên trong quá trình phân tích nhanh chóng, ngay cả những người dùng Python dày dặn cũng đôi khi vấp phải những lầm lỗi tiền xử lý dữ liệu có thể phòng ngừa được. Cho dù bạn đang định hình dữ liệu cho một mô hình học máy hay chuẩn bị nó cho trực quan hóa, việc biết những sai lầm nào cần theo dõi có thể tiết kiệm cho bạn hàng giờ bực bội và dẫn tới kết quả mạnh mẽ hơn rất nhiều.
Hãy phân tích năm sai lầm làm sạch dữ liệu phổ biến nhất (và đôi khi nghiêm trọng) bằng Python, kèm theo mẹo thực tế và ví dụ minh họa để bạn có thể giữ quy trình làm việc của mình vững vàng và hiệu quả.
Một trong những vấn đề đầu tiên bạn gặp phải trong bất kỳ bộ dữ liệu thực tế nào là dữ liệu bị thiếu. Ở Python, đặc biệt với các công cụ như pandas, việc thay thế hoặc loại bỏ NaN rất dễ dàng: df.dropna() hoặc df.fillna(0) làm điều này chỉ trong một dòng. Nhưng dễ dàng không đồng nghĩa với đúng.
Tự động loại bỏ các hàng có giá trị thiếu có thể làm giảm đáng kể tập dữ liệu của bạn hoặc—trong các trường hợp thiếu hụt có tương quan—gây thiên vị. Điền giá trị bằng giá trị trung bình hoặc 0 có thể làm méo phân phối, đặc biệt ở các cột không phải số hoặc những cột có ngoại lệ.
Xem đoạn mã sau:
# Too hasty with missing value treatment
import pandas as pd
df = pd.read_csv('survey.csv')
df = df.dropna() # Danger: goodbye valuable data!
Nếu 30% số hàng thiếu đúng một trường tùy chọn—ví dụ tuổi—bạn sẽ mất 30% dữ liệu. Nếu các giá trị tuổi thiếu tập trung chủ yếu ở một nhóm nhân khẩu học cụ thể, kết quả là một tập dữ liệu không còn đại diện chính xác cho toàn bộ dân số.
df.isnull().sum() hoặc df.info() để xem các mẫu thiếu hụt.sklearn.impute.SimpleImputer để điền có căn cứ, hoặc logic dựa trên miền.
Dữ liệu được thu thập từ nhiều nguồn hiếm khi vừa khít với một định dạng duy nhất. Ngày tháng, danh mục và mã hóa chuỗi dễ mắc các lỗi tinh vi, khó theo dõi.
dtype: object), vô hiệu hóa các phép toán số.Classic Python issue:
# Date times imported as strings, causing issues
import pandas as pd
df = pd.read_csv('sales.csv')
df['created_at'].min() # Only finds the minimum string, not chronological min
df.dtypes nhanh chóng hiển thị các cột nên là số nhưng không phải.pd.to_datetime(), pd.to_numeric(), và chuyển đổi danh mục ngay khi bạn nhập dữ liệu..str.lower().str.strip() cho các cột danh mục; thay thế từ đồng nghĩa hoặc lỗi chính tả bằng một giá trị nhất quán.encoding (encoding='utf-8' hoặc encoding='cp1252').df['created_at'] = pd.to_datetime(df['created_at'], errors='coerce')
df = df.dropna(subset=['created_at']) # Remove rows where dates couldn't parse
Một chút chú ý ở đây có thể ngăn ngừa hàng giờ gỡ rối các phân tích kỳ lạ sau này.
Nhiều thuật toán mạnh mẽ yêu cầu đầu vào số, không phải nhãn chuỗi hoặc danh mục trực tiếp. Mã hóa các cột danh mục là một bước quan trọng, nhưng vội vàng hoặc lựa chọn phương pháp sai có thể làm suy giảm hiệu suất mô hình và gây ra lỗi.
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
# Label encoding ignores category meaning
le = LabelEncoder()
df['city_code'] = le.fit_transform(df['city']) # Problem: Model interprets numbers mathematically
pd.get_dummies(df, drop_first=True, dummy_na=False), hoặc với các đặc trưng có độ đặc sắc cao, cân nhắc hashing hoặc mã hóa mục tiêu.fit/transform của sklearn) để việc triển khai mô hình nhận được các ánh xạ giống nhau—một bẫy cổ điển khi xuất hiện các danh mục mới chưa thấy trong dữ liệu đầu vào thực tế.city_counts = df['city'].value_counts()
# Only encode cities appearing at least 10 times
common_cities = city_counts[city_counts > 10].index
df['city'] = df['city'].apply(lambda x: x if x in common_cities else 'Other')
df = pd.get_dummies(df, columns=['city'], drop_first=True)
Điều này giữ kích thước đặc trưng ở mức hợp lý và mô hình trở nên vững chắc hơn.
Làm sạch dữ liệu trong Python đòi hỏi tôn trọng cả chi tiết tinh vi lẫn tốc độ. Bằng cách tránh làm sạch một cách cơ học hoặc không căn cứ vào ngữ cảnh, bạn nâng cao công việc khoa học dữ liệu và phân tích lên mức cao hơn nhiều so với mức trung bình. Xem xét các giá trị thiếu một cách có ý đồ, đưa sự nhất quán vào các định dạng, đối xử với ngoại lệ như tín hiệu chứ không phải chỉ là nhiễu, rà soát các bản ghi trùng lặp, và suy nghĩ chiến lược về mã hóa danh mục.
Với những bài học này và con mắt sắc bén đối với dữ liệu của bạn, bạn sẽ dành ít thời gian cho việc quay lui, giảm thiểu những lỗi xấu hổ khi vận hành, và xây dựng danh tiếng về việc thiết kế các pipeline dữ liệu mà các nhà phân tích tin tưởng. Và trong lĩnh vực khoa học dữ liệu ngày càng phát triển, trở thành người có dữ liệu để thực sự sẵn sàng cho những nhận định có giá trị là một siêu năng lực thực sự.