이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

누락되거나 중복되거나 불균일하게 분포된 시간값이 포함된 타임테이블 정리하기

이 예제에서는 누락되거나 중복되거나 불균일하게 분포된 시간값이 포함된 타임테이블에서 규칙적인 타임테이블을 만드는 방법을 보여줍니다. 타임테이블은 타임스탬프나 행 시간값을 각 데이터 행과 연결하는 테이블의 한 유형입니다. 규칙적인 타임테이블에서 행 시간값은 고유하고 정렬되어 있으며 스텝 간의 차는 규칙적입니다. 또한 이 예제에서는 다른 함수에서 사용할 수 있도록 타임테이블에서 데이터를 내보내는 방법도 보여줍니다.

타임테이블은 불규칙적일 수 있습니다. 타임테이블에는 해당 행 시간값을 기준으로 정렬되지 않은 행이 포함될 수 있습니다. 타임테이블에는 행 시간값이 동일한 행이 여러 개 있을 수 있지만, 이 때 행은 서로 다른 데이터 값을 가질 수 있습니다. 행 시간값이 고유하고 정렬되어 있는 경우에도 행 시간값 간의 시간 스텝의 크기는 다를 수 있습니다. 타임테이블에는 누락된 행 시간값을 나타내는 NaT 값 또는 NaN 값도 포함될 수 있습니다.

타임테이블은 누락되거나 중복되거나 불균일하게 분포된 시간값을 해결하고 규칙적인 행 시간값으로 데이터를 리샘플링하거나 집계할 수 있는 여러 가지 방법을 제공합니다.

  • 누락된 행 시간값을 찾으려면 ismissing을 사용하십시오.

  • 누락된 시간값과 데이터를 제거하려면 rmmissing을 사용하십시오.

  • 타임테이블을 행 시간값을 기준으로 정렬하려면 sortrows를 사용하십시오.

  • 고유하고 정렬된 행 시간값이 포함된 타임테이블을 만들려면 uniqueretime을 사용하십시오.

  • 중복된 시간값을 제거하려면 고유한 시간 벡터를 지정하고 retime을 사용하십시오.

  • 규칙적인 타임테이블을 만들려면 규칙적인 시간 벡터를 지정하고 retime을 사용하십시오.

타임테이블 불러오기

2016년 6월 9일에 몇 시간 동안 얻어진 날씨 측정값이 포함된 MAT 파일 badTimes의 샘플 타임테이블을 불러옵니다. 이 타임테이블에는 이날의 불규칙적인 시간 간격으로 측정된 기온, 강우량, 풍속 값이 포함되어 있습니다.

load badTimes
TT
TT=12×3 timetable
            Time            Temp    Rain    WindSpeed
    ____________________    ____    ____    _________

    09-Jun-2016 06:01:04      73    0.01       2.3   
    09-Jun-2016 07:59:23      59    0.08       0.9   
    09-Jun-2016 09:53:57      59    0.03       3.4   
    09-Jun-2016 09:53:57      67    0.03       3.4   
    NaT                       56       0         0   
    09-Jun-2016 09:53:57      67    0.03       3.4   
    09-Jun-2016 08:49:10      62    0.01       2.7   
    09-Jun-2016 08:49:10    75.8    0.01       2.7   
    09-Jun-2016 08:49:10      82    0.01       2.7   
    09-Jun-2016 05:03:11    66.2    0.05         3   
    09-Jun-2016 08:49:10    67.2    0.01       2.7   
    09-Jun-2016 04:12:00    58.8     NaN       NaN   

누락된 시간값을 가지는 행 제거하기

행 시간값으로 NaT나 누락된 값을 가지는 행을 제거합니다. 행 시간값으로 구성된 벡터에서 누락된 값을 찾으려면 ismissing 함수를 사용하십시오. ismissingTT.Time에 누락된 값이 있는 경우 항상 1이 포함된 논리형 벡터를 반환합니다. 타임테이블로 다시 인덱싱하여 행 시간값에 누락된 값이 없는 행만 취합니다. 취한 행을 TT2에 할당합니다.

