見出し画像

もうすぐプロ野球が開幕!各球団の選手が何年残っているか調べてみた!

球春到来!

いよいよ明日、プロ野球が開幕です。日本時間の30日に海の向こうメジャーリーグ(MLB)も開幕するので、日米(ほぼ)同時開幕ですね。

ということで、「Baseball Play Study 2018 春 NPB開幕スペシャル」というIT系の野球イベントで話してきました。この記事はその解説版です。

イチローがシアトルに帰ってきた!

今年のオフのビッグニュースがありました。大谷のエンゼルス入りや、上原・青木の日本復帰などいろいろありましたが、やはり何といっても

イチロー・シアトルマリナーズ復帰

が一番のニュースでしょう。個人的な話ですが、大学時代に1年休学してアメリカに留学してました。2011年9月~2012年8月のことです。その時、住んでいたのがシアトルで住んでた1年ぐらいは10回ぐらいセーフコフィールドに行きましたし、春休みにはアリゾナにキャンプを見に行きました。キャンプを見に行ったというより、キャンプ中のイチローを拝みに行ったという感じですね。野球観戦留学にいっていたと言っても過言ではないでしょう。

イチロー復帰記事からの疑問

そんな思い入れのあるイチロー選手が6年ぶりにシアトルに帰ってきました。日本でも大きなニュースになったのは記憶に新しいところです。復帰を報じる記事を見ていたらこんな記述がありました。

当時、一緒にプレーして残っているのは岩隈、フェルナンデス、シーガーだけである。 (出典探し中)

なんと、3人です!メジャーリーグは1球団あたり40~50人ぐらいの選手が1シーズンの間にプレーします。つまり6年立つと3/50しか残らないわけです。

なんと、6%!

僕はこの数字を直感的に「少ないな。マジで厳しい世界だな。」と思ったわけですが、この直感は正しいのか疑問でした。

ちなみに今年、同じような状況なのが7年ぶりに古巣、ヤクルトスワローズに帰ってきた青木宣親です。彼は2011年を最後にアメリカにいったのですが、2018年に帰ってきて、もともといたチームメートは14人にいます。

各球団選手の継続率を調べてみた

そこで各球団の選手が1年間にどれくらいの人数、試合に出場して、翌年以降どれくらい残っているのかをグラフにしてみました。

調べ方

1軍の試合に一瞬でも出場した選手を調べます。
データ元はMLBは baseball-reference 、 NPBは 日本野球機構公式HP です。

2008年から2017年の10年分、MLB30球団、NPB12球団あります。全てを目視でやっていくのはつらいのでスクレイピングしました。コードはこちら(これから修正あり。)

https://github.com/justin999/BbCohort

グラフ化

出てくるデータはこんな感じの表です。

表だとわかりにくいのでグラフにしました。

グラフの読み方

このグラフはコホートグラフと言われるもので、webサービスなどの運営の時に、ユーザの継続率を見るために用いることがあります。

上のグラフの例で言うと2008年の埼玉西武ライオンズは1軍の試合に48人が出場しました。2008年に出場していた選手のうち、2009年にも出場していたのは41人になり、さらに2010年には2008年とダブった選手は34人に減っていることがわかります。それをグラフに表すとオレンジ色のグラフになります。起点の年を1年ずつずらしていき、積み重ねたのが最終的にできたグラフです。

ということで早速、出力結果を見ていきます。

MLBの傾向

左上から
シアトル・マリナーズ
テキサス・レンジャーズ
オークランド・アスレチックス
ヒューストン・アストロズ
を並べてみました(アメリカンリーグ西地区)。

まず、2008~2009年の変化(オレンジ色)を見てみると、どの球団も大体半減していることがわかります。つまり、1年継続率は約50%です。

今年プレーした選手は来年は半分戻ってきません!なかなか厳しい世界であります。

NPBの傾向

翻ってNPBのパ・リーグを見てみましょう。

MLBと比べた時の、線の角度の違いがわかるでしょうか?
日本の場合、今年出た選手は来年も出てくる可能性が約80%あります。

NPBももちろん厳しい世界ではありますが、比べるとやさしい世界だなということがわかってきました。

ということで、最初の問、「イチローが6年ぶりにチームに戻ってきたら同僚が3人しか残っていなかったのが普通なのか?」の答えは

MLBなら普通


おまけ(コーディングのこととか)

文字化け
今回はPythonのBeautifulSoupというモジュールを使いました。当初、以下のような感じで日本語の選手名を取得していたのですが、文字化けします。

from bs4 import BeautifulSoup
url = 'http://npb.jp/bis/2008/stats/idb1_l.html'
html = response.text
soup = BeautifulSoup(html, 'lxml')
players = soup.find_all('td', attrs={'class': 'stplayer'})

日本語での情報取得は文字コードの問題がからんでくるので要注意です。次のコードなら文字化けしません。詳しいことは他記事で。

from bs4 import BeautifulSoup
url = 'http://npb.jp/bis/2008/stats/idb1_l.html'
html = response.content
soup = BeautifulSoup(html, 'html.parser')
players = soup.find_all('td', attrs={'class': 'stplayer'})

名前にアポストロフィー
MLBの選手名を取得していた時、思わぬところでエラーが起きました。"Shawn O'Malley"選手などですね。こういった細かい所の処理がスクレイピングではつきものです。

チームコードは変わる
420ページを解析するために、URLをある程度機械的につくります。NPBであれば、

'http://npb.jp/bis/[年の数字]/stats/idb1_[チームの記号].html'

といった感じです。ところが、いくつかのURLはアクセスしてもエラーになって返ってきました。例えば、2008年の横浜DeNAベイスターズのを調べようと思って、

http://npb.jp/bis/2008/stats/idb1_db.html

にアクセスしても「ページが見つかりません」と言われてしまいます。これは2011年まで「横浜ベイスターズ」であり、チームの記号は"yb"だったからです。このような球団の名称変更は日本では珍しく、この10年でベイスターズ以外にありませんでした。

この記事が気に入ったら、サポートをしてみませんか?気軽にクリエイターを支援できます。

note.user.nickname || note.user.urlname

justinです。筋トレいっぱいやってます。6パックと甘美なるメロン肩と鬼の背中とアツい胸板を身にまとうために。もっと細かいつぶやきはtwitterで (https://twitter.com/justin999_)

😁末吉 😁
19

justin / iOSエンジニア

なぜ僕は筋肉を鍛えるのだろうか? 最初は筋トレすれば健康になるとか、仕事がうまくいくとか、そんな理由をつけていた。 しかし、もうそんなことは思わない。 多少の健康の崩れと筋肉どっちを取るか? 筋肉だろう。 https://twitter.com/justin999_

テック会議

1つ のマガジンに含まれています
コメントを投稿するには、 ログイン または 会員登録 をする必要があります。