Python×スポーツデータ(ラグビーワールドカップ 歴代大会・チーム別得失点)
こんにちは。Jackalistです。
それでは本日もスポーツデータで楽しみましょう。
前々回、前回の振り返り
歴代大会全体の得点推移・チーム別得失点を2回に分けて確認しました。
今回はその2つを併せて、大会・チーム別の得失点を見ていきます。
元データの確認・下処理・集計
まずは確認から。
考え方は前回と同じです。
① 通算得点を出す
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
失点も同じ要領でやります。
#チーム大会別失点
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
得点と失点を結合させます。
#得点と失点を結合
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)
いい感じですね。次は可視化してみます。
ヒートマップで描画・所感(大会・チーム別得点数)
#描画用に得失点数をクロス集計
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()
緑色が濃くなるほど点数が増えています。
こうやって可視化すると、ニュージーランドがどの大会でも得点を上げているのが良くわかりますね。
大会別総得点が一番高かった2003年ですが、イングランド・オーストラリアもニュージーランドと同じくらい点を上げてます。また日本は、今大会2019年で1番点を上げてますね。
次は失点数をやってみます。
ヒートマップで描画・所感(大会・チーム別失点数)
Codeはクロス集計の変数名を変えるだけなので割愛します。
青色がピンクに近くほど失点数が増えています。
2003年大会のナミビアが最多失点です。他にも2003年のウルグアイ、ジョージア、ルーマニアの失点数が多いです。
前回、記事にした大会別総得点で2003年が一番だったのは、ニュージーランドやオーストラリアの強豪と、前述のランキング下位のチームが予選で当たり、大差がついたのが原因かと思います。
ちなみに日本も1995年は250点以上取られていますが、今大会2019年で28年ぶりに100点を切っています。
また2019年大会失点数1位・2位、ナミビアのワールドカップ初勝利がかかった、カナダvナミビア戦は、台風で中止になってしまいましたが、個人的に1番注目していた試合でした。試合会場の予定だった釜石市が、今年両チームを招待するはずが、コロナで断念したみたいですね。是非、来年実現させて欲しいです。
まとめ
今回は、得失点数をヒートマップで描画してみました。棒グラフ・折れ線グラフは、エクセルの方が楽だなと思いましたが、ヒートマップなどが一瞬で出来ることを考えると、やはりPythonは便利だなと改めて思いました。
この辺の描画は、かなりできることが多そうなので、時間の許す限り取り組んでみたいと思います。
良ければモチベーション維持になるので、スキ・フォローを頂けると大変嬉しいです。
それでは本日もありがとうございました。
この記事が気に入ったらサポートをしてみませんか?