赞
踩
本文主要是个人的学习笔记总结,数据预处理的基本思路和方法,包括一些方法的使用示例和参数解释,具体的数据预处理案例case详见其他文章。如有错误之处还请指正!
数据在进行建模和分析前,对其进行数据处理是必不可少的, 这样做能帮助我们从根本上保证数据质量,提高数据的准确性和可靠性。主要包括数据清洗、数据转换、数据集成、数据降维等过程。
从五个维度来对数据质量进行评定
维度 | 说明 |
---|---|
有效性Validity | 数据的有效性源于统计学概念,即符合数据收集时所制定的规则及约束条件的数据。 |
精确度 Accuracy | 精确度是衡量数据质量的另一个重要条件。 一般情况下,通过数据清理很难改善数据的准确度,这就对数据源质量提出了较高的要求。 |
完整度 Completeness | 如果在采集数据的过程中造成了数据丢失,也就影响了其完整程度。 不完整的数据,势必会对分析结论造成影响,这需要进一步采取措施来改善这种情况。 |
一致性 Consistency | 原始数据中,数据可能会存在不一致性。 例如:客户在两个不同的系统中提供了两个不一样的家庭地址,而正确的地址只有一个。 那么,就需要我们来判断并消除这种不一致性。 |
均匀度 Uniformity | 数据的均匀度可能来源于度量单位的不一致,这就需要我们通过换算来解决,使得最终数据统一均匀。 |
数据处理的常见四个步骤:
序号 | 步骤 | 说明 |
---|---|---|
1 | 数据清理 Data Cleansing | 数据清理大致包括对空缺键值进行填充操作, 对噪声数据进行相应的平滑处理,对孤立点和异常点进行删除处理等。 |
2 | 数据集成 Data Integration | 将多个数据库或者数据文件里面包含的数据进行集成处理。 |
3 | 数据转换 Data Transformation | 将数据进行聚集或者规范化处理,从一种形式转换成另外一种我们需要的形式。 |
4 | 数据规约 Data Reduction | 对庞大的数据集进行压缩处理,且尽量保证最终预测结果的一致性。 |
下面将详细介绍常用的数据处理方法:
# 生成包含缺数据的示例
import numpy as np
import pandas as pd
null_data = {'A': [10, np.nan, 25, np.nan, 42, np.nan],
'B': [12, 15, np.nan, 14, 17, np.nan],
'C': [10, 13, 27, 13, 19, 40]}
df = pd.DataFrame(null_data)
空值也有不同类型
数值型空值 :NaN (not a number)
空字符串 :None
定位缺失数据:
# 删除缺失值 import pandas as pd # 创建一个示例数据框 data = {'A': [1, 2, None, 4], 'B': [5, None, 7, 8], 'C': [None, 10, None, 12]} df = pd.DataFrame(data) # 删除包含缺失值的行 cleaned_df1 = df.dropna() # 默认删除包含缺失值的行 cleaned_df2 = df.dropna(axis=1) # 删除包含缺失值的列 cleaned_df3 = df.dropna(how='all') # 当所有值为缺失值时删除行 cleaned_df4 = df.dropna(thresh=2) # 至少要有 2 个非缺失值才保留行 cleaned_df5 = df.dropna(subset=['B', 'C']) # 只有在 'B' 和 'C' 列中同时存在空值的情况下,对应的行才会被删除 print(cleaned_df1) print(cleaned_df2) print(cleaned_df3) print(cleaned_df4) print(cleaned_df5)
固定值填充:人为指定,使用行/列均值、中位数等
# Pandas 提供的 replace t填充固定值
print(df.replace(np.nan,0)) # 缺失值填充为0
# 专门用于填充缺失值的函数 fillna()
print(df.fillna(0))
# 使用各列的平均值填充
print(df.fillna(df.mean()))
# 使用格列中位数填充
print(df.fillna(df.median()))
临近值填充:使用缺失值相临近的数值填充
# 使用后一个临近的数据向前填充
print(df.fillna(method='bfill'))
# 使用前一个临近的数据向后填充
print(df.fillna(method='ffill'))
数字填充:使用函数插值填充
数据缺失但能看出数据的变化趋势,更好的缺失值填充方法时是使用数据方法进行插值Pandas中的interpolate()
可以快速应用一些常用的插值函数
sample_data = {'A': [1, np.nan, 3, np.nan, 5, 6],
'B': [1, 4, np.nan, np.nan, 25, 36]}
df = pd.DataFrame(sample_data)
# 线性插值
print(df.interpolate(method='linear'))
# 2次函数插值
print(df.interpolate(method='polynomial', order=2))
# 示例数据
df = pd.DataFrame({'name': ['amy', 'david'] * 3 +
['jam'], 'class': [2, 2, 2, 4, 3, 2, 4]})
duplicated()
判断是否存在重复值
print(df.duplicated()) # 判断重复值 存在则返回True
print(df.duplicated().sum()) # 统计判断重复值
dropduplicates()
去除重复值
df.drop_duplicatep() #去除全部重复值
df.drop_duplicates(['name']) #去除name列的重复值
df.drop_duplicates(keep='last') # 默认保留重复项前面的值,而去除后面的值,‘last’则为保留最后一个
当涉及 Pandas 应用数学与统计学领域中的异常值检测时,有一些比较深入的方法,包括概率方法,矩阵分解,以及神经网络等。下面是一些具体示例展示:
概率方法 - 一元正态分布检测异常值:
import pandas as pd import numpy as np # 创建一个示例数据集 data = pd.DataFrame({'value': [1, 2, 3, 4, 5, 1000]}) # 计算均值和标准差 mean = data['value'].mean() std = data['value'].std() # 设置异常值阈值,例如均值加减3倍标准差 threshold = 3 * std # 使用一元正态分布方法检测异常值 data['is_outlier'] = np.abs(data['value'] - mean) > threshold print(data)
概率方法 - 多元高斯方法检测异常值:
from scipy import stats # 创建一个示例数据集 data = pd.DataFrame({ 'feature1': [1, 2, 3, 4, 5], 'feature2': [2, 4, 6, 8, 10] }) # 计算多元高斯分布概率密度 multivariate_dist = stats.multivariate_normal(mean=data.mean(), cov=data.cov()) # 设置异常值阈值 threshold = 0.01 # 例如设置一个较小的阈值 # 使用多元高斯方法检测异常值 data['is_outlier'] = multivariate_dist.pdf(data) < threshold print(data)
矩阵分解方法检测异常值:
from sklearn.decomposition import PCA
# 创建一个示例数据集
data = pd.DataFrame({
'feature1': [1, 2, 3, 4, 5],
'feature2': [2, 4, 6, 8, 100]
})
# 使用主成分分析(PCA)进行矩阵分解
pca = PCA(n_components=2)
pca.fit(data)
# 计算重构误差
reconstruction_error = np.sum((data - pca.i
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。