exponenta event banner

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

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

Объекты временных рядов MATLAB ® имеют два типа :

  • timeseries - хранит данные и временные значения, а также метаданные, которые включают единицы измерения, события, качество данных и метод интерполяции;

  • tscollection - Хранит коллекцию timeseries объекты с общим вектором времени, удобные для выполнения операций с синхронизированными временными рядами с различными единицами

В этом разделе рассматриваются следующие темы:

  • Использование конструкторов временных рядов для создания экземпляров классов временных рядов

  • Изменение свойств объекта с помощью set методы или точечная нотация

  • Вызов функций и методов временных рядов

Чтобы получить краткий обзор программирования с помощью timeseries и tscollection выполните шаги в примере «Объекты и методы временных рядов».

Выборка данных временных рядов

Чтобы правильно понять описание timeseries свойства и методы объекта в этой документации, важно уточнить некоторые термины, связанные с хранением данных в timeseries object - разница между значением данных и образцом данных.

Значение данных - это одно скалярное значение, записанное в определенное время. Образец данных состоит из одного или нескольких значений, связанных с определенным временем в 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]

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

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-by-N-by-P-by-... многомерный массив с M выборками, размер каждой выборки данных равен N-на-P-по-....

Если требуется выполнить операции с 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. Этот метод недоступен в MATLAB Online™.

Изменение единиц временного ряда и метода интерполяции

После создания timeseries объект, как описано в разделе Создание объектов временных рядов, можно изменить его единицы измерения и метод интерполяции с помощью точечной нотации.

Просмотр текущих свойств 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)

При печати любого из временных рядов метод печати, определенный для объектов временных рядов, отображает события как маркеры. По умолчанию маркерами являются закрашенные кружки красного цвета.

Сюжет отражает, что 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 часов, они в настоящее время содержат отсутствующие значения, представленные NaNs.

Удаление отсутствующих данных.  Найдите и удалите образцы данных, содержащие значения 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-axis и его единицы данных отображаются на y-axis. Заголовок печати отображается как '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-axis to 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, которая группирует несколько временных рядов с общим вектором времени. timeseries объекты, которые вы включаете в tscollection объекты называются членами этой коллекции и обладают несколькими методами для удобного анализа и манипулирования timeseries.

Синтаксис конструктора коллекции временных рядов

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

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

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

Синтаксис

Описание

tsc = tscollection(ts)

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

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

  • Одинок timeseries объект в рабочей области MATLAB

  • Массив ячеек timeseries объекты в рабочей области MATLAB

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 объекты вдоль измерения времени.