300億円欲しい

メジャーリーグのデータ解析します

GSuiteを使って簡単にコンテストをやろう (学会運営 Advent Calendar 2019)

概要

この記事は、学会運営 Advent Calendar 2019の記事です。

adventar.org

私は、セキュリティのワークショップ Privacy Work Shopの運営に携わりました。
他のメンバの皆さん、ありがとうございました。引き続きどうかよろしくお願いいたします。

その中で、データの匿名加工と再識別の技術を競うコンテスト「PWS Cup」を開催しました。

こんなコンテストです。

pwscup紹介
f:id:gg_hatano:20191225142751p:plain

学会の参加者どうしで交流する一手段として、コンテストはよく行われます。結構盛り上がります。
例えば、データ分析のKDD CUPは有名です。
www.kdd.org

ただ...運営は結構大変です。学会運営にあまりお金は出ませんし、時間もありません。

ルール設計も大変ですが、システム構築も大変です。ちゃんと作らないと、コンテストにならなくて楽しくないです。

今回は、GoogleのGsuiteを利用して、割と簡単にコンテストを実現するシステムについて、紹介します。

PWS Cup とは

こんなコンテストです。

昨年のAdvent Calendarで紹介しました。もしご興味があれば、↓のスライドを見てください!

www.slideshare.net

運営がやること

運営視点で、システムでやることは、

  1. アカウント管理:運営が参加者にコンテスト用アカウントを発行する
  2. データ配布  :運営が参加者のみにデータを配る
  3. データ受付  :参加者が投稿したデータを受け付ける
  4. データ評価  :投稿されたデータを運営が評価する
  5. 結果公開   :評価した結果を参加者に通知する

基本的にはこれだけです...これだけなのですが、ちゃんとやらないと、コンテストが成立しません。

各項目ごとに重要度を付けてみると、↓みたいな感じになりました。

f:id:gg_hatano:20191225153734p:plain
検討事項

アカウント管理。
今回は「セキュリティのワークショップ」のコンテストなので、そこでセキュリティの事故が起きたら面白すぎます。
極力、手で実装したくないです。どんな穴があるのかわからないので...。

データの配布。
参加者だけに渡したいです。特に、今回のコンテストは特別に、参加者毎に渡すデータが異なる、という要件がありました。
アカウント毎に、正しくデータが配布できるような仕組みが必要でした。

投稿データのフォーマットチェックの自動化、は結構重要です。
参加してもらって折角投稿したのに、フォーマットがダメで評価できません...は頻繁にあります。
個別に修正箇所を指摘するのは超絶大変です。

また、データ配布・受付のシステムダウンが起きないことも重要です。
特に締め切り間際に投稿が相次ぎます。投稿データが大量に降ってくるとシステムのパフォーマンスが落ちます。
「システムのせいで投稿できませんでした」はかなり興ざめです。

予算。人件費は出ません。ボランティアベースで参加していますし、実装の工数に費用は出てきません。
可能な限り、ありものを使うのが良さそうです。サービス利用費...としてなら、費用の請求はしやすいと思います。

実現手法

比較します どうやったらできるか。

  • プロの力を借りる:コンテスト運営サービス
    • 〇 kaggleやtopcoderやsignateなど、有名なコンテスト事業者に協力してもらいます。プロの力で、いい感じにやってもらえます。
    • ✕ 予算感が分かりません...学術目的なら安くできたりするかな...?分かりません。(企業案件だと1千万円オーダーという声もあります)
  • 既存のシステムを使う:EvalAI
    • 〇 データ分析の予測モデル構築コンテスト...は、EVALAIというツールを使えば作れそうです
    • ✕ 予測モデル構築コンテストではない場合、システム改修が必要です。これは大変そう。
  • [今回採用] 既存のツールを組み合わせる : Gsuite
    • 〇 ところどころ人力を入れながら、ある程度は自動化します 今回はこの内容を紹介します
    • ✕ 規模が大きくなってくると、人力が無視できません。予算感も合わないかもしれません。
  • 一から全部自分で作る
    • 〇 何かを買う必要はありません。サーバ代くらいです。安く済みます。頑張れば、自分が欲しいものが作れます。
    • ✕ 労力はかかります。労力は抑えたいです...。

