1、使用textFile函数读取csv文件创建taxi_data,然后使用map算子操作将按照逗号隔开的文本创建RDDfrom pyspark.sql import Row
taxi_data = sc.textFile("/home/test/taxi.csv")
taxi_rdd = distFile.map(lambda line:line.split(','))2、创建矢量RDD,矢量两个参数分别为纬度和经度,在聚类函数中需要该格式RDD进行聚类from pyspark.ml.linalg import Vectors
taxi_row=taxi_rdd.map(lambda x: (Vectors.dense (x[1],x[2]), ))3、创建DataFrametaxi_df = spark.createDataFrame(taxi_row,["features"])4、利用Kmeans算法对出租车数据进行分类from pyspark.ml.clustering import KMeans
kmeans=KMeans(k=3, seed=1)  #创建kmeans实例,k为分簇个数,seed为种子点。
model=kmeans.fit(taxi_df)    #调用kmeans.fit方法训练形成模型
centers=model.clusterCenters()  #产生聚类中心
print(centers)
#输出的结果:[array([ 30.64615364, 104.08805459]), array([ 30.89418873, 103.6522621 ]), array([ 30.65644306, 104.01765788])]5、调用百度API进行数据可视化使用百度地图接口需要百度的一个认证,也就是需要在登录百度地图开发平台申请key,申请key地址:http://lbsyun.baidu.com/apiconsole/key,申请界面如图所示:申请过程:点击开放平台地址:http://lbsyun.baidu.com/创建完成后复制你的ak即可,接着在Pycharm中创建html文件,写入一下代码:<!DOCTYPE html>
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><meta name="viewport" content="initial-scale=1.0, user-scalable=no" /><style type="text/css">body, html {width: 100%;height: 100%;margin:0;font-family:"微软雅黑";}#allmap{width:100%;height:1000px;}/*p{margin-left:5px; font-size:14px;}*/</style><script type="text/javascript" src="//api.map.baidu.com/api?v=2.0&ak=写入你复制的AK"></script><script src="//libs.baidu.com/jquery/1.9.0/jquery.js"></script><title>给多个点添加信息窗口</title>
</head>
<body><div id="allmap"></div></body>
</html>
<script type="text/javascript">// 百度地图API功能map = new BMap.Map("allmap");map.enableScrollWheelZoom();   //启用滚轮放大缩小,默认禁用map.enableContinuousZoom();map.centerAndZoom(new BMap.Point(103.65226210,30.89418873), 15);var data_info = [[104.08805459,30.64615364,"经纬度:104.08805459,30.64615364"],[103.65226210,30.89418873,"经纬度:103.6522621,30.89418873"],[104.01765788,30.65644306,"经纬度:104.01765788,30.65644306"    ]];//写入运行出的经纬度结果var opts = {width : 250,     // 信息窗口宽度height: 80,     // 信息窗口高度title : "信息窗口" , // 信息窗口标题enableMessage:true//设置允许信息窗发送短息};for(var i=0;i<data_info.length;i++){var marker = new BMap.Marker(new BMap.Point(data_info[i][0],data_info[i][1]));  // 创建标注var content = data_info[i][2];map.addOverlay(marker);               // 将标注添加到地图中addClickHandler(content,marker);}function addClickHandler(content,marker){marker.addEventListener("click",function(e){openInfo(content,e)});}function openInfo(content,e){var p = e.target;var point = new BMap.Point(p.getPosition().lng, p.getPosition().lat);var infoWindow = new BMap.InfoWindow(content,opts);  // 创建信息窗口对象map.openInfoWindow(infoWindow,point); //开启信息窗口}
</script>

实验资源

taxi.csv

实验环境

VMware Workstation
Ubuntu 16.04
Jupyter Notebook
Pyspark
Pycharm

实验内容

现有某地区出租车 GPS 定位数据 taxi.csv,部分数据见下图:

1 30.624806 104.136604 211846
1 30.624809 104.136612 211815
1 30.624811 104.136587 212017
1 30.624811 104.136596 211916
1 30.624811 104.136619 211744

数据一共分为 4 列,每一列含义如下表所示:

编号(id) 纬度(lat) 经度(lon) 时间戳(time)

利用Spark机器学习库中Kmeans算法根据出租车的经纬度数据进行分类,并调用百度API进行数据可视化

实验步骤

1、使用textFile函数读取csv文件创建taxi_data,然后使用map算子操作将按照逗号隔开的文本创建RDD

