python数据分析之拉格朗日插值

       开展数据分析工作时,数据清理是一个重要的环节,处理缺失值是常见问题。处理方法可分为三类,删除记录、插值和不处理。这里介绍用拉格朗日插值方法以及在python数据分析中的实现。

拉格朗日插值法是根据已知的点求取函数对未知点进行插值,具体细节这里不做具体介绍,想了解的朋友可以去数数值分析的内容。这里以应用为主,介绍scimpy中的lagrange()函数的使用方法。

lagrange(x,w)中两个主要的参数(x,w),把一系列点当成是函数关系y=f(x)其中x对应参数x,而y对应为w。输出结果为函数f,根据函数可以求出对应x对应的y

举例说明:

x = [1,2,4]

y = [2,3,8]

f = lagrange(x,y)   f(3) = 6    

用该函数可以快速实现数据中空值以及异常值的处理。

实例分析

#-*- coding:utf-8 -*-
import pandas as pd
from scipy.interpolate import lagrange

inputfile = '..\data\catering_sale.xls'
outputfile= '..\data\sales.xls'

data = pd.read_excel(inputfile)#读取excel
data[u'销量'][(data[u'销量']<400)|(data[u'销量']>5000)]=None#异常值变为空值

def ployinterp_column(s,n,k=5):#默认是前后5个
    #tem=list(range(n-k,n))+list(range(n+1,n+1+k))
    y=s[list(range(n-k,n))+list(range(n+1,n+1+k))]#取数,n的前后5个,这里有可能取到不存在的下标,为空
    y=y[y.notnull()]#如果y里面有空值的话就去掉
    #teml=lagrange(y.index,list(y))#这里代表的就是参数ai
    return lagrange(y.index,list(y))(n)#最后的括号就是我们要插值的n
print(len(data))  # 201 组数据

for i in data.columns:
    if i==u'日期':
        continue
    for j in range(len(data)):
        if(data[i].isnull())[j]:#空值进行插值
            data[i][j] = ployinterp_column(data[i],j)
data.to_excel(outputfile)

猜你喜欢

转载自blog.csdn.net/sinat_23338865/article/details/81809575