MATLAB® объекты временных рядов имеют два типа:
timeseries
- Хранит данные и значения времени, а также информацию о метаданных, которая включает в себя модули, события, качество данных и метод интерполяции
tscollection
- Хранит набор timeseries
объекты, которые имеют общий временной вектор, удобный для выполнения операций на синхронизированных временных рядах с различными модулями
В этом разделе рассматриваются следующие темы:
Использование конструкторов временных рядов для создания экземпляров классов временных рядов
Изменение свойств объектов с помощью set
методы или запись через точку
Вызов функций и методов временных рядов
Чтобы получить быстрый обзор программирования с timeseries
и tscollection
объекты, следуйте шагам в Примере: Объекты и методы временных рядов.
Чтобы правильно понять описание timeseries
свойства и методы объекта в этой документации, важно уточнить некоторые термины, связанные с хранением данных в timeseries
объект - различие между значением данных и выборкой данных.
Значение данных является одним, скалярным значением, записанным в определенное время. Выборка данных состоит из одного или нескольких значений, сопоставленных с определенным временем в timeseries
объект. Количество выборок данных в временные ряды совпадает с длиной временного вектора.
Например, рассмотрим данные, которые состоят из трех сигналов датчика: два сигнала представляют положение объекта в метрах, а третий представляет его скорость в метрах/секундах.
Для ввода матрицы данных введите в подсказку MATLAB следующее:
x = [-0.2 -0.3 13; -0.1 -0.4 15; NaN 2.8 17; 0.5 0.3 NaN; -0.3 -0.1 15]
The NaN
значение представляет отсутствующее значение данных. MATLAB отображает следующую матрицу 5 на 3:
x= -0.2000 -0.3000 13.0000 -0.1000 -0.4000 15.0000 NaN 2.8000 17.0000 0.5000 0.3000 NaN -0.3000 -0.1000 15.0000
Первые два столбца x
содержать величины с одинаковыми модулями, и можно создать многомерную timeseries
объект для хранения этих двух временных рядов. Для получения дополнительной информации о создании timeseries
объекты, см. Конструктор временных рядов. Следующая команда создает timeseries
ts_pos объекта
для хранения значений положения:
ts_pos = timeseries(x(:,1:2), 1:5, 'name', 'Position')
MATLAB выводит следующие свойства ts_pos
:
timeseries Common Properties: Name: 'Position' Time: [5x1 double] TimeInfo: [1x1 tsdata.timemetadata] Data: [5x2 double] DataInfo: [1x1 tsdata.datametadata] More properties, Methods
The Length
временного вектора, который является 5
в этом примере равняется количеству выборок данных в timeseries
объект. Размер выборки данных найдите в ts_pos
путем ввода следующего в подсказке MATLAB:
getdatasamplesize(ts_pos) ans = 1 2
Точно так же можно создать вторую timeseries
объект для хранения данных о скорости:
ts_vel = timeseries(x(:,3), 1:5, 'name', 'Velocity');
Найдите размер каждой выборки данных в ts_vel
путем ввода следующего текста:
getdatasamplesize(ts_vel) ans = 1 1
Заметьте, что ts_vel
имеет одно значение данных в каждой выборке данных и ts_pos
имеет два значения данных в каждой выборке данных.
Примечание
В целом, когда данные временных рядов являются M-на-N-на-P-by-... многомерный массив с M отсчетами, размер каждой выборки данных N-на-P-by-....
Если вы хотите выполнить операции на ts_pos
и ts_vel
timeseries
объекты при сохранении их синхронизации сгруппировать их в набор временных рядов. Для получения дополнительной информации смотрите Синтаксис конструктора набора временных рядов.
Изменение модулей измерения временных рядов и метод интерполяции
Графическое изображение Набора временных рядов Представителей
Этот фрагмент примера иллюстрирует, как создать несколько timeseries
объекты из массива. Для получения дополнительной информации о timeseries
объект, см. Конструктор временных рядов.
Импортируйте выборочные данные из count.dat
в рабочее пространство MATLAB.
load count.dat
Это добавляет матрицу 24 на 3, count
, в рабочую область. Каждый столбец count
представляет ежечасное количество транспортных средств на каждом из трех городских перекрестков.
Просмотрите count
матрица.
count
Создайте три timeseries
объекты для хранения данных, собранных на каждом перекрестке.
count1 = timeseries(count(:,1), 1:24,'name', 'intersection1'); count2 = timeseries(count(:,2), 1:24,'name', 'intersection2'); count3 = timeseries(count(:,3), 1:24,'name', 'intersection3');
Примечание
В приведенной выше конструкции timeseries
объекты имеют как имя переменной (например count1
) и внутреннее имя объекта (например intersection1
). Имя переменной используется с функциями MATLAB. Имя объекта является свойством объекта, доступ к которому осуществляется с помощью методов объекта. Для получения дополнительной информации о timeseries
свойства и методы объекта, см. «Свойства временных рядов» и «Методы временных рядов».
По умолчанию временные ряды имеют временной вектор, имеющий модули секунды и время начала 0 сек. пример создает count1
, count2
, и count3
объекты временных рядов со временем начала 1 с, временем окончания 24 с и шагами 1 с. В разделе Изменение модулей измерения временных рядов и метод интерполяции необходимо изменить модули времени на часы.
Примечание
Если вы хотите создать timeseries
объект, который группирует три столбца данных в count
, используйте следующий синтаксис:
count_ts = timeseries(count, 1:24,'name','traffic_counts')
Это полезно, когда все временные ряды имеют одинаковые модули, и вы хотите сохранить их синхронизацией во время вычислений.
После создания timeseries
объект, как описано в разделе Создание объектов временных рядов, можно просмотреть его в редакторе Переменных.
Чтобы просмотреть timeseries
объект, подобный count1
в редакторе Переменных используйте один из следующих методов:
Тип open('count1')
в командной строке.
На вкладке Home, в разделе Variable, нажмите Open Variable и выберите count1
. Этот метод недоступен в Online™ MATLAB.
После создания timeseries
объект, как описано в Creating Time Series Objects, можно изменить его модули и метод интерполяции с помощью записи через точку.
Просмотр текущих свойств count1
.
get(count1)
MATLAB отображает значения текущих свойств count1
timeseries
объект.
Просмотр текущей DataInfo
свойства с использованием записи через точку.
count1.DataInfo
Измените модули измерения данных для count1
на 'cars'
.
count1.DataInfo.Units = 'cars';
Установите метод интерполяции для count1
в удержание нулевого порядка.
count1.DataInfo.Interpolation = tsdata.interpolation('zoh');
Проверьте, что DataInfo
свойства были изменены.
count1.DataInfo
Измените время, модули будут 'hours'
для трех временных рядов.
count1.TimeInfo.Units = 'hours'; count2.TimeInfo.Units = 'hours'; count3.TimeInfo.Units = 'hours';
Этот фрагмент примера иллюстрирует, как задать события для timeseries
объект при помощи tsdata.event
вспомогательный объект. События отмечают данные в определенное время. При построении графика данных на графике отображаются маркеры событий. События также обеспечивают удобный способ синхронизации нескольких временных рядов.
Добавьте к данным два события, которые отмечают время коммутации AM и коммутации PM.
Создайте и добавьте первое событие ко всем временным рядам. Первое событие происходит в 8 утра.
e1 = tsdata.event('AMCommute',8); e1.Units = 'hours'; % Specify the units for time count1 = addevent(count1,e1); % Add the event to count1 count2 = addevent(count2,e1); % Add the event to count2 count3 = addevent(count3,e1); % Add the event to count3
Создайте и добавьте второе событие ко всем временным рядам. Второе событие происходит в 18:00.
e2 = tsdata.event('PMCommute',18); e2.Units = 'hours'; % Specify the units for time count1 = addevent(count1,e2); % Add the event to count1 count2 = addevent(count2,e2); % Add the event to count2 count3 = addevent(count3,e2); % Add the event to count3
Постройте график временных рядов, count1
.
figure plot(count1)
Когда вы строите график любого из временных рядов, метод plot, заданный для объектов временных рядов, отображает события как маркеры. По умолчанию маркеры являются красными заполненными кругами.
График отражает это count1
использует нуль интерполяцию удержания порядка.
График count2
.
plot(count2)
Если вы строите временные ряды count2
, он заменяет count1
отображение. Вы видите его события и что он использует линейную интерполяцию.
Наложите временные ряды графики путем установки hold on
.
hold on
plot(count3)
Этот фрагмент примера иллюстрирует, как создать tscollection
объект. Каждые отдельные временные ряды в наборе называются представителем. Для получения дополнительной информации о tscollection
объект, см. Конструктор набора временных рядов.
Примечание
Как правило, вы используете tscollection
объект для группирования синхронизированных временных рядов с различными модулями. В этом простом примере все временные ряды имеют одинаковые модули измерения и tscollection
объект не предоставляет преимущества по сравнению с группировкой трех временных рядов в одной timeseries
объект. Для примера того, как сгруппировать несколько временных рядов в один timeseries
объект, см. Создание объектов временных рядов.
Создайте tscollection
объект с именем count_coll
и используйте синтаксис конструктора, чтобы сразу добавить два из трех временных рядов в рабочем пространстве MATLAB (третий временной ряд вы добавите позже).
tsc = tscollection({count1 count2},'name', 'count_coll')
Примечание
Область временных векторов timeseries
объекты, которые вы добавляете в tscollection
должен совпадать.
Заметьте, что Name
свойство timeseries
объекты используются для того, чтобы именовать представителей набора как intersection1
и intersection2
.
Добавьте третье timeseries
объект в рабочей области в tscollection
.
tsc = addts(tsc, count3)
Все три представителей набора перечислены.
Этот фрагмент примера иллюстрирует, как переопределить каждый представитель в tscollection
использование нового временного вектора. Операция повторной дискретизации используется либо для выбора существующих данных в определенные временные значения, либо для интерполяции данных с более мелкими интервалами. Если новый временной вектор содержит значения времени, которые не существовали в предыдущих временных векторах, новые значения данных вычисляются с помощью метода интерполяции по умолчанию, связанного с временными рядами.
Повторно отобразите временные ряды, чтобы включить значения данных каждые 2 часа вместо каждого часа и сохраните их как новый tscollection
объект.
tsc1 = resample(tsc,1:2:24)
В некоторых случаях вам может потребоваться более мелкая выборка информации, чем у вас в настоящее время, и разумно получить ее путем интерполяции значений данных.
Интерполируйте значения в каждом получасе.
tsc1 = resample(tsc,1:0.5:24)
Чтобы добавить значения в каждом получасе, используется метод интерполяции по умолчанию для временных рядов. Для примера, новые точки данных в intersection1
вычисляются с помощью метода интерполяции удержания нулевого порядка, который содержит значение предыдущей постоянной выборки. Вы устанавливаете метод интерполяции для intersection1
как описано в «Изменение модулей измерения временных рядов» и «Метод интерполяции».
Новые данные указывают на intersection2
и intersection3
вычисляются с помощью линейной интерполяции, которая является методом по умолчанию.
Постройте график представителей tsc1
с маркерами, чтобы увидеть результаты интерполяции.
hold off % Allow axes to clear before plotting plot(tsc1.intersection1,'-xb','Displayname','Intersection 1')
Вы можете увидеть, что точки данных были интерполированы в полчаса интервалов, и что Перекресток 1 использует нуль интерполяцию удержания порядка, в то время как два других представителей используют линейную интерполяцию.
Ведение графика на рисунке во время добавления двух других представителей к графику. Потому что plot
метод подавляет подписи по осям во время hold
является on
, также добавьте легенду для описания трех серий.
hold on plot(tsc1.intersection2,'-.xm','Displayname','Intersection 2') plot(tsc1.intersection3,':xr','Displayname','Intersection 3') legend('show','Location','NorthWest')
Этот фрагмент примера иллюстрирует, как добавить выборку данных к tscollection
.
Добавьте выборку данных к intersection1
Набор представителя в 3,25 часа (т.е. через 15 минуты после часа).
tsc1 = addsampletocollection(tsc1,'time',3.25,... 'intersection1',5);
В tsc1
три представителей Наборы и добавление выборки данных к одному представителю добавляет выборку данных к двум другим представителям в 3,25 часов. Однако, поскольку вы не указали значения данных для
intersection2
и intersection3
в новой выборке отсутствующие значения представлены NaN
s для этих представителей. Чтобы узнать, как удалить или интерполировать отсутствующие значения данных, смотрите Удаление отсутствующих данных и Интерполяция отсутствующих данных.
tsc1
Данные от 2,0 до 3,5 часов
Часы | Перекресток 1 | Перекресток 2 | Перекресток 3 |
---|---|---|---|
2.0 | 7 | 13 | 11 |
2.5 | 7 | 15 | 15.5 |
3.0 | 14 | 17 | 20 |
3.25 | 5 |
|
|
3.5 | 14 | 15 | 14.5 |
Чтобы просмотреть все intersection1
данные (включая новую выборку в 3,25 часа), тип
tsc1.intersection1
Точно так же, чтобы просмотреть все intersection2
данные (включая новую выборку в 3,25 часа, содержащую NaN
значение), тип
tsc1.intersection2
Объекты временных рядов используют NaN
s, чтобы представлять отсутствующие данные. Этот фрагмент примера иллюстрирует, как удалить отсутствующие данные или интерполировать значения для него с помощью метода интерполяции, заданного для этих временных рядов. В разделе Добавление выборки данных к объекту Набор временных рядов вы добавили новую выборку данных к tsc1
Набор в 3,25 часа.
Как tsc1
Набор имеет три представителей, добавляя выборку данных к одному представителю добавляя выборку данных к двум другим представителям в 3,25 часов. Однако, поскольку вы не указали значения данных для intersection2
и intersection3
Представители в 3,25 часа они в настоящее время содержат отсутствующие значения, представленные NaN
с.
Удаление отсутствующих данных. Найдите и удалите выборки данных, содержащие значения NaN в tsc1
набор.
tsc1 = delsamplefromcollection(tsc1,'index',... find(isnan(tsc1.intersection2.Data)));
Эта команда ищет один tscollection
представитель за раз - в данном случае intersection2
. Когда отсутствующее значение расположено в intersection2
, данные на тот момент удаляются из всех представителей tscollection
.
Примечание
Используйте синтаксис записи через точку для доступа к Data
свойство intersection2
представитель tsc1
набор:
tsc1.intersection2.Data
Полный список timeseries
свойства, см. «Свойства временных рядов».
Интерполяция отсутствующих данных. Ради этого примера повторно введите NaN
значения в intersection2
и intersection3
.
tsc1 = addsampletocollection(tsc1,'time',3.25,... 'intersection1',5);
Интерполируйте отсутствующие значения в tsc1
использование текущего временного вектора (tsc1.Time
).
tsc1 = resample(tsc1,tsc1.Time);
Это заменяет NaN
значения в intersection2
и intersection3
при помощи линейной интерполяции - метода интерполяции по умолчанию для этих временных рядов.
Примечание
Запись через точку tsc1.Time
используется для доступа к Time
свойство tsc1
набор. Полный список tscollection
свойства, см. Набор временных рядов свойства.
Чтобы просмотреть intersection2
данные после интерполяции, например, тип
tsc1.intersection2
Новые данные tsc1 от 2,0 до 3,5 часов
Часы | Перекресток 1 | Перекресток 2 | Перекресток 3 |
---|---|---|---|
2.0 | 7 | 13 | 11 |
2.5 | 7 | 15 | 15.5 |
3.0 | 14 | 17 | 20 |
3.25 | 5 | 16 | 17.3 |
3.5 | 14 | 15 | 14.5 |
Удалите intersection3
временные ряды из tscollection
tsc1 объекта
.
tsc1 = removets(tsc1,'intersection3')
Теперь перечислены два временных рядов в качестве представителей набора.
Этот фрагмент примера иллюстрирует, как управлять форматом, в котором числовые временные векторы отображения, используя строки даты MATLAB. Полный список форматов строк дат MATLAB, поддерживаемых для timeseries
и tscollection
объекты, см. определение определения временного вектора в timeseries
страница с описанием.
Чтобы использовать строки даты, вы должны задать StartDate
поле TimeInfo
свойство. Все значения в временном векторе преобразуются в строки дат с помощью StartDate
в качестве ссылки даты.
Предположим, что контрольная дата наступит 25 декабря 2009 года.
tsc1.TimeInfo.Units = 'hours'; tsc1.TimeInfo.StartDate = '25-DEC-2009 00:00:00';
Подобно тому, что вы сделали со count1
, count2
, и count3
объекты временных рядов, установите модули измерения данных в tsc1
Представители к строке 'car count'
.
tsc1.intersection1.DataInfo.Units = 'car count'; tsc1.intersection2.DataInfo.Units = 'car count';
Чтобы построить график данных в наборе временных рядов, вы строите график его представителей по одному.
Первый график tsc1
представитель intersection1
.
hold off
plot(tsc1.intersection1);
Когда вы строите график представителя набора временных рядов, ее временные модули отображаются на x
-ось и ее модули данных отображаются на y
-ось. Заголовок графика отображается следующим 'Time Series Plot:<member name>'
.
Если использовать тот же рисунок для построения графика другого представителя набора, аннотации не отображаются. Временные ряды plot
метод не пытается обновить метки и заголовки при hold
является on
поскольку дескрипторы для ряда могут быть различными.
График intersection1
и intersection2
на том же рисунке. Предотвратите перезапись графика, но удалите подписи по осям и заголовок. Добавьте легенду и установите DisplayName
свойство серии линий для маркировки каждого представителя.
plot(tsc1.intersection1,'-xb','Displayname','Intersection 1') hold on plot(tsc1.intersection2,'-.xm','Displayname','Intersection 2') legend('show','Location','NorthWest')
График теперь включает в себя два временных рядов в наборе: intersection1
и intesection2
. График второго графа стер метки на первом графе.
Наконец, измените строки даты на x
-ось к hours
и снова постройте график двух представителей набора временных рядов с легендой.
Задайте модули времени, которая будет равной 'часам' для набора.
tsc1.TimeInfo.Units = 'hours';
Укажите формат отображения времени.
tsc1.TimeInfo.Format = 'HH:MM';
Воссоздайте последний график с новыми модулями времени.
hold off plot(tsc1.intersection1,'-xb','Displayname','Intersection 1') % Prevent overwriting plot, but remove axis labels and title. hold on plot(tsc1.intersection2,'-.xm','Displayname','Intersection 2') legend('show','Location','NorthWest') % Restore the labels with the |xlabel| and |ylabel| commands and overlay a % data grid. xlabel('Time (hours)') ylabel('car count') grid on
Для получения дополнительной информации об опциях графического изображения для временных рядов смотрите timeseries
.
Перед реализацией различных функций и методов MATLAB, специально разработанных для обработки данных временных рядов, необходимо создать timeseries
объект для хранения данных. См. timeseries
для timeseries
синтаксис конструктора объектов.
Пример использования конструктора см. в разделе Создание объектов временных рядов.
См. timeseries
описание всех timeseries
свойства объекта. Можно задать Data
, IsTimeFirst
, Name
, Quality
, и Time
свойства как входные параметры в конструкторе. Чтобы назначить другие свойства, используйте set
функция или запись через точку.
Примечание
Чтобы получить информацию о свойствах из командной строки, введите help timeseries/tsprops
в подсказку MATLAB.
Пример редактирования timeseries
свойства объекта, см. Изменение модулей измерения временных рядов и метод интерполяции.
Описание всех методов временных рядов смотрите timeseries
.
Объект MATLAB, называемый tscollection
, является переменным MATLAB, которая группирует несколько временных рядов с общим временным вектором. The timeseries
объекты, которые вы включаете в tscollection
объект называются представителями этого набора, и обладает несколькими методами для удобного анализа и манипуляции timeseries
.
Прежде чем вы реализуете методы MATLAB, специально разработанные для работы с набором timeseries
объекты, вы должны создать tscollection
объект для хранения данных.
Следующая таблица результирует синтаксис для использования tscollection
конструктор. Пример использования этого конструктора см. в разделе Создание объектов наборе временных рядов.
Описания синтаксиса набора временных рядов
Синтаксис | Описание |
---|---|
| Создает The
The |
| Создает пустую Когда значения времени являются строками даты, вы должны задать |
| Опционально введите следующие пары значение параметров после
|
В этой таблице перечислены свойства tscollection
объект. Можно задать Name
, Time
, и TimeInfo
свойства как входные параметры в tscollection
конструктор.
Описания свойств набора временных рядов
Свойство | Описание |
---|---|
|
|
| Вектор значений времени. Когда Длина |
| Использует следующие поля для хранения контекстной информации о
|
Общие методы набора временных рядов. Используйте следующие методы, чтобы запросить и задать свойства объекта и построить график данных.
Методы запроса свойств
Манипуляции данными и временем. Используйте следующие методы для добавления или удаления выборок данных и управления tscollection
объект.
Методы манипулирования данными и временем
Метод | Описание |
---|---|
Добавление | |
Добавьте выборки данных в | |
Удалите одни или несколько выборок данных из | |
Извлечение временного вектора строки даты из | |
Извлечение выборок данных из существующего | |
Верните массив ячеек с именами временных рядов в | |
Горизонтальная конкатенация | |
Удалите один или несколько | |
Выбор или интерполяция данных в | |
Установите значения времени в временном векторе | |
Изменение имени выбранного | |
Вертикальная конкатенация |