时间序列对象和集合
时间序列的类型及其用途
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_vel
timeseries
对象在保持同步的同时,将它们分组到时间序列集合中。有关更多信息,请参见时间序列集合构造函数语法。
示例:时间序列对象和方法
创建时间序列对象
本示例的这一部分说明了如何创建几个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)
的当前属性值count1
timeseries
对象。
查看当前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
。
类型中添加数据示例intersection1
3时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表示缺失数据。本示例的这一部分说明了如何使用为该时间序列指定的插值方法删除缺失的数据或为其插入值。在在时间序列采集对象中添加数据样本中添加了一个新的数据示例tsc1
3.25小时收集。
随着tsc1
集合有三个成员,在3.25小时向其中一个成员添加一个数据样本,向另外两个成员添加一个数据样本。的数据值intersection2
而且intersection3
成员在3.25小时时,它们目前包含缺失的值,用南
年代。
删除丢失的数据。类中包含NaN值的数据样例tsc1
收集。
Tsc1 = delsamplefromcollection(Tsc1,“指数”,...找到(isnan (tsc1.intersection2.Data)));
这个命令搜索一个tscollection
在这种情况下,intersection2
。中定位缺失值时intersection2
,当时的数据被删除所有委员会成员tscollection
。
插值缺失数据。为了这个例子,重新介绍一下南
值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
对象来存储数据。看到timeseries
为timeseries
对象构造函数语法。
有关使用构造函数的示例,请参见创建时间序列对象。
时间序列属性
看到timeseries
为所有的描述timeseries
对象属性。您可以指定数据
,IsTimeFirst
,的名字
,质量
,时间
属性作为构造函数中的输入参数。要分配其他属性,请使用集
函数或点表示法。
请注意
要从命令行获取属性信息,请键入帮助timeseries / tsprops
在MATLAB提示符下。
下面是一个编辑的例子timeseries
对象属性,请参见时间序列单元的修改与插值方法。
时间序列法
有关所有时间序列方法的说明,请参见timeseries
。
时间序列收集构造器
介绍
MATLAB对象,称为tscollection
,是一个MATLAB变量,它将几个时间序列与一个公共时间向量进行分组。的timeseries
控件中包含的对象tscollection
对象被调用成员的集合,并具有几种方便分析和操作的方法timeseries
。
时间序列集合构造函数语法
在实现之前,MATLAB专门设计的方法对一个集合进行操作timeseries
对象时,必须创建tscollection
对象来存储数据。
属性的语法总结如下tscollection
构造函数。有关使用此构造函数的示例,请参见创建时间序列采集对象。
时间序列集合语法描述
语法 |
描述 |
---|---|
|
创建一个 的
的 |
|
创建一个空 当时间值为日期字符串时,必须指定 |
|
后可选地输入以下参数-值对
|
时间序列采集属性
属性的属性tscollection
对象。您可以指定的名字
,时间
,TimeInfo
属性作为输入参数tscollection
构造函数。
时间序列收集属性描述
财产 |
描述 |
---|---|
|
|
|
时间值的向量。 当 的长度 |
|
使用以下字段存储有关的上下文信息
|
时间序列采集方法
一般时间序列收集方法。可通过以下方法查询、设置对象属性、绘制数据。
属性查询方法
数据和时间操作方法。使用以下方法添加或删除数据示例,并操作tscollection
对象。
处理数据和时间的方法
方法 |
描述 |
---|---|
添加一个 |
|
在a中添加数据样本 |
|
对象中删除一个或多个数据样本 |
|
类中提取日期字符串时间向量 |
|
从现有数据中提取数据样本 |
|
控件中返回时间序列名称的单元格数组 |
|
的水平级联 |
|
删除一个或多个 |
|
中选择或插入数据 |
|
在a的时间向量中设置时间值 |
|
更改所选对象的名称 |
|
的垂直级联 |