EvalAIはかなりいい感じだったのですが、コンテストの仕様と合わなかったので止めました。
↓の記事が参考になります。AWSとかでEvalAIを動かしておしまい、にしたかった。
qiita.com

今回は、Gsuiteを使って、簡単にコンテストシステムを作りました。

理想

こんな感じです。

f:id:gg_hatano:20191225154141p:plain
PWSCUPシステム(理想)

現実

  • Gsuiteでアカウント管理
  • Google driveでデータを配布 (フォルダのアクセス権限をいい感じに設定しておく)
  • Google Form + GAS で投稿時のフォーマットチェック
  • [変更] 運営のローカル環境に投稿データをダウンロードして、評価用スクリプトを回して、結果をgithub pagesで公開

f:id:gg_hatano:20191225154201p:plain
PWSCUPシステム(現実)

GCEからgoogle driveを見に行くのはちょっとアレなので、gcsに移して...とか考えるのが面倒なので、手元にダウンロードしてやりました。
投稿したらすぐに評価して表示したい場合は、いろいろ工夫が必要でしょうけど、今回は数日に1回評価すればよかったので、頑張りませんでした。

実装が必要なものは、

くらいです。簡単ですよね。

費用

  • Gsuite利用料は、1アカウント700円/月くらい
    • 25チームが2か月やって、700 x 25 x 2 = 35,000円くらいでした。

まとめ

コンテストは楽しいです。学会は盛り上がります。
でもシステムは面倒です。お金を多少使って、労力を最小化しましょう。

来年はEvalAI使いたい...

おまけ

  • 会社proxyのせいでGoogle Formが見られません、という参加者が...
    • メールで提出してもらいました。お互い頑張りましょう

参考記事

  • kaggle でコンテストをホストする
    • ↓からkaggleに申し込みができるみたいです。

www.kaggle.com

匿名化・再識別コンテスト「PWS Cup」の紹介

この記事は

(非公式) NSSOL Advent Calendar 2018の、12/08担当分でした。
qiita.com

昨日は、データ分析のライフサイクル管理を効率化する「MLFLOW」紹介の記事でした。

qiita.com


明日は、「PPTを使って動画を作った時の苦労話(手順)」です。

(後でリンクを貼る)

研究紹介スライドから、それっぽく見える動画にするための手順...のはずです。

かなり苦労して最終的に得られたベストプラクティスの紹介です。楽しみですね!


以上です。

NBAのデータ分析がしたい(データ準備編)

はじめに

この記事は、R advent calendar 2016 12/18 の担当分です。

qiita.com

ですが、Rとかクリスマスとか、どうでもいいのです。NBAを観ましょうNBA

12月26日の朝4時30分から、キャバリアーズvsウォリアーズの試合があるのです。

watch.nba.com

最近はこの試合を楽しみに生きています。寂しくないです。

2015-2016年シーズンファイナルの激闘は、みなさんの記憶にも新しいはずです。

最終第7戦の最後まで目が離せない、最高の戦いでした。

www.nba.co.jp

今年はウォリアーズに、2013-2014シーズンMVPであるケビン・デュラントが加わりました。

ステファン・カリー、クレイ・トンプソン、ドレイモンド・グリーンとデュラントのオールスター選手4人が所属しており、

史上最強の呼び声も高いです。12月17日現在で23勝4敗、ウェスタンで1位です。

faknowledge.info

一方キャバリアーズは、昨年パッとしなかったケビン・ラブの調子が良く、

レブロン・ジェームズ、カイリー・アービングと共にBIG3で立ち向かうことができそうです。

12月17日現在で18勝6敗、イースタンで1位です。

興奮してきました。NBAのデータ分析しましょう。

NBAのシーズンデータ

まずはNBAについてどのようなデータが取得できるか、調べてみました。

