0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用RAPID cuDF處理時(shí)間序列數(shù)據(jù)的常見步驟

jf_pJlTbmA9 ? 來源:NVIDIA ? 作者:NVIDIA ? 2023-07-05 16:30 ? 次閱讀

這篇文章是 加速數(shù)據(jù)分析系列文章的一部分:

加速數(shù)據(jù)分析:使用 RAPID cuDF 加速數(shù)據(jù)探索討論了 pandas 庫(kù)如何在 Python 中提供高效、富有表現(xiàn)力的函數(shù)。

本文將帶您了解使用 RAPID cuDF 處理時(shí)間序列數(shù)據(jù)的常見步驟

由于標(biāo)準(zhǔn)探索性數(shù)據(jù)分析( EDA )工作流程通常局限于單個(gè)核心,因此它得益于 RAPIDS cuDF 的加速計(jì)算,這是一個(gè)具有 pandas 類接口的加速數(shù)據(jù)分析庫(kù)。眾所周知,時(shí)間序列數(shù)據(jù)需要額外的數(shù)據(jù)處理,這會(huì)增加工作流程的時(shí)間和復(fù)雜性,使其成為利用 RAPIDS 的另一個(gè)很好的用例。

使用 RAPIDS cuDF ,您可以加快對(duì)不太大也不太小的“金發(fā)姑娘”數(shù)據(jù)集的時(shí)間序列處理。這些數(shù)據(jù)集在 pandas 上很繁重,但不需要像 Apache Spark 或 Dask 這樣的完全分布式計(jì)算工具。

什么是時(shí)間序列數(shù)據(jù)?

本節(jié)介紹了依賴時(shí)間序列數(shù)據(jù)的 機(jī)器學(xué)習(xí)( ML )用例,以及何時(shí)考慮加速數(shù)據(jù)處理。

時(shí)間序列數(shù)據(jù)無處不在。時(shí)間戳在許多類型的數(shù)據(jù)源中都是一個(gè)變量,從天氣測(cè)量和資產(chǎn)定價(jià)到產(chǎn)品購(gòu)買信息等等。

時(shí)間戳具有所有級(jí)別的粒度,例如毫秒讀數(shù)或月讀數(shù)。當(dāng)時(shí)間戳數(shù)據(jù)最終被用于復(fù)雜建模時(shí),它就變成了時(shí)間序列數(shù)據(jù),對(duì)其他變量進(jìn)行索引,使模式變得可觀察。

以下流行的 ML 用例在很大程度上依賴于時(shí)間序列數(shù)據(jù),還有更多的依賴:

金融服務(wù)業(yè)欺詐異常檢測(cè)

零售業(yè)的預(yù)測(cè)分析

用于天氣預(yù)報(bào)的傳感器讀數(shù)

內(nèi)容建議推薦系統(tǒng)

復(fù)雜的建模用例通常需要處理具有高分辨率歷史數(shù)據(jù)的大型數(shù)據(jù)集,這些數(shù)據(jù)可能跨越數(shù)年至數(shù)十年,還需要處理實(shí)時(shí)流數(shù)據(jù)。時(shí)間序列數(shù)據(jù)需要經(jīng)過轉(zhuǎn)換,例如向上和向下重新采樣數(shù)據(jù),以使數(shù)據(jù)集之間的時(shí)間段一致,并被平滑到滾動(dòng)窗口中,以消除模式噪聲。

pandas 提供了簡(jiǎn)單、富有表現(xiàn)力的功能來管理這些操作,但您可能在自己的工作中觀察到,單線程設(shè)計(jì)很快就會(huì)被所需的處理量所淹沒。這尤其適用于需要快速數(shù)據(jù)處理周轉(zhuǎn)的大型數(shù)據(jù)集或用例,而時(shí)間序列分析用例通常會(huì)這樣做。 pandas 處理數(shù)據(jù)的后續(xù)等待時(shí)間可能會(huì)令人沮喪,并可能導(dǎo)致見解延遲。

因此,這些場(chǎng)景使 cuDF 非常適合時(shí)間序列數(shù)據(jù)分析。使用類似 pandas 的 API ,您可以以高達(dá) 40 倍的速度處理數(shù)十 GB 的數(shù)據(jù),從而節(jié)省任何數(shù)據(jù)項(xiàng)目中最有價(jià)值的資產(chǎn):您的時(shí)間。

RAPIDS cuDF 的時(shí)間序列

為了展示 RAPIDS cuDF 加速探索數(shù)據(jù)的好處,以及它是如何被輕易采用的,本文介紹了 Time Series Data Analysis 中的一個(gè)子集時(shí)間序列處理操作。這是一個(gè)強(qiáng)大的筆記本分析,對(duì) RAPIDS GitHub 存儲(chǔ)庫(kù)中公開的真實(shí)天氣讀數(shù)數(shù)據(jù)集進(jìn)行了分析。

