天天看点

「共享单车数据专题」共享单车数据分析的技术要点

作者:立方数据学社

在前面两篇文章中,我们分别介绍了共享单车数据有哪些应用,共享单车数据如何获取,本篇我们带来共享单车数据的第三个内容——共享单车数据分析的技术要点!

从共享单车数据中可以挖掘出两部分信息:骑行与停车,这两者正好可以类比于出租车数据中的载客与空载状态()。由于共享单车只在开关锁时产生数据,它的数据特征与出租车GPS数据存在一定差异,如图 1 所示。

「共享单车数据专题」共享单车数据分析的技术要点

图 1 一辆单车一天的数据

顾一下第一篇中介绍的共享单车数据的两种类型:开关锁记录和订单记录。

开关锁记录的关键字段:

  • 单车ID
  • 经纬度
  • 时间
  • 锁状态

订单记录的关键字段:

  • 单车ID
  • 开锁经纬度
  • 开锁时间
  • 关锁经纬度
  • 关锁时间

观察图1,并结合两类数据的关键字段,分别对比共享单车两类记录数据和出租车GPS数据,可以有以下发现:

(1)共享单车开关锁数据和出租车GPS数据对比① 共享单车的开关锁数据采集仅在开锁与关锁时发生,一条数据同时包含停车与骑行两种行为的开始与结束信息,每次开锁的数据代表着上一段停车行为的结束与下一段骑行行为的开始,每次关锁的数据则代表着上一段骑车行为的结束与下一段停车行为的开始。

② 共享单车的开关锁数据在观测时段的最开始与最末尾都没有数据。第一条数据通常出现在该单车的第一次骑行时,而实际上在观测时段开始到第一次骑行之间,单车处于停放状态,这部分的停车。如果某一辆单车在观测时间内没有骑行的活动,则它并不会在数据集中留下记录。

(2)共享单车订单数据和出租车GPS数据对比共享单车订单数据每一行都包含了单车开始骑行和结束骑行的时空信息,因此同出租车GPS数据提取出的订单信息类似,可以直观地得到出行者的OD信息。

因此,如果拿到的是共享单车的订单数据,那么就可以直接基于订单的时空信息进行出行链的分析,但若拿到的是开关锁数据,则需要进行单车出行链的重构,以达到直观反映单车一天内的出行链的目的。下面我们以开关锁数据为例,来介绍出行链重构的思路和步骤。

01 出行链重构目标

如果把开关锁数据画在三维坐标轴上,如图2左图所示,x、y轴是经纬度,z轴是时间,红点代表关锁,蓝点代表开锁,我们的目标是将这些开关锁的散点数据抽取成如右图所示的出行轨迹,比如单车在A时刻开锁、B时刻关锁,相当于在AB之间是出行段,类似地,在C时刻关锁、D时刻开锁,相当于CD之间是停车段。

因此,只要识别出共享单车的时空轨迹,也就是出行链,就可以分别提取出出行段、停车段,进而做进一步的分析。出行段可以通过计算骑行次数、骑行距离、骑行时长等特征做单车出行需求的分析;停车段也很关键,停车相当于占用了很多公共用地,可以通过停车位置、停车时长等做单车停车占用公共用地的分析、停车需求分析,还可以通过停车时可能发生的位置变化来分析调度需求等。

「共享单车数据专题」共享单车数据分析的技术要点

图 2 共享单车订单数据点转化成时空轨迹示意图

02 出行链重构操作

既然构建出行链后能做那么多分析,那么我们该如何基于开停车的散点数据,重构出行轨迹呢?下面我们就介绍下把开关锁数据重构成出行链的操作思路。

「共享单车数据专题」共享单车数据分析的技术要点

图 3 单车的开关锁数据示例图

首先,我们可以先提取出一辆车的数据来观察一下(图3),按时间顺序排序后,我们可以观察到以下一些情况:

  • 锁状态(LOCK_STATUS)是0、1、0、1交替变化的,也就是只有单车锁状态发生改变的时候,才会有一条记录。
  • 锁状态(LOCK_STATUS)的0、1所代表的含义是未知的,数据拿来的时候很可能也没有带字段介绍,需要通过数据情况推断出0、1所代表的含义。由于一般骑单车不会骑好几个小时,一般也就骑个5~10分钟,所以从图3相邻数据时间间隔(11:49:24 LOCK_STATUS为1,16:10:53 LOCK_STATUS为0,从1到0相隔4小时多)的分析中,可以推断出开车是0,锁车是1。
  • 数据上还能观察到1(锁车)和下一个0(开车)之间的地理位置发生了变化,也就是停车的时候单车位置发生了改变,这种改变可能是两种原因造成的:

