文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
2.缺失值处理
在原始计量数据,特别是用户电量抽取过程中,发现存在缺失的现象。若将这些值抛弃掉,会严重影响供出电量的计算结果,最终导致日线损率数据误差很大。为了达到较好的建模效果,需要对缺失值处理。本案例采用拉格朗日插值法对缺失值进行插补。
选取数据中部分数据做为实例,如表6-6是三个用户一个月工作日的电量数据,对缺失值采用拉格朗日插值法进行插补。
表6-6 三个用户一个月工作日用电量数据
数据详见:demo/data/missing_data.xls
拉格朗日插值法补值,具体方法如下。
首先从原始数据集中确定因变量和自变量,取出缺失值前后5个数据(前后数据中遇到数据不存在或者为空的,直接将数据舍去,将仅有的数据组成一组),根据取出来的10个数据组成一组。然后采用拉格朗日多项式插值公式
其中,x为缺失值对应的下标序号,Ln(x)为缺失值的插值结果,xi为非缺失值yi的下标序号。对全部缺失数据依次进行插补,直到不存在缺失值为止。数据插补代码如代码清单6-1所示。
代码清单6-1 拉格朗日插值代码
#-*- coding: utf-8 -*- #拉格朗日插值代码 import pandas as pd #导入数据分析库Pandas from scipy.interpolate import lagrange #导入拉格朗日插值函数 inputfile = '../data/missing_data.xls' #输入数据路径,需要使用Excel格式; outputfile = '../tmp/missing_data_processed.xls' #输出数据路径,需要使用Excel格式 data = pd.read_excel(inputfile, header=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.to_excel(outputfile, header=None, index=False) #输出结果
代码详见:demo/code/Lagrange_interpolation.py
根据代码清单6-1补全的数据见表6-7,斜体加粗表示补全的数据。
表6-7 用户电量补全数据
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论