散布図

# 量的変数と量的変数

## 二項目間の散布図

matplotlib

```python
import matplotlib.pyplot as plt

# columnsの２項目から散布図作成
plt.scatter(df['column1'], df['column2'])
# 横軸と縦軸のラベルを追加
plt.xlabel('column1')
plt.ylabel('column2')
plt.show()

# column1とcolumn2の相関係数
print(df[['column1', 'column2']].corr())
```

![download-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698282/d7c6cc74-a8e7-0a04-ec49-7c1f92b06b49.png)


seaborn

```python
import seaborn as sns

sns.scatterplot(data=df, x="column1", y="column2")

# column1とcolumn2の相関係数
print(df[['column1', 'column2']].corr())
```

![download-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698282/10e781a7-8ef6-acb1-d2a0-015fe765767d.png)


## 量的変数の散布図＋質的変数

```python
sns.scatterplot(data=df, x="column1", y="column2", hue="y")
# hue="y"は色で区別/style="y"で形で区別
# 重なりが多い場合 alpha = 0~1 で濃度調整

# column1とcolumn2の相関係数
print(df[['column1', 'column2']].corr())
```

![download.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698282/dad47076-da0c-8c3e-fdb8-06da50b3fd3b.png)

## 量的変数の散布図＋量的変数（バブルチャート）
```python
import seaborn as sns

sns.scatterplot(data=df, x="column1", y="column2", hue="y", size="column3", sizes=(10,200))

# scatterplot関数の引数sizeに量的変数を指定する
# sizesではplotの大きさ範囲を指定
# alpha=0~1で濃度調整

# ageとbalanceの相関係数
print(df[['column1', 'column2']].corr())
```

![download.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698282/6faa9e17-3980-3433-22b5-053a84a59d46.png)

### 凡例項目の外出し
```python
ax = sns.scatterplot(data=df, x="column1", y="column2", hue="y", size="column3", sizes=(10,200))
ax.legend(loc="upper left", bbox_to_anchor=(1,1))

print(df[['column1', 'column2']].corr())
```

![download-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698282/b24424ca-1a93-c853-700b-f8d7457a4dda.png)

plotly

```python
# pip install plotly

import plotly.express as px

fig=px.scatter(df,x="column1", y="column2", size ="column3", color="y",size_max=30)
fig.show()
```

![Unknown-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698282/580d5b45-373d-9a33-90bd-4b74776f3a6b.png)




## ジョイントプロット

```python
import seaborn as sns

sns.jointplot(data=df, x="column1", y="column2",marginal_kws={"bins":10})
# ヒストグラムの本数を指定する marginal_kws={"bins":本数}
# 色の指定：color
# kind="hex" でplotから六角形のビン表示になる。濃度がプロットの密度を表す。
# hueを引数には持てない模様


# column1とcolumn2の相関係数
print(df[['column1', 'column2']].corr())
```

![download-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698282/41f55b47-02cc-2fb3-10c4-25e6dd710a52.png)

```python
# 相関係数とp値の表示
sns.jointplot(data=df, x="column1", y="column2",marginal_kws={"bins":10}).annotate(stats.pearsonr)

# 表示枠消し
sns.jointplot(data=df, x="column1", y="column2",marginal_kws={"bins":10}).annotate(stats.pearsonr, frameon=False)

```


## 散布図行列
2つの項目間の関係を一括で表示する  

matplotlib

```python
import matplotlib.pyplot as plt

# 散布図行列の描画
pd.plotting.scatter_matrix(df[['column1','column2','column3','column4']])
plt.tight_layout()
plt.show()
```

![download.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698282/a3858d79-db9d-c462-3d23-849003342496.png)


## 散布図行列→相関係数行列→heatmap

```python
import seaborn as sns
sns.pairplot(data=df[['column1','column2','column3','column4',"y"]],hue="y", diag_kind = "hist")
plt.show()

# ここでも hue を引数にとって質的変数の分布を見ることができる
# 質的変数ごとに色分けを指定する場合：palette={'yes': 'red','no':'blue'}
# plotするmarkerを指定する場合markers='+' / markers=['+', 's', 'd']

# 対角成分のプロット ヒストグラム：diag_kind = "hist" / カーネル密度推定 diag_kind = "kde"

# plotの濃度調整：alpha=0~1

# 二項目間の散布図に回帰直線を書く：kind='reg'

# 出力グラフサイズの指定：height=2

# グラフ化する列を指定する：x_vars=['column1', 'column2'],y_vars=['column1', 'column2']

# 指定するdf内にhueに指定したいobject型データが必要
# sns.pairplot(df[['column1','column2','column3','column4']],hue="y") だとエラー

# type(df[['column1','column2','column3','column4',"y"]]) # pandas.core.frame.DataFrame

# 出力したpairplotを.pngで保存
# sns.pairplot(df[['column1','column2','column3','column4',"y"]],hue="y").savefig('file.png')

# 相関係数行列
corr = df[['column1','column2','column3','column4',"y"]].corr(method="pearson")
print(corr)

# 相関係数行列からheatmapを作る
sns.heatmap(corr, cmap='coolwarm', annot=True)
plt.show()
# annnotで相関係数の記載のオンオフ
```

![download.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698282/2a79ef85-5745-c911-928c-93908e4cc6c7.png)

![download-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698282/59a0ec33-c467-dfab-54f0-820f9b898458.png)

# 量的変数と質的変数
```python
import seaborn as sns

sns.catplot(data=df,x="category1", y="column1",hue="y",alpha=0.5)
```
![download-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698282/c7d287a2-7b4d-76d8-deb9-aa6be260a06f.png)