主要内容

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

这个例子展示了如何从传感器数据中分析自行车交通模式时间表数据容器用于组织和预处理时间戳数据。数据来自马萨诸塞州剑桥市百老汇街的传感器。剑桥市提供公众访问完整的数据集剑桥开放数据网站。

这个示例展示了如何执行各种数据清理、修改和预处理任务,例如删除缺失值和用不同的时间步骤同步带有时间戳的数据。此外,还强调了数据探索,包括使用可视化和分组计算时间表数据容器:

  • 探索每日自行车流量

  • 将自行车交通与当地天气状况进行比较

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

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

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

bikeTbl =可读(“BicycleCounts.csv”);头(bikeTbl)
时间戳日期总西行东行___________________ __________________ __________________ 2015-06-24 00:00:00{'星期三'}13 9 4 2015-06-24 01:00:00{'星期三'}3 30 2015-06-24 02: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

数据具有时间戳,因此可以方便地使用时间表来存储和分析数据。时间表类似于表,但包含与数据行相关联的时间戳。时间戳或行时间由datetime持续时间值。datetime而且持续时间分别表示时间点或流逝时间的推荐数据类型。

转换bikeTbl转换成时间表使用table2timetable函数。你必须使用转换函数,因为readtable返回一个表。table2timetable转换第一个datetime持续时间在变量表中放入行时间的时间表。行时间是标记行的元数据。但是,当您显示时间表时,行时间和时间表变量将以类似的方式显示。注意,表格有五个变量,而时间表有四个。

bikeData = table2时间表(bikeTbl);头(bikeData)
时间戳日期总西行东行___________________ __________________ __________________ 2015-06-24 00:00:00{'星期三'}13 9 4 2015-06-24 01:00:00{'星期三'}3 30 2015-06-24 02: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 1412425时间表bikeTbl 9387x5 1487735表

访问次数和数据

转换一天变量到类别。类别数据类型是为由有限的离散值集组成的数据设计的,例如一周的日期名称。列出类别,按日期顺序显示。使用点下标按名称访问变量。

bikeData。一天= categorical(bikeData.Day,{“星期天”“周一”“星期二”...“星期三”“星期四”“星期五”“星期六”});

在时间表中,时间与数据变量是分开处理的。访问属性以表明行时间是时间表的第一个维度,变量是第二个维度。的DimensionNames属性将显示两个维度的名称,而VariableNames属性显示第二个维度上的变量名称。

bikeData。属性
ans = timeableproperties with properties: Description: " UserData: [] DimensionNames: {'Timestamp' 'Variables'} VariableNames: {'Day' 'Total' '西行''东行'}variabledescription: {} VariableUnits: {} variableccontinucontinuations: [] RowTimes: [9387x1 datetime] StartTime: 2015-06-24 00:00:00 SampleRate: NaN TimeStep: NaN CustomProperties:无自定义属性设置。使用addprop和rmprop修改CustomProperties。

默认情况下,table2timetable分配时间戳作为将表转换为时间表时的第一个维度名称,因为这是来自原始表的变量名称。控件可以更改维度的名称和其他时间表元数据属性

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

bikeData.Properties.DimensionNames = {“时间”“数据”};bikeData。属性
ans = timeableproperties with properties: Description: " UserData: [] DimensionNames: {'Time' 'Data'} VariableNames: {'Day' 'Total' '西行''东行'}variabledescription: {} VariableUnits: {} variableccontinucontinuations: [] RowTimes: [9387x1 datetime] StartTime: 2015-06-24 00:00:00 SampleRate: NaN TimeStep: NaN CustomProperties:无自定义属性设置。使用addprop和rmprop修改CustomProperties。

显示时间表的前八行。

头(bikeData)
时间日期总西行东行___________________ ______________ __________________ 2015-06-24 00:00:00周三13 9 4 2015-06-24 01:00:00周三3 30 2015-06-24 02: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

确定最近的行时间和最早的行时间之间的天数。当一次引用一个变量时,可以通过点表示法访问变量。

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

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

的内容,以矩阵的形式返回数值数据bikeData使用大括号。显示前八行。使用标准表下标访问多个变量。

