0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用RAPID cuDF处理时间序列数据的常见步骤

jf_pJlTbmA9 来源:NVIDIA 作者:NVIDIA 2023-07-05 16:30 次阅读

这篇文章是 加速数据分析系列文章的一部分:

加速数据分析:使用 RAPID cuDF 加速数据探索讨论了 pandas 库如何在 Python 中提供高效、富有表现力的函数。

本文将带您了解使用 RAPID cuDF 处理时间序列数据的常见步骤

由于标准探索性数据分析( EDA )工作流程通常局限于单个核心,因此它得益于 RAPIDS cuDF 的加速计算,这是一个具有 pandas 类接口的加速数据分析库。众所周知,时间序列数据需要额外的数据处理,这会增加工作流程的时间和复杂性,使其成为利用 RAPIDS 的另一个很好的用例。

使用 RAPIDS cuDF ,您可以加快对不太大也不太小的“金发姑娘”数据集的时间序列处理。这些数据集在 pandas 上很繁重,但不需要像 Apache Spark 或 Dask 这样的完全分布式计算工具。

什么是时间序列数据?

本节介绍了依赖时间序列数据的 机器学习( ML )用例,以及何时考虑加速数据处理。

时间序列数据无处不在。时间戳在许多类型的数据源中都是一个变量,从天气测量和资产定价到产品购买信息等等。

时间戳具有所有级别的粒度,例如毫秒读数或月读数。当时间戳数据最终被用于复杂建模时,它就变成了时间序列数据,对其他变量进行索引,使模式变得可观察。

以下流行的 ML 用例在很大程度上依赖于时间序列数据,还有更多的依赖:

金融服务业欺诈异常检测

零售业的预测分析

用于天气预报的传感器读数

内容建议推荐系统

复杂的建模用例通常需要处理具有高分辨率历史数据的大型数据集,这些数据可能跨越数年至数十年,还需要处理实时流数据。时间序列数据需要经过转换,例如向上和向下重新采样数据,以使数据集之间的时间段一致,并被平滑到滚动窗口中,以消除模式噪声。

pandas 提供了简单、富有表现力的功能来管理这些操作,但您可能在自己的工作中观察到,单线程设计很快就会被所需的处理量所淹没。这尤其适用于需要快速数据处理周转的大型数据集或用例,而时间序列分析用例通常会这样做。 pandas 处理数据的后续等待时间可能会令人沮丧,并可能导致见解延迟。

因此,这些场景使 cuDF 非常适合时间序列数据分析。使用类似 pandas 的 API ,您可以以高达 40 倍的速度处理数十 GB 的数据,从而节省任何数据项目中最有价值的资产:您的时间。

RAPIDS cuDF 的时间序列

为了展示 RAPIDS cuDF 加速探索数据的好处,以及它是如何被轻易采用的,本文介绍了 Time Series Data Analysis 中的一个子集时间序列处理操作。这是一个强大的笔记本分析,对 RAPIDS GitHub 存储库中公开的真实天气读数数据集进行了分析。

在完整的分析中, RAPIDS cuDF 以 13 倍的加速执行(有关确切数字,请参阅本文后面的基准测试部分)。加速通常会随着整个工作流程变得更加复杂而增加。

从现实世界中推断,这种收益具有真正的影响。当一个小时的工作量可以在 5 分钟内完成时,你就可以有意义地为一天增加时间。

数据集

Meteonet 是一个现实的天气数据集,它汇集了 2016-2018 年巴黎各地气象站的读数,包括缺失和无效的数据。它的大小约为 12.5 GB 。

分析方法

对于这篇文章,假设你是一名数据科学家,第一次收到这些汇总数据,必须为气象用例做好准备。具体的用例是开放式的:它可以是气候模型中的预测、报告或输入。

当你回顾这篇文章时,大多数功能应该都很熟悉,因为它们的设计类似于 pandas 中的操作。此分析旨在执行以下任务:

格式化数据帧。

重新对时间序列进行采样。

运行滚动窗口分析。

这篇文章忽略了笔记本 Time Series Data Analysis Using cuDF . 中演示的端到端工作流程中解决的几个数据不一致

步骤 1. 格式化数据帧

