- 如果輸入值遺漏或為空值,則不會列入計算。例如,針對資料集中的第一列,此列之前的值累計標準差為未定義。
擷取值的來源資料列由
order
參數指定的資料列排序決定。如果您正在處理隨機產生的資料集樣本,則您在此函式中看到的值未必會對應到工作執行期間在完整資料集中產生的值。
- 此函式使用資料欄名稱,以及目前資料列往後及往前範圍的兩個整數參數。
- 預設整數參數值是
-1
及0
,用以計算現行資料列往後到資料集第一列的累計函式。
- 預設整數參數值是
- 此函式可與下列轉換一起使用:
如要進一步瞭解此函式的非累計版本,請參閱 STDEV 函式一文。
基本用法
資料欄範例:
derive type:single value:ROLLINGSTDEV(myCol)
輸出:產生新資料欄,其中含有資料集第一個資料列至當前資料列之 myCol
資料欄中所有值的累計標準差。
計算前幾列範例:
window value:ROLLINGSTDEV(myNumber, 100)
輸出:產生新資料欄,其中包含 myNumber
資料欄中當前資料列與前 100 個資料列值的累計標準差。
計算前後幾列範例:
window value:ROLLINGSTDEV(myNumber, 3, 2)
輸出:產生新資料欄,其中包含 myNumber
資料欄中目前列的前兩列值、目前列值,以及目前列後兩列值的累計標準差。
語法
window value:ROLLINGSTDEV(col_ref, rowsBefore_integer, rowsAfter_integer) order: order_col [group: group_col]
引數 | 是否必要? | 資料類型 | 說明 |
---|---|---|---|
col_ref | 是 | 字串 | 資料欄名稱,其值會套用於函式 |
rowsBefore_integer | 否 | 整數 | 待併入計算的現行資料列之前的列數 |
rowsAfter_integer | 否 | 整數 | 待併入計算的現行資料列之後的列數 |
如要進一步瞭解 order
與 group
參數,請參閱 Window 轉換。
如要進一步瞭解語法標準,請參閱語言文件語法附註。
col_ref
資料欄名稱,其值會用於計算函式。
- 不支援多個資料欄和萬用字元。
使用須知:
是否必要? | 資料類型 | 範例值 |
---|---|---|
是 | 字串 (整數或小數值的資料欄參照) | myColumn |
rowsBefore_integer、rowsAfter_integer
整數代表現行列前後的列數,系統會從現行列開始計算之前或之後指定列數 (包括現行列在內) 的累計函式。例如,如果第一個值是 5
,則計算範圍為現行列和現行列之後的四列。負值的 k
代表計算現行列之前指定列數的累計平均值。
rowBefore=1
只會產生現行列值。rowBefore=-1
使用現行列之前的所有列。- 如果沒有指定
rowsAfter
,則會套用0
值。 - 如果套用
group
參數,則這些參數值不應超過群組中的最大列數。
使用須知:
是否必要? | 資料類型 | 範例值 |
---|---|---|
否 | 整數 | 4 |
範例
範例 - 賽車拆分的累計計算
這個範例說明如何使用累計計算函式:
ROLLINGAVERAGE
- 計算現行列前後某一列數範圍的累計平均值。請參閱 ROLLINGAVERAGE 函式。ROLLINGMIN
- 計算某一列數範圍的累計最小值。參閱 ROLLINGMIN 函式。ROLLINGMAX
- 計算某一列數範圍的累計最大值。參閱 ROLLINGMAX 函式。ROLLINGSTDEV
- 計算某一列數範圍的累計標準差。參閱 ROLLINGSTDEV 函式。ROLLINGVAR
- 計算某一列數範圍的累計變異數。參閱 ROLLINGVAR 函式。
來源:
在此範例中,下列資料是來自三圈賽道賽車競賽期間依標準間隔記錄的時間。來源資料使用累計時間表示,單位為秒 (time_sc
)。您可使用 ROLLING 和其他窗型函式,將資料細分為更具意義的指標。
單圈計時 | 季度 | time_sc |
---|---|---|
1 | 0 | 0.000 |
1 | 1 | 19.554 |
1 | 2 | 39.785 |
1 | 3 | 60.021 |
2 | 0 | 80.950 |
2 | 1 | 101.785 |
2 | 2 | 121.005 |
2 | 3 | 141.185 |
3 | 0 | 162.008 |
3 | 1 | 181.887 |
3 | 2 | 200.945 |
3 | 3 | 220.856 |
轉換:
主鍵:由於每一圈的季度資訊重複,因此每個資料列並無不重複的 ID。下列步驟會建立此 ID:
settype col: lap,quarter type: 'String'
derive type:single value: MERGE(['l',lap,'q',quarter]) as: 'splitId'
取得拆分時間:使用下列轉換,將賽程的每個季度細分為拆分資料:
derive type:single value: ROUND(time_sc - PREV(time_sc, 1), 3) order: splitId as: 'split_time_sc'
計算累計運算結果:您可使用下列類型的運算,針對當前與前三個拆分提供累計指標:
derive type:single value: ROLLINGAVERAGE(split_time_sc, 3) order: splitId as: 'ravg'
derive type:single value: ROLLINGMAX(split_time_sc, 3) order: splitId as: 'rmax'
derive type:single value: ROLLINGMIN(split_time_sc, 3) order: splitId as: 'rmin'
derive type:single value: ROUND(ROLLINGSTDEV(split_time_sc, 3), 3) order: splitId as: 'rstdev'
derive type:single value: ROUND(ROLLINGVAR(split_time_sc, 3), 3) order: splitId as: 'rvar'
結果:
完成上述轉換作業後,會呈現類似如下的結果:
單圈計時 | 季度 | splitId | time_sc | split_time_sc | rvar | rstdev | rmin | rmax | ravg |
---|---|---|---|---|---|---|---|---|---|
1 | 0 | l1q0 | 0 | ||||||
1 | 1 | l1q1 | 20.096 | 20.096 | 0 | 0 | 20.096 | 20.096 | 20.096 |
1 | 2 | l1q2 | 40.53 | 20.434 | 0.029 | 0.169 | 20.096 | 20.434 | 20.265 |
1 | 3 | l1q3 | 61.031 | 20.501 | 0.031 | 0.177 | 20.096 | 20.501 | 20.344 |
2 | 0 | l2q0 | 81.087 | 20.056 | 0.039 | 0.198 | 20.056 | 20.501 | 20.272 |
2 | 1 | l2q1 | 101.383 | 20.296 | 0.029 | 0.17 | 20.056 | 20.501 | 20.322 |
2 | 2 | l2q2 | 122.092 | 20.709 | 0.059 | 0.242 | 20.056 | 20.709 | 20.39 |
2 | 3 | l2q3 | 141.886 | 19.794 | 0.113 | 0.337 | 19.794 | 20.709 | 20.214 |
3 | 0 | l3q0 | 162.581 | 20.695 | 0.139 | 0.373 | 19.794 | 20.709 | 20.373 |
3 | 1 | l3q1 | 183.018 | 20.437 | 0.138 | 0.371 | 19.794 | 20.709 | 20.409 |
3 | 2 | l3q2 | 203.493 | 20.475 | 0.113 | 0.336 | 19.794 | 20.695 | 20.35 |
3 | 3 | l3q3 | 222.893 | 19.4 | 0.252 | 0.502 | 19.4 | 20.695 | 20.252 |
您可套用諸如以下的 window
轉換,以減少步驟數:
window value: window1 = lap,rollingaverage(split_time_sc, 0, 3), rollingmax(split_time_sc, 0, 3),rollingmin(split_time_sc, 0, 3),round(rollingstdev(split_time_sc, 0, 3), 3),round(rollingvar(split_time_sc, 0, 3), 3) group: lap order: lap
不過,您必須重新命名所有已產生的 windowX
資料欄。