見出し画像

大谷選手の記念すべき試合なのに観客少なくない? -pandasによるweb scraping その1 -

大谷選手がMLBで104年ぶりに2桁勝利&2桁本塁打達成!

日本時間の2022/8/10(現地8/9)にMLBのロザンゼルス・エンゼルスに所属している大谷翔平選手が10勝目を上げました。ホームランは既に当日含め25本に達しており、実に1918年ベーブ・ルース(レッドソックス当時)以来104年ぶりに2桁勝利&2桁本塁打を達成しました。おめでとうございます。
日本のメディアでは大谷さんの報道は毎日のように行われ、その日も当然のようにTVで報道されていました。

しかし、観客少なすぎやしません?

何と驚きの9,351人で、定員35,067人に対してわずか27%。試合の概要は以下。なお前日は5,440人、次の日は8,268人です。

TVだと基本投手と打者しか映らず、画角が決まっているため、それほど目立たないですが、外野にボールが飛んで、TVがパンすると、まあ、人がいない、いない。昔のパ・リーグかと。
今回は観客をどうやって増やすかが主眼ではないので割愛しますが、映画「マネーボール」の元ネタになった球団としては悲しい姿です。
ブラッド・ピット主演の映画はこちら

そもそもチームに金がなく、良い選手は出ていってしまう、球場周辺の治安が悪い、球場が古くて(NFLと兼用してた時代も)ボロい、その割にはチケットが高い、などなど。本拠地移転の話も出てますしね。どうなることやら。ユニフォームは好きなんですが。

ここまで読んていただいた方は、今までの地図中心の話とまるで違う趣味のことを書いているように思われているかもしれませんが(否定はしません)、本題はここからです。
じゃあいつもいっぱい観客が入っている(ように見える)人気球団とどのくらい違うんだろう、できればウェブのデータをそのまま効率的に使って視覚化してみようと言うのが本題です。地図に関係するネタはまたいずれ。

早速可視化してみよう

情報ソースは先ほどと同じESPNのサイトにある表を使用します。
この表では、チーム別にホーム、ロードでの平均観客数などが、その日までの合計値として示されています。違う年の結果、チームの試合ごとの数字など、さすが統計大国のアメリカ、いろいろあるのですが、まずは2022年の結果を見ます。
なお執筆時点は日本時間の2022/8/12(アメリカ8/11)ですので、ご注意ください。https://www.espn.com/mlb/attendance

pandasを使う

パンダスと呼びます。
pythonのライブラリの1つでデータの前処理などに使用されます。他に簡単なデータ処理もできますし、他のライブラリと協力して、グラフ表示なども出来ます。
pandasを使うための環境構築の説明はそれだけで大変なので、割愛しますが、全てopenなfreeのものだけで準備できます。anacondaを使って構築するるというのも1つの方法だと思います。
このpandasをjupyter notebookというブラウザで使える統合開発環境でいじっていきます。
また、これにgeoをつけたgeopandasもあります。これはGIS処理が可能な拡張的ライブラリですが、データベースに関するメソッドの多くはpandasと共通なのでおすすめです。これもそのうちご紹介できればと。

データソースとしては先程のESPNのものを使います。
早速コードを見ていきます。

import pandas as pd # pandasライブラリの読み込み
url = 'https://www.espn.com/mlb/attendance' # 読み込むurl
df = pd.read_html(url,header=1)[0] # urlからデータを読み込み、余計なヘッダーを取る
df.head()

たったこれだけです。df.head()は最初の5行を表示するものなので、実質最初の3行です。
3行目では表を読んだ後で、2行あるヘッダーの1部を取る操作、[0]はトリッキーですが、ホームページにある表中の最初の要素を取る操作です。

読み込んだ直後のデータ

3つあるPCTは全て0になっているので削除します。
またこのままだと何だかわからないので、日本語表記にしてみます。

df.drop(columns=['PCT','PCT.1','PCT.2'],inplace=True) # 不要な列を削除
df.columns=['順位','チーム','ホームゲーム数','ホームゲーム総観客数',\
            'ホームゲーム平均観客数','ロードゲーム数',\
            'ロードゲーム平均観客数','全ゲーム数','全平均観客数'] # 列の名前を変更
df.head()
整理した後の表データ

グラフ化してみる

このままではホームページの表のままなのでグラフ化してみます。そのためにはmatplotlibという別のライブラリを使います。