首先,使用以下命令导入此分析中使用的包:

# Import the necessary packages
import cudf
import cupy as cp
import pandas as pd

接下来,读取 CSV 数据。

## Read in data
gdf = cudf.read_csv('./SE_data.csv')

首先关注感兴趣的气象参数:风速、温度和湿度。

gdf = gdf.drop(columns=['dd','precip','td','psl'])

隔离感兴趣的参数后,执行一系列快速检查。通过将日期列转换为日期时间数据类型来启动第一次转换。然后,打印出前五行,以可视化您正在处理的内容,并评估表格数据集的大小。

# Change the date column to the datetime data type. Look at the DataFrame info
gdf['date'] = cudf.to_datetime(gdf['date'])
gdf.head()
Gdf.shape

number_sta lat lon height_sta date ff hu t
0 1027003 45.83 5.11 196.0 2016-01-01 98.0 279.05
1 1033002 46.09 5.81 350.0 2016-01-01 0.0 99.0 278.35
2 1034004 45.77 5.69 330.0 2016-01-01 0.0 100.0 279.15
3 1072001 46.20 5.29 260.0 2016-01-01 276.55
4 1089001 45.98 5.33 252.0 2016-01-01 0.0 95.0 279.55

表 1 。显示数据集前五行的输出结果

输出

DataFrame 形状( 127515796 , 8 )显示 12751579 六行乘八列。现在已经知道了数据集的大小和形状,您可以开始更深入地研究数据采样的频率。

## Investigate the sampling frequency with the diff() function to calculate the time diff
## dt.seconds, which is used to find the seconds value in the datetime frame. Then apply the 
## max() function to calculate the maximum date value of the series.
delta_mins = gdf['date'].diff().dt.seconds.max()/60
print(f"The dataset collection covers from {gdf['date'].min()} to {gdf['date'].max()} with {delta_mins} minute sampling interval")

数据集涵盖了从2016-01-01T00:00:00.000000000到2018-12-31T23:54:00.000000000的传感器读数,采样间隔为 6 分钟。确认数据集中表示了预期的日期和时间。

在完成对数据集的基本审查后,开始使用特定于时间序列的格式。首先将时间增量分隔成单独的列。

gdf['year'] = gdf['date'].dt.year
gdf['month'] = gdf['date'].dt.month
gdf['day'] = gdf['date'].dt.day
gdf['hour'] = gdf['date'].dt.hour
gdf['mins'] = gdf['date'].dt.minute
gdf.tail

现在,数据在年末被分为年、月和日的列。这使得以不同的增量对数据进行切片要简单得多。

number_sta lat lon height_sta date ff hu t year month day hour mins
127515791 84086001 43.811 5.146 672.0 2018-12-31 23:54:00 3.7 85.0 276.95 2018 12 31 23 54
127515792 84087001 44.145 4.861 55.0 2018-12-31 23:54:00 11.4 80.0 281.05 2018 12 31 23 54
127515793 84094001 44.289 5.131 392.0 2018-12-31 23:54:00 3.6 68.0 280.05 2018 12 31 23 54
127515794 84107002 44.041 5.493 836.0 2018-12-31 23:54:00 0.6 91.0 270.85 2018 12 31 23 54
127515795 84150001 44.337 4.905 141.0 2018-12-31 23:54:00 6.7 84.0 280.45 2018 12 31 23 54

表 2 。以时间增量分隔为列的输出结果

通过选择要分析的特定时间范围和电台,对更新后的 DataFrame 进行实验。

