Pythonの練習5
Pythonを使って主成分分析&クラスター分析を試行
はじめに主成分分析
import pandas as pd import numpy as np from sklearn.cluster import KMeans import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D import mpl_toolkits.mplot3d.axes3d as p3 from sklearn import datasets from sklearn.decomposition import PCA
#テキストファイルを読み込む sep='\s+'はスペース区切りの意味,タブの場合はt #今回使用したのは,3科目のテストの点数データ data = pd.read_csv('test.txt', sep='\s+',index_col=0)
#ここがメインとなる主成分分析を実行する行 pca = PCA() feature = pca.fit(data) feature = pca.transform(data) pd.DataFrame(feature, columns=["PC{}".format(x + 1) for x in range(len(data.columns))])
#PCAの結果を図面を作成,ここでは主成分1と2を横軸・縦軸に設定し,作図 plt.figure() plt.scatter(feature[:, 0], feature[:, 1], alpha=0.8, c=list(data.iloc[:, 0])) plt.grid() plt.xlabel("PC1") plt.ylabel("PC2") for x, y, name in zip(feature[:, 0], feature[:, 1], list(data.index)): plt.text(x, y, name, alpha=0.8, size=10) plt.xlim(20, -20) plt.ylim(20, -20) plt.savefig('./fig/pca1.png')
次にクラスター分析に挑戦
import pandas as pd import numpy as np from sklearn.cluster import KMeans import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from sklearn import datasets
#主成分分析と同様にテキストファイルを読み込む ここでは2科目のテストの結果を利用 data = pd.read_csv('./test2.txt', sep='\s+' ,index_col=0) #dataをプロットする場合 data.plot(kind='scatter', x=data.columns[0], y=data.columns[1], grid=True) for x, y, name in zip(data.iloc[:, 0], data.iloc[:, 1], list(data.index)): plt.text(x, y, name, alpha=0.8, size=10)
#クラスター数を5,学習回数を50回に設定して試行 kmeans_model = KMeans(n_clusters=5, max_iter=50, random_state=10).fit(data.iloc[:, :])
#分析した結果を作図 labels = kmeans_model.labels_ fig = plt.figure() color_codes = {0:'red', 1:'blue', 2:'green', 3:'black', 4:'yellow'} colors = [color_codes[i] for i in labels] for x, y, name in zip(data.iloc[:, 0], data.iloc[:, 1], list(data.index)): plt.text(x, y, name, alpha=0.8, size=10) plt.scatter(data.iloc[:, 0], data.iloc[:, 1], alpha=0.8, color=colors) plt.savefig('./fig/cluster.png')
実際にきちんと分析をする際には,多数のデータから主成分分析を用いて次元数を減らして,その上でクラスター分析を用いて詳細に分類するという流れが良さそう