TF = ismissing(TT.Time);
TT2 = TT(~TF,:);
TT2
TT2=11×3 timetable
            Time            Temp    Rain    WindSpeed
    ____________________    ____    ____    _________

    09-Jun-2016 06:01:04      73    0.01       2.3   
    09-Jun-2016 07:59:23      59    0.08       0.9   
    09-Jun-2016 09:53:57      59    0.03       3.4   
    09-Jun-2016 09:53:57      67    0.03       3.4   
    09-Jun-2016 09:53:57      67    0.03       3.4   
    09-Jun-2016 08:49:10      62    0.01       2.7   
    09-Jun-2016 08:49:10    75.8    0.01       2.7   
    09-Jun-2016 08:49:10      82    0.01       2.7   
    09-Jun-2016 05:03:11    66.2    0.05         3   
    09-Jun-2016 08:49:10    67.2    0.01       2.7   
    09-Jun-2016 04:12:00    58.8     NaN       NaN   

이 메서드는 누락된 행 시간값이 있는 행만 제거합니다. 테이블 변수에는 여전히 누락된 데이터 값이 있을 수 있습니다. 예를 들어, TT2의 마지막 행은 Rain 변수와 Windspeed 변수에 대해 NaN 값을 가집니다.

누락된 시간이나 누락된 데이터를 가지는 행 제거하기

rmmissing 함수를 사용하여 누락된 행 시간값과 누락된 데이터 값을 제거할 수 있습니다. rmmissing은 누락된 행 시간값이나 누락된 데이터 값 또는 둘 모두가 포함된 타임테이블 행을 모두 제거합니다.

TT의 누락된 행 시간값과 누락된 데이터 값을 표시합니다. 그런 다음, TT에서 누락된 값을 모두 제거합니다.

TT
TT=12×3 timetable
            Time            Temp    Rain    WindSpeed
    ____________________    ____    ____    _________

    09-Jun-2016 06:01:04      73    0.01       2.3   
    09-Jun-2016 07:59:23      59    0.08       0.9   
    09-Jun-2016 09:53:57      59    0.03       3.4   
    09-Jun-2016 09:53:57      67    0.03       3.4   
    NaT                       56       0         0   
    09-Jun-2016 09:53:57      67    0.03       3.4   
    09-Jun-2016 08:49:10      62    0.01       2.7   
    09-Jun-2016 08:49:10    75.8    0.01       2.7   
    09-Jun-2016 08:49:10      82    0.01       2.7   
    09-Jun-2016 05:03:11    66.2    0.05         3   
    09-Jun-2016 08:49:10    67.2    0.01       2.7   
    09-Jun-2016 04:12:00    58.8     NaN       NaN   

TT = rmmissing(TT)
TT=10×3 timetable
            Time            Temp    Rain    WindSpeed
    ____________________    ____    ____    _________

    09-Jun-2016 06:01:04      73    0.01       2.3   
    09-Jun-2016 07:59:23      59    0.08       0.9   
    09-Jun-2016 09:53:57      59    0.03       3.4   
    09-Jun-2016 09:53:57      67    0.03       3.4   
    09-Jun-2016 09:53:57      67    0.03       3.4   
    09-Jun-2016 08:49:10      62    0.01       2.7   
    09-Jun-2016 08:49:10    75.8    0.01       2.7   
    09-Jun-2016 08:49:10      82    0.01       2.7   
    09-Jun-2016 05:03:11    66.2    0.05         3   
    09-Jun-2016 08:49:10    67.2    0.01       2.7   

타임테이블을 정렬하고 타임테이블이 규칙적인지 확인하기

TT가 정렬되었는지 확인합니다. 그런 다음, sortrows 함수를 사용하여 해당 행 시간값에 대해 타임테이블을 정렬합니다.

