Main Content

시계열 객체 및 컬렉션

시계열 데이터를 저장할 때 전처리, 재구성, 분석을 위한 광범위한 지원 함수를 갖춘 timetable을 사용하는 것이 좋습니다. 타임테이블을 시작하려면 타임테이블 생성하기 항목을 참조하십시오.

일부 기존 코드는 이 항목에서 설명하는 다음 객체를 사용합니다.

  • timeseries — 숫자형 데이터 및 시간 값뿐만 아니라 단위, 이벤트, 데이터 품질, 보간 방법이 포함된 메타데이터 정보도 저장합니다.

  • tscollection — 공통된 시간 벡터를 공유하는 timeseries 객체 모음을 저장하며, 단위가 서로 다른 동기화된 시계열에 대해 간편하게 작업을 수행할 수 있습니다.

timeseries에 포함된 데이터 샘플

3개의 센서 신호로 구성된 데이터가 있다고 가정해 보겠습니다. 2개의 신호는 객체의 위치(단위: 미터)를 나타내고 세 번째 신호는 객체의 속도(단위: 미터/초)를 나타냅니다. NaN은 누락된 데이터 값을 나타냅니다.

x = [-0.2 -0.3 13;
     -0.1 -0.4 15;
      NaN  2.8 17;
      0.5 0.3 NaN;
     -0.3 -0.1 15];

x의 처음 2개 열에는 같은 단위의 양이 포함되기 때문에 다변량 timeseries 객체를 생성하여 이 시계열 2개를 저장할 수 있습니다.

ts_pos = timeseries(x(:,1:2),1:5,"name","Position")
  timeseries

  Common Properties:
            Name: 'Position'
            Time: [5x1 double]
        TimeInfo: tsdata.timemetadata
            Data: [5x2 double]
        DataInfo: tsdata.datametadata

데이터 샘플timeseries 객체의 특정 시간과 연결된 하나 이상의 값으로 구성됩니다. 시계열에 포함된 데이터 샘플 개수는 시간 벡터의 길이(이 예제의 경우 5)와 같습니다. 데이터 샘플의 크기를 구하려면 getdatasamplesize를 사용합니다.

getdatasamplesize(ts_pos)
ans = 1×2

     1     2

두 번째 timeseries 객체를 생성하여 속도 데이터를 저장할 수 있습니다.

ts_vel = timeseries(x(:,3),1:5,"name","Velocity");

ts_posts_vel을 동기화된 상태로 유지하면서 작업을 수행하려면 하나의 모음 내에서 두 객체를 그룹화하십시오. 자세한 내용은 시계열 컬렉션 항목을 참조하십시오.

시계열 객체 생성하기

count.dat의 샘플 데이터에는 24개의 행과 3개의 열이 있습니다. 각 열은 도심 교차로 세 곳의 시간별 차량 수를 나타냅니다.

데이터를 불러오고 3개의 timeseries 객체를 생성하여 각 교차로에서 수집한 데이터를 저장합니다.

load count.dat
count1 = timeseries(count(:,1),1:24,"name","Intersection1");
count2 = timeseries(count(:,2),1:24,"name","Intersection2");
count3 = timeseries(count(:,3),1:24,"name","Intersection3");

또는 모든 시계열의 데이터 단위가 동일하고 계산하는 동안 시계열을 동기화 상태로 유지하려는 경우 단일 객체를 만듭니다.

count_ts = timeseries(count,1:24,"name","traffic_counts");

단위 및 보간 방법 수정하기

기본적으로 시계열에는 단위가 초이고 시작 시간이 0초인 시간 벡터가 있으며 계열은 선형 보간을 사용합니다.

3개 시계열의 시간 단위를 hours로 수정합니다.

count1.TimeInfo.Units = "hours";
count2.TimeInfo.Units = "hours";
count3.TimeInfo.Units = "hours";

count1의 데이터 단위를 cars로 변경합니다.

