pythonを用いて、クラスタリングを行おうとすると、valueerror length of values does not match length of index となり、苦慮しております。
こちらが、今回、エラーコードをだしました、ソースコードでございます。
# -*- coding: utf-8 -*- import pandas as pd import numpy as np import matplotlib.lines as mlines import codecs from sklearn.cluster import KMeans f1 = codecs.open('claster_panda_1_1.csv', 'w', 'utf-8') # データセットを読み込み cust_df = pd.read_csv("odds_test_1_1.csv" , sep=",") print cust_df # Pandas のデータフレームから Numpy の行列 (Array) に変換 cust_array = cust_df.as_matrix().astype(np.int) # 行列を転置 cust_array = cust_array.T # クラスタ分析を実行 (クラスタ数=4) pred = KMeans(n_clusters=4).fit_predict(cust_array) print pred # Pandas のデータフレームにクラスタ番号を追加 cust_df['cluster_id']=pred print cust_df cust_df.to_csv('claster_panda_1_1.csv', index=None) # 各クラスタに属するサンプル数の分布 cust_df['cluster_id'].value_counts() print cust_df['cluster_id'].value_counts() # 各クラスタのデータの平均値 cust_df[cust_df['cluster_id']==0].mean() # クラスタ番号 = 0 print cust_df[cust_df['cluster_id']==0].mean() # クラスタ番号 = 0 cust_df[cust_df['cluster_id']==1].mean() # クラスタ番号 = 1 print cust_df[cust_df['cluster_id']==1].mean() # クラスタ番号 = 1 cust_df[cust_df['cluster_id']==2].mean() # クラスタ番号 = 2 print cust_df[cust_df['cluster_id']==2].mean() # クラスタ番号 = 2 cust_df[cust_df['cluster_id']==3].mean() # クラスタ番号 = 3 print cust_df[cust_df['cluster_id']==3].mean() # クラスタ番号 = 3 # 可視化(積み上げ棒グラフ) import matplotlib.pyplot as plt clusterinfo = pd.DataFrame() for i in range(4): clusterinfo['cluster' + str(i)] = cust_df[cust_df['cluster_id'] == i].mean() clusterinfo = clusterinfo.drop('cluster_id') my_plot = clusterinfo.T.plot(kind='bar', stacked=True, title="Mean Value of 4 Clusters") my_plot.set_xticklabels(my_plot.xaxis.get_majorticklabels(), rotation=0) plt.legend(loc='uppper right', bbox_to_anchor=(1.05, 0.5, 0.5, 10), borderaxespad=0.,) plt.show() my_plot = clusterinfo.T.plot(kind='bar', stacked=True, title="Mean Value of 4 Clusters") my_plot.set_xticklabels(my_plot.xaxis.get_majorticklabels(), rotation=0) plt.show()
こちらが、読み込ませるデータセット odds_test_1_1.csv でございます。
temp(0) temp(1) temp(2) temp(3) temp(4) temp(5) temp(6) temp(7) temp(8) temp(9) temp(10) temp(11) temp(12) arrived 0 0 4 8.1 13.1 12.3 9.1 9.2 6.4 6.6 6.3 6.5 6.9 1 0 6.8 3.7 9.9 16 7 5.3 4.9 5.1 5.1 5.2 4.7 4.7 1 0 3.4 30 61.4 27.8 11.5 11.7 11.9 12.8 13.4 14 14.5 15.6 0 0 3.4 25 9.1 48 38 20.4 17.7 18.3 15 14.6 14.2 14.9 0 0 6.8 9.9 19.7 12.8 13.6 14.3 14 14.2 15 14.3 14.5 15.3 1 0 3.4 25 34.5 156.1 107.4 84.6 59.3 63.2 67.7 65.7 67.2 69.2 0 0 0 37.6 92.2 198.7 137.7 125.3 99.2 90.1 93.8 92.4 93.8 90.9 0 0 0 5.5 12 27.9 28.4 26.9 25.9 27.5 27.4 27.8 27.4 28.7 0 0 0 4.3 1.4 1.1 1.3 1.5 1.7 1.8 1.8 1.8 1.8 1.8 0 0 0 50.1 61.4 118.1 57 58.7 32.5 35.1 38.3 39.5 40.3 42.9 0 0 0 25.6 88.4 88.4 47.1 76.8 70.6 70.6 76.7 81.4 78.9 80.2 0 0 0 12.8 7.1 7.1 5.1 5.6 6.7 6.7 5.3 5.6 5.9 5.9 1 0 0 5.9 7.7 7.7 5.8 4.1 4.3 4.3 3.9 4.1 4.3 4.4 1 0 0 5.4 5.1 5.1 9.8 14.7 15.3 15.3 15.8 13.2 11.6 11.7 0 0 0 3.3 13 13 8.7 14.8 18.9 18.9 19.6 20.8 18 17 0 0 0 76.8 63.2 63.2 68 94.5 117.8 117.8 95 100.5 92 76.6 0 0 0 25.6 29.4 29.4 12.8 12.5 15 15 15.6 15.8 15.7 16 0 0 0 38.4 8.6 8.6 4.6 4.9 3.2 3.2 3.8 3.9 4 4 0 0 0 76.8 13.4 13.4 15.9 8.8 9.6 9.6 8.9 7.5 7.7 7.8 0 0 0 10.9 3 3 7.2 9 11.9 11.9 12.7 11.8 10.6 9.7 1 0 0 38.4 44.2 44.2 81.6 57.1 51.2 51.2 52 54.9 57.1 58.1 0 0 0 12.8 16.3 16.3 22.2 10.5 12.7 12.7 13.7 14.3 14.3 14.3 0 0 0 5.1 20.1 20.1 12.3 18.6 13.8 13.8 15.1 15.6 15.1 15.4 0 0 0 19.7 4 5.7 5.5 5.1 5.2 5.2 5.3 5.1 5 5 1
これを動かしますと、下記のような エラーメッセージが 返ってまいります。
[2693 rows x 14 columns]
[3 3 2 0 1 1 1 1 1 1 1 1 1 3]
Traceback (most recent call last):
File "C:\Users\satoru\satoru_system_2.7\data_test\klaster_1_1.py", line 34, in <module>
cust_df['cluster_id']=pred
File "C:\Python27\lib\site-packages\pandas\core\frame.py", line 2357, in setitem
self._set_item(key, value)
File "C:\Python27\lib\site-packages\pandas\core\frame.py", line 2423, in _set_item
value = self._sanitize_column(key, value)
File "C:\Python27\lib\site-packages\pandas\core\frame.py", line 2578, in _sanitize_column
value = _sanitize_index(value, self.index, copy=False)
File "C:\Python27\lib\site-packages\pandas\core\series.py", line 2770, in _sanitize_index
raise ValueError('Length of values does not match length of ' 'index')
ValueError: Length of values does not match length of index
C:\Users\satoru\satoru_system_2.7\data_test>
申し訳ございませんが、上記のエラーコードの
Python:「値の長さがインデックスの長さと一致しません」ということまでしか、小生には理解できませんでした。
そのため、エラーの出ている位置までを指摘することは出来ません。
ただ、少しずつ、ソースコードを追加していき、エラーコードの出た箇所は、
# クラスタ分析を実行 (クラスタ数=4) pred = KMeans(n_clusters=4).fit_predict(cust_array) cust_df['cluster_id']=pred print cust_df cust_df.to_csv('claster_panda_1_1.csv', index=None)
おそらく、上記の箇所ではないかと推測されます。
御教示、よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー