Pythonでスポーツデータを楽しむ(アルゼンチン代表の得点源とは?)
こんにちは。Jackalistです。
先週、Note目標10投稿を達成したので、次は来年中の100投稿を目標に日々頑張りたいと思います。
それでは本日もスポーツデータで楽しみましょう。
まず初めに
これから同時並行でいくつか新しいシリーズを投稿していく予定ですが、第一弾として、ラグビーアルゼンチン代表について、Pythonで学んだことを用いながら、色々とデータをみていこうと思います。
2023年のフランスワールドカップで日本代表と対戦
先日の抽選会でアルゼンチンと対戦することが決まりました。
このNoteでのアルゼンチン代表考察も、2023年まで細々と続けたいなと思います。
本日のテーマは、ザ・ラグビーチャンピオンシップの振り返り
さてそんなアルゼンチン代表ですが、先月のザ・ラグビーチャンピオンシップで、初めてニュージーランド代表に勝利しました。
ということで、アルゼンチンのザ・ラグビーチャンピオンシップでの試合結果について振り返っていきたいと思います。
ちなみにラグビーチャンピオンシップについてはこちらから。
公式サイトで元データの取得と確認
早速、公式サイトからエクセルデータをゲットしたので読み込んでみます。
複数シートがあるので、シート名を指定する必要があります。
#シート名:Standings、Player Stats
Champ= pd.read_excel("/content/drive/MyDrive/Colab Notebooks/row_data/The Rugby Championship_2020.xlsx",sheet_name=0)
Champ
各カラムの説明
P:Played、W:Win、D:Draw、L:Lose、PF:Points for、PA:Points against、TF:Tries for、TA:Tries against、TB:Tries bonus、LB:Losing bonus、+/-:Points difference、BP:Bonus points、Pts:Points
南アフリカ代表がコロナの影響で参加できず、3チームでホームアンドアウェイ形式・4試合ずつ実施し、アルゼンチン代表は1勝2分1敗でした。
アルゼンチン代表ですが、4試合で得点数56点、トライ数2と、他2チームに比べて得点力の弱さが気になるとこです。
ということで得点数を細かくみていきます。
ザ・チャンピオンシップ プレーヤー別得点ランキング
#プレイヤー得点ランキング読み込み
Champ_Stats = pd.read_excel("/content/drive/MyDrive/Colab Notebooks/row_data/The Rugby Championship_2020.xlsx",sheet_name=1)
Champ_Stats
行名が少しおかしいので修正します。
#列名変更、ランキングの昇順でソート
Champ_Stats.rename(columns={"Unnamed: 0":"Rank"}).sort_values("Rank",ascending=True)
面白い数字が出てきました。チーム別だと、アルゼンチン代表の総得点数は最下位でしたが、プレーヤー別で確認すると、1位にアルゼンチンのニコラス・サンチェス選手がきてます。
比較できるよう、1番右の列にチームの総得点を入れて、各プレーヤーの総得点に占める割合を出してみます。
#各チームの総得点を右列に追加
Champ_Stats.loc[Champ_Stats['TEAMS'] == "Argentina", 'PF'] = 56
Champ_Stats.loc[Champ_Stats['TEAMS'] == "Australia", 'PF'] = 60
Champ_Stats.loc[Champ_Stats['TEAMS'] == "New Zealand", 'PF'] = 118
#追加した総得点 / 各選手のPOINTS = プレーヤー毎のチーム総得点に占める割合
Champ_Stats["PF per Person"] = round(Champ_Stats["POINTS"] / Champ_Stats["PF"] ,3)
Champ_Stats.sort_values("PF per Person",ascending = False)
ニコラス・サンチェス選手は、アルゼンチン代表4試合総得点56点の内、76.8%の43点を1人で稼ぎだしていたことが分かります。勝利したニュージーランド戦では全得点をあげていました。
このニコラス・サンチェス選手、パス・キック・ランと三拍子揃った素晴らしい選手ですが、裏を返せばこの選手の調子の良し悪しで、ゲーム展開が大きく変わってしまいます。
この辺は、過去のラグビーワールドカップ2019ポジション別編でも触れているので、下の動画と併せて、良ければご覧ください。
ニコラス・サンチェス選手の得点力を円グラフで確認してみる
得点をあげた全選手で確認してみます。
#全20選手の確認
values = Champ_Stats["POINTS"]
label = Champ_Stats["PLAYERS"]
plt.pie(x=values,labels=label,autopct="%.1f%%",startangle=90, counterclock=False,explode=[0.2,0,0,0.2,0,0,0,0,0.2,0,0,0,0,0,0,0,0,0,0,0])
plt.show()
パイの切り離しなど、学んだことを色々使ってます。切り離れているのは、各チームで1番点を上げた選手です。
これだと少し分かりづらいので、チーム毎に円グラフを並べてみます。
初めてやってみたので、少し手こずりました。他にもっとシンプルなやり方がありそうですが、とりあえずそれっぽくなりました。
#DataFrameから各チームを切り離して変数に置き換える
#それぞれのvalueとlabelを設定
#plt.figureでインスタンスを生成して、subplotで配列を決める
#文字の重なりはtight_layoutで綺麗にする
arg = Champ_Stats[Champ_Stats["TEAMS"]=="Argentina"]
aus = Champ_Stats[Champ_Stats["TEAMS"]=="Australia"]
nzl = Champ_Stats[Champ_Stats["TEAMS"]=="New Zealand"]
values1 = arg["POINTS"]
label1 = arg["PLAYERS"]
values2 = aus["POINTS"]
label2 = aus["PLAYERS"]
values3 = nzl["POINTS"]
label3 = nzl["PLAYERS"]
fig = plt.figure()
ax1 = fig.add_subplot(2, 2, 1) #2行2列の1番目
ax1.pie(x=values1,labels=label1,autopct="%.1f%%",startangle=90,counterclock=False)
ax1.set_title("ARG")
ax2 = fig.add_subplot(2, 2, 2) #2行2列の2番目
ax2.pie(x=values2,labels=label2,autopct="%.1f%%",startangle=90,counterclock=False)
ax2.set_title("AUS")
ax3 = fig.add_subplot(2, 2, 3) #2行2列の3番目
ax3.pie(x=values3,labels=label3,autopct="%.1f%%",startangle=90,counterclock=False)
ax3.set_title("NZL")
plt.tight_layout()
plt.show()
先ほどよりは少し良くなりましたね。
アルゼンチン代表のニコラス・サンチェスへの依存度、反対にニュージーランドの得点源の豊富さが良く分かります。
アルゼンチンの場合、格上相手なのでどうしても戦い方が限られ、キック中心のゲーム展開になり、キッカーもつとめるニコラス・サンチェス選手の得点が高くなるのは自然なことですが、それでは少し比率が高すぎますね。
一方で、過去の投稿で取り上げましたが、アルゼンチンは、2019年日本大会を経験している若手がかなり残ります。
この辺も含めて、残り3年でアルゼンチンがどのようにチームを作り上げてくるか楽しみですね。
まとめ
本日は、複数の円グラフを並べて表示してみました。文字の重なりや、レイアウトなど、まだまだ改善の余地がありそうですね。
このアルゼンチン代表シリーズですが、2023年までゆったりと続けていく予定です。
良ければモチベーション維持になるのでスキ・フォローを頂けるとめちゃくちゃ嬉しいです。
それでは本日もありがとうございました!