主要内容

时间序列对象和集合

时间序列的类型及其用途

马铃薯®时间序列对象是两种类型:

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

  • TSCollection.- 存储一系列timeseries共享一个公共时间向量的对象,便于对具有不同单位的同步时间序列进行操作

本节讨论以下主题:

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

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

  • 调用时间序列功能和方法

快速快速概述编程timeseriesTSCollection.对象,按照步骤进行操作示例:时间序列对象和方法

时间序列数据样本

正确理解的描述timeseries对象属性和方法在本文档中,重要的是要澄清与存储数据相关的一些术语timeseries对象——a和b之间的区别数据值A.数据样本

一种数据值是在特定时间记录的单个标量值。一种数据样本属性中与特定时间关联的一个或多个值timeseries目的。时间序列中的数据样本的数量与时间向量的长度相同。

例如,考虑由三个传感器信号组成的数据:两个信号代表米为单位的物体的位置,第三个信号表示其速度/秒的速度。

要输入数据矩阵,请在MATLAB提示符下键入以下内容:

x = [-0.2 -0.3 13;-0.1 -0.4 15;南2.8 17;0.5 0.3楠;-0.3 -0.1 15]

值表示缺少的数据值。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 = timeeries(x(:,1:2),1:5,'name','位置')

Matlab通过显示以下属性来响应TS_POS.

timeseries常用属性:Name: 'Position' Time: [5x1 double] TimeInfo: [1x1 tsdata. Properties]DataInfo: [1x1 tsdata. timemetdata] Data: [5x2 double] Data: [1x1 tsdata. timemetdata]更多属性,方法

长度时间向量,即5.在本例中,等于timeseries目的。找到数据示例的大小TS_POS.通过在MATLAB提示符下键入以下内容:

Getdatasamplesize (ts_pos) ans = 1

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

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

找出每个数据样本的大小Ts_vel.通过键入以下内容:

getDatasamplesze(ts_vel)ans = 1 1

注意Ts_vel.每个数据样本中有一个数据值和TS_POS.在每个数据样本中有两个数据值。

笔记

一般来说,当时间序列数据是m-经过-N-经过-P.- 来自多维数组m样本,每个数据样本的大小是N-经过-P.-经过-... 。

如果要执行操作TS_POS.Ts_vel.timeseries对象在保持它们同步时,将它们分组在时间序列集合中。有关更多信息,请参阅时间序列收集构造函数语法

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

创建时间序列对象

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

导入示例数据count.dat到Matlab工作区。

加载count.dat

这增加了24×3矩阵,数数,工作区。每列数数代表三个城镇交叉口中的每一个的每小时车辆计数。

查看数数矩阵。

数数

创造三个timeseries存储在每个交叉路口收集的数据的对象。

count1 = timeeries(count(:,1),1:24,'名称'“intersection1”);count2 = timeeries(count(:,2),1:24,'名称''intersection2');Count3 = timeseries(count(:,3), 1:24,'名称''intersection3');

笔记

在上面的建设中,timeseries对象具有变量名称(例如,count1)和内部对象名称(例如,交叉口1)。变量名称与MATLAB函数一起使用。对象名称是对象的属性,并使用对象方法访问。有关的更多信息timeseries对象属性和方法,参见时间序列属性时间序列方法

默认情况下,时间序列有一个具有秒数的时间向量和0秒的开始时间。示例构造了count1是从, 和count3时间序列对象具有1秒的开始时间,结束时间为24秒,而1秒增量。您将在几小时内更改时间单位修改时间序列单元和插值方法

笔记

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

count_ts = timeeries(count,1:24,'name','traffic_counts')

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

查看时间序列对象

创建A后timeseries对象,如上所述创建时间序列对象,您可以在变量编辑器中查看它。

查看A.timeseries对象count1在Variables编辑器中,使用以下方法之一:

  • 类型打开(“count1”)在命令提示符下。

  • 标签,在多变的部分中,点击打开变量并选择count1.中无法使用此方法MATLAB在线™

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

创建A后timeseries对象,如上所述创建时间序列对象,您可以使用点表示法修改其单位和插值方法。

查看当前属性count1

得到(count1)

MATLAB显示当前的属性值count1timeseries目的。

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

count1.datainfo.

更改数据单位count1'汽车'

count1.DataInfo。单位='汽车'

设置插值方法count1零阶保持。

count1.DataInfo。在terpolation = tsdata.interpolation('ZOH');

