车联网数据分析(一):用户出行行为分析

“数据 - 数字时代的石油”

“数据是新的石油”

在网络上、媒体上我们经常看到有人这样宣扬。

问题是:我们能够像提炼石油一样从数据中提炼出价值来吗?

笔者多年从事汽车及出行领域的信息技术(IT)及产品研发,在这里就车联网数据分析的一些实践做个分享,看看能够从这些数据“石油”中提炼点什么,抛砖引玉。

下面的分析是针对单个车辆的车联网数据进行分析,而不是群体车辆的行为分析。

笔者计划从下面几个方面进行探讨(具体的会根据实际情况和各方面的反馈来调整):

        - 用户出行行为分析

        - 用户驾驶行为分析

        - 燃油车车辆动态行为分析

        - 电动车电池及充放电行为分析

        - 能耗分析

本篇分享一下用户出行行为的分析过程。


车联网数据有多大?

先看看车联网数据到底有多大,各家OEM和后装解决方案的数据采集信号、采集频率都不同,也没有行业统一标准。这里举一个例子,让大家粗略感受一下。

        - 假设数据采集频率为1 Hz(所有信号每秒采样1次),家用汽车平均每天使用2个小时(燃油车引擎启动就开始采集数据),一年就采集了365 * 2 * 3600 = 2.628 * 106次。

        - 如果每次采集的数据量为10 KB,那么,一辆车一年就产生大约26.3 GB 的数据。

        - 一年一百万辆装备有车联网的车将会产生26.3 GB * 106= 26.3 PB。(2018年中国有6家OEM年销量过百万)。

        - 丰田、大众、雷诺日产2018年全球销量均超过1000万。假设这几家OEM在未来数年内销量均保持这一水平,并且从今年开始实现100%新车车联网,每辆车平均寿命6年,那么6年后这些OEM存量车联网的车就是6000万,每家OEM每年将新增数据:26.3 GB * 60,000,000 = 1578 PB = 1.578 EB/年.

这么大的数据量,采集、传输、存储,如果以现在的技术和市场价格,成本是十分惊人的。所以,笔者大胆猜测,大多数OEM和物流公司在实际运营中都会降低采样频率,或者减少采样信号,或者以事件驱动,而不是以固定频率采样数据,以节省成本,尽管,技术上没有问题。


用于分析的车联网数据集

对上述目标的分析,笔者使用的车联网数据集来自于一辆车联网实验性乘用轿车。数据源本身就是脱敏的,去除了位置信息、用户信息、车辆等静态信息,只有车辆的动态数据。时间跨度为:2017年6月至8月。

采样频率高于1Hz,也就是平均每秒钟采样不止一次。原则上,采样频率越高越好,这样保留了高频信息,可以更加深刻地分析车辆的动态行为。

这几年热得一塌糊涂的无人驾驶,主要传感器的采样频率都不低于10 Hz。为什么采样频率要求这么高呢?比如,在高速公路上以120公里/小时的时速行驶,那么每秒钟行驶的距离是:120000/3600 = 33.3 米/秒。也就是说,在0.1秒的时间里(对应10 Hz),车辆已经行驶了3.33 米,这个距离足以将车辆驶离车道并酿成事故。


数据预处理

有了原始车联网数据(通常以CSV文件格式保存),笔者要对它进行预处理,为后续的数据探索、可视化,以及模型分析准备原料。

笔者使用的工具全程都是 R语言。

如何处理?要不忘初心、牢记使命:本部分数据分析的目的是 – 用户出行行为分析


步骤一:选择数据项

基于该目的,我们所需要的数据项其实很少,只需要下面三项数据就可以了(是不是太简单了点?是的,就是这么简单。就像,都是小麦,光面条就可以做出很多种,更不要说各种面包,还有数不清的 dumpling了):

        - 时间戳– 每条记录发生的日期和时间

        - 里程表

        - 引擎转速– 判断车辆状态

如果有明确的、可靠的信号用于判断车辆状态,那么不建议使用“引擎转速”了。笔者认为这完全取决于实际的数据质量和内容。如果各位大神有更好的解决方案,欢迎分享和交流哦。

把其他的数据项暂时摈弃,只保留这三项,现在可以进行下一步了。


步骤二:清洗、整理、聚合数据

如果上述数据中,不同信号的采集频率不一样,那么,合并(或者叫融合,信号之间的融合)数据是非常重要的一步。合并可以发生在清洗、整理、聚合中间,或之前、之后的某个时间,具体要根据实际数据的情况来决定,很难一概而论。

首先了解选择的数据集的summary信息,可以快速知道哪些字段有数据缺失,有多少缺失。如果有缺失值,需要分析这些数据对我们的分析目的会有什么影响。如果没有什么影响,就删掉它们。

其次,时间戳是以字符串的形式存储的,包括日期和时间,笔者用的数据集精确到毫秒。这样不利于后续的计算和分析。需要把它转化成便于计算和分析的数据。毫秒的精度对我们分析用户出行行为来说没有意义,所以,由时间戳生成年、月、日、时、分、秒,这样,后续可以按照这些时间尺度进行聚合。

