Main Content

여러 가지 방법으로 타임테이블 변수에 대한 시간 값을 재지정하고 동기화하기

이 예제에서는 여러 변수에 여러 가지 방법을 사용하여 타임테이블 변수에서 빈 자리를 채우는 방법을 보여줍니다. 타임테이블의 VariableContinuity 속성을 사용하여 각 타임테이블 변수에 연속 데이터 또는 이산 데이터를 포함시킬 것인지를 지정할 수 있습니다. retime 함수를 사용하여 타임테이블을 재추출하면 retimeVariableContinuity 속성의 값에 따라 이전 값으로 보간하고 채우거나 누락 데이터 표시자로 채웁니다. 마찬가지로, synchronize 함수는 입력 타임테이블의 VariableContinuity 속성에 따라 값을 보간하거나 채웁니다.

타임테이블 생성하기

2017년 5월 중 며칠 동안의 날씨 측정값을 시뮬레이션한 타임테이블을 생성합니다. 타임테이블 변수 TmaxTmin에는 각 날짜의 최고 온도 측정값과 최저 온도 측정값이 포함되고, PrecipTotal에는 해당 날짜의 총 강수량이 포함됩니다. WXEvent는 categorical형 배열로, 지정된 날짜에 천둥 또는 우박 같은 특정 기상 현상이 발생했는지 여부를 기록합니다. 타임테이블에는 2017년 5월 4일부터 10일까지의 시뮬레이션 데이터가 포함되어 있지만 6일과 7일 이틀 동안의 데이터는 누락되었습니다.

Date = [datetime(2017,5,4) datetime(2017,5,5) datetime(2017,5,8:10)]';
Tmax = [60 62 56 59 60]';
Tmin = [44 45 40 42 45]';
PrecipTotal = [0.2 0 0 0.15 0]';
WXEvent = [2 0 0 1 0]';
WXEvent = categorical(WXEvent,[0 1 2 3 4],{'None','Thunder','Hail','Fog','Tornado'});
Station1 = timetable(Date,Tmax,Tmin,PrecipTotal,WXEvent)
Station1=5×4 timetable
       Date        Tmax    Tmin    PrecipTotal    WXEvent
    ___________    ____    ____    ___________    _______

    04-May-2017     60      44         0.2        Hail   
    05-May-2017     62      45           0        None   
    08-May-2017     56      40           0        None   
    09-May-2017     59      42        0.15        Thunder
    10-May-2017     60      45           0        None   

연속 타임테이블 변수와 이산 타임테이블 변수 재추출하기

누락된 이틀 동안의 데이터를 채울 방법 중 하나는 retime 함수를 사용하는 것입니다. 메서드를 지정하지 않고 retime을 호출하면 retime은 누락 데이터 표시자로 간격을 채웁니다. 예를 들면, retime은 숫자형 변수의 빈 자리를 NaN 값으로 채우고, categorical형 변수의 빈 자리는 정의되지 않은 요소로 채웁니다.

Station1Daily = retime(Station1,'daily')
Station1Daily=7×4 timetable
       Date        Tmax    Tmin    PrecipTotal      WXEvent  
    ___________    ____    ____    ___________    ___________

    04-May-2017     60      44         0.2        Hail       
    05-May-2017     62      45           0        None       
    06-May-2017    NaN     NaN         NaN        <undefined>
    07-May-2017    NaN     NaN         NaN        <undefined>
    08-May-2017     56      40           0        None       
    09-May-2017     59      42        0.15        Thunder    
    10-May-2017     60      45           0        None       

retime을 호출할 때 메서드를 지정하면 이 함수는 동일한 메서드를 사용하여 모든 변수의 빈 자리를 채웁니다. 변수마다 다른 메서드를 적용하려면 retime을 여러 번 호출하고, 호출할 때마다 타임테이블의 요소를 참조하여 변수의 다른 서브셋에 액세스하면 됩니다.

타임테이블의 VariableContinuity 속성을 지정하여 다른 메서드를 적용할 수도 있습니다. 각 변수에 연속 데이터 또는 이산 데이터를 포함시킬 것인지를 지정할 수 있습니다. 그러면 retime 함수는 상응하는 VariableContinuity 값에 따라 각 타임테이블 변수에 각기 다른 메서드를 적용합니다.

VariableContinuity를 지정하면 retime 함수는 다음 메서드를 사용하여 출력 타임테이블 변수를 채웁니다.

  • 'unset' — 변수의 유형에 맞는 누락 데이터 표시자(예: 숫자형 변수의 경우 NaN)를 사용하여 값을 채웁니다.

  • 'continuous' — 선형 보간을 사용하여 값을 채웁니다.

  • 'step' — 이전 값을 사용하여 값을 채웁니다.

  • 'event' — 변수의 유형에 맞는 누락 데이터 표시자를 사용하여 값을 채웁니다.

Station1의 온도 데이터는 연속 데이터, PrecipTotal은 스텝 데이터, WXEvent는 이벤트 데이터로 지정합니다.

Station1.Properties.VariableContinuity = {'continuous','continuous','step','event'};
Station1.Properties
ans = 
  TimetableProperties with properties:

             Description: ''
                UserData: []
          DimensionNames: {'Date'  'Variables'}
           VariableNames: {'Tmax'  'Tmin'  'PrecipTotal'  'WXEvent'}
           VariableTypes: ["double"    "double"    "double"    "categorical"]
    VariableDescriptions: {}
           VariableUnits: {}
      VariableContinuity: [continuous    continuous    step    event]
                RowTimes: [5x1 datetime]
               StartTime: 04-May-2017
              SampleRate: NaN
                TimeStep: NaN
                  Events: []
        CustomProperties: No custom properties are set.
      Use addprop and rmprop to modify CustomProperties.

