主要内容

在时间表中选择时间

时间表是一种将时间与每一行关联起来的表类型。您可以通过以下几种方式选择基于时间的数据子集:

  • 使用该范围内的某个范围内的时间timerange或者withtol功能。

  • 使用的组件匹配重复出现的时间单位,如天或月datetime数组。

  • 属性重新取样或分组数据ret函数。

例如,读取示例文件outages.csv其中包含了2002年至2014年美国电力供应中断的数据。行向量乘以,过剩,指示中断发生的时间。的readtimetable函数将其作为datetime数组中。显示前5行。

tt = ReadTimetable(“outages.csv”);头(TT, 5)
ans =5×5时间表OutageTime地区客户RestorationTime造成损失  ________________ _____________ ______ __________ ________________ ___________________ 2002-02-01 12:18{“西南”}458.98 - 1.8202 e + 06 2002-02-07 16:50{“暴风雪”}2003-01-23 00:49{“东南”}530.14 - 2.1204 e + 05 NaT{“暴风雪”}2003-02-07)21:15{“东南”}289.4 - 1.4294 e + 052003-02-17 08:14 {'winter storm'} 2004-04-06 05:44 {'West'} 434.81 3.4037e+05 2004-04-06 06:10 {'equipment fault'} 2002-03-16 06:18 {'MidWest'} 186.44 2.1275e+05 2002-03-18 23:23 {'severe storm'}

在R2019a之前,用读取表格数据readtable并转换成一个时间表使用table2timetable

选择时间范围

要查找特定范围内的数据,可以使用timerange函数,该函数定义用于索引的基于时间的下标。例如,为2008年夏季定义一个范围,从6月20日开始到9月21日结束。默认情况下,timerange定义左侧关闭的半开间隔,右侧打开,因此将结束日期指定为9月22日。

