Повторная синхронизация и синхронизация переменных расписания Используя различные методы

Этот пример показывает, как заполнить разрывы в переменных расписания, с помощью различных методов для различных переменных. Можно задать, содержит ли каждая переменная расписания текущие или дискретные данные с помощью свойства VariableContinuity расписания. Когда вы передискретизируете расписание с помощью функции retime, retime или интерполирует, заполняет с предыдущими значениями или заполняет с недостающими индикаторами данных, в зависимости от значений в свойстве VariableContinuity. Точно так же функция synchronize интерполирует или заполняет значения на основе свойства VariableContinuity входных расписаний.

Создание объекта Timetable

Создайте расписание, которое моделировало погодные измерения в течение нескольких дней в мае 2017. Переменные расписания Tmax и Tmin содержат максимальные и минимальные температурные чтения в течение каждого дня и PrecipTotal, содержат сумму осадков в течение дня. WXEvent является категориальным массивом, записывая, произошли ли определенные виды погодных явлений, такие как гром или град, в какой-либо данный день. Расписание моделировало данные с 4 мая до 10 мая 2017, но пропускает данные в течение двух дней, 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 и разрывы в категориальной переменной с неопределенными элементами.

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' — Заполните значения с помощью линейной интерполяции.

  • шаг Заполните значения с помощью предыдущего значения.

  • событие Заполните значения с помощью недостающего индикатора данных для того типа.

Укажите, что температурные данные в 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'}
    VariableDescriptions: {}
           VariableUnits: {}
      VariableContinuity: [continuous    continuous    step    event]
                RowTimes: [5x1 datetime]
               StartTime: 04-May-2017
              SampleRate: NaN
                TimeStep: NaN
        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       

Если вы задаете метод, то retime применяет тот метод ко всем переменным, заменяя значения в VariableContinuity.

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       

Синхронизация Timetables, которые содержат текущие и дискретные данные

Функция synchronize также заполняет выходные переменные расписания с помощью различных методов, в зависимости от значений, заданных в свойстве VariableContinuity каждого входного расписания.

Создайте второе расписание, которое содержит чтения давления в миллибарах от второй метеостанции. Расписание моделировало чтения с 4 мая до 8 мая 2017.

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. synchronize заполняет значения для переменных от Station1 согласно значениям в свойстве VariableContinuity Station1. Однако, поскольку свойство VariableContinuity Station2 пусто, synchronize заполняет Pressure со значениями NaN.

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 содержит текущие данные, задайте свойство VariableContinuity Station2. Хотя Station2 содержит только одну переменную, необходимо задать VariableContinuity с помощью массива ячеек, не вектора символа.

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

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

Синхронизируйте данные от этих двух станций. synchronize заполняет значения в BothStations.Pressure, потому что Station2.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, то synchronize применяет тот метод ко всем переменным, как функция retime делает.

Смотрите также

| |

Похожие темы

Была ли эта тема полезной?