見出し画像

Python×スポーツデータ(ラグビーワールドカップ 歴代大会・チーム別得失点)

こんにちは。Jackalistです。

それでは本日もスポーツデータで楽しみましょう。

前々回、前回の振り返り

歴代大会全体の得点推移・チーム別得失点を2回に分けて確認しました。
今回はその2つを併せて、大会・チーム別の得失点を見ていきます。

画像1

画像2

元データの確認・下処理・集計

まずは確認から。

画像3

考え方は前回と同じです。

① 通算得点を出す
 Year/Team1のTeam1 Score・Year/Team2のTeam2 Scoreを抽出・結合
 Year/Team1・2でチームが被るためグルーピングしてScoreを1つにする
② 通算失点を出す
 Year/Team1のTeam2 Score・Year/Team2のTeam1 Scoreを抽出・結合
 Year/Team1・2でチームが被るためグルーピングしてScoreを1つにする
③ ①と②を結合する

早速やっていきましょう。

#チーム別得点
#YearとTeam1/2でグループ化して、いらない列は削除
RWC_TEAM1_win2 = RWC.groupby(["Year","Team 1"]).sum().drop(["Team 2 Score","Total Score"],axis=1)
RWC_TEAM1_win2
RWC_TEAM2_win2 = RWC.groupby(["Year","Team 2"]).sum().drop(["Team 1 Score","Total Score"],axis=1)
RWC_TEAM2_win2

#両方を結合
RWC_Team_win2 = pd.concat([RWC_TEAM1_win2,RWC_TEAM2_win2],join="outer")
RWC_Team_win2.index.name = "Team"
RWC_Team_win2

#再度YearとTeamでグループ化してindexの重複をなくす
RWC_Team_win2 = RWC_Team_win2.groupby(["Year","Team 1"]).sum()
RWC_Team_win2

#Team1/2 Scoreを足してTotalを出す
RWC_Team_win2 = pd.DataFrame(RWC_Team_win2["Team 1 Score"] + RWC_Team_win2["Team 2 Score"])
RWC_Team_win2

#名前変更
RWC_Team_win2_z = RWC_Team_win2.rename(columns = {0:"Total Score"})
RWC_Team_win2_z

画像4

失点も同じ要領でやります。

#チーム大会別失点
RWC_TEAM1_lost2 = RWC.groupby(["Year","Team 1"]).sum().drop(["Team 1 Score","Total Score"],axis=1)
RWC_TEAM2_lost2 = RWC.groupby(["Year","Team 2"]).sum().drop(["Team 2 Score","Total Score"],axis=1)

RWC_Team_lost2 = pd.concat([RWC_TEAM1_lost2,RWC_TEAM2_lost2],join="outer")
RWC_Team_lost2.index.name = "Team"

RWC_Team_lost2 = RWC_Team_lost2.groupby(["Year","Team 1"]).sum()
RWC_Team_lost2

RWC_Team_lost2 = pd.DataFrame(RWC_Team_lost2["Team 2 Score"] + RWC_Team_lost2["Team 1 Score"])
RWC_Team_lost2

RWC_Team_lost2_z = RWC_Team_lost2.rename(columns = {0:"Total Lost Score"})
RWC_Team_lost2_z

画像5

得点と失点を結合させます。

#得点と失点を結合
RWC_Points2 = pd.merge(RWC_Team_win2_z,RWC_Team_lost2_z,on=["Year","Team 1"])
RWC_Points2 = RWC_Points2.rename(index={"United States of America":"USA"})
RWC_Points2
#以下、表示オプション
#pd.set_option('display.max_rows', 10)
#RWC_Points2.sort_values("Total Lost Score", ascending=False)

画像6

いい感じですね。次は可視化してみます。

ヒートマップで描画・所感(大会・チーム別得点数)

#描画用に得失点数をクロス集計
PF = pd.pivot_table(RWC_Points2, values="Total Score", index=['Year'], columns=["Team 1"], aggfunc=np.sum)
PA = pd.pivot_table(RWC_Points2, values="Total Lost Score", index=['Year'], columns=["Team 1"], aggfunc=np.sum)

#ヒートマップ
plt.figure(figsize=(15,10))
sns.heatmap(PF,square=True,cmap='YlGn',annot=True,fmt=".1f",linewidths=.5)
plt.xlabel("Team",fontsize=20)
plt.ylabel("Year",fontsize=20)
plt.xticks(fontsize = 20)
plt.yticks(fontsize = 20)
plt.title("RWC Points For", fontsize=20)
plt.xticks(rotation=90)
plt.yticks(rotation=0)
plt.tight_layout()
plt.show()

画像9

緑色が濃くなるほど点数が増えています。
こうやって可視化すると、ニュージーランドがどの大会でも得点を上げているのが良くわかりますね。
大会別総得点が一番高かった2003年ですが、イングランド・オーストラリアニュージーランドと同じくらい点を上げてます。また日本は、今大会2019年で1番点を上げてますね。
次は失点数をやってみます。

ヒートマップで描画・所感(大会・チーム別失点数)

Codeクロス集計の変数名を変えるだけなので割愛します。

画像8

青色ピンクに近くほど失点数が増えています。
2003年大会のナミビア最多失点です。他にも2003年のウルグアイ、ジョージア、ルーマニアの失点数が多いです。
前回、記事にした大会別総得点で2003年が一番だったのは、ニュージーランドやオーストラリアの強豪と、前述のランキング下位のチームが予選で当たり、大差がついたのが原因かと思います。

ちなみに日本1995年250点以上取られていますが、今大会2019年で28年ぶりに100点を切っています。

また2019年大会失点数1位・2位、ナミビアのワールドカップ初勝利がかかった、カナダvナミビア戦は、台風で中止になってしまいましたが、個人的に1番注目していた試合でした。試合会場の予定だった釜石市が、今年両チームを招待するはずが、コロナで断念したみたいですね。是非、来年実現させて欲しいです。

まとめ

今回は、得失点数をヒートマップで描画してみました。棒グラフ・折れ線グラフは、エクセルの方が楽だなと思いましたが、ヒートマップなどが一瞬で出来ることを考えると、やはりPythonは便利だなと改めて思いました。
この辺の描画は、かなりできることが多そうなので、時間の許す限り取り組んでみたいと思います。

良ければモチベーション維持になるので、スキ・フォローを頂けると大変嬉しいです。

それでは本日もありがとうございました。

この記事が参加している募集

スキしてみて

スポーツ観戦記

この記事が気に入ったらサポートをしてみませんか?