时间表
这个例子展示了如何从传感器数据分析自行车交通模式时间表
用于组织和预处理带有时间戳的数据的数据容器。这些数据来自马萨诸塞州剑桥市百老汇街的传感器。剑桥市向公众提供了在剑桥大学公开数据网站。
这个示例展示了如何执行各种数据清理、删除和预处理任务,例如删除丢失的值和使用不同的时间步骤同步带有时间戳的数据。此外,突出显示了数据探索,包括可视化和使用时间表
数据容器:
探索日常自行车交通
比较自行车交通和当地的天气情况
分析一周中不同时间的自行车流量
从逗号分隔的文本文件导入自行车交通数据示例。的readtable
函数返回表中的数据。控件显示前8行头
函数。
bikeTbl = readtable (“BicycleCounts.csv”);头(bikeTbl)
ans=8×5表时间戳天总西行的往东的 ___________________ _____________ _____ _________ _________ 2015-06-24就是{“星期三”}13 9 4 2015-06-24 01:00:00{“星期三”}3 3 0 2015-06-24 02:00:00{“星期三”}1 1 0 2015-06-24 03:00:00{“星期三”}1 1 0 2015-06-24 04:00:00{“星期三”}1 1 0 2015-06-24 05:00:00{“星期三”}7 3 42015-06-24 06:00:00 {'Wednesday'} 36 6 30 2015-06-24 07:00:00 {'Wednesday'} 141 13 128
数据有时间戳,因此使用时间表来存储和分析数据是很方便的。时间表类似于表,但包含与数据行相关联的时间戳。时间戳或行时间用datetime
或持续时间
值。datetime
和持续时间
分别为表示时间点或运行时间的推荐数据类型。
转换bikeTbl
使用table2timetable
函数。您必须使用转换函数,因为readtable
返回一个表。table2timetable
将第一个datetime
或持续时间
将表中的变量转换为时间表的行时间。行时间是标记行的元数据。但是,当您显示时间表时,行时间和时间表变量将以类似的方式显示。请注意,表有五个变量,而时间表有四个。
bikeData = table2timetable (bikeTbl);头(bikeData)
ans=8×4时刻表时间戳天总西行的往东的 ___________________ _____________ _____ _________ _________ 2015-06-24就是{“星期三”}13 9 4 2015-06-24 01:00:00{“星期三”}3 3 0 2015-06-24 02:00:00{“星期三”}1 1 0 2015-06-24 03:00:00{“星期三”}1 1 0 2015-06-24 04:00:00{“星期三”}1 1 0 2015-06-24 05:00:00{“星期三”}7 3 42015-06-24 06:00:00 {'Wednesday'} 36 6 30 2015-06-24 07:00:00 {'Wednesday'} 141 13 128
谁bikeTblbikeData
名称大小字节类属性bikeData 9387x4 1412425时刻表bikeTbl 9387x5 1487735 table
转换一天
变量来分类。分类数据类型是为包含有限离散值集的数据而设计的,比如星期几的名称。列出类别,以便按日顺序显示。使用点下标按名称访问变量。
bikeData。一天= categorical(bikeData.Day,{“星期天”,“星期一”,“星期二”,...“星期三”,“星期四”,“星期五”,“星期六”});
在时间表中,时间和数据变量是分开处理的。访问属性
表的第一个维度是行时间,第二个维度是变量。的DimensionNames
属性显示两个维度的名称,而VariableNames
属性显示沿第2维的变量的名称。
bikeData。属性
ans = TimetableProperties with properties: Description: " UserData: [] DimensionNames: {'Timestamp' 'Variables'} VariableNames: {'Day' 'Total' 'Westbound' 'Eastbound'} VariableDescriptions: {} VariableUnits: {} variablecontinuity: [] RowTimes: [9387x1 datetime] StartTime: 2015-06-24 00:00:00 SampleRate: NaN TimeStep: NaN CustomProperties:没有设置自定义属性。使用addprop和rmprop修改CustomProperties。
默认情况下,table2timetable
分配时间戳
作为将表转换为时间表时的第一个维度名,因为这是来自原始表的变量名。属性可以更改维度和其他时间表元数据的名称属性
.
将维度的名称更改为时间
和数据
.
bikeData.Properties.DimensionNames = {“时间”“数据”};bikeData。属性
ans = TimetableProperties with properties: Description: " UserData: [] DimensionNames: {'Time' 'Data'} VariableNames: {'Day' 'Total' '' Westbound' 'Eastbound'} VariableDescriptions: {} VariableUnits: {} variablecontinuity: [] RowTimes: [9387x1 datetime] StartTime: 2015-06-24 00:00:00 SampleRate: NaN TimeStep: NaN CustomProperties:没有设置自定义属性。使用addprop和rmprop修改CustomProperties。
显示时间表的前8行。
头(bikeData)
ans=8×4时刻表(UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU05:00:00星期三7 3 4 2015-06-24 06:00:00星期三36 6 30 2015-06-24 07:00:00星期三14113128
确定最近的行时间和最早的行时间之间经过的天数。当一次引用一个变量时,变量可以通过点表示法访问。
elapsedTime=最大值(bikeData.Time)-最小值(bikeData.Time)
elapsedTime =持续时间9383:30:00
elapsedTime。格式=“d”
elapsedTime =持续时间390.98天
要检查给定日期的典型自行车计数,请计算自行车总数的平均值,以及向西和向东行驶的自行车数。
的内容建立索引,以矩阵形式返回数值数据bikeData
使用花括号。显示前8行。使用标准的表下标来访问多个变量。
数量= bikeData{: 2:结束};计数(1:8,:)
ans =8×313 9 4 3 30 1 1 0 1 1 0 1 1 0 7 3 4 36 6 30 141 13 128
由于均值仅适用于数字数据,因此可以使用vartype
函数选择数值变量。vartype
可以比手动索引到表或时间表更方便地选择变量。计算平均值并省略南
值。
数量= bikeData {: vartype (“数字”)};意思是(计数,“omitnan”)
ans =1×349.8860 24.2002 25.6857
要确定有多少人在假日期间骑自行车,请查看7月4日假期的数据。索引到时间表的行时间为2015年7月4日。当您在行时间上建立索引时,您必须精确匹配时间。可以指定时间索引为datetime
或持续时间
值,或可转换为日期和时间的字符向量。您可以将多次指定为一个数组。
索引到bikeData
具有提取2015年7月4日数据的特定日期和时间。如果仅指定日期,则假定时间为午夜或00:00:00。
bikeData (“2015-07-04”:)
ans=1×4时间表时间一天总西行的往东的 ___________________ ________ _____ _________ _________ 2015-07-04就是周六8 7 1
d = {“2015-07-04 08:00:00”,“2015-07-04 09:00:00”};比克达塔(d,:)
ans=2×4时间表时间一天总西行的往东的 ___________________ ________ _____ _________ _________ 2015-07-04 08:00:00周六15 3 12 2015-07-04 09:00:00周六21 4 17
用这种方法提取一整天的时间是很乏味的。您还可以指定时间范围,而无需对特定时间进行索引。要创建时间段下标作为helper,请使用timerange
函数。
使用2015年7月4日全天的时间范围在时间表中下标。将开始时间指定为7月4日午夜,将结束时间指定为7月5日午夜。默认情况下,timerange
包括从开始时间到结束时间(但不包括结束时间)的所有时间。在地图上标出一天中自行车的数量。
tr = timerange (“2015-07-04”,“2015-07-05”);jul4 = bikeData (tr,“总”);头(jul4)
ans=8×1的时间表时间总计___________________ _____ 2015-07-04 00:00:00 8 2015-07-04 01:00:00 13 2015-07-04 02:00:00 4 2015-07-04 03:00:00 1 2015-07-04 04:00:00 0 2015-07-04 05:00:00 1 2015-07-04 06:00:00 8 2015-07-04 07:00:00
酒吧(jul4.Time jul4.Total) ylabel (的自行车数量)标题(《2015年7月4日自行车倒计时》)
从图中可以看出,全天的业务量都在增加,下午趋于平稳。因为很多商店都关门了,所以这个地块没有显示通勤时间的典型交通状况。晚上晚些时候的峰值可以归因于在天黑后燃放烟花的庆祝活动。为了更仔细地检查这些趋势,应该将数据与典型天数的数据进行比较。
将7月4日的数据与7月其余时间的数据进行比较。
7月= bikeData (timerange (“2015-07-01”,'2015-08-01'):);情节(jul.Time jul.Total)在情节(jul4.Time jul4.Total) ylabel (“总数”)标题(“七月自行车数”)举行从传奇(“自行车数”,“7月4日自行车统计”)
图表显示了工作日和周末之间的交通差异。7月4日和5日的交通情况与周末的交通情况一致。7月5日是星期一,但通常是假日。这些趋势可以通过进一步的预处理和分析来更仔细地检查。
时间表
带有时间戳的数据集通常是杂乱的,可能包含异常或错误。时间表非常适合解决异常和错误。
时间表不需要有它的行时间在任何特定的顺序。它可以包含不按行时间排序的行。时间表还可以包含具有相同行时间的多行,尽管行可以具有不同的数据值。即使行时间是排序的并且是唯一的,它们也会因时间步长不同而不同。一个时间表甚至可以包含NaT
或南
值指示缺失行时间。
的时间表
数据类型提供了许多不同的方法来解决丢失、重复或不均匀的时间。您还可以重新采样或聚合数据以创建常规的时间表。当一个时间表是规则的,它有排序和唯一的行时间,并且它们之间有一个统一或均匀间隔的时间步长。
要找到缺少的行时间,使用ismissing
.
若要删除丢失的时间和数据,请使用rmmissing
.
要按行时对时间表排序,请使用sortrows
.
要制作具有唯一和排序行时间的时间表,请使用独特的
和调整时间
.
要制定有规律的时间表,请指定均匀间隔的时间向量并使用调整时间
.
确定时间表是否排序。如果一个时间表的行时间按升序列出,那么它就是排序的。
issorted (bikeData)
ans =逻辑0
的时间表。的sortrows
函数根据行时间(从最早到最近)对行进行排序。如果有重复行时间的行,那么sortrows
将所有副本复制到输出。
bikeData=sortrows(bikeData);issorted(bikeData)
ans =逻辑1
时间表的变量或行时间中可能有缺失的数据指示器。例如,可以将缺少的数值表示为南
,缺失的datetime值为NaT
s您可以使用标准化
,ismissing
,rmmissing
,fillmissing
函数,分别。
找出并计算时间表变量中缺失的值。在本例中,缺失值表示未收集数据的情况。
missData=ismissing(bikeData);sum(missData)
ans =1×41 3 3 3
的输出ismissing
是一个逻辑
矩阵,与表大小相同,识别缺失的数据值为真。显示任何缺少数据指示器的行。
idx = (missData, 2);bikeData (idx:)
ans=3×4时间表时间一天总西行的往东的 ___________________ ___________ _____ _________ _________ 2015-08-03就是周一南南南南南南2015-08-03 01:00:00 NaT <定义>南南南
ismissing (bikeData)
只查找时间表变量中丢失的数据,而不查找时间。要找到缺少的行次数,调用ismissing
在行时间。
missTimes = ismissing (bikeData.Time);bikeData (missTimes:)
ans=2×4时间表时间一天总西行的往东的 ____ ___________ _____ _________ _________ NaT <定义>南南南NaT周五6 3 3
在本例中,缺失时间或数据值表示测量错误,可以排除。删除表中包含缺失数据值和缺失行使用时间的行rmmissing
.
bikeData = rmmissing (bikeData);sum (ismissing (bikeData))
ans =1×40 0 0 0
sum (ismissing (bikeData.Time))
ans = 0
确定是否有重复的次数和/或重复的数据行。您可能想要排除精确的重复,因为这些也可以被认为是测量错误。通过查找排序时间之间的差恰好为零的位置来识别重复时间。
idx = diff(bikeData.Time) == 0;dup = bikeData.Time (idx)
dup =3 x1 datetime2015-08-21 00:00:00 2015-11-19 23:00:00
重复三次,2015年11月19日重复两次。检查与重复次数相关的数据。
bikeData (dup (1):)
ans=2×4时间表时间一天总西行的往东的 ___________________ ______ _____ _________ _________ 2015-08-21就是周五14 9 5 2015-08-21就是星期五11 7 4
bikeData (dup (2):)
ans=3×4时间表时间一天总西行的往东的 ___________________ ________ _____ _________ _________ 2015-11-19 23:00:00周四17 15 2 2015-11-19 23:00:00周四17 15 2 2015-11-19 23:00:00周四17 15 2
第一种方法有重复的次数,但数据是不重复的,而其他方法是完全重复的。当时间表行包含相同的行时间和行之间相同的数据值时,它们被认为是重复的。您可以使用独特的
删除时间表中重复的行。的独特的
函数还按行时间对行进行排序。
bikeData =独特(bikeData);
具有重复时间但数据不重复的行需要一些解释。检查一下这些时期的数据。
D = dup(1) + hours(-2:2);bikeData (d,:)
ans=5×4时间表时间日总西行东行___________________ _____________ __________________ 2015-08-20 22:00:00星期四40 30 10 2015-08-20 23:00:00星期四25 18 7 2015-08-21 00:00:00星期五11 7 4 2015-08-21 00:00:00星期五14 9 5 2015-08-21 02:00:00星期五6 5
在这种情况下,重复的时间可能是错误的,因为数据和周围的时间是一致的。虽然它似乎代表01:00:00,但不确定这应该是什么时间。可以通过累积数据来解释两个时间点的数据。
求和(bikeData{dup(1),2:end})
ans =1×325 16 9
这只是可以手工完成的一种情况。然而,对于许多行,调整时间
函数可以执行此计算。属性的惟一时间累计数据总和
聚合函数。该和适用于数值数据,但不适用于时间表中的分类数据。使用vartype
来确定数值变量。
vt = vartype (“数字”);t =独特(bikeData.Time);numData =调整时间(bikeData (:, vt), t,“和”);头(numData)
ans=8×3的时间表时间Total西行东行___________________ ______________ _________ 2015-06-24 01:00:00 3 30 2015-06-24 02:00:00 1 1 0 2015-06-24 03:00:00 1 1 0 2015-06-24 05:00:00 7 3 4 2015-06-24 06:00:00 36 6 30 2015-06-24 07:00:00 141 13 128
您不能对分类数据进行求和,但由于一个标签表示一整天,因此在每一天取第一个值。你可以执行调整时间
用相同的时间向量再次操作,并将时间表连接在一起。
vc = vartype (“绝对的”); catData=重定时(比基达(:,vc),t,“firstvalue”);bikeData = [catData, numData];bikeData (d,:)
ans=4×4时刻表时间日总计西行东行2015-08-20 22:00星期四40-10-08-20 23:00星期四25-18 7-08-21:00-2015-08-21:00星期五5:00
数据似乎具有一小时的统一时间步长。要确定时间表中的所有行时间是否都是这样,请使用isregular
函数。isregular
返回真正的
对于已排序的等间距时间(单调递增),没有重复或遗漏的时间(NaT
或南
).
isregular(比克达塔)
ans =逻辑0
的输出0
,或假
表示时间表中的时间间隔不均匀。更详细地探索时间间隔。
dt=差异(循环数据时间);[最小(dt);最大(dt)]
ans =2 x1持续时间00:30:00 03:00:00
要将时间表设置为固定的时间间隔,请使用调整时间
或同步
并指定感兴趣的时间间隔。
计算每天的计数调整时间
函数。方法累积每天的计数数据总和
方法。这适用于数值数据,但不适用于时间表中的分类数据。使用vartype
按数据类型识别变量。
dayCountNum =调整时间(bikeData (:, vt),“每日”,“和”);头(dayCountNum)
ans=8×3的时间表时间Total西行东行___________________ ______________ _________ 2015-06-24 00:00:00 2141 1141 1000 2015-06-25 00:00:00 2106 1123 983 2015-06-26 00:00:00 1748 970 778 2015-06-27 00:00:00 695 346 349 2015-06-28 00:00:00 153 83 70 2015-06-29 00:00:00 1841 978 863 2015-06-30 00:00:00 2170 1145 1025 2015-07-01 00:00:00 997 544 453
如上所述,您可以执行调整时间
操作以使用适当的方法表示分类数据并将时间表连接在一起。
dayCountCat=重定时(bikeData(:,vc),“每日”,“firstvalue”);dayCount = [dayCountCat, dayCountNum];头(dayCount)
ans=8×4时刻表(UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢星期日153 83 70 2015-06-29 00:00:00星期一1841 978 863 2015-06-30 0星期二0:00:00 2170 1145 1025 2015-07-01 00:00:00星期三997 544 453
通过比较自行车数量和天气数据来检验天气对骑车行为的影响。载入天气时间表,其中包括来自波士顿的历史天气数据,包括风暴事件。
负载BostonWeatherData头(weatherData)
ans=8×3的时间表时间温度湿度事件___________ ____________ ________ ____________ 01- 7- 2015 72 78雷暴02- 7- 2015 72 60无03- 7- 2015 70 56无04- 7- 2015 67 75无05- 7- 2015 72 67无06- 7- 2015 74 69无07- 7- 2015 75 77雨08- 7- 2015 79 68雨
要总结时间表中的时间和变量,使用总结
函数。
摘要(天气数据)
x1 datetime值:RowTimes:时间:383分钟01 - 2015中位数08年7月- 2016年1月2016 Max 17 - 7月步伐24:00:00变量:TemperatureF: x1双重价值:383分钟2 55 Max 85湿度中位数:383 x1双重价值:分钟29 64 Max 97事件中位数:383 x1分类值:7冰雹雨108雨雪雾4雪18雷暴12没有233
将自行车数据与天气数据结合成一个通用的时间矢量使用同步
.的参考页中记录的任何方法都可以重新取样或聚合时间表数据同步
函数。
将两个时间表的数据同步到一个共同的时间向量,这个时间向量是由它们各自的每日时间向量的交集构成的。
data =同步(dayCount weatherData,“十字路口”); 总目(数据)
ans=8×7时刻表时间日总西行东行温度湿度事件___________________ ______________ __________________ ____________ ________ ____________ 2015-07-01 00:00:00星期三997 544 453 72 78雷雨2015-07-02 00:00:00星期四1943 1033 910 72 60无2015-07-03 00:00:00星期五870 454 416 70 56无2015-07-04 00:00:00星期六669 328 341 67 75无2015-07-05 00:00:00 Sunday 702 407 295 72 67无2015-07-06 00:00:00 Monday 1900 1029 871 74 69无2015-07-07 00:00:00 Tuesday 2106 1140 966 75 77 Rain 2015-07-08 00:00:00 Wednesday 1855 984 871 79 68 Rain
在单独的y轴上比较自行车交通量和室外温度,以检查趋势。从数据中删除周末以便可视化。
idx = ~ isweekend (data.Time);weekdayData =数据(idx, {“TemperatureF”,“总”});图yyaxis左情节(weekdayData。时间,weekdayData.Total) ylabel(“自行车数”) yyaxis正确的绘图(weekdayData.Time,weekdayData.TemperatureF)ylabel(“温度(\保监会F)”)标题(“自行车计数和温度随时间变化”) xlim((最小(data.Time)最大(data.Time)))
这张图显示,交通和天气数据可能也会遵循类似的趋势。放大情节。
xlim ([datetime (“2015-11-01”)、日期时间(“2016-05-01”)))
趋势是相似的,表明更冷的天气骑车的人更少。
根据不同的间隔(如星期几和时间)检查数据。确定每天使用的总计数varfun
对变量进行分组计算。指定总和
函数具有函数句柄和使用名称-值对的分组变量和首选输出类型。
比克达姆,“GroupingVariables”,“一天”,...“输出格式”,“表”)
白天=7×5表日GroupCount sum_Total sum_西向sum_东向_________ __________ _________ _____________ _____________星期日1344 25315 12471 12844星期一1343 79991 39219 40772星期二1320 81480 39695 41785星期三1344 86853 41726 45127星期四1344 87516 42682 44834星期五1342 76643 36926 39717星期六1343 30292 14343 15949
图酒吧(byDay {: {“sum_Westbound”,“sum_Eastbound”}})传奇({“西行”,“往东的”},“位置”,“eastoutside”) xticklabels ({“太阳”,“我的”,“星期二”,“结婚”,“Thu”,“星期五”,“坐”})标题(“每周的自行车数”)
条形图表明工作日交通更繁忙。此外,东行和西行方向也有差异。这可能表明人们进出城市时倾向于选择不同的路线。另一种可能性是,有些人在某一天进入,在另一天返回。
确定一天的时间和使用varfun
用于分组计算。
bikeData.HrOfDay=hour(bikeData.Time);byHr=varfun(@mean,bikeData(:{“西行”,“往东的”,“HrOfDay”}),...“GroupingVariables”,“HrOfDay”,“输出格式”,“表”);头(byHr)
ans=8×4表HrOfDay GroupCount mean_Westbound mean_Eastbound _______ __________ ______________ ______________ 0 389 5.4396 1.7686 1 389 2.7712 0.87147 2 391 1.8696 0.58312 3 391 0.7468 0.289 4 391 0.52685 1.0026 5 391 0.70588 4.7494 6 391 3.1228 22.097 7 391 9.1176 63.54
栏(byHr {: {“mean_Westbound”,“平均东行”}})传说(“西行”,“往东的”,“位置”,“eastoutside”)包含(一天的小时) ylabel (“自行车数”)标题(“按小时计算的平均自行车数”)
在上午9点和下午5点左右,典型的通勤时间会出现交通高峰。此外,东行和西行之间的趋势是不同的。总的来说,西行方向是剑桥周围的居民区和大学。东行方向是去波士顿的。
与东行方向相比,西行方向当天晚些时候的交通量更大。这可能表明该地区的大学日程安排和餐厅交通。按星期和小时检查趋势。
byHrDay = varfun (@sum bikeData,“GroupingVariables”,{“HrOfDay”,“一天”},...“输出格式”,“表”);头(按天)
ans=8×6表HrOfDay天GroupCount sum_Total sum_Westbound sum_Eastbound _______ _________ __________ _________ _____________ _____________ 周日56 473 345 128 0 0周一55 202 145 57 0周二55 297 213 84 0周三56周四56 436 324 112 374 286 88 0 0周五55 442 348 94 0周六周日56 56 580 455 125 333 259 74
要安排时间表,使一周中的几天成为变量,请使用unstack
函数。
hrAndDayWeek = unstack (byHrDay (: {“HrOfDay”,“一天”,“sum_Total”}),“sum_Total”,“一天”);头(hrAndDayWeek)
ans=8×8表HrOfDay周日周一周二周三周四周五周六 _______ ______ ______ _______ _________ ________ ______ ________ 0 473 202 297 374 436 442 580 333 81 147 168 173 183 332 86 198 77 68 93 128 141 254 3 51 41 43 44 50 61 80 81 117 101 108 80 60 419 105 353 407 381 340 128 275 1750 1867 2066 1927 1625 351 553 5355 5515 5818 75731 4733 704
ribbon(hrAndDayWeek.HrOfDay,hrAndDayWeek{:,2:end})ylim([024])xlim([088])xticks(1:7)xticklabels({“太阳”,“我的”,“星期二”,“结婚”,“Thu”,“星期五”,“坐”}) ylabel (“小时”)标题(“按一周中的时间和日期计算自行车”)
周一到周五的正常工作日也有类似的趋势,高峰是在高峰时间,交通在晚上逐渐减弱。周五交易量较小,但总体趋势与其他工作日类似。周六和周日的趋势相似,没有高峰时段,当天晚些时候流量会更大。周一至周五晚间的走势也类似,周五成交量较小。
为了检查一天的总体时间趋势,将数据按高峰时间分割。可以使用一天中的不同时间或使用时间单位离散化
函数。例如,将数据分成组我
,AMRush
,一天
,PMRush
,点
.然后使用varfun
按组计算平均值。
bikeData.HrLabel=离散化(bikeData.HrOfDay[0,6,10,15,19,24],“绝对的”,...{“我”,“RushAM”,“一天”,“RushPM”,“点”});byHrBin=varfun(@mean,bikeData)(:{“总”,“HrLabel”}),“GroupingVariables”,“HrLabel”,...“输出格式”,“表”)
byHrBin =5×3表HrLabel GroupCount mean_Total _______ __________ __________ AM 2342 3.5508 RushAM 1564 94.893 Day 1955 45.612 RushPM 1564 98.066 PM 1955 35.198
bar(byHrBin.mean_Total) cats = categories(byHrBin.HrLabel);xticklabels(猫)标题(“高峰时段的自行车数量”)
总的来说,这个地区在晚高峰和早高峰时间的交通流量是一天中其他时间的两倍。这个地区在清晨的交通很少,但在傍晚和深夜仍然有大量的交通,这与白天以外的早晚高峰时间相当。
datetime
|头
|调整时间
|rmmissing
|sortrows
|总结
|table2timetable
|timerange
|时间表
|unstack
|varfun