scatter: 두 시계열의 대응 값과 회귀
foundryts.functions.scatter(
start=None, end=None, before='NONE', internal='LINEAR',
after='NONE', regression=None, regression_fit=None
)
정확히 두 숫자형 시계열을 받아 같은 시각의 값을 (x, y)로 정렬하는 함수를 반환합니다. 첫 시계열의 값이 x, 두 번째 시계열의 값이 y입니다. 시각이 일치하지 않으면 지정한 보간 전략으로 없는 값을 구합니다.
입력은 두 시계열을 담은 NodeCollection이며 결과는 SummarizerNode입니다. 결과 DataFrame의 각 행은 대응점 하나입니다.
인수
| 인수 | 형식 | 기본값과 의미 |
|---|---|---|
| start | int, datetime 또는 str | None. 시작 시각 포함. 기본 하한은 pandas.Timestamp.min |
| end | int, datetime 또는 str | None. 종료 시각 제외. 기본 상한은 pandas.Timestamp.max |
| before | str 또는 List[str] | NONE. 첫 관측 이전의 보간 |
| internal | str 또는 List[str] | LINEAR. 관측 사이의 보간 |
| after | str 또는 List[str] | NONE. 마지막 관측 이후의 보간 |
| regression | 회귀 생성 함수의 반환값 | None. 회귀를 추가하지 않음 |
보간 전략은 interpolate의 내부 및 외부 전략을 사용합니다. 회귀 구성에는 regression 인수로 F.linear_regression(), F.polynomial_regression() 또는 F.exponential_regression()의 반환값을 전달합니다.
출력 스키마
| 열 | 형식 | 의미 |
|---|---|---|
| is_truncated | bool | 사용 중단이 진행 중인 필드이며 무시해야 함 |
| points.first_value | float | 첫 시계열의 값 |
| points.second_value | float | 두 번째 시계열의 값 |
| points.timestamp | datetime | 대응 시각 |
| regression.* | 회귀별 결과 형식 | 회귀를 선택했을 때 추가되는 계수와 관련 필드 |
범주형 시계열에는 scatter를 적용하지 않습니다.
가상 입력과 보간
from foundryts import NodeCollection
import foundryts.functions as F
series_1 = F.points(
(11, 21.0), (13, 23.0), (15, 25.0), (17, 27.0),
name="series-1",
)
series_2 = F.points(
(11, 21.0), (13, 23.0), (17, 37.0), (37, 47.0),
name="series-2",
)
collection = NodeCollection(series_1, series_2)
scatter_result = F.scatter(
before="NEAREST",
internal="LINEAR",
after="NEAREST",
)(collection)
scatter_df = scatter_result.to_pandas()
정수 시각은 나노초입니다. 시각 15의 두 번째 값은 23과 37 사이를 보간하여 30이 됩니다. 시각 37에서는 첫 시계열의 마지막 값 27을 사용합니다.
| points.timestamp | points.first_value | points.second_value |
|---|---|---|
| 1970-01-01 00:00:00.000000011 | 21.0 | 21.0 |
| 1970-01-01 00:00:00.000000013 | 23.0 | 23.0 |
| 1970-01-01 00:00:00.000000015 | 25.0 | 30.0 |
| 1970-01-01 00:00:00.000000017 | 27.0 | 37.0 |
| 1970-01-01 00:00:00.000000037 | 27.0 | 47.0 |
가상 예제에서 is_truncated 값은 모두 False입니다.
두 값 사이의 선형 회귀
regression_result = F.scatter(
before="NEAREST",
internal="LINEAR",
after="NEAREST",
regression=F.linear_regression(),
)(collection)
regression_df = regression_result.to_pandas()
위와 같은 다섯 대응점에 회귀 결과가 추가됩니다. 여기서 x는 시간이 아닌 첫 시계열의 값입니다. 각 행에 공통으로 나타나는 회귀 필드는 다음과 같습니다.
| 필드 | 가상 결과 값 |
|---|---|
| regression.min_bounds.first_value | 21.0 |
| regression.max_bounds.first_value | 27.0 |
| regression.min_bounds.second_value | 21.0 |
| regression.max_bounds.second_value | 47.0 |
| regression.regression_fit_function.linear_regression_fit.intercept | -59.926471 |
| regression.regression_fit_function.linear_regression_fit.slope | 3.720588 |
| regression.regression_fit_function.linear_regression_fit.statistics.rsquared | 0.827161 |
계수와 데이터 범위의 의미는 linear_regression에 설명되어 있습니다. 다항 회귀와 지수 회귀도 regression에 연결할 수 있습니다.