よく使うseabornのメソッドを、できるだけ最低限の引数で使ってみた


# 目的
Pythonを学習して、いざ実装する際、

* seabornで使いたいメソッドが思い出せない。
* どんな引数が必要か分からない。

という経験はありませんか？

知識不足だった僕は、データ加工する際に、都度seabornメソッドの引数を調べ、設定しました。

本記事では、初学者でも理解しておく必要がある、seabornの頻出メソッドと、ぱっと確認するために必要な、最低限の引数について解説いたします。

# 大まかな流れ
* 今回使用するデータは、「Kaggle」の「[HousePrice](https://www.kaggle.com/c/house-prices-advanced-regression-techniques/)」のデータを利用します。

* HousePriceのコンペを平たく説明すると、販売価格を、家の広さや立地などから予測するコンペです。

* データを読み込み、その特徴量を理解するために、グラフ描画します。

# 注意事項

* 初学者の方でもメソッドの利用方法が分かりやすいよう、パラメータをできるだけ絞って説明しています。このため、グラフは割と汚いです。。僕自身が、様々なサイトで調べた際、「結局、最低限表示したいとき、どの必要が必要なの？」という疑問を感じたため、あえてパラメータは絞っております。

* とは言え、グラフを表示する上で、必要な引数については、コメントで補足した上で、使用しています。

(他にも、できたら設定したほうが良いよ、というパラメータなどがありましたら、コメントをいただけると幸いです。)

# 対象者

このような方向けに書いています。

* これからKaggleを始めたい
* データの特徴を可視化できるようになりたい
* seabornを0から実装できるようになりたい

# この記事で理解できること
Kaggleのチュートリアルなど、データ分析をはじめた際に、
「どんなデータが設定されているか？」
という点について、自力で可視化するためのseabornの基本的な概要を抑えることができるかと思います。

# 環境
* Windows10(バージョン1909)
* Python 3.7.6
* seaborn 0.10.0
* Pandas 1.0.1
* matplotlib 3.2.1

# 前提
* Pythonは軽く触ったことがある。
* 高校レベルの数学知識がある。

# グラフ描画

### ヒートマップ(heatmap)

[公式サイト：heatmap](http://seaborn.pydata.org/generated/seaborn.heatmap.html)

ヒートマップを利用することで、総当たり表のような形式で、数字データの強弱を、色で視覚化します。

今回は、住宅の販売価格(SalePrice)に対する相関係数(絶対値)が0.5より大きい項目に絞ってグラフ描画します。

```python
import seaborn as sns

# 相関係数を取得
corr_mat = house_price.corr()

# SalePriceとの相関係数(絶対値)が、0.5より大きい項目にしぼったDataFrameを作る
top_corr_features = corr_mat.index[abs(corr_mat["SalePrice"])>0.5]


# import matplotlib.pyplot as plt
# plt.figure(figsize=(11,11)) # とかやると、もっときれいに表示できる

# 相関関係をチェックする
sns.heatmap(data=house_price[top_corr_features].corr(),annot=True,cmap="RdYlGn")

```

引数の内容は、以下のとおりです。

|引数|内容|
|:-:|:-:|
|data|対象データ|
|annot|マトリックスに値を表示するか|
|cmap|色の種類|

動作するかどうかの観点であれば、annnotやcmapの引数は除外できます。ただ、特徴を可視化する観点から考えると、

* それぞれの総当たり表のセルに数値(ここでは相関性係数)があったほうが、理解しやすい。
* 色合いは標準の赤系で統一せず、赤色と緑色のグラデーションのほうが直感的に理解できる。

という点から、このパラメータは最低限設定したほうが良いかと考えています。

結果は以下のとおりです。
![heatmap_simle2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310367/64a9999e-83ed-12b4-56f3-b55c82893811.png)



SalePriceが0.5より大きい項目のみに絞った、総当たりの表となっています。今回、データ項目を絞った理由は、データ項目数が80件ほどあり、これの総当たり表にすると、可視化するメリットがなくなるため、項目数を減らしています。

今回の例ですと、緑色がより強い相関性があることがわかるのですが、特に以下の2つが相関性が強いことがわかります。

|項目|相関係数|
|:-:|:-:|
|OverallQual(住宅の総合評価)|0.79|
|GrLivArea(居住面積)|0.71|

このように、ヒートマップでは、分析対象となるデータの相関性を判断する際に、使用できます。

#### 補足
* 相関係数はABS関数を使うことで、絶対値で計算しています。
* 相関係数(絶対値)は、1.0に近づくにつれて相関性が高く、0に近づくにつれて相関性が低くなります。
* 元データの性質上、項目数が多いため、データを絞ってグラフ描画します。

### 棒グラフ(barplot)

barplotの棒グラフで、平均値とエラーバーを表示します。

[公式サイト：barplot]
(http://seaborn.pydata.org/generated/seaborn.barplot.html)

ヒートマップで、最も高い相関性が出ていた「OverallQual(住宅の総合評価)」の特徴を、表示します。

```python
import seaborn as sns
sns.set()

sns.barplot(x=house_price.OverallQual,y=house_price.SalePrice)![distplot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310367/f788ef75-d123-fb53-b721-ed7a329b2de6.png)

```

結果は以下のとおりです。
![barplot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310367/b921901a-711e-8a88-354f-e9e2f5a1e8a1.png)


横軸は、OverallQual(住宅の総合評価)、縦軸はHousePrice(住宅価格)となっています。

住宅の総合評価が良いほど、住宅価格が高いという傾向がわかります。


### 棒グラフ(countplot)

countplotの棒グラフで、カテゴリ変数の件数を表示します。

[公式サイト:countplot](https://seaborn.pydata.org/generated/seaborn.countplot.html)

```python
import seaborn as sns
sns.set()

sns.countplot(x='MSSubClass', data=house_price)
```

結果は以下のとおりです。
![countplot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310367/041a5efb-9259-2087-ebff-e4751aed893d.png)

横軸はHousePrice(住宅価格)、縦軸はその件数を表示します。


### ヒストグラム(distplot)

データを区間で分け、どの区間が多いかどうかを表示します。

```python
import seaborn as sns
sns.set()

sns.distplot(house_price['SalePrice'])
```

結果は以下のとおりです。
![distplot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310367/1fdf169d-a97a-6adf-b2af-169869a702bd.png)


[公式サイト：distplot](http://seaborn.pydata.org/generated/seaborn.distplot.html#seaborn.distplot)


### 散布図(scatterplot)

シンプルな散布図です。


```python
import seaborn as sns
sns.set()

sns.scatterplot(data=house_price, x='GrLivArea', y='SalePrice')
```

結果は以下のとおりです。
![scatterplot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310367/24404dfc-7195-cf81-5a17-a96a66377dde.png)


[公式サイト：scatterplot](http://seaborn.pydata.org/generated/seaborn.scatterplot.html)

## グラフの複数表示(pairplot)

散布図を一つずつでなく、一度に総当たりで表示できます。
相関性を網羅的に確認する際、重宝します。

```python
import seaborn as sns
sns.set()

# SalePriceとの相関性が高めの項目にしぼり、グラフを表示する
sns.pairplot(data=house_price[top_corr_features])
```

結果は以下のとおりです。
![pairplot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310367/9a13ec23-f992-8750-c83d-37f42488b25c.png)

[公式サイト：pairplot](http://seaborn.pydata.org/generated/seaborn.pairplot.html)


# 最後に
* 他にも、ボックスプロット、バイオリンプロットなどがありますが、頻出という観点から、今回の説明からは除外しています。

* 今は、頻出メソッドと最低限の引数に絞っていますが、少し分かりにくいので、明示化しようと思います。

# 参考サイト
以下のサイトをベースに、公式サイトを確認しながら学習を進めました。

この記事では、本当に最低限の説明しかできていないので、もっと詳しく学習されたい方は、こちらをぜひご覧ください。

* [PythonのライブラリSeabornの使い方【前編】](https://obgynai.com/python-seaborn-exercise1/)

* [PythonのライブラリSeabornの使い方【後編】](https://obgynai.com/python-seaborn-exercise2/)