ROLLINGVAR 函式

在指定的資料欄中,計算現行列前後值的累計變異數。
  • 如果輸入值為遺漏值或空值,則不會列入計算。舉例來說,如為資料集中的第一個資料列,前一個值的累計變異數為未定義。
  • 擷取值的來源資料列是由 order 參數指定的資料列排序決定。

    如果您正在處理隨機產生的資料集樣本,則您在此函式中看到的值未必會對應到工作執行期間在完整資料集中產生的值。

  • 此函式使用資料欄名稱,以及目前資料列往後及往前範圍的兩個整數參數。
    • 預設整數參數值是 -10,用以計算現行資料列往後到資料集第一列的累計函式。
  • 此函式可與下列轉換一起使用:

如要進一步瞭解此函式的非累計版本,請參閱 VAR 函式

基本用法

資料欄範例:

derive type:single value:ROLLINGVAR(myCol)

輸出:產生新資料欄,其中含有 myCol 資料欄所有值的累計變異數,範圍從資料集第一列到現行列。

計算前面資料列的範例:

window value:ROLLINGVAR(myNumber, 100)

輸出:產生新資料欄,其中包含 myNumber 資料欄中現行列和前 100 列值的累計變異數。

計算前後資料列的範例:

window value:ROLLINGVAR(myNumber, 3, 2)

輸出:產生新資料欄,其中包含 myNumber 資料欄現行列的前兩列值、現行列值,以及現行列後兩列值的累計變異數。

語法

window value:ROLLINGVAR(col_ref, rowsBefore_integer, rowsAfter_integer) order: order_col [group: group_col]

引數是否必要?資料類型說明
col_ref字串資料欄名稱,其值會套用於函式
rowsBefore_integer整數待併入計算的現行資料列之前的列數
rowsAfter_integer整數待併入計算的現行資料列之後的列數

如要進一步瞭解 ordergroup 參數,請參閱 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
100.000
1119.554
1239.785
1360.021
2080.950
21101.785
22121.005
23141.185
30162.008
31181.887
32200.945
33220.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'

結果:

完成上述轉換作業後,會呈現類似如下的結果:

單圈計時季度splitIdtime_scsplit_time_scrvarrstdevrminrmaxravg
10l1q00
11l1q120.09620.0960020.09620.09620.096
12l1q240.5320.4340.0290.16920.09620.43420.265
13l1q361.03120.5010.0310.17720.09620.50120.344
20l2q081.08720.0560.0390.19820.05620.50120.272
21l2q1101.38320.2960.0290.1720.05620.50120.322
22l2q2122.09220.7090.0590.24220.05620.70920.39
23l2q3141.88619.7940.1130.33719.79420.70920.214
30l3q0162.58120.6950.1390.37319.79420.70920.373
31l3q1183.01820.4370.1380.37119.79420.70920.409
32l3q2203.49320.4750.1130.33619.79420.69520.35
33l3q3222.89319.40.2520.50219.420.69520.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 資料欄。


本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Google Cloud Dataprep 說明文件
需要協助嗎?請前往我們的支援網頁