シーズンの選手別成績は、SportsAnalyticsパッケージの関数を使って取得できます。

library(dplyr)
library(SportsAnalytics)
## データの取得
nbadata <-  data.frame()
for (year in 0:15){
  ## シーズンを指定するための引数を作る
  ## 2015-2016シーズンだったら "15-16"
  fetch.nbadata.arg <- paste(
    sprintf("%02d", year),
    sprintf("%02d", year+1),
    sep="-"
  )
  ## データの取得
  nbadata.year <- 
    fetch_NBAPlayerStatistics(fetch.nbadata.arg)
  ## シーズンを表す列を作る
  nbadata.year$Year <- 2000 + year
  ## 結合する
  nbadata <-
    rbind(nbadata, nbadata.year)
}
## 内容確認
> nbadata %>% names
 [1] "League"              "Name"                "Team"                "Position"           
 [5] "GamesPlayed"         "TotalMinutesPlayed"  "FieldGoalsMade"      "FieldGoalsAttempted"
 [9] "ThreesMade"          "ThreesAttempted"     "FreeThrowsMade"      "FreeThrowsAttempted"
[13] "OffensiveRebounds"   "TotalRebounds"       "Assists"             "Steals"             
[17] "Turnovers"           "Blocks"              "PersonalFouls"       "Disqualifications"  
[21] "TotalPoints"         "Technicals"          "Ejections"           "FlagrantFouls"      
[25] "GamesStarted"        "Year"  

総得点の推移

シーズン別の総得点を集計してみます。

nbadata <- read.csv("nbadata_2015_2016.csv")

library(ggplot2)
## 総得点
nbadata.points <- 
  nbadata %>% 
  group_by(Year) %>% 
  summarise(Points = sum(TotalPoints))

## 総得点の可視化
nbadata.points %>% 
  ggplot(aes(x = Year, y = Points)) + 
  geom_line() + 
  geom_point() + 
  ggtitle("Total Points")

f:id:gg_hatano:20161218111111p:plain

NBAは1シーズン82試合なのですが、2011-2012シーズンは66試合しか行われませんでした。

その影響で、シーズン総得点は2011年に落ち込んでいます。

しかし、全体として得点は増加傾向にあります。

オフェンスの効率が上がっているのか、ディフェンス力が低下しているのか。

今回は、オフェンスに注目してみます。

3ポイントシュートの成功率、成功数

昨今、色々なチームがウォリアーズの真似をしているのか、3ポイントシュートの数が増えている気がします。

最近も、ロケッツが1試合で24本の3ポイントが決め、歴代記録が更新されました。

www.nba.co.jp

そこで、確認のために、3ポイントシュートの成功率、成功数の推移を調べてみます。

## 3ポイントの集計
nbadata.threepoints <-
  nbadata %>% 
  group_by(Year) %>% 
  summarise(ThreesAttempted = sum(ThreesAttempted), 
            ThreesMade = sum(ThreesMade))

## 3ポイントの成功率
nbadata.threepoints %>% 
  mutate(ThreesRate = ThreesMade / ThreesAttempted) %>% 
  ggplot(aes(x = Year, y = ThreesRate)) + 
  geom_line() + 
  geom_point() + 
  ggtitle("Three Point Shot (Rate)")

f:id:gg_hatano:20161218111130p:plain

## 3ポイントの成功数
nbadata.threepoints %>% 
  ggplot(aes(x = Year, y = ThreesMade)) + 
  geom_line() + 
  geom_point() + 
  ggtitle("Three Point Shot (Made)")

f:id:gg_hatano:20161218111026p:plain

3ポイントの成功数は、増加傾向にありそうです。

また、3ポイントの成功率は、2015-2016シーズンには増加しています。

闇雲に3ポイントを狙っているのではない、ということでしょう。3ポイントは得点力向上に寄与していそうです。

NBAのplay-by-play データ

次は、シーズンのデータではなく、もっと細かい、試合中のデータも扱いたいです 。

