時間序列重要功能
時間序列程式庫提供單變量、多變量、多索引鍵時間序列以及數值和種類類型的各種函數。
該程式庫提供的功能大體上可分類為:
- 時間序列 I/O,用於建立及儲存時間序列資料
- 時間序列函數、轉換、視窗作業或分段,以及縮減器
- 時間序列 SQL 及對 Spark 的 SQL 延伸,以允許執行可調式時間序列函數
下列小節透過使用範例顯示了一些關鍵功能。
時間序列 I/O
時間序列的主要輸入及輸出功能透過 pandas DataFrame 或 Python 清單來實現。 下列程式碼範例顯示從 DataFrame 建構時間序列:
>>> import numpy as np
>>> import pandas as pd
>>> data = np.array([['', 'key', 'timestamp', "value"],['', "a", 1, 27], ['', "b", 3, 4], ['', "a", 5, 17], ['', "a", 3, 7], ['', "b", 2, 45]])
>>> df = pd.DataFrame(data=data[1:, 1:], index=data[1:, 0], columns=data[0, 1:]).astype(dtype={'key': 'object', 'timestamp': 'int64', 'value': 'float64'})
>>> df
key timestamp value
a 1 27.0
b 3 4.0
a 5 17.0
a 3 7.0
b 2 45.0
#Create a timeseries from a dataframe, providing a timestamp and a value column
>>> ts = tspy.time_series(df, ts_column="timestamp", value_column="value")
>>> ts
TimeStamp: 1 Value: 27.0
TimeStamp: 2 Value: 45.0
TimeStamp: 3 Value: 4.0
TimeStamp: 3 Value: 7.0
TimeStamp: 5 Value: 17.0
若要從時間序列回復回 pandas DataFrame,請使用 to_df
函數:
>>> import tspy
>>> ts_orig = tspy.time_series([1.0, 2.0, 3.0])
>>> ts_orig
TimeStamp: 0 Value: 1
TimeStamp: 1 Value: 2
TimeStamp: 2 Value: 3
>>> df = ts_orig.to_df()
>>> df
timestamp value
0 0 1
1 1 2
2 2 3
資料模型
與 Open Geospatial Consortium (OGC) 等標準所控管的一些資料類型(如空間)不同,時間序列資料對於模型及資料類型沒有任何標準。 時間序列資料的挑戰在於需要支援各種函數,這一點與「Spark 彈性分散式資料集 (RDD)」的函數類似。
資料模型容許各種作業,其中涵蓋不同形式的時間序列分段或視窗化、一個時間序列到另一個時間序列的轉換、用於從時間序列計算靜態值的縮減器、用於結合多個時間序列的結合,以及來自不同時區的時間序列的收集器。 時間序列程式庫支援新函數的隨插即用,同時保持核心資料結構不變。 該程式庫還支援數值及種類類型的時間序列。
藉由時區及各種人類可讀時間格式,資料模型的一個關鍵方面是支援「時間參照系統 (TRS)」。 每個時間序列皆與一個 TRS(系統預設值)相關聯,可以隨時將其重新對映至使用者的任何特定選項,從而實現特定時間序列或時間序列區段的輕鬆轉換。 請參閱使用時間參照系統。
此外,由於需要處理大規模時間序列,該程式庫透過提供用於識別最大窄時間相依關係的機制來提供惰性求值建構。 此建構與 Spark 計算圖的建構非常類似,後者還會視需要將資料載入至記憶體,並僅在需要時才實現計算。
時間序列資料類型
您可以使用多個資料類型作為時間序列、跨距數值、種類、陣列及字典資料結構的元素。
時間序列中支援下列資料類型:
資料類型 | 說明 |
---|---|
數值 | 具有數值類型(包括倍精準數及整數)的單變量觀察值的時間序列。 例如:[(1, 7.2), (3, 4.5), (5, 4.5), (5, 4.6), (5, 7.1), (7, 3.9), (9, 1.1)] |
數值陣列 | 具有數值類型(包括倍精準數陣列及整數陣列)的多變量觀察值的時間序列。 例如:[(1, [7.2, 8.74]), (3, [4.5, 9.44]), (5, [4.5, 10.12]), (5, [4.6, 12.91]), (5, [7.1, 9.90]), (7, [3.9, 3.76])] |
字串 | 具有字串類型的單變量觀察值的時間序列,例如: [(1, "a"), (3, "b"), (5, "c"), (5, "d"), (5, "e"), (7, "f"), (9, "g")] |
字串陣列 | 具有字串陣列類型的多變量觀察值的時間序列,例如: [(1, ["a", "xq"]), (3, ["b", "zr"]), (5, ["c", "ms"]), (5, ["d", "rt"]), (5, ["e", "wu"]), (7, ["f", "vv"]), (9, ["g", "zw"])] |
區段 | 區段的時間序列。 segmentBy 函數的輸出可以是任何類型,包括數值、字串、數值陣列及字串陣列。 例如:[(1,[(1, 7.2), (3, 4.5)]), (5,[(5, 4.5), (5, 4.6), (5, 7.1)]), (7,[(7, 3.9), (9, 1.1)])] |
字典 | 字典的時間序列。 字典可以包含任意類型 |
時間序列函數
您可以使用所提供時間序列套件中的不同函數來分析時間序列,以擷取有意義的資訊,使用該資訊來建立可用於根據先前觀察到的值預測新值的模型。 請參閱時間序列函數。
進一步瞭解
若要使用 tspy
Python SDK ,請參閱 tspy
Python SDK 文件。
上層主題: 時間序列分析