最后,按秒对数据进行聚合。选择的数据集高于1Hz的采样频率,但是实际原始数据往往不会100%严格按照相同的采样频率生成数据,有时1秒内有多条记录,有时会有缺失,看起来不是完全连续的。如果是车速等数据,聚合时采用平均值。里程数据是个累计值,所以取每秒内的最后一个数值,为了计算简单,都用平均值也可以,因为1秒内里程数据很难有大的变化。

经过这些步骤后,数据就规整了很多,可以进行下一步了。


步骤三:分割数据

将数据分割成一个个单独的驾驶行程,这样可以方便后面的出行行为分析了。

如何判断一个驾驶行程的开始和结束呢?

对于燃油车,一般来说,发动机启动后,才开始采集车联网数据,所以,没有数据就可以假定为车子是熄火的。这里用的数据就是燃油车的数据。

对于纯电动车(BEV),充电的全过程都会采集数据。

对于插电混动(PHEV)车,判断的依据要更加复杂一些,这个问题以后再讨论。

需要注意的是,真实数据通常不可能是理想的,每一步都要仔细检查,如果有疑问,或者不合理,找出那些引起可疑的数据,仔细分析原因,再根据发现的原因进行调整。这是一个不断试验、不断迭代的过程。

完成技术上的分割后,需要合并、过滤,得到相对合理的“有意义的”驾驶行程,在这个示例中,笔者得到了142次驾驶行程。也就是说,从2017年6月至8月的时间里,开了142次车。

处理完这些之后,我们就可以下锅做菜了,看看能不能做出点有意思的东东来吧。


用户出行行为分析

分析的过程通常是由浅入深、由全局到局部。

如果数据足够多,建议先从大的时间尺度开始,比如从年开始,到月、日、小时,再到单个驾驶行程。最后,看看这些驾驶行程之间的关系,行程和各个时间维度之间的关系。一步步深挖。

首先,对整个数据集要有一个总体的认识,这个可以通过统计下面表格中的指标来完成。列出来的指标只是用于示例,具体需要统计哪些值应该根据分析的目的、业务场景、实际的原始数据集等。还是那句话:具体情况,具体分析。

其次,我们看一看该用户每月驾驶(出行)的频次,和旅行的总里程(公里数)。如图1所示,7月份开车的次数和行驶总里程最多,差不多是6月和8月的两倍。

从每月开车的次数来看,7月份开了70次左右,6月份半个月就有接近40次,而8月份仅有34次开车记录。那我们很想知道8月份的开车次数为什么减少了那么多呢?


图1:按月驾驶统计


统计一下每天驾驶的次数,如图2所示。结果有些让人意外,6月份从14日至24日(11天),7月份从10至29日(共18天,中间缺了2天),8月份从5至12日,27至31日(总共13天),其他的日期没有车联网数据。接近一半的日期里没有车联网数据。

是什么原因导致的呢?是那些天用户完全没有开车吗?还是由于某种原因,数据没有传输上来呢?

回答这个问题并不难。

我们还是从查看原始数据着手,里程表是不断递增的。比对最后一条记录的里程表和第一条记录的里程表数据得知,两者的差值是5646公里。回想前面表格里统计的“总驾驶里程”为2666公里,这说明在那些缺失数据的日期里,车辆仍然驾驶了接近3000 公里。

这也提醒分析人员,如果再对这批数据按月份进行分析,已经失去了意义。

因为这批原始数据来自于一辆车联网实验性的乘用轿车,我们不能要求太高。但是对我们实践我们的研究方法依然有效。

图2:按天驾驶次数统计


再前进一步,从日期的角度看看用户驾驶/出行的特征。如图3所示,共统计了三个指标的分布:

        1. 左上– 每天驾驶次数的分布,中值是3次,最多有7次。说明该用户开车比较频繁。

        2. 右上– 每天行驶距离的分布,中值是63公里左右,最多一天行驶261公里。

        3. 左下和右下两张图– 每天驾驶时长的分布,中值在90分钟处,说明该用户每天大约开车一个半小时。用频率图从另一个角度可以看到驾驶时长的分布特征。

图3:按日驾驶特征分布


在实际工作的时候,分析人员根据实际情况选择该用什么样的图表来更好地展现。


现在分析单次驾驶的行为特征。先从最简单的统计特征,单次驾驶距离和驾驶时长,入手。如图4所示,

        - 该用户开车的距离多数在10公里以内,或者在30-50公里范围内。

        - 每次开车多数分布在5-15分钟内,或者在30-60分钟内。

无论是距离还是时间长度都有两个峰值,是不是有某种背后的原因?又一次把笔者的胃口吊起来了。

图4:单次驾驶距离和时长的分布


下面我们看一看单次驾驶距离的散点图,如图5所示,每一次驾驶的距离在图中表示为一个小圆点,从6月14日开始的第一次驾驶到8月31日记录的第142次驾驶,总共142个点。

根据前面的距离分布图(图4)得到的启示,我们从下图中可以观察到几个特征:

        1. 有一个超过200公里的行程,鹤立鸡群。其余的都没有超过100公里的。

        2. 在15公里以下有很多点行驶距离十分接近。

        3. 在30-50公里也有很多点的行驶距离十分接近。

