拉格朗日插值简单介绍
拉格朗日插值法是以法国十八世纪数学家约瑟夫·拉格朗日命名的一种多项式插值方法。
许多实际问题中都用函数来表示某种内在联系或规律,而不少函数都只能通过实验和观测来了解。在若干个不同的地方得到相应的观测值,拉格朗日插值法可以找到一个简单函数,其恰好在各个现测的点取到观测到的值,这个函数可以是代数多项式,三角多项式等。
本文基于Python实现一个简单的拉格朗日插值。
# -*- coding: utf-8 -*-
# 拉格朗日插值实现
# time:2017.11.01
读取数据
import pandas as pd
inputfile = "E:\\Python\\model1\\train_test2.csv"
train_data = pd.read_csv(inputfile, encoding = 'utf-8')
部分数据展现
查看数据集大小
print('数据量:',train_data.shape)
数据量: (300, 8)
查看缺失值情况
def na_count(data):
data_count = data.count()
na_count = len(data) - data_count
na_rate = na_count/len(data)
result = pd.concat([data_count,na_count,na_rate],axis = 1)
return result;
na_count(train_data)
拉格朗日插值
import pandas as pd
from scipy.interpolate import lagrange
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 train_data.columns:
for j in range(len(train_data)):
if (train_data[i].isnull())[j]:
train_data[i][j] = ployinterp_column(train_data[i],j)
输出结果
outputfile = "E:\\Python\\model1\\train_test_out.xls"
train_data.to_excel(outputfile)
查看数据