0 / 0
영어 버전 문서로 돌아가기

시계열 라이브러리 사용

마지막 업데이트 날짜: 2024년 10월 04일
시계열 라이브러리 사용

시계열 라이브러리에 대한 작업을 시작하려면 라이브러리를 Python 노트북 또는 애플리케이션으로 가져오십시오.

이 명령을 사용하여 시계열 라이브러리를 가져올 수 있습니다.

# Import the package
import tspy

시계열 작성

시계열을 작성하고 라이브러리 함수를 사용하려면 데이터 소스에 대해 결정해야 합니다. 지원되는 데이터 소스는 다음과 같습니다.

  • 인메모리 목록
  • pandas DataFrames
  • 관측값의 인메모리 콜렉션(ObservationCollection 구성 사용)
  • 사용자 정의 리더(TimeSeriesReader 구성 사용)

다음 예는 인메모리 목록의 데이터 수집을 보여줍니다.

ts = tspy.time_series([5.0, 2.0, 4.0, 6.0, 6.0, 7.0])
ts

출력은 다음과 같습니다.

TimeStamp: 0     Value: 5.0
TimeStamp: 1     Value: 2.0
TimeStamp: 2     Value: 4.0
TimeStamp: 3     Value: 6.0
TimeStamp: 4     Value: 6.0
TimeStamp: 5     Value: 7.0

MultiTimeSeries 구성을 사용하여 동시에 여러 개의 시계열에 대해 조작할 수도 있습니다. MultiTimeSeries은(는) 기본적으로 시계열의 사전이며, 여기서 각 시계열에는 자체 고유 키가 있습니다. 시계열은 시간으로 정렬되지 않습니다.

MultiTimeSeries 구성은 단일 시계열 구성으로 변환하고 수집하는 유사한 방법을 제공합니다.

mts = tspy.multi_time_series({
	"ts1": tspy.time_series([1.0, 2.0, 3.0]),
	"ts2": tspy.time_series([5.0, 2.0, 4.0, 5.0])
})

출력은 다음과 같습니다.

ts2 time series
------------------------------
TimeStamp: 0     Value: 5.0
TimeStamp: 1     Value: 2.0
TimeStamp: 2     Value: 4.0
TimeStamp: 3     Value: 5.0
ts1 time series
------------------------------
TimeStamp: 0     Value: 1.0
TimeStamp: 1     Value: 2.0
TimeStamp: 2     Value: 3.0

시간 해석

기본적으로 시계열은 지정된 관측값이 작성된 시기를 표시하기 위해 long 데이터 유형을 사용하며 이를 시간 틱이라고 합니다. 시간 기준 시스템이 사람이 해석할 수 있는 시간소인을 갖는 시계열에 사용됩니다. 시간 참조 시스템 사용을 참조하십시오.

다음 예는 단순 시계열을 작성하는 방법을 보여주며, 여기서 각 인덱스는 시작 시간 1990-01-01 후의 일을 나타냅니다.

import datetime
granularity = datetime.timedelta(days=1)
start_time = datetime.datetime(1990, 1, 1, 0, 0, 0, 0, tzinfo=datetime.timezone.utc)

ts = tspy.time_series([5.0, 2.0, 4.0, 6.0, 6.0, 7.0], granularity=granularity, start_time=start_time)
ts

출력은 다음과 같습니다.

TimeStamp: 1990-01-01T00:00Z     Value: 5.0
TimeStamp: 1990-01-02T00:00Z     Value: 2.0
TimeStamp: 1990-01-03T00:00Z     Value: 4.0
TimeStamp: 1990-01-04T00:00Z     Value: 6.0
TimeStamp: 1990-01-05T00:00Z     Value: 6.0
TimeStamp: 1990-01-06T00:00Z     Value: 7.0

단순 변환 수행

변환은 하나 이상의 시계열이 주어질 때 새로운 시계열을 리턴하는 함수입니다.

예를 들어, 시계열을 두 개의 레코드로 나눠 각 시간 범위가 size=3인 시간 범위로 세그먼트화하려는 경우 다음 방법을 사용할 수 있습니다.

window_ts = ts.segment(3, 2)
window_ts

출력은 다음과 같습니다.

TimeStamp: 0     Value: original bounds: (0,2) actual bounds: (0,2) observations: [(0,5.0),(1,2.0),(2,4.0)]
TimeStamp: 2     Value: original bounds: (2,4) actual bounds: (2,4) observations: [(2,4.0),(3,6.0),(4,6.0)]

이 예는 시계열의 각 값에 1 추가를 보여줍니다.

add_one_ts = ts.map(lambda x: x + 1)
add_one_ts

