Я пытаюсь использовать функцию dbscan Склеарна для набора точечных данных. Набор точечных данных содержит данные маяка GPS для нескольких медведей. Я хочу применить функцию dbscan к каждому отдельному медведю. Для этого я использую метод pandas groupby ().
В конечном итоге я бы хотел получить исходный фрейм данных с новым столбцом для каждой метки кластера.
Проблема: я не могу понять, как объединить метки в объекте pandas.series с объектами groupby ().
Вот код:
import pandas as pd, numpy as np, matplotlib.pyplot as plt
from sklearn.cluster import DBSCAN
from geopy.distance import great_circle
from shapely.geometry import MultiPoint
df = pd.read_csv(r"D:\PolarBear.csv")
df.head()
df = df[pd.notnull(df["Latitude"])]
uniqueId = df.groupby("Bear")
def grp_func(df):
kms_per_radian = 6371.0088
epsilon = 1.5 / kms_per_radian
coords = df.as_matrix(columns=['Latitude', 'Longitude'])
db = DBSCAN(eps=epsilon, min_samples=100, algorithm='ball_tree', metric='haversine').fit(np.radians(coords))
cluster_labels = db.labels_
return cluster_labels
test = uniqueId.apply(grp_func)
Возвращает метку кластера для каждой точки X, Y группы. Я хотел бы объединить эти метки кластера в каждый объект группы.
Вот как выглядят этикетки:
Есть идеи?