使用时间戳数据进行预处理和探索时间表

这个例子展示了如何从传感器数据分析自行车交通模式时间表数据容器来组织和预处理时间戳数据。数据来自马萨诸塞州剑桥市百老汇街的传感器。剑桥市为公众提供了从牛津大学图书馆获取完整数据的途径剑桥开放数据网站。

此示例示出了如何执行各种数据清洗,改写(munging),和预处理任务,例如去除缺失值和同步与不同的时间步长时间标记的数据。此外,数据探索被高亮显示,包括可视化和使用分组计算时间表数据容器:

  • 探索日常自行车交通

  • 比较自行车交通和当地天气状况

  • 分析自行车交通在不同的日子和一天的时间

进口自行车交通数据导入时间表

从逗号分隔的文本文件导入自行车交通数据的示例。的readtable功能表中的返回数据。显示使用前八行函数。

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 4 2015-06-24 06:00:00{“星期三”}36 6 30 2015-06-24 07:00:00{“星期三”}141 13 128

该数据具有时间戳,所以很方便地使用时间表来存储和分析数据。甲时间表类似于表,但包括与数据的行相关联的时间戳。时间戳,或行次,由下式表示约会时间要么持续时间值。约会时间持续时间是推荐的数据类型,用于分别在时间或经过的时间表示分,。

兑换bikeTbl到使用的时间表table2timetable函数。您必须使用转换函数,因为readtable返回一个表。table2timetable将第一约会时间要么持续时间变量在表中变成一个时间表的行时间。行时间是标记行的元数据。然而,当您显示一个时间表时,行时间和时间表变量将以类似的方式显示。注意,该表有5个变数,而时间表有4个变数。

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 4 2015-06-24 06:00:00{“星期三”}36 6 30 2015-06-24 07:00:00{“星期三”}141 13 128
bikeTblbikeData
名称大小字节类属性bikeData 9387x4 1412426时间表bikeTbl 9387x5 1487736表

访问时间和数据

转换一天变量分类。中的分类数据类型被设计为,由一组有限的离散值,如一周的各天的名称的数据。列出类别,使他们在一天顺序显示。使用点的名字下标来访问的变量。

bikeData.Day =分类(bikeData.Day,{'星期日',“周一”,“星期二”,...“星期三”,'星期四','星期五',“星期六”});

在一个时间表,该时间已经从数据变量分别处理。访问属性时间表显示,该行时间是时间表的第一个维度,而变量则是第二个维度。的DimensionNames属性显示两个维度的名称,而VariableNames属性显示沿第二维度的变量名。

bikeData.Properties
ANS = TimetableProperties与属性:描述: '' 的UserData:[] DimensionNames:{ '时间戳' '变量'} VariableNames:{ '日' '总计' '西行' '东行'} VariableDescriptions:{} VariableUnits:{} VariableContinuity:[] RowTimes:[9387x1日期时间]开始时间:2015年6月24日00:00:00 SAMPLERATE:NaN的时间步长:NaN的CustomProperties来:没有自定义属性被设置。使用addprop和rmprop修改CustomProperties来。

默认情况下,table2timetable分配时间戳作为第一维的名字,当转换表格的时间表,因为这是从原始表的变量名称。您可以更改尺寸的名称和其他时间表的元数据,通过属性.

将维度的名称更改为时间数据.

bikeData.Properties。DimensionNames = {“时间”“数据”};bikeData.Properties
ANS = TimetableProperties与属性:描述: '' 的UserData:[] DimensionNames:{ '时间' '数据'} VariableNames:{ '日' '总计' '西行' '东行'} VariableDescriptions:{} VariableUnits:{} VariableContinuity:[] RowTimes:[9387x1日期时间]开始时间:2015年6月24日00:00:00 SAMPLERATE:NaN的时间步长:NaN的CustomProperties来:没有自定义属性被设置。使用addprop和rmprop修改CustomProperties来。

显示时间表的前八行。

