FunctionNode: 지연 평가하는 시계열 계산
foundryts.nodes.FunctionNode(children)는 하나 이상의 시계열을 새 시계열로 변환하는 질의를 담습니다. children은 계산의 입력 노드입니다. 변환 함수를 적용하면 새로운 FunctionNode를 만들거나, 최종 요약값을 만드는 SummarizerNode를 얻습니다.
노드 구성은 계산 계획을 만드는 단계입니다. to_pandas 또는 to_dataframe을 호출하면 질의를 평가하여 결과를 가져옵니다. 실행에는 FoundryTS 환경과 리소스 설정이 필요합니다.
계산 연결 예제
다음 가상 관측은 나노초 정수 시각과 숫자 값을 사용합니다.
import foundryts.functions as F
series = F.points(
(100, 0.0),
(200, float("inf")),
(300, 3.14159),
(2147483647, 1.0),
name="series",
)
scaled = series.scale(1.5)
time_shifted = scaled.time_shift(1000)
result_df = time_shifted.to_pandas()
scale과 time_shift를 연결하는 동안에는 결과를 평가하지 않습니다. 마지막 호출은 값을 1.5배로 만들고 시각을 1,000나노초 늦춘 시계열을 DataFrame으로 반환합니다.
| timestamp | value |
|---|---|
| 1970-01-01 00:00:00.000001100 | 0.0 |
| 1970-01-01 00:00:00.000001200 | inf |
| 1970-01-01 00:00:00.000001300 | 4.712385 |
| 1970-01-01 00:00:02.147484647 | 1.5 |
메타데이터
| 멤버 | 반환 내용 |
|---|---|
| columns() | 결과 DataFrame 열 이름의 Tuple[str] |
| types() | 결과 열에 대응하는 형식의 Tuple[Type] |
| series_ids | 현재 노드와 하위 노드가 사용하는 모든 시계열 식별자 |
중첩 객체의 열 이름은 점으로 연결하여 평탄화합니다. 예를 들어 통계 결과에는 smallest_point.timestamp나 latest_point.value 같은 이름이 나타납니다.
import foundryts.functions as F
series = F.points((100, 0.0), (200, 1.0), name="series")
column_names = series.columns()
column_types = series.types()
statistics = series.statistics(start=0, end=300)
statistic_columns = statistics.columns()
일반 점 시계열의 columns는 timestamp와 value입니다. types는 시각과 값에 대한 형식 메타데이터를 반환하며, pandas의 dtype 객체를 반환하는 메서드는 아닙니다.
변환 및 요약 메서드
메서드마다 단일 입력 변환, 여러 입력 결합 또는 요약이라는 역할이 다릅니다. 다음 인수는 노드 메서드의 호출 형태입니다.
| 메서드 | 인수 | 역할 |
|---|---|---|
| cumulative_aggregate | *args, **kwargs | 시각별 누적 집계 |
| derivative | 없음 | 시간에 따른 값의 미분 |
| distribution | start=None, end=None, bins=None, start_value=None, end_value=None | 값 분포 요약 |
| dsl | program, return_type, labels=None, before='nearest', internal='linear', after='nearest' | 수식 적용 |
| first_point | 없음 | 첫 관측 |
| integral | method='LINEAR' | 시간축에 따른 적분 |
| interpolate | before=None, internal=None, after=None, frequency=None, rename_columns_by=None, static_column_name=None | 보간 설정 |
| last_point | 없음 | 마지막 관측 |
| mean | children | 입력 시계열들의 평균 |
| periodic_aggregate | *args, **kwargs | 일정한 시간 구간별 집계 |
| rolling_aggregate | *args, **kwargs | 이동 시간 구간 집계 |
| scale | factor | 값에 배율 적용 |
| scatter | start_timestamp, end_timestamp, first_interpolation, second_interpolation, regression_fit | 두 시계열의 대응 값 분석 |
| skip_nonfinite | 없음 | 유한하지 않은 값 제외 |
| statistics | start=None, end=None, window=None, **kwargs | 통계 요약 |
| sum | children | 입력 시계열 합 |
| time_extent | 없음 | 관측 시각 범위 |
| time_range | start=None, end=None | 시간 범위 제한 |
| time_shift | duration | 시각 이동 |
| udf | func, columns=None, types=None | 사용자 정의 함수 적용 |
| unit_conversion | from_unit, to_unit | 단위 변환 |
| value_shift | delta | 값에 일정량 추가 |
| where | true=None, false=None | 조건 시계열을 사용한 값 선택 |
예를 들어 series.scale(1.5)는 시계열을 계속 변환할 수 있는 노드를 만들고, series.statistics()는 요약 결과를 평가할 노드를 만듭니다. 여러 입력을 받는 수식에는 각 입력 시계열을 전달해야 합니다.
DataFrame으로 평가
to_pandas
FunctionNode.to_pandas(fts=None)
현재 노드의 계산을 평가하여 pandas.DataFrame을 반환합니다. fts에는 사용할 FoundryTS 세션을 선택적으로 전달하며 생략하면 세션을 자동으로 구성합니다. 반환한 DataFrame에는 원시 관측 또는 변환한 시계열의 결과가 들어갑니다.
to_dataframe
FunctionNode.to_dataframe(fts=None)
현재 노드를 평가하여 pyspark.sql.DataFrame을 반환합니다. fts의 의미는 to_pandas와 같습니다. 큰 시계열이나 많은 결과를 Spark에서 분산 처리할 때 사용할 수 있습니다.
앞서 만든 series를 Spark 결과로 가져오려면 다음 호출을 사용합니다.
spark_df = series.to_dataframe()
한 결과를 pandas와 Spark 양쪽에서 평가할 필요가 없다면 사용할 출력 방식만 선택합니다.