python 数据预处理(采用拉格朗日插值法处理缺失值)

在数据挖掘中,数据往往会存在不完整的情况,本文主要采用拉格朗日插值法处理缺失值。

拉格朗日插值法

定义:对于某个多项式函数,已知有给定的K+1个取值点:


其中x对应自变量的位置,y对应这函数在这个位置(每一个y值都不等于0)的取值。

解设任意两个不同的Xj都互不相同,对应的拉格朗日插值所得到的拉格朗日插值多项式为:



下面采用拉格朗日插值对缺失值进行插补,数据的形式如下:


从图片可以看出16的位置为空缺值,程序代码如下:

#coding:utf-8
import pandas as pd
from scipy.interpolate import lagrange#拉格朗日函数
data=pd.read_excel('data/catering_sale.xls')
#自定义列向量插值函数
def ploy(s,n,k=6):
    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]=ploy(data[i],j)
data.to_excel('data/1.xls')

使用缺失值前后6个未缺失的数据进行建模,结果如下:





  • 10
    点赞
  • 82
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
以下是一个简单的 Python 代码段,使用拉格朗日插值法来填补 Excel 表格中的缺失值。请注意,这里只提供了一个示例代码段,并未完全测试,具体使用时需要根据实际情况进行修改。 ```python import pandas as pd import numpy as np from scipy.interpolate import lagrange # 读入 Excel 表格 data = pd.read_excel('your_excel_file.xlsx') # 定义插值函数 def lag_interpolate(column): """ column: 缺失值的 Series 列 返回插值后的 Series 列 """ # 使用拉格朗日插值法,k表示插值多项式的阶数 # 注意:k的值不能太大,否则容易造成过拟合 new_column = lagrange(column[column.notnull()].index, column[column.notnull()].values, k=2)(column.isnull().values.astype(float).cumsum()) return new_column # 对每个列进行缺失值处理 for column in data.columns: # 如果该列存在缺失值,则对其进行插值处理 if data[column].isnull().sum() > 0: data[column] = lag_interpolate(data[column]) # 输出处理好的表格 print(data) ``` 说明: 本代码段使用了 pandas 库来读取 Excel 表格,并使用 scipy 库中的 lagrange 函数来进行拉格朗日插值。具体的插值方法详见函数内部注释。 在使用拉格朗日插值时,需要注意防止过拟合。在本代码段中,我们使用了 k=2 的多项式来进行插值,但在实际使用中需要根据具体数据情况选取合适的阶数。 此外,本代码段仅支持对每列进行缺失值处理,如果需要对整个表格进行处理,可以考虑使用更为高级的插值方法,如 KNN、决策树等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值