根据收集到的数据,接下来要考虑的问题是数据是否满足我们模型构建的要求,数据质量是否过关?数据间的关联性如何?趋势和规律怎么样的?
通过数据的处理和探索,用统计手段通过制图等描绘数据,对数据进行初步的探索。
数据质量分析:
1、缺失值;2、异常值;3、不一致的值;4、重复数据且含有非法字符。
1、缺失值的处理:
缺失值产生原因:有些数据无法获取,或者获取的代价太大;信息收集时遗留;数据本身不存在;
缺失值的影响:丢失有用的消息,增加模型的不确定性,对于规律更难把握,模型建立过程及输出不可靠;
缺失值的解决:
删除该记录、插补、不处理;
用函数:dropna去除数据结构中为空的数据
from pandas import read_csv df = read_csv( 'C://Users//leon//Desktop//data.csv' ) isNA = df.isnull() #找出空值的位置 df[isNA[['key', 'value']].any(axis=1)] #空值所在行 newDF = df.dropna() #删除该行
插补:
用均值、中位数、众数进行插补
临近值插补、回归方法、插值法
插值法:拉格朗日插值
概念
一般地,若已知
在互不相同 n+1 个点
处的函数值
( 即该函数过
这n+1个点),则可以考虑构造一个过这n+1 个点的、次数不超过n的多项式
,使其满足:
![](https://gss3.bdstatic.com/-Po3dSag_xI4khGkpoWK1HF6hhy/baike/s%3D59/sign=141819849c504fc2a65fb00ce4dd25aa/aa18972bd40735faddfbdb3599510fb30f240836.jpg)
![](https://gss1.bdstatic.com/9vo3dSag_xI4khGkpoWK1HF6hhy/baike/s%3D85/sign=821bc26cf003918fd3d130cf503d9caf/4ec2d5628535e5dd062d305371c6a7efce1b623d.jpg)
![](https://gss2.bdstatic.com/-fo3dSag_xI4khGkpoWK1HF6hhy/baike/s%3D84/sign=ae113999bb315c60479566eb8fb10fde/4afbfbedab64034f361f578aa8c379310b551d6f.jpg)
![](https://gss3.bdstatic.com/7Po3dSag_xI4khGkpoWK1HF6hhy/baike/s%3D183/sign=178da946563d26972ad30c5566fab24f/3bf33a87e950352a713db1845443fbf2b3118bda.jpg)
![](https://gss1.bdstatic.com/9vo3dSag_xI4khGkpoWK1HF6hhy/baike/s%3D63/sign=42ff5ebf9545d688a702b1a7a5c27cec/562c11dfa9ec8a13e225c06cf003918fa0ecc07b.jpg)
![](https://gss0.bdstatic.com/-4o3dSag_xI4khGkpoWK1HF6hhy/baike/s%3D208/sign=1fe010ad9413b07eb9bd570834d69113/91ef76c6a7efce1b79045f46a851f3deb48f650b.jpg)
要估计任一点ξ,ξ≠xi,i=0,1,2,...,n,则可以用Pn(ξ)的值作为准确值f(ξ)的近似值,此方法叫做“插值法”。
称式(*)为插值条件(准则),含xi(i=0,1,...,n)的最小区间[a,b],其中a=min{x0,x1,...,xn},b=max{x0,x1,...,xn}。
定理
满足插值条件的、次数不超过n的多项式是存在而且是唯一的。
在平面上有
共n个点,现作一条函数
使其图像经过这n个点。
![](https://gss3.bdstatic.com/7Po3dSag_xI4khGkpoWK1HF6hhy/baike/s%3D213/sign=9a7bd8f4df39b60049ce08b6da513526/9a504fc2d56285356a6809369aef76c6a7ef6319.jpg)
![](https://gss0.bdstatic.com/-4o3dSag_xI4khGkpoWK1HF6hhy/baike/s%3D32/sign=a763a86d65d9f2d3241122eda8ec8407/2e2eb9389b504fc209f52789e2dde71191ef6d90.jpg)
使得
![](https://gss2.bdstatic.com/9fo3dSag_xI4khGkpoWK1HF6hhy/baike/s%3D130/sign=fa46772506f3d7ca08f63b75c21ebe3c/5882b2b7d0a20cf453c9cec47c094b36acaf994b.jpg)
最后可得
。
![](https://gss2.bdstatic.com/9fo3dSag_xI4khGkpoWK1HF6hhy/baike/s%3D130/sign=5197fac6a164034f0bcdc6059fc27980/03087bf40ad162d9e8bf56071bdfa9ec8a13cd53.jpg)
形如上式的插值多项式
称为拉格朗日(Lagrange)插值多项式。
![](https://gss2.bdstatic.com/-fo3dSag_xI4khGkpoWK1HF6hhy/baike/s%3D39/sign=562076dbaa4bd11300cdb13b5baf5d07/0d338744ebf81a4ccfba7e61d02a6059242da68a.jpg)
例如:当n=4时,上面的公式可简化为:
![](https://gss1.bdstatic.com/-vo3dSag_xI4khGkpoWK1HF6hhy/baike/s%3D884/sign=fd0a22349fcad1c8d4bbf12f4b3e67c4/b7fd5266d0160924665c9000de0735fae6cd34ab.jpg)
代码过程:
def h(x,y,a): ans=0.0 for i in range(len(y)): t=y[i] for j in range(len(y)): if i !=j: t*=(a-x[j])/(x[i]-x[j]) ans +=t return ans x=[1,0] y=[0,2] print(h(x,y,2))
- x,y分别是对应点的x值和y值。具体详解下解释。
- a为想要取得的函数的值。
在python中直接调用lagrange(x,y)
例如:(1,2) (3,5) (5,9)这三个点,作为函数输入应该这么写:
x=[1,3,5]
y =[2, 5, 9]
a=lagrange(x,y)
代码实现:
from scipy.interpolate import lagrange x=[1,2,3,4,7] y=[5,7,10,3,9] a=lagrange(x,y) print(a) print(a(1),a(2),a(3)) print(a[0],a[2],a[3])
结果:
4 3 2
0.5472 x - 7.306 x + 30.65 x - 47.03 x + 28.13
print(a(1),a(2),a(3))
5.0 7.0 10.0
print(a[0],a[2],a[3])
28.1333333333 30.6527777778 -7.30555555556