Station1의 데이터를 재추출합니다. VariableContinuity에 할당된 값에 따라, retime 함수는 온도 데이터를 보간하고 PrecipTotal의 빈 자리에는 전날의 값을 채우고 정의되지 않은 요소로 WXEvent의 빈 자리를 채웁니다.

Station1Daily = retime(Station1,'daily')
Station1Daily=7×4 timetable
       Date        Tmax     Tmin     PrecipTotal      WXEvent  
    ___________    ____    ______    ___________    ___________

    04-May-2017     60         44        0.2        Hail       
    05-May-2017     62         45          0        None       
    06-May-2017     60     43.333          0        <undefined>
    07-May-2017     58     41.667          0        <undefined>
    08-May-2017     56         40          0        None       
    09-May-2017     59         42       0.15        Thunder    
    10-May-2017     60         45          0        None       

메서드를 지정할 경우 retimeVariableContinuity의 값을 무시하고 지정된 메서드를 모든 변수에 적용합니다.

Station1Missing = retime(Station1,'daily','fillwithmissing')
Station1Missing=7×4 timetable
       Date        Tmax    Tmin    PrecipTotal      WXEvent  
    ___________    ____    ____    ___________    ___________

    04-May-2017     60      44         0.2        Hail       
    05-May-2017     62      45           0        None       
    06-May-2017    NaN     NaN         NaN        <undefined>
    07-May-2017    NaN     NaN         NaN        <undefined>
    08-May-2017     56      40           0        None       
    09-May-2017     59      42        0.15        Thunder    
    10-May-2017     60      45           0        None       

연속 데이터와 이산 데이터가 포함된 타임테이블 동기화하기

또한 synchronize 함수는 각 입력 타임테이블의 VariableContinuity 속성에 지정된 값에 따라 각기 다른 방법으로 출력 타임테이블 변수를 채웁니다.

두 번째 기상 관측소에서 측정한 기압 값(단위: 밀리바)이 포함된 두 번째 타임테이블을 만듭니다. 타임테이블에는 2017년 5월 4일부터 8일까지의 시뮬레이션 측정값이 포함되어 있습니다.

Date = datetime(2017,5,4:8)';
Pressure = [995 1003 1013 1018 1006]';
Station2 = timetable(Date,Pressure)
Station2=5×1 timetable
       Date        Pressure
    ___________    ________

    04-May-2017       995  
    05-May-2017      1003  
    06-May-2017      1013  
    07-May-2017      1018  
    08-May-2017      1006  

synchronize 함수를 사용하여 두 관측소의 데이터를 동기화합니다. synchronizeStation1VariableContinuity 속성에 지정된 값에 따라 Station1 변수의 값을 채웁니다. 그러나 Station2VariableContinuity 속성은 비어 있기 때문에 synchronizePressureNaN 값으로 채웁니다.

BothStations = synchronize(Station1,Station2)
BothStations=7×5 timetable
       Date        Tmax     Tmin     PrecipTotal      WXEvent      Pressure
    ___________    ____    ______    ___________    ___________    ________

    04-May-2017     60         44        0.2        Hail              995  
    05-May-2017     62         45          0        None             1003  
    06-May-2017     60     43.333          0        <undefined>      1013  
    07-May-2017     58     41.667          0        <undefined>      1018  
    08-May-2017     56         40          0        None             1006  
    09-May-2017     59         42       0.15        Thunder           NaN  
    10-May-2017     60         45          0        None              NaN  

Station2.Pressure에 연속 데이터가 포함됨을 표시하려면 Station2VariableContinuity 속성을 지정하십시오. Station2에 변수가 하나만 있는 경우에도 문자형 벡터가 아닌 셀형 배열을 사용하여 VariableContinuity를 지정해야 합니다.

Station2.Properties.VariableContinuity = {'continuous'};
Station2.Properties
ans = 
  TimetableProperties with properties:

             Description: ''
                UserData: []
          DimensionNames: {'Date'  'Variables'}
           VariableNames: {'Pressure'}
           VariableTypes: "double"
    VariableDescriptions: {}
           VariableUnits: {}
      VariableContinuity: continuous
                RowTimes: [5x1 datetime]
               StartTime: 04-May-2017
              SampleRate: NaN
                TimeStep: 1d
                  Events: []
        CustomProperties: No custom properties are set.
      Use addprop and rmprop to modify CustomProperties.

두 관측소의 데이터를 동기화합니다. Station2.Pressure에는 연속 데이터가 포함되므로 synchronizeBothStations.Pressure의 값을 채웁니다.

BothStations = synchronize(Station1,Station2)
BothStations=7×5 timetable
       Date        Tmax     Tmin     PrecipTotal      WXEvent      Pressure
    ___________    ____    ______    ___________    ___________    ________

    04-May-2017     60         44        0.2        Hail              995  
    05-May-2017     62         45          0        None             1003  
    06-May-2017     60     43.333          0        <undefined>      1013  
    07-May-2017     58     41.667          0        <undefined>      1018  
    08-May-2017     56         40          0        None             1006  
    09-May-2017     59         42       0.15        Thunder           994  
    10-May-2017     60         45          0        None              982  

synchronize에 대한 입력 인수로 메서드를 지정하면 synchronizeretime 함수와 마찬가지로 이 메서드를 모든 변수에 적용합니다.

참고 항목

| |

관련 항목