В этом примере показано, как заполнить погрешности в переменных timetable, используя различные методы для разных переменных. Можно задать, содержит ли каждая переменная расписания непрерывные или дискретные данные, используя 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 несколько раз, каждый временной индексации в timetable для доступа к другому подмножеству переменных.
Однако можно также применить различные методы, задав VariableContinuity свойство расписания. Можно задать, содержит ли каждая переменная непрерывные или дискретные данные. Затем retime функция применяет к каждой переменной timetable другой метод, в зависимости от соответствующей VariableContinuity значение.
Если вы задаете VariableContinuity, затем retime функция заполняет переменные выходы timetable следующими методами:
'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
The synchronize функция также заполняет переменные выходы timetable различными методами, в зависимости от значений, заданных в 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