GeoPandas+Sklearn进行DBSCAN点聚类

一 从点数据(.shp)中获取坐标

思路:Geopandas处理,然后转为numpy数组
这一步花了很多时间,主要还是对python以及各种库的理解太浅。

  • 使用geopandas读取shp文件
  • 将shp文件中,点坐标的x、y抽取出来
  • x、y是两列geoserise对象,将其转变为numpy数组
  • 使用zip()函数将两列数组转变为坐标列表(我也不知道为什么需要先转成list)
  • 将list转变为二维numpy数组

代码实现如下:

from geopandas import GeoDataFrame
import numpy as np
from pandas import Series,DataFrame
# provincedata 为需要统计的点数据
provincedata =GeoDataFrame.from_file('E:\POI分析\chengdu\成都市POI数据\\汽车相关_point.shp')
X=provincedata.geometry.x
Y=provincedata.geometry.y
XX=np.array(X)
YY=np.array(Y)
z = list(zip(XX,YY))
zz=np.array(z)
print(zz)

结果:
GeoPandas+Sklearn进行DBSCAN点聚类_第1张图片

二、坐标显示

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
plt.scatter(zz[:,0],zz[:,1], marker='o')
plt.show()

GeoPandas+Sklearn进行DBSCAN点聚类_第2张图片

三、使用sklearn聚类

1)k-means聚类

from sklearn.cluster import KMeans
y_pred = KMeans(n_clusters=3, random_state=9).fit_predict(zz)
plt.scatter(zz[:, 0], zz[:, 1], c=y_pred)
plt.show()

GeoPandas+Sklearn进行DBSCAN点聚类_第3张图片

2)DBSCAN聚类

from sklearn.cluster import DBSCAN
y_pred = DBSCAN(eps = 0.01,min_samples=10).fit_predict(zz)
plt.scatter(zz[:, 0], zz[:, 1], c=y_pred)
plt.show()

GeoPandas+Sklearn进行DBSCAN点聚类_第4张图片

你可能感兴趣的:(Python学习)