拉格朗日插值法在数据分析中的应用——Python插值scimpy,lagrange

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

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


                                                     Por分布直方图,左侧值离群值为异常值

import pandas as pd
import math as ma
#导入函数
from scipy.interpolate import lagrange
import matplotlib.pyplot as plt
#读取文本中的数据,数据有四列,MD,K,和Por这里以Por的异常值为例进行插值处理
df = pd.read_table('d:/data1.txt')
#Por列中<0.05的为异常值,处理为空值
df['Por'][df['Por']<0.05] = None
plt.show()
#n为插值考虑的范围,为前后5个数
n = 5
#搜索第2列(Por列)的异常值并且插值
for i in range(len(df)):
#ma.isnan()判断值是否为空值
    if ma.isnan(df.iat[i, 2]):
#插值算法考虑的数据interdf是一个Series从空值算起前后n个
        interdf = df.iloc[i-n:i+n+1, 2]
#删除掉里面的空值
        interdf = interdf[interdf.notnull()]
#x为数据的索引,也可以为其他列的值
        list_x = list(interdf. index)
#y为Series里的值,x,y都转换成列表
        list_y = list(interdf. values)
#f为利用拉格朗日法建立的函数关系y=f(x)
        f = lagrange(list_x, list_y)
#把插值结果加入到df中
        df.iat[i, 2] = f(i)
#插值算法结束----------下面是插值前后数据的对比
df_org = pd.read_table('d:/data1.txt')
#df_org为原始数据,df为插值后数据,改名为New por
df.rename(columns={'Por': 'New Por'}, inplace=True)
#绘图
df['New Por'].plot(style='k--')
df_org['Por'].plot(alpha=0.5)
plt.legend(loc='best')
plt.show()



                                                                                                            虚线为插值后的数据点,实线是插值前的数据点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值