高速发展的信息化技术使得与空间位置相关的数据积累越来越多,空间数据的存储、分析与可视化传统技术已逐渐无法满足需求,亟需使用承载力更强、可靠性更高、计算速度更快的方法。分布式技术为空间大数据的处理与分析提供了有效的解决方案,下面就以一个十亿数据量级别的出租车位置数据为例,为大家介绍如何使用分布式技术进行空间大数据的可视化与分析。

1 背景介绍

纽约市出租车和轿车管委员会(TLC)目前公开发布了详细的出租车历史数据集,包括了从2009年1月到2016年6月期间几十亿条的城市内部个体出租车载客记录。每条记录都包括载客的上下车地点、上下车时间,以及载客距离、载客时长、车辆类型等信息。

这为我们研究出租车的运营情况以及乘客的出行模式提供了可能,如各行政区不同类型的出租车分布情况,工作日各时段从某居民区打车到达机场的耗时情况,乘客下车地点对出租车接到下一单的等待时间的影响等。

2 数据预处理

这些含有出租车上下客信息的数据集以CSV文件的方式提供,Spark有专门的函数来将这种记录间以换行符分隔的文件转换为RDD,RDD的每个元素即一行文本信息。接下来我们需要做的是提取每行中按逗号分隔的属性信息,其中的时间数据即上下车时间和空间数据即上下车地点对于接下来要进行的时空分析是十分重要的。

首先我们需要知道每种属性对应的列号,来将相应的字符串转成我们需要的类型如整型、浮点型或时间类型,再将浮点坐标构造成SuperMap iObjects for Spark中的点类型的Feature或包含时间特征的FeatureHasTime对象。一般来说,通过阅读数据格式说明及数据的前几行记录,我们即可明确这些信息。然而需要注意的是,对于大规模数据集,经常有一些记录不满足数据格式的要求,它们或者字段个数与其它记录不同,或者数据类型不符,而查找这些错误又要耗费额外的资源,在此我们建议使用try-catch机制来忽略掉这些错误记录。

另外我们还需要考虑数据可能存在的数据质量问题,例如,针对纽约出租车数据我们观察到,有些记录的上车时间竟然晚于下车时间,有些记录的坐标信息超出了经纬度的有效范围或全部为零,还有一些虽然坐标合法但距离纽约市非常远。对于这些情况,我们就需要根据对数据的合理期望来过滤不合理的数据。SuperMap iObjects for Spark产品模块中提供了针对FeatureRDD的属性条件过滤及空间范围过滤接口,可以支持这类数据预处理的需求。例如以纽约全市覆盖的经纬度区域为边界来做Bounds过滤,或使用纽约市的行政区面对象来对上下车坐标点做相交查询,在面内的才认为是有效数据。

3 空间可视化

在纽约,出租车分为两类:黄色和绿色。黄色出租车可以在纽约五大区内任何地点搭载乘客。绿色出租车则被规定只允许在上曼哈顿、布朗克斯区、皇后区和斯塔滕岛接客。我们可以将出租车载客的上车地点叠加显示在纽约街道地图上,来直接展示两种出租车上客位置的不同以及它们各自的上客热点区域。

然而由于数据量过大,如下所示的散点图效果并不好,点的互相叠加产生了一定的视觉干扰,并且不论地图显示还是生成缓存的耗时都很长。

图1 出租车载客点叠加显示

因此我们考虑对原始数据进行聚合统计,这里使用纽约出租车区划面数据来对黄色出租车的载客上客点记录进行聚合,之后按每个区域的点数统计值来渲染地图,颜色越深表示该区域发生的载客行为越多。如下图,曼哈顿地区的载客行为明显要多于其它区域,而皇后区东南和北部的两处载客活跃地块,则分别是肯尼迪国际机场和拉瓜迪亚机场。

图2 用区划面对上客位置点数进行聚合分析

我们还可以对黄绿两种出租车的载客记录分别进行热度图渲染,来分析全市载客行为的整体分布趋势,这里使用SuperMap iObjects for Spark的核密度计算功能。将密度较小区间的颜色设为透明后,如下图,可以很直观的看到黄绿两色出租车各自的载客热点区域。

图3 载客位置热度图

将上图放大至上东区与东哈莱姆区交界的位置,也即黄绿色出租车载客分界线上,如下图,这是绿色出租车的一个载客热点区域。

图4 黄绿出租车交界处热度分布图

4 空间分析

现在我们研究乘客下车位置对出租车等待下一单生意的等单时间的影响。

为了计算每辆车或每个司机的等单时间,我们需要将所有载客记录按车辆或司机的唯一ID来对记录进行分组,然后将这些分组后的载客记录按时间排序。排序让我们可以计算一次载客记录的下客时间和下一次载客记录的上客时间的时间间隔即等单时间。由于涉及到隐私问题,2014年后的出租车数据不再提供车牌号或司机驾照信息,因此这里使用2013年的数据来进行分析。

首先我们使用原始数据构造FeatureRDD,其中的Feature元素是以上客地点为几何对象、以上客时间为时间特征的FeatureHasTime类型,同时记录车牌号、下客时间和下客点坐标作为Feature的普通属性。之后我们按车牌号字段值对该FeatureRDD进行分组,并过滤掉记录数小于2的分组。

接下来我们对每个分组中的记录进行上客时间的排序,然后对排序结果中的两两记录计算下客时间和下一单上客时间的时间间隔,并与下客地点联合构造为一个新的Feature,在这个过程中,过滤掉间隔时间为负的错误记录和间隔时间大于三小时即司机可能在休息的记录。

