В этом примере показано, как заполнить пробелы в переменных расписания, используя различные методы для различных переменных. Вы можете указать, содержит ли каждая переменная расписания непрерывные или дискретные данные, используя 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.Propertiesans =
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.Propertiesans =
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 функция делает.
retime | synchronize | timetable