大谷選手の記念すべき試合なのに観客少なくない? -pandasによるweb scraping その2 -
前回の続きです。
エンゼルスを基準にしたホーム・ロードの平均観客数の比を求める
前回はMLBのホーム・ロードゲーム平均観客数を比較したところまで、やってみましたが、もうひと加工してみます。
日本のメディアで放送されるMLBの試合の殆どがエンゼルス戦であり、特にMLBファンで無い限り、他の試合を想像するのは難しいと思われますので、エンゼルスを基準にしてみようというものです。
計算処理としては、「ホーム、ロードゲームそれぞれのエンゼルスが平均観客数が1となるように、他チームの平均観客数をエンゼルスの平均観客数で除して比率を求める。」をしてみます。
割り算をしているだけで傾向は変わらないですから、前回のグラフを1つずつ細かくみれば分かる話なのですが、何倍なのか、何分の1なのかというのは、口頭で議論をするときに感覚をつかむのに便利ですし、そもそもの趣旨はpandasへの習熟ですので、そこは何卒ご容赦ください。
なお前回の投稿(8/12)から数日経っていますので、数字が勝手にアップデートされています。いいところでもあり、注意点でもあるのですが、そこは不問で行きます。
LAAHome=df[df['チーム']=='LA Angels']['ホームゲーム平均観客数'].tolist()[0] # エンゼルスのホームゲーム平均観客数
LAARoad=df[df['チーム']=='LA Angels']['ロードゲーム平均観客数'].tolist()[0] # エンゼルスのロードゲーム平均観客数
df['エンゼルス基準ホームゲーム平均観客数']=df['ホームゲーム平均観客数']/LAAHome # エンゼルスを1とした比率(ホームゲーム)
df['エンゼルス基準ロードゲーム平均観客数']=df['ロードゲーム平均観客数']/LAARoad # エンゼルスを1とした比率(ロードゲーム)
df
いちいち式で求めなくても、目で見てエンゼルスの平均観客数を代入すればいいのですが、そこは何時でも計算できるようにしています。それで、結果はこの通り(一部抜粋)
前回同様、縦の棒グラフにすると順番がひっくり返るのでそれをソートし、また今回は2つのグラフに分割するのでその変数の準備をします。
# 縦の棒グラフにすると順番がひっくり返るので先に変換
df_sort_LAA = df.sort_values('エンゼルス基準ホームゲーム平均観客数', ascending=True)
# 棒グラフ表示用(Yにあたる)
home_attendance=df_sort_LAA['エンゼルス基準ホームゲーム平均観客数']
road_attendance=df_sort_LAA['エンゼルス基準ロードゲーム平均観客数']
作成した変数を使って横に2つ並んだグラフを作ります。
グラフの書き方にはいろいろな方法があるのですが、愚直に書いてみました。
#2列のグラフの枠をサイズ10,8で設定
fig = plt.figure(figsize=(10, 8))
ax1 = fig.add_subplot(1, 2, 1)
hbars1 = ax1.barh(x,home_attendance,align='edge',height=0.5,fc='#005A9C',label='ホームゲーム')
ax1.set_xlim(0.2, 1.8)
ax1.set_xlabel('平均観客数比(エンゼルスを1とする)')
ax1.set_ylabel('チーム')
ax1.bar_label(hbars1,fmt='%.2f') # 棒グラフに値ラベルを追加
ax1.legend(loc = 'lower right') # 凡例を追加
ax2 = fig.add_subplot(1, 2, 2)
hbars2 = ax2.barh(x,road_attendance,align='edge',height=0.5,fc='#EFB21E',label='ロードゲーム')
ax2.set_xlim(0.2, 1.8)
ax2.set_xlabel('平均観客数比(エンゼルスを1とする)')
ax2.bar_label(hbars2,fmt='%.2f')
ax2.legend(loc = 'lower right')
# 共通タイトルを設定
fig.suptitle('2022MLB ホーム・ロードゲーム平均観客数比(エンゼルス基準) 2022/8/15現在')
fig.tight_layout() # グラフの間隔をいい感じにする
plt.show()
絶対数のグラフが相対的になっただけですが、ホームゲームでは同じロサンゼルスにあるドジャースはエンゼルスの1.5倍のホーム観客数を獲得しているのに対して、サンフランシスコにあるアスレチックスは、エンゼルスの3分の1しかないことが明白にわかります。
一方、ロードゲームになると、それほど差はないこともわかります。
ロードゲームは人気チーム、不人気チーム関係なく戦いますので当然ですが。
ただアメリカンリーグ西地区のチームは、同一リーグのアスレチックスとの対戦が多いので、あおりを食っている可能性はあります。とはいえ、ここでもドジャースは1位です。
今後のネタ
短いですが今回はここまでです。geopandasというpandasの拡張があると、前回書きましたが、その機能を使うと同じデータを使ってこんな地図もpython上で作れます。
これは、ホーム球場の場所に、ホームゲームの平均観客数を色と円の大きさで示したものです。背景にはOpenStreetmapのOpenTopoMap(SRTMデータで使った地形表現図)を使っています。
私にはアメリカの地理感覚(人口やその分布)がそれほどないので、これだけでぱっと理解はできないのですが、だからこそそれを地図的に見てみようという気になります。
とはいえ、ひと目見て移動はタフだなあとは思います。
シアトル、コロラド、マイアミは、やはりかなり特異な立地ですね
地図以外に複数年を比較したデータ整理方法についても、もう少し関連データを使って掘り下げようと思います。
この記事が気に入ったらサポートをしてみませんか?