Python数据挖掘005-数据清洗

数据预处理包括有数据清洗,数据集成,数据转换,数据规约等过程。

数据预处理的目的是提高数据的质量,同时让数据更好的适应特定的挖掘技术或工具。

一般的数据挖掘过程中,数据预处理工作量占到了整个过程的60-70%。

数据清洗主要是删除原始数据集中的无关数据,重复数据,平滑噪声数据,还要筛选掉与挖掘主体无关的数据,处理缺失值,异常值等。

1. 缺失值处理

三种方法:删除含有缺失值的样本或属性,数据插补,不处理。

删除含有缺失值的样本或属性应该要慎用,特别是样本量很少,或属性很少的情况下,删除可能会丢掉一些重要信息。

Python数据挖掘005-数据清洗_第1张图片
image.png

比较常用的是均值/中位数/众数插补,固定值插补,最近邻插补法。用pandas中的fillna就可以处理。

还有比如拉格朗日插值法:

from scipy.interpolate import lagrange #导入拉格朗日插值函数
data=pd.read_excel(r"E:\PyProjects\DataSet\PyMining\Data\chapter4\demo\data\catering_sale.xls")
data[u'销量'][(data['销量'] < 400) | (data['销量'] > 5000)] = None #过滤异常值,将其变为空值
data.isnull().sum()
#自定义列向量插值函数
#s为列向量,n为被插值的位置,k为取前后的数据个数,默认为5
def ployinterp_column(s, n, k=5): 
    # 使用缺失值前后各5各未缺失的数据参与建模
    y = s[list(range(n-k, n)) + list(range(n+1, n+1+k))] #取数
    y = y[y.notnull()] #剔除空值
    return lagrange(y.index, list(y))(n) #插值并返回插值结果

#逐个元素判断是否需要插值
for i in data.columns:
    for j in range(len(data)):
        if (data[i].isnull())[j]: #如果为空即插值。
            data[i][j] = ployinterp_column(data[i], j)

2. 异常值处理

异常值并不能一删了之,有些异常值可能含有重要信息。

Python数据挖掘005-数据清洗_第2张图片
image.png

参考资料:

《Python数据分析和挖掘实战》张良均等

你可能感兴趣的:(Python数据挖掘005-数据清洗)