利用GPS轨迹和DBSCAN推断工作地居住地
利用移动设备用户的GPS轨迹可以推断用户的工作地和居住地。本文中的数据集来自微软亚洲研究院的GeoLife GPS轨迹数据集,(数据集链接为https://www.microsoft.com/en-us/download/details.aspx?id=52367)。该数据集包含了182个用户3年内的GPS轨迹。本文利用某个用户作为示例。
首先需要读入用户的轨迹数据。每个样本点包含的信息有纬度,经度,高度,日期和时间等。如果将这些GPS数据在地图上展示,就可以大致看出用户的活动区域。
原始数据格式如下
下面是读入数据,并选出需要的列
由于数据中记录的比较频繁,所以实验中不用全部数据,而是每隔一分钟取一条。
示例数据如下
总样本数结果如下
下面是在谷歌地图上展示用户轨迹
用户轨迹如下
然后利用DBSCAN(Density-Based Spatial Clustering and Application with Noise)算法对数据集进行聚类。DBSCAN是一种聚类算法,这种算法通常用于对带有噪声的空间数据进行聚类。利用DBSCAN算法可以对GPS轨迹聚成4类。直观上来看,每一个聚类都表示该用户经常到访该区域。因此,可以假设用户的工作地和居住地就在这4个聚类中。
具体代码如下
下面是计算每个聚类的中心点
下面是画出GPS轨迹和聚类效果
为了更好地理解DBSCAN,下面插播一段DBSCAN的介绍
在DBSCAN中,有三类点,示例如下,其中x是中心点,y是边界点,z是噪声点。
在DBSCAN中有三个比较重要的概念,定义如下
直接密度可达:一个点A是从B直接密度可达即为B是中心点并且A在B的ϵ邻域中。
密度可达:点A跟点B是密度可达的即为如果B通过若干个中心点可以连接到A.。
密度可连:两个点A和B密度可连即为如果A和B跟同一个中心点C密度可达。
DBSCAN算法步骤如下
1 对每个样本点xi,计算该样本点跟其他样本点的距离。针对每个开始点xi,找出该样本点的邻域内的点。如果某个点的邻域内的点大于或等于MinPts,则将该点标记为中心点或已访问。
2 针对每个中心点,如果该点没有标记为属于某个聚类,则新建一个聚类。针对每个中心点,将所有密度可连的点标记为跟该中心点属于同一个聚类。
3 对所有未访问的点递归执行 1 2。
为了说明K-Means和DBSCAN算法的区别,下面给出了示例。
下图是原始的样本点
k-means聚类结果如下
下面是DBSCAN的聚类结果
为了推断工作地和居住地,可以利用简单的先验知识:时间。针对每个聚类,可以画出其中的GPS样本点的时间分布。容易看出,用户在早上九点到下午六点,用户待在聚类一种。而在晚上到早上8点,用户倾向于待在聚类2和聚类3中,因此可以推断用户001的工作地为聚类1,居住地为聚类2,聚类3可能是第二个居住地。
下面是查看每个聚类中的小时分布
针对每个聚类画出该类中的小时分布
下面是将工作地和居住地的推断在图上展示
下面是将工作地和居住地在谷歌地图上展示
只通过上述方式来推断工作地和居住地做法有些粗糙,可以更精确地推断工作地和居住地。比如,用户在周末和工作日的位置可以提供额外的线索。
参考资料
https://yidatao.github.io/2016-12-23/geolife-dbscan/
http://www.sthda.com/english/articles/30-advanced-clustering/105-dbscan-density-based-clustering-essentials/
利用GPS轨迹和DBSCAN推断工作地居住地相关推荐
- GPS轨迹记录及管理 - 利用喵迹APP
GPS轨迹记录及管理 网上有很多生成自驾或步行轨迹的APP,其功能都非常好,例如六只脚等,能在网站上下载别人走过的GPS轨迹. 本人即是一个自驾游爱好者,也是一个自学称柴的程序员,为了纪录自己的自驾轨 ...
- pythongps聚类_Python中的GPS轨迹聚类
当我们想要利用智能手机或智能手环等个人设备生成的GPS数据时,G PS轨迹聚类是一种常见的分析. 在本文中,我们将介绍一种在Python中执行GPS轨迹聚类的快速简便方法.这里的主要目标是创建包含&q ...
- 【地图匹配(ST-matching)】GPS 轨迹数据预处理——T-Driver数据集【持续更新中】
一.数据介绍 1.数据链接 https://download.csdn.net/download/skyman30/87432266?spm=1001.2014.3001.5503https://do ...
- Python中的GPS轨迹聚类
当我们想要利用智能手机或智能手环等个人设备生成的GPS数据时,G PS轨迹聚类是一种常见的分析. 在本文中,我们将介绍一种在Python中执行GPS轨迹聚类的快速简便方法.这里的主要目标是创建包含&q ...
- 出租车GPS轨迹数据和手机数据的研究价值
出租车GPS轨迹数据和手机数据的研究价值 原文:http://www.zdor.cn/news/html/zx/234027.html 作者:@高松-GISer (加州大学圣塔芭芭拉分校地理系.美国国 ...
- 《城市出租车上下客的GPS轨迹时空分布探测方法》(阅读笔记)20171229
<城市出租车上下客的GPS轨迹时空分布探测方法>2015 Abstract: 本文将出租车不同时段上下客量投影到城市路网上,提出采用线密度概念和模型,对出租车上下客进行时空分布特征探测和分 ...
- 【cartographer】园区场景自动驾驶-利用GPS实现ENU坐标系下的建图与定位
园区场景自动驾驶-利用GPS实现当地地理坐标系下的建图与定位 概述 主要实现如下的功能: 1.利用gps信息,修正题图为当地地理ENU坐标系: 2.在纯定位模式下,利用gps与imu(rtk)信息,实 ...
- MITRE:利用微生物组时间序列数据推断与宿主状态变化相关的特征
文章目录 MITRE:利用微生物组时间序列数据推断与宿主状态变化相关的特征 热心肠日报 写在前面 主要结果 图1. MITRE通过对时间序列的微生物群落的系统发育信息进行学习,同宿主的状态改变联系起来 ...
- GPS轨迹数据集免费下载资源整理
本文主要是整理了GPS轨迹数据集免费资源库,从这些库中能够免费下载到GPS数据,同时还整理出了这些数据的格式,数据集的简单描述等等.如果你发现更好的相关数据资源,欢迎共享
最新文章
- Spring Cloud Ribbon(服务消费者)
- Spring Cloud Alibaba基础教程:Sentinel使用Apollo存储规则
- NDK 交叉编译常用变量
- 什么是区块链预言机(BlockChain Oracle)
- linux 服务器(CentOS7)搭建PHP环境+SSH配置+服务器文件上传配置
- 企业数字化转型与中台建设全攻略:什么阶段进行?采用哪些方法?
- mysql各类型长度_mysql 各数据类型的大小及长度
- SQL Server 通过发布订阅 实现数据库同步
- cad结构字体_AutoCAD字体选择:如何快速选中gbcbig.shx通用字体
- 重心法例题matlab,Excel重心法选址计算题的详细步骤
- java表白我爱你代码_微信翻译代码我爱你怎么写 微信翻译表白代码大全
- python 打开网页并截图_python实现自动网页截图并裁剪图片
- Spark数据倾斜解决
- Java進階:ExecutorService 線程池
- 微信小程序——瘦金社区
- textField使用合集(附字体设置合集)
- MATLAB多径衰落信道仿真程序,基于Matlab的移动通信中多径衰落信道的仿真
- 降本提效,贝壳搜索推荐架构统一之路
- java执行sql列名无效_sqlserver列名无效调试及解决方法
- 2022年大数据开发实习面经总结,已拿顺丰、哔哩哔哩offer
热门文章
- Docker价值分析(优缺点和谁在使用?)
- OBC车载充电机6.6kw,国内OBC车载充电机NO.1 硬件原理图和软件
- java怎么buildpath_eclipse怎么build path(构建路径)-eclipse中buildpath的方法 - 河东软件园...
- WAVECOM AT命令集
- 智能测量仪表在三相电路中的如何接入电路进行测量电压电流功率等数据
- windows7重装系统
- 【最全干货】SQL注入大合集
- python堆排序算法代码_python堆排序算法实例代码
- wcdma下行如何解扩解扰 matlab,【移动通信】【WCDMA】空中接口技术特点
- Pygame(七) 碰撞检测