tr = timerange(“2008-06-20”“2008-09-22”
TR =时刻表时间范围下标:Select Time - schedule rows with times in the half-open interval: [20-Jun-2008 00:00:00, 22-Sep-2008 00:00:00]请参见按行时间和可变类型选择时间表数据。

找出在该范围内发生的中断,然后绘制随时间变化受影响的客户数量。

Summer08 = TT(TR,:);Stem(Summer08.outageTime,Summer08.Customers)Ylabel(“顾客”

图中包含一个坐标轴。轴包含类型为stem的对象。

在这段时间内的几次宕机对客户的影响很大。将范围扩大到2008年全年,并寻找同样高的数字。

tr = timerange(“2008”“年”);: all08 = TT (TR);high08 = all08 (all08。客户> 500000年:);茎(high08.OutageTime high08.Customers) ylabel (“客户”

图中包含一个坐标轴。轴包含类型为stem的对象。

timerange函数也有助于选择特定的日期。通过比较选择时间datetime价值可以给出误导的结果,因为所有datetime值包括日期和时间组件。但是,只有仅指定A的日期组件datetime值时,时间组件被设置为午夜。因此,虽然有6月26日的数据,但像这样的比较没有结果。

任何(summer08。过剩== datetime(“2008-06-26”))
ans =逻辑0

相反,你可以用timerange

tr = timerange(“2008-06-26”“天”);: june26 = summer08 (TR)
june26 =1×5时间表OutageTime地区客户流失RestorationTime原因________________ _____________ ______ _________ ________________ _________________ 2008-06-26 22:36 { '东北地区'} 425.21 93612 2008-06-27 06:53 { '雷雨'}

定义范围的另一种方法是在使用时间前后指定一个公差withtol.例如,查找2008年夏季的行过剩是在9月1日劳动节的三天内。

WT = withtol (“2008-09-01”,天(3));verysep1 = summer08(wt,:)
nearSep1 =4×5时间表OutageTime地区客户RestorationTime造成损失  ________________ _____________ ______ _________ ________________ ___________________ 2008-09-01二三35{“东南”}206.27 - 2.27 e + 05 NaT{“设备故障”}2008-09-01 00:18{“中西部”}74213 - 510.05 2008-09-01 14:07{“雷雨”}2008-09-02 19:01{“中西部”}南2.215 e + 05 2008-09-03 02:58{'severe storm' } 2008-08-29 20:25 {'West' } NaN 31624 2008-09-01 01:51 {'wind' }

匹配时间单位

你也可以用的单位datetime值,例如小时或天,以标识用于逻辑索引的行。这种方法对于指定周期间隔很有用。

例如,查找的值过剩其月份成分的值为3或更少,对应每年的1月、2月和3月。使用生成的逻辑数组建立索引TT

TR = (month(TT.OutageTime) <= 3);: winterTT = TT (TR);头(winterTT, 5)
ans =5×5时间表OutageTime地区客户RestorationTime造成损失  ________________ _____________ ______ __________ ________________ ________________ 2002-02-01 12:18{“西南”}458.98 - 1.8202 e + 06 2002-02-07 16:50{“暴风雪”}2003-01-23 00:49{“东南”}530.14 - 2.1204 e + 05 NaT{“暴风雪”}2003-02-07)21:15{“东南”}289.4 - 1.4294 e + 05年2003-02-1708:14 {'winter storm'} 2002-03-16 06:18 {'MidWest'} 186.44 2.1275e+05 2002-03-18 23:23 {'severe storm'} 2005-02-04 08:18 {'MidWest'} NaN NaN 2005-02-04 19:51 {'attack'}

创建一个冬季原因的饼状图。的函数只接受数字或分类输入,首先转换导致分类

winterTT。导致= categorical(winterTT.Cause); pie(winterTT.Cause) title(“1月至3月中断原因”);

按时间段分组

ret函数通过重新采样或分组值来调整行时间以创建指定的间隔。它的预定义间隔从秒到年不等,您可以指定如何处理间隔的缺失值或多个值。例如,您可以选择每周的第一个观测值,或者以季度为单位计算观测值。

对于中断数据,您可以使用ret找出每年的总数。首先,创建一个只有数值变量的时间表。然后,调用ret并指定一个年度间隔,使用总和将多个值组合起来。每年的输出有一行,其中包含当年的总损失和受影响的客户总数。

numTT = TT (:, vartype (“数字”));numTT =调整时间(numTT,“年”“和”);头(numTT, 5)
ans =5×2时间表OutageTime Loss Customers ________________ _______________ 2002-01-01 00:00 81335 1.3052e+07 2003-01-01 00:00 58036 1.396e+07 2004-01-01 00:00 51014 1.5523e+07 2005-01-01 00:00 33980 8.7334e+06 2006-01-01 00:00 35129 2.5729e+07

创建一个柱状图,说明每年受影响的客户数量。

酒吧(numtt.outageTime,numtt.Customers)Xlabel(“年”)ylabel(“顾客”

图中包含一个坐标轴。坐标轴包含bar类型的对象。

使用行时间计算持续时间

您可以使用与其他时间表的行时间datetime或者持续时间值以执行计算。例如,计算停电数据中列出的停电持续时间。然后计算每月中断持续时间的中位数并绘制它们。

首先将中断持续时间添加到TT通过减去行时间(即停电的开始时间)RestorationTime(这是停电的结束)。改变格式除余量以天为单位显示中断的持续时间。显示的前5行TT

TT。OutageDuration = TT。RestorationTime- TT.OutageTime; TT.OutageDuration.Format =' d ';头(TT, 5)
ans =5×6时间表OutageTime地区丢失客户恢复时间原因发生措施_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________06 2002-02-0701-23 00:49 {'Southeast'} 530.14 2.1204E + 05 NAN {'冬季风暴'} NAN Days 2003-02-07 21:15 {'Southeast'} 289.4 1.4294E + 05 2003-02-17 08:14 {'冬季风暴'} 9.4576天2004-04-06 05:44 {'West'} 434.81 3.4037E + 05 2004-04-06 06:10 {'设备故障'} 0.018056天2002-03-16 06:18 {'Midwest'} 186.44 2.1275E + 05 2002-03-18 23:23 {'严重风暴'} 2.7118天

创建一个只有中断持续时间的时间表。一些行TT有缺失值,NaT,为复辟时期,导致除余量.删除值从medianTT,可以使用rmmissing.函数。然后使用ret计算每月中位数中的中位数。显示的前5行medianTT

medianTT = TT (:,“OutageDuration”);medianTT = rmmissing (medianTT);medianTT =调整时间(medianTT,“月”, @median);头(medianTT, 5)
ans =5×1的时间表OutageTime OutageDuration ________________ ______________ 2002-02-01 00:00 6.1889 days 2002-03-01 00:00 2.7472 days 2002-04-01 00:00 NaN days 2002-05-01 00:00 0.72917 days 2002-06-01 00:00 0.22431天

创建每月中断持续时间中值的阶梯图。

楼梯(medianTT.OutageTime medianTT.OutageDuration)包含(“年”)ylabel(“平均持续时间(天)”

图中包含一个坐标轴。轴包含楼梯类型的对象。

另请参阅

|||||||||||

相关话题