# Use the cupy.logical_and(...) function to select the data from a specific time range.
import pandas as pd
start_time = pd.Timestamp('2017-02-01T00')
end_time = pd.Timestamp('2018-11-01T00')
station_id = 84086001
gdf_period = gdf.loc[cp.logical_and(cp.logical_and(gdf['date']>start_time,gdf['date']

DataFrame 已成功准备,包含 13 个变量和 146039 行。

步骤 2. 对时间序列重新采样

现在已经设置了 DataFrame ,运行一个简单的重新采样操作。尽管数据每 6 分钟更新一次,但在这种情况下,必须对数据进行整形,使其进入日常节奏。

首先将日期设置为索引,以便其余变量随时间调整。每 6 分钟对样本中的数据进行一次下采样,每天一个记录,每天为每个变量生成一个记录。保留每天每个变量的最大值作为当天的记录。

## Set "date" as the index. See what that does?
gdf_period.set_index("date", inplace=True)
## Now, resample by daylong intervals and check the max data during the resampled period. 
## Use .reset_index() to reset the index instead of date.
gdf_day_max = gdf_period.resample('D').max().bfill().reset_index()
gdf_day_max.head()

数据现在以每日增量提供。请参阅该表以检查操作是否产生了所需的结果。

date number_sta lat lon height_sta ff hu t year month day hour mins
0 2017-02-01 84086001 43.81 5.15 672.0 8.1 98.0 283.05 2017 2 1 23 54
1 2017-02-02 84086001 43.81 5.15 672.0 14.1 98.0 283.85 2017 2 2 23 54
2 2017-02-03 84086001 43.81 5.15 672.0 10.1 99.0 281.45 2017 2 3 23 54
3 2017-02-04 84086001 43.81 5.15 672.0 12.5 99.0 284.35 2017 2 4 23 54
4 2017-02-05 84086001 43.81 5.15 672.0 7.3 99.0 280.75 2017 2 5 23 54

表 3 。下采样数据集的前五行的输出

步骤 3. 运行滚动窗口分析

在上一个重新采样示例中,点是基于时间进行采样的。但是,也可以使用滚动窗口根据频率平滑数据。

在下面的示例中,在数据上取一个长度为三的滚动窗口。再次,保留每个变量的最大值。

# Specify the rolling window.
gdf_3d_max = gdf_day_max.rolling('3d',min_periods=1).max()
gdf_3d_max.reset_index(inplace=True)
gdf_3d_max.head()

滚动窗口可用于对数据进行去噪,并评估数据随时间的稳定性。

date number_sta lat lon height_sta ff hu t year month day hour mins
0 2017-02-01 84086001 43.81 5.15 672.0 8.1 98.0 283.05 2017 2 1 23 54
1 2017-02-02 84086001 43.81 5.15 672.0 14.1 98.0 283.85 2017 2 2 23 54
2 2017-02-03 84086001 43.81 5.15 672.0 14.1 99.0 283.85 2017 2 3 23 54
3 2017-02-04 84086001 43.81 5.15 672.0 14.1 99.0 283.35 2017 2 4 23 54
4 2017-02-05 84086001 43.81 5.15 672.0 12.5 99.0 283.35 2017 2 5 23 54

[体积x117]

这篇文章向您介绍了时间序列数据处理的常见步骤。虽然以天气数据集为例,但这些步骤适用于所有形式的时间序列数据。该过程与您现在的时间序列分析代码类似。

性能加速

当使用 Meteonet 天气数据集运行完整的笔记本电脑时,我们使用 RAPIDS 23.02 在 NVIDIA RTX A6000 GPU 上实现了 13 倍的加速(图 1 )。

benchmark-results-time-series-analysis-pandas-RAPIDS-cuDF.png [体积x118]

Pandas on CPU (Intel Core i7-7800X CPU) User: 2 min 32 sec
Sys: 27.3 sec
Total: 3 min
RAPIDS cuDF on NVIDIA A6000 GPUs User: 5.33 sec
Sys: 8.67 sec
Total: 14 sec

表 5 。性能比较显示完整笔记本电脑的 12.8 倍加速效果

主要收获

时间序列分析是分析的核心部分,与其他变量相比,它需要额外的处理。使用 RAPIDS cuDF ,您可以更快地管理处理步骤,并使用您习惯的 pandas 功能缩短洞察时间。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • NVIDIA
    +关注

    关注

    14

    文章

    4978

    浏览量

    102987
  • AI
    AI
    +关注

    关注

    87

    文章

    30728

    浏览量

    268886
  • 数据分析
    +关注

    关注

    2

    文章

    1445

    浏览量

    34050
收藏 人收藏

    评论

    相关推荐

    【「时间序列与机器学习」阅读体验】全书概览与时间序列概述

    他领域(如自然语言处理、计算机视觉等)的关联。 ●第2章“时间序列的信息提取”:介绍特征工程的核心概念及其在时间序列分析中的广用,比如对原始
    发表于 08-07 23:03

    【《时间序列与机器学习》阅读体验】+ 了解时间序列

    收到《时间序列与机器学习》一书,彩色印刷,公式代码清晰,非常精美。感谢作者,感谢电子发烧友提供了一个让我学习时间序列及应用的机会! 前言第一段描述了编写背景: 由此可知,这是一本关于
    发表于 08-11 17:55

    【《时间序列与机器学习》阅读体验】+ 时间序列的信息提取

    利用这些信息来建立时间序列模型,可见信息提取是一个关键的步骤。 本章第一小节直接引入了特征工程定义: 特征工程(Feature Engineering)是将数据转换为更好地表示潜在问题的特征,从而
    发表于 08-14 18:00

    时间序列数据处理

    常见的时序数据包括,股票价格、广告数据、气温变化、网站的PV/UV、个人健康数据、工业传感器数据、服务器系统监控
    发表于 05-30 16:08

    介绍有关时间序列预测和时间序列分类

    通过之前有关LSTM的8遍基础教程和10篇处理时间序列预测任务的教程介绍,使用简单的序列数据示例,已经把LSTM的原理,
    发表于 07-12 09:18

    科学数据时间序列的预测方法

    针对传统的时间序列分析方法预测科学数据效果较差的特点,提出了一种结合自组织神经网络和灰色理论的时间序列预测方法。该方法利用度量
    发表于 12-31 23:56 10次下载

    基于序列重要点的时间序列分割

    时间序列包含的数据量大、维数高、数据更新快,很难直接在原始时间序列上进行数据挖掘。该文提出一种基
    发表于 04-09 09:05 26次下载

    时间序列小波分析的操作步骤及实例分析

    时间序列(Time Series)是地学研究中经常遇到的问题。在时间序列研究中,时域和频域是常用的两种基本形式。其中,时域分析具有时间定位能
    发表于 11-15 10:45 6.8w次阅读
    <b class='flag-5'>时间</b><b class='flag-5'>序列</b>小波分析的操作<b class='flag-5'>步骤</b>及实例分析

    流式时间序列的实时相似度研究

    时间序列是一种常见的与时间有关的数据,流式时间序列
    发表于 11-20 10:30 9次下载
    流式<b class='flag-5'>时间</b><b class='flag-5'>序列</b>的实时相似度研究

    基于导数序列时间序列同构关系

    时间序列同构关系,经过数学推导给出了时间序列同构关系判定的法则,并基于此提出了同构关系时间序列
    发表于 12-12 15:52 0次下载
    基于导数<b class='flag-5'>序列</b>的<b class='flag-5'>时间</b><b class='flag-5'>序列</b>同构关系

    小波回声状态网络的时间序列预测

    为了更好的对具有多尺度特性的时间序列进行预测,运用小波分析方法与回声状态网络模型相结合来创建小波回声状态网络预测模型。利用小波方法对原始时间序列进行
    发表于 01-13 11:40 0次下载
    小波回声状态网络的<b class='flag-5'>时间</b><b class='flag-5'>序列</b>预测

    矩阵弧微分的时间序列相似度量

    在原始时间序列上进行数据分析、处理和挖掘变得非常困难,因此在对时间序列挖掘之前进行有效的预处理
    发表于 04-24 10:29 11次下载

    时间序列分析的定义

    01 时间序列分析的定义 1.1 概念 首先,时间序列定义为在一定时间间隔内按时间顺序测量的某个
    的头像 发表于 03-16 16:17 5615次阅读

    如何在Python中提供高效、富有表现力的函数

    加速数据分析:使用 RAPID cuDF 加速数据探索
    的头像 发表于 07-05 16:30 328次阅读
    如何在Python中提供高效、富有表现力的函数

    如何使用RNN进行时间序列预测

    一种强大的替代方案,能够学习数据中的复杂模式,并进行准确的预测。 RNN的基本原理 RNN是一种具有循环结构的神经网络,它能够处理序列数据。在RNN中,每个输入
    的头像 发表于 11-15 09:45 282次阅读