2016-11-22 133 views
1

我有一组400k个地理点(经纬度),我试图对它进行聚类并将其绘制在地图上。目前我正在使用Folium包的MarkerCluster来可视化点的聚类。但是这似乎很慢,代码无限期地运行。在Python中对地理点进行聚类

想知道是否有任何其他Python包可以有效地用于此目的?

当前代码:

import folium 
from folium import plugins 
from IPython.display import Image, clear_output, display, HTML 

data = df[['StartLat','StartLong']].as_matrix() 
avgLat = df['StartLat'].mean() 
avgLong = df['StartLong'].mean() 

mapa = folium.Map([avgLat, avgLong], zoom_start=6) 
marker_cluster = folium.MarkerCluster().add_to(mapa) 
latArr = np.array(df.StartLat) 
lonArr = np.array(df.StartLong) 

for i in range(len(latArr)): 
     folium.Marker([latArr[i], lonArr[i]], icon = folium.Icon(color='green',icon='ok-sign')).add_to(marker_cluster) 
mapa.save('Clustering.html') 

回答

1

让我试着回答你的问题在2步:

  1. 你见过question here?它们也具有聚集大量地理坐标的相同问题。建议的解决方案使用从scipy.cluster

  2. 聚类算法但是,对于地理纬度。正常的聚类分析技术可能不太适合。这主要是因为从地球表面采集的点样品倾向于彼此相关(spatial autocorrelation)。因此,这些观点违反了古典统计中许多技术固有的独立性条款。因此,如果您坚持使用Python,我会建议您查看包clusterPylink here)。他们有几种常用于空间数据的集群算法实现。一些关于空间自相关的内容可能有助于理解某些算法通常需要考虑的因素(如距离带)。

+0

空间自相关是一回事。你需要测量(比如温度);然后这些测量值往往与附近的位置相关。如果你有一个常规的测量网格,这尤其适用......但是如果他只有坐标,那么诸如OPTICS或DBSCAN等集群就可以正常工作。点密度的概念确实适用。 –

+0

是的。只有当这些点代表地面上的某些值/测量值时,才应该使用空间聚类技术。否则,如果只有代表位置的纬度/长度值,正常的聚类技术可以正常工作。 – DotPi

相关问题