图5:单次驾驶的距离– 散点图


我们似乎找到了前述疑问的答案,但是咱们既然是做数据分析,就要显得更加“科学”和“客观”,让数据来说话,而不是凭肉眼观察和猜测,否则,怎么显示出分析师的“逼格”来呢?

如何让数据说话呢?聚类分析是个好的工具,尤其是这里只有一个变量,K均值的方法就可以了,简单易行。

一开始,我们并不能确切地知道(假装不知道,这样才能“客观”)该分成几个聚类簇,一个做法是:从K = 1 到n(n 的取值要足够大,以保证最佳簇个数不大于n)都做一次聚类分析,然后比较各个K值下的Betweens/TSS(簇之间的总平方和 / 总离差平方和),该比值越大,聚类效果越好。一般来说,K值越大,该比值也会越大。极端的情况是,比如,有100个点,分成100个聚类簇,这样当然没有意义。所以这里需要一个主观判断,通常在比值差不多的情况下,应该选择最小的K值作为最佳聚类簇。

在这个例子中,我取n = 10,因为直觉告诉我,最多3或4个聚类簇就够了,在此基础上放宽一到两倍作为n的取值应该足够了。

直觉会告诉我们可能有几个聚类,但是不要完全相信直觉(否则,就不“客观”了),还是应该让数据说话。

这里多啰嗦几句:在做数据分析的时候,直觉很重要,但是笔者建议更多地应该把直觉当成线索、孕育新的想法,就像是侦探破案一样。如果有一些小伙伴一起探索、探讨就更好了,可以时不时地问问:“元芳,你怎么看?”。

好了,把K从1到10循环做聚类分析,将这10个K值对应的Betweens/TSS显示在图上,如图6所示。可以清楚地看到,K = 3 和 K = 4 时,结果非常接近,但是比 K = 2 时显著改善,所以,笔者选定 K = 3 作为最佳聚类簇。

图6:单次驾驶距离的聚类分析结果比较


按照K = 3做聚类分析,重新绘制图5:单次驾驶的距离– 散点图,同时用不同的颜色区别聚类簇,如图7所示。

从图中,可以清晰地看出簇1(红色)只有一个点,就是那个单次驾驶距离最大的那个点,超过200公里,再一次鲜艳地鹤立鸡群。

图7:按聚类簇显示的单次驾驶距离的散点图


既然簇1(红色)只有一个点,明显是一个特例,就不再深挖了(真相是挖不下去了)。

下面对簇2和簇3分别作进一步的分析。

对簇2(绿色)的驾驶次数,分别按照一天24小时、星期、单次驾驶距离,和单次驾驶时长,作频率分布图,如图8所示。从图中可以观察到下面几个特点:

        1. 大部分驾驶行为发生在下午至晚上,以下午3点至5点最多。

        2. 周日至周六都有,但是以周二最少。又是一个线索,不是吗?值得进一步深挖。限于篇幅,就不再赘述了(累了,歇歇吧)。

        3. 驾驶距离大部分不超过10公里。

        4. 开车时间大部分不超过20分钟。

好像是一个生活比较有规律的人啊。

图8:簇2驾驶次数频率分布图– 小时、星期、驾驶距离、驾驶时长


同样,对簇3(蓝色)也做同样的分析,如图9所示,仔细观察这些分布图,可以发现下面几个特点:

        1. 驾驶的时间十分有规律,大部分发生在早上10 - 11点,和晚上7 - 9点。

        2. 周一至周5特别显著,周日完全没有。

        3. 驾驶距离大部分出现在30 - 36公里之间。

        4. 开车时间大约在30 - 60分钟之间。

从这些特征不难推测,簇3反映的是工作日上下班的驾驶行为。而家里到公司的距离大约30多公里,单程需要开车30分钟至1小时。交通状况还是不错的哦。

平均来看,上班时间大约早上10点,下班时间晚上8点。是不是和某一类熟悉的人群的特征比较吻合啊?有一种似曾相识的感觉。

结合簇2的特征,工作之余,主要在方圆10公里的范围内活动。簇1告诉我们,3个月内仅有一次远门。哈哈,形象更加丰满啦!

一不小心又自嗨了,初当程序员时的毛病,这么多年还是没有完全改掉。别忘了,这3个月里还有一半的日子没有数据呢。

图9:簇3驾驶次数频率分布图– 小时、星期、驾驶距离、驾驶时长


至此,要演示的用户出行行为的分析告一段落了。笔者用到的数据仅有三项:

        - 时间戳

        - 里程表

        - 引擎转速(仅用于推算车辆状态)。

如果辅之以更多的、“相关的”数据字段,我们可以做更加深入的、多个角度的分析。

在这个过程中,如何提出问题、从数据中发现线索、不放弃任何一个疑点,然后像个侦探一样,一步一步地挖掘。坦率地说,这个感觉真的不错。


后续,笔者还会就车联网数据在其他方面的分析,进一步分享,敬请期待!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343