TF = issorted(TT)
TF = logical
   0

TT = sortrows(TT)
TT=10×3 timetable
            Time            Temp    Rain    WindSpeed
    ____________________    ____    ____    _________

    09-Jun-2016 05:03:11    66.2    0.05         3   
    09-Jun-2016 06:01:04      73    0.01       2.3   
    09-Jun-2016 07:59:23      59    0.08       0.9   
    09-Jun-2016 08:49:10      62    0.01       2.7   
    09-Jun-2016 08:49:10    75.8    0.01       2.7   
    09-Jun-2016 08:49:10      82    0.01       2.7   
    09-Jun-2016 08:49:10    67.2    0.01       2.7   
    09-Jun-2016 09:53:57      59    0.03       3.4   
    09-Jun-2016 09:53:57      67    0.03       3.4   
    09-Jun-2016 09:53:57      67    0.03       3.4   

TT가 규칙적인지 확인합니다. 규칙적인 타임테이블은 연속된 행 시간값 사이의 시간 간격이 동일합니다. 정렬된 타임테이블인 경우에도 시간 스텝이 균일하지 않을 수 있습니다.

TF = isregular(TT)
TF = logical
   0

행 시간값 간의 차이를 표시합니다.

diff(TT.Time)
ans = 9x1 duration array
   00:57:53
   01:58:19
   00:49:47
   00:00:00
   00:00:00
   00:00:00
   01:04:47
   00:00:00
   00:00:00

중복된 행 제거하기

타임테이블에 중복된 행이 있을 수 있습니다. 타임테이블에서 동일한 행 시간값과 동일한 데이터 값을 가지는 행이 두 개 이상 있는 경우, 타임테이블 행이 중복되었다고 표현합니다. 이 예제에서 TT는 마지막 두 행이 중복되어 있습니다.

중복된 행을 제거하려면 unique 함수를 사용하십시오. unique는 고유한 값을 가지는 행을 반환하고 해당 행 시간값을 기준으로 정렬합니다.

TT = unique(TT)
TT=9×3 timetable
            Time            Temp    Rain    WindSpeed
    ____________________    ____    ____    _________

    09-Jun-2016 05:03:11    66.2    0.05         3   
    09-Jun-2016 06:01:04      73    0.01       2.3   
    09-Jun-2016 07:59:23      59    0.08       0.9   
    09-Jun-2016 08:49:10      62    0.01       2.7   
    09-Jun-2016 08:49:10    67.2    0.01       2.7   
    09-Jun-2016 08:49:10    75.8    0.01       2.7   
    09-Jun-2016 08:49:10      82    0.01       2.7   
    09-Jun-2016 09:53:57      59    0.03       3.4   
    09-Jun-2016 09:53:57      67    0.03       3.4   

중복된 시간값에서 서로 다른 데이터를 가지는 행 찾기

타임테이블에 데이터 값은 다르지만, 행 시간값이 중복된 행이 있을 수 있습니다. 이 예제의 TT에는 값은 다르지만 행 시간값이 동일한 행이 여러 개 있습니다.

행 시간값이 중복된 행을 찾아 보겠습니다. 먼저, 행 시간값을 정렬한 후 서로 간에 차이가 없는 연속된 시간값을 찾습니다. 서로 간에 차이가 없다면 시간값이 중복된 것입니다. 행 시간값으로 구성된 벡터의 요소를 다시 참조하고 TT에서 중복된 행 시간값을 식별하는 고유한 시간값의 집합을 반환합니다.

dupTimes = sort(TT.Time);
TF = (diff(dupTimes) == 0);
dupTimes = dupTimes(TF);
dupTimes = unique(dupTimes)
dupTimes = 2x1 datetime array
   09-Jun-2016 08:49:10
   09-Jun-2016 09:53:57

