数据预处理是数据分析、机器学习和深度学习等领域中的重要步骤。它包括清洗、转换、归一化、编码等操作,旨在使数据适合于建模和分析。数据预处理的质量直接影响模型的性能和准确性。下面详细介绍数据预处理的常见步骤和技术。
1. 数据清洗:
- 处理缺失值:
- 删除缺失数据: 如果缺失值的数量较少,或者缺失的样本对分析无关紧要,可以直接删除。
- 插值填补: 使用均值、中位数、众数、或插值等方法填补缺失值。
import pandas as pd # 删除包含缺失值的行 df.dropna(inplace=True) # 用均值填补缺失值 df.fillna(df.mean(), inplace=True)
- 预测填补: 使用其他变量预测缺失值,例如使用回归模型填补。
你可以使用回归模型来填补缺失值。以下是使用scikit-learn
中的回归模型来填补缺失值的代码示例。假设我们有一个数据集,其中某一列有缺失值,其他列将用于预测该列的缺失值。
步骤
- 数据准备:我们会将数据分为两部分——缺失值部分和非缺失值部分。
- 训练模型:在非缺失值部分使用回归模型来训练。
- 预测缺失值:使用模型对缺失值部分进行预测。
以下是代码示例:
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.impute import SimpleImputer
# 示例数据集
data = {
'feature1': [1, 2, 3, 4, 5],
'feature2': [2, 4, np.nan, 8, 10],
'target': [5, 10, 15, np.nan, 25]
}
df = pd.DataFrame(data)
# 1. 将有缺失值的部分和没有缺失值的部分分开
# 找到 target 列中没有缺失值的行
df_no_missing = df[df['target'].notna()]
df_missing = df[df['target'].isna()]
# 2. 使用 feature1 和 feature2 作为预测特征,target 作为标签
X_train = df_no_missing[['feature1', 'feature2']]
y_train = df_no_missing['target']
# 填补 feature2 中的缺失值(假设 feature2 中也有缺失值)
imputer = SimpleImputer(strategy='mean')
X_train = imputer.fit_transform(X_train)
# 3. 使用回归模型进行训练
regressor = LinearRegression()
regressor.fit(X_train, y_train)
# 4. 对缺失值部分进行预测
X_missing = df_missing[['feature1', 'feature2']]
X_missing = imputer.transform(X_missing)
df_missing['target'] = regressor.predict(X_missing)
# 5. 填补原始数据中的缺失值
df.loc[df['target'].isna(), 'target'] = df_missing['target']
print(df)
-
处理异常值:
- 检测异常值: 可以使用箱线图、标准差、Z-score 等方法检测异常值。