spark如何进行聚类可视化_基于Spark的出租车轨迹处理与可视化平台
由于城市化进程加剧以及汽车数量增加, 城市交通问题日益严重[, 通过分析各种空间数据解决交通问题是当前研究的热点. 出租车提供广泛且灵活的交通运输服务, 是城市交通的重要组成部分. 出租车轨迹数据记录了城市道路与居民的流动信息, 对出租车轨迹数据的挖掘分析有助于城市智慧交通[的建设, 有利于制定合理的城市交通政策、合理配置城市公共交通、缓解城市交通拥堵.
随着经济进步与空间信息技术的发展, 出租车轨迹数据的规模呈指数级增长. 为了存储和分析生成的大量数据, 需要一种新的架构来处理出租车轨迹数据. 大数据技术的发展, 为快速、有效地处理大规模空间数据提供了可能. Spark是Hadoop生态系统中新兴的杰出分布式计算框架, 具有高容错性和高可扩展性. 利用Spark框架的并行存储、并行计算与内存计算的优势, 可以精确有效地分析和研究城市交通问题, 实现大数据驱动的智慧交通.
高效益的驾驶员拥有丰富的驾驶经验与运营策略[, 获取高效益的出租车轨迹数据对研究更有意义. 本文提出一种效益指数模型用于对出租车效益进行量化排序, 提取高效益出租车作为研究对象. 在此基础上设计了一个基于Spark的出租车轨迹处理与可视化平台, 可以快捷有效地对高效益出租车的运营模式与载客策略进行可视分析. 该平台开发对出租车轨迹数据处理和可视化具有以下贡献:
(1)将Spark与GeoTools (Java GIS工具包)相结合实现对出租车轨迹数据的快速处理与空间分析计算;
(2)设计了基于蜂窝形格网与DBSCAN算法的出租车载客热点可视化方法, 通过时间约束, 多视角展示载客热点的变化趋势;
(3)提出基于缓冲区的交互式轨迹查询算法, 该算法通过时间与空间约束, 将符合查询条件的轨迹数据信息可视化.
1 相关工作
1.1 出租车轨迹研究
基于位置的服务(Location Based Services, LBS)的快速发展, 通过出租车轨迹数据能够很好的反映出出租车的运营规律、城市交通状况以及居民出行特征. 不同领域的研究人员对出租车轨迹进行了各种研究.
在出租车运营分析方面, Weng JC等[提出基于浮动车数据的出租车运营分析模型(包括载客里程、里程利用率、驾驶员工作强度等参数). Liu L等[通过分析出租车GPS数据了解出租车的运营模式, 对驾驶员进行分类, 揭示收益高的出租车的运营时空特征. Zhang DQ等[通过挖掘出租车GPS轨迹, 从寻客策略、载客运营策略以及服务区域偏好三个角度研究出租车服务策略.
在出租车热点分析方面, Liu DY等[开发了SmartAdP可视化分析系统, 利用出租车轨迹数据用于确定广告牌放置的热点区域. Chang HW等[预测与时间、天气和出租车位置相关的载客需求分布, 通过K-means、层次聚类和DBSCAN进行热点分析, 改善出租车运营管理. B-Planner系统[使用出租车轨迹数据提取乘客上下车热点用于杭州市夜间公交路线规划.
在可视分析方面, Wang ZC等[设计了一个基于GPS轨迹的城市交通拥堵的交互式可视化系统, 用于探索和分析城市的交通状况. 牛丹丹等[通过处理出租车轨迹数据, 从时间、空间维度对乘客出行特征进行可视分析. Huang XK等[提出的可视化方法TrajGraph, 通过图结构存储和可视化出租车轨迹记录的交通信息, 研究城市的交通模式.
1.2 大数据技术应用研究
大数据技术的应用, 可以快速、有效地处理大规模空间数据. 近些年出现了许多处理空间数据的分布式计算框架, 如基于Hadoop扩展的SpatialHadoop[与Hadoop-GIS[, 基于Spark扩展的GeoSpark[、LocationSpark[与Simba[等. 但Hadoop MapReduce计算模型会将中间结果输出到磁盘上, 产生大量I/O操作, 难以实现大规模空间数据处理. Spark框架的性能要优于Hadoop框架, 通过使用RDD, 其基于内存的并行计算架构性能更优.
在城市交通领域, 谭亮等[基于Spark Streaming和Kafka构建了一个实时交通数据处理平台, 处理双基基站采集的数据, 用于解决城市交通问题. 段宗涛等[通过Spark框架挖掘出租车乘客出行特征. Mao B等[基于Spark处理、挖掘时空数据, 提出了一种基于八叉树的时空数据三维体绘制可视化框架, 对纽约市2009–2015年的出租车轨迹数据进行了可视化.
针对上述研究成果, 本文结合Spark框架的优越计算性能设计开发出租车轨迹处理与可视化平台.
2 框架与模型研究
2.1 Spark分布式计算框架
Spark是一个类Hadoop的开源分布式计算框架, 扩展了广泛使用的MapReduce计算模型, 用于构建大型的、低延迟的数据分析应用程序. 其主要特点是能够在内存中进行读写计算, 提升计算性能.
弹性分布式数据集(Resilient Distributed Dataset, RDD)是Spark中的基本数据抽象, 代表一个只读、可分区、可并行计算的数据集合. RDD可以全部或部分地缓存在内存中, 在多次计算中重用; 通过实时分发任务到所有节点, 可以保证计算的并行性. RDD支持两种类型的操作算子: 转化操作与行动操作. 转化操作会由一个RDD计算生成一个新的RDD, 行动操作会对RDD计算出一个结果并将结果输出Spark系统.
Spark SQL是Spark用来处理结构化数据的一个模块, 在数据存储上采用列存的方式优化数据存储[, 可以更便捷地处理出租车轨迹数据. Spark SQL的核心编程抽象为DataFrame, 一种以RDD为基础的分布式数据集, 记录有数据的结构信息. 同时提供SQL语句对数据进行操作与管理, 以DataFrame形式返回结果.
2.2 效益指数模型
当前城市中频繁出现的出租车拒载、空载等现象, 导致出租车运营成本增加, 城市公共交通运行效率低下, 乘客出行需求得不到满足. 针对这一问题, 如何筛选出高效益的出租车满足本文研究的数据需求, 是当前所要解决的问题.
Qin GY等[发现缩短搜索时间并提高行驶速度有利于增加收入, 孙飞等[发现出租车单次里程长对应着单程收入高, 但若要效益高同时还要考虑寻客时间内的开销. 本文将单次载客轨迹与相邻前一段寻客轨迹相结合作为一次有效行程, 建立了出租车效益指数模型. 效益指数F是关于出租车的单次行程收入I、单次里程利用率K1与单次寻客时长T0 (min)的函数, 有利于对出租车效益进行量化排序:
$ F = f\left( {I,{K^1},{T^0}} \right) $
(1)
出租车的单次行程收入I根据某城市的出租车计价标准确定:
$ I = {V^S} + \left( {{D^1} - {D^S}} \right) \times V,{D^1} \ge {D^S} $
(2)
其中, VS表示出租车起步价格; V表示出租车超里程单价(RMB/km); DS表示出租车的起步里程(km); D1表示出租车载客里程(km).
里程利用率K1是指载客里程与现实里程之比:
$ {K^1} = \frac{{{D^1}}}{{{D^1} + {D^0}}} $
(3)
其中, D0表示出租车寻客里程(km).
一般情况下, 寻客时间越长, 认为此次载客的效率越低, 本文采用寻客时长的倒数即T0对效益计算加以时间控制. 可以得到效益指数的计算公式:
$ \begin{aligned} F& = I \times {K^1} \times \frac{1}{{{T^0}}} \\ & = \frac{{{D^1} \times \left[ {{V^S} + \left( {{D^1} - {D^S}} \right) \times V} \right]}}{{{T^0} \times \left( {{D^1} + {D^0}} \right)}},\;\;{D^1} \ge {D^S} \end{aligned} $
(4)
计算某辆出租车一天的效益指数如下所示:
$\left\{ \begin{aligned} &\sum\limits_{i = 1}^n {{F_i}} = \sum\limits_{i = 1}^n {\frac{{D_i^1 \times \left[ {{V^S} + \left( {D_i^1 - {D^S}} \right) \times V} \right]}}{{T_i^0 \times \left( {D_i^1 + D_i^0} \right)}}} \\ & D_i^1 \ge {D^S},\;i = 1,2,\cdots,n \end{aligned}\right. $
(5)
其中, n表示当天该出租车的载客次数.
3 平台设计与实现
3.1 平台架构
由于浏览器软件具有高扩展、易维护、不需要安装特定软件等优势, 本文采用B/S软件技术架构进行平台构建, 开发了一个集大数据处理、可视化和交互于一体的“出租车轨迹处理与可视化平台”, 平台架构如
图 1
Fig. 1
图 1 平台概览图
在大数据处理阶段, 平台基于Spark框架处理原始数据, 经过数据预处理及效益指数模型计算后提取出高效益出租车轨迹数据, 计算高效益出租车特征数据作为后续可视化的数据源.
可视化阶段由3部分组成: (1)运营特性分析将高效益出租车特征数据进行统计计算以图表形式进行可视化; (2)载客热点可视化结合地图数据与载客点数据, 允许用户使用蜂窝形格网与DBSCAN算法对不同时段高效益出租车载客点进行热点可视化; (3)对于轨迹查询与可视化, 提取高效益出租车单条载客轨迹的轨迹相关因子并在地图上进行轨迹可视化.
3.2 基于Spark的轨迹大数据处理
本文利用Spark RDD和Spark SQL处理出租车轨迹大数据, 处理流程如
数据读取与封装, 将某一天的出租车轨迹数据以字符串形式读取至RDD中, 构建Taxi类进行封装, 扩展RDD为TaxiRDD, 将初始RDD转化为TaxiRDD.
数据预处理, 将TaxiRDD导入建立的Spark SQL数据表中, Spark SQL会根据TaxiRDD自动分配字段名称及数据类型, 使用SQL语句对数据进行预处理, 包括剔除异常数据、数据去重等操作.
高效益出租车提取, 将预处理完成的DataFrame导出为TaxiRDD, 运用Spark提供的转化算子计算出租车效益指数并排序, 提取高效益出租车并输出高效益出租车轨迹数据TaxiRDD>. 计算过程如算法1所示.
图 2
Fig. 2
图 2 Spark处理流程图
算法1. 高效益出租车提取
输入: 预处理TaxiRDD.
输出: 高效益出租车轨迹TaxiRDD>.
1. 使用mapToPair()转化为键值对TaxiRDD;
2. 使用groupByKey()对出租车进行分组, 再根据载客状态对轨迹进行分组;
3. 计算一次载客的效益指数;
4. 统计每辆出租车的效益指数;
5. 使用mapToPair()互换键值得到TaxiRDD, 并使用sortByKey()排序;
6. 使用take()提取高效益出租车;
7. 输出高效益出租车轨迹TaxiRDD>.
可视化特征数据集计算, 对高效益出租车轨迹数据TaxiRDD>中轨迹点计算得到高效益出租车可视化特征数据集. 数据集保存至本地文件夹作为后续可视分析的数据源.
3.3 运营特性分析功能
对高效益出租车的运营特性进行分析, 可以为广大出租车驾驶员的运营策略提供帮助. 运营特性主要包括高效益出租车每小时载客量分布、单次寻客时长分布、单次载客时长分布、单次载客距离分布等特性. 平台提供日期范围选择, 允许查询任意日期范围的高效益出租车运营特性. 利用Spark读取选中日期的可视化特征数据集, 进行统计计算, 计算结果以JSON格式传输至前端, 使用ECharts[在浏览器界面实现交互式图表展示.
3.4 载客热点可视化功能
本功能提供日期范围选择与时间范围选择, 支持蜂窝形格网与DBSCAN空间聚类算法计算高效益出租车载客热点.
格网结构有利于分析大型空间数据集, 而蜂窝结构是覆盖二维平面的最佳拓扑结构, 六边形也是边数最多的无缝多边形. 本文采用蜂窝结构的格网可视化载客点分布状况, 实现过程如下:
(1)利用ArcGIS构建蜂窝结构图层;
(2)利用GeoTools将蜂窝单元读取为若干Polygon几何对象, 将载客点读取为若干Point几何对象;
(3)使用Spark对Polygon与Point进行“Contains”空间拓扑运算, 计算结果生成shp文件(
(4)将shp文件使用ArcGIS Server进行发布, 即可在浏览器上进行可视化(
图 3
Fig. 3
图 3 蜂窝形格网载客热点可视化
但基于网格的载客热点计算在一定程度上降低了热点计算的准确性. 故在此基础上实现了DBSCAN算法计算载客热点. DBSCAN是基于密度的空间聚类算法, 能够将具有高密度的区域划分为簇, 并可在带有噪声的空间数据中发现任意形状的聚类. 设定合适的Eps邻域和最小包含点数MinPts进行聚类是DBSCAN算法的核心. 根据文献[
本文在Spark中实现了基于KD-Tree最邻近搜索的DBSCAN空间聚类算法, 用于改进由于数据量较大造成聚类时间长的问题. 设定参数Eps: 50 m, MinPts: 20, 计算得到聚类结果后, 将聚类结果中的每个类中心作为核心聚类点, 进行逆地址解析.
3.5 轨迹查询与可视化功能
城市交通中, 不同区域间通常存在多条可达路径, 各路径蕴含丰富的信息[, 可用于城市道路交通分析. 本功能提供某一天的轨迹查询请求, 同时设置空间约束, 提出了基于缓冲区的交互式轨迹查询算法. 计算过程如算法2所示.
算法2. 基于缓冲区的交互式轨迹查询算法
输入: 日期data, 起点坐标oPoint, 起点缓冲区半径oR, 终点坐标dPoint, 终点缓冲区半径dR.
输出: 结果轨迹集合TD, 轨迹相关因子.
1. 根据data读取高效益出租车载客轨迹数据T至Spark;
2. 根据oPoint, oR构建起点缓冲区oBuffer;
3. 对T的轨迹起点进行oBuffer缓冲区运算;
4. 筛选出轨迹集合TO;
5. 根据dPoint, dR构建终点缓冲区dBuffer;
6. 对TO的轨迹终点进行dBuffer缓冲区运算;
7. 筛选出轨迹集合TD作为结果轨迹集合;
8. 提取出TD中轨迹的轨迹相关因子(起始时间、运营时长、距离、O/D点位置).
采用多视图协同交互的方法, 当鼠标悬停在地图上某一区域, 单击并拖动鼠标在地图上绘制O/D点缓冲区(O/D点坐标与缓冲区距离. 将控制面板中文本框内容作为输入数据. 查询结果使用天地图JavaScript API进行轨迹可视化.
4 实验结果与分析
4.1 数据描述
实验用到的数据集为成都市2014年8月17日至23日共13 000辆出租车的运营轨迹, 每天的数据记录时间为6:00–24:00, 数据总量为18.3 GB. 数据集以天为单位并采用txt格式进行存储, 每个轨迹点包含以下属性: 出租车编号, 纬度, 经度, 时间, 载客状态. 载客状态是出租车是否载有乘客的标签(1表示载客, 0表示空驶).
经过效益指数模型计算, 选取Top 20%的出租车作为高效益出租车共计807 267条轨迹, 提取高效益出租车可视化特征数据集, 并据此分析高效益出租车的运营规律.
4.2 高效益出租车运营特性分析
对7天的高效益出租车进行运营特性分析. 如
图 4
Fig. 4
图 4 查询缓冲区绘制
图 5
Fig. 5
图 5 高效益出租车每小时载客量分布图(8月18–22日为工作日, 8月17日与23日为休息日)
将7天的数据作均值计算, 得到高效益出租车的寻客时长、载客时长以及载客距离的分析结果.
图 6
Fig. 6
图 6 高效益出租车单次寻客时长分布图
图 7
Fig. 7
图 7 高效益出租车单次载客时长分布图
图 8
Fig. 8
图 8 高效益出租车单次载客距离分布图
4.3 高效益出租车载客热点可视化分析
蜂窝形格网可视化可以宏观地展现城市不同时间的载客热点变化趋势与空间分布趋势, 便于观察高效益出租车载客分布的动态过程. DBSCAN空间聚类算法可视化可以发现高效益出租车的核心聚类点, 更细致地得到高效益出租车载客中心位置.
Ra)、旅游景点(Rb)、春熙路商业区(Rd)、火车站等都属于客流集中区域. 此外, 载客热点还包括大学周边(Rc)、休闲娱乐场所(Re)等区域.
图 9
Fig. 9
图 9 各时段蜂窝形格网载客热点可视化
图 10
Fig. 10
图 10 DBSCAN聚类结果可视化
4.4 高效益出租车轨迹查询与可视化
通过在地图上绘制起点缓冲区OB与终点缓冲区DB, 可视化起点缓冲区与终点缓冲区中的多条轨迹, 并提取轨迹相关因子. 选取8月17日与23日的数据, 将OB设置在春熙路地铁站附近, 缓冲区半径为155 m, 将DB设置在宽窄巷子长顺上街附近, 缓冲区半径为260 m. 共查询出31条轨迹,
轨迹可视化结合轨迹相关因子, 可以了解当前区域的道路交通状况与分析驾驶员的路径选择行为.
图 11
Fig. 11
图 11 轨迹可视化(A标注为起点, B标注为终点)
表 1(Table 1)
表 1 针对
轨迹
起点(lng, lat)
终点(lng, lat)
起始
时间
运营
时长(s)
距离(km)
a1
(104.075 27,
30.655 18)
(104.053 91,
30.665 51)
17:06:47
702
3.35
a2
(104.076 49,
30.655 94)
(104.053 91,
30.665 40)
14:24:11
853
3.57
a3
(104.075 94,
30.655 06)
(104.053 98,
30.665 42)
19:49:47
686
3.46
表 1 针对
表 2(Table 2)
表 2 相同时段不同路径的轨迹相关因子表
轨迹
起点(lng, lat)
终点(lng, lat)
起始
时间
运营
时长(s)
距离(km)
d
(104.076 34, 30.655 58)
(104.052 77, 30.663 35)
17:06:47
837
3.12
e
(104.076 87, 30.656 04)
(104.053 61, 30.662 97)
17:01:33
703
3.26
f
(104.076 18, 30.655 36)
(104.054 02, 30.665 43)
17:05:49
649
4.48
表 2 相同时段不同路径的轨迹相关因子表
5 结束语
本文实现了一个基于Spark的出租车轨迹大数据处理与可视化平台, 设计效益指数模型提取高效益出租车用于可视化分析. 运营特性分析, 对研究高效益出租车运营模式、提升出租车效益具有重要意义. 对载客热点进行分析, 有利于合理配置城市公共交通、提高载客效率. 轨迹查询与可视化, 可用于城市道路交通分析、研究轨迹相关因子对路径选择行为的影响. 以成都市出租车轨迹数据作为研究实例, 验证了平台的有效性.
在未来研究中, 将继续完善平台功能, 如添加三维可视化、提供寻客推荐功能、实现实时出租车数据分析服务. 同时希望平台可以应用于不同地区, 比较不同地区出租车运营模式与载客策略的异同.
spark如何进行聚类可视化_基于Spark的出租车轨迹处理与可视化平台相关推荐
- Spark大数据分析与实战:基于Spark MLlib 实现音乐推荐
Spark大数据分析与实战:基于Spark MLlib 实现音乐推荐 基于Spark MLlib 实现音乐推荐 一.实验背景: 熟悉 Audioscrobbler 数据集 基于该数据集选择合适的 ML ...
- scala和python的优缺点_基于Spark环境对比Python和Scala语言利弊
在数据挖掘中,Python和Scala语言都是极受欢迎的,本文总结两种语言在Spark环境各自特点. 本文翻译自 https://www.dezyre.com/article/Scala-vs-Py ...
- java 时间序列预测_基于spark的时间序列预测包Sparkts._的使用
最近研究了一下时间序列预测的使用,网上找了大部分的资源,都是使用python来实现的,使用python来实现虽然能满足大部分的需求,但是python有一点缺点按就是只能使用一台计算资源进行计算,如果数 ...
- 基于java的随机森林算法_基于Spark实现随机森林代码
本文实例为大家分享了基于Spark实现随机森林的具体代码,供大家参考,具体内容如下 public class RandomForestClassficationTest extends TestCas ...
- 电影推荐系统 python简书_基于Spark的电影推荐系统(实战简介)
## 写在前面 一直不知道这个专栏该如何开始写,思来想去,还是暂时把自己对这个项目的一些想法 和大家分享 的形式来展现.有什么问题,欢迎大家一起留言讨论. 这个项目的源代码是在https://gith ...
- 【Spark Streaming】(四)基于 Spark Structured Streaming 的开发与数据处理
文章目录 一.前言 二.Spark Streaming vs Structured Streaming 2.1 Spark Streaming 2.2 Structured Streaming 2.3 ...
- python朋友圈数据分析_基于Python的微信朋友圈数据可视化分析之地点
前提 朋友圈的相关数据请参照上一篇文章<基于Python的微信朋友圈数据可视化分析之个性签名>获取,本篇文章默认需要的数据已经下载保存至本地的 csv 文件中了. 将好友的地点按照省份进行 ...
- vue 分享给好友 点击分享按钮_基于vue+leaflet+echart的足迹分享评论平台
系统操作https://www.zhihu.com/video/1160268313283821568 基于vue+leaflet+Cesium的足迹分享评论平台 (其实题目是随便取的,目的只是用来证 ...
- 基于python的transbigdata实现出租车轨迹数据分析与可视化
TransBigData是一个为交通时空大数据处理.分析和可视化而开发的Python包.TransBigData为处理常见的交通时空大数据(如出租车GPS数据.共享单车数据和公交车GPS数据等)提供了 ...
最新文章
- ACMNO.10打印出所有水仙花数,所谓水仙花数是指一个三位数,其各位数字立方和等于该本身。 例如:153是一个水仙花数,因为153=1^3+5^3+3^3。 Output: 153 ???
- STL的pair学习, map学习
- tomcat 目录配置 appBase和docBase 简介
- umi搭建react+antd项目(一)环境配置
- 一个商场营销经理的实习总结
- 为什么在mysql执行删除表中外键的语句,外键却仍然存在? [问题点数:40分]
- 在DZ 中 showmessage 中可以再次执行 JS
- 产品经理懂技术=流氓会武术(zz)
- 学会这十九招就会成为股市高手
- 写论文的用到的常用技巧
- windows网络编程头文件注意事项
- 达观数据推出智能审单机器人,全面提升航运物流效率
- Unity 代码实现锁定手机横屏
- 软件 | 快速计算网络自然连通度评估群落稳定性
- 嵌入式的优势在哪里?
- 深度学习与多层神经网络的区别
- linux 无法解析配置文件,Linux无法解析域名的解决办法
- java utf-8 转 gbk / gbk 转 utf-8
- c语言中为什么有时候输入一个数字之后要再输入一个才输出结果
- AWE的这家展台,为什么让吴晓波流连忘返?