验证DataInfo属性已被修改。

count1.datainfo.

修改时间单位'小时'对于三个时间序列。

count1.timeinfo.units =.'小时';count2.timeinfo.units ='小时';count3.TimeInfo。单位='小时'

定义活动

该示例的这部分说明了如何定义一个事件timeseries通过使用的对象Tsdata.Event.辅助物体。事件在特定时间标记数据。当您绘制数据时,绘图上会显示事件标记。事件还提供了一种方便的方法来同步多个时间序列。

向标记AM和PM通勤时间的数据中添加两个事件。

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

e1 = tsdata.event(“AMCommute”,8);e1.units =.'小时'%指定时间单位count1 = addevent(count1,e1);%将事件添加到count1count2 = addevent(count2,e1);%将事件添加到count2count3 = AddEvent(Count3,E1);%将事件添加到count3

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

e2 = tsdata.event(“PMCommute”,18);e2.units =.'小时'%指定时间单位count1 = addevent (count1、e2);%将事件添加到count1count2 = addevent(count2,e2);%将事件添加到count2count3 = AddEvent(Count3,E2);%将事件添加到count3

绘制时间序列,count1

图绘制(count1)

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

情节反映了这一点count1使用零阶保持器插值。

阴谋是从

情节(Count2)

如果你绘制时间序列是从,它代替了count1展示。您看到了它的事件,它使用线性插值。

通过设置覆盖时间序列曲线抓住

抓住绘图(Count3)

创建时间序列收集对象

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

笔记

通常,你会使用TSCollection.对象与组的组同步时间序列具有不同的单位。在这个简单的例子中,所有时间序列都有相同的单位和TSCollection.对象不提供在单个中对三个时间序列进行分组的优势timeseries目的。有关如何在一个中分组多个时间序列的示例timeseries对象,看到创建时间序列对象

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

