在时空大数据中,出租车GPS数据的清洗和分析是至关重要的。数据集中的错误和异常情况普遍存在,缺少清洗步骤,可能导致错误的分析结果。本文将介绍出租车GPS数据清洗的技术要点,以及基于清洗后数据的分析方法。首先,出租车GPS数据的核心字段包括载客状态(OpenStatus)。理想状态下,OpenStatus序列应呈现连续0序列和连续1序列依次出现。然而,实际数据中可能存在异常情况,如连续0序列中突然出现1,或连续1序列中突然出现0。这些异常数据可能是由采集设备突发异常造成的,需要在数据清洗中予以剔除。剔除异常数据的方法是找到载客状态与前后数据均不同的连续数据,并将其剔除。清洗后的数据可以进行进一步的分析,包括OD信息提取、轨迹段数据生成和地图匹配等。1. OD信息提取:通过定义上下车时点的标准,提取出符合标准特征的时点数据,整理成OD数据。OD信息能直观反映乘客的上车、下车需求,是道路交通规划和城市布局研究的重要手段。2. 轨迹段数据生成:将GPS点数据处理成轨迹段数据,即将两个时间临近的有效采样点连接起来形成有向轨迹段。基于轨迹段数据,可以计算载客里程、车速等,进一步分析油耗、排放等情况。3. 地图匹配:将GPS轨迹数据与实际道路地图进行匹配,实现车辆空间属性与GIS信息的对应。地图匹配有两种思路:一种是点线近邻匹配,计算效率高但无法考虑完整路径;另一种是路网匹配,考虑车辆完整出行路径,但参数调优复杂,匹配成功率较低。总之,出租车GPS数据的清洗和分析是交通大数据分析的重要组成部分。通过掌握数据清洗的技术要点和分析方法,可以为道路交通规划和城市布局提供有力的数据支持。感兴趣的同学可以关注立方数据学院的B站账号或报名《交通大数据分析实战》课程,深入学习相关知识。出租车GPS数据清洗和分析技术要点出租车GPS数据的清洗和分析是时空大数据分析的关键环节。数据集中普遍存在错误和异常,需要在分析前进行清洗。本文介绍了数据清洗的技术要点,包括识别和剔除异常数据,以及基于清洗后数据的分析方法,如OD信息提取、轨迹段数据生成和地图匹配。通过掌握这些技术,可以为交通规划和城市布局提供有力支持。
在前面两篇文章中,我们分别介绍了出租车GPS数据有哪些应用,出租车GPS数据如何获取,本篇我们带来出租车GPS数据的第三个内容——出租车GPS数据清洗和分析的技术要点!首先我们先来看看出租车GPS数据的清洗!
在时空大数据中,可以说基本上不存在完美的数据。数据集的各类错误异常情况普遍存在,而且很可能在意想不到的地方出现。因此,针对异常数据的清洗是在数据的正式处理分析之前必须做的重要步骤。缺少这一步骤,在后续的处理中很可能产生错误的分析结果。在出租车GPS数据中也不可避免地存在一定的数据异常。这里我们以数据中存在的异常载客状态为例,介绍数据异常的情况以及数据清洗的思路。
先来回顾一下出租车GPS数据的核心字段:
数据中的载客状态(OpenStatus)字段表征了出租车载客状态。当值为1时,出租车有乘客,为载客状态;反之则为空载状态。如果我们将所有的车辆数据读取在一个表中,将数据按车牌号和时间排序。那么在理想状态下,一辆出租车正常的OpenStatus序列应该如图1所示,连续0序列和连续1序列依次出现。
当OpenStatus的值由A时刻的0变为B时刻的1时,代表乘客在A时刻与B时刻中间的某一时刻上车,运营开始。同样,当OpenStatus的值由C时刻的1变为D时刻的0时,代表乘客在C时刻与D时刻中间的某一时刻下车,运营结束。由于出租车的采样频率约为15s一次,我们可以近似地认为相邻采样点在时间和空间上十分相近,A、B两个时刻都可以看成是乘客的上车点;同样地,C时刻和D时刻都可以看成是下车点。为了数据处理的方便,我们统一把A时刻看成是乘客的上车点,C时刻看成是乘客的下车点。
但是,OpenStatus字段中可能会出现异常情况(如图2所示):
情况一,在连续0的序列中,突然出现一个1。如果用我们刚才判断乘客上下车处理逻辑,异常数据会导致乘客上下车点连续的两条记录,如果我们没有剔除,后续的出行OD分析中则会表现为在同一地点上下车。
情况二,在连续1的序列中,突然出现一个0。我们不排除某些出租车司机生意火爆,上一个订单结束后来不及休息就可以马不停蹄地开始下一单。但考虑到GPS数据15s的采样间隔,要在15-30s的时间内实现一个乘客付钱、下车、另一个乘客上车、关上车门、开始打表的一系列过程,对两个乘客来说可能是难度系数较高的操作,可以认为这是一种小概率事件。
这种两种情况的产生都极有可能是采集设备的突发异常造成的,在数据清洗中,应将这两种情况都予以剔除。
如何剔除上面提到的两种数据异常呢?我们可以很容易地说出这两种异常都具有的共同特征:
异常数据的载客状态与前一条数据和后一条数据的值均不同。
这三条数据必须是同一辆出租车的连续数据。
也就是,程序只需要找到符合上述特征的数据,并将其剔除即可。如果将上面的条件总结成为程勋中判断条件则为:
将上面的这四个条件用和(&)连接起来,所判断的即为异常数据,而将异常数据剔除,就完成了清洗。
数据清洗好后,就可以来做分析了,我们总结了基于出租车GPS数据常做的三个分析内容,分别为:
我们依次来看一下!
OD(Origin-destination)信息是时空大数据中的重要信息,其中O代表出行的出发点,D代表出行的目的地。OD提取的目的就是识别乘客出行的起讫点,能直观反应出乘客的上车、下车需求,常作为道路交通规划和城市布局等领域的研究手段。
要怎样从大量的GPS信息中提取出每个出租车订单的起点和终点呢?
由于我们拿到的是一大堆出租车GPS的散点时空数据,散点时间间隔大概在15s(取决于GPS的采样频率),因此要提取出乘客出行的OD信息,首先要定义乘客的上车时点、下车时点选取标准,然后基于标准将上、下车时点数据筛选出来,最后整理成最终的OD数据。
1.上、下车时点选取标准定义
如果把出租车GPS数据按照载客状态(OpenStatus)区分颜色后在空间中画出来,得到的就是如图4所示的出租车轨迹点数据:蓝色是空载,红色是载客,把数据点连接起来想象成一段段由两个点形成的轨迹段。
我们定义上车时点其特征是这一时刻载客状态(OpenStatus)是0(蓝色),下一个时刻为1(红色),下车时点其特征是这一时刻载客状态(OpenStatus)是1(红色),下一个时刻为0(蓝色)。
2.上、下车时点数据提取
有了上下车时点的标准后,就要提取出符合标准特征的时点数据。由于其特征需要这一时刻和下一时刻的载客状态(OpenStatus)数据,所以可以考虑这样实现(以python实现为例说明思路):
①清洗后的数据按车辆ID(VehicleNum)、时间(Stime)进行排序;
②用python的shift方法,把数据表整体往上移一行;
③将原表与上移后的表拼接起来,在一行中得到了同一车辆当前时刻和下一时刻的GPS信息,如图5所示样例;
④按以下条件提取出乘客上车、下车的时点数据:
3.整理OD数据
上一步中我们提取出了同一车辆前后时刻发生载客状态变化的数据,得到了每辆出租车的乘客上车时点、下车时点GPS数据,相当于车辆的订单数据,一个车有多个订单,很多的上车信息、下车信息,但同一个订单的上车、下车信息不在同一行上,因此我们还需要整理一下,把同一订单的上、下车时点信息处理到同一行上。
我们用上一步中类似的思路,借助python的shift方法,把提取出来的订单数据整体往上移一行,和移动前的订单数据拼在一起后,得到了如图6所示数据,按以下条件进行筛选就能得到在一行上的订单数据:
最后筛选保留车辆ID(VehicleNum)、上下车的时间(Stime、Stime1)和位置(Lng、Lat、Lng1、Lat1)字段,整理得到最终的OD信息。
在OD提取中,我们只分析了出租车订单的起点和终点信息,并没有刻画车的行程轨迹。要想刻画出租车的行程轨迹,就得把每一个有效的采样位置数据都用上,理论上采样频率越高,就越逼近车辆的真实行驶路径。
同OD提取类似,我们拿到的是一大堆的GPS点数据,假设蓝色圆圈是空载状态,红色是载客状态,就可以做出轨迹点的分布,然后将GPS点数据处理成轨迹段数据,也就是将两个时间临近的有效采样点连接起来行成有向轨迹段,如图7所示。基于轨迹段数据,可以进一步结合载客状态(OpenStatus)提取出载客的轨迹段,从而扩展计算每个载客轨迹段的载客里程、车速,有了里程和速度后,还能分析油耗、排放等情况。
那么,如何把GPS点数据处理成轨迹段数据呢?提取思路整体来看与OD提取类似。
我们的目标是把GPS点转成段,每一段以相邻时间的两个GPS点作为信息。我们一起来看一下初始数据结构和目标数据结构的样式:
要将点数据转换成段数据,就需要把当前时点的GPS数据和下一时点的数据放到同一行上来,这样每一行数据表示的是一个轨迹段。
处理思路和OD提取一样:
最后来介绍一下地图匹配,地图匹配指的是将GPS轨迹数据与实际的道路地图进行匹配,实现车辆空间属性与GIS信息的对应,可以得到车辆各时间点经过的道路信息,进而分析道路流量、道路车速计算等,为研究道路交通状态提供支撑。
地图匹配通常来说有两种思路:
1.不考虑完整路径近邻匹配
第一种思路比较简单,就是把GPS点匹配到最近的线上,也就是点与线之间的近邻匹配,比如出租车GPS点在某些道路线的两边,那我们要把这个点匹配到最近的道路线上去。这种思路可以用KDTree近邻匹配来实现,它是一个常用的点匹配线的快速算法,这里推荐一个python上非常好用的时空大数据处理的第三方包——transbigdata包(介绍文档:https://transbigdata.readthedocs.io/zh_CN/latest/),下面以用这个工具为例介绍一下数据处理的思路:
Python调用transbigdata包中的ckdnearest_line函数,transbigdata.ckdnearest_line(gdfA,gdfB),将点数据和先数据作为参数输入后,就能直接得到匹配的结果表。
这种方法优点是计算效率高,因为KDTree是考虑了计算效率后的点线近邻匹配优化算法,它会以最快的效率去应对点线匹配问题。
缺点就是没法考虑完整的路径。真实世界的出租车辆走的是连续的道路,点线近邻匹配算法只基于单个点来考虑最近的道路,没有考虑车前后道路的关系,有可能在实际道路中前面的路没法转到后面的路上来。
2.考虑完整路径的匹配
如果要考虑车辆完整出行路径,就得用第二种思路:路网匹配,比如python包中的LeuvenMapMatching算法,这个算法会考虑整条行车轨迹在路网上是否符合逻辑,前后路段必须是接得上的才能匹配出来。
优点是得到的结果是可推测的完整路径;缺点是这个包的算法参数很多,调参复杂,匹配成功率较低,特别是当数据点太过稀疏的时候很可能匹配不上,计算时间会非常长。
1.出租车GPS数据分析内容的视频版本
对于上面讲到的出租车GPS数据分析内容感兴趣,想要进一步学习的同学,可以移步立方数据学院B站账号(账号名称为:立方数据学院)学习该部分的视频版本!
2.《交通大数据分析实战》课程
如果大家想要学习出租车GPS数据、共享单车数据、地铁IC刷卡数据、公交GPS数据的分析方法,可以报名立方数据学院推出的《交通大数据分析实战》课程,课程详情请搜索公众号“立方数据学社课程服务”!
以上内容由58汽车提供。如有任何买车、用车、养车、玩车相关问题,欢迎在下方表单填写您的信息,我们将第一时间与您联系,为您提供快捷、实用、全面的解决方案。
原创文章,作者:58汽车,如若转载,请注明出处:https://car.58.com/7015604/