ただ、バスケでそれができるでしょうか。

状態変化が離散的であるスポーツは、データが作りやすそうです。

例えば、野球のデータは、80年分くらいが公開されています。

gg-hogehoge.hatenablog.com

しかし、連続的に変化するバスケの試合を表現するようなデータは、ちゃんとお金を払わないと使えなさそう...

探してみたら、ありました。

なんと、試合中の各時刻における全選手の座標を取得することができます。

library(RCurl)
library(jsonlite)
## NBA_SportVUをクローンします。
## system("git clone https://github.com/rajshah4/NBA_SportVu")
source("./NBA_SportVu/_functions.R")

ここを参考にしながら、 昨年の12/24の、キャバリアーズvsウォリアーズの試合データを取得してみました。

Rで扱いやすいように、dataframeにします。

## all.movements <- sportvu_convert_json("../data/0021500438.json")

1試合分で13列256万行。すごい。220MBありました。内容を見てみます。

all.movements <- read.csv("movements.csv")
all.movements %>% names
 [1] "X"          "player_id"  "lastname"   "firstname"  "jersey"     "position"   "team_id"   
 [8] "x_loc"      "y_loc"      "radius"     "game_clock" "shot_clock" "quarter"    "event.id"  

各時刻(0.04秒刻み?)で、コート上の全選手とボールの位置情報(x_loc, y_loc)がわかります。

...すごそう...

一旦、プレイを可視化してみます。

4Q3:30前後の、レブロンジェームズのダンクまでの動きを、プロットしてみます。動画だと、このプレイです。

stats.nba.com

サイドからセンターにドリブルで移動、そこからドライブインしてダンク、という動きでした。

## データの抽出
movements.493.lebron <- 
  all.movements %>% 
  filter(lastname == "James") %>% 
  filter(event.id == 493) 
## 可視化(y座標は、ビデオの向きに合わせて調整する)
movements.493.lebron %>% 
  ggplot(aes(x = x_loc, y= 50-y_loc, group = lastname)) + 
  geom_path(aes(color = game_clock)) + 
  ylim(c(0,50)) + 
  ylab("y_loc")

f:id:gg_hatano:20161218110837p:plain

すごい!ちゃんとできています。

総移動距離

座標が取れているので、色々なことが分かりそうです。

例えば、各選手が1試合でどれくらい移動したのか、見てみましょう。

## 総移動距離の計算
data.travelDist <- 
  all.movements %>% 
  group_by(firstname, lastname) %>% 
  summarise(totalDist = travelDist(x_loc, y_loc))
 
## kmに調整して、上位10人を出す
data.travelDist %>% 
  mutate(totalDist_km = totalDist * 30 / 100 / 1000) %>%
  select(-totalDist) %>% 
  arrange(desc(totalDist_km)) %>% 
  head(10)

## 上位10人
        lastname    firstname[f:id:gg_hatano:20161218110837p:plain]    totalDist_km
1         NA        ball     8.711633
2      Kevin        Love     4.896590
3     LeBron       James     4.668445
4   Draymond       Green     4.631822
5    Stephen       Curry     4.534497
6       Klay    Thompson     4.498305
7    Matthew Dellavedova     4.075169
8       Iman    Shumpert     3.820774
9      Andre    Iguodala     3.736349
10   Tristan    Thompson     3.676420

...ボールにもセンサーがついていたのですね。

ボールの総移動距離は8.7km。ケビンラブは4.9kmも移動した、とのことでした。

おわりに

今年のお正月はNBAのデータで遊びましょう!

ところでこの記事は、R advent calendar 2016 12/18 の担当分でした。

qiita.com

明日は@siero5335さんの「森をさまよう」です。

qiita.com

...なんでしょう。怖い話でしょうか。楽しみですね。

以上です。

Oracle Master 12c Silver合格しました

はじめに

gg-hogehoge.hatenablog.com

あれから2ヶ月経ちまして、なんとか合格しました。

合格点67%のところを67%。ちょうどでした。

対策

