51178


湿度センサと心拍センサを用いて感情別にクラスタ分析をしようと思っています。  
各センサから取得したデータをcsvファイルに保存し、read_csvで読み込みmatplotlib で可視化させているのですが、図のようになってしまいます。

[![軸の定義がされていない](https://i.stack.imgur.com/a2zl4.png)](https://i.stack.imgur.com/a2zl4.png)  
縦軸を心拍数、横軸を湿度として値を表示させるにはどのようにすればいいのでしょうか？

手動で範囲を決める、set_ylim([min,max])を用いるべきなのか  
お答えしていただければ嬉しいです。

**ソースコード**

[code]

    #!/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()
    
[/code]

csvファイルの中身は下の図の通りです。  
数値の左側が心拍数、右側が湿度  
１がイライラしている時  
２がリラックスしている時

というように分かれています  
[![画像の説明をここに入力](https://i.stack.imgur.com/VbG7O.png)](https://i.stack.imgur.com/VbG7O.png)


CC BY-SA 4.0
2018-12-13T07:15:50.060
51168
2018-12-18T08:52:54.567
2018-12-13T07:25:44.730
3060
31322
question
python matplotlib scikit-learn
scikit-learn matplotlib軸を定義したい　クラスタ分析


[前回のご質問](https://twitter.com/makaino_ririmu/status/1073137633679761408)とコードはほぼそのままに元データの形が変わった関係で、4列あるデータの内2列しか使われていないコードになってしまっています。グラフ描画以前の問題として、今のデータの形を確認し、お望みの形にコードを書き換える必要があります。

以下、もう少し詳細に説明を書いてみます。

### コードの問題点

たとえば以下の行では列名が2つしか指定されていませんが、実際には4列存在します。

[code]

    data = pd.read_csv('heartRate1.csv',names=('cute','ang'))
    
[/code]

また、今の CSV
だとデータ1行が「イライラ心拍,イライラ湿度,リラックス心拍,リラックス湿度」の順に並んでいるため、単にこの4次元データを1データとしてクラスタリングすると4次元空間上でクラスタリングすることになります。これは「縦軸を心拍数、横軸を湿度にしたい」という質問文の意図とは異なりそうです。おそらくまずは「心拍,湿度」の形にしてそれからクラスタリングすることになるのではないでしょうか。ただしそれだと同じ人から取ったデータだという情報が落ちてしまうので、そもそもどういう分析手法で分析したかったのか、にも再考が必要かもしれません。

### デバッグ方法

print デバッグという、データを直接コンソール等に出力してしまい、予想通りになっているか確認するという原始的なデバッグ手法があります。たとえば変数
`data` に読み込まれたデータが所望の形になっているか確認するためには、以下のように `print(data)` で `data`
を直接出力してみることができます。

[code]

    data = pd.read_csv('heartRate1.csv',names=('cute','ang'))
    print(data)
    
[/code]

実際にコードを動かすときはこの `print` は削除することになるわけですが、デバッグ用途で試しに出力してみて確かめられます。


CC BY-SA 4.0
2018-12-13T09:28:46.553
51178
2018-12-18T08:52:54.567
2018-12-18T08:52:54.567
19110
19110
51168
answer