У меня есть фрейм данных геопанды, который содержит многоугольник, region_id и center_point lat и lon в радианах, который выглядит следующим образом:
Затем я хотел объединить каждую область по их центральной точке и сделал следующее:
#Set Up
kms_per_radian = 6371.0088
eps = 0.1/kms_per_radian
coords = blocks_meta.as_matrix(columns=['lat', 'lon'])
#Cluster
from sklearn.cluster import DBSCAN
db = DBSCAN(eps=epsilon, algorithm='ball_tree', metric='haversine', min_samples=1).fit(coords)
labels = db.labels_
clusters = pd.Series([coords[labels == n] for n in range(len(set(labels)))])
, который дает массив кластеров центральных точек, который выглядит следующим образом.
array([[ 0.0703843 , 0.170845 ],
[ 0.07037922, 0.17084981],
[ 0.07036705, 0.17085678],
[ 0.0703715 , 0.17083775]])
То, что я пытаюсь выяснить, как это сделать, - это получить region_ids, связанные с каждым кластером, чтобы объединить многоугольники, чтобы создать одну большую область без циклического прохождения через каждый кластер и для каждой пары широты и долготы и запроса кадра данных.
Есть ли способ распространения идентификаторов или опроса данных для каждого кластера?
Любая помощь здесь будет оценена.
Спасибо!
EDIT
Чего я хочу избежать, так это:
clusters_of_regions = []
for cluster in clusters:
cluster_of_regions_ids = []
for entry in cluster:
print(cluster[0][0])
region_id = blocks_meta.loc[blocks_meta['lat'] == cluster[0][0]]['region_id'][1]
cluster_of_regions_ids.append(region_id)
clusters_of_regions.append(cluster_of_regions_ids)
И то, и другое, чтобы избежать вложенного цикла for - и когда я пытаюсь это сделать, я получаю ошибку ключа:
Есть ли способ кластеризации на самих регионах, используя центральные точки в качестве свойств.
Спасибо