受験を延期して、ソフトバンクから白い対策本が出版されるのを待つ方がいいと思います。

僕は何をしたらいいのか分からなすぎて、自転車を乗り回して筋トレをしたら合格できました。

みなさんも自転車に乗りましょう。

文句

3月に受験した時は2セクションあったのですが、今回は1セクションしかありませんでした。

試験形式変更のアナウンス、あったのかな。

試験問題内容も、3月の時と全然違いました。

expdpでダンプファイルの名前が被っていたらどうなるか?知らんがな。

おわりに

Goldまで頑張れる気がしません。これでOracleの試験は一区切りにします。

そろそろデータ分析します。NBAのデータをいじります。

以上です。

追記

2016年5月に合格ライン変更がありますよ、というニュースがありました。

2016年2月に。そんなん見ないよ...

新着ニュース | Oracle University

[再受験無料だから] Oracle Master 12c Silverの情報を共有します [悔しくない]

はじめに

Oracle Master 12c Silverで落ちました... 合格ライン67%のところ、59%でした。

悔しいので、得た知見を整理して共有します。

...3/31までは、Oracleの無料再受験キャンペーン期間なのですよ。

落ちても、もう1回は無料で受験できます。今回は様子見の受験だったのです。計画通りです。計画通り。

Oracle 12c Silver (正式名称はOracle Database 12c: Installation and Administration)とは

Oracle 11g Silver のバージョンが上がったOracle 12cのSilverに対応するのが、「Oracle Database 12c: Installation and Administration」です。

便宜的にOracle 12c Silverと呼ばれています。

12c Silverについてググってみると、試験のバージョンが12cになってから、問題に関してほとんど情報が流れていません。

"Oracle 12c Bronze 取りました!"といった投稿のあるブログは、ちらほら見られます

"次はSilver!大変そうだけど頑張ります!"と書いてあるのですが、その後は全く音沙汰がなかったり....

みんな闇に呑まれたのでしょうか...

とにかく、私は受験してきました。落ちましたけど。

次は何とかなると思っています。

今回の敗因は、試験範囲を満遍なく勉強したこと、だと思っています。

12c Silver 試験内容

12c Silverは2セクションから成ります。合わせて150分です。

セクション1は20問。ここは簡単です。セクション2は75問。ここが大変。

両セクションで、それぞれ正答率67%を超えていれば、合格です。

セクションごとに分けて正答率が計算されるため、セクション1で頑張っても、セクション2の正答率が上がらないことが辛いところです。

問題構成について。

後半のセクションは、Oracle Database 12cのインストールやアップデート、さらに12cの新機能についての問題が多かった、印象があります。

私は、11gまでの問題と同様、範囲である全分野からそれなりに満遍なく出題されるのだろう....と考えて、広く(浅めに)学習しましたが、

ここでやられました。インストールやアップデートと12cの変更点についてしつこく聞かれました。

結果、合格点に届かず。

12c Silver試験の正式名称は、Oracle Installation and Administration ですからね。

インストール周りの知識を聞くよ!と言っているようなものです。

DBA全般の知識が問われる11gまでの試験とは毛色が異なる、という点が、12c Silverの重要な点だと勝手に思っています。

試験対策方法

対策1 Crammedia

対策方法について。

セクション1と、セクション2の3割くらいの問題については、Crammediaで対策できると思います。

クラムメディア | Oracle 1Z0-062 資格問題集 - Oracle 12C Silver 問題集

本番と似たような形式で練習できます。

Crammediaに1ヶ月分の利用料である3000円を払って、

収録されている166問の問題をpdfで全部出力して取り組む...でなんとかなると思います。

ただ、提供されている解答が頻繁に間違っていたり、「2つ選べ」と言われたので2つ選んだら正解は3つだった、ということがあります(2016年3月26日現在)。

精神力が問われます。有償デバッグです。

しかし、それ以上の価値はあると思います。12c対応の良い問題集が他にありませんし。

対策2 11g Silverの対策本 (白本)

この11g Silverの対策本(通称:白本)も便利でした。