출력은 다음과 같습니다.

TimeStamp: 0     Value: 6.0
TimeStamp: 1     Value: 3.0
TimeStamp: 2     Value: 5.0
TimeStamp: 3     Value: 7.0
TimeStamp: 4     Value: 7.0
TimeStamp: 5     Value: 8.0

또는 시계열(예: ts)을 다른 시계열(ts2)과 일시적으로 왼쪽 결합할 수 있습니다.

ts2 = tspy.time_series([1.0, 2.0, 3.0])
joined_ts = ts.left_join(ts2)
joined_ts

출력은 다음과 같습니다.

TimeStamp: 0     Value: [5.0, 1.0]
TimeStamp: 1     Value: [2.0, 2.0]
TimeStamp: 2     Value: [4.0, 3.0]
TimeStamp: 3     Value: [6.0, null]
TimeStamp: 4     Value: [6.0, null]
TimeStamp: 5     Value: [7.0, null]

변환기 사용

기본 제공 변환기의 풍부한 모음이 변환기 패키지에서 제공됩니다. 제공되는 변환기 함수를 사용하려면 패키지를 가져오십시오.

from tspy.builders.functions import transformers

패키지를 추가한 후 transform 메소드를 사용하여 시계열의 데이터를 변환할 수 있습니다.

예를 들어, 한 시계열에 대해 차이를 수행하려면 다음을 실행하십시오.

ts_diff = ts.transform(transformers.difference())

출력은 다음과 같습니다.

TimeStamp: 1     Value: -3.0
TimeStamp: 2     Value: 2.0
TimeStamp: 3     Value: 2.0
TimeStamp: 4     Value: 0.0
TimeStamp: 5     Value: 1.0

감축기 사용

변환기 패키지와 유사하게 감축기 패키지가 제공하는 메소드를 사용하여 시계열을 감축할 수 있습니다. 다음과 같이 감축기 패키지를 가져올 수 있습니다.

from tspy.builders.functions import reducers

패키지를 가져온 후 reduce 메소드를 사용하여 시계열에 대한 평균을 가져오십시오. 예를 들어, 다음과 같습니다.

avg = ts.reduce(reducers.average())
avg

출력은 다음과 같습니다.

5.0

감축기는 세분화 변환(오류가 발생하기 전에 창에서 시간별 합계, 평균)과 함께 사용되게 할 수 있는 특수한 특성을 갖고 있습니다. segmentation + reducer의 출력은 시계열이므로 transform 메소드가 사용됩니다.

예를 들어, 크기 3의 창으로 세분화하고 각 창 사이의 평균을 얻으려면 다음을 사용하십시오.

avg_windows_ts = ts.segment(3).transform(reducers.average())

결과는 다음과 같습니다.

imeStamp: 0     Value: 3.6666666666666665
TimeStamp: 1     Value: 4.0
TimeStamp: 2     Value: 5.333333333333333
TimeStamp: 3     Value: 6.333333333333333

시계열 그래프 작성

시계열 그래프를 작성할 때 지연 평가가 사용됩니다. 시계열 그래프를 작성할 때 다음 중 하나를 수행할 수 있습니다.

  • BoundTimeSeries을(를) 리턴하는 시계열의 관측값을 수집합니다.
  • 시계열을 값 또는 값의 콜렉션으로 감축
  • 저장 또는 인쇄 조작 수행

예를 들어, 시계열의 모든 값을 수집하고 리턴하려면 다음을 실행하십시오.

observations = ts.materialize()
observations

결과는 다음과 같습니다.

[(0,5.0),(1,2.0),(2,4.0),(3,6.0),(4,6.0),(5,7.0)]

시계열에서 범위를 수집하려면 다음을 사용하십시오.

observations = ts[1:3] # same as ts.materialize(1, 3)
observations

출력은 다음과 같습니다.

[(1,2.0),(2,4.0),(3,6.0)]

시계열이 본질적으로 주기적인 경우 시계열은 범위 조회에 최적화됨을 유의하십시오.

현재 시계열에서 describe을(를) 사용하면 시계열도 그래프로 표시합니다.

describe_obj = ts.describe()
describe_obj

출력은 다음과 같습니다.

min inter-arrival-time: 1
max inter-arrival-time: 1
mean inter-arrival-time: 1.0
top: 6.0
unique: 5
frequency: 2
first: TimeStamp: 0     Value: 5.0
last: TimeStamp: 5     Value: 7.0
count: 6
mean:5.0
std:1.632993161855452
min:2.0
max:7.0
25%:3.5
50%:5.5
75%:6.25

자세히 알아보기

상위 주제: 시계열 분석