Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

periodic_aggregate: 고정 주기별 집계

foundryts.functions.periodic_aggregate(
    aggregate, window, window_type='end', alignment_timestamp=0
)

숫자형 시계열 하나를 겹치지 않는 일정 길이의 구간으로 나누고 구간마다 집계값을 만드는 함수를 반환합니다. 입력과 출력은 FunctionNode입니다. 관측점이 없는 구간은 출력하지 않습니다.

인수와 경계

인수형식과 의미기본값
aggregate집계 이름 String 또는 time_weighted의 반환 명세필수
windowint, datetime.timedelta 또는 str 시간 길이. 예: 5ms필수
window_typestart 또는 endend
alignment_timestamp결과 시각을 정렬할 기준 시각. 숫자, 시각 문자열 또는 datetime.datetime0

정수 시간 길이는 나노초입니다. 결과 시각은 alignment_timestamp에서 window 길이의 정수배만큼 떨어진 지점에 놓입니다.

window_type포함 범위결과의 timestamp
start시작 포함, 끝 제외: [시작, 끝)구간 시작
end시작 제외, 끝 포함: (시작, 끝]구간 끝

집계 종류

aggregate구간 안의 계산
min최솟값
max최댓값
count관측 수
sum값 합
product값 곱
mean관측값 평균
standard_deviation관측값 표준편차
difference마지막 값에서 첫 값을 뺀 차이
percent_change첫 값을 기준으로 마지막 값의 변화 비율
first첫 관측값
last마지막 관측값
time_weighted("average")값의 유지 시간을 반영한 구간 평균
time_weighted("integral")구간의 곡선 아래 넓이

시간 가중 항목은 time_weighted가 반환한 명세를 aggregate에 전달합니다. 범주형 시계열은 지원하지 않습니다.

가상 입력

import foundryts.functions as F

series = F.points(
    (1, 1.0),
    (101, 2.0),
    (200, 4.0),
    (201, 8.0),
    (299, 16.0),
    (300, 32.0),
    (1000, 64.0),
    (12345, 128.0),
    name="series",
)

아래 표의 시각과 구간 경계는 모두 Unix epoch 이후 나노초입니다. 실제 DataFrame의 timestamp는 pandas.Timestamp로 표현됩니다.

기본 end 구간

periodic_difference = F.periodic_aggregate("difference", "100ns")(series)
periodic_change = F.periodic_aggregate("percent_change", "100ns")(series)
difference_df = periodic_difference.to_pandas()

window_type은 end, alignment_timestamp는 0입니다. 관측이 있는 다섯 구간만 출력합니다.

구간포함된 입력 시각출력 시각(ns)differencepercent_change
(0, 100]11000.00.0
(100, 200]101, 2002002.01.0
(200, 300]201, 299, 30030024.03.0
(900, 1000]100010000.00.0
(12300, 12400]12345124000.00.0

세 번째 구간은 첫 값 8과 마지막 값 32를 사용합니다. 차이는 24이고 변화 비율은 3, 즉 300%입니다. percent_change 결과가 필요하면 periodic_change를 평가합니다.

start 구간

start_aligned = F.periodic_aggregate(
    "percent_change", "100ns", window_type="start"
)(series)
start_df = start_aligned.to_pandas()

시작을 포함하는 경계로 바꾸면 시각 200의 점은 [200, 300)에 포함되고 시각 300의 점은 다음 구간으로 이동합니다.

구간포함된 입력 시각출력 시각(ns)percent_change
[0, 100)100.0
[100, 200)1011000.0
[200, 300)200, 201, 2992003.0
[300, 400)3003000.0
[1000, 1100)100010000.0
[12300, 12400)12345123000.0

기준 시각을 50으로 이동

shifted_alignment = F.periodic_aggregate(
    "percent_change", "100ns", alignment_timestamp=50
)(series)
aligned_df = shifted_alignment.to_pandas()

기본 end 경계를 유지하면서 구간 정렬 기준을 50나노초로 바꿉니다.

구간포함된 입력 시각출력 시각(ns)percent_change
(-50, 50]1500.0
(50, 150]1011500.0
(150, 250]200, 2012501.0
(250, 350]299, 3003501.0
(950, 1050]100010500.0
(12250, 12350]12345123500.0

각 결과는 timestamp와 value 열을 가집니다. 공통 시계열 스키마의 value는 float 또는 str이지만 이 집계의 입력은 숫자형으로 제한됩니다. 현재 관측을 따라 움직이는 구간은 rolling_aggregate, 처음부터 누적하는 계산은 cumulative_aggregate를 사용합니다.