纽约出租车 spark分析 Echart可视化

实验

github仓库:

https://github.com/zx4321/BigDataVisualization

https://github.com/zx4321/BigDataSpark

1. 问题描述

题号:(选修)15号

题目名称:纽约市出租车乘客的出行特征

复制你的问题描述:数据集:http://chriswhong.com/open-data/foil_nyc_taxi/为2013年纽约市出租车出行记录,请你基于spark平台,分析一下乘客的出行特征。

介绍你要解决的问题

  1. 问题的背景/意义

这是纽约市2013年出租车的出行数据。通过数据分析,可以得到出租车出行的路程分布、路程长度、上车中心点等。比如获得上车的中心点,就可以判断出租车在这附近能够最大可能载客。

  1. 问题的技术难点

对大数据框架的熟悉,大数据可视化,大数据海量数据处理。

2. 基于的系统/算法

介绍你使用的主要的系统或者算法库

  1. 系统架构/算法原理

软件开发系统:

  1. Intellij专业版
  2. Spark4.0
  3. JDK8.0
  4. scala2.11.12
  5. hadoop-2.7.7
  6. Tomcat9.0
  7. Echart4.0

算法原理:

  1. Kmean算法:

b. 你为什么选择使用这个系统/算法

Spark2.4.0 、scala2.11.12 、hadoop-2.7.7这是一个典型的大数据处理框架,能够快速的对大批量的大数据进行分析。

Tomcat9 、   Echart4.0 主要是用于java web程序可视化,其中Echart4.0能够对千万级的数据进行网页渲染。

Kmean算法能够获得一批数据的中心点,可以得到某个地区的上车中心点,那么出租车在中心点数据能够最大可能获得乘客。

  1. 你是如何使用这个系统/算法的

首先使用spark进行大数据的处理,得到自己想得到的数据,并保存为对应格式的文件,然后使用java web程序对文件进行展示分析。

 

误区:之前认为大数据可视化,就应该使用spark对应的可视化工具,比如Apache Zepplin 、 Spark Notebook , 我认为在这个实验上面是一个误区,导致我花费一两天时间查这两个框架(也有可能我菜,不会用),但是采用这两个框架也能成功,但是我觉得费时费力,还不如采用web技术的框架,比如Echart4等。我目前采用的方案是,Spark分析数据,得到自己想要的数据,保存为文件(也可以是数据库文件),然后采用java web 程序进行结果展示, java程序需要另外编写,不应该在spark框架下写)

3. 实验流程

详细介绍你完成实验的主要流程

3.1 数据格式分析

实验数据压缩包(tripData2013.zip):11GB

实验数据保存目录:

实验数据保存格式(CSV):

 

3.2 spark代码编写和运行结果

3.2.1 初始化spark

3.2.2 读取文件(小技巧:设置大小不一样的文件,方便测试文件,数据为一月份数据)

3.2.3 删除第一行,并将数据集缓存

3.2.4 统计数据行数

运行结果:

3.2.5 统计每次乘车的乘客数量,并保存为txt文件

说明:通过生成一个新的RDD(passengerCountRDD),格式为(乘客数量:1),比如(1人:1);采用了reduceByKey这个算子,统计所有的数据,得到结果,比如(1人:1万次)。然后保存数据为TXT文件,用于后期java web程序可视化。

保存数据为:

3.2.6 计算每次乘车的乘客平均数量

说明: 通过3.2.5处理的得到数据passengerCount,通过 乘客数量* 乘以乘客乘车次数 得到所有的乘客数量,然后除以数据总数(dataLength)得到平均每次乘车的乘客数量。

运行结果:

3.27 获取某月中每天的打车的人数

说明: 通过SimpleDateFormat函数,格式化时间(例如:2013/1/1  15:11:48),再通过formatter.parse(“2013/1/1  15:11:48”).getDate 获取这是几号,得到RDD数据,格式为(1号,一次),最后通过reduceByKey算子,得到所有的数据,例如(1号, 一万次),代表在2013年1月1号这天有一万个人打车。最后保存为TXT文件。

运行结果:

3.2.8 获取一天中各个时间段打车的人数

运行结果:

3.2.9 获取乘车的平均时间

运行结果:

3.2.10 获取乘车的时间的分布(每100S)

运行结果:(0S 代表出租车载客运行时间小于50S)

3.2.11 获取乘车的距离的分布(每1KM)

运行结果:

3.2.12 Kmean 聚类分析载客中心点

将地图坐标数据保存为单独的文件,用于可视化分析

  调用Kmean函数,训练数据的中心点

运行结果:

3.3 可视化及其乘客的出行特征分析

Echart官网:http://www.echartsjs.com/index.html

Github:引用了https://github.com/lihaogm/spark-echarts-log的java web程序

3.3.1 完成每个HttpServlet的编写

3.3.2  配置<web-app>

3.3.3  每次乘车时间长度可视化

分析:可以看出乘客乘车时间最多在400S 左右,其中50S以下的也有78817次,最长的时间也有10800S。

3.3.4  每次乘车距离可视化

分析:乘客乘车距离大多在1KM左右,500M以下的也有667477次,最长的有100KM.

3.3.5  每天各个时间段乘车数据可视化

分析:可以看出凌晨5点钟打车的人最少,晚上18-19点钟打车的人最多。

3.3.6  每月每天乘车数据可视化

分析:可以看出乘客的乘车的数据呈现周期性变化。

3.3.7  每次乘车乘客数据可视化

 

分析:乘客大多数在一人,最多的有9人

3.3.8 上车地点可视化(千万级数据渲染)

分析:通过大数据渲染,可以清晰的看到乘客乘车的中心点。

4. 实验过程分析

测试你设计实现的系统/算法的效果

  1. 测试环境:CPU、内存、磁盘、网络(如有)、GPU(如有)

CPU:I5-7th

内存:8G

磁盘:机械1T

  1. 数据集:数据集的来源(是自己生成的还是下载的,生成程序是如何编写的,下载的数据是选取了一部分还是全部使用了)、数据文件或数据库占用磁盘空间大小、包含的记录个数(行数)、包含的属性及其意义

通过http://chriswhong.com/open-data/foil_nyc_taxi/数据集下载得到的数据,一共11G

 

  1. 测试算法/系统的效果,如误差大小,准确率等随参数的变化情况,用图表展示并作详细描述

Kmean 随着迭代的次数正确率而上升。

5. 结论

 通过这次大数据实验,我学会了spark+scala的基本使用,同时了解大数据可视化的困难。也了解了大数据可视化的特点,同时明白了大数据的重要性,和可视化对数据分析的重要性。也写了web程序在可视化中的重要特点。