counts = 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”};bikeData (d,:)
ans =2×4时间表时间一天总西行的往东的  ___________________ ________ _____ _________ _________ 2015-07-04 08:00:00周六15 3 12 2015-07-04 09:00:00周六21 4 17

如果用这种方法来抽出一整天的时间,那就太乏味了。您也可以指定时间范围,而不用对特定时间进行索引。要将时间范围下标创建为帮助程序,请使用timerange函数。

使用2015年7月4日全天的时间范围下标到时间表。开始时间为7月4日午夜,结束时间为7月5日午夜。默认情况下,timerange涵盖从开始时间到结束时间的所有时间。画出一天中自行车的数量。

Tr =时间范围(“2015-07-04”“2015-07-05”);jul4 = bikeData(tr,“总”);头(jul4)
时间合计___________________ _____ 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 16 .时间合计
酒吧(jul4.Time jul4.Total) ylabel (的自行车数量)标题(“2015年7月4日清点自行车”

图中包含一个轴对象。2015年7月4日,标题为Bicycle Counts的axes对象包含一个类型为bar的对象。

从图中可以看出,全天的交易量都比较大,到了下午就趋于平稳。由于许多企业都关门了,所以该图没有显示通勤时段的典型交通状况。晚上晚些时候的峰值可以归因于天黑后燃放烟花的庆祝活动。为了更仔细地检查这些趋势,应该将数据与典型日的数据进行比较。

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

jul = bikeData(时间范围(“2015-07-01”“2015-08-01”):);情节(jul.Time jul.Total)情节(jul4.Time jul4.Total) ylabel (“总数”)标题(“七月的自行车计数”)举行传奇(“自行车数”“七月四日单车清点”

图中包含一个轴对象。标题为Bicycle Counts in July的axes对象包含2个类型为line的对象。这些对象代表自行车计数,7月4日自行车计数。

该图显示了可以归因于工作日和周末之间交通差异的变化。7月4日和5日的交通模式与周末交通模式一致。7月5日是星期一,但通常被视为假日。通过进一步的预处理和分析,可以更仔细地检查这些趋势。

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

有时间戳的数据集通常很混乱,可能包含异常或错误。时间表非常适合于解决异常和错误。

时间表不需要以任何特定的顺序排列行时间。它可以包含没有按行时间排序的行。时间表还可以包含具有相同行时间的多行,尽管行可以具有不同的数据值。即使行时间是已排序且唯一的,它们也可能因不同大小的时间步长而不同。一个时间表甚至可以包含NaT值来指示缺少的行时间。

时间表数据类型提供了许多不同的方法来解决丢失、重复或不均匀的时间。还可以重新采样或聚合数据以创建常规的时间表。当时间表是规则的时,它具有排序且唯一的行时间,并且它们之间具有均匀或均匀间隔的时间步长。

  • 要查找缺失的行时间,使用ismissing

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

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

  • 要制作具有唯一且已排序的行时间的时间表,请使用独特的而且调整时间

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

按时间顺序排序

确定时间表是否已排序。如果时间表的行时间按升序列出,则时间表是有序的。

issorted (bikeData)
ans =逻辑0

整理时间表。的sortrows函数根据行时间(从最早到最晚)对行进行排序。如果有行时间相同的行,那么sortrows将所有副本复制到输出。

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

识别并删除丢失的时间和数据

时间表的变量或行时间中可能缺少数据指示器。例如,您可以将缺少的数值指示为S,缺失datetime值为NaT属性来赋值、查找、删除和填充缺失值standardizeMissingismissingrmmissing,fillmissing函数,分别。

查找并计算时间表变量中缺失的值。在本例中,缺失值表示没有收集数据的情况。

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

的输出ismissing是一个逻辑矩阵,与表大小相同,将缺失的数据值标识为true。显示缺少数据指示器的任何行。

idx = any(misdata,2);bikeData (idx:)
ans =3×4时间表时间一天总西行的往东的  ___________________ ___________ _____ _________ _________ 2015-08-03就是周一南南南南南南2015-08-03 01:00:00 NaT <定义>南南南

ismissing (bikeData)仅查找时间表变量中丢失的数据,而不查找时间。要查找缺失的行时间,调用ismissing在行次上。

mistimes = 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 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 = unique(bikeData);

具有重复时间但数据不重复的行需要一些解释。检查这些时期的数据。

D = dup(1) +小时(-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 1 .

在这种情况下,由于数据和周围时间是一致的,可能是重复的时间错误。虽然它似乎代表01:00,但不确定这应该是什么时间。可以将数据累积起来,以说明两个时间点的数据。

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

这只是可以手动完成的一种情况。但是,对于许多行,调整时间函数可以执行此计算。方法积累特定时间的数据总和函数进行聚合。总和适用于数字数据,但不适用于时间表中的分类数据。使用vartype来确定数值变量。

Vt = vartype(“数字”);t = unique(bikeData.Time);numData = retime(bikeData(:,vt),t,“和”);头(numData)
时间总西行东行___________________ ______________ _________ 2015-06-24 00:00:00 13 9 4 2015-06-24 01:00:00 3 30 2015-06-24 02: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

不能将分类数据相加,但由于一个标签代表全天,所以请取每天的第一个值。您可以执行调整时间使用相同的时间向量再次操作,并将时间表连接在一起。

Vc = vartype(“分类”);catData = retime(bikeData(:,vc),t,“firstvalue”);bikeData = [catData,numData];bikeData (d,:)
ans =4×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周五25 16 9 2015-08-21 02:00:00周五6 5 1 .

检查时间间隔的一致性

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

isregular (bikeData)
ans =逻辑0

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

dt = diff(bikeData.Time);[min (dt);马克斯(dt)]
ans =2 x1持续时间00:30:00 03:00:00

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

确定每日自行车量

确定每天的计数使用调整时间函数。方法累积每天的计数数据总和方法。这适用于数值数据,但不适用于时间表中的分类数据。使用vartype按数据类型标识变量。

dayCountNum = retime(bikeData(:,vt),“每天”“和”);头(dayCountNum)
时间总西行东行___________________ ______________ _________ 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 = retime(bikeData(:,vc),“每天”“firstvalue”);dayCount = [dayCountCat,dayCountNum];头(dayCount)
时间日期总西行东行___________________ ______________ __________________ 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

同步自行车数量和天气数据

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

负载BostonWeatherData头(weatherData)
时间温度f湿度事件___________ ____________ ________ ____________ 2015年7月01日72 78雷暴事件2015年7月02日72 60无2015年7月03日70 56无2015年7月04日67 75无2015年7月05日72 67无2015年7月06日74 69无2015年7月07日75 77雨2015年7月08日79 68雨

要总结时间表中的时间和变量,请使用总结函数。

总结(weatherData)
RowTimes: Time: 383x1 datetime值:Min 01- july -2015中位数08- january -2016最大17- july 2016 TimeStep 24:00:00变量:TemperatureF: 383x1 double值:Min 2中位数55 Max 85湿度:383x1 double值:Min 29中位数64 Max 97事件:383x1分类值:雾7冰雹1雨108雨雪4雪18雷暴12无233

将自行车数据与天气数据结合为一个常用的时间向量同步.的参考页上记录的任何方法,都可以重新采样或聚合时间表数据同步函数。

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

数据=同步(dayCount,weatherData,“十字路口”);头(数据)
时间日期总西向东向温度f湿度事件___________________ ______________ __________________ ____________ ________ ____________ 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 702 407 295 72 67无2015-07-06周一00:00:00 1900 1029 871 74 69无周二2106 1140 966 75 77雨2015-07-08 00: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 (“温度(\circ F)”)标题(“自行车数量和温度随时间变化”xlim([min(data.Time)) max(data.Time)])

图中包含一个轴对象。标题为Bicycle Counts and Temperature Over Time的axis对象包含2个类型为line的对象。

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

xlim ([datetime (“2015-11-01”)、日期时间(“2016-05-01”)))

图中包含一个轴对象。标题为Bicycle Counts and Temperature Over Time的axis对象包含2个类型为line的对象。

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

按星期几和时间进行分析

根据不同的间隔来检查数据,比如星期几和一天中的某个时间。确定每天使用的总计数varfun对变量进行分组计算。指定总和函数的函数句柄和使用名值对的分组变量和首选输出类型。

byDay = varfun(@sum,bikeData,“GroupingVariables”“天”...“OutputFormat”“表”
byDay =7×5表Day 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 ({“太阳”“我的”“星期二”“结婚”“星期四”“星期五”“坐”})标题(“按星期数自行车”

图中包含一个轴对象。标题为Bicycle Count by Day of Week的axes对象包含2个类型为bar的对象。这些对象分别代表西行和东行。

条形图显示平日交通比较繁忙。另外,东行和西行也有所不同。这可能表明人们在进出城市时倾向于选择不同的路线。另一种可能性是,有些人一天进入,另一天返回。

确定一天的时间和使用varfun按组计算。

bikeData。HrOfDay =小时(bikeData.Time);byHr = varfun(@mean,bikeData(:,{“西行”“往东的”“HrOfDay”}),...“GroupingVariables”“HrOfDay”“OutputFormat”“表”);头(byHr)
HrOfDay GroupCount mean_西向mean_东向_______ __________ ______________ ______________ 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”“mean_Eastbound”}})传说(“西行”“往东的”“位置”“eastoutside”)包含(“一天中的一小时”) ylabel (“自行车数”)标题(“按小时计算平均自行车数量”

图中包含一个轴对象。标题为Mean Bicycle Count by Hour of Day的axis对象包含2个类型为bar的对象。这些对象分别代表西行和东行。

在典型的通勤时间,上午9点和下午5点左右会出现交通高峰。此外,东行和西行的趋势也不同。一般来说,西行方向是朝着剑桥地区周围的居民区和大学。东行方向是波士顿。

当天晚些时候,西行方向的交通比东行方向的交通更拥挤。这可能表明了大学的时间表和该地区餐馆的交通状况。按星期的一天和一天的小时来检查趋势。

byHrDay = varfun(@sum,bikeData,“GroupingVariables”, {“HrOfDay”“天”},...“OutputFormat”“表”);头(byHrDay)
HrOfDay Day GroupCount sum_Total sum_西行sum_东行_______ _________ __________ _________ _____________ _____________ 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

若要安排时间表,以便将星期几作为变量,请使用unstack函数。

hrAndDayWeek = unstack(byHrDay(:,{“HrOfDay”“天”“sum_Total”}),“sum_Total”“天”);头(hrAndDayWeek)
hrfday星期日星期一星期二星期三星期四星期五星期六_______ ______ ______ _______ _________ ________ ______ ________ 0 473 202 297 374 436 442 580 1 333 81 147 168 173 183 332 2 198 77 68 93 141 254 3 86 41 43 44 50 61 80 4 51 81 117 101 108 80 60 5 105 353 407 419 381 340 128 6 275 1750 1867 2066 1927 1625 351 7 553 5355 5515 5818 5731 4733 704
ribbon(hrAndDayWeek. hrofday,hrAndDayWeek{:,2:end}) ylim([0 24]) xlim([0 8]) xticks(1:7) xticklabels({“太阳”“我的”“星期二”“结婚”“星期四”“星期五”“坐”}) ylabel (“小时”)标题(“按小时和星期数自行车”

图中包含一个轴对象。标题为Bicycle Count by Hour and Day of Week的axis对象包含7个类型为surface的对象。

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

分析交通高峰时段的交通状况

要查看一天中时间的总体趋势,请按高峰时段划分数据。方法可以使用一天中的不同时间或时间单位离散化函数。例如,将数据分组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 94.893 Day 1955 45.612 RushPM 1564 98.066 PM 1955 35.198
bar(byHrBin.mean_Total) cats = categories(byHrBin.HrLabel);xticklabels(猫)标题(“高峰时段平均自行车数量”

图中包含一个轴对象。标题为Mean Bicycle Count During Rush Hours的axes对象包含一个类型为bar的对象。

总的来说,这个地区在早晚高峰时段的车流量是一天中其他时段的两倍左右。这一地区在清晨车辆很少,但在傍晚和傍晚仍有大量车辆,与早晚高峰时段以外的一天相当。

另请参阅

||||||||||

相关的话题