处理时间序列数据中缺失值的 4 种技术

作者:CSDN @ _乐多_

现实世界的数据通常包含缺失值。包括时间序列数据在内的所有类型的数据集都存在缺失值的问题。缺失值的原因可能是数据损坏或无法在任何给定时间记录数据。

时间序列模型使用完整的数据,因此需要在建模或实际时间序列分析之前估算缺失值。时间序列数据集中的缺失值可以使用两种广泛的技术来处理:

  • 删除有缺失值的记录
  • 估算缺失的信息

然而,删除缺失值是一个不合适的解决方案,因为我们可能会失去相邻观测值的相关性。估计或估算缺失值可能是处理缺失值的绝佳方法。

在本文中,我们将讨论 4 种可用于估算时间序列数据集中缺失值的技术:

  • 最后观测值前向填充(LOCF)
  • 下一个观测值后向填充(NOCB)
  • 滚动统计
  • 插值

文章目录

      • 开始
        • 最后观测值前向填充(LOCF)
        • 下一个观测值后向填充(NOCB)
        • 滚动统计
        • 插值
      • 结论
      • 参考文献


开始

样本数据包含 50 天收集的温度数据,随机缺失 5 个值。

处理时间序列数据中缺失值的 4 种技术_第1张图片图1 样本数据集随时间的截图

最后观测值前向填充(LOCF)

LOCF是一种简单而优雅的技巧,它将前一个非缺失值向前传递或复制,并用缺失值进行替换。

df['Forward_Fill'] = df['AvgTemperature'].ffill()

Pandas.DataFrame函数中的ffill()函数可用于用前一个值来填补缺失值。

处理时间序列数据中缺失值的 4 种技术_第2张图片图2 正向插补

下一个观测值后向填充(NOCB)

NOCB是另一种简单的技术,其中将下一个非缺失值复制并替换为前一个缺失值。

df[‘Backward_Fill’] = df[‘AvgTemperature’].bfill()

可以使用Pandas.DataFrame函数中的bfill()函数来用前一个值填补缺失值。

处理时间序列数据中缺失值的 4 种技术_第3张图片图3 向后插补

滚动统计

可以使用统计技术通过聚合前一个非缺失值来填补缺失值。滚动统计技术可以包括:

  1. 简单移动平均(Simple Moving Average):

在这里插入图片描述

df[‘SMA’] = df['AvgTemperature'].rolling(window=5).mean()
  1. 加权移动平均线(Weighted Moving Average):

在这里插入图片描述

df[‘WMA’] = data['AvgTemperature'].rolling(window=5).apply(lambda x: x[::-1].cumsum().sum() * 2 / n / (n + 1))
  1. 指数(加权)移动平均线(Weighted Moving Average):

在这里插入图片描述

df['EWA] = df['AvgTemperature'].ewm(halflife=4).mean()

插值

插值技术通过假设数据点范围内的关系来估计缺失值。在滚动统计技术中,只考虑前一个值来填补缺失值,而插值技术则使用过去和未来已知数据点进行估算。

我们有多种插值方法:

  • 线性插值:假设数据点范围内有线性关系。
  • 样条插值:估计使得整体曲率最小化的值,从而获得通过输入点的平滑曲面。
  • 时间插值:通过更加关注附近点而不是远处点来估计缺失值。

还有许多其他可以用于填补缺失值的插值技术。所有这些方法都假设相邻的数据点是相似的,但这并不总是成立。

df[‘Interpolate_Spline’]= df[‘AvgTemperature’].interpolate(option=’spline’)

Pandas.DataFrame包提供了使用插值技术来填补缺失值的功能。在插值实现中,options参数可以选择不同的算法(例如:‘spline’、‘linear’、‘time’、'quadratic’等等)。

结论

在本文中,我们讨论了处理和填补时间序列数据集中缺失值的各种技术。Pandas.DataFrame包含了大部分填补技术的实现。

所有上述讨论的算法都假设相邻的数据点是相似的,但这并不总是成立。还有一些高级的填补技术不遵循这个假设。

参考文献

[1]Pandas文档:https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html

声明:
本人作为一名作者,非常重视自己的作品和知识产权。在此声明,本人的所有原创文章均受版权法保护,未经本人授权,任何人不得擅自公开发布。
本人的文章已经在一些知名平台进行了付费发布,希望各位读者能够尊重知识产权,不要进行侵权行为。任何未经本人授权而将付费文章免费或者付费(包含商用)发布在互联网上的行为,都将视为侵犯本人的版权,本人保留追究法律责任的权利。
谢谢各位读者对本人文章的关注和支持!

你可能感兴趣的:(python时间序列分析,python,算法,python,开发语言)