from pyspark.sql import Row
taxi_data = sc.textFile("/home/test/taxi.csv")
taxi_rdd = distFile.map(lambda line:line.split(','))

2、创建矢量RDD,矢量两个参数分别为纬度和经度,在聚类函数中需要该格式RDD进行聚类

from pyspark.ml.linalg import Vectors
taxi_row=taxi_rdd.map(lambda x: (Vectors.dense (x[1],x[2]), ))

3、创建DataFrame

taxi_df = spark.createDataFrame(taxi_row,["features"])

4、利用Kmeans算法对出租车数据进行分类

from pyspark.ml.clustering import KMeans
kmeans=KMeans(k=3, seed=1)  #创建kmeans实例,k为分簇个数,seed为种子点。
model=kmeans.fit(taxi_df)    #调用kmeans.fit方法训练形成模型
centers=model.clusterCenters()  #产生聚类中心
print(centers)
#输出的结果:[array([ 30.64615364, 104.08805459]), array([ 30.89418873, 103.6522621 ]), array([ 30.65644306, 104.01765788])]

5、调用百度API进行数据可视化

使用百度地图接口需要百度的一个认证,也就是需要在登录百度地图开发平台申请key,申请key地址:http://lbsyun.baidu.com/apiconsole/key,申请界面如图所示:

申请过程:点击开放平台地址:http://lbsyun.baidu.com/



创建完成后复制你的ak即可,接着在Pycharm中创建html文件,写入一下代码:

<!DOCTYPE html>
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><meta name="viewport" content="initial-scale=1.0, user-scalable=no" /><style type="text/css">body, html {width: 100%;height: 100%;margin:0;font-family:"微软雅黑";}#allmap{width:100%;height:1000px;}/*p{margin-left:5px; font-size:14px;}*/</style><script type="text/javascript" src="//api.map.baidu.com/api?v=2.0&ak=写入你复制的AK"></script><script src="//libs.baidu.com/jquery/1.9.0/jquery.js"></script><title>给多个点添加信息窗口</title>
</head>
<body><div id="allmap"></div></body>
</html>
<script type="text/javascript">// 百度地图API功能map = new BMap.Map("allmap");map.enableScrollWheelZoom();   //启用滚轮放大缩小,默认禁用map.enableContinuousZoom();map.centerAndZoom(new BMap.Point(103.65226210,30.89418873), 15);var data_info = [[104.08805459,30.64615364,"经纬度:104.08805459,30.64615364"],[103.65226210,30.89418873,"经纬度:103.6522621,30.89418873"],[104.01765788,30.65644306,"经纬度:104.01765788,30.65644306"    ]];//写入运行出的经纬度结果var opts = {width : 250,     // 信息窗口宽度height: 80,     // 信息窗口高度title : "信息窗口" , // 信息窗口标题enableMessage:true//设置允许信息窗发送短息};for(var i=0;i<data_info.length;i++){var marker = new BMap.Marker(new BMap.Point(data_info[i][0],data_info[i][1]));  // 创建标注var content = data_info[i][2];map.addOverlay(marker);               // 将标注添加到地图中addClickHandler(content,marker);}function addClickHandler(content,marker){marker.addEventListener("click",function(e){openInfo(content,e)});}function openInfo(content,e){var p = e.target;var point = new BMap.Point(p.getPosition().lng, p.getPosition().lat);var infoWindow = new BMap.InfoWindow(content,opts);  // 创建信息窗口对象map.openInfoWindow(infoWindow,point); //开启信息窗口}
</script>

查看最终结果:

