Кластеризация траектории с использованием DBSCAN - PullRequest
1 голос
/ 09 мая 2020

Я пытаюсь определить путь по траекториям. У меня есть траектория с широтой, длинной точкой.

Вот мой код:

def clustersDBSCAN(data):
    from sklearn.cluster import DBSCAN
    a=data
    coords = a['Long']
    coords['Lat'] = a['Lat']
    coords = coords.to_numpy(coords)
    kms_per_radian = 6371.0088
    epsilon = 0.02 / kms_per_radian
    db = DBSCAN(eps=epsilon, min_samples=1, algorithm='ball_tree', metric='haversine').fit(np.radians(coords))
    cluster_labels = db.labels_
    a['clusters']=cluster_labels
    return a

Мой ввод - это DataFrame с некоторыми другими переменными. Когда я запускаю свою процедуру, возникает следующая ошибка:

Traceback (most recent call last):

  File "<ipython-input-160-1bb326319131>", line 19, in <module>
    TestEtude1 = clustersDBSCAN(TestEtude1)

  File "<ipython-input-160-1bb326319131>", line 14, in clustersDBSCAN
    db = DBSCAN(eps=epsilon, min_samples=1, algorithm='ball_tree', metric='haversine').fit(np.radians(coords))

TypeError: loop of ufunc does not support argument 0 of type float which has no callable radians method

EDIT :

Мои данные выглядят так:

Lat Long    Type de point
136701  53.87030526540526   7.305133353275677       1
136702  53.870307858385225  7.305140443133933       0
136703  53.87031363700621   7.305150308822018       0
136704  53.87031595061333   7.305142298625614       0
136705  53.87032064860515   7.305141557055512       0
136706  53.870326088345934  7.305156457965349       2
136707  53.87030945094248   7.305160487693352       1
136708  53.870349819652134  7.305194852863318       0
136709  53.870340745293994  7.305186559915658       0
136710  53.8702835623423    7.305181727204434       0

Тип точки 1 относится к началу траектории, а тип точки 2 относится к концу траектории. Между 1 и 2 есть тип 0 точек, которые являются промежуточными, отсортированными по временным точкам.

1 Ответ

1 голос
/ 09 мая 2020

Характеристики данных включают широту и долготу. Поскольку это фрейм данных pandas, вы можете нарезать функции, которые вы хотите использовать для выполнения кластеризации в этом случае.

Глядя на код, можно увидеть, что переданные функции неверны, вы можете сделать следующее:

Заменить np.radians(coords) на np.radians(data[["Lat","Long"]]) в fit() и это должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...