散布図行列(Scatter plot matrix)と相関行列(Correlation matrix)をpythonで実装する

グラフ実装
あい
あい

多変量のデータを
一回の処理で散布図にする方法として
散布図行列があります。
今回は散布図行列と
相関行列について解説
pythonで実装する方法を教えます

[PR]※本サイトにはプロモーションが含まれています

散布図行列(Scatter plot matrix)とは

散布図行列は

複数の変数の相関関係を可視化するために使用されるグラフの一種です

散布図行列では

データセット内の複数の変数の内

二変数の相関関係を示す

散布図行列が作成され

各変数の相互関係をみることが出来ます。

データのパターン認識やクラスター

が明らかになり

データの特徴や異常値を見つけるのに役に立つ

データの型

観測番号変数番号1変数番号2変数番号p
1\(x_{11}\)\(x_{12}\)\(x_{1p}\)
2\(x_{21}\)\(x_{22}\)\(x_{2p}\)
n\(x_{n1}\)\(x_{n2}\)\(x_{np}\)

散布図行列はp × pで作成されます

あい
あい

早速作ってこー!

データ準備

あい
あい

ポケモンSVレート対戦のシーズン11,

10/1~11/1の上位ポケモン30の

種族値のデータを持ってきました。

ポケモン使用率ランキング(シーズン11・シングル) | ポケモンバトルデータベース スカーレット・バイオレット (pokedb.tokyo)

順位ポケモン名種族値合計HPこうげきぼうぎょとくこうとくぼうすばやさ
1オーガポン55080120846096110
2カイリュー600911349510010080
3ハバタクカミ570555555135135135
4ガチグマ555113701201356552
5サーフゴー5508760951339184
6パオジアン57080120809065135
7ウーラオス(水550100130100636097
8ハッサム50070130100558065
9イーユイ570558080135120100
10テツノツツミ570568011412460136
11ランドロス60089145901058091
12ウーラオス(悪550100130100636097
13キョジオーン500100100130459035
14キュウコン50573677581100109
15ガブリアス600108130958085102
16ディンルー570155110125558045
17キラフロル5258355901308186
18トドロクツキ5901051397155101119
19グライオン5107595125457595
20コノヨザル53511011580509090
21イダイトウ53012011265807578
22ヒードラン600919010613010677
23アーマーガア4959887105538567
24セグレイブ60011514592758687
25エンペルト53084868811110160
26ヘイラッシャ530150100115656535
27ミミッキュ4765590805010596
28ドラパルト600881207510075142
29ロトム520506510710510786
30ゴリランダー53010012590607085
あい
あい

今回はポケモンの能力
の2つの数値の関係を
確認したいので
散布図行列にして
各能力の
相関関係を
確認したいと思います

散布図行列を実装する

 データを整理してCSVファイルに入れます。

Pythonで実装

#CSVからデータを読み込んで散布図行列を作るためのプログラム
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

data=pd.read_csv('/input/Pokemon3.csv')

#散布図行列を作成
scatter_matrix=pd.plotting.scatter_matrix(data,figsize=(10,10),alpha=0.8)
#タイトルを追加
plt.suptitle("Pokemon ability Scatter Plot Matrix ",fontsize=14)
plt.show()

複雑な散布図行列も

#散布図行列を作成
scatter_matrix=pd.plotting.scatter_matrix(data,figsize=(10,10),alpha=0.8)

を使えばすぐかけます

あい
あい

出来た~
相関係数も
グラフに入れてみよう

相関行列(Correlation matrix)

相関行列の要素を見ることで、

互いに相関の強い、弱い変数の組み合わせを

見つけることが出来る。

上記のデータの相関行列計算結果は・・

HPこうげきぼうぎょとくこうとくぼうすばやさ
HP10.40.3-0.360.46-0.55
こうげき0.41-0.05-0.55-0.360.05
ぼうぎょ0.3-0.051-0.18-0.44-0.61
とくこう-0.36-0.55-0.1810.280.22
とくぼう0.46-0.36-0.440.2810.12
すばやさ-0.550.050.610.220.121

次に上記の相関係数を計算グラフに表記するコードを作成する

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

data=pd.read_csv('/input/Pokemon3.csv')
#相関係数を作成
corr=data.corr()
#散布図行列が計算されているか確認する
#print(corr)

#散布図行列を作成
scatter_matrix=pd.plotting.scatter_matrix(data,figsize=(10,10),alpha=0.8)
plt.suptitle("Pokemon ability Scatter Plot Matrix ",fontsize=14)
#plt.show()
#相関係数を表記
for i,j in zip(*plt.np.triu_indices_from(scatter_matrix,k=1)):
  scatter_matrix[i,j].annotate(
      f"Corr:{corr.iloc[i,j]:.2f}",
      (0.6,0.9),
      xycoords='axes fraction',
      ha='center',
      va='center'
  )
plt.show()

グラフは・・

あい
あい

出来た~
相関係数も
入ってる!

散布図行列と相関行列から考察してみる

  • HPと各変数の相関

    → 体力とこうげき、守備に正の相関がある。
     体力ととくこう、とくぼうに負の相関がある
     すばやさ無相関
    →シーズン11のトップ30のHPが高いポケモンは攻撃、防御が高く
    とくしゅ、とくぼうが低いポケモンが多いのではないか?
あい
あい

HPの多い順に
並び替えて

データを見てみるか

あい
あい

HP Top12のポケモンは
こうげきぼうぎょが100を超えているポケモンが
多くいますが
とくこうとくぼうのどちらかが
100を超えているポケモンは
ガチグマトドロクツキだけ…

物理アタッカーかつ
防御の高いポケモンがHPTop12に多く
こういうタイプの
ポケモンはとくこう特防が
低い傾向があるのかな…?

タイトルとURLをコピーしました