count1.DataInfo.Units = "cars";

count1의 보간 방법을 영차 유지(Zero-Order Hold)로 설정합니다. 다른 시계열은 디폴트 방법인 선형 보간을 사용합니다.

count1.DataInfo.Interpolation = tsdata.interpolation("zoh");

수정된 데이터 속성을 봅니다.

count1.DataInfo
  tsdata.datametadata
  Namespace: tsdata

  Common Properties:
               Units: 'cars'
       Interpolation: zoh (tsdata.interpolation)

이벤트 정의하기

이벤트는 특정 시간에 데이터에 표시를 합니다. 또한 이벤트를 사용하면 여러 시계열을 간편하게 동기화할 수 있습니다.

오전 통근 시간과 오후 통근 시간을 표시하는 2개의 이벤트를 각 계열에 추가합니다.

e1 = tsdata.event("AMCommute",8);
e1.Units = "hours";            
count1 = addevent(count1,e1);  
count2 = addevent(count2,e1);  
count3 = addevent(count3,e1);  

e2 = tsdata.event("PMCommute",18);
e2.Units = "hours";            
count1 = addevent(count1,e2);  
count2 = addevent(count2,e2);  
count3 = addevent(count3,e2);  

첫 번째 시계열을 플로팅합니다. 빨간색 원 마커는 이벤트를 나타냅니다.

plot(count1)

Figure contains an axes object. The axes object with title Time Series Plot:Intersection1, xlabel Time (hours), ylabel Intersection1 (cars) contains 2 objects of type stair, line. One or more of the lines displays its values using only markers

시계열 컬렉션

컬렉션은 동기화된 시계열 그룹입니다. 컬렉션 내 timeseries 객체의 시간 벡터는 서로 일치해야 합니다. 컬렉션의 각 개별 시계열을 멤버라고 합니다. 일반적으로 데이터 단위가 서로 다른 시계열의 컬렉션을 사용합니다. 이 간단한 예제에서는 모든 시계열의 단위가 동일합니다.

tsc = tscollection({count1,count2,count3},"name","count_coll")
Time Series Collection Object: count_coll

Time vector characteristics

      Start time            1 hours
      End time              24 hours

Member Time Series Objects:

      Intersection1
      Intersection2
      Intersection3

컬렉션 리샘플링하기

리샘플링 작업은 특정 시간 값에서 기존 데이터를 선택하거나 데이터를 더 촘촘한 간격으로 보간하는 데 사용됩니다. 새 시간 벡터에 이전 시간 벡터에 없던 시간 값이 있으면 각 시계열에 연결된 보간 방법을 사용하여 새 데이터 값을 계산합니다.

시계열을 리샘플링하여 1시간이 아니라 2시간마다 데이터 값을 포함시키고 이 값을 새 tscollection 객체로 저장합니다.

tsc1 = resample(tsc,1:2:24);

일부 경우에는 정보를 현재보다 더 미세하게 샘플링해야 할 수도 있기 때문에 데이터 값을 보간하여 정보를 가져오는 것이 좋습니다. 예를 들어, 30분 표시마다 값을 보간합니다.

tsc1 = resample(tsc,1:0.5:24);

이전 샘플 상수의 값을 유지하는 영차 유지 보간 방법을 사용하여 Intersection1의 새 데이터 점을 계산합니다. 마커와 함께 tsc1의 멤버를 플로팅하여 보간 결과를 확인합니다.

plot(tsc1.Intersection1,"-x")

Figure contains an axes object. The axes object with title Time Series Plot:Intersection1, xlabel Time (hours), ylabel Intersection1 (cars) contains 2 objects of type stair, line. One or more of the lines displays its values using only markers

Intersection2의 새로운 데이터 점은 디폴트 방법인 선형 보간을 사용합니다.

plot(tsc1.Intersection2,"-o")

