Lean Baseball

No Engineering, No Baseball.

Pythonを学ぶときに読むべき本2020年版 - 初心者からプロになるために

毎年恒例, Python本と学び方の総まとめです!*1

プログラミング, エンジニアリングに機械学習と今年(2019年)もPythonにとって賑やかな一年となりました.

今年もたくさん出てきたPythonの書籍や事例などを元に,

  • 初心者向けの書籍・学び方
  • 仕事にする方(中級者)へのオススメ書籍
  • プロを目指す・もうプロな人でキャリアチェンジを考えている方へのオススメ

を余す所無くご紹介します.

来年(2020年)に向けての準備の参考になれば幸いです.

※ちなみに過去に2019, 2018, 2017と3回ほどやってます*2.

このエントリーの著者&免責事項

  • Shinichi Nakagawa(@shinyorke
  • 株式会社JX通信社 シニア・エンジニア, 主にデータ基盤・分析を担当.
  • Python歴はおおよそ9年(エンジニア歴20年), データサイエンスからWeb, インフラなどほとんどの事でPythonを使ってます(公私ともに)

なお, このエントリーの内容は@shinyorkeの私的見解・意見であり, 現在および過去に在籍したチーム・組織とは無関係です.

今, 読んでおきたいオススメ本

まず書籍ですが, もういきなり紹介します.

数行のコメントと共に紹介しますが, この後の本文に色々背景とか書いているのでそちらもお読みいただけると嬉しいです!*3

独学プログラマー

手元に一冊ほしい名著です!

独学プログラマー Python言語の基本から仕事のやり方まで

独学プログラマー Python言語の基本から仕事のやり方まで

昨年(2018年)出版, 何版も重刷されてておなじみかなと思います.

Python言語に限らない, プログラマーとしてエンジニアとして大切な,

  • Git, パッケージ管理, Bashなどの周辺的な道具(かつ絶対使うもの)
  • データやアルゴリズムなど, 情報を扱うモノの初歩な考え方
  • チーム開発, 学び続ける姿勢などの大切さ

をまんべんなくかつ, レベル感に合わせて紹介しているのがすごく良いです.

なお昨年もこちらでオススメさせてもらいましたので興味ある方は読み返すと良いかもです.

shinyorke.hatenablog.com

Python実践データ分析100本ノック

Pythonを使ったデータなお仕事では必読・マストな一冊.

Python実践データ分析100本ノック

Python実践データ分析100本ノック

「本書は入門書ではありません」とある通り,

  • Pythonを言語として使いこなせる
  • が, 実務に活かすのってイメージが...

という方向けに,

  • データ加工から機械学習, 言語処理や画像処理を10本ずつのノック⚾形式で紹介
  • サンプルデータ使って真似して学ぶ

事により,「いつまでもirisとかタイタニックやっていても?」的な所から抜け出すのには良い本かなと.

また, 私のようにすでに仕事にしている人にもTipsやレシピ的に使えるのですごく便利でありがたい一冊です!

機械学習図鑑

きれいなサンプル図やコードを元に無理なく学べる機械学習の本です.

見て試してわかる機械学習アルゴリズムの仕組み 機械学習図鑑

見て試してわかる機械学習アルゴリズムの仕組み 機械学習図鑑

sciket-learnなどを使っていて初心者にも無理なく読めそう...というあたりはこちらのエントリーでも紹介させてもらいました.

shinyorke.hatenablog.com

さきほどの「Python実践データ分析100本ノック」と合わせてマストハブアイテムな感あります, ぜひこれもご一読を!*4

特徴量エンジニアリングと前処理

実務で特徴量エンジニアリングをする方必読.

機械学習のための特徴量エンジニアリング ―その原理とPythonによる実践 (オライリー・ジャパン)

機械学習のための特徴量エンジニアリング ―その原理とPythonによる実践 (オライリー・ジャパン)

  • 作者:Alice Zheng,Amanda Casari
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2019/02/23
  • メディア: 単行本(ソフトカバー)

レベル的にはちょっと上級者向きかもですがいい本です.

想定されるパターンごとのエンジニアリングのコツとか上手く乗ってて読みやすいですし実際参考になります.

ちなみに, 前処理大全も合わせて読むとなおベストです!

前処理大全[データ分析のためのSQL/R/Python実践テクニック]

前処理大全[データ分析のためのSQL/R/Python実践テクニック]

  • 作者:本橋 智光
  • 出版社/メーカー: 技術評論社
  • 発売日: 2018/04/13
  • メディア: 大型本

目次

Pythonの本と学び方2020

というわけで本題です.

なお対象読者は,

  • Pythonでプログラミングをはじめた人
  • ひとまず仕事でPythonを使い始めた人
  • 既にプロフェッショナルなんだけど, マネジメントや教育などで初心者な人との接点がある人

のいずれかを想定しています.

全体像

今回紹介する全体像です.

f:id:shinyorke:20191221163152p:plain
Python本と学習2020年版

プログラミング およびソフトウェア・エンジニアリングといえば, Webエンジニアリング, 機械学習, スマホアプリ開発・組み込み開発etc...とたくさんありますが, (この記事を読んでいる)大多数の方はおそらく,

  • 何かしらのデータを受け取り, 処理をすること.
  • なにかの仕組み・普段の仕事(≒退屈なこと)を効率化すること.

に特化していると思います.

というのは, 今年流行ったこちらの書籍でも明確かなと思います.

データ指向アプリケーションデザイン ―信頼性、拡張性、保守性の高い分散システム設計の原理

データ指向アプリケーションデザイン ―信頼性、拡張性、保守性の高い分散システム設計の原理

  • 作者:Martin Kleppmann
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2019/07/18
  • メディア: 単行本(ソフトカバー)

というわけで今年のこのエントリーでは,

  • 「そもそもプログラミング・Pythonをはじめてデータを触る人」がLv1
  • 「今のお仕事でPythonをデータで触り始めた!ガンガンやってる!!人」をLv2
  • 「色々馴れて, データサイエンスやWeb開発やってるよ!」をLv3

と分けて, 「いい感じにデータなエンジニアリングをするための歩み方」を紹介します.*5

なお,

  • 必要な箇所のみ読む
  • 何かをしながら雑に読む

などの流し読み・ながら読みをメッチャ推奨します!*6

Lv1:基礎を学ぶ・使いこなす

物事をはじめる際はやはり「急がば回れ」で, コツコツと基礎を伸ばす所からかなと.

ということで, 独学からコミュニティ参加, 何かを成し遂げる, Webと書籍を行き来するあたりから紹介します.

独学からコミュニティへ

まず, プログラミングの学習方法として,

  • 一人で本を読む・Webで調べるといった学び方. いわゆる「独学」
  • 人が集まる勉強会やイベントで情報を仕入れながら学ぶ, いわゆる「コミュニティ」

この2つがあると思います.

個人的にはどちらの学び方も長所短所があり, 組み合わせて使うとベストなのですが,

まずは一人でこもって学び(つまり独学), いい感じに慣れてきたらコミュニティに出かけるのがオススメです!

今までお会いした(元)初心者の方で特にプログラミングを覚えて結果を出してる人は,

  • まずは自主的に学び, 何かをやりきる・成し遂げる(後述)
  • やりきる・成し遂げるちょっと前くらいに外に出る

ことを自主的に, 計画的にやってる人がほとんどでした(サンプル数:おおよそ3名)

この辺の考えおよび自分が伴走して教えたときのノウハウはこちらにまとめてますので気になる方は見ていただくとして.

スラスラ教える・教わるPython - 押し付けない・楽しむプログラミング学習のカタチ - Lean Baseball

  • 独学だけでは, わからないことや知らないことに詰まり, 辛くなるので外に出る
  • 外に出る(勉強会・イベントに参加する)ことにより, 多くの知見やモチベーションを得る
  • どちらかに偏りすぎない. 独学ばっかりで進まないのも, 外に出てばっかりで学ぶ時間がなくなるのも本末転倒.

というのをやりつつ・気をつけながらいい感じにするのがコツかなと思います!

なお, この辺をいい感じにやる書籍としては独学プログラマーも良いですが, 個人的にはスラスラわかるPythonが推しです.

スラスラわかるPython

スラスラわかるPython

  • 作者:岩崎 圭,北川 慎治
  • 出版社/メーカー: 翔泳社
  • 発売日: 2017/08/07
  • メディア: 単行本(ソフトカバー)

何かをやりきる・成し遂げる

明確に作るもの・やりたい事の目標を作ってそこまで一直線にやる!成し遂げる!!が大事です.

よくあるキッカケとして,

  • 流行ってるからPythonやりたい
  • 機械学習・データサイエンスかっこいい
  • 今の仕事がつらいのでエンジニアに

と色々あると思うし別になんでもよかったりする*7のですが,

  • 明確にやりたいことを決め
  • 期限・時間を作ってやりきり
  • 何かしらの形で成果を人に見せる

事を目標にやる人はやりきってる感あるし, はじめたキッカケそのままの人は続かない感あったりもします.

スラスラとPythonを教わっていた私の生徒は,

  • 仕事で現状のツール(EXCEL)に限界を感じた
  • ひとまずツールの代替をPython(プログラミング)でできるのでは?
  • 仕事のアウトプットとして使えたらゴール

を明確に決めた結果, 3ヶ月程度でちゃんと使えるようになってました.

ので,

  • Webアプリを作る, なにかの分析をするでもいいので目標を決める
  • 人に見せる. 仕事だったら同僚や上司, プライベートだったらブログや発表に
  • 期間・期限を設ける. 締め切り・アウトプット駆動でやる

を計画的にやるときっといつか結果でるので頑張ってみましょう.

Webと書籍を行き来する

学び方ですが, 勿論書籍もありますがWebラーニングもかなり良いです.

これも毎年推してますが個人的にはPyQがメッチャ好きです.*8

pyq.jp

年々コースが増えているのと, 操作性もすごく良いです.

個人的には力を伸ばしたかった数学・統計力を高めるのに久々にその手のクエスト・写経をやりましたが結果も出ましたしいい感じでした.

そして並行して独学プログラマー100本ノックをこなすとかがちょうどよいと思います(推しの理由は最初に書いたとおり).

また, このタイミングで機械学習にちょっと触れるのもアリです, 個人的には先ほど紹介の機械学習図鑑もベストですが,

機械学習のエッセンス -実装しながら学ぶPython,数学,アルゴリズム- (Machine Learning)

機械学習のエッセンス -実装しながら学ぶPython,数学,アルゴリズム- (Machine Learning)

  • 作者:加藤 公一
  • 出版社/メーカー: SBクリエイティブ
  • 発売日: 2018/09/21
  • メディア: 単行本

基礎からじっくり学ぶのにこちらも最高だったので合わせてオススメです.

Lv2:仕事にする・物事を解決する

自分で調べたり, 人に聞きながらある程度目的のことができるようになったら仕事にしましょう.

その際にはぜひ, 現状のお仕事から.

できる仕事から場数を踏む

これは断言レベルで言い切りますが,

今やっている仕事の効率化・退屈なことを追い出す事からやる, 本数をこなすが上達への近道

です!

自分の周りでもちょっとプログラミングやPythonに馴れ始めた頃に,

  • いい感じに使えるようになったし機械学習エンジニアになるぞ!
  • Webサービスの企業とかで経験積めるかも...よっしゃ転職(異動)だ!
  • なお, 上手く行かない模様

という方が結構いますし話も聞きます.

一方, 成功している方は,

  • 覚えたプログラミング・スキルをまず現状の仕事に活かす
  • 仕事の効率化に活かし結果を出し続ける
  • やったことを言語化・体系化し自分のキャリア・レジュメに活かす

事によって転職したり異動したりに成功しています*9.

何がいいたいかと言うと,

スキル(Python)が使えるようになるのはスタートラインで, 実績を積む今がスタートだよ!

ってことです.*10

退屈なことをやらせる

というわけでこの段階では,

  • 何度も続く手作業
  • 誰でもできること
  • 自分の手からさっさと手放したい作業

といった,

「回数が多く, 属人性が少ない」退屈なことをPythonにやらせる

事に注力するといくつでもテーマがみつかるかつ, 仕事の場合は成果も出るのでオススメです.

書籍的にはこちらの2冊なのですが,

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

  • 作者:Al Sweigart
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2017/06/03
  • メディア: 単行本(ソフトカバー)

できる 仕事がはかどるPython自動処理 全部入り。 (「できる全部入り。」シリーズ)

できる 仕事がはかどるPython自動処理 全部入り。 (「できる全部入り。」シリーズ)

これらの書籍をチェックしつつ, 退屈なことを見つける・定義するといったあたりはこちらも参考にすると良いと思います(手前味噌).

shinyorke.hatenablog.com

この手の「退屈なこと」を100本とまでいかなくても10本20本と実績を積む頃にはきっといい感じに仕事になってるかと思います.

前処理とデータを扱う訓練

機械学習やデータサイエンスを志向する方は,

  • データを扱うための道具・言語を覚える. 具体的にはSQLなど.
  • データの取得から前処理, クレンジングといったあたりを抑える. いわゆる「特徴量エンジニアリング」力を磨く.

をこの頃からやると良いでしょう.*11

データベースをゼロから扱うという方は,

これからはじめる SQL入門

これからはじめる SQL入門

  • 作者:池内 孝啓
  • 出版社/メーカー: 技術評論社
  • 発売日: 2018/05/02
  • メディア: 大型本

ビッグデータ分析・活用のためのSQLレシピ

ビッグデータ分析・活用のためのSQLレシピ

  • 作者:加嵜 長門,田宮 直人
  • 出版社/メーカー: マイナビ出版
  • 発売日: 2017/03/27
  • メディア: 単行本(ソフトカバー)

この辺の書籍の内容を理解し実践できると最高だと思います.*12

また, データの前処理・クレンジングも100本ノック的に訓練するのもこの頃かなと.

100本ノックの本を抑えつつ,

前処理大全[データ分析のためのSQL/R/Python実践テクニック]

前処理大全[データ分析のためのSQL/R/Python実践テクニック]

  • 作者:本橋 智光
  • 出版社/メーカー: 技術評論社
  • 発売日: 2018/04/13
  • メディア: 大型本

PythonユーザのためのJupyter[実践]入門

PythonユーザのためのJupyter[実践]入門

Kaggleで勝つデータ分析の技術

Kaggleで勝つデータ分析の技術

前処理大全やJupyter実践入門, 最近来ているKaggle本*13の内容を押さえながら学習したり訓練するとすごくいいと思います.

Lv3:プロフェッショナルになる

この頃にはおそらく,

  • 望み通りエンジニアやデータサイエンスの仕事をしている
  • WebとかデータサイエンスでPythonを活用

してるようなプロフェッショナルかなと思います.

このタイミングを上手く過ごしいい感じにするための話です.

機械学習もWebも使いこなす

少なくともWeb関連のサービス・プロダクトを扱っている方は両方ともあったほうが後々幸せです.

Webやアプリの事に精通していてもデータの扱い・意味がわからないとデータでなにかするのは夢のまた夢ですし, いくら数学やデータサイエンスに精通していてもサービス・プロダクトの事, Webの事を何も知らなければトンチンカンな提案・仕事しかできません(っていう両方の例はきっと皆さん思い当たる節があるでしょう*14).

という大切さは名著「仕事ではじめる機械学習」などで学ぶことができますのでこれも必読です.*15

仕事ではじめる機械学習

仕事ではじめる機械学習

私はデータサイエンス由縁というより, 業務システム・Webアプリのエンジニアとしてのキャリアを踏んでから今に至るのですが,

  • 野球データの統計・データ分析の分野である「セイバーメトリクス」を趣味・ライフワークとしてやっており, 後に仕事にもした.
  • コンサルタントをやってた頃にR&Dのプロジェクトで特徴量エンジニアリングを嫌というほどやっていた
  • 元々の仕事がWebとか業務系だったのでプロダクト・サービス開発・運用のノウハウもあった

事により今の仕事(後述するデータ基盤エンジニア)もいい感じにすることができてます.

この視点でちょうど折り合うポイントはいくつかありますが, 個人的にはWebスクレイピングを攻めるのが丁度いいかなと思っています.

Pythonクローリング&スクレイピング[増補改訂版] -データ収集・解析のための実践開発ガイド

Pythonクローリング&スクレイピング[増補改訂版] -データ収集・解析のための実践開発ガイド

  • 作者:加藤 耕太
  • 出版社/メーカー: 技術評論社
  • 発売日: 2019/08/10
  • メディア: 単行本(ソフトカバー)

お仕事や学習のバランスを見ながらいい感じに学べると楽しいのでオススメです.

データ基盤エンジニアという生き方

また, 昨今では

  • 社内にある大量のデータを事業に活かしたいというニーズが多数
  • これらのデータがただ積まれてるだけなのでなんとか管理・運用できるようにしたい

という仕事・ニーズが結構あり, そのせいか「データ基盤エンジニア」というポジションが脚光を浴びています(いい切っちゃうけど多分間違いない).

※かくいう私もデータ基盤エンジニアの一人です.

データ基盤エンジニアは,

  • 分析・解析という視点でデータサイエンス・機械学習なスキル・知見・スタンス
  • データを集める・運用する視点でエンジニアリング(主にインフラやデータベース)なスキルセット
  • 両方を知った上でビジネスにつなげる・装着するようなビジネス的な能力やドメイン知識

を存分に活かせる良い仕事です.

今年になって, そんなデータ基盤エンジニアの定義・ガイドラインや役割を示すような書籍「ビッグデータ分析のシステムと開発がこれ1冊でしっかりわかる教科書」がでたり(この本は超いい本です!必読),

図解即戦力 ビッグデータ分析のシステムと開発がこれ1冊でしっかりわかる教科書

図解即戦力 ビッグデータ分析のシステムと開発がこれ1冊でしっかりわかる教科書

  • 作者:渡部 徹太郎
  • 出版社/メーカー: 技術評論社
  • 発売日: 2019/11/07
  • メディア: 単行本(ソフトカバー)

以前からデータ基盤エンジニアとして活躍されている@yuzutas0さんのブログや, プロのデータ基盤エンジニア@takegueさんのアドベント・カレンダーにも色々乗ってたりします.

yuzutas0.hatenablog.com

qiita.com

Webから行ってもデータサイエンスから入ってもイケる仕事だと思うのでキャリアの目標にしていいかもしれません.*16

プロとして価値を創る

これはエンジニアリングに閉じないもっと広い話&私個人の私見ですが,

  • サービスやプロダクトおよびチームが成長するためには何をすべきか
  • そもそもやろうとしてる事はサービスやプロダクト, チームにとってホントに価値あることか?
  • プログラミング言語や技術の選び方ってこれでいいんだろうか?

という局面に当たることが多くなると思います*17.

この辺については,

  • まずはISSUEを見極める. 課題の本質はなにか?なぜ起きてるのか??etc...
  • 現代のビジネスという意味でのアジャイル的な進め方や考え方を学ぶ.
  • 言語やアジャイルのプラクティス・手法にブレない軸を持つ. やり方は柔軟に, 複数選択して価値を出せるのがホントのプロ.*18

であるかなと思います.

何がいいたいかと言うと,

ホントのプロになるころにはプログラミングだけやっていれば・できればエエってもんじゃないぞ!

ってことです.

賛否両論はあると思いますが徐々にアジャイルやサービス志向も学ぶとよりベストかなと.

イシューからはじめよ――知的生産の「シンプルな本質」

イシューからはじめよ――知的生産の「シンプルな本質」

  • 作者:安宅和人
  • 出版社/メーカー: 英治出版
  • 発売日: 2010/11/24
  • メディア: 単行本(ソフトカバー)

ソフトウェア・ファースト あらゆるビジネスを一変させる最強戦略

ソフトウェア・ファースト あらゆるビジネスを一変させる最強戦略

  • 作者:及川 卓也
  • 出版社/メーカー: 日経BP
  • 発売日: 2019/10/10
  • メディア: 単行本

Lean Analytics ―スタートアップのためのデータ解析と活用法 (THE LEAN SERIES)

Lean Analytics ―スタートアップのためのデータ解析と活用法 (THE LEAN SERIES)

個人的には「イシューからはじめよ」が大のおすすめです.

ちなみに自分の仕事では正にそんなISSUEと戦っており, 会社の技術ブログにも書かせてもらいました.

tech.jxpress.net

この辺はもうちょっと色々やりながら学びたいですね.

結び

というわけで2020年に読むべきPythonの本(と付随するいろんな考えやポエム)を紹介させてもらいました.

Pythonに限らず, プログラミングやエンジニアリングで業務や社会の課題を解決したり, 趣味的なモノをエンジョイする機会は今後ますます増えると思います.

このエントリーがそんな世の中の役に立つといいなと思うと同時に, あくまでも個人のイチ意見なので読まれている皆様はぜひ自分を信じて楽しいPython, プログラミングな生活を送ってもらえると幸いです.

最後までお付き合いいただきありがとうございました!

【付録】個人的なオススメ本

これも恒例のオマケです.

自分のnoteで読書ログなるマガジンをやっているのですが, こっちは技術書以外も多いので技術書, 特にPython・データサイエンスに特化した本年のオススメ3冊を.

※本編で紹介した書籍を除く.

試して学ぶ 機械学習入門 ~Pythonで作って、動かして身につける~

試して学ぶ 機械学習入門 ~Pythonで作って、動かして身につける~

  • 作者:竹野 峻輔,髙橋 寛治
  • 出版社/メーカー: マイナビ出版
  • 発売日: 2019/04/23
  • メディア: 単行本(ソフトカバー)

機械学習を覚えながら一気にアプリを作る, AWSなどを使いこなすなど攻めた内容.

これの内容をできるようになるといい感じな機械学習エンジニアになれると思います.*19

実際のデータ活用という意味で興味深く読ませてもらった一冊.

現実が生々しくわかるという点では色々考えさせられました, 年末年始の読み物としてもすごくおすすめ.

ほぼPythonだけでサーバーレスアプリをつくろう (技術の泉シリーズ(NextPublishing))

ほぼPythonだけでサーバーレスアプリをつくろう (技術の泉シリーズ(NextPublishing))

所属するJX通信社 がサーバレス・アーキテクチャ主体の会社なので予習とお遊び程度に読みました.

サーバレスでアプリを作るという当たりがすごくわかりやすくて良著でした, 初心者から中級者に上がるあたりで読めると良いかも.*20.

*1:ちなみにこのエントリーはPython Advent Calendar 2019の24日目となります.

*2:リンクは都度更新していますが可能な限り最新版(つまりこのエントリー)をご覧頂くのが一番幸せです.

*3:オススメ本を早く知りたいニーズにお答えして要約から作ってみました. が背景を知るとより幸せかと思いますのでどうぞ最後までお楽しみください.

*4:電子・紙どっちでもいいですがコンセプトおよび装丁を考えると紙の方が推しです.

*5:Webをやるにもデータサイエンスをやるにも, データと向き合うことが大半なので今年はデータエンジニアリングにテーマを振り切りました. PythonそのものやWebの話は機会あれば来年またやりたい.

*6:例年通りこの先長いと思いますので流し読みぐらいがちょうどよいかなと思います.

*7:けれども, 流行りや憧れ駆動だと上手く行かない時にぶち当たると続かないので明確な目的を(とこの後に書いてます)

*8:ちなみに他のサービスやってないので比較しての優越はコメントできないです. PyQじゃなくても手に馴染んでる・いいなって思うものがあればそれを続けるのがベストかと思います.

*9:未経験の状態でも社内での異動や転職で職を得るケースもありますが, 大抵の場合忙しかったり割とソルジャーな環境が多いとだけ言っておきます. ソルジャーな仕事をこなして力を伸ばす人も中には居ますが向き不向きある&心身ともに後々きっついので個人的にはあまりオススメしません.

*10:ようするに謙虚になりましょう, スキルだけでデキる仕事じゃないことを覚えましょう!ってことです.

*11:「機械学習タスクの8割は前処理」と言われるくらいこの辺重要かつエンジニア的な創意工夫や純粋な実力はこのタスクで磨かれると私は思っています.

*12:これからはじめるSQLの方はホントの初心者レベルの方にオススメ, ビッグデータ分析・活用は知識をつけつつレシピ的に使えるので実践な人にオススメです.

*13:コンペ本と思いきや実践的な内容も多く普通に参考になりました.

*14:両者のスキルやスタンスはたしかに異なりますが, 折り合いながら仕事をする・価値を出すならお互いの事を知っておくべきだと思いますし世の中両方できる人もいます.

*15:毎年推してますがそれぐらい良い本です.

*16:とはいえかなりなハイスキルが要求されるので「やってました」レベルだけだと辛いってことは一応補足しておきます.

*17:し, 局面に当たらないのは微妙だし「考えたこともない」に至っては正直プロじゃない気もします.

*18:プログラミング言語はPythonがいいのか他がいいのか, アジャイルとスクラムどっちがいいのか(これはトンチンカンな例ですが), っていうのは個人的にはどうでも良くて「眼前のISSUEや課題に対して適切な解決策で前のめりに取り組めるか?」が最も重要で, プロフェッショナルはその中で「選択肢が複数あってチョイスできること」かなあと思っています.

*19:が, 真似するのには多少難易度が高いので本編のオススメからは外しました. とはいえすごく良い本です. 余談ですが著者の一人は先程紹介した@takegueさんです&一冊頂戴しありがとうございました!

*20:なお, こちらは誕生日プレゼントで著者のお二方からいただきました, ありがとうございます!

「アイツと似ている」野球選手をPythonでいい感じにスコア化してみた - 2020年注目の選手の特徴とは

2019年のプロ野球が終わり, セイバーメトリクスと分析・解析には良いシーズンになりました.

改めましてこんにちは. @shinyorkeと申します.

このエントリーでは,

  • セイバーメトリクスで「打者の類似性」を算出する方法論と実装例(なおPython)
  • メジャーリーグの2018年データを用いた類似性の例
  • 2020年からプレーする助っ人とか, これからメジャー挑戦するあの選手は!?

を打者の成績にフォーカスして紹介します.*1

なお, このエントリーはJX通信社 Advent Calendar 2019および, Pythonその4 Advent Calendar 2019の18日目となります.*2

免責事項

念の為お断りしておくとこの分析・解析結果は@shinyorke個人の見解であり, 現在および過去に在籍した組織・団体の見解・思想と関係ないことを予めお断りしておきます*3.

なお, 計算方法およびデータソースはPublicなものであります.

TL;DR(要約)

  • セイバーメトリクスおよびスポーツ統計の世界では「類似性スコア(Similarity Scores)」という指標があり, 通算成績を使うことにより選手同士の類似性を定量化できる
  • 類似性スコアの計算そのものはPython + Pandasでアッサリいける
  • 控えっぽい選手は何処へ行っても控えだし, 恵体タイプの日本人メジャーリーガーは恵体タイプのメジャーリーガーに似る可能性が高そう(こなみ)

スタメン

前半は類似性スコアの説明, 中盤はPythonでの実装方法(軽く), 後半に分析結果を紹介します.

類似性スコア #とは

すごく雑に言うと,

類似性を見たい選手を1000点とした場合, 比較対象の選手は何点になるか?

を見て類似性を確認する指標・スコアとなります.

(意外と言っちゃ失礼ですが)日本語のウィキペディアの説明そのままなのでこちらを見てもらうと良いかもです.*4

ja.wikipedia.org

ちなみに本家っぽい説明はこちらです.

www.baseball-reference.com

例のごとく, (セイバーメトリクスの生みの親であり神様である)ビル・ジェームズ氏により提唱され, 現在でも成績予測システムなどの一部で用いられている考え方となります.

基本的な考え方は減点法となっており,

  • 本人と瓜二つであれば1000点
  • 成績・指標を比較し, 差分に当たる部分を減算していく
  • 最後にポジションで補正.

という決め方をしていきます.

なお, 減算ポイント(差がある毎に引いていくポイント)はこんな感じです by 野手の場合.

指標 減点ポイント
試合数(G) 20
打数(AB) 75
得点(R) 10
安打(H) 15
二塁打(2B) 5
三塁打(3B) 4
本塁打(HR) 2
打点(RBI) 10
四球(BB) 25
三振(SO) 150
盗塁(SB) 20
打率(AVG) 0.001
長打率(SLG) 0.002

差分の分だけ引いていく感じです.

そしてポジション補正はこちら.

ポジション 補正ポイント
捕手(C) 240
遊撃手(SS) 168
二塁手(2B) 132
三塁手(3B) 84
外野手(OF)*5 48
一塁手(1B) 12
指名打者(DH), 投手(P) 0

「守備が重要なポジションは高めに, そうでもないポジションは低めに」という補正を入れることで単純に打てばいい・走ればいい, の要素を丸めています. *6

例えば打率.310本塁打15本60打点という野手がいたとして,

  • これが捕手や遊撃手だったら超優秀な選手になる(守備で稼ぐポジションで打てるのは万能扱い)
  • 一方, 打撃で貢献すべき一塁や指名打者の場合, 「もっと長打を打てや〜!」的な感じになる

と思うんですよ, それを表現するためにスコアで差をつけるようにしています.

Pythonで算出する

続いて算出方法です.

データはMLBの2018年までの通算成績を使います.*7

今回は(ないしは今回も*8)「Analyzing Baseball Data with R」を参考に独自に組みました.*9

事前準備として,「打者の通算成績」をSean Lahman Databaseから用意しましょう(前処理とかは面倒なので割愛).

f:id:shinyorke:20191217122718p:plain
事前にポジション補正(Value.POS)もやっておく

なお, 今回使う環境は

  • Python 3.7
  • Pandas*10
  • Jupyter notebook
  • plotly

となります.

サンプルコード(計算)

算出そのものはpandasのapplyを上手く使ってやります.

事前に関数を定義した後,

# Similarity Scores

import math

BASE_SIM_SCORE = 1000
SIM_PARAMATER = {
    'G': 20,
    'AB': 75,
    'R': 10,
    'H': 15,
    '2B': 5,
    '3B': 4,
    'HR': 2,
    'RBI': 10,
    'BB': 25,
    'SO': 150,
    'SB': 20,
    'AVG': 0.001,
    'SLG': 0.002
}

def similar(df: pd.DataFrame, player_id, head_cnt=10, params=SIM_PARAMATER) -> pd.DataFrame:
    _df = df.copy(deep=True)
    
    def calc_sim_score(row: pd.Series, player: dict) -> float:
        score = BASE_SIM_SCORE
        for k, param in params.items():
            # 各成績を比較(選手X - モデルの選手, の絶対値) / 定数
            score -= math.floor(abs(row[k] - player[k]) / param)
        score -= abs(row['Value.POS'] - player['Value.POS'])
        return score
    
    p = df.query(f'playerID=="{player_id}"')
    if len(p) == 1:
        dict_p = p.to_dict('records')[0]
        _df['sim_score'] = _df.apply(calc_sim_score, axis=1, player=dict_p)
        return _df.sort_values(['sim_score', 'playerID'], ascending=[False, True]).head(head_cnt)        
    else:
        raise Exception(f'player not found:"{player_id}"')
    

pandasでエイッとやりましょう.

# Similarity Scores DataFrame
def similar_df(name: str, count=6, params=SIM_PARAMATER) -> pd.DataFrame:
    _id = get_player_id(name=name)
    _df_sim = similar(df_c_totals, player_id=_id, head_cnt=count, params=params)
    _df_sim['BB/SO'] = _df_sim['BB'] / _df_sim['SO']
    return _df_sim[['sim_score', 'name', 'playerID', 'POS', 'G', 'AB', 'H', '2B', '3B', 'HR', 'R', 'RBI', 'BB', 'SO', 'SB', 'BB/SO', 'AVG', 'OBP', 'SLG', 'OPS']]

これであとは選手名を渡すだけで算出できます(例はイチロー).

# 先頭が本人になるので, 上位10件表示は11を指定
_df_ichi_sim = similar_df('Ichiro Suzuki', count=11)

サンプルコード(可視化)

今回はグラフで書くより普通にTableの方が良いだろうということでplotlyでテーブルを書く方法で可視化しました.

選手名とスコアに参考成績を出しています.

import plotly.graph_objects as go

def show_table(df: pd.DataFrame, header=['name', 'sim_score', 'POS', 'AVG', 'H', 'HR', 'RBI', 'OBP', 'SLG', 'OPS']):
    fig = go.Figure(
        data=[
            go.Table(
                header=dict(values=header), 
                cells=dict(values=[df[col].values for col in header])
            )
        ]
    )
    fig.update_layout(
        autosize=False,
        width=1400,
        height=320,
        margin=go.layout.Margin(
            l=50,
            r=50,
            b=20,
            t=20,
            pad=4
        ),
    )    
    fig.show()

先ほどのスコア算出・可視化をまとめてやるとこうなります.

# 先頭が本人になるので, 上位10件表示は11を指定
_df_ichi_sim = similar_df('Ichiro Suzuki', count=11)
show_table(_df_ichi_sim)

そしてこんな感じでテーブルが出てきます.

f:id:shinyorke:20191217123607p:plain
Ichiro Suzukiの類似性スコア

842点を出したケニー・ロフトン(Kenny Lofton)はたしかにイチローっぽい俊足巧打で四球も三振も少ない一番バッタータイプな外野手なのでだいぶいい感じっぽいですね!*11

2020年に移籍した選手で見てみる

イチロー氏でいい感じに素振りができたのでここから本命の分析へ.

(まだ確定していない選手もいますが)今年は,

  • ガチのメジャーリーグで活躍したツワモノが2020年の助っ人として来日
  • プロ野球(NPB)および侍JAPANで活躍した主軸が遠くメジャーリーグの舞台へ

という点で移籍が活発化しています.

2018年時点でのデータで「他の誰に似ているか」を類似性スコアで見てみました.

メジャーからやってくる強い選手

今年の注目といえばやっぱりガチ・メジャーリーガーのアダム・ジョーンズそしてワールドシリーズ制覇したばっかりのナショナルズからやってくるヘラルド・パーラですねと.

類似性グラフはこちらです.

f:id:shinyorke:20191217115209p:plain
注目新助っ人二人の類似性

アダム・ジョーンズ

長年オリオールズの不動のセンターで昨年はダイヤモンドバックスでプレー(つまり平野と同僚).

www.47news.jp

そんなアダム・ジョーンズ(略称アダジョ*12)はざっくりで言うと,

  • 全盛期でシーズン30本塁打を打つ打力&足が速い(が盗塁少ない)*13
  • かつては守備の名手, 基本的にセンターだが外野両翼守れる

という特徴があります.

そんなアダジョのスコアがこちら

f:id:shinyorke:20191217134654p:plain
ウェルズ, ペンス, ケンプなど強い外野手が並ぶ

現役(もしくは引退して間もない)選手だと,

が近いことがわかります.

実はこれホント近い選手の集まりで,

  • いずれも全盛期は本塁打30本(近く)打てる, 足もそれなりに速い強打のセンターもしくはライト. *14
  • 3人ともオールスター・クラスかつ, 高額の長期契約を勝ち取っている, ちなみにアダジョも同様.
  • なお, 契約後は死刑囚衰えで(ry

という点で似ています, ちなみに10位のジャスティン・アップトン(Justin Upton, 919点)は大谷翔平の同僚(レフト)です.

アダジョは来年35歳で(おそらく期待されている)守備や長打力が衰えそうな時期かなっていうのが正直な所ありますが.

これだけ大物と似てるのであれば期待していいかもしれません, 33本塁打4盗塁ぐらいは行けるのではないでしょうか(適当).*15

ヘラルド・パーラ

元祖ベイビーシャーク, としてファンの間ではお馴染みな選手.

full-count.jp

ポジション的には左打ちの外野手で, ジャイアンツでは(おそらく)亀井選手っぽい起用方法になりそうです.

そんなベイビーシャークさんのスコアがこちら.

f:id:shinyorke:20191217140643p:plain
守備走塁上手い4人目の外野手系が並ぶ?

守備固め・代打で存在感を出しナショナルズの世界一に貢献している選手ではありますが, 若干小粒感が否めないラインナップです...

なぜなら, 自分が知らない選手&(おそらく)第4の外野手*16だらけ!

唯一把握してたエンジェル・パガン(Angel Pagan, 946点)も似たような選手でした.

今シーズンは(37歳という年齢でありながら)キャリア的に良い成績残した亀井選手のスタメンを奪取できるかが見ものだと思います.*17

これからメジャーに行く選手

といえばやっぱり筒香選手(レイズ)と秋山選手(未定)ですね.

気になるので見てみました.

ただ日本のみプレーの選手については,

  • 当然MLB2018データに二人はいないので, 現時点の通算成績を手動でアノテーションして成績入れた(公式記録を参考に)
  • 2019年までの日本通算成績と2018データの比較かつ, 何よりも「MLBとNPBを等価で扱っている」のであくまでお遊び程度*18

という感じなのであくまでお遊びとしてお楽しみください.

というわけで数字はこちらです.

f:id:shinyorke:20191217115515p:plain
筒香選手と秋山選手

筒香嘉智

先日タンパベイ・レイズとの契約が決まりました&起用方法は「三塁・レフト・DH」を行ったり来たりが予想されます.*19

www3.nhk.or.jp

スコアを見てみると,

f:id:shinyorke:20191217141631p:plain
J.D.にハーパー, アレナドと強いやつが揃う

とリーグを代表する化け物が並んでいます, 特にJ.D.がイメージ一番近いかも.

守備が不安視されていますが, 間違いなく日本人では屈指のパワーと(三振多少多いですが)ボールを選べる選手ではあるのでレイズのニーズにあった活躍はしてくれそうな気がします.

あと, 軒並み体が大きい, 恵体選手が多いです.*20

秋山翔吾

最後に秋山選手です, ちなみにこの記事を執筆した12/17現在では所属未定となっています.

f:id:shinyorke:20191217142512p:plain
エルズベリーが一番イメージに近い?

秋山みたいなタイプはメジャーにいそうでいないのでスコアがちょっと低めです.

かつてレッドソックス不動の一番センターだった, ジャコビー・エルズベリー(Jacoby Ellsbury, 933点)の名前がありますがこれは確かに納得です, レッドソックス時代の全盛期だったら*21.

ただスコアも低いのと前例がなさすぎる気がするので暖かく見守りたいですね.

まとめ

というわけで今回はスポーツ, 野球の統計モデルを使って「アイツと似ている」を検証しました.

がこの方法の問題として,

  • 通算成績で見てるので「今」のスナップショットが見れない
  • 年齢による衰えなどが考慮されていない
  • 異なるポジション同士でも比較したくない?

という課題があります.

これらはいずれ少しずつ解いて何か面白いことができればと思います, あとやっぱPython道具として便利.

というわけでこのテーマでまた継続してできればと思います.

*1:投手編はいずれやりたい.

*2:と同時に「Python mini Hack-a-thon(#pyhack) #106」の成果発表で話したネタ(の完成版)です.

*3:スポーツ科学とも関係ありません. あくまでも公開情報を元に統計的に処理した情報と受け取ってください.

*4:余談ですが日本語ウィキペディアの野球記録・データ解説は結構詳しくて英語版と原則的に相違が無いです, たまに数式古かったりしますがその程度.

*5:3ポジション丸めてスコア化. センターの貢献度とか考えると弄りたいところですが少なくともオリジナルの考え方が3ポジションまとめてです.(これが守備指標とかだと当然分けることが多い)

*6:この考え方は類似性スコア以外の指標にも多かれ少なかれあります.

*7:ホントは2019といいたいところですが, Sean Lahmanで公開されていないので諦めました.

*8:RからPythonへお引越しの参考文献でもあります.

*9:コードは都合により, snippet以上のものは公開しません :bow:

*10:Pandasのいい感じな使い方はこのあたりが参考になります. 余談ですが今回はapply使ってます(map化するのには変数多くて心折れたので断念).

*11:ちなみにイチロー現役時代に引き合いに出やすい選手ではありました&もっとにていそうなトニー・グウィン(Tony Gwynn)が821点だったのは意外.

*12:日本のMLBファンの間での呼び名と認識してます, 主にTwitter界隈

*13:じゃあ走塁上手いかって言われると微妙ですがそこそこ二塁打多いので上手いのかな

*14:ギータぐらいのイメージで良いかも, ちなみにペンスはメインがライトで30本塁打超えの経験ありませんが似たタイプではあるので数えていいかなと.

*15:私の主観では2019年の成績を維持できたら御の字かなって気がします&守備はMLBでよく見る指標で定性評価よりも悪いので大きな期待はできないかも.

*16:外野って3ポジションだけじゃないですが, 察してください.

*17:亀井選手は明らかに第4外野手を超えた貢献している認識です.

*18:つまり, ちゃんとやるなら補正しろって話です.

*19:レイズは極端な守備シフトを敷くのとその関係で複数ポジション守れる選手が重宝される傾向にあります. ちなみに統計・データ分析をすごく活用している.

*20:3人とも身長190cm前後で体重が90kg以上. 公称値より.

*21:ヤンキース金銭闘争へ エルズベリーと残り年俸巡り - MLB : 日刊スポーツ

30分で理解するセイバーメトリクスの教科書 - 野球を統計的に楽しもう

このブログをはじめた当初に「大好きな野球のデータ分析をもっと知ってほしい」というモチベーションでこんな記事を書きました.

shinyorke.hatenablog.com

執筆・公開した5年前(2014年)と比べ,

  • 野球に限らず, スポーツ界隈全体で公開データが増えた. 例えばこれとか(スポーツ以外も含む).
  • 野球に限らず, 様々な技術革新により, 扱うデータの種類・量が爆発的に増加(例:Baseball Savant).
  • データサイエンス・機械学習といったキャリアを歩む・志望して学習をする方が増え, 「そうだスポーツでやってみよう」という流れも盛ん.

と(大変好意的な意味で*1)目まぐるしく状況が変わってきているのでここで改めて,

  • セイバーメトリクス(含むスポーツの統計学)とは何か?
  • かんたんなセイバーメトリクスとむずかしいセイバーメトリクス
  • 何をどう学べばよいのか?のヒントなど

を最新の知見・見地を元に紹介します.

なお, この記事はpyspa Advent Calendar 2019, 1日目の記事でもあります.*2

対象読者

  • 野球好きで数字やセイバーメトリクスが好き・気になる方
  • 野球は見ないが, データサイエンスや分析で野球を見つけ, ちょっとやってみようかな?って思っている方
  • データアナリストやサイエンティストを野球関係なく仕事にしたい方

Author(書き手)

  • Shinichi Nakagawa(@shinyorke)
  • JX通信社(JX Press Corporation) Senior Engineer/Data Engineer
  • 趣味で野球のデータ分析をしています&今年の9月まで実際に仕事にしていました.

なお, この記事は現職であるJX通信社および, 以前野球の仕事をしていたネクストベース社の意見・見解ではないこと, 内容に関する質問・意見で業務に関わる内容は一切お答えできないことを予めご了承ください.

TL;DR(要約すると)

  • セイバーメトリクスは野球において発生するデータを統計学的なアプローチで分析を行い、選手の能力・チームの強さなどといった事を定量的に指標化・言語化し、チーム・選手に役立てるための手法・考え方である.
  • セイバーメトリクスは, 従来の成績データを元にした「かんたんなセイバーメトリクス」と, 一般的な成績データでは取り扱わないデータを用いて行う「むずかしいセイバーメトリクス」が存在する.
  • 学ぶ・活用する際は「マネー・ボール」の書籍版からはじめる, 自分で電卓を弾いて計算してみることが近道.

ここだけ読んでくれれば3分34秒で理解できるはず.*3

スターティングメンバー

セイバーメトリクスのきほん

そもそも何なのさ?っていうところから.

セイバーメトリクス #とは

現時点の私は以下のように考えています.

セイバーメトリクスは野球において発生するデータを統計学的なアプローチで分析を行い、選手の能力・チームの強さなどといった事を定量的に指標化・言語化し、チーム・選手に役立てるための手法・考え方である.

「チャンス・ピンチに強い・弱い」「守備が上手い・下手」「この選手は走攻守三拍子揃っていてヤバい」「投げっぷりが良いなあ」的なフワッとした内容を仮説化・言語化し, 様々なデータを用いて証明し続けてチームおよび選手のために役立てる(もしくは愛好家が楽しむ)といったものがセイバーメトリクスとなります.

ビルジェームスによって1970年代(もう4,50年経つ)に提唱され, 書籍「マネー・ボール」によって広まり...という文脈は過去ブログもしくはウィキペディアをご覧ください.

3つの思考, 2つのスタンス

「3つの思考」は蛭川(ひるかわ)さんが先日出版されました「セイバーメトリクス入門」の言葉をそのまま引用・お借りいたします.*4

「2つのスタンス」は私自身が心がけていることです(おそらく初の言語化).

思考

この3つはセイバーメトリシャン(セイバーメトリクス愛好家)のみならず, プロのデータサイエンティスト・アナリストにも通じる所かなと.

引用箇所は特に断りが無い限り, 「セイバーメトリクス入門」より引用しております.

1. 常識に縛られない

まず何より重要なのは、従来の常識や経験則に縛られずに根本的に物事の仕組みを捉え直すということです。

例えば今まで(いや、今でもかもしれない)は打者の優越を「打率・打点・本塁打」で見ていましたが,

  • ヒットを稼ぐというのは実力だけでなく運の要素もあるよね?*5
  • 打点ってそもそも前にランナーいるからこそ稼げるのでは?
  • 本塁打は球場によって入りやすい・入りにくいっあるよねそうだよね*6

などなど, そんな所から「打率・打点・本塁打」という「選手を評価する常識」を課題ベースで切った結果,

  • 四球を選ぶ能力も実は重要(アウトに取られない点ではヒットと同じ)じゃないか?って事で「出塁率*7」を見る
  • 打点は「状況に左右される数字*8」であり, 打者個人の優越を決める指標としてふさわしくない
  • 本塁打のみならず, おしくも二塁打・三塁打になったものを含めると, 「長打率」「OPS」で評価するとより妥当なのでは?

...という感じでセイバーメトリクスは少しずつ発展していきました.

ということで, まずは常識(思い込み)をそっと思い出にしまいましょう.

2. 客観的な事実を重視する

問題を検討するにあたっては主観に頼らずに客観的な事実にもとづいて考えることがセイバーメトリクスの鉄則です。

例えば毎年200前後の三振を奪う大エースがいたとして, この投手の強みは?と聞いた時に,

  • 豪快なストレートが魅力で球速よりさらに早く見える
  • スライダーがくっそ切れる, きえるぐらいに曲がる
  • 投げっぷりが良くて野手たちの守備テンポがいい感じ

だから, と答えるんじゃなくて,

  • ストレートの平均球速がリーグ平均を上回っていて, 高めのコースでの見逃しストライクが多い
  • スライダーを投げたときの空振り率が高く, かつボールになりにくい(ストライク率が高い)
  • 打球のほとんどが内野フライもしくは内野ゴロのため, 打球による出塁リスクが非常に低い, WHIPも低い

というふうに, 「客観的に証明可能な事実」を重視するのが大切な思考となります.*9

3. 定量的に考える

客観的な事実を評価する際に重要となるのが定量的に考えるということです。物事の「程度」を大切にすることとも言い換えられます。

定量的に考える, はシンプルにいうと,

  • 勝利数・得点といった「量」に置き換えて換算する.(例:WAR, RC, etc...)
  • 事象やプレーが発生する「率(%)」として表現する.(例:K/BB, BABIP, etc...)

という意味合いが大前提としてあります.

同時に,

対象とするもの, ほしい結果に対する「精度」を元に「ほどほど(ある程度)」に測ることも大切.

という意味でもあります.

例えば打者を評価するのに, 「WAR(勝利数に置き換え)」「wRAA(得点創出能力に置き換え)」という評価をしたほうが, 「勝利数」「得点数」に基づいて行けるので(統計的には)正確な可能性が高いです.

ただ, これらは算出・表現が煩雑かつ難しいので手っ取り早く出したい時は「OPS」でいいやっていう「程度」というものを使いこなすのが大切です.

定量的に捉えるに固執しすぎて難しいことばっかりやらない事も大事な思考だったりします.

スタンス

自分はさらに, 「セイバーメトリクスを使う」という点で以下のスタンスを重視しています.

  • 常にイシューからはじめる
  • 再現可能な手法でやる

A. 常にイシュー(解くべきこと)を言語化する

「セイバーメトリクスがしたい」じゃなくて, 「セイバーメトリクスで”何を証明”したいか」が重要ということです.

私が過去にやったテーマだと,

という明確なイシュー(解きたいこと)を定義してやってきました.*10

この3つはいずれも自分の解きたいことを証明し, (同じこと・疑問を持ってる人が多かったのか)多くの方に読んでいただいたりもしました.

明確な言語化(目的化)は価値を生み出すので, 少しでもモヤッとしてる時はまず目的を書くこと!に徹すると良いでしょう!

B. 再現性を担保する

数式やプログラムコードなどで手段化ができ, 再現できることが何よりもの鉄則.

これを明確にすると先程定量化でふれた「程度」の加減も測りやすくなりますし, 何よりも後に続く人のためにもなります.

Analyzing Baseball Data with R, Second Edition (Chapman & Hall/CRC The R Series)

Analyzing Baseball Data with R, Second Edition (Chapman & Hall/CRC The R Series)

アメリカではこのように野球・統計の分析(R等でプログラミング)も出ており, 再現性っていうのはホントに大事かなと思っています.

セイバーメトリクスの種類

セイバーメトリクスはたくさんの概念・指標・考え方があり, すべてを紹介することはほぼ不可能です.

それこそ本が1,2冊書けてしまいます.

セイバーメトリクスに慣れしむ・実践するための目安として,

  • 大原則「ピタゴラス勝率」
  • かんたんなセイバーメトリクス
  • むずかしいセイバーメトリクス
  • (補足としての)スポーツ科学・バイオメカニクス

を紹介します.

大原則「ピタゴラス勝率」

セイバーメトリクスの原点となる考え方です.

一言でいうと,

"チームの総得点と総失点が等しい場合、勝率は5割(得失点差ゼロなら貯金・借金共にゼロに近づくはず)である”
という仮説を元に生み出された指標

というもので, 今では野球のみならずほとんどの球技の統計分析の基本となっています.

なお数式は,

(チーム総得点)2 / ((チーム総得点)2 + (チーム総失点)2

で, 試しに2018年のメジャーリーグに当てはめるとこのようになります.

f:id:shinyorke:20191201162415j:plain
MLB2018年のピタゴラス勝率VS実際勝率

おわかりいただけましたかな?

かんたんなセイバーメトリクス(基礎的なもの)

一言でいうと,

従来のスコアブック・成績データから算出できる指標・考え方

となります.

特徴として,

  • データの入手が容易
  • 簡単な四則演算, 難しくても回帰分析などで算出可能
  • スコア化されにくい守備・走塁に関する指標が苦手*11

というのがあります.

  • ピタゴラス勝率
  • OPS(On Base Plus Slugging)
  • FIP(Fielding Independent Pitching)*12

といったものが代表例となります.

むずかしいセイバーメトリクス(応用的なもの)

スコアブック・成績データに含まれず, 独自の手法で取得したデータを元に算出・評価する指標.

より具体的には, スコアブック・成績のデータに加えて,

  • 投球ゾーンごとの記録(高めはストライク率高いとか, 低めはボールばっかりになるなど)
  • 打球の種類(ゴロ・ライナー・フライなど)
  • 打球の到達位置
  • 投球や打球の速度

これらを手動および機械(主にカメラやレーダー機器)で取得したデータを用います.

特徴としては,

  • 「守備範囲」「なぜ長打になりやすいか」等, ある程度の文脈に沿った分析・可視化ができる
  • 一部の例外(主にメジャーリーグ)を除き, データを取っていないor取っていても公開されてないので一般的の人には算出不可能
  • 算出する際の概念・手法の難易度が高い. 統計や機械学習の知識がある程度必要

といった感じで,

  • xFIP*13
  • UZR(Ultimate Zone Rating)*14
  • バレルゾーン*15

といった指標・考え方があります.

【補足】スポーツ科学・バイオメカニクス

これは自分の専門外なので紹介程度で.

  • より速いボールを投げる

  • 打球を遠くまで飛ばす

  • 怪我の予防・阻止, パフォーマンスの向上

といった視点で,

  • スポーツ科学
  • バイオメカニクス

といった分野もセイバーメトリクスの一部として入ってきています.

先程紹介した「バレルゾーン」もまさにその一部となります.

この辺については, ネクストベースが運営するメディア「Baseball Geeks」が専門家・エキスパートの知見・経験を元に正しく伝えていますので, そちらをご覧ください.

www.baseballgeeks.jp

合わせて書籍も読むとなお良いです, 読んでやってください.

新時代の野球データ論 フライボール革命のメカニズム

新時代の野球データ論 フライボール革命のメカニズム

  • 作者:Baseball Geeks編集部
  • 出版社/メーカー: カンゼン
  • 発売日: 2019/07/16
  • メディア: 単行本(ソフトカバー)

特に吉田正尚選手のインタビューが良いです.

実践する・学ぶ

最後に実践・学ぶという視点でのセイバーメトリクス.

本を読む

本質的なセイバーメトリクスという視点かつ, すぐ参考になる!という点では以下の書籍が強くおすすめです.

マネー・ボール〔完全版〕 (ハヤカワ・ノンフィクション文庫)

マネー・ボール〔完全版〕 (ハヤカワ・ノンフィクション文庫)

より深い, 計算式だったり実際の例を見たい方はこちら.

Analyzing Baseball Data with R, Second Edition (Chapman & Hall/CRC The R Series)

Analyzing Baseball Data with R, Second Edition (Chapman & Hall/CRC The R Series)

その後の難しい系のモノの事例や考え方により触れたいときはこちらを読むと良いでしょう.

ビッグデータ・ベースボール 20年連続負け越し球団ピッツバーグ・パイレーツを甦らせた数学の魔法

ビッグデータ・ベースボール 20年連続負け越し球団ピッツバーグ・パイレーツを甦らせた数学の魔法

  • 作者:
  • 出版社/メーカー: KADOKAWA/角川書店
  • 発売日: 2016/03/16
  • メディア: 単行本

新時代の野球データ論 フライボール革命のメカニズム

新時代の野球データ論 フライボール革命のメカニズム

  • 作者:Baseball Geeks編集部
  • 出版社/メーカー: カンゼン
  • 発売日: 2019/07/16
  • メディア: 単行本(ソフトカバー)

セイバーメトリクスの落とし穴 (光文社新書)

セイバーメトリクスの落とし穴 (光文社新書)

まずは電卓を弾いてみる

簡単な指標は電卓を弾いて数字を出したり読んだりすると良い頭の体操になりますし, 実践により近づきます!

私は普段野球を見る際は,

  • 気になる選手の成績を調べる
  • 手元のスマホやWebブラウザ*16で指標値を計算する(K/BBや, HR/9など, 簡単かつ「程度」な感じで特徴がつかめるもの)
  • 計算した指標値を思い浮かべながら選手の特徴を掴む

という習慣があります, もうかれこれ10年以上やってるかも...

データサイエンス・分析という点ではEXCEL・Rを使ったり, もちろんPythonとかでコードを書いても楽しいのですが,

ツールやプログラミングは本質的じゃない所*17で躓くことが多いので, 予備的に電卓弾いて慣れるほうがより実践的

ですし, (自分でいうのもアレですが)プロがオススメする方法なのでぜひ真似してみるといいかなって思います.

分析して発表する

このブログがまさにそれ.

ストーブリーグに入り, メジャー級な選手がやりあう野球の試合が無いからこそ,

今シーズンの復習・来シーズンの予習として数字を楽しみながら野球を統計的に楽しんでみると超楽しいよ!

というわけで, 一人でも多く正しいセイバーメトリシャン・野球データ愛好家そしてプロの方が増えることを祈ります.

*1:5年前はここまで盛り上がるとは思っていませんでした. ホントに嬉しい悲鳴です.

*2:PySpaでの役割は野球担当です.

*3:N.H.K.

*4:この本を読んで一番うなったところです. これに限るよなあっていう.

*5:詳しくは, BABIP, DIPSっていう概念・指標にあるのでぜひ学んでみてください. 自分はこれが大好物です.

*6:これはパークファクター(PF)の例. 神宮で本塁打量産していても例えば札幌ドームでは?とか考えると面白いと思います.

*7:言い換えると, 「アウトにならない率」です. 野球ではヒット以外に四球を選ぶと出塁ができます.

*8:雑にいうと, よく塁に出る選手がたくさんいるチームの選手は打点が上がりやすくなります. 一方,「打てるやつが四番だけ」的なチームであれば, そもそも「塁上でランナーがおしくらまんじゅう」的なシチュエーションが少なくなり, 打点が稼げないなんてこともあるでしょう.

*9:個人的にはセイバーメトリクスが理解できる・できない, 好き・嫌いの最大障壁かなと思っています. なぜならこの辺は指標以前にルールや野球の構造を理解できてないとうまくいかないからです.

*10:客観的にチーム・選手を知るという真面目な視点もありますが, 「あいつが抜けたからチーム弱くなった」「なんJでいうあのネタはマジなのか」的なパロディー的な視点も十分アリです.

*11:守備は刺殺・捕殺・エラー等記録が少ないかつ, エラーは主観的すぎる指標で特徴量として使い物にならないケースがあり, 守備系の指標は難しいです. 盗塁・盗塁死程度しかない走塁も同様.

*12:「投手が背負う責任は長打と四死球と三振ですよ」という仮説を元に防御率を再定義した指標のこと. 主に味方の守備などのバイアスを省いてより投手の実力にフォーカスするために生み出された.

*13:FIPに打球種別を加味したもの. 「フライボールっぽい打球か否か」という条件が式に入るため, 通常スコアでは計算不可能.

*14:大雑把にいうと守備範囲や肩の強さを数値化する指標. 「この選手は平均的なセンターより10失点分抑えられるので守備が上手い」とかそういう表現が可能

*15:打球速度と打球角度の2軸で長打になりやすいゾーンを出して評価する考え方. この後すぐに解説するBaseball Geeksの記事を参考にすると良いでしょう.

*16:Chromeなどのブラウザはアドレス欄に数式入れたら電卓代わりになりますし, ブラウザじゃないですがコンソールで好きな言語を立ち上げて書いてもいいですし.

*17:EXCELの関数がわからない, プログラムが思わぬ所で実行エラーとか. 慣れていてもいや慣れているこそtypoとかのリスクあるので慌てずいこうぜっていう.