共计 5799 个字符,预计需要花费 15 分钟才能阅读完成。
原文链接:http://tecdat.cn/?p=24121
此示例阐明如何应用从传感器取得的数据分析共享单车交通模式,来预处理带工夫戳的数据。数据来自传感器。
此示例展现了如何执行各种数据清理、调整和预处理工作,例如删除缺失值和同步具备不同工夫步长的工夫戳数据。此外,突出显示数据摸索,包含应用timetable
数据容器的可视化和分组计算:
- 摸索日常自行车交通
- 将自行车交通与当地天气条件进行比拟
- 剖析一周中不同天数和一天中不同工夫的自行车流量
将自行车交通数据导入时间表
从逗号分隔的文本文件中导入自行车交通数据示例。应用该head
函数显示前八行。
head(bkTb)
数据有工夫戳,方便使用时间表来存储和剖析数据。时间表相似于表,但包含与数据行关联的工夫戳。工夫戳或行工夫由datetime
或 duration
值示意。datetime
和 duration
别离是用于示意工夫点或通过工夫的举荐数据类型。
转换 为时间表。您必须应用转换函数,因为 readtable
返回一个表。行工夫是标记行的元数据。然而,当您显示时间表时,行工夫和时间表变量以相似的形式显示。请留神,该表有五个变量,而时间表有四个。
tabe2tmeabe(biel);
拜访工夫和数据
将Day
变量转换 为分类变量。分类数据类型专为蕴含无限离散值集的数据而设计,例如一周中的日期名称。列出类别,以便它们按天程序显示。应用点下标按名称拜访变量。
在时间表中,工夫与数据变量离开解决。拜访 Properties
时间表的 显示行工夫是时间表的第一维,变量是第二维。该 DimensionNames
属性显示两个维度的名称,而该 VariableNames
属性显示沿第二个维度的变量的名称。
bkDta.Poetis
默认状况下,在将表转换为时间表时 table2timetable
指定 Timestamp
为第一个维度名称,因为这是原始表中的变量名称。您能够通过 Properties
.
将维度的名称更改为 Time
和 Data
。
DmesiNams = {'Time' 'Data'};
显示时间表的前八行。
确定最晚和最早的行工夫之间通过的天数。一次援用一个变量时,能够通过点表示法拜访这些变量。
lpsTie = max(bkeDa.Tme) - min(bkData.me)
要查看特定日期的典型自行车数量,请计算自行车总数以及向西和向东行驶的数量的平均值。
通过对bikeData
应用大括号的内容进行索引,将数字数据作为矩阵返回。显示前八行。应用标准表下标拜访多个变量。
cs(1:8,)
因为均值仅实用于数值数据,因而您能够应用该 vartype
函数来抉择数值变量。vartype
比手动索引到表或时间表以抉择变量更不便。计算平均值并疏忽 NaN
值。
mean(cots,'omitn')
按日期和工夫抉择数据
要确定假期期间有多少人骑自行车,请查看 7 月 4 日假期的数据。按 7 月 4 日的行工夫索引时间表。当您索引行工夫时,必须齐全匹配工夫。能够将工夫索引指定为 datetime
或 duration
值,或者指定为能够转换为日期和工夫的字符向量。能够屡次指定为数组。
bikeData
应用特定日期和工夫进行索引 以提取 7 月 4 日的数据。如果仅指定日期,则假设工夫为午夜或 00:00:00。
d = {'208:00:00','09:00:00'};
bieDta(d,:)
应用这种策略来提取一整天会很麻烦。您还能够指定工夫范畴而不对特定工夫进行索引。创立工夫范畴下标,应用 timerange
函数。
应用 7 月 4 日一整天的工夫范畴在时间表中下标。指定开始工夫为 7 月 4 日午夜,完结工夫为 7 月 5 日午夜。默认状况下,timerange
涵盖从开始工夫开始的所有工夫和直到但不包含完结工夫。绘制一天中的自行车数量。
jul4 = bikeData(tr,'Total');
hea(jl4)
bar(4Tie,jl4otl)
从图中能够看出,全天成交量更大,下午趋于平稳。因为许多企业都关门了,所以图中没有显示通勤工夫的典型交通状况。早晨晚些时候的峰值可归因于在早晨的庆贺流动。为了更认真地查看这些趋势,应将数据与典型日子的数据进行比拟。
将 7 月 4 日的数据与 7 月其余工夫的数据进行比拟。
plot(jul.Time,ju.Toal)
hold o
plot(jl.Tme,ju4.otal)
该图显示了工作日和周末之间交通差别的变动。7 月 4 日和 5 日的交通模式与周末交通模式统一。通过进一步的预处理和剖析,能够更认真地查看这些趋势。
预处理工夫和数据应用 timetable
带工夫戳的数据集通常很凌乱,可能蕴含异样或谬误。时间表非常适合解决异样和谬误。
时间表的行工夫不用按任何特定顺序排列。它能够蕴含未按行工夫排序的行。时间表还能够蕴含具备雷同行工夫的多行,只管这些行能够具备不同的数据值。即便行工夫已排序且惟一,它们也可能因不同大小的工夫步长而不同。时间表甚至能够蕴含 NaT
或 NaN
值来批示缺失的行工夫。
该 timetable
数据类型提供了许多不同的形式解决失踪,复制或不平均倍。您还能够从新采样或汇总数据以创立 _定期_ 时间表。当时间表是规定的时,它的行工夫是通过排序且惟一的,并且在它们之间具备对立或平均区间的工夫步长。
- 要查找缺失的行工夫,请应用
ismissing
. - 要删除缺失的工夫和数据,请应用
rmmissing
. - 要按行工夫对时间表进行排序,请应用
sortrows
。 - 要生成具备惟一且已排序的行工夫的时间表,请应用
unique
和retime
。 - 要生成惯例时间表,请指定平均区间的工夫向量并应用
retime
。
按工夫程序排序
确定时间表是否已排序。如果时间表的行工夫按升序列出,则该时间表已排序。
issorted(bikeData)
对时间表进行排序。该 sortrows
函数按行工夫对行进行排序,从最早到最晚。如果存在具备反复行工夫的行,则将 sortrows
所有反复项复制到输入。
bikeData = sortrows(bikeData);
issorted(bikeData)
辨认和删除缺失的工夫和数据
时间表的变量或其行工夫中可能短少数据批示符。例如,您能够将缺失的数值示意为 NaN
s,将缺失的日期工夫值示意为 NaT
s。您能够调配,查找,删除,并用填充缺失值 standardizeMissing
,ismissing
,rmmissing
,和 fillmissing
性能。
查找并计算时间表变量中的缺失值。在此示例中,缺失值示意未收集数据的状况。
ismssng(bieDa);
sum(isata)
来自的输入 ismissing
是一个 logical
矩阵,与表的大小雷同,将缺失的数据值标识为真。显示短少数据批示符的任何行。
any(misDta,2);
仅查找时间表变量中的缺失数据,而不是工夫。要查找缺失的行工夫,请调用 ismissing
工夫。
ismisig(bikDa.time);
在本例中,缺失工夫或数据值示意测量谬误,能够排除。应用 删除表中蕴含缺失数据值和缺失行工夫的行 rmmissing
。
rmising(bieDaa);
miissing(ieDta.Time)
删除反复的工夫和数据
确定是否有反复的工夫和 / 或反复的数据行。您可能心愿排除反复项,因为这些也能够被视为测量误差。通过查找排序工夫之间的差别恰好为零的地位来辨认反复工夫。
idx = diff(biDat.Tme) == 0;
dup = biDaime(idx)
反复三次,11 月 19 日反复两次。查看与反复次数相干的数据。
第一个有反复的次数但没有反复的数据,而其余的则齐全反复。当时间表行在行中蕴含雷同的行工夫和雷同的数据值时,它们被视为反复。您能够应用 unique
删除时间表中的反复行。该 unique
函数还按行工夫对行进行排序。
bkeata = unique(biketa);
具备反复工夫但非反复数据的行须要一些解释。查看那些工夫前后的数据。
在这种状况下,因为数据和四周工夫是统一的,因而反复工夫可能是谬误的。尽管它仿佛代表 01:00:00,但不确定这应该是什么工夫。能够累积数据以阐明两个工夫点的数据。
sum(Dta{dup(1),2:end})
这只是一种能够手动实现的状况。然而,对于许多行,该 retime
函数能够执行此计算。应用sum
聚合函数对惟一次数的数据进行累加。总和实用于数字数据,但不适用于时间表中的分类数据。应用 vartype
标识数值变量。
您不能对分类数据求和,但因为一个标签代表一整天,因而取每一天的第一个值。您能够retime
应用雷同的工夫向量再次执行 操作并将时间表连贯在一起。
cata = retme(ikat(:,vc,t,'frtvle');
查看工夫区间的平均性
数据仿佛具备一小时的对立工夫步长。要确定时间表中的所有行工夫是否都如此,应用该 isregular
函数。isregular
返回 true
有序的、平均区间的工夫(枯燥递增),没有反复或失落的工夫(NaT
或 NaN
)。
0
或 的输入 false
表明时间表中的工夫区间不平均。更具体地摸索工夫区间。
\[min(dt); max(dt)\]
要将时间表置于固定工夫区间,请应用 retime
或 synchronize
并指定感兴趣的工夫区间。
确定每日自行车量
应用该retime
函数确定每天的计数。应用该sum
办法累积每天的计数数据。这实用于数值数据,但不适用于时间表中的分类数据。用于 vartype
按数据类型标识变量。
如上所述,您能够retime
再次执行 操作以应用适当的办法示意分类数据并将时间表连贯在一起。
dantat = rtime(bkeat(:,vc),'dily','firtau');
比拟自行车数量和天气数据
通过将自行车数量与天气数据进行比拟,查看天气对骑行行为的影响。加载天气时间表,其中包含来自历史天气数据,包含暴风雨事件。
要汇总时间表中的工夫和变量,请应用 summary
函数。
summary(wetherta)
应用 将自行车数据与天气数据组合成一个工夫向量 synchronize
。您能够应用synchronize
从新采样或聚合时间表数据。
将两个时间表中的数据同步到一个公共工夫向量,该工夫向量是从它们各自的每日工夫向量的交加构建的。
syhrone(dayout,wethrDta,'inseon';
比拟独自 y 轴上的自行车交通数量和室外温度来查看趋势。从数据中删除周末进行可视化。
yyaxis left
plot(wekata.Time, ekdaaa.Tol)
yyaxis right
该图显示交通和天气数据可能遵循相似的趋势。
趋势类似,表明在凛冽的日子里骑自行车的人更少。
按星期几和一天中的工夫剖析
依据不同的工夫区间(例如星期几和一天中的工夫)检查数据。应用varfun
对变量执行分组计算来确定每天的总计数。sum
应用名称 - 值对指定 具备函数句柄和分组变量和首选输入类型的函数。
bDa = varn(suket,'GpigVrles','Day',...
'Otpuoat''tale')
fgue
bar(by{:,{'smestund',sumEbound'}})
条形图示意工作日的交通量较大。此外,东行和西行方向也有所不同。这可能表明人们在进出城市时往往会抉择不同的路线。另一种可能是,有些人一天进去,另一天回来。
确定一天中的小时 varfun
用于按组计算。
varn(@mean,bketa(:,{'Wesbund','Estund','HfDay'}),...
'GrunVabes','fDay','Outputrmat','te');
bar(byr})
在典型的通勤工夫(上午 9:00 和下午 5:00 左右)呈现交通顶峰。此外,东行和西行方向之间的趋势不同。一般来说,西行方向是朝向地区四周的住宅区和大学。东行方向是朝向市中心。
与东行方向相比,当天晚些时候西行方向的交通量更大。因为该地区的餐馆,这可能表明大学的时间表和交通。按星期几和一天中的小时查看趋势。
byra = varfun(@mikaa,'Grpiaibes',{'HOfDay','ay'},...
'OuutFort','tbl')
要安顿时间表以便将一周中的几天作为变量,请应用该 unstack
函数。
hrnaWk = unstack(byD(:,{HrOfa','ay','u_Toal'),smTota','Da');
ribbon(hrnaW)
周一至周五的失常工作日也有相似的趋势,顶峰时段呈现顶峰,早晨交通逐步缩小。周五的交易量较少,但总体趋势与其余工作日类似。周六和周日的趋势彼此类似,没有顶峰时段,但在当天晚些时候成交量更大。周一至周五的深夜趋势也类似,周五成交量较少。
剖析顶峰时段的交通
要查看一天中的总体工夫趋势,请按顶峰工夫拆分数据。应用discretize
能够应用一天中的不同工夫或工夫单位。例如,将数据分成 AM
、AMRush
、Day
、PMRush
、的组 PM
。而后用于 varfun
按组计算平均值。
brBn = varfun(@mean,beData:{'Toa','HLbel'})','Hbel',...'Otpuorat',le)
bar(brBn.en)
一般来说,与一天中的其余工夫相比,该区域在黄昏和早顶峰时段的交通量大概是该区域的两倍。该区域凌晨车流量很少,但黄昏和深夜的车流量依然很大,堪比早晚顶峰时段以外的白天。
最受欢迎的见解
1. R 语言动态图可视化:如何、创立具备精美动画的图
2.TABLEAU 的骑行路线天文数据可视化
3. 用数据通知你出租车资源配置是否正当
4.R 语言 GGMAP 空间可视化机动车交通事故地图
5. 用 R 语言制作交互式图表和地图
6. 基于出租车 GPS 轨迹数据的钻研:出租车行程的数据分析
7. R 语言动静可视化:制作历史寰球平均温度的累积动静折线图动画 gif 视频图
8. 把握出租车的数据脉搏
9. 共享单车大数据报告