前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >时间序列数据的预处理

时间序列数据的预处理

作者头像
数据派THU
发布于 2022-03-04 02:14:19
发布于 2022-03-04 02:14:19
1.8K00
代码可运行
举报
文章被收录于专栏:数据派THU数据派THU
运行总次数:0
代码可运行
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
来源:Deephub Imba本文约2600字,建议阅读5分钟在本文中,我们将看到在深入研究数据建模部分之前应执行的常见时间序列预处理步骤和与时间序列数据相关的常见问题。

时间序列数据随处可见,要进行时间序列分析,我们必须先对数据进行预处理。时间序列预处理技术对数据建模的准确性有重大影响。

在本文中,我们将主要讨论以下几点:

  • 时间序列数据的定义及其重要性。
  • 时间序列数据的预处理步骤。
  • 构建时间序列数据,查找缺失值,对特征进行去噪,并查找数据集中存在的异常值。

首先,让我们先了解时间序列的定义:

时间序列是在特定时间间隔内记录的一系列均匀分布的观测值。

时间序列的一个例子是黄金价格。在这种情况下,我们的观察是在固定时间间隔后一段时间内收集的黄金价格。时间单位可以是分钟、小时、天、年等。但是任何两个连续样本之间的时间差是相同的。

时间序列数据预处理

时间序列数据包含大量信息,但通常是不可见的。与时间序列相关的常见问题是无序时间戳、缺失值(或时间戳)、异常值和数据中的噪声。在所有提到的问题中,处理缺失值是最困难的一个,因为传统的插补(一种通过替换缺失值来保留大部分信息来处理缺失数据的技术)方法在处理时间序列数据时不适用。为了分析这个预处理的实时分析,我们将使用 Kaggle 的 Air Passenger 数据集。

时间序列数据通常以非结构化格式存在,即时间戳可能混合在一起并且没有正确排序。另外在大多数情况下,日期时间列具有默认的字符串数据类型,在对其应用任何操作之前,必须先将数据时间列转换为日期时间数据类型。让我们将其实现到我们的数据集中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pandas as pd

passenger = pd.read_csv('AirPassengers.csv')
passenger['Date'] = pd.to_datetime(passenger['Date'])
passenger.sort_values(by=['Date'], inplace=True, ascending=True)

时间序列中的缺失值

处理时间序列数据中的缺失值是一项具有挑战性的任务。传统的插补技术不适用于时间序列数据,因为接收值的顺序很重要。为了解决这个问题,我们有以下插值方法:

插值是一种常用的时间序列缺失值插补技术。它有助于使用周围的两个已知数据点估计丢失的数据点。这种方法简单且最直观。处理时序数据时可以使用以下的方法:

  • 基于时间的插值
  • 样条插值
  • 线性插值

让我们看看我们的数据在插补之前的样子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from matplotlib.pyplot import figure
import matplotlib.pyplot as plt

figure(figsize=(12, 5), dpi=80, linewidth=10)
plt.plot(passenger['Date'], passenger['Passengers'])
plt.title('Air Passengers Raw Data with Missing Values')
plt.xlabel('Years', fontsize=14)
plt.ylabel('Number of Passengers', fontsize=14)
plt.show()

让我们看看以上三个方法的结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
passenger[‘Linear’] = passenger[‘Passengers’].interpolate(method=’linear’)
passenger[‘Spline order 3] = passenger[‘Passengers’].interpolate(method=’spline’, order=3)
passenger[‘Time’] = passenger[‘Passengers’].interpolate(method=’time’)

methods = ['Linear', 'Spline order 3', 'Time']

from matplotlib.pyplot import figure
import matplotlib.pyplot as plt
for method in methods:
  figure(figsize=(12, 4), dpi=80, linewidth=10)
  plt.plot(passenger["Date"], passenger[method])
  plt.title('Air Passengers Imputation using: ' + types)
  plt.xlabel("Years", fontsize=14)
  plt.ylabel("Number of Passengers", fontsize=14)
  plt.show()

所有的方法都给出了还不错的结果。当缺失值窗口(缺失数据的宽度)很小时,这些方法更有意义。但是如果丢失了几个连续的值,这些方法就更难估计它们。

