数据挖掘-拉格朗日插值法
快速根据点值逼近函数
在取点大于nn的情况下解出nn次多项式是唯一解
import pandas as pd
from scipy.interpolate import lagrange # 导入拉格朗日插值函数
inputfile = 'catering_sale.xls' # 销量数据路径
outputfile = 'sales.xls' # 输出数据路径
data = pd.read_excel(inputfile) # 读入数据
data[u'销量'].loc[(data[u'销量'] < 400) | (data[u'销量'] > 5000)] = None
# 自定义列向量插值函数
# s 为列向量,n 为被插值的位置,k 为取前后的数据个数,默认为 5
def ployinterp_column(s, n, k=5):
y = s.reindex(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].loc[j] = ployinterp_column(data[i], j)
data.to_excel(outputfile) # 输出结果,写入文件