series_periods_detect()
尋找存在於時間序列中最重要的週期。
Syntax
series_periods_detect(
系列,
min_period,
,
max_periodnum_periods)
深入瞭解 語法慣例。
參數
名稱 | 類型 | 必要 | Description |
---|---|---|---|
系列 | dynamic |
✔️ | 數值的陣列,通常是 make-series 或 make_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 點的最小期間大小。
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應