返回介绍

2.缺失值处理

发布于 2024-01-28 21:41:24 字数 2096 浏览 0 评论 0 收藏 0

在原始计量数据,特别是用户电量抽取过程中,发现存在缺失的现象。若将这些值抛弃掉,会严重影响供出电量的计算结果,最终导致日线损率数据误差很大。为了达到较好的建模效果,需要对缺失值处理。本案例采用拉格朗日插值法对缺失值进行插补。

选取数据中部分数据做为实例,如表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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文