【オラクル認定資格試験対策書】ORACLE MASTER Silver[Silver DBA11g](試験番号:1Z0-052)完全詳解+精選問題集 (オラクルマスタースタディガイド)

【オラクル認定資格試験対策書】ORACLE MASTER Silver[Silver DBA11g](試験番号:1Z0-052)完全詳解+精選問題集 (オラクルマスタースタディガイド)

  • 作者: エディフィストラーニング株式会社,鈴木佐和,飯室美紀,岡野友紀,西昭彦
  • 出版社/メーカー: SBクリエイティブ
  • 発売日: 2011/09/01
  • メディア: 単行本
  • 購入: 2人 クリック: 5回
  • この商品を含むブログ (5件) を見る



私は、Crammediaの問題で分からないところを、11gSilver白本で調べる、という学習方式を取りました。

ただ、11gから12cにアップデートした際の変更点には注意が必要です。LREGとかunlimited tablespaceとか。

12cの変更点まとめ:Oracle Databaseセキュリティ・ガイドのこのリリースの変更

11g Silverの対策本には黒い本もありますが、

徹底攻略ORACLE MASTER Silver DBA11g教科書[1Z0-052]対応 (ITプロ/ITエンジニアのための徹底攻略)

徹底攻略ORACLE MASTER Silver DBA11g教科書[1Z0-052]対応 (ITプロ/ITエンジニアのための徹底攻略)


白のほうがいいと思います。技術解説と問題集がセットになっている分安いですし、内容も充実しています。

対策3 12c Silver の対策本

2016年3月11日に、待ちに待った12c Silver対策本が出版されました。

オラクルマスター教科書 Silver Oracle Database 12c

オラクルマスター教科書 Silver Oracle Database 12c

収録されている問題は...対策本としては不十分に思えます。オススメ、というわけではありません。

amazonのレビューにも書いてありますが、この本だけでは厳しいです。

しかし、12cで新出の分野については、この本を頼る他ありません。

特に、割かれているページ数は少ないですが、テキスト第18章から第20章の内容(インストール関連)は、重点的に覚えるといいと思います。

まとめ

Oracle Master 12c silverは、出題傾向が11gまでとは全く異なります。

12cの新機能と変更点、特にインストールやアップデートについて、重点的に学習して臨むといいかな、と思います。

それ以外は、変更点に気をつけながら11gの白本で対策しましょう。

12cの白本、早く出ないかなあ。

あー悔しい...

以上です。

追記

合格しました!!
gg-hogehoge.hatenablog.com

最も勝利に貢献した選手は誰だったのか 2015年メジャーリーグのデータ分析

はじめに 野球の勝負強さ

「9回表の2アウト、同点の場面で打ったホームラン」

「9回表の2アウト、10点リードの場面で打ったホームラン」

この2つは、選手の個人成績としては同じです。

記録上は同じ、ホームラン1本で1点取った、となります。

しかし、勝利への貢献という意味では、全く価値が異なります。

チームを勝利に近づけるようなプレイが重要ですからね。

以下、参考記事です。

巨人村田の"死体蹴り"が有名です。村田は大事な場面で打たないんですよね。

プロ野球 死体蹴り名人ランキングwwwwwwwwwwww : なんJ(まとめては)いかんのか?
【死体蹴り】 ヤクルト打線大爆発、9回表に11点wwwwww : なんJ(まとめては)いかんのか?

勝利への貢献度合いから打席を見ることで、

勝負強さや打席結果の価値を評価してみたいと思いました。

勝率の変動を調べてみる

過去に、こういう記事を書きました。

gg-hogehoge.hatenablog.com

巨人の勝率を上げたい (スクレイピングとデータ集計)

過去の試合結果データを利用して、試合状況から勝率を計算できるようにした、というものです。

こんな感じです。

打席ごとに勝率が変化します。

先のスライド、19ページ目にある、巨人の勝率変化のイメージです。

f:id:gg_hatano:20151220085830p:plain

