スポーツデータ×Python(ラグビーW杯大会通算戦績を出場国毎に確認してみる)
こんにちは。Jackalistです。
それでは本日もスポーツデータで楽しみましょう。
前回までの振り返り
3回に分けて、↓に貼り付けたラグビーワールドカップ過去大会のデータを使いながら得失点を確認しました。
このデータを使って、最後に勝敗数をチーム別に出したいと思います。
データの下処理・集計
特に集計イメージが沸いていなかったDrawの試合を一旦確認してみました。3試合過去にありますね。その内、2試合は日本対カナダです。
少しあれこれ考えて、イケそうな感じだったので一気にやってみました。
#ゲーム数を抽出 /Team 1に載っている回数をカウント
Team1=pd.DataFrame(RWC["Team 1"].value_counts())
#ゲーム数を抽出 /Team 2に載っている回数をカウント
Team2=pd.DataFrame(RWC["Team 2"].value_counts())
#Resultで勝ち数を抽出
Games=pd.DataFrame(RWC["Result"].value_counts())
#上記3つを結合
Team_unique = pd.concat([Team1,Team2,Games],join="outer")
#データを全部確認したいので行数指定
pd.set_option('display.max_rows', 100)
#index名がないので追加
Team_unique.index.name = "Team"
Team_unique
#indexをユニークにして数字を揃える
Team_unique2 = Team_unique.groupby("Team").sum()
Team_unique2
#Team1+Team2でゲーム数の合計を算出
Team_unique2["Games"] = Team_unique2["Team 1"]+Team_unique2["Team 2"]
Team_unique2
#Team1とTeam2は必要ないので削除
Team_unique2 = Team_unique2.drop(["Team 1","Team 2"],axis=1)
Team_unique2
#列の順番入れ替え
Team_unique2 = Team_unique2.iloc[:, [1,0]]
Team_unique2
#Draw行の削除
Team_unique2 = Team_unique2.drop(Team_unique2.index[3])
Team_unique2
#Draw分のGame数を対象チームに追加する
Team_unique2["Draw"] = [0,0,2,0,0,1,0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,0,0,0,0]
Team_unique2
#Lost行を追加
Team_unique2["Lost"] = Team_unique2["Games"] - (Team_unique2["Result"]+Team_unique2["Draw"])
Team_unique2
#floatからintに統一
Team_unique2 = Team_unique2.astype("int")
Team_unique2
#合計を出して、今までの下処理に誤りがないか確認
#Team_unique2 = pd.concat([Team_unique2,pd.DataFrame(Team_unique2.sum(axis=0),columns=['Grand Total']).T])
#Team_unique2 = pd.concat([Team_unique2,pd.DataFrame(Team_unique2.sum(axis=1),columns=['Total'])],axis=1)
#元データに2019年ドローのデータが入ってないので追加 ニュージーランドvイタリア、カナダvナミビア、イングランドvフランス
Team_unique2.at['New Zealand', 'Games'] = 57
Team_unique2.at['New Zealand', 'Draw'] = 1
Team_unique2.at['Italy', 'Games'] = 32
Team_unique2.at['Italy', 'Draw'] = 1
Team_unique2.at['Canada', 'Games'] = 33
Team_unique2.at['Canada', 'Draw'] = 3
Team_unique2.at['Namibia', 'Games'] = 23
Team_unique2.at['Namibia', 'Draw'] = 1
Team_unique2.at['England', 'Games'] = 51
Team_unique2.at['England', 'Draw'] = 1
Team_unique2.at['France', 'Games'] = 53
Team_unique2.at['France', 'Draw'] = 2
Team_unique2
#勝率を出す、簡単そうだったが1番時間かかったので覚えておく #astypeでfloat/int変換
Team_unique2["WinRate"] = round(Team_unique2["Result"]/Team_unique2["Games"] *100,1)
Team_unique2["WinRate"] = Team_unique2["WinRate"].astype(str) + "%"
Team_unique2
#Resultの列名をWinに変更
Team_unique2=Team_unique2.rename(columns={"Result":"Win"})
Team_unique2
#並び替え
Team_unique2.sort_values("WinRate",ascending=False)
データ数が増えたら、このやり方だときっとだめなんでしょうね。。もっと簡単な方法がありそうです。まずはコードをたくさん書いて勉強しないとですね。データ自体は問題なく出てきました。
それでは次に描画して、データを確認していきます。
積み上げ棒グラフで描画・所感
積み上げ棒グラフで今回は描画してみます。
#必要ない列名を事前に取り除く
Team_unique_bar = Team_unique2.drop(["Games","WinRate"],axis=1)
#見栄え的にUSAに変更
Team_unique_bar = Team_unique_bar.rename(index={"United States of America":"USA"})
#見栄え的にDrawとLostの順番を変更
Team_unique_bar = Team_unique_bar.iloc[:, [0,2,1]]
#並び替え
Team_unique_bar = Team_unique_bar.sort_values("Win",ascending=False)
#棒グラフ描画
Team_unique_bar.plot(kind="bar",figsize=(9,6),stacked=True,color=["limegreen","skyblue","gold"])
#plt.legend(["Win","Lose","Draw"])
plt.xlabel("Team",fontsize=20)
plt.ylabel("Games",fontsize=20)
plt.xticks(fontsize = 20)
plt.yticks(fontsize = 20)
plt.title("RWC Win/Draw/Lose", fontsize=20)
plt.tight_layout()
plt.show()
ニュージーランド強いですね。ちなみに1番負けているのは、26敗のアメリカでした。また6チームが未勝利に終わってます。個人的に1番注目したいのが、6大会出場23試合で1分22敗のナミビアです。
各国でプロ化が進む中、ナミビアは今大会も出場選手の7割がアマチュアでした。
前回の記事でも話した通り、今大会2019年、対カナダ@釜石で初勝利をかけたゲームが予定されてましたが、台風で中止になってしまいました。
そんなナミビアですがニュージーランド@東京の試合が、特に印象に残ってます。選手・コーチたちがどこまで勝利を意識してたかは分かりませんが、それでもいま出来ることを全て出し切ろうという気持ちを強く感じました。
前半35分まで9-10と一点差だったこの試合は、後半こそボコボコにやらてしまいましたが、前半だけであれば個人的に今大会のベストマッチです。
ハイライトを貼りますが、良ければフルマッチで前半だけでも見て欲しいです。
2023年出場することがあれば、是非初勝利を目指して欲しいですし、日本の次に応援したいチームです。
まとめ
今回は、勝敗数を積み上げ棒グラフで表示してみました。
描画よりも下処理に少し手間取りましたが、徐々に出来ることが増えてきたなと思います。このデータを使った記事はこれで最後になります。
次回からは新しいシリーズを投稿したいと思います。
良ければモチベーション維持になるので、スキ・フォローを頂けるとめちゃくちゃ嬉しいです。
それでは本日もありがとうございました。
この記事が気に入ったらサポートをしてみませんか?