Кластеризация KMeans только с указанием столбца c Csv - PullRequest
1 голос
/ 28 января 2020

После обучения я изучаю, как использовать Kmeans.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import style
style.use("ggplot")
from sklearn.cluster import KMeans



X = np.array([[1, 2],
              [5, 8],
              [1.5, 1.8],
              [8, 8],
              [1, 0.6],
              [9, 11]])


kmeans = KMeans(n_clusters=2 )
kmeans.fit(X)

centroids = kmeans.cluster_centers_
labels = kmeans.labels_

print(centroids)
print(labels)

colors = ["g.","r.","c.","y."]

for i in range(len(X)):
    print("coordinate:",X[i], "label:", labels[i])
    plt.plot(X[i][0], X[i][1], colors[labels[i]], markersize = 10)


plt.scatter(centroids[:, 0],centroids[:, 1], marker = "x", s=150, linewidths = 5, zorder = 10)

plt.show()

Я хочу прочитать файл csv и затем вместо массива, который используется выше, иметь один из столбцов данных.

Я попробовал следующее, но не получилось

df=pd.read_csv("Output.csv",encoding='latin1')
X=pd.DataFrame([['Column_1']]) 

Я получил следующую ошибку

ValueError: could not convert string to float: 'Column_1'

Так выглядит мой вывод при использовании df.head

    x    id  ... Column_name v      Column_1
0  25  0001  ...         NaN             854
1  28  0002  ...         NaN            85,4
2  29  0003  ...         NaN            1524
3  32  NaN   ...         NaN               0
4  85  0004  ...         NaN               0

1 Ответ

2 голосов
/ 28 января 2020

Когда вы запускаете следующую команду, как в вашем вопросе

X=pd.DataFrame([['Column_1']]) 

X теперь содержит это:

        0
0   Columns_1

Ошибка довольно ясна, поскольку она говорит, что не удалось преобразовать 'Column_1' чтобы плавать как kmeans использует числовые данные

вы можете просто выбрать первый столбец как:

X=df[['your_first_col_name']]

Редактировать Для обработки запятых вы можете использовать:

df['Column_1']=df['Column_1'].str.replace(',','.')

Еще один способ обработки данных, которые содержат ',' вместо '.' для десятичных чисел, как в европейском формате, - объявить аргумент decimal при чтении csv, поэтому, если исходные данные вот так:

A
1253
1253,5
12578,8
148,45
124589

мы можем прочитать эти данные как

df=pd.read_csv('c2.csv', decimal=',')

, и результат будет

0      1253.00
1      1253.50
2     12578.80
3       148.45
4    124589.00
Name: A, dtype: float64
...