美文网首页
第四章:数据预处理

第四章:数据预处理

作者: overad | 来源:发表于2018-07-25 18:40 被阅读0次

在数据挖掘中,海量的原始数据中存在着大量不完整(有缺失值)、不一致、有异常的数据,严重影响到了数据挖掘建模的执行效率,甚至可能导致挖掘结果的偏差,所以进行数据清洗就显得尤为重要,数据清洗完成后接着要进行或者同时进行数据集成、转换、规约等一系列的处理,该处理就是数据预处理。数据预处理一方面是要提高数据的质量,另一方面是要让数据更好地适应特定的挖掘技术或工具;统计发现,在数据挖掘的过程中,数据预处理工作量占了整个过程的60%。

1.数据清洗

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

1.1处理缺失值

缺失值的处理方法分为三类:删除记录、数据插补、和不处理

常用的插补方法:

插补方法 方法描述
均值/中位数/众数插补 根据属性值的类型,用该属性取值的平均数/中位数/众数进行插补
使用固定值 将确实的属性值用一个常量替换:用广州的基本工资来替换一个外来务工人员的工资的缺失值
最近临插补 在记录中找到与缺失值样本最接近的样本的该属性值插补
回归方法 对带有缺失值的变量,根据已有数据和逾期有关的其他变量(因变量)的数据进行建立拟合模型来预测确实的属性值
插值法 插值法是利用已知点建立合适的插补函数f(x),未知值对应点xi求出的函数值f(xi)近似代替

如果通过简单的删除小部分记录达到既定的目标,那么删除含有缺失值的记录的方法时最有效的。只适用于缺失值的数据量占比极低的情况使用。

  • 插值方法:拉格朗日插值法和牛顿插值法
    在Python的scipy中提供了拉格朗日插值的函数,如果需要使用牛顿插值法,需要自己编写函数
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

#拉格朗日插值
import pandas as pd
import matplotlib.pyplot as plt
from scipy.interpolate import lagrange

inputfile = 'D:\\books\\chapter4\\demo\\data\\catering_sale.xls'
outputfile =  'D:\\books\\chapter4\\demo\\data\\sales_tmp.xls'

data = pd.read_excel(inputfile) #读入数据
data[u'销量'][(data[u'销量'] < 400 ) | (data[u'销量'] > 5000)] = None     #过滤异常值,将其变为空值;

#自定义列向量插值函数
#s为列向量,n为被插值的位置,k为取值前面的数据个数,默认为5
def ployinterp_column(s,n,k=5):
    y = s[list(range(n-k)) + 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)

data.to_excel(outputfile)

相关文章

网友评论

      本文标题:第四章:数据预处理

      本文链接:https://www.haomeiwen.com/subject/atsrqftx.html