Я должен выполнить алгоритм KMean с 2 условиями:
В моей базе данных есть 3 столбца: первая широта, вторая долгота и третье население, а условия:
1) Join with radius of 2 km
2) Join with population less than 2000
Как я могу это сделать?
Это код (я поставил K = 1650, потому что более или менее код создает хорошие группы, но, возможно, с условиями я могу решить это с оптимальным K):
import math
from pandas import DataFrame
from sklearn.cluster import KMeans
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
population = [200,150,75,450,1100,368,125,789,596,428,153,426,987,869,145,758,1351]
Data = {
'e': [3, 1, 1, 2, 1, 6, 6, 6, 5, 6, 7, 8, 9, 8, 9, 9, 8],
'r' :[5, 4, 6, 6, 5, 8, 6, 7, 6, 7, 1, 2, 1, 2, 3, 2, 3]
}
#v1=[3, 1, 1, 2, 1, 6, 6, 6, 5, 6, 7, 8, 9, 8, 9, 9, 8]
#v2=[5, 4, 6, 6, 5, 8, 6, 7, 6, 7, 1, 2, 1, 2, 3, 2, 3]
#x1 = np.array(v1)
#x2 = np.array(v2)
df = DataFrame(Data, columns=['e','r'])
print(df)
K = 1650
#f = open ('holamundo.txt','wb')
#for i, l in enumerate(kmeans_model.labels_):
#print("{0};{1};{2}".format(x1[i], x2[i], l))
kmeans2 = KMeans(n_clusters=1650).fit(df)
centroids = kmeans2.cluster_centers_
print(centroids)
plt.scatter(df['e'], df['r'], c=kmeans2.labels_.astype(float), s=50, alpha=0.5)
plt.scatter(centroids[:,0], centroids[:,1], c='blue', s=50)
plt.show()