纽约出租车 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程序在可视化中的重要特点。

  • 4
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【资源说明】 基于spark+echarts实现的互联网行业数据大屏分析源码+项目说明(数据来源于前程无忧).zip 基于spark+echarts实现的互联网行业数据大屏分析源码+项目说明(数据来源于前程无忧).zip 基于spark+echarts实现的互联网行业数据大屏分析源码+项目说明(数据来源于前程无忧).zip 1、该资源内项目代码都是经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能。 数据分析基于Hadoop+Spark平台,数据大屏基于Echarts 数据源 基于多线程爬取。各个城市的精度data/BaiduMap_cityCenter.txt来源于百度地图开放平台,crawler/cityInfo.py含爬取前程无忧各个城市的编号,爬取的岗位关键字在data/job.csv,爬取代码crawler/qcwy.py,结果为/data/data.csv 数据分析 数据分析是基于spark平台,数据储存在hdfs上,开发环境是Jupyter,由于我的分布式平台是在虚拟机搭建的,所以本项目的各个模块(爬虫、数据分析、数据大屏)是分离的,将/data/data.csv上传至hdfs,分析代码位于/visual.ipynb,分析结果保存为json文件,将分析结果文件保存至data/。 数据大屏 因为数据均保存为静态数据,因此可以忽略数据爬取和数据分析这一部分代码,直接打开visual/index.html

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值