50333


独自データで、iris分析のようなpairplotを表示させたいです。

独自データ

[code]

    ＝カメラの
    weight(重さ),
    quality(画質),
    price(値段),
    camera(1一眼/2ミラーレス/3コンデジ/4スマホ)
    
[/code]

[[1066, 2400, 215000, 1], [1274, 2400, 225000, 1], [1048, 2400, 205800, 1],
[1200, 2400, 195500, 1], [970, 2400, 199000, 1], [1042, 2400, 220890, 1],
[1110, 2400, 210400, 1], [1023, 2400, 195400, 1], [1024, 2400, 205000, 1],
[1024, 2400, 205300, 1], [433, 2400, 105000, 2], [400, 2400, 185000, 2], [420,
2400, 179000, 2], [580, 2400, 105000, 2], [550, 2400, 165020, 2], [549, 2400,
105000, 2], [600, 2400, 185000, 2], [666, 2400, 104980, 2], [672, 2400,
130300, 2], [631, 2400, 160300, 2], [200, 2400, 26100, 3], [238, 2020, 15000,
3], [277, 2400, 25400, 3], [298, 2020, 15410, 3], [316, 2420, 25000, 3], [276,
2400, 24020, 3], [299, 1800, 20000, 3], [254, 2420, 25030, 3], [189, 2020,
24000, 3], [241, 2420, 20260, 3], [150, 1600, 3000, 4], [143, 1600, 2500, 4],
[188, 1800, 3000, 4], [115, 1600, 2500, 4], [140, 1200, 2500, 4], [127, 1200,
3000, 4], [130, 1600, 2500, 4], [153, 1800, 3000, 4], [116, 1600, 2500, 4],
[149, 1800, 2500, 4]]

[code]

    # おまじない
    import numpy as np
    import pandas as pd
    import csv
    
    import seaborn as sns
    # JupyterLab で実行する際は、この行を書くことで描画できるようになります。
    %matplotlib inline
    
    # 表示を短縮
    pd.options.display.max_rows = 10
    pd.options.display.max_columns = 15
    
    c_file = open('camera.csv')
    c_reader = csv.reader(c_file)
    c_data = list(c_reader)
    c_data = [[int(elm) for elm in v] for v in c_data]#str→int
    print(c_data)
    print(len(c_data))
    
    head_data = list(['weight', 'quality', 'price', 'camera'])
    print(head_data)
    
    df  = pd.DataFrame(c_data, columns=head_data)
    sns.pairplot(df, hue='camera')
    
[/code]

とすると、  
以下のようなエラーになってしまいます。

[code]

    LinAlgError                               Traceback (most recent call last)
    <ipython-input-17-6c1adccc077e> in <module>
    ----> 1 sns.pairplot(df, hue='camera')
    (略)
    LinAlgError: singular matrix
    
[/code]

[![singular matrix
error](https://i.stack.imgur.com/yXa5L.png)](https://i.stack.imgur.com/yXa5L.png)

ただし、`hue='camera'`を外すと色分けはされませんが正しく表示されます。  
[![sns.pairplot\(df\)
only](https://i.stack.imgur.com/pVSBO.png)](https://i.stack.imgur.com/pVSBO.png)

[2](https://i.stack.imgur.com/pVSBO.png)のようなplotで、カメラの種類によって色分けさせるにはどうしたらよいでしょうか？


CC BY-SA 4.0
2018-11-14T07:09:28.647
50313
2018-11-14T14:50:01.510
30883
question
python pandas matplotlib
seabornで綺麗なペアプロットを表示させたい。pairplotする時、hueの設定でLinAlgError: singular matrixと出てしまう。


多分seabornのバグではないでしょうか。  
・ GitHb issues [LinAlgError: singular matrix
#1502](https://github.com/mwaskom/seaborn/issues/1502)

Google Colab（環境は python==3.6
seaborn==0.7.1）だと同じコードで正常に表示されました。質問の方のグラフでは対角線がKDEになっていますが、こちらは対角線がヒストグラフ（柱状グラフ）になっています。上のissuesの議論ではヒストグラフにするとバグが発生しずらいようです。

[code]

    import pandas as pd
    import seaborn as sns
    
    c_data = [[1066, 2400, 215000, 1], [1274, 2400, 225000, 1], [1048, 2400, 205800, 1], [1200, 2400, 195500, 1],
     [970, 2400, 199000, 1], [1042, 2400, 220890, 1], [1110, 2400, 210400, 1], [1023, 2400, 195400, 1],
     [1024, 2400, 205000, 1], [1024, 2400, 205300, 1], [433, 2400, 105000, 2], [400, 2400, 185000, 2],
     [420, 2400, 179000, 2], [580, 2400, 105000, 2], [550, 2400, 165020, 2], [549, 2400, 105000, 2],
     [600, 2400, 185000, 2], [666, 2400, 104980, 2], [672, 2400, 130300, 2], [631, 2400, 160300, 2],
     [200, 2400, 26100, 3], [238, 2020, 15000, 3], [277, 2400, 25400, 3], [298, 2020, 15410, 3],
     [316, 2420, 25000, 3], [276, 2400, 24020, 3], [299, 1800, 20000, 3], [254, 2420, 25030, 3],
     [189, 2020, 24000, 3], [241, 2420, 20260, 3], [150, 1600, 3000, 4], [143, 1600, 2500, 4],
     [188, 1800, 3000, 4], [115, 1600, 2500, 4], [140, 1200, 2500, 4], [127, 1200, 3000, 4],
     [130, 1600, 2500, 4], [153, 1800, 3000, 4], [116, 1600, 2500, 4], [149, 1800, 2500, 4]]
    
    head_data = list(['weight', 'quality', 'price', 'camera'])
    df  = pd.DataFrame(c_data, columns=head_data)
    sns.pairplot(df, hue='camera')
    
[/code]

[![画像の説明をここに入力](https://i.stack.imgur.com/T4Pr8.png)](https://i.stack.imgur.com/T4Pr8.png)


CC BY-SA 4.0
2018-11-14T13:36:57.690
50333
2018-11-14T14:50:01.510
2018-11-14T14:50:01.510
15171
15171
50313
answer