ここで、勝率の変動の大きさで打席結果の価値を評価してみればいい、

というアイデアがあります。

2015年メジャーリーグの全試合の全打席で計算してみました。

## 2015年メジャーリーグで、最も勝利に貢献した打席

2015年のメジャーリーグの2429試合で発生した、全189,591イベントに対して、勝率変動を調べました。

その中で、最も勝率変動が大きかった打席と、その試合を挙げてみます。

勝率変動の絶対値をとって、試合ごとにその最大値を調べてみました。

そして、その最大値が大きかった上位5試合です。

GAME_ID 勝率変動の最大値
1 CHN201507270 0.9145
2 TEX201505310 0.8273
3 TOR201506090 0.8100
4 COL201506022 0.7940
5 ANA201509130 0.7916

GAME_IDが分かり辛いですが、勝率変動が最大だったのは、7月27日のこの試合です。

live.baseball.yahoo.co.jp

試合中の勝率変動を見てみましょう。

f:id:gg_hatano:20151220080328p:plain

最後の打席が、2015年の勝率変動最大打席でした。

live.baseball.yahoo.co.jp

1点ビハインドの9回裏、2アウト1塁から、ルーキーのクリス・ブライアントがサヨナラ2ランホームランを打ちました。

勝率8.5%の場面から起死回生でした。

シーズン通算の勝率変動

次に、2015年のシーズンを通じて、選手ごとに勝率を何%上げたかを調べてみました。

もっとも勝利に貢献した選手が分かります。上位10人です。

ID 勝率変動(%) 選手名
1 vottj001 6.29 Joey Votto
2 goldp001 5.90 Paul Goldschmidt
3 donaj001 5.83 Josh Donaldson
4 rizza001 5.81 Anthony Rizzo
5 troum001 4.84 Mike Trout
6 carpm002 4.73 Matt Carpenter
7 harpb003 4.69 Bryce Harper
8 mccua001 4.59 Andrew McCutchen
9 morem001 4.06 Mitch Moreland
10 davic003 4.06 Chris Davis


1位はジョーイ・ボットーでした。

baseball.yahoo.co.jp

2015年の成績は、打率.314、29本塁打、80打点。

それぞれ、突出した成績ではありません。物足りないです。

しかし、勝利貢献度合い、という形で高く評価することが出来ました。

こういう選手に光を当てていきたいですね。試合を決める選手。

他の勝負強さ指標と比べてみます。

例えば、打点。

打点ランキングの順位と勝利貢献度合いランキングの順位をプロットしてみました。

f:id:gg_hatano:20151220185630p:plain

結構違いますね。

まとめ

勝率の変動を利用して、打席や試合を評価してみました。

セイバーメトリクスでは、WPAと呼ばれる指標です。

チームの勝利に貢献した選手を定量的に評価できて面白いです。

コレを利用すれば、ある試合のMVPを自動的に決められますね。

試合の勝率貢献度が最大の選手を選べばいいわけですし。

展望1 日本プロ野球

日本プロ野球では、適切なデータが用意できませんでした。

打席単位のデータが欲しいです。

展望2 野球以外のスポーツ

試合状況から勝率を推定できれば、同様の手法が他のスポーツでも適用できます。

バスケとか面白そうですね。

例えば、残り10分で何点差であれば勝率95%で安心できる、といったような形で、

いわゆる「セーフティリード」を定量的に主張することが出来るかもしれません。

おわりに

この記事は、R Advent Calendar 2015、12月21日担当分でした。

qiita.com

また、今回の分析に際して利用したコードとデータは、ここにあります。

github.com

Advent Calendar 2015, 12月22日の担当は@kazutanさんです。

twitter.com

予告によれば、leafletという、地図上でデータを可視化するライブラリを利用した記事だそうです。

楽しみですね。

以上です。

中日の大島は本当にセカンドゴロ製造機なのか (2015年の打席結果データを作りました)

はじめに

元ネタ。セカンドゴロ製造機として名高い、中日の大島選手に関する記事です。

