series_periods_detect()

尋找存在於時間序列中最重要的週期。

Syntax

series_periods_detect(系列,min_period,, max_periodnum_periods)

深入瞭解 語法慣例

參數

名稱 類型 必要 Description
系列 dynamic ✔️ 數值的陣列,通常是 make-seriesmake_list 運算子的結果輸出。
min_period real ✔️ 要搜尋的最小期間。
max_period real ✔️ 要搜尋的最大期間。
num_periods long ✔️ 期間數目上限。 該數字將是輸出動態陣列的長度。

重要

  • 演算法可偵測到的週期包含至少 4 個點,且長度最多為序列長度的一半。
  • min_period 設定在下方, max_period 您預期在時間序列中找到的期間稍多。 例如,如果您具有每小時的匯總信號,並同時查看每日和每週週期 (分別是 24 和 168 小時),您可以設定 min_period= 0.8 * 24,且 max_period= 1.2 * 168,並在這些週期內保留 20% 的邊界。
  • 輸入時間序列必須具一般性。 意即,如果輸入時間序列是使用 make-series 建立,則其一律會以常數 bin 進行彙總。 否則,輸出就沒有意義。

傳回

函式會輸出具有兩個資料列的數據表:

  • periods:動態陣列,包含找到的週期 (以 bin 大小為單位),其會以週期的分數進行排序。
  • scores:動態陣列,包含介於 0 和 1 之間的值。 每個陣列會在週期陣列中,測量週期在個別位置中的精確度。

範例

下列查詢會內嵌應用程式某個月的流量快照集,一天彙總兩次。 Bin 大小為 12 小時。

print y=dynamic([80, 139, 87, 110, 68, 54, 50, 51, 53, 133, 86, 141, 97, 156, 94, 149, 95, 140, 77, 61, 50, 54, 47, 133, 72, 152, 94, 148, 105, 162, 101, 160, 87, 63, 53, 55, 54, 151, 103, 189, 108, 183, 113, 175, 113, 178, 90, 71, 62, 62, 65, 165, 109, 181, 115, 182, 121, 178, 114, 170])
| project x=range(1, array_length(y), 1), y  
| render linechart

數列期間。

在此序列上執行 series_periods_detect(),會產生每週週期 (長度為 14 點)。

print y=dynamic([80, 139, 87, 110, 68, 54, 50, 51, 53, 133, 86, 141, 97, 156, 94, 149, 95, 140, 77, 61, 50, 54, 47, 133, 72, 152, 94, 148, 105, 162, 101, 160, 87, 63, 53, 55, 54, 151, 103, 189, 108, 183, 113, 175, 113, 178, 90, 71, 62, 62, 65, 165, 109, 181, 115, 182, 121, 178, 114, 170])
| project x=range(1, array_length(y), 1), y  
| project series_periods_detect(y, 0.0, 50.0, 2)

輸出

series_periods_detect_y_periods series_periods_detect_y_periods_scores
[14.0, 0.0] [0.84, 0.0]

注意

找不到圖表中也可以看到的每日期間,因為取樣太粗 (12h 間隔大小) ,因此演算法所需的每日期間 2 個間隔低於 4 點的最小期間大小。