Здесь у меня есть эта python функция, которая подсчитывает, сколько раз было получено уникальное значение из электронной таблицы, результаты собраны в формате dict и представлены в виде диаграммы разброса. Пока все хорошо.
Проблема в том, что я не знаю, нужно ли применять к ней кластеризацию kmean. Я даже пытался преобразовать его в массив, но он все еще не работает. Когда я пытаюсь запустить, он говорит, что есть ошибка в строке, где "kmeans.fit (data)". Я попытался изменить значение в скобках, но не повезло.
Можете ли вы помочь. Вот мой код:
def unique_2(X):
# sorting the values in ascending order
X1 = sorted(X)
# counting each unique values
X2 = {}
for item in X1:
if item in X2.keys():
X2[item] += 1
else:
X2[item] = 1
# X2 is a dictionary, not an array.
# PLoting the values.
plt.scatter(range(len(X2)), list(X2.values()))
# For large range of values the text will have a smaller font.
if len(X2) < 10:
plt.xticks(rotation=90, fontsize=8)
plt.xticks(range(len(X2)), list(X2.keys()))
elif len(X2) < 100:
plt.xticks(rotation=90, fontsize=5.5)
plt.xticks(range(len(X2)), list(X2.keys()))
else:
plt.xticks(rotation=90, fontsize=5)
plt.xticks(range(len(X2)), list(X2.keys()))
plt.margins(0.0)
plt.show()
# converting X2 into an array in order to apply kmean clustering
data = list(X2.items())
table_of_results = np.array(data)
x_axis = table_of_results[:, 0]
y_axis = table_of_results[:, 1]
# checking to see the convertion
print(table_of_results)
# implementing kmean clustering
kmeans = KMeans(n_clusters=3)
kmeans.fit(data)
print(kmeans.cluster_centers_)
print(kmeans.labels_)
plt.figure()
plt.scatter(x_axis, y_axis, label='True Position', c=kmeans.labels_, cmap='rainbow')
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], color='black')
plt.show()
return X2