import matplotlib.pyplot as plt # matplotlibライブラリの取り込み
plt.rcParams['font.family'] = 'Meiryo' # グラフで日本語を使う設定
# 縦の棒グラフにすると順番がひっくり返るので先に変換
# グラフ表示
df_sort = df.sort_values('ホームゲーム平均観客数', ascending=True)
x=df_sort['チーム'] # X軸(縦方向のグラフなので実際は縦軸)
home_attendance=df_sort['ホームゲーム平均観客数'] # Y軸(縦方向のグラフなので実際は横軸)
plt.figure(figsize=(8,12)) # グラフの大きさ
# barh:縦方向のグラフ fcは棒の色 ドジャースブルー
plt.barh(x, home_attendance,height=0.5,fc='#005A9C',label='ホームゲーム平均観客数') 
plt.title('2022MLB ホームゲーム平均観客数  2022/8/12現在') #title 
plt.xlabel('ホームゲーム平均観客数') # X軸のラベル
plt.ylabel('チーム') # Y軸のラベル
plt.legend(loc = 'center right') # 凡例表記
2022MLBホームゲーム平均観客数 2022/8/12現在

元の表のまま縦方向の棒グラフにすると軸が逆(少ないほうが上になる)になってしまうので、データを反転しておきます。barhが縦方向の棒グラフにするメソッドです。

  • ロサンゼルス・ドジャースの観客数が圧倒的に多い

  • 上位に名門チームが多い

  • 全体的に歴史の長いナショナルリーグの観客数が多い

  • 大谷選手のロサンゼルス・エンゼルスは13位

  • オークランド・アスレチックスは最下位9,444人で、マイアミ・マーリンズ11,633人からも少し離されている

  • エンゼルスは借金14で地区4位、アスレチックスは借金30で地区5位

  • タンパベイ・レイズは東地区3位で頑張ってるのに客が入らない

グラフだと一目瞭然ですね。まあドジャースファンなので良いんですが。
せっかくなので、ロードの結果も入れてグラフを書いてみましょう。
ほぼ同じなのですが、2変数になっています。heightが棒の縦の幅になるのですが、+-の値を与えることで並列させることが出来ます。
棒の色はドジャースブルーに加え、アスレチックスの黄色(オレンジに見える)にしてみました。緑色だと見えないので。

x=df_sort['チーム']
home_attendance=df_sort['ホームゲーム平均観客数']
road_attendance=df_sort['ロードゲーム平均観客数']
plt.figure(figsize=(8,12))
plt.barh(x, home_attendance,align='edge',height=0.3,fc='#005A9C',label='ホームゲーム')
plt.barh(x, road_attendance,align='edge', height=-0.3,fc='#EFB21E',label='ロードゲーム')
plt.title('2022MLB ホーム・ロードゲーム平均観客数  2022/8/12現在')
plt.xlabel('平均観客数')
plt.ylabel('チーム')
plt.legend(loc = 'center right')
2022MLBホーム・ロードゲーム平均観客数 2022/8/12現在

これも細かく見ると面白いのですが、少しだけ。

  • ホームの平均観客数で最下位のオークランド・アスレチックスはロードでは最下位ではなく、最下位はミネソタ・ツインズ

  • ロードの平均観客数1位もロサンゼルス・ドジャース

  • ここでもタンパベイ・レイズは下から4番目

  • 青色 << 黄色のチームはどんな気持ちになるんでしょうね。

現地4/20の試合では下部のAAAの試合より客が少ないとのtweet。気の毒です。

まとめ

まだまだ色々できそうなのですがこの辺にします。
今回はpython上でpandasとmatplotlibを使ってMLBの観客数のグラフを作ってみました。データの取得自体はいわゆるweb scrapingといわれるものになります。
1回グラフを作るだけなら、そんなことしないで、excelにコピペでいいではないかとなるのですが、これを定期的にやる、複数年比較する、チームごとに毎試合追っかけてみる、もっと多様なグラフを作る、などになりますと、方法をある程度自動化する方法を知っておくのは効果的ではないかと思います。
今回、このようなメリットについてはあまり分かる形で触れてないのですが、それはその2などの形で触れていこうと思います。
なお、pandasの知識はgeopandasを使う上で非常に役に立ちますので、知っておいて損はありません。

結論 エンゼルスは恵まれている

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