数据挖掘之空数据处理(有史以来最全面)

目录

  • 缺失值处理常用方式
  • 拉格朗日插值法代码示例

缺失值处理常用方式

均值,中位数,众数插补法

使用固定值(规定的标准值)

最近邻插补法

回归方法:可以使用线性回归或者多项式回归(SVR)

插值法:拉格朗日差值和牛顿插值法。

拉格朗日插值法原理(看懂原理需要数学修炼):
数据挖掘之空数据处理(有史以来最全面)_第1张图片
数据挖掘之空数据处理(有史以来最全面)_第2张图片

拉格朗日插值法代码示例

数据挖掘之空数据处理(有史以来最全面)_第3张图片
2月14号这一天存在空数据,下面我们使用拉格朗日插值法,对数据进行填充

#拉格朗日插值代码
import pandas as pd
 #拉格朗日插值函数
from scipy.interpolate import lagrange

 #销量数据路径
inputfile = './catering_sale.xls'
#输出数据路径
outputfile = './sales.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, 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)

data['日期'] = data['日期'].dt.date  
#输出结果,写入文件
data.to_excel(outputfile)

数据挖掘之空数据处理(有史以来最全面)_第4张图片
插值后大家发现,2月14号插值成功,营收4156,符合实际情况,因为2月14号是周六,客流量比较大,而且是情人节,所以基本符合情况。
大家同时也发现2月21号的数据之前特别大,多达6607,所以我们把这一数据假定成异常值,进行删除,重新生成了,拉格朗日填充结果为4275,也比较正常,因为2月21号也是周六。
我们可以发现这样一个规律,周一至周五营业额比较少,周六日比较多。

牛顿法,与拉格朗日类似,scipy没有提供方法,如果项目中需要使用,需要自己根据原理实现代码。

参考书目:
《Python数据分析与挖掘实战》

你可能感兴趣的:(Python数据分析)