这样,我们就得到了一个有关下客地点和等单时间的新的FeatureRDD,使用出租车区划面数据来对该FeatureRDD进行点在面内聚合处理,其中聚合统计字段即等单时间,统计方式为平均值。将最后得到的聚合面数据集进行单值渲染,颜色越深表示等单时间越短,可得如下的地图效果。

图5 出租车等单时间与下客区域的关系

地图整体表现出下客地点越繁华,出租车等单时间越短的趋势,曼哈顿地区的等单时间明显短于其它地区。比较特别的是两处机场区域,虽然由之前的分析得知机场的载客行为很密集,但载客到达机场的司机并不能很快获得下一单生意。

大数据GIS系列(2)——空间大数据处理与分析案例相关推荐

  1. 大数据GIS系列(1)——大数据时代下的GIS技术

    Hadoop技术 Apache Hadoop项目提供了一个可扩展且可靠的分布式计算框架,允许大型数据集使用简单的编程模型在计算机集群上进行分布式处理.它被设计成能够从单一的服务器扩展到成千上万的机器, ...

  2. 基于当前现状的大数据GIS应用分析

    大数据GIS是在大数据的浪潮下,GIS(ztmapinfo-com)从传统化迈进大数据时期的一次转型.大数据GIS能为室内空间大数据的储存.剖析和数据可视化出示更优秀的基础理论方式 和软件系统,推动了 ...

  3. 大数据小白系列——HDFS(1)

    [注1:结尾有大福利!] [注2:想写一个大数据小白系列,介绍大数据生态系统中的主要成员,理解其原理,明白其用途,万一有用呢,对不对.] 大数据是什么?抛开那些高大上但笼统的说法,其实大数据说的是两件 ...

  4. 大数据学习笔记一:大数据的发展历程--MapReduce,Hive,Yarn,Hadoop,Spark,Flink

    大数据学习系列文章:大数据-博客专栏 今天在学习极客时间专栏:<从0开始学大数据> 从预习 01 | 大数据技术发展史:大数据的前世今生到预习 03 | 大数据应用领域:数据驱动一切,系统 ...

  5. 【“工业大数据预测”系列】——第2篇:异常数据处理

    文章目录 前言 1 数据来源 2 数据预处理 2.1 无效数据处理 2.2 异常数据处理 3 数据预处理完整代码 前言   Hi,久等了,这里是工业大数据预测系列的第二篇.   前面我们提到,工业大数 ...

  6. SuperMap大数据GIS技术白皮书 v2.1

    近几年,大数据(big data)一词越来越多地被提及,人们用它来描述和定义信息爆炸时代产生的海量数据,并命名与之相关的技术发展与创新.新版本自8月初计划编写,成稿后经数次删改及审定,最终形成包含7大 ...

  7. 【经典推荐】教育大数据分析师系列丛书(培训教材)

    <中小学教育大数据分析师系列丛书(培训教材)>紧扣国家<教育部关于实施全国中小学教师信息技术应用能力提升工程2.0的意见><教育信息化2.0行动计划>.国家智慧教育 ...

  8. 大数据算法系列——布隆过滤器

    大数据算法系列--布隆过滤器 一.简介 Bloom filter介绍 Bloom Filter(BF)是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集 ...

  9. 大数据学习系列:Hadoop3.0苦命学习(五)

    传送门: 大数据学习系列:Hadoop3.0苦命学习(一) 大数据学习系列:Hadoop3.0苦命学习(二) 大数据学习系列:Hadoop3.0苦命学习(三) 大数据学习系列:Hadoop3.0苦命学 ...

  10. 【大数据Spark系列】Spark教程:详细全部

    Spark作为Apache顶级的开源项目,是一个快速.通用的大规模数据处理引擎,和Hadoop的MapReduce计算框架类似,但是相对于MapReduce,Spark凭借其可伸缩.基于内存计算等特点 ...

最新文章

  1. IDA Pro IDA 数据库文件
  2. NeurIPS 2021论文放榜!清华投稿90篇排名第5,北大第9
  3. 面向对象课程第二单元作业总结
  4. 【脑电信号分类】脑电信号提取PSD功率谱密度特征
  5. java中Arrays.sort()实现原理
  6. Spring的refresh()方法调用过程
  7. messageformat.format() 自定义参数名_DedeCMS的Java版mcms 第四季之一: 自定义插件
  8. Python带参数的装饰器
  9. mysql max_prepared_stmt_count_MySQL的max_prepared_stmt_count参数
  10. linux添加后门方法,超初级的linux后门制作方法
  11. 这个严重漏洞可被滥用于破坏交通信号灯系统
  12. 经典并发问题:生产者-消费者
  13. [macOS] git忽略所有的.DS_Store文件
  14. 2004-7-21/22+ DataGrid知识整理
  15. python怎么表达我喜欢你的句子_关于我喜欢你的优美句子
  16. C语言 字符‘0‘和‘\0‘ 以及整数0的区别
  17. ActivitiUFLO2Snaker流程引擎对比分析
  18. Android Studio升级到3.5之后xml格式化问题
  19. 测度论中的概率空间,可测空间
  20. [Oracle] 自定义数据类型Type

热门文章

  1. MQL5 编程基础:时间
  2. 软件无线电(SDR)及高频/高速(RF/Hi-Speed)标准集
  3. 微信小程序-map地图标签的初级使用, 拥有图标,气泡,地图本身无法缩放移动需要点击跳转第三方地图平台
  4. Arcscan自动矢量化
  5. java扫描条形码的两种方式
  6. MATLAB从入门到精通 第1章 MATLAB入门
  7. mouseenter、mouseleave、mouseover和mouseout的区别
  8. 微信小程序地图生态概述
  9. 微信公众号支付开发常见问题
  10. matlab怎么截图清晰度,matlab截图到期刊论文中如何保持清晰度的方法