Этот пример показывает, как заполнить разрывы в переменных расписания, с помощью различных методов для различных переменных. Можно задать, содержит ли каждая переменная расписания текущие или дискретные данные с помощью свойства 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×5 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×5 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×5 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×5 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×2 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×6 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×6 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