|
|
|
@ -33,16 +33,19 @@ class Kmeans(object):
|
|
|
|
|
labels = km.fit_predict(zip(xs, ys))
|
|
|
|
|
return zip(ids, labels)
|
|
|
|
|
|
|
|
|
|
def spatial_balanced(self, query, no_clusters, no_init=20, target_per_cluster = None, value_column = None):
|
|
|
|
|
params = { "subquery": query,
|
|
|
|
|
def spatial_balanced(self, query, no_clusters, no_init=20,
|
|
|
|
|
target_per_cluster=None, value_column=None):
|
|
|
|
|
params = {
|
|
|
|
|
"subquery": query,
|
|
|
|
|
"geom_col": "the_geom",
|
|
|
|
|
"id_col": "cartodb_id",
|
|
|
|
|
"value_column" : value_column }
|
|
|
|
|
"value_column": value_column,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
data = self.data_provider.get_spatial_balanced_kmeans(params)
|
|
|
|
|
|
|
|
|
|
xs = data[0]['xs']
|
|
|
|
|
ts = data[0]['ys']
|
|
|
|
|
lons = data[0]['xs']
|
|
|
|
|
lats = data[0]['ys']
|
|
|
|
|
ids = data[0]['ids']
|
|
|
|
|
values = data[0]['values']
|
|
|
|
|
|
|
|
|
@ -51,9 +54,16 @@ class Kmeans(object):
|
|
|
|
|
if target_per_cluster is None:
|
|
|
|
|
target_per_cluster = total_value / float(no_clusters)
|
|
|
|
|
|
|
|
|
|
km = BalancedGroupsKMeans(n_clusters=17,max_iter=100, max_cluster_size=target_per_cluster)
|
|
|
|
|
labels = km.fit_predict(zip(xs,ys), values=values)
|
|
|
|
|
return zip(ids,labels)
|
|
|
|
|
bal_kmeans = BalancedGroupsKMeans(
|
|
|
|
|
n_clusters=17,
|
|
|
|
|
max_iter=100,
|
|
|
|
|
max_cluster_size=target_per_cluster
|
|
|
|
|
)
|
|
|
|
|
labels = bal_kmeans.fit_predict(
|
|
|
|
|
zip(lons, lats),
|
|
|
|
|
values=values
|
|
|
|
|
)
|
|
|
|
|
return zip(ids, labels)
|
|
|
|
|
|
|
|
|
|
def nonspatial(self, subquery, colnames, no_clusters=5,
|
|
|
|
|
standardize=True, id_col='cartodb_id'):
|
|
|
|
|