1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Bリーグの得失点をヒートマップで可視化

Last updated at Posted at 2020-07-12

目的

Bリーグの試合結果から得失点のヒートマップを作成します

heatmap

実装

データ取得

こちらのサイトからBリーグの試合結果を取得します
https://www.bleague.jp/schedule/?s=1&tab=1&year=2019&event=2&club=&setuFrom=1

取得はPythonのSeleniumを使用します
取得結果はpandas.DataFrameにまとめます

結果

データ取得DF

整形

得点頒布のラベル付け

バスケはサッカーや野球と比較すると得点の幅が広いため、10点区切りの頒布表を作成します

こちらの記事を参考に得点の階級カラムを追加します
https://qiita.com/kshigeru/items/bfa8c11d1e6487c791d3

labels = [ "{0} - {1}".format(i, i + 9) for i in range(40, 200, 10) ]
df['ホームスコア頒布'] = pd.cut(df['ホームスコア'], np.arange(40, 201, 10), labels=labels)
df['アウェイスコア頒布'] = pd.cut(df['アウェイスコア'], np.arange(40, 201, 10), labels=labels)

40〜200点までを10点区切りでラベル付けを行います
範囲外のものにはNaNがセットされます

結果

得点頒布のラベル付けDF

ホーム/アウェイごとにグルーピング

ホームの戦績とアウェイの戦績は差が出ることが予想できるので、
ホーム戦のヒートマップ、アウェイ戦のヒートマップ、全戦のヒートマップを作成します

for team in teamList:
    teamHomeDf = df.query('ホーム == @team')
    teamAweyDf = df.query('アウェイ == @team')
    teamDf = pd.concat([teamHomeDf, teamAweyDf])

teamListには全チームのチーム名が格納されています

結果

グルーピングDF

ヒートマップ用のデータ作成

ヒートマップ作成のためにデータを図のように整形します
ヒートマップ用のデータ作成DF

distributionDf = teamHomeDf.groupby(['ホームスコア頒布', 'アウェイスコア頒布'])
distributionDf = distributionDf.size().unstack()
distributionDf = distributionDf.fillna(0)

cols = distributionDf.columns
indexs = distributionDf.index

for index in indexs:
	for col in cols:
		allDf.at[index, col] = round(distributionDf.at[index, col] / total, 2)

plt.figure(figsize=(8, 8))
sns.heatmap(allDf, annot = True, cmap = color, vmin = 0, square = True)
if not os.path.exists(path):
	os.makedirs(path)
plt.savefig(path + '/' + fileNm)
plt.close('all')

allDfには図のようなデータをセットしておきます
allDf

出力

整形したデータをもとにヒートマップを出力します
ヒートマップについてはこちら
https://note.nkmk.me/python-seaborn-heatmap/
https://matplotlib.org/tutorials/colors/colormaps.html

plt.figure(figsize=(8, 8))
sns.heatmap(allDf, annot = True, cmap = 'hot', vmin = 0, square = True)
if not os.path.exists(path):
	os.makedirs(path)
plt.savefig(path + '/' + fileNm)
plt.close('all')

出力されたヒートマップ

allDf
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?