exponenta event banner

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

В этом примере показано, как заполнить пробелы в переменных расписания, используя различные методы для различных переменных. Вы можете указать, содержит ли каждая переменная расписания непрерывные или дискретные данные, используя VariableContinuity свойство расписания. При повторном отборе расписания с помощью retime функция, retime либо интерполирует, заполняет предыдущими значениями, либо заполняет отсутствующими индикаторами данных, в зависимости от значений в VariableContinuity собственность. Аналогично, synchronize функция интерполирует или заполняет значения на основе VariableContinuity свойство входных расписаний.

Создать расписание

Создайте расписание, которое моделировало измерения погоды в течение нескольких дней в мае 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' - заполнять значения с помощью линейной интерполяции.

  • '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'}
    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       

Синхронизация расписаний, содержащих непрерывные и дискретные данные

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 функция делает.

См. также

| |

Связанные темы