数据挖掘实践:使用Python进行数据预处理与特征工程
1. 数据预处理(Data Preprocessing)的核心价值
在数据挖掘(Data Mining)项目中,80%的时间都花费在数据准备阶段(IBM Research)。数据预处理作为机器学习(Machine Learning)的基石,直接决定模型的最终性能。我们将通过Python生态中的Pandas、NumPy等工具,系统解决数据质量问题。
1.1 数据清洗(Data Cleaning)关键技术
原始数据通常包含缺失值(Missing Values)、异常值(Outliers)和重复记录。以下示例演示如何处理泰坦尼克数据集:
import pandas as pd
from sklearn.impute import SimpleImputer
# 加载数据集
df = pd.read_csv('titanic.csv')
# (1) 处理缺失值
age_imputer = SimpleImputer(strategy='median')
df['Age'] = age_imputer.fit_transform(df[['Age']])
# (2) 处理异常值
Q1 = df['Fare'].quantile(0.25)
Q3 = df['Fare'].quantile(0.75)
df = df[(df['Fare'] > (Q1 - 1.5*(Q3-Q1))) & (df['Fare'] < (Q3 + 1.5*(Q3-Q1)))]
# (3) 删除重复记录
df = df.drop_duplicates()
1.2 数据标准化(Data Normalization)方法对比
不同算法对数据尺度敏感度差异显著:
| 方法 | 适用场景 | 公式 |
|---|---|---|
| Z-Score | 高斯分布数据 | (x-μ)/σ |
| Min-Max | 神经网络输入 | (x-min)/(max-min) |
2. 特征工程(Feature Engineering)的创造性实践
优秀的特征工程能使模型性能提升30%以上(Kaggle调查数据)。我们重点探讨特征构造(Feature Creation)和特征选择(Feature Selection)方法。
2.1 时序特征构造技巧
针对时间序列数据,可以提取多维特征:
from datetime import datetime
def extract_time_features(df):
# 日期解析
df['transaction_date'] = pd.to_datetime(df['timestamp'])
# (a) 周期特征
df['day_of_week'] = df['transaction_date'].dt.dayofweek
df['is_weekend'] = df['day_of_week'].isin([5,6]).astype(int)
# (b) 滞后特征
df['prev_amount'] = df['amount'].shift(1)
return df
2.2 基于模型的特征选择
使用递归特征消除(RFE, Recursive Feature Elimination)优化特征子集:
from sklearn.feature_selection import RFECV
from sklearn.ensemble import RandomForestClassifier
# 初始化选择器
selector = RFECV(
estimator=RandomForestClassifier(),
step=1,
cv=5,
scoring='accuracy'
)
# 执行特征选择
selected_features = selector.fit_transform(X_train, y_train)
3. 实战案例:房价预测模型优化
以Kaggle房价数据集为例,演示完整处理流程:
3.1 数据增强策略
通过领域知识构造组合特征:
df['living_area_ratio'] = df['GrLivArea'] / df['TotalBsmtSF']
df['year_renovated'] = np.where(df['YearRemodAdd']>1950, 1, 0)
3.2 非线性特征转换
使用Box-Cox变换处理右偏分布:
from scipy.stats import boxcox
transformed, _ = boxcox(df['SalePrice'])
df['SalePrice_boxcox'] = transformed
4. 技术演进与最佳实践
自动化特征工程工具(如FeatureTools)正在改变工作流程,但领域知识仍不可或缺。建议建立特征版本控制系统,记录每个特征的生成逻辑和演变过程。
Python数据挖掘, 特征工程实践, 数据预处理技术, Scikit-learn应用, Pandas数据分析