SummarizerNode: 시계열 요약 결과
foundryts.nodes.SummarizerNode(children)는 하나 이상의 FunctionNode를 요약하는 지연 질의입니다. SummarizerNode 뒤에는 FoundryTS 시계열 변환을 더 연결할 수 없습니다. 결과를 DataFrame, 딕셔너리 또는 Python 객체로 평가한 뒤 해당 형식의 도구로 후속 분석을 수행합니다.
실행 환경과 입력 참조는 FoundryTS 사용 설정을 따릅니다.
분포 요약 예제
다음 가상 시계열의 정수 시각은 나노초 단위입니다.
import foundryts.functions as F
series = F.points(
(100, 0.0),
(200, float("inf")),
(300, 3.14159),
(2147483647, 1.0),
name="series",
)
distribution = series.distribution()
series는 FunctionNode이고 distribution은 SummarizerNode입니다. distribution을 만드는 시점에는 아직 결과를 평가하지 않습니다. 이후 필요한 출력 형식의 메서드를 선택합니다.
메타데이터
| 멤버 | 반환 내용 |
|---|---|
| columns() | 결과 열 이름의 Tuple[str] |
| types() | 결과 열에 대응하는 형식의 Tuple[Type] |
| series_ids | 현재 노드와 하위 노드가 사용하는 모든 시계열 식별자 |
중첩 결과의 키는 점으로 연결한 열 이름으로 평탄화합니다. 분포의 열은 다음과 같습니다.
| 열 | 내용 |
|---|---|
| delta | 버킷 폭 |
| distribution_values.count | 버킷의 관측 수 |
| distribution_values.end | 버킷 끝 값 |
| distribution_values.start | 버킷 시작 값 |
| end | 분포의 끝 값 |
| end_timestamp | 계산의 종료 시각 |
| start | 분포의 시작 값 |
| start_timestamp | 계산의 시작 시각 |
메타데이터 조회에는 해당 요약 노드를 사용합니다.
column_names = distribution.columns()
column_types = distribution.types()
통계 요약을 만들면 count, mean과 smallest_point.timestamp, latest_point.value 같은 통계 필드가 결과에 들어갑니다. 열과 형식의 구성은 선택한 요약 연산을 따릅니다.
to_pandas
SummarizerNode.to_pandas(fts=None)
요약을 평가하여 pandas.DataFrame으로 반환합니다. fts에는 FoundryTS 세션을 선택적으로 전달하며 생략하면 자동으로 구성합니다. 일반 요약 결과는 한 행이고, 여러 결과나 반복 항목이 있으면 각각의 행으로 펼칩니다. 중첩 키는 점으로 연결됩니다.
distribution_df = distribution.to_pandas()
가상 관측의 분포 예에서 delta는 0.314159이며 다음 세 버킷에 관측이 하나씩 있습니다.
| distribution_values.start | distribution_values.end | distribution_values.count |
|---|---|---|
| 0.0 | 0.314159 | 1 |
| 0.942477 | 1.256636 | 1 |
| 2.827431 | 3.141590 | 1 |
이 예에서 공통 start는 0.0, end는 3.14159이며 inf 관측은 유한한 버킷에 포함되지 않습니다. 공통 시간 메타데이터는 start_timestamp가 1677-09-21 00:12:43.145225216, end_timestamp가 2262-01-01 00:00:00인 예입니다. 각 버킷 행에 이 공통 메타데이터가 함께 나타납니다.
to_dataframe
SummarizerNode.to_dataframe(fts=None)
요약을 평가하여 pyspark.sql.DataFrame으로 반환합니다. fts는 선택적 FoundryTS 세션입니다. 많은 시계열의 FunctionNode 또는 SummarizerNode 결과를 Spark에서 분산 처리할 때 사용할 수 있습니다.
pandas 대신 Spark 결과가 필요하면 다음을 선택합니다.
distribution_spark_df = distribution.to_dataframe()
to_dict
SummarizerNode.to_dict(fts=None)
결과를 중첩 딕셔너리로 반환합니다. 요약이 여러 결과를 반환하면 각 결과의 딕셔너리를 담은 목록이 됩니다. 반환 형식은 Dict[str, Any] 또는 List[Dict[str, Any]]입니다.
distribution_dict = distribution.to_dict()
분포 결과의 중첩 구조는 다음과 같습니다. Timestamp는 pandas 시각 표현입니다.
{
'start_timestamp': Timestamp('1677-09-21 00:12:43.145225216'),
'end_timestamp': Timestamp('2262-01-01 00:00:00'),
'start': 0.0,
'end': 3.1415900000000003,
'delta': 0.314159,
'distribution_values': [
{'start': 0.0, 'end': 0.314159, 'count': 1},
{'start': 0.942477, 'end': 1.256636, 'count': 1},
{'start': 2.8274310000000002, 'end': 3.1415900000000003, 'count': 1}
]
}
to_object
SummarizerNode.to_object(fts=None)
결과를 Python 객체로 반환합니다. 여러 결과이면 객체 목록을 반환하며 형식은 Any 또는 List[Any]입니다. fts는 다른 평가 메서드와 같은 선택적 세션입니다.
distribution_object = distribution.to_object()
분포 예의 객체 표현은 _CuratedDistribution이며 start_timestamp, end_timestamp, start, end, delta와 distribution_values를 가집니다. distribution_values는 start, end와 count를 가진 DistributionDataPoint 객체들의 목록입니다. 이 객체 표현의 시각은 Codex Timestamp로 나타날 수 있으므로, 딕셔너리나 DataFrame의 pandas Timestamp 표현과 구분합니다.
위 메서드는 서로 다른 결과 형식을 선택하는 대안입니다. 같은 결과를 여러 형식으로 평가하면 각각 질의가 실행되므로 필요한 방식만 사용합니다.