数据预处理方法合集(数据清洗、数据变换与数据编码)
数据预处理是数据科学和机器学习项目成功的基础步骤。通过适当的数据预处理,可以确保数据的质量、提升模型的性能,并为后续的建模和分析打下坚实的基础。忽视数据预处理可能导致模型训练失败或性能不佳,甚至得出错误的结论。因此,数据预处理在数据驱动的项目中是不可或缺的步骤,接下来我们将详细地介绍具体的方法,文末可获得全文PDF!
目录
对数变换(Logarithmic Transformation)
分位数变换(Quantile Transformation)
数据预处理的必要性
1. 显著提高模型的准确性
通过清洗数据,去除噪声、异常值和处理缺失数据,模型可以更准确地捕捉数据中的真实模式,避免被异常或不完整的数据误导。此外,通过特征缩放(如标准化和归一化),可以使特征之间在模型中具有相同的重要性,特别是在使用基于距离的算法时,特征缩放尤为关键。
2. 提高模型的训练速度和效率
通过特征选择和特征提取,减少数据集的维度,可以大幅降低模型的复杂性和计算时间。这不仅节省了计算资源,还能使模型在面对大规模数据集时表现更好。
3. 改善模型的泛化能力
通过消除数据中的偏差和偏态,模型可以更好地适应新数据,从而提高预测的稳定性。特征工程中的特征生成和选择可以挖掘出数据中隐含的重要信息,使模型在不同的场景中具有更强的泛化能力。
4.确保数据的完整性和一致性
处理缺失值、重复数据和不一致的数据格式,可以防止模型因数据质量问题而产生偏差或错误。对于需要满足特定假设的模型(如正态分布假设),数据预处理可以调整数据使其符合这些假设,从而提高模型的可靠性。
5.增强模型的可解释性和鲁棒性
通过特征选择去除无关或冗余特征,模型的结果更加简洁明了,决策过程更易于理解。同时,处理异常值和噪声数据,可以使模型在面对极端情况时更加稳定,不容易受到意外的干扰。
数据清洗
缺失值处理
1) 删除含有缺失值的行或列
删除含有缺失值的数据行或列,适用于当缺失值比例较低或缺失值随机分布时。这样可以避免缺失值对分析或建模的影响。
import pandas as pd
# 创建一个示例DataFrame
data = {'A': [1, 2, None, 4],
'B': [5, None, None, 8],
'C': [9, 10, 11, 12]}
df = pd.DataFrame(data)
# 删除含有缺失值的行
df_cleaned_rows = df.dropna()
print("删除含有缺失值的行:")
print(df_cleaned_rows)
# 删除含有缺失值的列
df_cleaned_cols = df.dropna(axis=1)
print("\n删除含有缺失值的列:")
print(df_cleaned_cols)
2) 用均值/中位数/众数填充缺失值
用样本的均值、中位数或众数填充缺失值,适用于连续变量或分类变量,能够减少数据的偏差。 当缺失值比例适中,且数据接近正态分布时,使用均值或中位数填充可以保持数据分布的特性。
# 用均值填充缺失值
df_filled_mean = df.fillna(df.mean())
print("用均值填充缺失值:")
print(df_filled_mean)
# 用中位数填充缺失值
df_filled_median = df.fillna(df.median())
print("\n用中位数填充缺失值:")
print(df_filled_median)
# 用众数填充缺失值
df_filled_mode = df.fillna(df.mode().iloc[0])
print("\n用众数填充缺失值:")
print(df_filled_mode)
3) 插值法(线性插值、样条插值等)
使用相邻数据点的趋势对缺失值进行插值,适用于时间序列数据或连续数据,能够较好地保持数据的趋势和变化。
# 线性插值填充缺失值
df_interpolated_linear = df.interpolate(method='linear')
print("线性插值填充缺失值:")
print(df_interpolated_linear)
# 样条插值填充缺失值
df_interpolated_spline = df.interpolate(method='spline', order=2)
print("\n样条插值填充缺失值:")
print(df_interpolated_spline)
4) 使用KNN、MICE等算法填补缺失值
使用机器学习算法或统计方法根据其他特征填补缺失值,能够充分利用数据之间的相关性。适用于复杂数据集、特征间存在较强相关性的场景。
-
• KNN:使用K个最近邻的数据的加权平均值或众数填充。
import pandas as pdy
from sklearn.impute import KNNImputer
# 创建一个示例DataFrame
data = {'A': [1, 2, None, 4],
'B': [5, None, None, 8],
'C': [9, 10, 11, 12]}
df = pd.DataFrame(data)
# 使用KNN算法填补缺失值
imputer = KNNImputer(n_neighbors=2) # 设置邻居数为2
df_filled_knn = pd.DataFrame(imputer.fit_transform(df), columns=df.columns)
print("使用KNN算法填补缺失值后的数据:")
print(df_filled_knn)
-
• MICE(多重插补):基于多重插补方法,利用其他特征估计缺失值。
import pandas as pd
from sklearn.experimental import enable_iterative_imputer
from sklearn.impute import IterativeImputer
# 创建一个示例DataFrame
data = {'A': [1, 2, None, 4],
'B': [5, None, None, 8],
'C': [9, 10, 11, 12]}
df = pd.DataFrame(data)
# 使用MICE算法填补缺失值
imputer = IterativeImputer(max_iter=10, random_state=0) # 迭代次数设置为10
df_filled_mice = pd.DataFrame(imputer.fit_transform(df), columns=df.columns)
print("使用MICE算法填补缺失值后的数据:")
print(df_filled_mice)
异常值处理
1) 使用3σ法则识别和处理异常值
正态分布下的异常值检测:数据在均值
标签:数据编码,编码,df,data,数模,print,import,数据 From: https://blog.csdn.net/EasyMCM/article/details/141534455