在完整的分析中, RAPIDS cuDF 以 13 倍的加速執(zhí)行(有關(guān)確切數(shù)字,請(qǐng)參閱本文后面的基準(zhǔn)測(cè)試部分)。加速通常會(huì)隨著整個(gè)工作流程變得更加復(fù)雜而增加。

從現(xiàn)實(shí)世界中推斷,這種收益具有真正的影響。當(dāng)一個(gè)小時(shí)的工作量可以在 5 分鐘內(nèi)完成時(shí),你就可以有意義地為一天增加時(shí)間。

數(shù)據(jù)集

Meteonet 是一個(gè)現(xiàn)實(shí)的天氣數(shù)據(jù)集,它匯集了 2016-2018 年巴黎各地氣象站的讀數(shù),包括缺失和無效的數(shù)據(jù)。它的大小約為 12.5 GB 。

分析方法

對(duì)于這篇文章,假設(shè)你是一名數(shù)據(jù)科學(xué)家,第一次收到這些匯總數(shù)據(jù),必須為氣象用例做好準(zhǔn)備。具體的用例是開放式的:它可以是氣候模型中的預(yù)測(cè)、報(bào)告或輸入。

當(dāng)你回顧這篇文章時(shí),大多數(shù)功能應(yīng)該都很熟悉,因?yàn)樗鼈兊脑O(shè)計(jì)類似于 pandas 中的操作。此分析旨在執(zhí)行以下任務(wù):

格式化數(shù)據(jù)幀。

重新對(duì)時(shí)間序列進(jìn)行采樣。

運(yùn)行滾動(dòng)窗口分析。

這篇文章忽略了筆記本 Time Series Data Analysis Using cuDF . 中演示的端到端工作流程中解決的幾個(gè)數(shù)據(jù)不一致

步驟 1. 格式化數(shù)據(jù)幀

首先,使用以下命令導(dǎo)入此分析中使用的包:

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

接下來,讀取 CSV 數(shù)據(jù)。

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

首先關(guān)注感興趣的氣象參數(shù):風(fēng)速、溫度和濕度。

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

隔離感興趣的參數(shù)后,執(zhí)行一系列快速檢查。通過將日期列轉(zhuǎn)換為日期時(shí)間數(shù)據(jù)類型來啟動(dòng)第一次轉(zhuǎn)換。然后,打印出前五行,以可視化您正在處理的內(nèi)容,并評(píng)估表格數(shù)據(jù)集的大小。

# 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 。顯示數(shù)據(jù)集前五行的輸出結(jié)果

輸出

DataFrame 形狀( 127515796 , 8 )顯示 12751579 六行乘八列?,F(xiàn)在已經(jīng)知道了數(shù)據(jù)集的大小和形狀,您可以開始更深入地研究數(shù)據(jù)采樣的頻率。

## 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")

數(shù)據(jù)集涵蓋了從2016-01-01T00:00:00.000000000到2018-12-31T23:54:00.000000000的傳感器讀數(shù),采樣間隔為 6 分鐘。確認(rèn)數(shù)據(jù)集中表示了預(yù)期的日期和時(shí)間。

在完成對(duì)數(shù)據(jù)集的基本審查后,開始使用特定于時(shí)間序列的格式。首先將時(shí)間增量分隔成單獨(dú)的列。

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

現(xiàn)在,數(shù)據(jù)在年末被分為年、月和日的列。這使得以不同的增量對(duì)數(shù)據(jù)進(jìn)行切片要簡(jiǎn)單得多。

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 。以時(shí)間增量分隔為列的輸出結(jié)果

通過選擇要分析的特定時(shí)間范圍和電臺(tái),對(duì)更新后的 DataFrame 進(jìn)行實(shí)驗(yàn)。

# 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 已成功準(zhǔn)備,包含 13 個(gè)變量和 146039 行。

步驟 2. 對(duì)時(shí)間序列重新采樣

現(xiàn)在已經(jīng)設(shè)置了 DataFrame ,運(yùn)行一個(gè)簡(jiǎn)單的重新采樣操作。盡管數(shù)據(jù)每 6 分鐘更新一次,但在這種情況下,必須對(duì)數(shù)據(jù)進(jìn)行整形,使其進(jìn)入日常節(jié)奏。

首先將日期設(shè)置為索引,以便其余變量隨時(shí)間調(diào)整。每 6 分鐘對(duì)樣本中的數(shù)據(jù)進(jìn)行一次下采樣,每天一個(gè)記錄,每天為每個(gè)變量生成一個(gè)記錄。保留每天每個(gè)變量的最大值作為當(dāng)天的記錄。