blog.livedoor.jp

手でデータを集計しているようです。大変そうです。

そこで私は、プログラムを書いて全自動化してみました。

ついでに、大島選手だけではなく全選手の打席結果をまとめたデータをcsvで作ってみました。

2015年 打席結果データ作りました

データはこちら。2015年の全試合の打席結果.csvが入っています。

2015年打席結果.csv: 試合ID, チーム名, ホームかアウェイか, イニング, 選手名, 打席結果, イニング内の打席順, というデータです。 · GitHub

約65000行あります。気をつけて下さい。

yahoo一球速報の試合結果ページを1試合ずつ整理して作りました。

打席結果が表になっているので、ここをいい感じにまとめるだけです。

作ったデータの中身を紹介します。

先頭の6行。

試合ID チーム ホーム_アウェイ 選手 結果 結果番号
1 2015032701 巨人 home 1 坂本 勇人 左安 1
2 2015032701 巨人 home 1 井端 弘和 遊ゴロ 2
3 2015032701 巨人 home 1 長野 久義 中2 3
4 2015032701 巨人 home 1 阿部 慎之助 捕邪飛 4
5 2015032701 巨人 home 1 村田 修一 中飛 5
6 2015032701 巨人 home 2 坂本 勇人 右飛 1

1行目は、2015年3月27日の試合、巨人がホームで、1回に坂本が先頭でレフトにヒットを打った...

...といったものです。

このように、打席の情報が1行に入ったデータとなっています。

大島はセカンドゴロ製造機なのか

中日の大島選手の打席結果を集計してみました。

##   result count
##    (chr) (int)
## 1 二ゴロ    85
## 2   左飛    48
## 3 遊ゴロ    47
## 4 空三振    45
## 5   中安    39
## 6   四球    38

とりあえず棒グラフにしてみました。

f:id:gg_hatano:20151031202710j:plain

元記事の数字とは一致しています。

大島選手の打席結果では、セカンドゴロの数が最も多かったです。

他の選手と比べるとどうでしょうか。

200打席以上の選手で、セカンドゴロ率を調べてみました。

セカンドゴロ率ランキング、top10人がこちらです。

チーム 選手 結果 回数 打数 割合
1 ロッテ 岡田 幸文 二ゴロ 30 208 0.1442
2 ソフトバンク 髙谷 裕亮 二ゴロ 29 208 0.1394
3 中日 大島 洋平 二ゴロ 84 608 0.1382
4 楽天 後藤 光尊 二ゴロ 58 440 0.1318
5 巨人 アンダーソン 二ゴロ 35 269 0.1301
6 楽天 藤田 一也 二ゴロ 57 447 0.1275
7 巨人 立岡 宗一郎 二ゴロ 50 397 0.1259
8 中日 森野 将彦 二ゴロ 31 248 0.1250
9 楽天 銀次 二ゴロ 41 354 0.1158
10 ヤクルト 雄平 二ゴロ 71 616 0.1153
左打ちのノーパワー系バッターばかりです。アンダーソン以外。

大島は3位でした。ただ、打席数は多いです。

セカンドゴロ製造機と認定してよさそうです。

できなかったこと

打席結果データで、イニング内の打席結果の順番が上手く取れていません。

例えば、先ほどのデータで、6行目に坂本が来ています。

これは、坂本が2回の先頭打者という意味ではありません。

6,7,8,9番の打席の後に坂本の打席...だったのですが、この順番が反映できまていせん。

ちょっと面倒なので、後回しにします。

また、塁の状況が分かると面白いのですが、取得できていません。

なので、例えば、得点圏打率の計算は出来ません。

おわりに

みなさんもExcelとかで遊んで下さい。

以上です。

追記1 (2015年10月31日)

今回のデータには、クライマックスシリーズ日本シリーズの試合も含まれています。

なので、集計結果には、シーズン通算成績とは異なる数字が現れています。

追記2 (2015年10月31日)

打者1順の時の打撃結果が正しく反映出来ていませんでした。

データを手で直しました。