Python数据预处理 - 缺失值处理 - 拉格朗日插值法 - 代码实现

版权声明:转载请联系作者,获得允许后,添加链接及作者到页首 https://blog.csdn.net/weixin_40683253/article/details/81870335

目录

缺失值处理

拉格朗日差值法的理论基础

拉格朗日插值法代码实现

其他数据预处理方法


缺失值处理

处理缺失值常用的办法可分为三类:删除记录、数据插补、不处理。

其中常见的数据插补法有:

如果通过删除小部分的数据就可以达到既定的目标,且不会影响结果的准确性,那么这无疑是最简单有效的。但是,在不了解情况的时候还是不要这样冒险比较好,因为删除数据是所有老板最不愿意看见的,不但浪费了很大的资源,也丢弃了大量有可能隐藏在缺失值记录中的信息。

这里我们主要说一说拉格朗日插值法,主要讲这个方法,是因为大学数值分析课上,认为这个方法最好,哈哈,其他方法有兴趣的同学也可以试一试。除了拉格朗日插值法,还有牛顿插值法、Hermite插值法、分段插值法和样条插值法。

拉格朗日插值法在理论分析中很方便,因为他的公式结构紧凑。但是在实际应用中,如果存在差值节点经常增减变化时,拉格朗日插值法的插值多项式也需要随之变化,遇见数据源比较大的时候,这难免有些浪费时间,这个时候,其实牛顿插值法更加适用。

拉格朗日差值法的理论基础

偷懒不愿敲公式,所以直接抛了一个截图,见谅见谅。

拉格朗日插值法代码实现

数据源大概是这样的:

time count
2018/5/1 106684
2018/5/2 106644
2018/5/3 176520
2018/5/4 152311
2018/5/5 160264
2018/5/6  
2018/5/7 182263
2018/5/8 172887
2018/5/9 160264
2018/5/10 152704
2018/5/11 110049
2018/5/12 136951
2018/5/13  
2018/5/14 143165
2018/5/15 136951
2018/5/16  
2018/5/17 135287

黄色部分是缺失值,需要通过其前后的数据进行插补,下面是代码实现了。

# -*- coding: utf-8 -*-
#拉格朗日法插补空缺值

import pandas as pd #导入pandas库
from scipy.interpolate import lagrange #导入拉格朗日函数

inputfile = u'E:\\pythondata\\cjm5.xlsx'
outputfile = u'E:\\pythondata\\cjm5_1.xlsx'

data= pd.read_excel(inputfile)
data[u'count'][(data[u'count']<100000) | (data[u'count']>200000)] = None #将异常值清空

def ployinterp_column(s,n,k=2): #k=2表示用空值的前后两个数值来拟合曲线,从而预测空值
    y = s[list(range(n-k,n)) + list(range(n+1,n+1-k))] #取值,range函数返回一个左闭右开([left,right))的序列数
    y = y[y.notnull()]#取上一行中取出数值列表中的非空值,保证y的每行都有数值,便于拟合函数
    return lagrange(y.index,list(y))(n) #调用拉格朗日函数,并添加索引

for i in data.columns: #如果i在data的列名中,data.columns生成的是data的全部列名
    for j in range(len(data)): #len(data)返回了data的长度,若此长度为5,则range(5)会产生从0开始计数的整数列表
        if (data[i].isnull())[j]:#如果data[i][j]为空,则调用函数ployinterp_column为其插值
            data[i][j] = ployinterp_column(data[i],j)
        
data.to_excel(outputfile) #将完成插值后的data写入excel
print("拉格朗日法插补完成,插补后的文件位于:"+str(outputfile))

 代码运行结束后会将插补完成的excel文件存在既定的位置(代码中outputfile的位置),我们通过k的值来表示通过缺失值前多少个数值来插补,下面是通过k=2和k=3插补的结果,我们把它画在一个折线图中,直观的判断哪一个k值是更加符合业务实际情况的。

其他数据预处理方法

连续数据离散化(等宽、等频、聚类离散)

清洗重复数据

数据预处理 - 归一化与标准化

猜你喜欢

转载自blog.csdn.net/weixin_40683253/article/details/81870335
今日推荐