头(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 4 2015-06-24 06:00:00周三36 6 141 2015-06-24周三07:00:00 13 128人

确定天,最新的和最早的行时间之间经过数。这些变量可以通过点符号引用变量一次一个时访问。

时间= max(bikeData.Time) - min(bikeData.Time)
elapsedTime =持续时间9383:30:00
elapsedTime.Format ='d'
elapsedTime =持续时间390.98天

为了检验某一天的典型自行车数量,计算自行车总数的平均值,以及向西和向东行驶的自行车数量。

通过索引返回的数值数据作为基质成的内容bikeData使用花括号。显示前八行。使用标准表下标访问多个变量。

计数= bikeData {:,2:端};计数(1:8,:)
ANS =8×313 9 4 3 3 0 1 1 0 1 1 0 1 1 0 7 3 4 36 6 30 141 13 128

由于平均是适当的只有数字数据,可以使用VARTYPE功能选择的数值变量。VARTYPE可以比手动索引到一个表或时间表来选择变量更方便。计算方法并省略为NaN值。

数量= bikeData {: vartype ('数字')};平均(数,'omitnan')
ANS =1×349.8860 24.2002 25.6857

通过天的日期和时间,选择数据

为了确定有多少人在假期骑自行车,请查看7月4日假期的数据。按排次将2015年7月4日的时间索引到时间表中。当索引行时间时,必须精确匹配时间。可以将时间指标指定为约会时间要么持续时间值,或者作为可以转换成日期和时间字符向量。你可以作为一个数组指定多次。

索引bikeData2015年7月4日的具体数据提取日期和时间。如果只指定日期,则假定时间为午夜或00:00:00。

bikeData (“2015-07-04”:)
ans =1×4时间表时间一天总西行的往东的___________________ ________替2015-07-04就是周六8 7 1 _____
d = {“2015年7月4日08:00:00”,“2015年7月4日09:00:00”};bikeData(d,:)
ans =2×4时间表时间一天总西行桥东___________________ ________ _____ _________ _________ 2015年7月4日08:00:00星期六15 3月12日2015年7月4日09:00:00星期六21 4月17日

这将是乏味的使用这种策略,提取了整整一天。您也可以指定时间范围内没有索引的具体时间。要创建一个时间范围标为助手,使用时间范围函数。

标到使用的时间范围为7月4日一整天的时间表,2015年指定的开始时间为午夜7月4日,和结束时间为午夜7月5日在默认情况下,时间范围涵盖开始的开始时间和最多,但不包括结束时间的所有时间。画出自行车计数在一天的课程。

tr = timerange (“2015-07-04”,“2015-07-05”);jul4 = bikeData (tr,'总');头(jul4)
ans =8×1时间表时间总___________________ _____ 2015年7月4日00:00:00 8 2015年7月4日01:00:00 13 2015年7月4日02:00:00 4 2015年7月4日三点00分00秒1 2015  -07-04 4点〇〇分00秒0 2015年7月4日五时○○分00秒1 2015年7月4日6点00分00秒8 2015年7月4日7时00分零零秒16
巴(jul4.Time,jul4.Total)ylabel(的自行车数量)标题(“自行车盘点2015年7月4日”)

从图中,有更多的量在整个一天,在下午趋于平缓。由于许多企业被关闭,该地块并不在交通高峰期给出了典型的流量。后来在晚上尖峰可以归结为庆典烟花,天黑后发生。为了更深入地了解这些趋势,数据应该是比较典型天的数据。

将7月4日的数据与7月其余时间的数据进行比较。

七月= bikeData(TIMERANGE(“2015年7月1日”,“2015-08-01”),:);图(jul.Time,jul.Total)保持情节(jul4.Time jul4.Total) ylabel (“总数”)标题(“七月的自行车数量”)保持传奇(“自行车计数”,“7月4日自行车数量”)

该图显示的变化会归因于平日和周末之间的流量差异。7月4日和5的流量模式与周末的交通模式是一致的。7月5日是周一,但经常观察到作为一个度假。这些趋势可能进一步预处理和分析更紧密地进行检查。

预处理时间和数据使用时间表

时间标记的数据集通常是乱,可能含有异常或错误。时间表非常适合于解决异常和错误。

作息时间表并不一定有其行次按任何特定顺序。它可以包含不受它们的行时间排序行。作息时间表还可以包含与同一行的时间多行,虽然行可以有不同的数据值。甚至当行时间进行排序和独特的,它们可以通过不同尺寸的时间步骤不同。一个时间表,甚至可以包含的NaT要么为NaN值来指示缺少的行时间。

时间表数据类型提供了许多不同的方法来解决缺少、重复或不一致的时间。您还可以重新取样或聚合数据以创建常规的时间表。当一个时间表是有规律的,它有一个排序,独特,并具有均匀或它们之间均匀间隔的时间步长排次。

  • 要查找丢失的行时间,请使用不见了.

  • 要删除丢失的时间和数据,使用rmmissing.

  • 要按行时间对时间表排序,请使用sortrows.

  • 要使时间表与唯一和排序的行时间,使用独特调整时间.

  • 要制定一个有规律的时间表,指定一个均匀间隔的时间向量并使用调整时间.

排序按时间顺序

确定时间表是否排好。如果时间表的行时间按升序列出,则对其进行排序。

issorted (bikeData)
ANS =逻辑0

的时间表。的sortrows函数按行时间(从最早到最近的时间)对行进行排序。如果存在具有重复行时间的行,则sortrows将所有副本的输出。

bikeData = sortrows (bikeData);issorted (bikeData)
ANS =逻辑1

识别和删除缺少时间和数据

一个时间表可能在其变量或行时间中缺少数据指示器。例如,可以将缺失的数值指示为为NaN和缺失的datetime值的NaT秒。您可以分配,查找,删除,并填写与遗漏值standardizeMissing,不见了,rmmissingfillmissing函数,分别。

查找和时间表变量算缺失值。在这个例子中,遗漏值表示的情况下,当收集的数据。

missData = ismissing (bikeData);总和(missData)
ANS =1×41 3 3 3

的输出不见了是一个逻辑矩阵,大小相同的表中,识别丢失的数据值作为真实的。显示已经丢失的数据指标,任何行。

IDX =任何(missData,2);bikeData(IDX,:)
ans =3×4时间表时间一天总西行桥东___________________ ___________ _____ _________ _________ 2015年8月3日00:00:00周一楠楠NaN的2015年8月3日01:00:00周一NaN的楠楠的NaT <未定义>楠楠的NaN

ismissing (bikeData)认定失踪的时间表变量的数据而已,而不是时间。为了寻找失踪的排次,通话不见了行时间。

missTimes = ISMISSING(bikeData.Time);bikeData(missTimes,:)
ans =2×4时间表时间日总西行东行____ ___________ _____ _________ _________的NaT <未定义>的NaN楠楠的NaT星期五6 3 3

在本例中,缺失的时间或数据值表示测量错误,可以排除。使用以下命令删除包含丢失数据值和丢失行时间的表的行rmmissing.

bikeData = rmmissing (bikeData);sum (ismissing (bikeData))
ANS =1×40 0 0 0
总和(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年8月21日00:00:00星期五14 9 5 2015年8月21日00:00:00星期五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周四1715 2

前者有重复的时间但没有重复的数据,而其他的则完全重复。当时间表行包含相同的行时间和相同的数据值时,它们被认为是重复的。您可以使用独特在时间表中删除重复的行。的独特函数还根据行时间对行进行排序。

bikeData =独特(bikeData);

重复的时间,但不重复的数据行需要一些解释。检查围绕这些时间数据。

d = dup(1) + hours(-2:2);bikeData(d,:)
ans =5×4时间表时间日总西行东行总时间日总西行东行总时间日总西行东行总时间日总西行10月30日(星期四)10月25日(星期四)18日(星期五)7日(星期五)7日(星期五)4日(星期五)14日(星期五)9日(星期五)5日(星期五

在这种情况下,重复的时间可能是错误的,因为数据和周围的时间是一致的。虽然它似乎代表01:00:00,但不确定这应该是什么时候。可以对这两个时间点的数据进行累积,以解释这两个时间点的数据。

sum (bikeData {dup (1), 2:})
ANS =1×325 16 9

这只是一种可以手动完成的情况。但是,对于许多行调整时间功能可以执行该计算。累积数据使用独特的时代聚合函数。这个总和只适用于数字数据,不适用于时间表中的分类数据。使用VARTYPE识别数字变量。

VT = VARTYPE('数字');T =唯一的(bikeData.Time);numData =重新定时(bikeData(:,VT),T,'和');头(numData)
ans =8×3的时间表时间总西行东行___________________ _____ _________ _________ 2015年6月24日00:00:00 13 9 4 2015年6月24日01:00:00 3 3 0 2015年6月24日02:00:00 1 1 0 2015-06-24三时00分○○秒1 1 0 2015年6月24日四时00分00秒1 1 0 2015年6月24日5时00分00秒7 3 4 2015年6月24日六时00分00秒36 6 30 2015-06-24七点○○分00秒141 13 128

你不能总结的分类数据,但因为一个标签代表了一整天,走在每天的第一个值。您可以执行调整时间再次使用相同的时间向量进行操作,并将时间表连接在一起。

vc = vartype (“分类”);catData =调整时间(bikeData (:, vc), t,'firstvalue');bikeData = [catData,numData];bikeData(d,:)
ans =4×4的时间表2015年8月20日星期四40 30 10 2015年8月20日星期三25 18 7 2015年8月21日星期五25 16 9 2015年8月21日星期五6 5 1

检查时间间隔的均匀性

数据似乎有一个统一的时间步长一小时。要确定对于时间表中的所有行时间是否都是正确的,请使用isregular函数。isregular返回真正对于排序,均匀间隔时间(单调递增的),没有重复或丢失时间(的NaT要么为NaN)。

isregular (bikeData)
ANS =逻辑0

的输出0, 要么,表示时间表上的时间间隔不均匀。更详细地探索时间间隔。

DT = DIFF(bikeData.Time);[分钟(DT);MAX(DT)]
ANS =2 x1持续时间00:30:00 03:00:00

要将时间表放在一个固定的时间间隔上,使用调整时间要么同步并指定感兴趣的时间间隔。

确定每日自行车卷

使用。确定每天的计数调整时间函数。累计计数值的数据每天使用方法。这是适当的数字数据,但不能在时间表中的分类数据。使用VARTYPE通过数据类型来标识变量。

dayCountNum =调整时间(bikeData (:, vt),“每天”,'和');头(dayCountNum)
ans =8×3的时间表时间总西行桥东___________________ _____ _________ _________ 2015年6月24日00:00 2141 1141 1000 2015年6月25日00:00 2106 1123 983 2015年6月26日00:00:00 1748 970 778 2015-06-27 00:00:00 695 346 349 2015年6月28日00:00:00 153 83 70 2015-07-02 00:00:00 1841 978 863 2015年6月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时间表时间一天总西行的往东的___________________ _____ _____替2015-06-24就是周三周四2106 1123 983 2141 1141 1000 2015-06-25就是2015-06-26就是周五周六695 346 349 1748 970 778 2015-06-27就是2015-06-28就是周日周一1841 978 863 153 83 70 2015-06-29就是2015-06-30就是周二周三997 544 453 2170 1145 1025 2015-07-01就是

同步自行车计数和气象数据

通过比较自行车数量和天气数据来研究天气对骑车行为的影响。加载天气时间表,其中包括来自波士顿的历史天气数据,MA包括风暴事件。

加载BostonWeatherData头(weatherData)
ans =8×3的时间表时间TemperatureF湿度活动___________ ____________ ________ ____________ 01-JUL-2015 72 78 02雷雨-JUL-2015 72 60无03-JUL-2015 70 56无04-JUL-2015 67 75无05-JUL-2015 72 67无06-07月2015 74 69无07-JUL-2015 75 77 08雨-JUL-2015 79 68雨

总结在时间表的时间和变量,使用总结函数。

总结(weatherData)
RowTimes:时间:383x1 datetime值:最小01  -  07月2015年平均08-JAN-2016最大的17月-2016时间步长24:00:00变量:TemperatureF:383x1双重价值:分2位数55最大85湿度:383x1双值:最小29平均64 97个最大活动:383x1分类值:雾7冰雹1雨108雨雪4雪18雷暴12无233

使用与所述气象数据的自行车数据组合到公共时间矢量同步.你可以使用任何的记录为参考页面上的方法汇总时间表数据或者重新取样同步函数。

将来自两个时间表的数据同步到一个公共时间向量,该时间向量由它们各自的每日时间向量的交集构成。

数据=同步(DAYCOUNT,weatherData,“十字路口”);头(数据)
ans =8×7时间表时间一天总西行的往东的TemperatureF湿度事件___________________ _____ _____替_______ ________ _______ 2015-07-01就是周三997 544 453 72 78雷暴2015-07-02就是周四60 1943 1033 910 72 2015-07-03就是没有一个周五870 454 416 70 56 2015-07-04就是没有周六周日669 328 341 67 75 2015-07-05就是没有一个702 407 295 72 67 2015-07-06就是没有一个星期一1900 1029 871 74 69 2015-07-07就是没有星期二2106 1140 966 77雨2015-07-08 00:00星期三1855 984 871 79 68雨

比较自行车流量和室外温度在单独的y轴上,以检查趋势。从数据中删除周末以进行可视化。

IDX =〜isweekend(data.Time);weekdayData =数据(IDX,{“TemperatureF”,'总'});图yyaxis情节(weekdayData。时间,weekdayData.Total) ylabel(“自行车计数”)yyaxis正确的情节(weekdayData.Time weekdayData.TemperatureF) ylabel (“温度(\保监会F)”)标题("自行车数量和温度随时间的变化")XLIM([分钟(data.Time)MAX(data.Time)])

该图显示,在交通和天气数据可能会遵循类似的趋势。放大的情节。

XLIM([日期时间(“2015年11月1日”),约会时间(“2016年5月1日”)])

趋势是相似的,表明更少的人在更冷的日子里骑车。

分析每天,每周和每天的时间

检查根据不同的时间间隔,如一周中的一天和一天中的时间数据。通过确定每天的总计数varfun对变量进行分组计算。指定用的功能句柄功能和分组变量,并使用名称 - 值对优选的输出类型。

byDay = varfun (@sum bikeData,'GroupingVariables','天',...“OutputFormat”,“表”)
byDay =7×5表日团计算总数向西行往东行往星期日向西行往星期日向西行往星期日向西行往星期日向西行往星期日向西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行往西行
图巴(BYDAY {:{“sum_Westbound”,'sum_Eastbound'}})传说({“西行”,“东行”},'位置','eastoutside')xticklabels({'太阳',“星期一”,“星期二”,'星期三',“星期四”,“星期五”,“坐”})标题(“自行车按星期几计数”)

酒吧图指示交通平日较重。此外,还有在向东和向西方向上的差异。这可能表明,人们往往会采取不同的途径进入和离开这个城市的时候。另一种可能性是,有些人在一天,在另一天则立即进入。

确定每天使用的小时varfun通过组计算。

bikeData。HrOfDay =小时(bikeData.Time);byHr = varfun (@mean bikeData (: {“西行”,“东行”,'HrOfDay'}),...'GroupingVariables','HrOfDay',“OutputFormat”,“表”);头(byHr)
ans =8×4的表HrOfDay GroupCount平均西行平均东行数为0 389 5.4396 1.7686 1 389 2.7712 0.87147 2 391 1.8696 0.5896 3 391 0.7468 3 391 0.7468 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”,“mean_Eastbound”}})图例(“西行”,“东行”,'位置','eastoutside')xlabel(一天的小时)ylabel(“自行车计数”)标题(“平均数自行车按时段计数”)

