昨天的一篇文章中提到了数据清洗中涉及缺失值,可通过删除数据、填补空值以及无视等方式进行处理。在空值填补方面,可用平均值、众数、中位数、固定值或者临近值进行填补。

删除数据这种方式比较适用于缺失值较少的情况,但是如果数据集本来就比较小,删除这种方法就不是一个很好的选择了。下面介绍一种用简单建模的方式进行空缺值填补的方法——拉格朗日插值法。

一、原理

在网上搜索了以下,发现这位答主的答案解析得非常清晰,感谢!如何直观地理解拉格朗日插值法?​www.zhihu.com

所谓得拉格朗日插值法,就是根据平面上具有n个观测值(无两点在一条直线上),那么一定能够求得通过这n个观测值的一条n-1阶曲线或多项式。

1)已知通过n个观测值的n-1阶多项式

2)将各个观测值

代入多项式可得:

……

看我上面贴得链接得那个解答:

可以从2阶的多项式递推出这个n-1阶的解答:

即:

3)将缺失值x带入公式可得到相关的插入值。

二、代码实现案例

我们仍然使用前一篇文章中提到的catering_sale数据集。

第一步:导入各种需要的包和库

import pandas as pd

import numpy as np

from scipy.interpolate import lagrange #scipy自带的拉格朗日插值函数

input_data = 'chapter3/demo/data/catering_sale.xls'

output_data = 'chapter3/demo/data/output_data.xls'

第二步:将超出预期范围的值设为null,编写循环函数检测空值

input_data = pd.read_excel(input_data)

input_data[(input_data[u'销量']>5000) | (input_data[u'销量']<400)][u'销量'] = None

def tianbu(s,n,k=5): #s代表数据集的某列,n代表需要插入值的横坐标,k设定为初始值5,即取插入值前后值的个数

y = s[list(range(n-k,n))+list(range(n+1,n+k+1))]

y = y[y.notnull()]

return lagrange(y.index,list(y))(n) #使用拉格朗日函数计算x对应的y值

for i in input_data.columns:

for j in range(len(input_data)):

if (input_data[i].isnull())[j]:

input_data[i][j] = tianbu(input_data[i],j)

input_data.to_excel(output_data) # 将修改后的数据集导入表格

三、总结

整体来说拉格朗日插值法是一种比较方便的处理异常值和填补空值的方法,但也存在一定的局限性:

在操作过程中发现拉格朗日插值法有时会导致负值的产生,特别是当首行出现空值的时候,调整k值可以适当地规避这种情况的发生。

另外拉格朗日插值法容易收到插入值增删的影响,当插值节点增减时,插值多项式就会发生变化,这样就造成了一定的不便。