tsc = tscollection({count1 count2},'名称''count_coll'

笔记

时间向量timeseries您正在添加的对象TSCollection.必须匹配。

请注意,的名字财产的财产timeseries对象用于将收集成员命名为交叉口1交叉口2.

添加第三个timeseries在工作区中的对象TSCollection.

TSC = Addts(TSC,Count3)

集合中的所有三位成员都列出。

重新采样时间序列收集对象

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

重新确定时间序列,以包括每2小时而不是每小时的数据值,并将其另存为新的TSCollection.目的。

TSC1 =重组(TSC,1:2:24)

在某些情况下,您可能需要更精细的信息采样,而不是您目前拥有的信息,并且通过内插数据值获得它是合理的。

在每个半小时标记处插入值。

TSC1 =重组(TSC,1:0.5:24)

要在每个半小时标记处添加值,使用时间序列的默认插值方法。例如,新数据点交叉口1通过使用零阶保持插值方法计算,该方法保持先前样本常量的值。您设置了插值方法交叉口1如上所述修改时间序列单元和插值方法

新数据点交叉口2.交叉口3.使用线性插值计算,这是默认方法。

绘制成员TSC1.用标记看看插值的结果。

抓住离开%允许轴在绘制之前清除情节(tsc1.intersection1“xb”'显示名称''十字路口1'

您可以看到数据点以半小时间隔内插,并且交叉点1使用零阶保持插值,而另外两个成员使用线性插值。

在将其他两个成员添加到绘图时,请在图中保持图形。因为这阴谋方法抑制轴标签抓住,还加了一个图例来描述这三个系列。

抓住绘图(TSC1.Intersection2,'-.xm''显示名称'《十字路口2》)绘图(TSC1.Intersection3,':XR''显示名称'《十字路口3》)传说('显示'“位置”“西北”

将数据示例添加到时间序列收集对象

该示例的这部分说明了如何将数据样本添加到aTSCollection.

将数据样本添加到交叉口1收集会员3.25小时(即小时后15分钟)。

TSC1 = AddSampletocollection(TSC1,“时间”,3.25,...“intersection1”5);

有三个成员TSC1.集合,并将数据样本添加到一个成员将数据样本添加到其他两个成员3.25小时。但是,因为您没有指定数据值交叉口2.交叉口3.在新的示例中,缺失的值由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

查看全部交叉口1数据(包括3.25小时的新样本),类型

TSC1.Intersection1.

同样,查看所有交叉口2.数据(包括包含a的3.25小时的新样本值类型

tsc1.intersection2

删除和插值缺失数据

时间序列对象使用表示丢失的数据。示例的这一部分说明了如何使用为该时间序列指定的插值方法来删除丢失的数据或为其插入值。在将数据示例添加到时间序列收集对象,您将新的数据示例添加到TSC1.收集3.25小时。

作为TSC1.集合有三个成员,将数据样本添加到一个成员,将数据示例添加到其他两个成员3.25小时。但是,因为您没有指定数据值交叉口2.交叉口3.成员3.25小时,他们目前包含缺失的值,由此表示年代。

删除缺失的数据。查找并删除包含NaN值的数据样本TSC1.收藏。

tsc1 = delsamplefromcollection (tsc1,'指数'...找到(isnan (tsc1.intersection2.Data)));

这个命令搜索一个TSCollection.会员在这种情况下 -交叉口2..当缺失的值位于交叉口2.,此时的数据将被删除全部成员TSCollection.

笔记

使用点符号语法访问数据财产的财产交叉口2.成员在TSC1.收藏:

tsc1.intersection2.Data

对于完整的列表timeseries属性,参见时间序列属性

插值缺失的数据。为了这个例子,重新引入交叉口2.交叉口3.

TSC1 = AddSampletocollection(TSC1,“时间”,3.25,...“intersection1”5);

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

tsc1 =重新取样(tsc1 tsc1.Time);

这取代了交叉口2.交叉口3.通过使用线性插值 - 这些时间序列的默认插值方法。

笔记

点表示法tsc1.time.用于访问时间财产的财产TSC1.收藏。对于完整的列表TSCollection.属性,参见时间序列收集属性

查看交叉口2.插值后的数据,例如类型

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

从时间序列集合中删除时间序列

删除交叉口3.时间序列TSCollection.目的TSC1.

tsc1 = removets(tsc1,'intersection3'

现在列出了两个时间序列作为集合中的成员。

显示时间向量值作为日期字符串

该示例的这部分说明了如何控制使用MATLAB日期字符串的数字时间向量显示的格式。有关支持的MATLAB日期字符串格式的完整列表金宝apptimeseriesTSCollection.对象,见时间矢量定义中的定义timeseries参考页面。

要使用日期字符串,必须设置开始日期场面的领域TimeInfo.财产。使用。将时间向量中的所有值转换为日期字符串开始日期作为参考日期。

假设参考日期发生在2009年12月25日。

tsc1.timeinfo.units =.'小时';tsc1.timeinfo.startdate =.'25 -dec-2009 00:00:00'

类似于你做的count1是从, 和count3时间序列对象,将数据单元设置为TSC1.成员到弦'汽车数'

tsc1.intersection1.datainfo.units ='汽车数';tsc1.intersection2.datainfo.units ='汽车数'

绘制时间序列收集成员

要在时间序列集合中绘制数据,您会一次一个成员绘制。

第一图TSC1.成员交叉口1

抓住离开情节(tsc1.intersection1);

当您绘制时间序列集合的成员时,其时间单位显示在X-轴及其数据单位显示在y-轴。绘图标题显示为'时间序列图:'

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

阴谋交叉口1交叉口2.在同一个图中。防止覆盖绘图,但删除轴标签和标题。添加一个图例并设置显示名称线系列的属性标记每个成员。

情节(tsc1.intersection1“xb”'显示名称''十字路口1') 抓住绘图(TSC1.Intersection2,'-.xm''显示名称'《十字路口2》)传说('显示'“位置”“西北”

绘图现在包括集合中的两个时间序列:交叉口1intesection2..绘制第二图擦除了第一图中的标签。

最后,更改日期字符串X设在来小时并再次用图例绘制两个时间序列收集成员。

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

tsc1.timeinfo.units =.'小时'

指定显示时间的格式。

tsc1.timeinfo.format =“HH: MM”

使用新的时间单位重新创建最后一个绘图。

抓住离开情节(tsc1.intersection1“xb”'显示名称''十字路口1'%防止覆盖绘图,但删除轴标签和标题。抓住绘图(TSC1.Intersection2,'-.xm''显示名称'《十字路口2》)传说('显示'“位置”“西北”%恢复标签| xlabel |和| ylabel |命令和覆盖a%数据网格。Xlabel('时间(小时)')ylabel('汽车数') 网格

有关绘制时间序列选项的更多信息,请参阅timeseries

时间序列构造函数

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

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

时间序列属性

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

笔记

要从命令行获取属性信息,请键入帮助Temseries / Tsprops在MATLAB提示符处。

有关编辑的一个例子timeseries对象属性,见修改时间序列单元和插值方法

时间序列方法

有关所有时间序列方法的描述,请参阅timeseries

时间序列收集构造器

介绍

matlab对象,称为TSCollection.,是一个MATLAB变量,它用一个共同的时间向量对多个时间序列进行分组。这timeseries您包含的对象TSCollection.对象被称为成员并具有多种方法,便于分析和操作timeseries

时间序列收集构造函数语法

在实现专门设计用于在集合上运行的MATLAB方法timeseries对象,您必须创建一个TSCollection.对象来存储数据。

下表总结了使用的语法TSCollection.构造函数。有关使用此构造函数的示例,请参见创建时间序列收集对象

时间序列收集语法描述

句法

描述

TSC = TSCollection(TS)

创建一个TSCollection.目的TSC.包括一个或多个timeseries对象。

ts参数可以是以下之一:

  • 单身的timeseriesMatlab工作区的对象

  • 细胞阵列timeseries对象的MATLAB工作空间

timeseries对象在同一时间向量中共享TSCollection.

TSC = TSCollection(时间)

创建一个空TSCollection.与时间向量的对象时间

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

TSC = TScollection(时间,次数,'参数',值,......)

可选地在后面输入以下参数值对时间TimeSeries论点:

时间序列收集属性

此表列出了属性TSCollection.目的。您可以指定的名字时间, 和TimeInfo.属性作为输入参数TSCollection.构造函数。

时间序列收集属性描述

财产

描述

的名字

TSCollection.将对象名称作为字符串输入。此名称可能与姓名不同TSCollection.变量在MATLAB工作空间。

时间

时间值的矢量。

timeinfo.startdate.是空的,数字时间值以指定的单位相对于0进行测量。当timeinfo.startdate.定义时,时间值表示相对于开始日期在指定的单位。

长度时间必须匹配的第一个或最后一个维度数据每个人的财产TSCollection.成员。

TimeInfo.

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

  • 单位- 具有以下值的时间单位:'周''天''小时'“分钟”'秒''毫秒''微秒', 和'纳秒'

  • 开始- 开始时间

  • 结尾- 结束时间(只读)

  • 增量- 两个后续时间值之间的间隔。增量是当时间不是均匀采样时。

  • 长度- 时间向量的长度(只读)

  • 格式定义日期字符串显示格式的字符串。看到MATLABDATSTR.有关更多信息的功能参考页面。

  • 开始日期- 定义参考日期的日期字符串。看到MATLAB塞尾柱有关更多信息的功能参考页面。

  • 用户数据- 存储任何其他用户定义的信息

时间序列收集方法

一般时间序列收集方法。使用以下方法查询和设置对象属性,并绘制数据。

查询属性的方法

方法

描述

得到

询问TSCollection.对象属性值。

isempty

评估真的一个空的TSCollection.目的。

长度

返回时间向量的长度。

阴谋

绘制一个集合中的时间序列。

TSCollection.属性值。

尺寸

返回一个尺寸TSCollection.目的。

数据和时间操纵方法。使用以下方法添加或删除数据样本,并操纵TSCollection.目的。

操作数据和时间的方法

方法

描述

迪拉姆

添加A.timeseries对象至A.TSCollection.目的。

addsampletocollection.

将数据样本添加到aTSCollection.目的。

DelsamplefromCollection.

从a中删除一个或多个数据示例TSCollection.目的。

getabstime.

从a中提取日期串时间向量TSCollection.对象进入单元格数组。

getsampleusingtime.

从现有的提取数据样本TSCollection.对象进入一个新的TSCollection.目的。

gettimeeriesnames.

返回一个单元格数组序列名称TSCollection.目的。

horzcat

水平串联TSCollection.对象。结合了几个timeseries具有同一时间向量的对象进入一个时间序列集合。

掠夺

删除一个或多个timeseries来自A的物体TSCollection.目的。

重组

中选择或插入数据TSCollection.对象使用一个新的时间向量。

塞尾柱

设置A的时间向量中的时间值TSCollection.对象作为日期字符串。

settimeseriesnames

更改所选对象的名称timeseriesA的对象TSCollection.目的。

vertcat

垂直串联TSCollection.对象。连接数TSCollection.沿时间尺寸的对象。