有交通尖峰典型的通勤时间,上午9时左右点至下午5:00此外,向东和向西方向的发展趋势是不同的。一般情况下,西行方向是朝着周围剑桥地区居住区和朝大学。东行方向是朝向波士顿。

当天晚些时候,西行方向的交通比东行方向的交通更繁忙。这可能表明大学的时间表和交通由于餐厅在该地区。检查每周的每一天以及每天的每一小时的趋势。

byHrDay = varfun(@总和,bikeData,'GroupingVariables'{'HrOfDay','天'},...“OutputFormat”,“表”);头(byHrDay)
ans =8×6表HrOfDay日GroupCount sum_Total sum_Westbound sum_Eastbound _______ _________ __________ _________ _____________ _____________ 0星期日56 473 345 128 0周一55 202 145 57 0星期二55 297 213 84 0星期三56 374 286 88 0星期四56 436 324 112 0星期五55 442 348 94 0周六56 580 455 125 1 56星期日333 259 74

要安排时间表,使一周的天数是变量,请使用拆散函数。

hrAndDayWeek =拆散(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 5818 553 5355 5515 5731 4733 704
ylim([0 24]) xlim([0 8]) xticks(1:7) xticklabel ({:,2:end})'太阳',“星期一”,“星期二”,'星期三',“星期四”,“星期五”,“坐”})ylabel(“小时”)标题(“自行车按小时和星期天数计算”)

