时间序列插值
  bF5iNti13xXC 2023年11月12日 49 0

背景:Python 做数据分析,DataFrame数据结构

由于需要根据历史的时间序列预测未来一段时间的序列值,在获取时间序列时经常会遇到部分值缺失,或者数值不理想的情况。此时为了保证历史序列的正确提取,就要把异常值去掉,然后通过插值进行修补。

以下是Pandas中的几种插值方式,使用方便:

1、线性插值。

顾名思义,可能是最直接的插值方式之一,虽然简单可能效果也不太好。

特点:只能在已知样本中间插值,像我的数据里,起始数据没有的情况是不行的。

代码很简单,Pandas的内置函数,把要插值的地方置为NaN,然后直接调用interpolate()函数。

delIndex = df[df['cloud'] != 0].index # 筛选要插值的位置
df.iloc[delIndex, 2] = np.nan # 置为NaN
df = df.interpolate() # 插值

插值前:

时间序列插值_Python

线性插值后:

时间序列插值_Python_02

2、多项式插值也是一样,指定参数method和阶数order:

delIndex = df[df['cloud'] != 0].index # 筛选要插值的位置
df.iloc[delIndex, 2] = np.nan # 置为NaN
df = df.interpolate(method='polynomial', order=2) # 多项式插值

多项式插值后:

时间序列插值_插值_03

这段数据看起来多项式插值和线性插值区别不大,插值结果只有小数级的差异。

3、样条插值是一种基于样条曲线的插值方法。它通过拟合一条具有光滑特性的曲线来估算未知数据点的值。在Pandas中,可以使用interpolate()函数的method参数来选择样条插值的方法。

delIndex = df[df['cloud'] != 0].index # 筛选要插值的位置
df.iloc[delIndex, 2] = np.nan # 置为NaN
df = df.interpolate(method='spline', order=2) # 样条插值

样条插值后:

时间序列插值_时间序列_04

单看数值差异很小,猜测对我这个任务,使用哪种插值方法影响不大。

等我插值完所有的缺失数据后,计算一次总体误差应该能比较一下在这个任务上哪种插值方法更好,当然,也可能结果差距不大。


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月12日 0

暂无评论

推荐阅读
  X5zJxoD00Cah   2023年12月11日   27   0   0 知乎Python迭代器
  X5zJxoD00Cah   2023年12月12日   34   0   0 Python.net
bF5iNti13xXC
作者其他文章 更多