Figure contains an axes object. The axes object with title Time Series Plot:Intersection2, xlabel Time (hours), ylabel Intersection2 contains 2 objects of type line. One or more of the lines displays its values using only markers

컬렉션에 데이터 샘플 추가하기

3.25시에 첫 번째 컬렉션 멤버에 데이터 샘플을 추가합니다.

tsc1 = addsampletocollection(tsc1,"time",3.25,"Intersection1",5);

시계열에는 매 30분에 대한 값이 포함되기 때문에 새로 추가되는 값은 여섯 번째 요소가 됩니다.

tsc1.Intersection1.Data
ans = 48×1

    11
    11
     7
     7
    14
     5
    14
    11
    11
    43
      ⋮

새 샘플의 Intersection2Intersection3에 대한 데이터 값을 지정하지 않았기 때문에 이 멤버들의 누락값은 NaN으로 표시됩니다.

tsc1.Intersection2.Data
ans = 48×1

    11
    12
    13
    15
    17
   NaN
    15
    13
    32
    51
      ⋮

누락된 데이터 처리하기

tsc1 컬렉션에서 3.25시의 Intersection2 멤버와 Intersection3 멤버에는 현재 NaN으로 표시된 누락값이 포함되어 있습니다. 이 데이터를 분석하기 전에 누락값을 제거하거나 보간을 사용하여 누락된 값을 대체할 수 있습니다.

예를 들어, NaN 값이 포함된 데이터 샘플을 찾아 제거합니다. Intersection2의 각 누락값에 대해, 해당 시간의 데이터가 컬렉션의 모든 멤버에서 제거됩니다.

tsc2 = delsamplefromcollection(tsc1,"index",... 
       find(isnan(tsc1.Intersection2.Data)));

또는 보간을 사용해 리샘플링하여 Intersection2Intersection3에서 NaN 값을 대체합니다. 이러한 시계열의 디폴트 보간 방법은 선형 보간입니다.

tsc1 = resample(tsc1,tsc1.Time);
tsc1.Intersection2.Data
ans = 48×1

    11
    12
    13
    15
    17
    16
    15
    13
    32
    51
      ⋮

컬렉션 멤버 플로팅하기

시계열 컬렉션의 데이터를 플로팅하려면 해당 멤버를 한 번에 하나씩 플로팅하십시오.

선택적으로 시간 벡터를 형식이 지정된 날짜와 시간으로 표시하려면 시작 날짜를 지정합니다. 이러한 경우 시간 단위는 시간이기 때문에 시와 분을 표시하는 표시 형식을 지정할 수 있습니다.

tsc1.TimeInfo.StartDate = "25-DEC-2022 00:00:00";
tsc1.TimeInfo.Format = "HH:MM";

컬렉션의 단일 멤버를 플로팅하면 멤버의 시간 단위는 x축, 데이터 단위는 y축에 표시됩니다. 플롯 제목은 Time Series Plot:<member name>으로 표시됩니다.

컬렉션의 여러 멤버를 플로팅하기 전에 hold on을 지정하면 주석이 표시되지 않습니다. 시계열 plot 메서드는 유지된 Figure에 레이블과 제목을 표시하지 않습니다. 계열의 설명자가 다를 수 있기 때문입니다. 날짜 형식을 유지하려면 첫 번째 멤버를 플로팅한 후 유지하십시오. 전체 컬렉션을 반영하도록 제목과 레이블을 업데이트합니다.

plot(tsc1.Intersection1,"Displayname","Intersection 1")
hold on  
plot(tsc1.Intersection2,"Displayname","Intersection 2")

legend("Location","NorthWest")
title("Intersections 1 and 2")
xlabel("Time (hours)")
ylabel("Number of cars")
hold off

Figure contains an axes object. The axes object with title Intersections 1 and 2, xlabel Time (hours), ylabel Number of cars contains 2 objects of type stair, line. These objects represent Intersection 1, Intersection 2.

참고 항목

| |