周一至周五的正常工作日也有类似的趋势,高峰时段是高峰时段,晚上的交通流量逐渐减少。虽然总体趋势与其他工作日相似,但周五的交易量较小。周六和周日的趋势相似,没有高峰时段,当天晚些时候交易量更大。周一至周五的尾盘趋势也类似,周五成交量减少。

分析交通高峰期的交通状况

要检查的当天走势的总体时间,由交通高峰时间分割数据。这是可能使用使用的时候一天的不同时间或单位离散化函数。例如,数据分离成用于基,AMRush,一天,PMRush,下午.然后使用varfun按组计算均值。

bikeData。HrLabel =离散化(bikeData.HrOfDay, [0、6、10、15、19、24),“分类”,...{“我”,“RushAM”,'天',“RushPM”,“点”});byHrBin = varfun (@mean bikeData (: {'总','HrLabel'}),'GroupingVariables','HrLabel',...“OutputFormat”,“表”)
byHrBin =5×3表HrLabel GroupCount mean_Total _______ __________ __________ AM 2342 3.5508 RushAM 1564 1955年94.893日45.612 RushPM 1564 98.066 PM 1955年35.198
巴(byHrBin.mean_Total)猫=类别(byHrBin.HrLabel);xticklabels(猫)称号(“平均自行车伯爵在高峰期”)

一般来说,这个地区早晚高峰的交通流量是一天中其他时间的两倍。该区域在清晨的交通流量非常小,但在傍晚和傍晚仍有相当大的交通流量,与白天早晚高峰时间外的交通流量相当。

另请参阅

||||||||||

相关话题