def get_kmedoids(df, dist_matrix, num_clusters): clusterid, error, nfound = Cluster.kmedoids(dist_matrix, num_clusters) df = df.reset_index() df['cluster_id'] = pd.DataFrame(data=clusterid) return df
def get_kmedoids(input_points, num_clusters): """ df = pd.read_csv(fname) x = df.iloc[:, 0] y = df.iloc[:, 1] inputs = [] for row in range(len(df)): inputs.append((df.iloc[row, 0], df.iloc[row, 1])) """ inputs = input_points google_key = "AIzaSyBIrorNpUJ_RyaxZ-8PxC0ZXZ818hRc5hM" maps = googlemaps.Client(key=google_key) # inputs = inputs[:5] # for testing dist_matrix = tmo.get_dist_matrix(inputs, maps) clusterid, error, nfound = Cluster.kmedoids(array(dist_matrix), nclusters=num_clusters) # calculate cluster centroid clusterid_set = set(clusterid) centroids_dict = {} centroids_arr = [] for itm in clusterid_set: k = itm val = inputs[itm] centroids_dict[k] = val centroids_arr.append(val) # a,b = Cluster.clustercentroids(clusterid=clusterid) centroids_arr = np.array(map(np.array, centroids_arr)) # convert dist_matrix to a dataframe yard_index = ['turf'+str(i) for i in range(1, len(inputs)+1)] turf_index = ['turf'+str(i) for i in range(1, len(inputs)+1)] dist_mat = array(dist_matrix) df_dist_matr = pd.DataFrame(data=dist_mat[0:,0:], index=yard_index, columns=turf_index) return centroids_arr, df_dist_matr
kmeans1 = KMeans(n_clusters=5, random_state=0).fit(dist_dot_product) kmeans2 = KMeans(n_clusters=5, random_state=0).fit(general_dot_product) image_kmeans_dot = np.zeros((ys[1] - ys[0], xs[1] - xs[0])) image_kmeans_pixel = np.zeros((ys[1] - ys[0], xs[1] - xs[0])) print('Transforming in real coordinates...') for i in ids: image_kmeans_dot[parser.coordinates[i][1] - ys[0]][parser.coordinates[i][0] - xs[1]] = kmeans1.labels_[ids.index(i)] image_kmeans_pixel[parser.coordinates[i][1] - ys[0]][parser.coordinates[i][0] - xs[1]] = kmeans2.labels_[ids.index(i)] print('Kmedoid clustering...') kmedoid_dot = Cluster.kmedoids(dist_dot_product, nclusters=5, npass=5, initialid=None) #Distance Matrix!!! kmedoid_pixel = Cluster.kmedoids(general_dot_product, nclusters=5, npass=5, initialid=None) #Distance Matrix!!! image_kmedoid_dot = np.zeros((ys[1] - ys[0], xs[1] - xs[0])) image_kmedoid_pixel = np.zeros((ys[1] - ys[0], xs[1] - xs[0])) for i in ids: image_kmedoid_dot[parser.coordinates[i][1] - ys[0]][parser.coordinates[i][0] - xs[1]] = kmedoid_dot[0][ids.index(i)] image_kmedoid_pixel[parser.coordinates[i][1] - ys[0]][parser.coordinates[i][0] - xs[1]] = kmedoid_pixel[0][ids.index(i)]