主要内容

时间序列对象和集合

时间序列的类型及其用途

MATLAB®时间序列对象有两种类型:

  • timeseries—存储数据和时间值,以及元数据信息,包括单位、事件、数据质量、插值方法等

  • tscollection的集合timeseries共享公共时间向量的对象,方便在具有不同单位的同步时间序列上执行操作

本节将讨论以下主题:

  • 使用时间序列构造函数实例化时间序列类

  • 使用以下命令修改对象属性方法或点表示法

  • 调用时间序列函数和方法

以获得编程的快速概述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]

Value表示缺失的数据值。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,“名字”,“位置”)

MATLAB通过显示以下属性来响应ts_pos

timeseries公共属性:名称:'Position'时间:[5x1 double]时间信息:[1x1 tsdata.]timemetdata] Data: [5x2 double] DataInfo: [1x1 tsdata.]datametadata更多的属性,方法

长度时间向量的5的数据样本数目timeseries对象。中找到数据样本的大小ts_pos在MATLAB提示符下输入以下语句:

2 . Getdatasamplesize (ts_pos) ans = 1

类似地,您可以创建第二个timeseries对象来存储速度数据:

ts_vel = timeseries (x(:, 3), 1:5,“名字”,“速度”);

中每个数据样本的大小ts_vel输入以下内容:

Getdatasamplesize (ts_vel) ans = 1

请注意,ts_vel在每个数据样本中有一个数据值和ts_pos在每个数据示例中有两个数据值。

请注意

一般来说,当时间序列数据是——- - - - - -N——- - - - - -P——-…多维数组样本,每个数据样本的大小为N——- - - - - -P——-…。

如果需要对ts_pos而且ts_veltimeseries对象在保持同步的同时,将它们分组到时间序列集合中。有关更多信息,请参见时间序列集合构造函数语法

示例:时间序列对象和方法

创建时间序列对象

本示例的这一部分说明了如何创建几个timeseries数组中的对象。有关的更多信息timeseries对象,看到时间序列构造器

从导入样例数据count.dat到MATLAB工作空间。

负载count.dat

将24 × 3矩阵相加,,到工作区。的每一列表示三个城镇十字路口每小时的车辆数量。

查看矩阵。

创建三个timeseries对象来存储在每个路口收集的数据。

Count1 =时间序列(count(:,1), 1:24,“名字”,“intersection1”);Count2 =时间序列(count(:,2), 1:24,“名字”,“intersection2”);Count3 = timeseries(count(:,3), 1:24,“名字”,“intersection3”);

请注意

在上述结构中,timeseries对象有一个变量名(例如,count1)和内部对象名称(例如,intersection1).变量名与MATLAB函数一起使用。对象名称是对象的一个属性,可以通过对象方法访问。欲知更多有关timeseries对象属性和方法,请参见时间序列属性而且时间序列法

默认情况下,时间序列具有以秒为单位的时间向量和0秒的开始时间count1,是从,count3开始时间为1秒,结束时间为24秒,增量为1秒的时间序列对象。您将把时间单位改为小时时间序列单元的修改与插值方法

请注意

如果你想创建一个timeseries对象,将三个数据列分组在其中,使用以下语法:

Count_ts =时间序列(count, 1:24,'name','traffic_counts')

当所有时间序列都具有相同的单位,并且您希望在计算期间保持它们同步时,这非常有用。

时间序列单元的修改与插值方法

在创建timeseries对象,如中所述创建时间序列对象,可以使用点表示法修改其单位和插补方法。

的当前属性count1

get (count1)

的当前属性值count1timeseries对象。

查看当前DataInfo使用点表示法的属性。

count1。数据在fo

更改为的数据单位count1“汽车”

count1.DataInfo。单位=“汽车”

设置插补方法为count1零级货舱。

count1.DataInfo。在terpolation = tsdata.interpolation(“zoh”);

验证DataInfo完成属性的修改。

count1。数据在fo

将时间单位修改为“小时”对于三个时间序列。

count1.TimeInfo。单位=“小时”;count2.TimeInfo。单位=“小时”;count3.TimeInfo。单位=“小时”

定义事件