## 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()

數(shù)據(jù)現(xiàn)在以每日增量提供。請(qǐng)參閱該表以檢查操作是否產(chǎn)生了所需的結(jié)果。

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 。下采樣數(shù)據(jù)集的前五行的輸出

步驟 3. 運(yùn)行滾動(dòng)窗口分析

在上一個(gè)重新采樣示例中,點(diǎn)是基于時(shí)間進(jìn)行采樣的。但是,也可以使用滾動(dòng)窗口根據(jù)頻率平滑數(shù)據(jù)。

在下面的示例中,在數(shù)據(jù)上取一個(gè)長(zhǎng)度為三的滾動(dòng)窗口。再次,保留每個(gè)變量的最大值。

# 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()

滾動(dòng)窗口可用于對(duì)數(shù)據(jù)進(jìn)行去噪,并評(píng)估數(shù)據(jù)隨時(shí)間的穩(wěn)定性。

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]

這篇文章向您介紹了時(shí)間序列數(shù)據(jù)處理的常見步驟。雖然以天氣數(shù)據(jù)集為例,但這些步驟適用于所有形式的時(shí)間序列數(shù)據(jù)。該過程與您現(xiàn)在的時(shí)間序列分析代碼類似。

性能加速

當(dāng)使用 Meteonet 天氣數(shù)據(jù)集運(yùn)行完整的筆記本電腦時(shí),我們使用 RAPIDS 23.02 在 NVIDIA RTX A6000 GPU 上實(shí)現(xiàn)了 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 倍加速效果

主要收獲

