CN109739585B - 基于spark集群并行化计算的交通拥堵点发现方法 - Google Patents
基于spark集群并行化计算的交通拥堵点发现方法 Download PDFInfo
- Publication number
- CN109739585B CN109739585B CN201811632271.3A CN201811632271A CN109739585B CN 109739585 B CN109739585 B CN 109739585B CN 201811632271 A CN201811632271 A CN 201811632271A CN 109739585 B CN109739585 B CN 109739585B
- Authority
- CN
- China
- Prior art keywords
- grid
- data
- point
- grids
- clustering
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Traffic Control Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于spark集群并行化计算的交通拥堵点发现方法,涉及轨迹大数据挖掘技术领域,解决的技术问题是如何对海量轨迹数据进行快速聚类以及发现城市热门区域的交通拥堵源,包括如下步骤:(一)对海量数据的预处理,包括补全轨迹点间的误差以及消除一定区域内一段时间的轨迹点冗余;(二)采用网格‑均值聚类算法聚类得到目标多个数据样本;(三)采用邻域最大密度网格聚类算法,聚类得到城市热门交通路网模型;(四)采用邻域密度差算法,计算出相邻网格密度差,得到交通拥堵源,并将得到的结果保存在spark内存中。本发明能够对海量数据快速聚类,得到城市交通路网模型,实现了交通拥堵源区域的快速发现。
Description
技术领域
本发明涉及大数据挖掘技术领域,尤其涉及一种基于spark集群并行化计算的交通拥堵点发现方法。
背景技术
随着城市交通日益发展,车载定位系统的广泛应用,每天都能产生大量的轨迹数据,然而这些海量的轨迹数据却没有能得到很好的利用。同时,随着城市经济快速发展和智慧城市的需要,面对日益严峻的交通拥塞问题,如何利用当前的轨迹大数据,寻找交通拥堵的源头以及解决城市交通拥塞问题,推进智慧城市的前进步伐成为新的研究热点。
目前挖掘和分析大数据平台工具有多种,其中以Hadoop和Spark为主。
相对于Spark,由于Hadoop的MapReduce有着高延迟的致命弱点,导致Hadoop无力处理很多需对时间上有要求的场景,Spark不仅具备了Hadoop的所有的功能,在算法上更具优势,Spark内存迭代计算无论在占用计算机资源和计算速度上都远远超过Hadoop,因而更具有优势。
现有技术的大数据聚类算法中,有均值聚类算法,层次聚类算法,网格聚类算法,密度聚类算法等。其中以网格聚类算法最为快速,但是精度不高;均值算法好坏依赖于对初始聚类中心的选择、容易陷入局部最优解;密度聚类算法优点是聚类效果好,但是时间复杂度高等。如何利用和优化这些聚类算法进行大数据挖掘和分析以解决城市交通拥塞问题成为了关键。
发明内容
针对现有技术的不足,本发明所解决的技术问题是如何对海量数据进行快速聚类,以及通过利用现有的聚类算法加以改进,同时利用现有的大数据处理平台通过处理海量轨迹数据并运用算法计算出城市交通拥堵源。
为解决上述技术问题,本发明采用的技术方案是一种基于spark集群并行化计算的交通拥堵点发现方法,包括如下步骤:
(一)对海量数据的预处理,包括补全轨迹点间的误差以及区域内一段时间内轨迹点冗余,具体过程如下:
扫描所有数据源,将数据提取到Spark集群的RDD中得到数据集U;对数据进行分割,将分割后的数据分布到节点上得到数据集集合{U1,U2,U3…Un},各个节点把数据集集合分配给Map函数,Map函数中调用一个截取函数,截取每条数据的后三个数据字段得到时间戳T、经度值Long和纬度值Lat;将得到的新数据Map函数设置一个时间段值Tx、两点距离数值Dis1和Dis2(其中Dis1<Dis2);选取Map函数任意一条数据,设两条数据的时间戳分别为T1,T2,其对应经纬度值为(Long1,Lat1)、(Long2,Lat2),恒有T1-T2<Tx,且
则两条数据为相似数据,删除其中任意一条数据;遍历Map,直到所有数据处理完毕,得到一个新的Map函数;在这个新的Map函数设立一个值n,任意选取Map中的一条数据,假设其经纬度值为Long、Lat,则有Long’=Long*n,Lat’=Lat*n,其中Long’,Lat’为新的轨迹点坐标值,如此循环直到所有数据遍历计算完为止,具体步骤如下:
(1)将所有的原始数据存储到spark集群的RDD上,得到数据集U;
(2)遍历RDD上的数据集U,进行分割,将分割后的数据集集合U{U1,U2,U3…Un}分配到集群中的每个节点上,遍历数据,截取每条数据字段,只保留经纬度坐标(Long,Lat)和时间(T);
(3)对RDD数据集集合U{U1,U2,U3…Un}进行遍历,在数据集合的Map函数设置一个时间段值Tx和两点距离数值Dis1和Dis2(其中Dis1<Dis2);读取数据集合中的两条数据,设两条数据的时间戳分别为T1,T2,对应经纬度值为(Long1,Lat1)、(Long2,Lat2),恒有T1-T2<Tx,且
则两条数据为相似数据,删除其中一条数据,直到所有数据遍历完毕,将处理完毕的数据保存到一个新的Map函数中;
(4)在这个新的Map函数中设立一个值n(n∈N*),任意选取一条数据,设其经纬度值为(Long、Lat),则有Long’=Long*n,Lat’=Lat*n,其中Long’,Lat’为新的轨迹点坐标值,遍历所有数据,直到数据处理完毕。
(二)采用网格-均值聚类算法聚类得到目标多个数据样本,具体过程如下:
Spark集群节点读取RDD分片数据,把数据分配到Map函数中,初始化网格G,网格个数为n*n;设置轨迹网格化阈值(Lx,Ly)、网格密度阈值k,则有:
U1={(Long1,Lat1),(Long2,Lat2),(Long3,Lat3)…(LongN,LatN)},
其中U1为轨迹数据集、(LongN,LatN)为轨迹点经纬度值;
直到所有轨迹点网格化完毕,得到每个网格坐标点G(x,y)的网格密度d,如果有:
d<k
则该网格点不为密集点,删除;否则该网格点为密集点并保存到新的Map函数;将得到的网格密集点Map函数坐标进行K-means++聚类,设聚类样本值为m,m和Spark集群节点数相同,然后将聚类得到的m个样本分配到集群每个节点上,具体分步骤如下:
(1)读取已经预处理好的轨迹点经纬度值到新的RDD;
(2)将既定地图区域内的地图化为单位长度相同的n*n个网格,并把RDD中的轨迹点映射到相应坐标的网格中,轨迹点网格化算法如下:
设(LongN,LatN)为原始轨迹经纬度,则:
(3)遍历所有网格,过滤掉区域密度小于k(k为设定的阈值)的网格,每个网格坐标点G(x,y)的网格密度d,如果有:
d<k
则该网格点为密度稀疏点,删除;否则该网格点为密集点并保存到新的Map函数中;
(4)使用k-means++聚类算法聚类Map函数中的网格,聚类中心选择m个,得到m个数据集样本,并分别把网格坐标和轨迹点分配到集群节点RDD中。
所述网格K-means++聚类算法步骤如下:
1)从数据集中随机选取一个样本点即(网格坐标点)作为初始聚类中心C1;
2)计算每个网格坐标点(Xn,Yn)与当前已有聚类中心(X,Y)之间的最短距离即最近的聚类中心的距离,则:
3)重复步骤2)直到选择出m个聚类中心;
4)针对数据集中每个网格坐标点(Xn,Yn),计算它到m个聚类中心点的距离并将其分配到距离最小的聚类中心所对应的类中;
5)重新计算每个有变化的聚类的均值即中心对象;
6)重复步骤4)、步骤5),直到聚类中心不在发生变化
(三)采用邻域最大密度网格聚类算法,spark集群节点并行分别计算每个数据样本,寻找出每个网格邻域最大密度网格点并聚类,得到城市交通热门路网模型,具体过程如下:
spark集群每个节点单独提取不同分片轨迹数据和网格坐标,并对网格坐标再一次网格化,把一个网格重新划分成n个小网格,其中n为自定义值,设原始网格坐标为G(Xn,Yn),则划分后的网格坐标为G(Xn’,Yn’):
Xn’=(Xn–Lx)/n;Yn’=(Yn–Ly)/n
其中Lx,Ly为第一次网格化设定的阈值,则重新划分后的坐标为G(Xn’,Yn’);
所述邻域网格最大密度聚类算法:将重新网格化后的坐标集合分配到Map函数中,选取任意一个网格密度大于阈值的坐标点G(Xn,Yn)作为聚类中心,搜索周围网格并找到最大密度网格(聚类中心除外)为下一个聚类中心,计算该最大密度网格与G(Xn,Yn)的夹角,如果该夹角介于45°和145°之间,则我们把与该聚类中心横坐标相同的网格合并到该聚类中心,否则将纵坐标相同的网格合并到聚类中心网格,遍历所有网格,直到所有网格聚类完毕,其具体步骤如下:
(1)spark集群每个节点单独提取不同分片轨迹数据和网格坐标,并对网格坐标再一次网格化,把一个网格重新划分成n(n为自定义值)个小网格;网格化算法如下:把一个网格重新划分成n(n为自定义值)个小网格,设原始网格坐标为G(Xn,Yn),则划分后的网格坐标为G(Xn’,Yn’):
Xn’=(Xn–Lx)/n;Yn’=(Yn–Ly)/n;
其中Lx,Ly为第一次网格化设定的阈值,则重新划分后的坐标为G(Xn’,Yn’);
(2)遍历分片轨迹数据,并把单位化后的轨迹数据,存入对应坐标的网格中,在单位化后的轨迹数据坐标(Xn’,Yn’)中,必定有与之相对应的网格坐标G(Xn’,Yn’),则有(Xn’,Yn’)∈G(Xn’,Yn’);
(3)选取任意一定区域内一个网格密度大于阈值的坐标点G(Xn,Yn)作为聚类中心,搜索周围网格并找到最大密度网格(聚类中心除外)为下一个聚类中心,计算该最大密度网格与G(Xn,Yn)的夹角,如果该夹角介于45°和145°之间,则我们把与该聚类中心横坐标相同的网格合并到该聚类中心,否则将纵坐标相同的网格合并到聚类中心网格,遍历所有网格,直到所有网格聚类完毕,保存到集群的新RDD中,计算方法如下:
选取任意一定区域内一个网格密度大于阈值的坐标点G(Xn,Yn)作为聚类中心,设网格密度为Den1,选取其周围网格坐标集合U{(Xn-1,Yn-1),(Xn,Yn-1),(Xn+1,Yn-1),(Xn-1,Yn),(Xn+1,Yn),(Xn-1,Yn+1),(Xn,Yn+1),(Xn+1,Yn+1)};选取集合U中最大密度网格坐标为(X,Y),其网格密度为Den2,计算他们之间的夹角:
如果:θ∈(45~145)则有{(Xn,Yn-1),(Xn,Yn+1)}∈G(Xn,Yn)
否则:{(Xn-1,Yn),(Xn+1,Yn)}∈G(Xn,Yn);
分配G(Xn,Yn)到新的Map函数,遍历所有的网格,得到邻域最大密度集合Den{Den1,Den2 Den3…Denn}。
(四)采用邻域密度差算法,通过spark集群并行化计算出相邻网格密度差,得到交通拥堵点,并将得到的结果保存在spark内存中,具体过程如下:
每个节点计算出邻域最大密度集合Den前后两个密度的差值dif,有:
dif=Den1-Den2
直到所有集合元素计算完毕,得到邻域最大密度差值dif的Map函数,设定密度差阈值Dif,如果有:
dif>Dif
则保存该网格坐标点到新的Map函数,直到遍历完所有邻域最大密度差值dif的Map函数;在新的Map函数中,设定搜索范围阈值r,夹角θ,权值k;计算分步骤如下:
(1)选取任意一个dif对应的网格坐标点,在r范围内搜素,如果不存在其他dif对应的网格坐标点,则保存该网格坐标点到新的Map函数中,否则进行下一步;
(2)计算r范围内的所有dif对应的网格坐标点之间的夹角θ',如果有:θ'<θ
则保存该网格坐标点到新的Map函数中,否则进行下一步;
(3)dif对应的网格密度乘以权值k,得到dif’,如果有
dif>Dif
则保存该网格坐标点到新的Map函数中,否则删除该网格点;
(4)重复分步骤(1)、(2)、(3),直到所有的dif的Map函数遍历完毕,具体如下:
1)遍历聚类结果得到的网格,选取分片中任意一个网格为起点,计算它与下一个聚类中心网格的密度差,将计算结果保存到新的RDD中,计算出邻域最大密度集合Den前后两个密度的差值dif,有:
dif=Den1-Den2
直到所有集合元素计算完毕,得到邻域最大密度差值dif的Map函数,设定密度差阈值Dif,如果有:
dif>Dif
则保存该网格坐标点到新的Map函数,直到遍历完所有邻域最大密度值dif的Map函数;
2)提取相邻网格密度差计算结果的RDD,遍历筛选出密度差大于阈值Dif(Dif为根据实际轨迹点数设定的阈值)的网格点,任意选取某一网格为中心,搜索以它为中心,半径为r范围;如果在该范围内出现其他超过阈值的网格,则计算他们相互的夹角,否则保存该网格点坐标到Map函数;如果两两之间的夹角超过θ度,则他们的密度差分别乘以一个权值k并再次与Dif进行比较,否则保存该网格点坐标到Map函数;乘以权值k后的数值如果仍然大于Dif,则保存该网格点坐标到Map函数,否则删除该点;
3)遍历所有计算出的相邻密度差结果的Map函数,筛选出超出阈值Dif的网格,保存到新的RDD中,这些网格点即为城市交通拥堵点。
与现有技术相比,采用本发明的技术方案有益效果:
(1)通过网格和均值实现联合聚类,基于Spark弹性数据集计算,能够对海量数据快速聚类;
(2)通过kmeans++聚类把海量数据分成多个数据集,并实现Spark集群节点单独处理每个样本,提高海量数据的处理效率;
(3)通过最大邻域网格聚类算法得到城市交通热门路网模型,将每条路段平均划分成长度相同的片段;
(4)在网格和均值联合聚类的基础上,采用相邻网格密度差算法和交叉路口算法实现了城市交通拥堵源区域的快速发现。其中交叉路口算法不仅能够发现而且消除了交通信号灯的路况轨迹数据对本发明算法结果的影响。
附图说明
图1为本发明流程示意图;
图2为基于spark集群并行化计算的数据预处理流程图;
图3为spark集群并行化计算的网格-Kmeans++算法流程图;
图4为spark集群并行化计算的邻域网格聚类算法流程图;
图5为spark集群并行化计算的邻域密度差算法流程图。
具体实施方式
下面结合附图对本发明的具体实施方式作进一步的说明,但不是对本发明的限定。
图1示出了一种基于spark集群并行化计算的交通拥堵点发现方法,包括如下步骤:
(一)对海量数据的预处理,包括补全轨迹点间的误差以及区域内一段时间内轨迹点冗余,具体过程如下:
扫描所有数据源,将数据提取到Spark集群的RDD中得到数据集U;对数据进行分割,将分割后的数据分布到节点上得到数据集集合{U1,U2,U3…Un},各个节点把数据集集合分配给Map函数,Map函数中调用一个截取函数,截取每条数据的后三个数据字段得到时间戳T、经度值Long和纬度值Lat;将得到的新数据Map函数设置一个时间段值Tx、两点距离数值Dis1和Dis2(其中Dis1<Dis2);选取Map函数任意一条数据,设两条数据的时间戳分别为T1,T2,其对应经纬度值为(Long1,Lat1)、(Long2,Lat2),恒有T1-T2<Tx,且
则两条数据为相似数据,删除其中任意一条数据;遍历Map,直到所有数据处理完毕,得到一个新的Map函数;在这个新的Map函数设立一个值n,任意选取Map中的一条数据,假设其经纬度值为Long、Lat,则有Long’=Long*n,Lat’=Lat*n,其中Long’,Lat’为新的轨迹点坐标值,如此循环直到所有数据遍历计算完为止,具体步骤如图2所示:
(1)将所有的原始数据存储到spark集群的RDD上,得到数据集U;
(2)遍历RDD上的数据集U,进行分割,将分割后的数据集集合U{U1,U2,U3…Un}分配到集群中的每个节点上,遍历数据,截取每条数据字段,只保留经纬度坐标(Long,Lat)和时间(T);
(3)对RDD数据集集合U{U1,U2,U3…Un}进行遍历,在数据集合的Map函数设置一个时间段值Tx和两点距离数值Dis1和Dis2(其中Dis1<Dis2);读取数据集合中的两条数据,设两条数据的时间戳分别为T1,T2,对应经纬度值为(Long1,Lat1)、(Long2,Lat2),恒有T1-T2<Tx,且
则两条数据为相似数据,删除其中一条数据,直到所有数据遍历完毕,将处理完毕的数据保存到一个新的Map函数中;
(4)在这个新的Map函数中设立一个值n(n∈N*),任意选取一条数据,设其经纬度值为(Long、Lat),则有Long’=Long*n,Lat’=Lat*n,其中Long’,Lat’为新的轨迹点坐标值,遍历所有数据,直到数据处理完毕。
(二)采用网格-均值聚类算法聚类得到目标多个数据样本,具体过程如下:
Spark集群节点读取RDD分片数据,把数据分配到Map函数中,初始化网格G,网格个数为n*n;设置轨迹网格化阈值(Lx,Ly)、网格密度阈值k,则有:
U1={(Long1,Lat1),(Long2,Lat2),(Long3,Lat3)…(LongN,LatN)},
其中U1为轨迹数据集、(LongN,LatN)为轨迹点经纬度值;
直到所有轨迹点网格化完毕,得到每个网格坐标点G(x,y)的网格密度d,如果有:
d<k
则该网格点不为密集点,删除;否则该网格点为密集点并保存到新的Map函数;将得到的网格密集点Map函数坐标进行K-means++聚类,设聚类样本值为m,m和Spark集群节点数相同,然后将聚类得到的m个样本分配到集群每个节点上,具体分步骤如图3所示:
(1)读取已经预处理好的轨迹点经纬度值到新的RDD;
(2)将既定地图区域内的地图化为单位长度相同的n*n个网格,并把RDD中的轨迹点映射到相应坐标的网格中,轨迹点网格化算法如下:
设(LongN,LatN)为原始轨迹经纬度,则:
(3)遍历所有网格,过滤掉区域密度小于k(k为设定的阈值)的网格,每个网格坐标点G(x,y)的网格密度d,如果有:
d<k
则该网格点为密度稀疏点,删除;否则该网格点为密集点并保存到新的Map函数中;
(4)使用k-means++聚类算法聚类Map函数中的网格,聚类中心选择m个,得到m个数据集样本,并分别把网格坐标和轨迹点分配到集群节点RDD中。
所述网格K-means++聚类算法步骤如下:
1)从数据集中随机选取一个样本点即(网格坐标点)作为初始聚类中心C1;
2)计算每个网格坐标点(Xn,Yn)与当前已有聚类中心(X,Y)之间的最短距离即最近的聚类中心的距离,则:
3)重复步骤2)直到选择出m个聚类中心;
4)针对数据集中每个网格坐标点(Xn,Yn),计算它到m个聚类中心点的距离并将其分配到距离最小的聚类中心所对应的类中;
5)重新计算每个有变化的聚类的均值即中心对象;
6)重复步骤4)、步骤5),直到聚类中心不在发生变化
(三)采用邻域最大密度网格聚类算法,spark集群节点并行分别计算每个数据样本,寻找出每个网格邻域最大密度网格点并聚类,得到城市交通热门路网模型,具体过程如下:
spark集群每个节点单独提取不同分片轨迹数据和网格坐标,并对网格坐标再一次网格化,把一个网格重新划分成n个小网格,其中n为自定义值,设原始网格坐标为G(Xn,Yn),则划分后的网格坐标为G(Xn’,Yn’):
Xn’=(Xn–Lx)/n;Yn’=(Yn–Ly)/n
其中Lx,Ly为第一次网格化设定的阈值,则重新划分后的坐标为G(Xn’,Yn’);
所述邻域网格最大密度聚类算法:将重新网格化后的坐标集合分配到Map函数中,选取任意一个网格密度大于阈值的坐标点G(Xn,Yn)作为聚类中心,搜索周围网格并找到最大密度网格(聚类中心除外)为下一个聚类中心,计算该最大密度网格与G(Xn,Yn)的夹角,如果该夹角介于45°和145°之间,则把与该聚类中心横坐标相同的网格合并到该聚类中心,否则将纵坐标相同的网格合并到聚类中心网格,遍历所有网格,直到所有网格聚类完毕,其具体步骤如下如图4所示:
(1)spark集群每个节点单独提取不同分片轨迹数据和网格坐标,并对网格坐标再一次网格化,把一个网格重新划分成n(n为自定义值)个小网格;网格化算法如下:把一个网格重新划分成n(n为自定义值)个小网格,设原始网格坐标为G(Xn,Yn),则划分后的网格坐标为G(Xn’,Yn’):
Xn’=(Xn–Lx)/n;Yn’=(Yn–Ly)/n;
其中Lx,Ly为第一次网格化设定的阈值,则重新划分后的坐标为G(Xn’,Yn’);
(2)遍历分片轨迹数据,并把单位化后的轨迹数据,存入对应坐标的网格中,在单位化后的轨迹数据坐标(Xn’,Yn’)中,必定有与之相对应的网格坐标G(Xn’,Yn’),则有(Xn’,Yn’)∈G(Xn’,Yn’);
(3)选取任意一定区域内一个网格密度大于阈值的坐标点G(Xn,Yn)作为聚类中心,搜索周围网格并找到最大密度网格(聚类中心除外)为下一个聚类中心,计算该最大密度网格与G(Xn,Yn)的夹角,如果该夹角介于45°和145°之间,则把与该聚类中心横坐标相同的网格合并到该聚类中心,否则将纵坐标相同的网格合并到聚类中心网格,遍历所有网格,直到所有网格聚类完毕,保存到集群的新RDD中,计算方法如下:
选取任意一定区域内一个网格密度大于阈值的坐标点G(Xn,Yn)作为聚类中心,设网格密度为Den1,选取其周围网格坐标集合U{(Xn-1,Yn-1),(Xn,Yn-1),(Xn+1,Yn-1),(Xn-1,Yn),(Xn+1,Yn),(Xn-1,Yn+1),(Xn,Yn+1),(Xn+1,Yn+1)};选取集合U中最大密度网格坐标为(X,Y),其网格密度为Den2,计算他们之间的夹角:
如果:θ∈(45~145)则有{(Xn,Yn-1),(Xn,Yn+1)}∈G(Xn,Yn)
否则:{(Xn-1,Yn),(Xn+1,Yn)}∈G(Xn,Yn);
分配G(Xn,Yn)到新的Map函数,遍历所有的网格,得到邻域最大密度集合Den{Den1,Den2 Den3…Denn}。
(四)采用邻域密度差算法,通过spark集群并行化计算出相邻网格密度差,得到交通拥堵点,并将得到的结果保存在spark内存中,具体过程如下:
每个节点计算出邻域最大密度集合Den前后两个密度的差值dif,有:
dif=Den1-Den2
直到所有集合元素计算完毕,得到邻域最大密度差值dif的Map函数,设定密度差阈值Dif,如果有:
dif>Dif
则保存该网格坐标点到新的Map函数,直到遍历完所有邻域最大密度差值dif的Map函数;在新的Map函数中,设定搜索范围阈值r,夹角θ,权值k;计算分步骤如图5所示:
(1)选取任意一个dif对应的网格坐标点,在r范围内搜素,如果不存在其他dif对应的网格坐标点,则保存该网格坐标点到新的Map函数中,否则进行下一步;
(2)计算r范围内的所有dif对应的网格坐标点之间的夹角θ',如果有:θ'<θ
则保存该网格坐标点到新的Map函数中,否则进行下一步;
(3)dif对应的网格密度乘以权值k,得到dif’,如果有
dif>Dif
则保存该网格坐标点到新的Map函数中,否则删除该网格点;
(4)重复分步骤(1)、(2)、(3),直到所有的dif的Map函数遍历完毕,具体如下:
1)遍历聚类结果得到的网格,选取分片中任意一个网格为起点,计算它与下一个聚类中心网格的密度差,将计算结果保存到新的RDD中,计算出邻域最大密度集合Den前后两个密度的差值dif,有:
dif=Den1-Den2
直到所有集合元素计算完毕,得到邻域最大密度差值dif的Map函数,设定密度差阈值Dif,如果有:
dif>Dif
则保存该网格坐标点到新的Map函数,直到遍历完所有邻域最大密度值dif的Map函数;
2)提取相邻网格密度差计算结果的RDD,遍历筛选出密度差大于阈值Dif(Dif为根据实际轨迹点数设定的阈值)的网格点,任意选取某一网格为中心,搜索以它为中心,半径为r范围;如果在该范围内出现其他超过阈值的网格,则计算他们相互的夹角,否则保存该网格点坐标到Map函数;如果两两之间的夹角超过θ度,则他们的密度差分别乘以一个权值k并再次与Dif进行比较,否则保存该网格点坐标到Map函数;乘以权值k后的数值如果仍然大于Dif,则保存该网格点坐标到Map函数,否则删除该点;
3)遍历所有计算出的相邻密度差结果的Map函数,筛选出超出阈值Dif的网格,保存到新的RDD中,这些网格点即为城市交通拥堵点。
与现有技术相比,采用本发明的技术方案有益效果:
(1)通过网格和均值实现联合聚类,基于Spark弹性数据集计算,能够对海量数据快速聚类;
(2)通过kmeans++聚类把海量数据分成多个数据集,并实现Spark集群节点单独处理每个样本,提高海量数据的处理效率;
(3)通过最大邻域网格聚类算法得到城市交通热门路网模型,将每条路段平均划分成长度相同的片段;
(4)在网格和均值联合聚类的基础上,采用相邻网格密度差算法和交叉路口算法实现了城市交通拥堵源区域的快速发现。其中交叉路口算法不仅能够发现而且消除了交通信号灯的路况轨迹数据对本发明算法结果的影响。
(5)本发明方法对整个城市的交通进行计算和分析,从而得到整个城市交通的拥堵点,为城市改善交通状况做出有利参考。
以上结合附图对本发明的实施方式做出了详细说明,但本发明不局限于所描述的实施方式。对于本领域技术人员而言,在不脱离本发明的原理和精神的情况下,对这些实施方式进行各种变化、修改、替换和变型仍落入本发明的保护范围内。
Claims (6)
1.一种基于spark集群并行化计算的交通拥堵点发现方法,其特征在于,包括如下步骤:
(一)对海量数据的预处理,包括补全轨迹点间的误差以及区域内一段时间内轨迹点冗余;
(二)采用网格-均值聚类算法聚类得到目标多个数据样本;
(三)采用邻域最大密度网格聚类算法,spark集群节点并行分别计算每个数据样本,寻找出每个邻域最大密度网格点并聚类,得到城市交通热门路网模型;所述邻域最大密度网格聚类算法:将重新网格化后的坐标集合分配到Map函数中,选取任意一个网格密度大于阈值的坐标点G(Xn,Yn)作为聚类中心,搜索周围网格并找除聚类中心外的最大密度网格为下一个聚类中心,计算该最大密度网格与G(Xn,Yn)的夹角,如果该夹角介于45°和145°之间,则把与该聚类中心横坐标相同的网格合并到该聚类中心,否则将纵坐标相同的网格合并到聚类中心网格,遍历所有网格,直到所有网格聚类完毕,其具体步骤如下:
(1)spark集群每个节点单独提取不同分片轨迹数据和网格坐标,并对网格坐标再一次网格化,把一个网格重新划分成n个小网格,n为自定义值;网格化算法如下:把一个网格重新划分成n个小网格,n为自定义值,设原始网格坐标为G(Xn,Yn),则划分后的网格坐标为G(Xn’,Yn’):
Xn’=(Xn–Lx)/n;Yn’=(Yn–Ly)/n;
其中Lx,Ly为第一次网格化设定的阈值,则重新划分后的坐标为G(Xn’,Yn’);
(2)遍历分片轨迹数据,并把单位化后的轨迹数据,存入对应坐标的网格中,在单位化后的轨迹数据坐标(Xn’,Yn’)中,必定有与之相对应的网格坐标G(Xn’,Yn’),则有(Xn’,Yn’)∈G(Xn’,Yn’);
(3)选取任意一定区域内一个网格密度大于阈值的坐标点G(Xn,Yn)作为聚类中心,搜索周围网格并找到除聚类中心外的最大密度网格为下一个聚类中心,计算该最大密度网格与G(Xn,Yn)的夹角,如果该夹角介于45°和145°之间,则把与该聚类中心横坐标相同的网格合并到该聚类中心,否则将纵坐标相同的网格合并到聚类中心网格,遍历所有网格,直到所有网格聚类完毕,保存到集群的新RDD中,计算方法如下:
选取任意一定区域内一个网格密度大于阈值的坐标点G(Xn,Yn)作为聚类中心,设网格密度为Den1,选取其周围网格坐标集合U{(Xn-1,Yn-1),(Xn,Yn-1),(Xn+1,Yn-1),(Xn-1,Yn),(Xn+1,Yn),(Xn-1,Yn+1),(Xn,Yn+1),(Xn+1,Yn+1)};选取集合U中最大密度网格坐标为(X,Y),其网格密度为Den2,计算他们之间的夹角:
如果:θ∈(45°~145°)则有{(Xn,Yn-1),(Xn,Yn+1)}∈G(Xn,Yn)
否则:{(Xn-1,Yn),(Xn+1,Yn)}∈G(Xn,Yn);
分配G(Xn,Yn)到新的Map函数,遍历所有的网格,得到邻域最大密度集合Den{Den1,Den2Den3…Denn};
(四)采用邻域密度差算法,通过spark集群并行化计算出相邻网格密度差,得到交通拥堵点,并将得到的结果保存在spark内存中。
2.如权利要求1所述的基于spark集群并行化计算的交通拥堵点发现方法算法,其特征在于,步骤(一)具体过程如下:
扫描所有数据源,将数据提取到Spark集群的RDD中得到数据集U;对数据进行分割,将分割后的数据分布到节点上得到数据集集合{U1,U2,U3…Un},各个节点把数据集集合分配给Map函数,Map函数中调用一个截取函数,截取每条数据的后三个数据字段得到时间戳T、经度值Long和纬度值Lat;将得到的新数据Map函数设置一个时间段值Tx、两点距离值Dis1和Dis2,其中Dis1<Dis2;选取Map函数任意两条数据,设两条数据的时间戳分别为T1,T2,其对应的经纬度值分别为(Long1,Lat1)、(Long2,Lat2),恒有T1-T2<Tx,且
则两条数据为相似数据,删除其中一条数据;遍历Map,直到所有数据处理完毕,得到一个新的Map函数;在这个新的Map函数中设立一个值n,n∈N*任意选取Map中的一条数据,假设其经纬度值为Long、Lat,则有Long’=Long*n,Lat’=Lat*n,其中Long’,Lat’为新的轨迹点坐标值,如此循环直到所有数据遍历计算完为止,具体步骤如下:
(1)将所有的原始数据存储到spark集群的RDD上,得到数据集U;
(2)遍历RDD上的数据集U,进行分割,将分割后的数据集集合U{U1,U2,U3…Un}分配到集群中的每个节点上,遍历数据,截取每条数据字段,只保留经纬度坐标(Long,Lat)和时间(T);
(3)对RDD数据集集合U{U1,U2,U3…Un}进行遍历,在数据集合的Map函数设置一个时间段值Tx和两点距离数值Dis1和Dis2,其中Dis1<Dis2;读取Map中的任意两条数据,设这两条数据的时间戳分别为T1,T2,对应经纬度值为(Long1,Lat1)、(Long2,Lat2),恒有T1-T2<Tx,且
则两条数据为相似数据,删除其中一条数据,直到所有数据遍历完毕,将处理完毕的数据保存到一个新的Map函数中;
(4)在这个新的Map函数中设立一个值n,n∈N*,任意选取一条数据,设其经纬度值为(Long,Lat),则有Long’=Long*n,Lat’=Lat*n,其中Long’,Lat’为新的轨迹点坐标值,遍历所有数据,直到数据处理完毕。
3.如权利要求1所述的基于spark集群并行化计算的交通拥堵点发现方法,其特征在于,步骤(二)具体过程如下:
Spark集群节点读取RDD分片数据,把数据分配到Map函数中,初始化网格G,网格个数为n*n;设置轨迹网格化阈值(Lx,Ly)、网格密度阈值k,则有:
U1={(Long1,Lat1),(Long2,Lat2),(Long3,Lat3)…(LongN,LatN)},
其中U1为轨迹数据集、(LongN,LatN)为轨迹点经纬度值;
直到所有轨迹点网格化完毕,得到每个网格坐标点G(x,y)的网格密度d,如果有:
d<k
则该网格点不为密集点,删除;否则该网格点为密集点并保存到新的Map函数;将得到的网格密集点Map函数坐标进行K-means++聚类,设聚类样本值为m,m和Spark集群节点数相同,然后将聚类得到的m个样本分配到集群每个节点上,具体分步骤如下:
(1)读取已经预处理好的轨迹点经纬度值到新的RDD;
(2)将既定地图区域内的地图化为单位长度相同的n*n个网格,并把RDD中的轨迹点映射到相应坐标的网格中,轨迹点网格化算法如下:
设(LongN,LatN)为原始轨迹经纬度,则:
(3)遍历所有网格,过滤掉区域密度小于k的网格,k为设定的阈值,每个网格坐标点G(x,y)的网格密度d,如果有:
d<k
则该网格点为密度稀疏点,删除;否则该网格点为密集点并保存到新的Map函数中;
(4)使用k-means++聚类算法聚类Map函数中的网格,聚类中心选择m个,得到m个数据集样本,并分别把网格坐标和轨迹点分配到集群节点RDD中。
4.如权利要求3所述的基于spark集群并行化计算的交通拥堵点发现方法,其特征在于,步骤(二)分步骤(4)中,所述网格K-means++聚类算法步骤如下:
1)从数据集中随机选取一个样本点,即网格坐标点,作为初始聚类中心C1;
2)计算每个网格坐标点(Xn,Yn)与当前已有聚类中心(X,Y)之间的最短距离即最近的聚类中心的距离,则:
3)重复步骤2)直到选择出m个聚类中心;
4)针对数据集中每个网格坐标点(Xn,Yn),计算它到m个聚类中心点的距离并将其分配到距离最小的聚类中心所对应的类中;
5)重新计算每个有变化的聚类的均值即中心对象;
6)重复步骤4)、步骤5),直到聚类中心不在发生变化。
5.如权利要求1所述的基于spark集群并行化计算的交通拥堵点发现方法,其特征在于,步骤(三)具体过程如下:
spark集群每个节点单独提取不同分片轨迹数据和网格坐标,并对网格坐标再一次网格化,把一个网格重新划分成n个小网格,其中n为自定义值,设原始网格坐标为G(Xn,Yn),则划分后的网格坐标为G(Xn’,Yn’):
Xn’=(Xn–Lx)/n;Yn’=(Yn–Ly)/n
其中Lx,Ly为第一次网格化设定的阈值,则重新划分后的坐标为G(Xn’,Yn’)。
6.如权利要求1所述的基于spark集群并行化计算的交通拥堵点发现方法,其特征在于,步骤(四)中,具体过程如下:
每个节点计算出邻域最大密度集合Den前后两个密度的差值dif,有:
dif=Den1-Den2
直到所有集合元素计算完毕,得到邻域最大密度差值dif的Map函数,设定密度差阈值Dif,如果有:
dif>Dif
则保存网格坐标点到新的Map函数,直到遍历完所有邻域最大密度差值dif的Map函数;在新的Map函数中,设定搜索范围阈值r,夹角θ,权值k;计算分步骤如下:
(1)选取任意一个dif对应的网格坐标点,在r范围内搜素,如果不存在其他dif对应的网格坐标点,则保存该网格坐标点到新的Map函数中,否则进行下一步;
(2)计算r范围内的所有dif对应的网格坐标点之间的夹角θ',如果有:
θ'<θ
则保存该网格坐标点到新的Map函数中,否则进行下一步;
(3)dif对应的网格密度乘以权值k,得到dif’,如果有
dif>Dif
则保存该网格坐标点到新的Map函数中,否则删除该网格点;
(4)重复分步骤(1)、(2)、(3),直到所有的dif的Map函数遍历完毕,具体如下:
1)遍历聚类结果得到的网格,选取分片中任意一个网格为起点,计算它与下一个聚类中心网格的密度差,将计算结果保存到新的RDD中,计算出邻域最大密度集合Den前后两个密度的差值dif,有:
dif=Den1-Den2
直到所有集合元素计算完毕,得到邻域最大密度差值dif的Map函数,设定密度差阈值Dif,如果有:
dif>Dif
则保存该网格坐标点到新的Map函数,直到遍历完所有邻域最大密度值dif的Map函数;
2)提取相邻网格密度差计算结果的RDD,遍历筛选出密度差大于阈值Dif的网格点,Dif为根据实际轨迹点数设定的阈值,任意选取某一网格为中心,搜索以它为中心,半径为r范围;如果在该范围内出现其他超过阈值的网格,则计算他们相互的夹角,否则保存该网格点坐标到Map函数;如果两两之间的夹角超过θ度,则他们的密度差分别乘以一个权值k并再次与Dif进行比较,否则保存该网格点坐标到Map函数;乘以权值k后的数值如果仍然大于Dif,则保存该网格点坐标到Map函数,否则删除该点;
3)遍历所有计算出的相邻密度差结果的Map函数,筛选出超出阈值Dif的网格,保存到新的RDD中,这些网格点即为城市交通拥堵点。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811632271.3A CN109739585B (zh) | 2018-12-29 | 2018-12-29 | 基于spark集群并行化计算的交通拥堵点发现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811632271.3A CN109739585B (zh) | 2018-12-29 | 2018-12-29 | 基于spark集群并行化计算的交通拥堵点发现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109739585A CN109739585A (zh) | 2019-05-10 |
CN109739585B true CN109739585B (zh) | 2022-02-18 |
Family
ID=66362183
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811632271.3A Active CN109739585B (zh) | 2018-12-29 | 2018-12-29 | 基于spark集群并行化计算的交通拥堵点发现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109739585B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110288044B (zh) * | 2019-07-01 | 2021-06-08 | 上海海事大学 | 一种基于轨迹划分与优先队列的轨迹简化方法 |
CN110851550B (zh) * | 2019-10-31 | 2023-04-28 | 武汉大学 | 路网约束下K函数的Spark并行计算方法 |
CN110851395B (zh) * | 2019-10-31 | 2023-09-29 | 武汉大学 | 路网约束下的空间自相关Spark并行计算方法 |
CN111797884A (zh) * | 2019-12-10 | 2020-10-20 | 青岛海信网络科技股份有限公司 | 一种基于聚类算法的快情报问题区域识别方法及装置 |
CN111190977A (zh) * | 2019-12-18 | 2020-05-22 | 福建工程学院 | 一种城市路网拓扑关键节点的发现方法和发现系统 |
CN111966767B (zh) * | 2020-06-28 | 2023-07-28 | 北京百度网讯科技有限公司 | 轨迹热力图生成方法、装置、电子设备和存储介质 |
CN112652170B (zh) * | 2020-12-24 | 2022-04-08 | 航天科工智能运筹与信息安全研究院(武汉)有限公司 | 交通拥堵热点的定位方法和装置 |
CN112925789B (zh) * | 2021-02-24 | 2022-12-20 | 东北林业大学 | 一种基于Spark的空间矢量数据内存存储查询方法及系统 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105261217A (zh) * | 2015-10-03 | 2016-01-20 | 上海大学 | 一种基于密度聚类算法的城市交通拥堵状态检测方法 |
CN107392239A (zh) * | 2017-07-11 | 2017-11-24 | 南京邮电大学 | 一种基于Spark计算模型的K‑Means算法优化方法 |
US9846887B1 (en) * | 2012-08-30 | 2017-12-19 | Carnegie Mellon University | Discovering neighborhood clusters and uses therefor |
CN107622085A (zh) * | 2017-08-11 | 2018-01-23 | 河海大学 | 一种基于网格和密度的自适应轨迹聚类方法 |
CN108427965A (zh) * | 2018-03-05 | 2018-08-21 | 重庆邮电大学 | 一种基于路网聚类的热点区域挖掘方法 |
CN108520284A (zh) * | 2018-04-17 | 2018-09-11 | 桂林电子科技大学 | 一种改进的谱聚类及并行化方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI396106B (zh) * | 2009-08-17 | 2013-05-11 | Univ Nat Pingtung Sci & Tech | 以格子為導向之資料分群方法 |
-
2018
- 2018-12-29 CN CN201811632271.3A patent/CN109739585B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9846887B1 (en) * | 2012-08-30 | 2017-12-19 | Carnegie Mellon University | Discovering neighborhood clusters and uses therefor |
CN105261217A (zh) * | 2015-10-03 | 2016-01-20 | 上海大学 | 一种基于密度聚类算法的城市交通拥堵状态检测方法 |
CN107392239A (zh) * | 2017-07-11 | 2017-11-24 | 南京邮电大学 | 一种基于Spark计算模型的K‑Means算法优化方法 |
CN107622085A (zh) * | 2017-08-11 | 2018-01-23 | 河海大学 | 一种基于网格和密度的自适应轨迹聚类方法 |
CN108427965A (zh) * | 2018-03-05 | 2018-08-21 | 重庆邮电大学 | 一种基于路网聚类的热点区域挖掘方法 |
CN108520284A (zh) * | 2018-04-17 | 2018-09-11 | 桂林电子科技大学 | 一种改进的谱聚类及并行化方法 |
Non-Patent Citations (5)
Title |
---|
GCMDDBSCAN: Multi-density DBSCAN Based on Grid and Contribution;Linmeng Zhang et al.;《2013 IEEE 11th International Conference on Dependable, Autonomic and Secure Computing》;20131222;全文 * |
Grid-based DBSCAN Algorithm with Referential Parameters;HuangDarong,WangPeng;《2012 International Conference on Applied Physics and Industrial Engineering》;20120302;第24卷;全文 * |
基于k-means++的多分类器选择分类研究;熊霖,唐万梅;《重庆师范大学学报(自然科学版)》;20181025;第35卷(第6期);全文 * |
基于网格的密度峰值聚类算法研究;滕建,乐红兵;《信息系统工程》;20181130(第11期);全文 * |
邻域密度网格聚类算法及应用;索明亮等;《清华大学学报(自然科学版)》;20180831;第58卷(第8期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN109739585A (zh) | 2019-05-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109739585B (zh) | 基于spark集群并行化计算的交通拥堵点发现方法 | |
CN108320511B (zh) | 基于谱聚类的城市道路交通子区划分方法 | |
CN108415975B (zh) | 基于bdch-dbscan的出租车载客热点识别方法 | |
CN110019568B (zh) | 基于空间聚类的选址方法、装置、计算机设备及存储介质 | |
CN106708989B (zh) | 基于空间时序数据流应用的Skyline查询方法 | |
Pavlis et al. | A modified DBSCAN clustering method to estimate retail center extent | |
CN111291776B (zh) | 基于众源轨迹数据的航道信息提取方法 | |
CN106777093B (zh) | 基于空间时序数据流应用的Skyline查询系统 | |
CN107169301B (zh) | 一种分而治之航迹关联方法 | |
CN112181991B (zh) | 基于快速构建kd树的地球模拟系统网格重映射方法 | |
CN108961758A (zh) | 一种基于梯度提升决策树的路口展宽车道探测方法 | |
CN112906812A (zh) | 基于带离群点去除的车辆轨迹聚类方法 | |
CN111460508A (zh) | 一种基于差分隐私技术的轨迹数据保护方法 | |
CN110906940A (zh) | 一种基于轨迹方向的车道边线聚合方法 | |
CN106845536A (zh) | 一种基于图像缩放的并行聚类方法 | |
CN110119408B (zh) | 地理空间实时流数据下移动对象连续查询方法 | |
CN110580323A (zh) | 基于割点分割机制的城市交通网络最大车流量的加速算法 | |
CN106570104B (zh) | 一种流数据的多分区聚类预处理方法 | |
CN112287247B (zh) | 基于Meanshift和K-means聚类的社交网络用户位置特征提取方法和装置 | |
CN113779105B (zh) | 分布式轨迹流伴随模式挖掘方法 | |
Cai et al. | The mining of urban hotspots based on multi-source location data fusion | |
CN110781943A (zh) | 一种基于毗邻网格搜索的聚类方法 | |
CN112288029A (zh) | 一种城市路网中车辆轨迹分类方法 | |
CN109800231B (zh) | 一种基于Flink的实时轨迹co-movement运动模式检测方法 | |
CN105678346B (zh) | 一种基于空间聚类的目标匹配检索方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP01 | Change in the name or title of a patent holder | ||
CP01 | Change in the name or title of a patent holder |
Address after: 530007 No. 6 hi-tech two road, XiXiangTang District, Nanning, the Guangxi Zhuang Autonomous Region Patentee after: Guangxi Jiaoke Group Co.,Ltd. Patentee after: Guilin University of Electronic Technology Address before: 530007 No. 6 hi-tech two road, XiXiangTang District, Nanning, the Guangxi Zhuang Autonomous Region Patentee before: GUANGXI TRANSPORTATION RESEARCH & CONSULTING Co.,Ltd. Patentee before: Guilin University of Electronic Technology |