将 Python 中的纬度经度点聚类为固定数量的聚类

Clustering latitude longitude points in Python with fixed number of clusters

kmeans 不适用于地理空间坐标 - 即使将距离函数更改为半正弦函数,如所述 here

我看了一下 DBSCAN 没有 不要让我设置固定数量的簇。

  1. 是否有任何算法(如果可能,在 python 中)具有与 kmeans 相同的输入值?或者
  2. 我可以轻松地将纬度、经度转换为欧几里德坐标 (x,y,z) 吗here并对我的数据进行计算?

不一定要非常准确,但如果可以的话就更好了。

你试过kmeans吗?链接问题中提出的问题似乎与接近 180 度的点有关。如果你的点都足够接近(例如在同一个城市或国家),那么 kmeans 可能适合你。

当您的地理数据跨越大片区域时,仅使用纬度和经度会导致出现问题。特别是因为经度之间的距离在两极附近较小。考虑到这一点,最好先将经度和纬度转换为笛卡尔坐标。

例如,如果您的地理数据跨越美国,您可以定义一个原点,从该原点计算距离作为连续美国的中心。我相信这是位于北纬 39 度 50 分和经度 98 度 35 分。

将经纬度转换为笛卡尔坐标 - 使用半正弦计算从数据集中的每个位置到定义的原点的距离。同样,我建议纬度 39 度 50 分钟和经度 98 度 35 分钟。

您可以在 python 中使用 haversine 来计算这些距离:

from haversine import haversine
origin = (39.50, 98.35)
paris = (48.8567, 2.3508)
haversine(origin, paris, miles=True)

现在您可以对这些数据使用 k-means 进行聚类,假设地球的 haversin 模型足以满足您的需要。如果你是做数据分析,不打算发射卫星,我觉得这个应该没问题。