python拉格朗日插值法_【统计学】拉格朗日插值法的一种python实现方式相关推荐

  1. python 字符串拼接_面试官让用 3 种 python 方法实现字符串拼接 ?对不起我有8种……...

    点击上方 蓝字关注我们 点击上方"印象python",选择"星标"公众号重磅干货,第一时间送达!之前发过很多关于 Python 学习的文章,收到大家不少的好评, ...

  2. python ide 最好_我在iPad上最好的Python IDE

    python ide 最好 Having finished my first year at university, and being left with very little to do thi ...

  3. python selenium脚本_怎样开始写第一个基于python的selenium脚本

    1.下载并安装python(http://www.python.org/geti/). 2.安装selenium(http://pypi.python.org/pypi/selenium)下载并解压缩 ...

  4. python语言 行业_如何入门编程开发行业 选择Python语言怎么样

    如何入门编程开发行业?选择Python语言怎么样?Python是一种面向对象的解释型计算机程序设计语言,它是纯粹的自由软件,语法简洁清晰,它具有丰富和强大的库.它常被称为胶水语言,能够把用其他语言制作 ...

  5. python笔记视频_终于拿到!清华大佬Python视频+书+笔记汇总

    终于拿到!清华大佬Python视频+书+笔记汇总 清华学姐推荐的Python视频400集,拿走不谢!

  6. 什么是python扩展库_什么是目前比较常用的Python扩展库管理工具

    展开全部 在Python环境中已经有很多成熟的包,可以通过安装这些包来扩展我们的程序. 例如,很32313133353236313431303231363533e4b893e5b19e31333365 ...

  7. python 建筑计算_制图小技巧:巧用Python和ELK瞬间完成总图建筑名称标注

    哎呦,又到了每周一次的制图教室啦.经过前面两次制图教程的分享,相信大家对于白模填色和写实渲染这两种表达方式肯定有了较好的掌握. 那么今天我们就转战制图技巧篇,和童鞋们聊一下总平面图中的建筑名称标注问题 ...

  8. python编程首选_为什么说学编程首选是python

    为什么学编程 你可能不会成为一名专业的程序员, 不过学编程的确是有很多的原因的 1. 最重要的是你想学!不论是因为业余爱好还是作为职业,编程都是十分有意思的, 都会让你收获很多 2. 如果你是对计算机 ...

  9. python树代码_浅析AST抽象语法树及Python代码实现

    在计算机科学中,抽象语法树(abstract syntax tree或者缩写为AST),或者语法树(syntax tree),是源代码的抽象语法结构的树状表现形式,这里特指编程语言的源代码.树上的每个 ...

  10. python入门教授_南开大学教授强力推荐的5本Python入门书籍,附电子版

    筛选了2年内优秀的python书籍,个别经典的书籍扩展到5年内. python现在的主流版本是3.7(有明显性能提升,强烈推荐) 3.6, 不基于这两个或者更新版本的书,慎重选择.很多库已经不提供py ...

最新文章

  1. php 千万级访问量网站,承受每天百万级访问量的网站需要多少台服务器?
  2. 使用 supervisor 管理进程
  3. VC++源码分析 - 中国象棋源码分析
  4. 鸟哥linux群,【鸟哥的linux私房菜-学习笔记】linux的帐号与群组
  5. 删除文件夹中包含的子文件夹及文件
  6. 用区块链改变人工智能:去中心化带来数据新范式
  7. “中能融合杯”线下赛感悟
  8. @Autowired自动注入
  9. 解决firefox不能安装Flash插件
  10. C++手动开启O2优化(以及-O -O1 -O2 -O3优化的知识点)(竞赛可用)
  11. 后端用java还是python_【后端开发】已学php再学java还是python?
  12. html标题栏置顶,html – 当你滚动时,顶部标题栏的位置固定在iOS chrome上
  13. python与西门子1200通讯_西门子S7-1200的以太网通信
  14. 海词词典android v3.1.2新版发布 英语学习必备工具,海词词典Android V3.1.2新版发布 英语学习必备工具...
  15. 线阵相机与面阵相机的区别
  16. php数据可视化相关内容_漏刻有时基于Echarts的php数据管理后台的数据可视化大屏代码...
  17. 技术债务-坏味道、Bug、漏洞
  18. 怎么实现excel2007/2010不同文档窗口分离显示
  19. 安卓紧急警报_我们的紧急警报系统依赖于重叠的私有服务混乱局面
  20. Keepalived+LVS+MariaDB Galera Cluster10.0高可用负载均衡多主复制

热门文章

  1. gulp + webpack + sass 学习
  2. NBU7.5---Windows_BMR备份与恢复
  3. 091115 T UI生成的类
  4. ArcGIS的文件结构
  5. FreeRTOS源码分析与应用开发07:事件标志组
  6. linux jboss 多实例,在单个JBoss实例上设置多个端口?
  7. c语言gc,使用C++制作GC Server过程详解
  8. java颠倒字符串_Java经典实例:按字符颠倒字符串
  9. asp.net 两个控件放一行_思维导图?试试这两个宝藏网站吧
  10. win7 64位运行不了服务器,G6-e标准包可以装在win7 64位系统上吗?现在提示不能登陆到服务器...