① GPS定位不准确,单车实际位置没有变化;

② 车被人为移动了,比如说调度的情况,一般共享单车公司发现某个地方单车数量过多但又没人骑,另一个地方没有单车,但是有很多人需要骑,可能就会派一辆大卡车把这些车搬过来,也就是调度的情况。

如果把共享单车一天的数据画成一个时间轴(图3),蓝点表示锁状态(LOCK_STATUS)为0的时候,红点表示锁状态(LOCK_STATUS)为1的时候。看这样的时间轴,很难说哪一段是出行,哪一段是停车。所以需要进行出行链的重构。

重构出行链概括来说分为两步(图4):第一步,在每个状态开始前一秒加入一条相反状态的构造的数据记录;第二步,在一天的开始(00:00)与结束(24:00)时刻分别加入一条构造的数据记录。

「共享单车数据专题」共享单车数据分析的技术要点

图 4 单车出现链重构步骤示意图

下面针对每一步简单展开讨论下:

(1)在每个状态开始前一秒加入一条相反状态为什么要这样做呢?因为原始的数据只有状态变化点,无法识别出出行段,要想构造出行段,就需在每一个数据点前面打一个点,这个点是一个相反的状态,这样子就能构造出骑行段和停车段(图4)。

(2)在一天开始、结束时刻加入记录我们还要在一天的0点和24点对每一辆车加入一条记录,0点加上的记录需要和每天的第一条记录锁状态相同,24点加上的记录需要和每天的最后一条记录锁状态相同。这样就能重构出一个完整的单车出行链。

重构出行链后,不仅可以知道这辆车一天里面哪些时段停车,哪些时段骑行,既可以挖掘骑行的特征,分析骑行次数、骑行距离、骑行时长等,也可以挖掘停车特征分析停车需求、停车时长以及通过停车时的位置变化分析调度需求。

03 出行链重构思路总结

出行链重构分为两个步骤:

(1)在原始数据的每一条记录的前一秒加入与其相反状态的记录原始数据的每一记录都包括了两层信息:上一个状态的结束与下一个状态的开始。因此,在每一条记录前一秒加入相反状态的记录可以帮助我们更清晰地把握骑行与停车阶段的开始与结束信息。

(2)在上一个步骤的基础上,对每一辆单车在观测时间段的开始与结束时间都插入记录对开始时间,插入记录的状态、位置与单车的第一条记录相同;对结束时间,插入记录的状态、位置与单车的最后一条记录相同。这一步骤能够帮助我们标识出单车在观测时间最开始与最末尾部分的状态。

出行链重构的思路如图5所示。经过重构的出行链,我们可以发现开锁与关锁的状态都是两条相同记录连续出现,一条标识着这个状态的开始,一条则标识这个状态的结束。从重构出的出行链中,我们更容易能区分出这辆单车在什么时候是骑行状态,什么时候是停车状态。

「共享单车数据专题」共享单车数据分析的技术要点

图 5 出行链重构思路

需要注意的是,出行链重构步骤会增加一定的数据量与计算量,在实际数据处理中,出行链重构也不是必须的步骤。直接从原始数据中也可以提取出单车的骑行与停车信息。这里出行链重构的主要作用是帮助我们更清晰地观察单车一天中的骑行与停车状态状态变化,理清楚逻辑,确保后续代码无误。

03 进阶学习

1.共享单车数据分析内容的视频版本

对于上面讲到的共享单车数据分析内容感兴趣,想要进一步学习的同学,可以移步立方数据学院B站账号(账号名称为:立方数据学院)学习该部分的视频版本!

2.《交通大数据分析实战》课程如果大家想要学习出租车GPS数据、共享单车数据、地铁IC刷卡数据、公交GPS数据的分析方法,可以报名立方数据学院推出的《交通大数据分析实战》课程,课程详情点关注“立方数据学社”公众号了解!