타임테이블의 요소를 참조하여 중복된 행 시간값이 있는 행을 표시합니다. 시간값에 대해 인덱싱하면 출력 타임테이블에 행 시간값이 일치하는 모든 행이 포함됩니다.

TT(dupTimes,:)
ans=6×3 timetable
            Time            Temp    Rain    WindSpeed
    ____________________    ____    ____    _________

    09-Jun-2016 08:49:10      62    0.01       2.7   
    09-Jun-2016 08:49:10    67.2    0.01       2.7   
    09-Jun-2016 08:49:10    75.8    0.01       2.7   
    09-Jun-2016 08:49:10      82    0.01       2.7   
    09-Jun-2016 09:53:57      59    0.03       3.4   
    09-Jun-2016 09:53:57      67    0.03       3.4   

중복된 시간값이 있는 첫 번째 행과 마지막 행 선택하기

unique 함수와 retime 함수를 사용하여 중복된 행 시간값이 있는 첫 번째 행 또는 마지막 행을 선택할 수 있습니다.

먼저, unique 함수를 사용하여 TT에서 고유한 행 시간값으로 구성된 벡터를 만듭니다.

uniqueTimes = unique(TT.Time);

중복된 시간값을 가지는 각각의 행 집합에서 첫 번째 행을 선택합니다.

TT2 = retime(TT,uniqueTimes)
TT2=5×3 timetable
            Time            Temp    Rain    WindSpeed
    ____________________    ____    ____    _________

    09-Jun-2016 05:03:11    66.2    0.05         3   
    09-Jun-2016 06:01:04      73    0.01       2.3   
    09-Jun-2016 07:59:23      59    0.08       0.9   
    09-Jun-2016 08:49:10      62    0.01       2.7   
    09-Jun-2016 09:53:57      59    0.03       3.4   

중복된 시간값을 가지는 각각의 행 집합에서 마지막 행을 선택합니다. retime'previous' 메서드를 지정하여 마지막 행에서부터 데이터를 복사합니다. 'previous'를 지정할 경우 retime은 행 시간값으로 구성된 벡터의 끝에서 시작하고, 중복된 행 시간값이 발견되면 중지합니다. 그런 다음, 그 행부터 데이터를 복사합니다.

TT2 = retime(TT,uniqueTimes,'previous')
TT2=5×3 timetable
            Time            Temp    Rain    WindSpeed
    ____________________    ____    ____    _________

    09-Jun-2016 05:03:11    66.2    0.05         3   
    09-Jun-2016 06:01:04      73    0.01       2.3   
    09-Jun-2016 07:59:23      59    0.08       0.9   
    09-Jun-2016 08:49:10      82    0.01       2.7   
    09-Jun-2016 09:53:57      67    0.03       3.4   

중복된 시간값이 있는 모든 행에서 데이터 집계하기

행 시간이 중복된 행에서 데이터를 집계합니다. 예를 들어, 동시에 측정된 동일한 수량의 여러 값에 대해 평균을 계산할 수 있습니다.

retime 함수를 사용하여 중복된 행 시간값이 있는 행의 평균 기온, 평균 강우량, 평균 풍속을 계산합니다.

TT = retime(TT,uniqueTimes,'mean')
TT=5×3 timetable
            Time            Temp     Rain    WindSpeed
    ____________________    _____    ____    _________

    09-Jun-2016 05:03:11     66.2    0.05         3   
    09-Jun-2016 06:01:04       73    0.01       2.3   
    09-Jun-2016 07:59:23       59    0.08       0.9   
    09-Jun-2016 08:49:10    71.75    0.01       2.7   
    09-Jun-2016 09:53:57       63    0.03       3.4   

규칙적인 타임테이블 만들기

retime을 사용하여 규칙적인 타임테이블을 생성합니다. 규칙적인 시간별 시간 벡터로 데이터를 보간합니다. 선형 보간을 사용하려면 'linear'를 지정하십시오. TT의 각 행 시간값은 정시에 시작되며, 연속된 행 시간값 사이에는 1시간의 간격이 있습니다.

