seabornで可視化 まとめ

pythonでグラフを描いたり、可視化するのに **seaborn** がめちゃくちゃ便利です。
いつも忘れるのでメモとして残しておきます。


##必要なライブラリ

```.py
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
```

#データ
今回は有名な**titanicのデータ** + **irisのデータ**でやります。

titanicのデータはkaggleのデータを使いました。

```.py
train = pd.read_csv('train.csv')
```

irisのデータは、UCIのデータベースから取得してみました。
(こんなこと、やらなくていいです、、(笑)ちょっとやって見たかったので)

```.py
import requests

columns = ['sepal-length','sepal-width','petal-length','petal-width' ,'target']

data = pandas.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data", names=columns)
```
seabornにもデータセットがあるようです。

```.py
titanic = sns.load_dataset('titanic')
iris = sns.load_dataset('iris')
```




##barplot : データの平均値と信頼区間
平均値が高さで、信頼区間がエラーバーで表示されます。


```.py

sns.set(style='darkgrid')
g = sns.barplot(x='Sex', y='Survived', data=train, palette='Set2')
g.set_ylabel('Survival Probability')
```

![Screenshot from 2019-06-30 12-07-58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223559/40d71dd4-6d99-18d5-9412-2636fcece8b5.png)

`x` , `y`にそれぞれのデータを入れて、`palette`で色のスタイルを決めます。

##countplot : データ件数の集計

基本的に１変数の指定ですかね
`y=train['Pclass']`とすると横方向にグラフを描いてくれます。
`pallete='Set3'`が私は結構好きです。
`palette` で他に設定可能なのは `Grays`, `Pastel1`, `Blues`などたくさんあるので検索してみて下さい。



```.py
sns.countplot(x=train['Pclass'], palette='Set3')
```

![Screenshot from 2019-06-30 12-03-04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223559/92632536-efbf-451d-2ea2-6d78de7af00c.png)

##distplot : ヒストグラム

seabornでヒストグラムを描く際には、`distplot`を使います。
`kde` は kernel density estimation(カーネル密度推定)で、表示したかったら`True`, 表示したくないなら`False`を指定します。

`bins`はx軸の刻み目の指定です。

```.py
sns.distplot(train['Age'], kde=False, bins=8, color='blue')
```
![Screenshot from 2019-06-30 12-26-56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223559/9df6d481-470d-4236-cb69-24bd11093579.png)



## facetgrid 



複数の `kde`をひとつのプロットにかけます。

```.py
fig = sns.FacetGrid(train, hue='Sex', aspect=4)
fig.map(sns.kdeplot, 'Age', shade=True)
max_value = train['Age'].max()
fig.set(xlim=(0,max_value))
fig.add_legend()
```

![Screenshot from 2019-06-30 12-03-44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223559/e7799896-4d5e-59ff-2d36-cf7237b7d00e.png)

##factorplot : 種別比較図

デフォがポイントプロットになっています。他のグラフも表示可能で
`kind=` に `point`, `bar`, `count`, `box`, `violin`, `strip` が指定可能です。


```.py
sns.factorplot(x='Pclass',y='Age', hue='Sex', data=train, palette='pastel')
```

![Screenshot from 2019-06-30 12-41-13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223559/91fe3cf8-900a-f469-987c-ee06b488710b.png)


##heatmap : ヒートマップ


数値を表示させる場合、`annot = True`、にしないと表示されないので気をつけて下さい。

```.py
df = train[['Age','Pclass','Fare','Survived']]
sns.heatmap(df.corr(), annot=True, fmt='.2f', cmap='summer')
```
![Screenshot from 2019-06-30 12-04-58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223559/3ee83988-01c0-7133-2672-fcbc7219ef70.png)

## scatterplot : 散布図



```.py
sns.scatterplot(x='sepal-length', y='sepal-width', hue='target', data=data, palette='Set2')
```

![Screenshot from 2019-06-30 12-05-40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223559/6df2339d-629a-f32e-bad9-25b2c26b1b71.png)

## pairplot : ペアプロット図(散布図行列)

```.py
sns.pairplot(data, hue='target', size=2)
```
![Screenshot from 2019-06-30 12-05-54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223559/2ac16486-ea24-9da1-ec49-da4d73cf3099.png)


##jointplot  :散布図+ヒストグラム

２変数間の分布を可視化できます。
相関変数とp-valueも表示してくれる。

```.py
sns.jointplot(x=data['petal-length'], y=data['petal-length'],data=data, color='green')
```

![Screenshot from 2019-06-30 12-35-24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223559/f284db35-ed21-c1a9-9fd8-1c4bd63613f1.png)



# +α(memo)

## カラム情報の取得

```.py
train.columns
```
![Screenshot from 2019-06-30 12-02-27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223559/177404a1-eb77-89f3-c75b-4a066607113b.png)

## 最大値、最小値、平均、カウント

```.py
train['Age'].max()  #80.0
train['Age'].min()  #0.42
train['Age'].mean()  #29.699
train['Pclass'].value_counts()
```

## 終わりに

seaborn とにかく可視化に使えます！
少しでも参考になればと思います。
ミスがありましたら、ビシバシご指摘お願いします。