实例的这一部分说明了如何为对象定义事件timeseries对象,使用tsdata.event辅助对象。事件在特定时间标记数据。绘制数据时,事件标记将显示在图上。事件还提供了同步多个时间序列的方便方法。

向数据中添加两个事件,标记上午通勤和下午通勤的时间。

构造并将第一个事件添加到所有时间序列中。第一个事件发生在早上8点。

E1 = tsdata.event(“AMCommute”8);e1。单位=“小时”指定时间单位Count1 =临近数(Count1,e1);将事件添加到count1Count2 =临近数(Count2,e1);将事件添加到计数2count = addevent(count,e1);将事件添加到count3

构造第二个事件并将其添加到所有时间序列中。第二个事件发生在下午6点。

E2 = tsdata.event(“PMCommute”, 18);e2。单位=“小时”指定时间单位Count1 = addevent(Count1,e2);将事件添加到count1Count2 =临近(Count2,e2);将事件添加到计数2Count3 = addevent(Count3,e2);将事件添加到count3

画出时间序列,count1

图绘制(count1)

绘制任何时间序列时,为时间序列对象定义的plot方法将事件显示为标记。默认情况下,标记是红色填充的圆圈。

情节反映了count1使用零阶保持插值。

情节是从

情节(是从)

如果你画出时间序列是从,它取代count1显示。你可以看到它的事件,它使用线性插值。

通过设置叠加时间序列图抓住

持有情节(count3)

创建时间序列采集对象

示例的这一部分说明了如何创建tscollection对象。集合中每个单独的时间序列称为a成员。有关的更多信息tscollection对象,看到时间序列收集构造器

请注意

通常,使用tscollection对象对具有不同单位的同步时间序列进行分组。在这个简单的例子中,所有的时间序列都有相同的单位和tscollection对象与将三个时间序列分组为单个时间序列相比,没有优势timeseries对象。这是一个如何将多个时间序列分组为一个的示例timeseries对象,看到创建时间序列对象

创建一个tscollection对象命名count_coll并使用构造函数语法立即在MATLAB工作空间中添加当前三个时间序列中的两个(稍后将添加第三个时间序列)。