TT = retime(TT,'hourly','linear')
TT=6×3 timetable
            Time             Temp       Rain      WindSpeed
    ____________________    ______    ________    _________

    09-Jun-2016 05:00:00    65.826      0.0522     3.0385  
    09-Jun-2016 06:00:00    72.875    0.010737     2.3129  
    09-Jun-2016 07:00:00    66.027    0.044867     1.6027  
    09-Jun-2016 08:00:00    59.158    0.079133     0.9223  
    09-Jun-2016 09:00:00    70.287    0.013344     2.8171  
    09-Jun-2016 10:00:00    62.183    0.031868     3.4654  

'hourly' 같이 미리 정의된 시간 스텝을 사용하는 대신 고유한 시간 스텝을 지정할 수 있습니다. 시간 스텝을 30분으로 지정하려면 'regular' 입력 인수와 'TimeStep' 이름-값 쌍의 인수를 사용하십시오. 임의 크기의 시간 스텝을 duration형 값 또는 calendarDuration형 값으로 지정할 수 있습니다.

TT = retime(TT,'regular','linear','TimeStep',minutes(30))
TT=11×3 timetable
            Time             Temp       Rain      WindSpeed
    ____________________    ______    ________    _________

    09-Jun-2016 05:00:00    65.826      0.0522     3.0385  
    09-Jun-2016 05:30:00     69.35    0.031468     2.6757  
    09-Jun-2016 06:00:00    72.875    0.010737     2.3129  
    09-Jun-2016 06:30:00    69.451    0.027802     1.9578  
    09-Jun-2016 07:00:00    66.027    0.044867     1.6027  
    09-Jun-2016 07:30:00    62.592       0.062     1.2625  
    09-Jun-2016 08:00:00    59.158    0.079133     0.9223  
    09-Jun-2016 08:30:00    64.722    0.046239     1.8697  
    09-Jun-2016 09:00:00    70.287    0.013344     2.8171  
    09-Jun-2016 09:30:00    66.235    0.022606     3.1412  
    09-Jun-2016 10:00:00    62.183    0.031868     3.4654  

규칙적인 타임테이블 데이터 추출하기

함수에 사용할 타임테이블 데이터를 내보내 규칙적인 시간상의 간격을 갖는 데이터를 분석할 수 있습니다. 예를 들어, Econometrics Toolbox™와 Signal Processing Toolbox™는 규칙적인 간격의 데이터에 대한 추가 분석에 사용할 수 있는 함수를 제공합니다.

타임테이블 데이터를 배열로 추출합니다. 테이블 변수를 결합할 수 있는 경우 Variables 속성을 사용하여 데이터를 배열로 반환할 수 있습니다.

A = TT.Variables
A = 11×3

   65.8260    0.0522    3.0385
   69.3504    0.0315    2.6757
   72.8747    0.0107    2.3129
   69.4507    0.0278    1.9578
   66.0266    0.0449    1.6027
   62.5923    0.0620    1.2625
   59.1579    0.0791    0.9223
   64.7224    0.0462    1.8697
   70.2868    0.0133    2.8171
   66.2348    0.0226    3.1412
      ⋮

TT.Variables는 중괄호 구문 TT{:,:}을 사용하여 모든 변수에 액세스하는 것과 같습니다.

A2 = TT{:,:}
A2 = 11×3

   65.8260    0.0522    3.0385
   69.3504    0.0315    2.6757
   72.8747    0.0107    2.3129
   69.4507    0.0278    1.9578
   66.0266    0.0449    1.6027
   62.5923    0.0620    1.2625
   59.1579    0.0791    0.9223
   64.7224    0.0462    1.8697
   70.2868    0.0133    2.8171
   66.2348    0.0226    3.1412
      ⋮

참고 항목

| | | | | | | | |

관련 항목