当前位置:   article > 正文

拉格朗日插值法在数据分析中的应用——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分布直方图,左侧值离群值为异常值

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



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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/空白诗007/article/detail/803809
推荐阅读
相关标签
  

闽ICP备14008679号