TSC = tscollection({count1 count2},“名字”,“count_coll”

请注意

的时间向量timeseries对象中添加的对象tscollection必须匹配。

注意的名字的属性timeseries对象用于将集合成员命名为intersection1而且intersection2

加入第三个timeseries属性中的对象tscollection

TSC = addts(TSC, count3)

集合中的所有三个成员都被列出了。

时间序列采集对象重采样

实例的这一部分说明了如何对对象中的每个成员重新采样tscollection使用一个新的时间向量。重采样操作用于选择特定时间值的现有数据,或以更细的间隔插入数据。如果新的时间向量包含前一个时间向量中不存在的时间值,则使用与时间序列关联的默认插值方法计算新的数据值。

重新采样时间序列,以每2小时包括数据值,而不是每小时一次,并将其另存为新的tscollection对象。

Tsc1 =重采样(tsc,1:2:24)

在某些情况下,您可能需要比当前更好的信息抽样,通过插值数据值来获得它是合理的。

每半小时插值值。

Tsc1 =重采样(tsc,1:0.5:24)

若要在每个半小时标记处添加值,则使用时间序列的默认插值方法。例如,新的数据点intersection1采用零阶保持插值方法计算,保持前一个样本的值不变。设置插值方法为intersection1如在时间序列单元的修改与插值方法

新的数据点进来intersection2而且intersection3使用线性插值计算,这是默认方法。

绘制的成员tsc1用记号笔看插值的结果。

持有允许在绘图前清除坐标轴情节(tsc1.intersection1“xb”,“Displayname的”,“十字路口1”

可以看到数据点每隔半小时进行插值,交集1使用零阶保持插值,而其他两个成员使用线性插值。

在向图中添加其他两个成员的同时,维护图中的图形。因为情节方法同时抑制轴标签持有,还添加了一个图例来描述这三个系列。

持有情节(tsc1.intersection2. xm的,“Displayname的”,《十字路口2》)情节(tsc1.intersection3: xr的,“Displayname的”,《十字路口3》)传说(“显示”,“位置”,“西北”

在时间序列采集对象中添加数据样本

示例的这一部分说明如何将数据示例添加到tscollection

类型中添加数据示例intersection13时25分(即整点后15分钟)的集合成员。

Tsc1 = addsampletocollection(Tsc1,“时间”, 3.25,...“intersection1”5);

有三个成员tsc1收集,并在3.25小时向一个成员添加数据样本,向其他两个成员添加数据样本。但是,由于您没有指定数据值intersection2而且intersection3在新示例中,缺失的值由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小时含有a的新样品)值),类型

tsc1.intersection2

删除和插值丢失的数据

时间序列对象使用S表示缺失数据。本示例的这一部分说明了如何使用为该时间序列指定的插值方法删除缺失的数据或为其插入值。在在时间序列采集对象中添加数据样本中添加了一个新的数据示例tsc13.25小时收集。

随着tsc1集合有三个成员,在3.25小时向其中一个成员添加一个数据样本,向另外两个成员添加一个数据样本。的数据值intersection2而且intersection3成员在3.25小时时,它们目前包含缺失的值,用年代。

删除丢失的数据。类中包含NaN值的数据样例tsc1收集。

Tsc1 = delsamplefromcollection(Tsc1,“指数”,...找到(isnan (tsc1.intersection2.Data)));

这个命令搜索一个tscollection在这种情况下,intersection2。中定位缺失值时intersection2,当时的数据被删除所有委员会成员tscollection

请注意

使用点符号语法访问数据的属性intersection2会员tsc1集合:

tsc1.intersection2.Data

的完整列表timeseries属性,看到时间序列属性

插值缺失数据。为了这个例子,重新介绍一下intersection2而且intersection3

Tsc1 = addsampletocollection(Tsc1,“时间”, 3.25,...“intersection1”5);

中插入缺失的值tsc1使用当前时间向量(tsc1。时间).

tsc1 = resample(tsc1,tsc1. time);

这将取代intersection2而且intersection3通过使用线性插值-这些时间序列的默认插值方法。

请注意

点符号tsc1。时间用于访问时间的属性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日期字符串格式的完整列表金宝apptimeseries而且tscollection对象的定义,请参见时间向量的定义timeseries参考页面。

要使用日期字符串,必须设置StartDate可以字段TimeInfo财产。将时间向量中的所有值转换为日期字符串StartDate可以作为参考日期。

假设参考日期是2009年12月25日。

tsc1.TimeInfo。单位=“小时”;tsc1.TimeInfo。StartDate可以=“25 - 12月- 2009就是”

类似于你对count1,是从,count3对象,设置的数据单位为tsc1字符串的成员“车数”

tsc1.intersection1.DataInfo.Units =“车数”;tsc1.intersection2.DataInfo.Units =“车数”

绘制时间序列集合成员

要绘制时间序列集合中的数据,每次绘制一个成员。

第一个图tsc1成员intersection1

持有情节(tsc1.intersection1);

绘制时间序列集合的成员时,其时间单位将显示在x-轴及其数据单元显示在y设在。图标题显示为时间序列图:<成员名>'

如果使用相同的图形绘制集合的不同成员,则不会显示注释。时间序列情节方法不尝试更新标签和标题持有因为系列的描述符可以不同。

情节intersection1而且intersection2同样的数字。防止覆盖情节,但删除轴标签和标题。添加图例并设置DisplayName属性来标记每个成员。

情节(tsc1.intersection1“xb”,“Displayname的”,“十字路口1”)举行情节(tsc1.intersection2. xm的,“Displayname的”,《十字路口2》)传说(“显示”,“位置”,“西北”

图中现在包含了两个时间序列:intersection1而且intesection2。绘制第二个图形擦除了第一个图形上的标签。

的日期字符串x设在来小时并用图例再次绘制两个时间序列集合成员。

为集合指定时间单位为“小时”。

tsc1.TimeInfo。单位=“小时”

指定显示时间的格式。

tsc1.TimeInfo。格式=“HH: MM”

用新的时间单位重现上一个情节。

持有情节(tsc1.intersection1“xb”,“Displayname的”,“十字路口1”防止覆盖图,但删除轴标签和标题。持有情节(tsc1.intersection2. xm的,“Displayname的”,《十字路口2》)传说(“显示”,“位置”,“西北”%使用|xlabel|和|ylabel|命令恢复标签,并覆盖a .单击“确定”%数据网格。包含(的时间(小时)) ylabel (“车数”网格)

有关时间序列绘图选项的详细信息,请参见timeseries

时间序列构造器

在实现专门设计用于处理时间序列数据的各种MATLAB函数和方法之前,必须创建一个timeseries对象来存储数据。看到timeseriestimeseries对象构造函数语法。

有关使用构造函数的示例,请参见创建时间序列对象

时间序列属性

看到timeseries为所有的描述timeseries对象属性。您可以指定数据,IsTimeFirst,的名字,质量,时间属性作为构造函数中的输入参数。要分配其他属性,请使用函数或点表示法。

请注意

要从命令行获取属性信息,请键入帮助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(时间)

创建一个空tscollection对象的时间向量时间

当时间值为日期字符串时,必须指定时间作为日期字符串的单元格数组。

tsc = tscollection(时间,TimeSeries, '参数',值,…)

后可选地输入以下参数-值对时间而且TimeSeries参数:

时间序列采集属性

属性的属性tscollection对象。您可以指定的名字,时间,TimeInfo属性作为输入参数tscollection构造函数。

时间序列收集属性描述

财产

描述

的名字

tscollection以字符串形式输入的对象名称。对象的名称可以不同tscollection变量在MATLAB工作空间。

时间

时间值的向量。

TimeInfo。StartDate可以是空的,数值是多少时间数值的测量相对于0在指定的单位。当TimeInfo。StartDate可以定义时,时间值表示相对于StartDate可以在指定的单位内。

的长度时间的第一个维度或最后一个维度匹配数据各属性tscollection成员。

TimeInfo

使用以下字段存储有关的上下文信息时间

  • 单位—时间单位,取值如下:“周”,“天”,“小时”,“分钟”,“秒”,的毫秒,微秒的,“纳秒”

  • 开始-开始时间

  • 结束—结束时间(只读)

  • 增量—以后两个时间值的间隔。增量是当时间采样不均匀时。

  • 长度—时间向量长度(只读)

  • 格式-定义日期字符串显示格式的字符串。参见MATLABdatestr函数参考页获取更多信息。

  • StartDate可以-日期字符串,用于定义引用日期。参见MATLABsetabstime函数参考页获取更多信息。

  • 用户数据—存储用户自定义的其他信息

时间序列采集方法

一般时间序列收集方法。可通过以下方法查询、设置对象属性、绘制数据。

属性查询方法

方法

描述

得到

查询tscollection对象属性值。

isempty

评估,真正的对于空的tscollection对象。

长度

返回时间向量的长度。

情节

在集合中绘制时间序列。

tscollection属性值。

大小

返回a的大小tscollection对象。

数据和时间操作方法。使用以下方法添加或删除数据示例,并操作tscollection对象。

处理数据和时间的方法

方法

描述

addts

添加一个timeseries对象的tscollection对象。

addsampletocollection

在a中添加数据样本tscollection对象。

delsamplefromcollection

对象中删除一个或多个数据样本tscollection对象。

getabstime

类中提取日期字符串时间向量tscollection对象添加到单元格数组中。

getsampleusingtime

从现有数据中提取数据样本tscollection对象添加到新的tscollection对象。

gettimeseriesnames

控件中返回时间序列名称的单元格数组tscollection对象。

horzcat

的水平级联tscollection对象。结合几timeseries具有相同时间向量的对象放入一个时间序列集合。

removets

删除一个或多个timeseries对象的tscollection对象。

重新取样

中选择或插入数据tscollection对象使用新的时间向量。

setabstime

在a的时间向量中设置时间值tscollection对象作为日期字符串。

settimeseriesnames

更改所选对象的名称timeseries对象中的tscollection对象。

vertcat

的垂直级联tscollection对象。连接数tscollection时间维度上的对象。