scikit-learn matplotlib軸を定義したい クラスタ分析
湿度センサと心拍センサを用いて感情別にクラスタ分析をしようと思っています。
各センサから取得したデータをcsvファイルに保存し、read_csvで読み込みmatplotlib で可視化させているのですが、図のようになってしまいます。
縦軸を心拍数、横軸を湿度として値を表示させるにはどのようにすればいいのでしょうか?
手動で範囲を決める、set_ylim([min,max])を用いるべきなのか
お答えしていただければ嬉しいです。
ソースコード
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from matplotlib.colors import ListedColormap
colors = ['red','blue']
cmap = ListedColormap(colors)
from sklearn import datasets
from sklearn.cluster import KMeans
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
def main():
# クラスタ数
N_CLUSTERS = 2
# Blob データを生成する
##dataset = datasets.make_blobs(centers=N_CLUSTERS)
# 正解ラベルは使わない
# targets = dataset[1]
data = pd.read_csv('heartRate1.csv',names=('cute','ang'))
#del(data['cute'])
#del(data['ang'])
#data_array = data.as_matrix().T
data_array = np.array([data['cute'].tolist(),
data['ang'].tolist()], np.int32)
# 特徴データ
features = data_array.T
# クラスタリングする
cls = KMeans(n_clusters=N_CLUSTERS)
pred = cls.fit_predict(features)
# 各要素をラベルごとに色付けして表示する
##for i in range(N_CLUSTERS):
## labels = features[pred == i]
plt.scatter(features[:, 0], features[:, 1], c=pred, cmap=cmap)
# クラスタのセントロイド (重心) を描く
centers = cls.cluster_centers_
plt.scatter(centers[:, 0], centers[:, 1], s=80,
marker='p', edgecolors='k', c=range(N_CLUSTERS), cmap=cmap)
plt.show()
if __name__ == '__main__':
main()
csvファイルの中身は下の図の通りです。
数値の左側が心拍数、右側が湿度
1がイライラしている時
2がリラックスしている時