rolling_aggregate: 이동 시간 구간 집계
foundryts.functions.rolling_aggregate(aggregate, window)는 숫자형 시계열 하나의 각 관측 시각에서 최근 window 길이의 구간을 집계하는 함수를 반환합니다. 현재 시각은 포함하고 window만큼 이전인 경계는 제외합니다. 시각 t의 구간은 (t - window, t]입니다.
새 관측으로 평가 시각이 바뀌면 구간 밖의 오래된 점은 집계에서 빠집니다. 평활화와 추세 분석 등에 사용하며 입력과 출력은 FunctionNode입니다.
인수
aggregate는 다음 String 또는 time_weighted가 반환한 명세입니다. window는 str, int, datetime.timedelta 또는 pandas.Timedelta 형식의 시간 길이입니다. 예를 들어 5ms 또는 나노초 정수 5,000,000으로 지정할 수 있습니다.
| aggregate | 구간 안에서 계산할 값 |
|---|---|
| min | 최솟값 |
| max | 최댓값 |
| count | 관측 수 |
| sum | 값 합 |
| product | 값 곱 |
| mean | 관측값 평균 |
| standard_deviation | 관측값 표준편차 |
| difference | 마지막 값에서 첫 값을 뺀 차이 |
| percent_change | 첫 값을 기준으로 마지막 값의 변화 비율 |
| first | 첫 관측값 |
| last | 마지막 관측값 |
| time_weighted("average") | 값의 유지 시간을 반영한 평균 |
| time_weighted("integral") | 곡선 아래 넓이 |
시간 가중 집계는 time_weighted의 반환값을 전달하며 적분 방법과 경계 보간을 선택할 수 있습니다. 이 집계 함수는 숫자형 시계열에만 적용합니다.
3나노초 구간의 변화량
import foundryts.functions as F
series = F.points(
(2, 10.0),
(5, 20.0),
(6, 30.0),
(7, 40.0),
(8, 50.0),
(12, 60.0),
name="series",
)
rolling_difference = F.rolling_aggregate("difference", "3ns")(series)
rolling_change = F.rolling_aggregate("percent_change", "3ns")(series)
difference_df = rolling_difference.to_pandas()
가상 예제의 관측 시각은 나노초입니다. 시각 5의 구간은 (2, 5]이므로 시각 2의 점이 빠집니다. 시각 8에는 (5, 8]의 30, 40과 50을 사용합니다.
| timestamp | 구간 안의 값 | difference | percent_change |
|---|---|---|---|
| 1970-01-01 00:00:00.000000002 | 10 | 0.0 | 0.0 |
| 1970-01-01 00:00:00.000000005 | 20 | 0.0 | 0.0 |
| 1970-01-01 00:00:00.000000006 | 20, 30 | 10.0 | 0.5 |
| 1970-01-01 00:00:00.000000007 | 20, 30, 40 | 20.0 | 1.0 |
| 1970-01-01 00:00:00.000000008 | 30, 40, 50 | 20.0 | 0.666667 |
| 1970-01-01 00:00:00.000000012 | 60 | 0.0 | 0.0 |
percent_change는 비율로 표현되므로 0.5는 50% 변화에 해당합니다. 해당 결과가 필요하면 rolling_change를 평가합니다.
출력은 timestamp와 value 열입니다. 공통 시계열 스키마의 timestamp는 pandas.Timestamp, value는 float 또는 str이며 이 함수의 입력은 숫자형으로 제한됩니다. 처음부터 누적하려면 cumulative_aggregate, 고정된 주기별로 나누려면 periodic_aggregate를 사용합니다.