Этот пример показывает, как создать обычное расписание из того, которое имеет пропавших без вести, копию, или неоднородные времена. Расписание является типом таблицы, которая сопоставляет метку времени, или время строки, с каждой строкой данных. В обычном расписании времена строки сортируются и уникальны, и отличаться тем же шагом постоянного времени. Пример также показывает, как экспортировать данные из расписания для использования с другими функциями.
Расписания могут быть неправильными. Они могут содержать строки, которые не сортируются по их временам строки. Расписания могут содержать несколько строк с тем же временем строки, хотя строки могут иметь различные значения данных. Даже когда времена строки сортируются и уникальны, они могут отличаться временными шагами различных размеров. Расписания могут даже содержать NaT
или значения NaN
, чтобы указать недостающее время строки.
Расписания обеспечивают много различных способов разрешить то, чтобы избегать, копию, или неоднородные времена, и передискретизировать или агрегированные данные к регулярным временам строки.
Чтобы найти недостающие времена строки, используйте ismissing
.
Чтобы удалить недостающие времена и данные, используйте rmmissing
.
Чтобы отсортировать расписание к его временам строки, используйте sortrows
.
Чтобы сделать расписание с уникальными и отсортированными временами строки, используйте unique
и retime
.
Чтобы удалить дублирующиеся времена, задайте уникальный временной вектор и используйте retime
.
Чтобы сделать обычное расписание, задайте вектор постоянного времени и используйте retime
.
Загрузите демонстрационное расписание из MAT-файла badTimes
, который содержит погодные измерения, принятые несколько часов 9 июня 2016. Расписание включает температуру, ливень и измерения скорости ветра, проведенные в неправильные времена в течение того дня.
load badTimes
TT
TT=12×4 timetable
Time Temp Rain WindSpeed
____________________ ____ ____ _________
09-Jun-2016 06:01:04 73 0.01 2.3
09-Jun-2016 07:59:23 59 0.08 0.9
09-Jun-2016 09:53:57 59 0.03 3.4
09-Jun-2016 09:53:57 67 0.03 3.4
NaT 56 0 0
09-Jun-2016 09:53:57 67 0.03 3.4
09-Jun-2016 08:49:10 62 0.01 2.7
09-Jun-2016 08:49:10 75.8 0.01 2.7
09-Jun-2016 08:49:10 82 0.01 2.7
09-Jun-2016 05:03:11 66.2 0.05 3
09-Jun-2016 08:49:10 67.2 0.01 2.7
09-Jun-2016 04:12:00 58.8 NaN NaN
Удалите строки, которые имеют NaT
или отсутствующее значение, как время строки. Чтобы найти отсутствующие значения в векторе времен строки, используйте функцию ismissing
. ismissing
возвращает логический вектор, который содержит 1
везде, где TT.Time
имеет отсутствующее значение. Индексируйте назад в расписание, чтобы сохранить только те строки, которые не имеют отсутствующих значений как времен строки. Присвойте те строки TT2
.
TF = ismissing(TT.Time); TT2 = TT(~TF,:); TT2
TT2=11×4 timetable
Time Temp Rain WindSpeed
____________________ ____ ____ _________
09-Jun-2016 06:01:04 73 0.01 2.3
09-Jun-2016 07:59:23 59 0.08 0.9
09-Jun-2016 09:53:57 59 0.03 3.4
09-Jun-2016 09:53:57 67 0.03 3.4
09-Jun-2016 09:53:57 67 0.03 3.4
09-Jun-2016 08:49:10 62 0.01 2.7
09-Jun-2016 08:49:10 75.8 0.01 2.7
09-Jun-2016 08:49:10 82 0.01 2.7
09-Jun-2016 05:03:11 66.2 0.05 3
09-Jun-2016 08:49:10 67.2 0.01 2.7
09-Jun-2016 04:12:00 58.8 NaN NaN
Этот метод удаляет только строки, которые имеют недостающие времена строки. Табличные переменные могут все еще иметь недостающие значения данных. Например, последняя строка TT2
имеет значения NaN
для переменных Rain
и Windspeed
.
Можно удалить недостающие времена строки и пропускающий значения данных с помощью функции rmmissing
. rmmissing
удаляет любую строку расписания, которая имеет недостающее время строки, пропуская значения данных или обоих.
Отобразите недостающее время строки и пропускающий значения данных TT
. Затем удалите все отсутствующие значения из TT
.
TT
TT=12×4 timetable
Time Temp Rain WindSpeed
____________________ ____ ____ _________
09-Jun-2016 06:01:04 73 0.01 2.3
09-Jun-2016 07:59:23 59 0.08 0.9
09-Jun-2016 09:53:57 59 0.03 3.4
09-Jun-2016 09:53:57 67 0.03 3.4
NaT 56 0 0
09-Jun-2016 09:53:57 67 0.03 3.4
09-Jun-2016 08:49:10 62 0.01 2.7
09-Jun-2016 08:49:10 75.8 0.01 2.7
09-Jun-2016 08:49:10 82 0.01 2.7
09-Jun-2016 05:03:11 66.2 0.05 3
09-Jun-2016 08:49:10 67.2 0.01 2.7
09-Jun-2016 04:12:00 58.8 NaN NaN
TT = rmmissing(TT)
TT=10×4 timetable
Time Temp Rain WindSpeed
____________________ ____ ____ _________
09-Jun-2016 06:01:04 73 0.01 2.3
09-Jun-2016 07:59:23 59 0.08 0.9
09-Jun-2016 09:53:57 59 0.03 3.4
09-Jun-2016 09:53:57 67 0.03 3.4
09-Jun-2016 09:53:57 67 0.03 3.4
09-Jun-2016 08:49:10 62 0.01 2.7
09-Jun-2016 08:49:10 75.8 0.01 2.7
09-Jun-2016 08:49:10 82 0.01 2.7
09-Jun-2016 05:03:11 66.2 0.05 3
09-Jun-2016 08:49:10 67.2 0.01 2.7
Определите, сортируется ли TT
. Затем отсортируйте расписание на его временах строки с помощью функции sortrows
.
TF = issorted(TT)
TF = logical
0
TT = sortrows(TT)
TT=10×4 timetable
Time Temp Rain WindSpeed
____________________ ____ ____ _________
09-Jun-2016 05:03:11 66.2 0.05 3
09-Jun-2016 06:01:04 73 0.01 2.3
09-Jun-2016 07:59:23 59 0.08 0.9
09-Jun-2016 08:49:10 62 0.01 2.7
09-Jun-2016 08:49:10 75.8 0.01 2.7
09-Jun-2016 08:49:10 82 0.01 2.7
09-Jun-2016 08:49:10 67.2 0.01 2.7
09-Jun-2016 09:53:57 59 0.03 3.4
09-Jun-2016 09:53:57 67 0.03 3.4
09-Jun-2016 09:53:57 67 0.03 3.4
Определите, является ли TT
регулярным. Обычное расписание имеет тот же временной интервал между временами строки подряд. Даже отсортированное расписание может иметь временные шаги, которые не универсальны.
TF = isregular(TT)
TF = logical
0
Отобразите различия между временами строки.
diff(TT.Time)
ans = 9x1 duration array
00:57:53
01:58:19
00:49:47
00:00:00
00:00:00
00:00:00
01:04:47
00:00:00
00:00:00
Расписания могут иметь дублирующиеся строки. Строки расписания являются копиями, если у них есть те же времена строки и те же значения данных. В этом примере последние две строки TT
являются копиями.
Чтобы удалить дублирующиеся строки, используйте функцию unique
. unique
возвращает уникальные строки и сортирует их к их временам строки.
TT = unique(TT)
TT=9×4 timetable
Time Temp Rain WindSpeed
____________________ ____ ____ _________
09-Jun-2016 05:03:11 66.2 0.05 3
09-Jun-2016 06:01:04 73 0.01 2.3
09-Jun-2016 07:59:23 59 0.08 0.9
09-Jun-2016 08:49:10 62 0.01 2.7
09-Jun-2016 08:49:10 67.2 0.01 2.7
09-Jun-2016 08:49:10 75.8 0.01 2.7
09-Jun-2016 08:49:10 82 0.01 2.7
09-Jun-2016 09:53:57 59 0.03 3.4
09-Jun-2016 09:53:57 67 0.03 3.4
Расписания могут иметь строки с временами дублирующейся строки, но различными значениями данных. В этом примере TT
имеет несколько строк с теми же временами строки, но различными значениями.
Найдите строки, которые имеют времена дублирующейся строки. Во-первых, отсортируйте времена строки и найдите времена подряд, которые не имеют никакого различия между ними. Времена без различия между ними являются копиями. Индексируйте назад в вектор времен строки и возвратите уникальный набор времен, которые идентифицируют времена дублирующейся строки в TT
.
dupTimes = sort(TT.Time); TF = (diff(dupTimes) == 0); dupTimes = dupTimes(TF); dupTimes = unique(dupTimes)
dupTimes = 2x1 datetime array
09-Jun-2016 08:49:10
09-Jun-2016 09:53:57
Индексируйте в расписание, чтобы отобразить строки с временами дублирующейся строки. Когда вы индексируете на временах, выходное расписание содержит все строки с соответствием с временами строки.
TT(dupTimes,:)
ans=6×4 timetable
Time Temp Rain WindSpeed
____________________ ____ ____ _________
09-Jun-2016 08:49:10 62 0.01 2.7
09-Jun-2016 08:49:10 67.2 0.01 2.7
09-Jun-2016 08:49:10 75.8 0.01 2.7
09-Jun-2016 08:49:10 82 0.01 2.7
09-Jun-2016 09:53:57 59 0.03 3.4
09-Jun-2016 09:53:57 67 0.03 3.4
Выберите любого первое и последняя из строк с временами дублирующейся строки с помощью функций retime
и unique
.
Во-первых, создайте вектор уникальных времен строки от TT
с помощью функции unique
.
uniqueTimes = unique(TT.Time);
Выберите первую строку из каждого набора строк, которые имеют дублирующиеся времена.
TT2 = retime(TT,uniqueTimes)
TT2=5×4 timetable
Time Temp Rain WindSpeed
____________________ ____ ____ _________
09-Jun-2016 05:03:11 66.2 0.05 3
09-Jun-2016 06:01:04 73 0.01 2.3
09-Jun-2016 07:59:23 59 0.08 0.9
09-Jun-2016 08:49:10 62 0.01 2.7
09-Jun-2016 09:53:57 59 0.03 3.4
Выберите последние строки из каждого набора строк, которые имеют дублирующиеся времена. Задайте метод 'previous'
retime
, чтобы скопировать данные из последней строки. Когда вы задаете 'previous'
, затем retime
запускается в конце вектора времен строки и остановок, когда это сталкивается со временем дублирующейся строки. Затем это копирует данные из той строки.
TT2 = retime(TT,uniqueTimes,'previous')
TT2=5×4 timetable
Time Temp Rain WindSpeed
____________________ ____ ____ _________
09-Jun-2016 05:03:11 66.2 0.05 3
09-Jun-2016 06:01:04 73 0.01 2.3
09-Jun-2016 07:59:23 59 0.08 0.9
09-Jun-2016 08:49:10 82 0.01 2.7
09-Jun-2016 09:53:57 67 0.03 3.4
Агрегированные данные из строк, которые имеют времена дублирующейся строки. Например, можно вычислить средние значения нескольких измерений того же количества, взятого одновременно.
Вычислите среднюю температуру, ливень и скорость ветра для строк с временами дублирующейся строки с помощью функции retime
.
TT = retime(TT,uniqueTimes,'mean')
TT=5×4 timetable
Time Temp Rain WindSpeed
____________________ _____ ____ _________
09-Jun-2016 05:03:11 66.2 0.05 3
09-Jun-2016 06:01:04 73 0.01 2.3
09-Jun-2016 07:59:23 59 0.08 0.9
09-Jun-2016 08:49:10 71.75 0.01 2.7
09-Jun-2016 09:53:57 63 0.03 3.4
Создайте обычное расписание с помощью retime
. Интерполируйте данные на регулярный почасовый временной вектор. Чтобы использовать линейную интерполяцию, задайте 'linear'
. Каждый раз строки в TT
начинается на часе, и между временами строки подряд существует одночасовой интервал.
TT = retime(TT,'hourly','linear')
TT=6×4 timetable
Time Temp Rain WindSpeed
____________________ ______ ________ _________
09-Jun-2016 05:00:00 65.826 0.0522 3.0385
09-Jun-2016 06:00:00 72.875 0.010737 2.3129
09-Jun-2016 07:00:00 66.027 0.044867 1.6027
09-Jun-2016 08:00:00 59.158 0.079133 0.9223
09-Jun-2016 09:00:00 70.287 0.013344 2.8171
09-Jun-2016 10:00:00 62.183 0.031868 3.4654
Вместо того, чтобы использовать предопределенный временной шаг, такой как 'hourly'
, можно задать собственный временной шаг. Чтобы задать временной шаг 30 минут, используйте входной параметр 'regular'
и аргумент пары "имя-значение" 'TimeStep'
. Можно задать временной шаг любого размера как длительность или календарное значение длительности.
TT = retime(TT,'regular','linear','TimeStep',minutes(30))
TT=11×4 timetable
Time Temp Rain WindSpeed
____________________ ______ ________ _________
09-Jun-2016 05:00:00 65.826 0.0522 3.0385
09-Jun-2016 05:30:00 69.35 0.031468 2.6757
09-Jun-2016 06:00:00 72.875 0.010737 2.3129
09-Jun-2016 06:30:00 69.451 0.027802 1.9578
09-Jun-2016 07:00:00 66.027 0.044867 1.6027
09-Jun-2016 07:30:00 62.592 0.062 1.2625
09-Jun-2016 08:00:00 59.158 0.079133 0.9223
09-Jun-2016 08:30:00 64.722 0.046239 1.8697
09-Jun-2016 09:00:00 70.287 0.013344 2.8171
09-Jun-2016 09:30:00 66.235 0.022606 3.1412
09-Jun-2016 10:00:00 62.183 0.031868 3.4654
Можно экспортировать данные о расписании для использования с функциями, чтобы анализировать данные, которые расположены с равными интервалами вовремя. Например, Econometrics Toolbox™ и Signal Processing Toolbox™ имеют функции, которые можно использовать для последующего анализа на расположенных с равными интервалами данных.
Извлеките данные о расписании как массив. Можно использовать свойство Variables
возвратить данные как массив, когда табличные переменные могут быть конкатенированы.
A = TT.Variables
A = 11×3
65.8260 0.0522 3.0385
69.3504 0.0315 2.6757
72.8747 0.0107 2.3129
69.4507 0.0278 1.9578
66.0266 0.0449 1.6027
62.5923 0.0620 1.2625
59.1579 0.0791 0.9223
64.7224 0.0462 1.8697
70.2868 0.0133 2.8171
66.2348 0.0226 3.1412
⋮
TT.Variables
эквивалентен использованию изогнутого синтаксиса фигурной скобки, TT{:,:}
, чтобы получить доступ ко всем переменным.
A2 = TT{:,:}
A2 = 11×3
65.8260 0.0522 3.0385
69.3504 0.0315 2.6757
72.8747 0.0107 2.3129
69.4507 0.0278 1.9578
66.0266 0.0449 1.6027
62.5923 0.0620 1.2625
59.1579 0.0791 0.9223
64.7224 0.0462 1.8697
70.2868 0.0133 2.8171
66.2348 0.0226 3.1412
⋮
diff
| fillmissing
| isregular
| issorted
| retime
| rmmissing
| sortrows
| table2timetable
| timetable
| unique