2、Kmeans算法处理出租车数据相关推荐

  1. 用K-Means算法处理wine数据集和wine_quality数据集

    一.实验目的 根据wine数据集处理的结果,采用2种不同的聚类算法分别建聚类模型:然后,通过定量指标评价所构建的模型的优劣. 二.实验内容   wine数据集和wine_quality数据集是两份和葡 ...

  2. k-means算法简介

    k-means算法简介 文章目录 k-means算法简介 一.什么是k-means 二.k-means算法的步骤 三.k-means性能评估指标 四.k-means的使用 4.1 相关API 4.2 ...

  3. 根据《关于“k-means算法在流式细胞仪中细胞分类的应用”的学习笔记总结》撰写的中期报告...

    XXXX大学2014届本科毕业设计(论文)中期报告 毕业设计(论文)题目:K-means算法在流式细胞仪中细胞分类的应用 专业(方向):生物医学工程 学生信息:XXXXXX.XX.生医XXX 指导教师 ...

  4. 【机器学习】聚类算法中的 K-means 算法及其原理

    系列文章目录 第十四章 Python 机器学习入门之聚类算法 目录 系列文章目录 前言 一.什么是聚类 二.K-means 聚类算法的直观理解 三.K-means 聚类算法公式 四.K-means 聚 ...

  5. (笔记)K-means算法

    K-means算法是常用的聚类算法:在给定K值和K个初始类簇中心点的情况下,首先把每个点(即数据记录)分配到离其最近的类簇中心点所代表的类簇中.其次根据一个类簇中内的所有点重新计算该类簇的中心点(取平 ...

  6. AI K-means算法对数据进行聚类分析-实验报告

    1. 问题描述及实验要求 K-means算法对data中数据进行聚类分析 (1)算法原理描述 (2)算法结构 (3)写出K-means具体功能函数(不能直接调用sklearn.cluster(Mean ...

  7. 【数据挖掘】数据挖掘总结 ( K-Means 聚类算法 | 二维数据的 K-Means 聚类 ) ★

    文章目录 一. K-Means 聚类算法流程 二. 二维数据的 K-Means 聚类 1. 第一次迭代 2. 第二次迭代 参考博客 : [数据挖掘]聚类算法 简介 ( 基于划分的聚类方法 | 基于层次 ...

  8. 【数据挖掘】K-Means 二维数据聚类分析 ( K-Means 迭代总结 | K-Means 初始中心点选择方案 | K-Means 算法优缺点 | K-Means 算法变种 )

    文章目录 K-Means 二维数据 聚类分析 数据样本及聚类要求 二维数据曼哈顿距离计算 K-Means 算法 步骤 第一次迭代 : 步骤 ( 1 ) 中心点初始化 第一次迭代 : 步骤 ( 2 ) ...

  9. K-means算法在手写体数字图像数据上的使用示例-代码详解

    对应书上的P84页的代码 # coding: utf-8 # 分别导入numpy.matplotlib以及pandas,用于数学运算.作图以及数据分析. import numpy as np impo ...

  10. 机器学习实战(十)利用K-means算法对未标注数据分组

    第十章 利用K-means算法对未标注数据分组 10.1 K-均值聚类算法 10.2 使用后处理来提高聚类性能 10.3 二分K-均值算法 10.4 总结 第十章 利用K-means算法对未标注数据分 ...

最新文章

  1. iOS 如何写出更加严谨的应用
  2. mysql提示符prompt的用法
  3. 28335接两个spi设备_SPI浅析
  4. 后端学习 - Spring5
  5. 手机壁纸自动采集小程序源码
  6. 直播App测试重点问题 - 服务器压力
  7. Photoshop学习整理---修复画笔工具
  8. c语言加法器程序代码,利用EDA设计加法器和减法器并且附有程序代码的实验报告...
  9. 重庆航天职业技术学院计算机系在哪个校区,重庆航天职业技术学院江北校区怎么样...
  10. 淘宝买家谈阿里质量意识
  11. 案例:知乎是怎么落地Istio的?
  12. java导出excel并实现下载功能
  13. 排除Windows XP无法启动故障
  14. b站喜欢的崩坏3动画短片的保存方法
  15. 小波模极大值 matlab,Matlab程序关于小波模极大值
  16. MySQL长途售票系统_基于SSH的长途汽车票务售票系统的设计(Struts2,MySQL)(含录像)...
  17. 微信大批量封号得注意这些行为
  18. 怪兽充电上市规模缩水:盘中跌破发行价,搜电、街电宣布联手对抗
  19. 【计算机图形学基础】投影矩阵
  20. java下标_Java 在Word中设置上标、下标

热门文章

  1. DP题目推荐合集(洛谷/UVa)
  2. 新年放大招:Github 私库免费了!
  3. 英语口语练习系列-C01-好棒
  4. Power Spectral Density
  5. effective C++ 条款 48:认识template元编程
  6. Ajax Js倒计时执行后台方法
  7. c语言线性拉伸0到255,数字图像处理作业题.doc
  8. ubuntu16.04安装nvidia-384
  9. char*,const char*和string 三者转换
  10. Ubuntu 挂载windows硬盘突然变成只读了???