Объекты и наборы временных рядов

Типы временных рядов и их использование

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 в новой выборке отсутствующие значения представлены NaNs для этих представителей. Чтобы узнать, как удалить или интерполировать отсутствующие значения данных, смотрите Удаление отсутствующих данных и Интерполяция отсутствующих данных.

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

NaN

NaN

3.5

14

15

14.5

Чтобы просмотреть все intersection1 данные (включая новую выборку в 3,25 часа), тип

tsc1.intersection1

Точно так же, чтобы просмотреть все intersection2 данные (включая новую выборку в 3,25 часа, содержащую NaN значение), тип

tsc1.intersection2

Удаление и интерполяция отсутствующих данных

Объекты временных рядов используют NaNs, чтобы представлять отсутствующие данные. Этот фрагмент примера иллюстрирует, как удалить отсутствующие данные или интерполировать значения для него с помощью метода интерполяции, заданного для этих временных рядов. В разделе Добавление выборки данных к объекту Набор временных рядов вы добавили новую выборку данных к 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 конструктор. Пример использования этого конструктора см. в разделе Создание объектов наборе временных рядов.

Описания синтаксиса набора временных рядов

Синтаксис

Описание

tsc = tscollection(ts)

Создает tscollection tsc объекта который включает одну или несколько timeseries объекты.

The ts аргумент может быть одним из следующих:

  • Одно timeseries объект в рабочем пространстве MATLAB

  • Массив ячеек timeseries объекты в рабочем пространстве MATLAB

The timeseries объекты совместно используют один и тот же временной вектор в tscollection.

tsc = tscollection(Time)

Создает пустую tscollection объект с временным вектором Time.

Когда значения времени являются строками даты, вы должны задать Time как массив ячеек со строками дат.

tsc = tscollection(Time, TimeSeries, 'Parameter', Value, ...)

Опционально введите следующие пары значение параметров после Time и TimeSeries аргументы:

Свойства набора временных рядов

В этой таблице перечислены свойства tscollection объект. Можно задать Name, Time, и TimeInfo свойства как входные параметры в tscollection конструктор.

Описания свойств набора временных рядов

Свойство

Описание

Name

tscollection имя объекта вводится как строка. Это имя может отличаться от имени tscollection переменная в рабочем пространстве MATLAB.

Time

Вектор значений времени.

Когда TimeInfo.StartDate пуст, численный Time значения измеряются относительно 0 в заданных модулях. Когда TimeInfo.StartDate задано, что значения времени представляют строки дат, измеренные относительно StartDate в заданных модулях.

Длина Time должно совпадать с первой или последней размерностью Data свойство каждого tscollection представитель.

TimeInfo

Использует следующие поля для хранения контекстной информации о Time:

  • Units - Временные модули со следующими значениями: 'weeks', 'days', 'hours', 'minutes', 'seconds', 'milliseconds', 'microseconds', и 'nanoseconds'

  • Start - Время запуска

  • End - Время окончания (только для чтения)

  • Increment - Интервал между двумя последующими временными значениями. Шаг равен NaN когда время не равномерно дискретизировано.

  • Length - Длина временного вектора (только для чтения)

  • Format - Строка, определяющая формат отображения строки даты. Смотрите MATLAB datestr страница с описанием функции для получения дополнительной информации.

  • StartDate - Строка даты, определяющая ссылочную дату. Смотрите MATLAB setabstime страница с описанием функции для получения дополнительной информации.

  • UserData - Сохраняет любую дополнительную пользовательскую информацию

Методы набора временных рядов

Общие методы набора временных рядов.  Используйте следующие методы, чтобы запросить и задать свойства объекта и построить график данных.

Методы запроса свойств

Метод

Описание

get

Запрос- tscollection значения свойств объекта.

isempty

Рассчитать на true для пустого tscollection объект.

length

Верните длину временного вектора.

plot

Постройте график временных рядов в наборе.

set

Задайте tscollection значения свойств.

size

Верните размер tscollection объект.

Манипуляции данными и временем.  Используйте следующие методы для добавления или удаления выборок данных и управления tscollection объект.

Методы манипулирования данными и временем

Метод

Описание

addts

Добавление timeseries объект в tscollection объект.

addsampletocollection

Добавьте выборки данных в tscollection объект.

delsamplefromcollection

Удалите одни или несколько выборок данных из tscollection объект.

getabstime

Извлечение временного вектора строки даты из tscollection объект в массив ячеек.

getsampleusingtime

Извлечение выборок данных из существующего tscollectionобъект в новую tscollection объект.

gettimeseriesnames

Верните массив ячеек с именами временных рядов в tscollection объект.

horzcat

Горизонтальная конкатенация tscollection объекты. Объединяет несколько timeseries объекты с таким же временным вектором в один набор временных рядов.

removets

Удалите один или несколько timeseries объекты из tscollection объект.

resample

Выбор или интерполяция данных в tscollection объект с использованием нового временного вектора.

setabstime

Установите значения времени в временном векторе tscollection объект как строки дат.

settimeseriesnames

Изменение имени выбранного timeseries объект в tscollection объект.

vertcat

Вертикальная конкатенация tscollection объекты. Присоединение к нескольким tscollection объекты по временной размерности.