時(shí)間序列分析是分析的核心部分,與其他變量相比,它需要額外的處理。使用 RAPIDS cuDF ,您可以更快地管理處理步驟,并使用您習(xí)慣的 pandas 功能縮短洞察時(shí)間。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • NVIDIA
    +關(guān)注

    關(guān)注

    14

    文章

    4793

    瀏覽量

    102429
  • AI
    AI
    +關(guān)注

    關(guān)注

    87

    文章

    28877

    瀏覽量

    266237
  • 數(shù)據(jù)分析
    +關(guān)注

    關(guān)注

    2

    文章

    1393

    瀏覽量

    33909
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于溫度數(shù)據(jù)集的時(shí)間序列預(yù)測(cè)實(shí)戰(zhàn)

    本文主要介紹時(shí)間序列預(yù)測(cè)并描述任何時(shí)間序列的兩種主要模式(趨勢(shì)和季節(jié)性)。并基于這些模式對(duì)時(shí)間序列
    發(fā)表于 10-24 14:40 ?1573次閱讀

    【「時(shí)間序列與機(jī)器學(xué)習(xí)」閱讀體驗(yàn)】全書概覽與時(shí)間序列概述

    他領(lǐng)域(如自然語言處理、計(jì)算機(jī)視覺等)的關(guān)聯(lián)。 ●第2章“時(shí)間序列的信息提取”:介紹特征工程的核心概念及其在時(shí)間序列分析中的廣用,比如對(duì)原始
    發(fā)表于 08-07 23:03

    【《時(shí)間序列與機(jī)器學(xué)習(xí)》閱讀體驗(yàn)】+ 了解時(shí)間序列

    收到《時(shí)間序列與機(jī)器學(xué)習(xí)》一書,彩色印刷,公式代碼清晰,非常精美。感謝作者,感謝電子發(fā)燒友提供了一個(gè)讓我學(xué)習(xí)時(shí)間序列及應(yīng)用的機(jī)會(huì)! 前言第一段描述了編寫背景: 由此可知,這是一本關(guān)于
    發(fā)表于 08-11 17:55

    【《時(shí)間序列與機(jī)器學(xué)習(xí)》閱讀體驗(yàn)】+ 時(shí)間序列的信息提取

    利用這些信息來建立時(shí)間序列模型,可見信息提取是一個(gè)關(guān)鍵的步驟。 本章第一小節(jié)直接引入了特征工程定義: 特征工程(Feature Engineering)是將數(shù)據(jù)轉(zhuǎn)換為更好地表示潛在問題的特征,從而
    發(fā)表于 08-14 18:00

    時(shí)間序列數(shù)據(jù)處理

    常見的時(shí)序數(shù)據(jù)包括,股票價(jià)格、廣告數(shù)據(jù)、氣溫變化、網(wǎng)站的PV/UV、個(gè)人健康數(shù)據(jù)、工業(yè)傳感器數(shù)據(jù)、服務(wù)器系統(tǒng)監(jiān)控
    發(fā)表于 05-30 16:08

    介紹有關(guān)時(shí)間序列預(yù)測(cè)和時(shí)間序列分類

    通過之前有關(guān)LSTM的8遍基礎(chǔ)教程和10篇處理時(shí)間序列預(yù)測(cè)任務(wù)的教程介紹,使用簡(jiǎn)單的序列數(shù)據(jù)示例,已經(jīng)把LSTM的原理,
    發(fā)表于 07-12 09:18

    科學(xué)數(shù)據(jù)時(shí)間序列的預(yù)測(cè)方法

    針對(duì)傳統(tǒng)的時(shí)間序列分析方法預(yù)測(cè)科學(xué)數(shù)據(jù)效果較差的特點(diǎn),提出了一種結(jié)合自組織神經(jīng)網(wǎng)絡(luò)和灰色理論的時(shí)間序列預(yù)測(cè)方法。該方法利用度量
    發(fā)表于 12-31 23:56 ?10次下載

    基于序列重要點(diǎn)的時(shí)間序列分割

    時(shí)間序列包含的數(shù)據(jù)量大、維數(shù)高、數(shù)據(jù)更新快,很難直接在原始時(shí)間序列上進(jìn)行數(shù)據(jù)挖掘。該文提出一種基
    發(fā)表于 04-09 09:05 ?26次下載

    時(shí)間序列小波分析的操作步驟及實(shí)例分析

    時(shí)間序列(Time Series)是地學(xué)研究中經(jīng)常遇到的問題。在時(shí)間序列研究中,時(shí)域和頻域是常用的兩種基本形式。其中,時(shí)域分析具有時(shí)間定位能
    發(fā)表于 11-15 10:45 ?6.8w次閱讀
    <b class='flag-5'>時(shí)間</b><b class='flag-5'>序列</b>小波分析的操作<b class='flag-5'>步驟</b>及實(shí)例分析

    流式時(shí)間序列的實(shí)時(shí)相似度研究

    時(shí)間序列是一種常見的與時(shí)間有關(guān)的數(shù)據(jù),流式時(shí)間序列
    發(fā)表于 11-20 10:30 ?9次下載
    流式<b class='flag-5'>時(shí)間</b><b class='flag-5'>序列</b>的實(shí)時(shí)相似度研究

    基于導(dǎo)數(shù)序列時(shí)間序列同構(gòu)關(guān)系

    時(shí)間序列同構(gòu)關(guān)系,經(jīng)過數(shù)學(xué)推導(dǎo)給出了時(shí)間序列同構(gòu)關(guān)系判定的法則,并基于此提出了同構(gòu)關(guān)系時(shí)間序列
    發(fā)表于 12-12 15:52 ?0次下載
    基于導(dǎo)數(shù)<b class='flag-5'>序列</b>的<b class='flag-5'>時(shí)間</b><b class='flag-5'>序列</b>同構(gòu)關(guān)系

    小波回聲狀態(tài)網(wǎng)絡(luò)的時(shí)間序列預(yù)測(cè)

    為了更好的對(duì)具有多尺度特性的時(shí)間序列進(jìn)行預(yù)測(cè),運(yùn)用小波分析方法與回聲狀態(tài)網(wǎng)絡(luò)模型相結(jié)合來創(chuàng)建小波回聲狀態(tài)網(wǎng)絡(luò)預(yù)測(cè)模型。利用小波方法對(duì)原始時(shí)間序列進(jìn)行
    發(fā)表于 01-13 11:40 ?0次下載
    小波回聲狀態(tài)網(wǎng)絡(luò)的<b class='flag-5'>時(shí)間</b><b class='flag-5'>序列</b>預(yù)測(cè)

    矩陣弧微分的時(shí)間序列相似度量

    在原始時(shí)間序列上進(jìn)行數(shù)據(jù)分析、處理和挖掘變得非常困難,因此在對(duì)時(shí)間序列挖掘之前進(jìn)行有效的預(yù)處理
    發(fā)表于 04-24 10:29 ?11次下載

    時(shí)間序列分析的定義

    01 時(shí)間序列分析的定義 1.1 概念 首先,時(shí)間序列定義為在一定時(shí)間間隔內(nèi)按時(shí)間順序測(cè)量的某個(gè)
    的頭像 發(fā)表于 03-16 16:17 ?5338次閱讀

    如何在Python中提供高效、富有表現(xiàn)力的函數(shù)

    加速數(shù)據(jù)分析:使用 RAPID cuDF 加速數(shù)據(jù)探索
    的頭像 發(fā)表于 07-05 16:30 ?269次閱讀
    如何在Python中提供高效、富有表現(xiàn)力的函數(shù)