时间序列去噪

时间序列中的噪声元素可能会导致严重问题,所以一般情况下在构建任何模型之前都会有去除噪声的操作。最小化噪声的过程称为去噪。以下是一些通常用于从时间序列中去除噪声的方法:

滚动平均值

滚动平均值是先前观察窗口的平均值,其中窗口是来自时间序列数据的一系列值。为每个有序窗口计算平均值。这可以极大地帮助最小化时间序列数据中的噪声。

让我们在谷歌股票价格上应用滚动平均值:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rolling_google = google_stock_price['Open'].rolling(20).mean()
plt.plot(google_stock_price['Date'], google_stock_price['Open'])
plt.plot(google_stock_price['Date'], rolling_google)
plt.xlabel('Date')
plt.ylabel('Stock Price')
plt.legend(['Open','Rolling Mean'])
plt.show()

傅里叶变换

傅里叶变换可以通过将时间序列数据转换到频域来帮助去除噪声,我们可以过滤掉噪声频率。然后应用傅里叶反变换得到滤波后的时间序列。我们用傅里叶变换来计算谷歌股票价格。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
denoised_google_stock_price = fft_denoiser(value, 0.001, True)
plt.plot(time, google_stock['Open'][0:300])
plt.plot(time, denoised_google_stock_price)
plt.xlabel('Date', fontsize = 13)
plt.ylabel('Stock Price', fontsize = 13)
plt.legend([‘Open’,’Denoised: 0.001'])
plt.show()

时间序列中的离群值检测

时间序列中的离群值是指趋势线的突然高峰或下降。导致离群值可能有多种因素。让我们看一下检测离群值的可用方法:

基于滚动统计的方法

这种方法最直观,适用于几乎所有类型的时间序列。在这种方法中,上限和下限是根据特定的统计量度创建的,例如均值和标准差、Z 和 T 分数以及分布的百分位数。例如,我们可以将上限和下限定义为:

取整个序列的均值和标准差是不可取的,因为在这种情况下,边界将是静态的。边界应该在滚动窗口的基础上创建,就像考虑一组连续的观察来创建边界,然后转移到另一个窗口。该方法是一种高效、简单的离群点检测方法。

孤立森林

顾名思义,孤立森林是一种基于决策树的异常检测机器学习算法。它通过使用决策树的分区隔离给定特征集上的数据点来工作。换句话说,它从数据集中取出一个样本,并在该样本上构建树,直到每个点都被隔离。为了隔离数据点,通过选择该特征的最大值和最小值之间的分割来随机进行分区,直到每个点都被隔离。特征的随机分区将为异常数据点在树中创建更短的路径,从而将它们与其余数据区分开来。

K-means 聚类

K-means 聚类是一种无监督机器学习算法,经常用于检测时间序列数据中的异常值。该算法查看数据集中的数据点,并将相似的数据点分组为 K 个聚类。通过测量数据点到其最近质心的距离来区分异常。如果距离大于某个阈值,则将该数据点标记为异常。K-Means 算法使用欧几里得距离进行比较。

可能的面试问题

如果一个人在简历中写了一个关于时间序列的项目,那么面试官可以从这个主题中提出这些可能的问题:

  • 预处理时间序列数据的方法有哪些,与标准插补方法有何不同?
  • 时间序列窗口是什么意思?
  • 你听说过孤立森林吗?如果是,那么你能解释一下它是如何工作的吗?
  • 什么是傅立叶变换,我们为什么需要它?
  • 填充时间序列数据中缺失值的不同方法是什么?

总结

在本文中,我们研究了一些常见的时间序列数据预处理技术。我们从排序时间序列观察开始;然后研究了各种缺失值插补技术。因为我们处理的是一组有序的观察结果,所以时间序列插补与传统插补技术不同。此外,还将一些噪声去除技术应用于谷歌股票价格数据集,最后讨论了一些时间序列的异常值检测方法。使用所有这些提到的预处理步骤可确保高质量数据,为构建复杂模型做好准备。

编辑:王菁

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-02-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据派THU 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
一文讲解Python时间序列数据的预处理
时间序列数据随处可见,要进行时间序列分析,我们必须先对数据进行预处理。时间序列预处理技术对数据建模的准确性有重大影响。
朱卫军 AI Python
2022/04/03
2.6K0
一文讲解Python时间序列数据的预处理
时间序列异常检测的方法总结
时间序列数据是按一定时间间隔记录的一系列观测结果。它经常在金融、天气预报、股票市场分析等各个领域遇到。分析时间序列数据可以提供有价值的见解,并有助于做出明智的决策。
算法进阶
2023/08/28
1.7K0
时间序列异常检测的方法总结
最完整的时间序列分析和预测(含实例及代码)
在生产和科学研究中,对某一个或者一组变量 进行观察测量,将在一系列时刻所得到的离散数字组成的序列集合,称之为时间序列。
润森
2022/09/22
4.2K0
最完整的时间序列分析和预测(含实例及代码)
时间序列基础教程总结!
最近在Kaggle发现了一个关于时间序列比较不错的kernal,决定翻译一下搬运过来,大家一起学习交流一下。如果预期不错的话准备写四章,分别是时间序列Python基本操作、统计分析、时间序列分解与随机游走、统计建模分析。
气象学家
2021/03/24
8410
最全总结【时间序列】时间序列的预处理和特征工程
时间序列(Time Series)是按时间顺序排列的一组数据点,通常用于描述和分析随时间变化的现象。时间序列数据在许多领域中都有广泛应用,如金融市场、气象学、经济学、医学等。
机器学习司猫白
2025/01/21
5320
最全总结【时间序列】时间序列的预处理和特征工程
股市预测,销量预测,病毒传播...一个时间序列建模套路搞定全部!⛵
我们在日常业务中遇到的很多问题,都可以归属到时间序列范畴内——股市涨跌变化、电商销量预测、传染病传播挖掘等,其实都可以用『时间序列』解决。
ShowMeAI
2022/08/09
7280
股市预测,销量预测,病毒传播...一个时间序列建模套路搞定全部!⛵
时间序列分析中的自相关
在时间序列分析中,我们经常通过对过去的理解来预测未来。为了使这个过程成功,我们必须彻底了解我们的时间序列,找到这个时间序列中包含的信息。
deephub
2023/01/18
1.2K0
时间序列预测全攻略(附带Python代码)
原文作者:AARSHAY JAIN 36大数据翻译,http://www.36dsj.com/archives/43811 时间序列(简称TS)被认为是分析领域比较少人知道的技能。(我也是几天前才知道它)。但是你一定知道最近的小型编程马拉松就是基于时间序列发展起来的,我参加了这项活动去学习了解决时间序列问题的基本步骤,在这儿我要分享给大家。这绝对能帮助你在编程马拉松中获得一个合适的模型。 文章之前,我极力推荐大家阅读《基于R语言的时间序列建模完整教程》A Complete Tutorial on Ti
机器学习AI算法工程
2018/03/13
15K0
时间序列预测全攻略(附带Python代码)
审稿人:拜托,请把模型时间序列去趋势!!
时间序列分析是数据科学中一个重要的领域。通过对时间序列数据的分析,我们可以从数据中发现规律、预测未来趋势以及做出决策。无论是股票市场的走势,还是气象数据的变化,都涉及到时间序列分析
算法金
2024/06/20
8250
审稿人:拜托,请把模型时间序列去趋势!!
在Python中使用LSTM和PyTorch进行时间序列预测
顾名思义,时间序列数据是一种随时间变化的数据类型。例如,24小时内的温度,一个月内各种产品的价格,一年中特定公司的股票价格。诸如长期短期记忆网络(LSTM)之类的高级深度学习模型能够捕获时间序列数据中的模式,因此可用于对数据的未来趋势进行预测。在本文中,您将看到如何使用LSTM算法使用时间序列数据进行将来的预测。
用户7886150
2021/01/19
2.3K0
【数据挖掘 | 数据预处理】缺失值处理 & 重复值处理 & 文本处理 确定不来看看?
🙋‍♂️声明:本人目前大学就读于大二,研究兴趣方向人工智能&硬件(虽然硬件还没开始玩,但一直很感兴趣!希望大佬带带)
计算机魔术师
2023/10/30
5550
用python做时间序列预测十:时间序列实践-航司乘客数预测
陆陆续续写了10篇时间序列相关的文章了,本系列主要是应用为主,包括初识概念、时间序列数据可视化、时间序列分解、平稳/非平稳时间序列、时间序列缺失值处理、相关函数图/偏相关函数图/滞后图、时间序列复杂度量化、Granger causality test(格兰杰因果检验)、ARIMA模型简介、时间序列实践-航司乘客数预测。 暂时先记录到这里,后续应该还会补充一些,比如基于深度学习的时间序列预测等。
程序员一一涤生
2020/06/16
4K0
干货 | 20个教程,掌握时间序列的特征分析(附代码)
【导语】时间序列是指以固定时间为间隔的序列值。本篇教程将教大家用 Python 对时间序列进行特征分析。
AI科技大本营
2019/07/11
6.1K0
干货 | 20个教程,掌握时间序列的特征分析(附代码)
用Python进行时间序列分解和预测
本文介绍了用Python进行时间序列分解的不同方法,以及如何在Python中进行时间序列预测的一些基本方法和示例。
Datawhale
2021/01/07
3.8K0
用Python进行时间序列分解和预测
Python时间序列分析苹果股票数据:分解、平稳性检验、滤波器、滑动窗口平滑、移动平均、可视化
时间序列是一系列按时间顺序排列的观测数据。数据序列可以是等间隔的,具有特定频率,也可以是不规则间隔的,比如电话通话记录。
拓端
2023/09/04
7370
Pandas数据应用:时间序列预测
时间序列预测是数据分析领域中一个非常重要的课题,它涉及到对未来某一时刻的数据进行预测。Pandas 是 Python 中用于数据处理和分析的强大库,提供了许多便捷的函数来处理时间序列数据。本文将由浅入深地介绍如何使用 Pandas 进行时间序列预测,常见问题及报错,并提供解决方案。
Jimaks
2025/01/12
3310
Pandas数据应用:股票数据分析
在当今的金融领域,股票市场是一个复杂且动态的系统。每天都有大量的交易发生,这些交易记录了价格、成交量等信息。对于投资者和分析师来说,如何从海量的数据中提取有用的信息是至关重要的。Pandas作为一个强大的Python库,在处理结构化数据方面表现出色,它为股票数据分析提供了便捷的方法。
Jimaks
2024/12/29
2900
使用递归图 recurrence plot 表征时间序列
在本文中,我将展示如何使用递归图 Recurrence Plots 来描述不同类型的时间序列。我们将查看具有500个数据点的各种模拟时间序列。我们可以通过可视化时间序列的递归图并将其与其他已知的不同时间序列的递归图进行比较,从而直观地表征时间序列。
deephub
2023/11/09
5810
使用递归图 recurrence plot 表征时间序列
创美时间序列【Python 可视化之道】
时间序列数据在许多领域中都是常见的,包括金融、气象、股票市场等。通过可视化这些时间序列数据,我们可以更直观地理解数据的趋势、周期性和异常情况。Python提供了许多强大的可视化库,如Matplotlib、Seaborn和Plotly,可以帮助我们创建漂亮的时间序列图表。本文将介绍如何使用这些库来可视化时间序列数据。
一键难忘
2024/07/08
2110
Python数据分析与实战挖掘
基础篇 书推荐:《用python做科学计算》 扩展库 简介 Numpy数组支持,以及相应的高效处理函数 Scipy矩阵支持,以及相应的矩阵数值计算模块 Matplotlib强大的数据可视化工具、作图库 Pandas强大、灵活的数据分析和探索工具 StatsModels 统计建模和计量经济学,包括描述统计、统计模型估计和推断 Scikit-Learn支持回归、分类、聚类等的强大机器学习库 Keras深度学习库,用于建立神经网络以及深度学习模型 Gensim 文本主题模型的库,文本挖掘用 ----- 贵阳大
企鹅号小编
2018/02/07
3.8K0
Python数据分析与实战挖掘
推荐阅读
相关推荐
一文讲解Python时间序列数据的预处理
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档