BayStats
BayStats
Webサイトからの情報収集とデータ解析

BayStats について

このアプリケーションは、横浜DeNAベイスターズの公式サイトから試合の予定、結果、選手の情報を収集し、内包されたデータベースに保存します。 データベースの機能を生かして情報を整理することで、元のサイトとは違う角度からデータを検証することができます。

なおBayStatsの開発には、横浜DeNAベイスターズ球団は一切関与しておりません。 アプリケーションの仕様はANDROBO独自のものであり、著作権はANDROBOが所有します。 アプリケーションの性質上、取り扱うデータについての権利は、横浜DeNAベイスターズWebサイトにおける取り決めに準拠するものとなります。

データが何もない状態

 

スクレイピング

Webサイトに掲載されている情報から必要な部分を収集する機能を、スクレイピングと言います。 多数のページが共通の書式で作られている場合、その書式に合わせてデータを抽出するプログラムを作成します。 ハイパーリンクを辿ってファイル単位で情報を収集する“クローラー”とは異なり、ページの必要な部分だけを抽出するため、保存される情報量は少なく済みます。 サイトの所有者から情報が得られない場合は、実在するページから構造上の一定の法則を見出し、データを抽出する仕組みを構築する必要があります。 特定の書式に特化した仕組みなので、サイトのデザインが変更されると正しく動作しなくなる恐れがあります。

試合情報のスクレイピング

試合スケジュールは1か月ごとのページに記載されており、そこからは試合の日時と対戦相手、および開催場所の情報が得られます。 スケジュールの消化と共に日々更新され、両チームの得点や詳細ページへのリンク、あるいは「雨天中止」などの記述が追加されます。 このページの構造は、ファームのサイトでも踏襲されています。

詳細ページには1試合ごとの詳しい情報が記載されており、球場のスコアボードのような表や両チームのスターティングメンバーなどの結果が得られます。 特に1軍の公式戦にて掲載されている試合経過の欄には、選手の交代や1打席ごとの打撃結果が記載されています。 さらにテーブルスコアというリンク先には、全打者全打席の結果や投手成績が表になっています。 公式サイトには他にも様々なページがありますが、BayStatsでは以下の情報を収集対象としています。

あるデータを集計することで得られるパラメタは、元のデータがあれば復元できるので、収集する必要はありません。 公式サイトには以下のような集計結果に相当するデータが掲載されていますが、本システムでは収集しません。

リーグの順位表を作成するには全チームの対戦成績が必要ですが、本システムで参照するサイトに掲載されていないため、取り扱いません。

本書作成時点では、以下の情報は収集しません。

スクレイピング・ダイアログ

選手名鑑のスクレイピング

選手名鑑のページには、照会時点で在席している全メンバーが掲載されています。 シーズン中の入退団により変更されることがありますが、過去に在席していたメンバーのページを探すことはできません。

BayStatsでは、選手名鑑の情報を部門(監督・コーチ、投手、保守、内野手、外野手)ごとに取得できます。 なるべく過去のデータが消えないよう、スクレイピング実行時に年数を付加して保存します。
BayStatsでは、以下の情報を収集できます。

メンバーのスクレイピング・ダイアログ

diana情報のスクレイピング

球団パフォーマンスチーム・dianaの情報を収集します。 公式サイトでは多数のページに分散して記載されている情報を、一画面にまとめて表示することができます。

 

データ集計機能

スクレイピングで集めたデータを参照するために、BayStatsには色々な集計機能が実装されています。 メイン画面には以下の5つのタブがあり、それぞれ違う角度からデータを集計、表示します。

  1. 試合
  2. ファーム
  3. 一覧
  4. 選手
  5. 分析

1. 試合

試合のスケジュールと結果を、ほとんど加工しない状態で表示します。 画面左に配置された試合の一覧表は勝敗によって色分けされており、既に終了した試合の行を選択すると、結果データが表示されます。 公式サイトには練習試合やオープン戦など、レギュラーシーズン以外の情報も掲載されていますが、試合の種類によって情報量には差があります。 練習試合は合計の得失点だけですが、オープン戦はスコアボード(各イニングの得点表)とスターティングメンバーが追加されます。 公式戦ではさらに、全打席の結果と投手の成績が加わります。

試合画面

試合スケジュール、打者成績、投手成績の部分のような格子状の表で、先頭行に項目名が表示されている場合があります。 項目名をクリックすると、表内のデータが項目によってソートされます。 例えば日付と書かれた部分を一度クリックすると、日付の昇順で並べ替えられます。 このとき項目名の右側には▲印が表示されます。 もう一度クリックすると降順でソートされ、▼印が表示されます。

打者成績表の赤い文字色は安打を表し、丸括弧内の数字は打点数を表します。 結果が略語で書かれているため分かりにくいかも知れませんが、例えば「見三振」は見逃し三振、「左本」はレフト方向へのホームランを意味します。

投手成績の表には、投球回数や打者数などいくつかの項目があります。 このうち死球と四球については、公式サイトと内容が異なります。 公式サイトでは一軍の投手成績の場合は与四死球が合算されているのに対し、ファームの場合は別々に記載されています。 本システムでは一軍の場合でも、後述の試合経過データと付け合わせ、数値を按分しています。

スターティングメンバーと試合経過

一軍の公式戦に限っては、各打席におけるランナーの有無についての情報(試合経過)が公開されています。 試合一覧表で公式戦を選択すると、画面右上方に試合経過ボタンが現れ、押下すると別画面にて表示されます。

試合経過画面

ランナーとアウトカウントの表示は、その打席の 『前 ⇒ 後』 の状態です。 公式サイトでは『後』の状態のみ記載されており、さらに選手交代の情報が同じ表内に出現します。 本システムではスターティングメンバーと交代出場の選手名を、画面右に配置しています。

試合経過のデータがないオープン戦などでは、試合経過ボタンの代わりにスターティングメンバーボタンが現れます。 押下すると、別画面にてスターティングメンバーの一覧が表示されます。

スターティングメンバー画面

2. ファーム

ファーム(二軍)の試合スケジュールおよび結果を表示します。 一軍とは異なり、公式戦においても試合経過の情報はありません。 試合経過ボタンの代わりにかわりに、スターティングメンバーボタンが表示されます。 スターティングメンバーボタンボタンを押下すると、別画面にて両チームのスターティングメンバーが表示されます。 画面の構成は試合タブとほぼ同じです。

投手成績表の項目は一軍よりも若干多く、犠打、犠飛が加わります。

3. 一覧

練習試合やオープン戦のデータを除く、公式戦のデータを表形式にまとめています。 表形式のおもなメリットは、画面に収まらないような多くのデータをスクロール形式で扱えることと、それらを項目ごとにソートできることです。 表の最上部にある項目見出しをクリックするたびに、昇順・降順のソート条件が切り替わります。 表示対象のデータは、シーズン(年度)、シリーズ、およびチームによって指定します。 ここで指定するチームは対戦相手を絞り込むのではなく、集計の基軸を他チームに変更します。 その結果、対戦相手からの視線でデータを参照することになります。 一覧表は以下の4つに分類されています。

一覧・試合要約画面

【試合要約】

試合データの主な項目を表示し、試合ごとのチーム打率、チーム防御率を算出します。 最下行の合計欄は、データ表示時にシステム内で自動的に算出されます。 行を選択して右クリックすると、試合経過またはスターティングメンバーを開くメニューが表示されます。

試合要約のコンテキストメニュー

【選手成績】

選手別の集計表で、打撃成績、得点圏(打率)、投手成績の3つの表があります。 打率や打点など表の項目でソートすれば、チーム内でのランキングとなります。

【打撃結果】

この画面には4つの表があり、左から右へとドリルダウン式に連動しています。 一番左にある打撃結果の分類は、打者成績の結果を分類して集計したものです。 例えば右安や左安を安打にまとめたり、見三振と空三振はまとめて三振として数えます。 打者別の件数は、打撃結果の分類で選択された分類の件数を選手ごとに分けた表です。 打者別の件数でいずれかの選手を選択すると、打席の明細が表示されます。 打席の明細でいずれかの打席を選択すると、そのイニングの試合経過が表示されます。

一覧・打撃結果

この表は試合経過データを元に作成しており、試合経過データのないファームの画面はありません。

【試合要約(ファーム)】

前出【試合要約】のファーム版です。右クリックメニューは、スターティングメンバーだけです。

【選手成績(ファーム)】

前出【選手成績】のファーム版です。得点圏打率を算出するには試合経過データが必要なため、ファームの場合は表示されません。

4. 選手

チームメンバーの詳しい情報を、選手一人ずつ参照します。 メンバーは、監督・コーチ、投手、保守、内野手、外野手の5つの所属部門に分けられます。 画面左の選手一覧表で行を選択すると、選手のプロフィール、出場登録および個人成績が表示されます。 出場登録の欄には、一軍に登録された日付、あるいは登録が抹消された日付が表示されます。

選手名鑑・監督コーチ

監督・コーチについては、出場登録および個人成績は表示されません。 監督・コーチが選手を兼任する場合、別の背番号が与えられ、別の人物であるかのように登録されることがあります。

選手名鑑・選手

さらに個人成績の欄は、以下の8つの小画面に分けられています。

5. 分析

分析画面はさらにチーム成績、ファーム成績、守備位置の3つの画面に分かれています。 チーム成績(一軍)、およびファーム成績の画面上部には対戦成績をいくつかのパターンで集計した表があり、下部にはシーズン中の成績の推移を表すグラフがあります。 守備位置の画面では、各守備位置に就いた選手を集計します。

分析画面

6. diana

パフォーマンスチーム・ディアーナのメンバープロフィール、およびイベントスケジュールを表示します。

diana

7. 日記帳

試合の観戦日記を書き込むことを想定した機能で、ユーザー主体のデータを追加・参照します。 画面左に配置されたカレンダーで日付を決め、日記の文章を書き込むか、ローカルPCに保存されているイメージを追加します。 テキストやイメージのデータは、スクレイピングデータと同様に、本アプリケーションに内包されるデータベースに格納されます。 テキスト入力部では、フォントや文字サイズ、文字色などの簡単な編集が可能です。 イメージデータは、Bitmap、GIF、JPEG、PNGなどのファイル形式に対応しています。

日記画面

 

既知の不整合

選手名鑑の選手名と試合結果の選手名では、異なる漢字が使われています。 「﨑」と「崎」、「濵」と「濱」、「髙」と「高」など、同じ人物でも場所によって使われる文字が異なる場合があります。 さらに選手名はフルネームと省略名の表記があり、直接紐づけることが困難で、集計に失敗することが考えられます。

白丸印を表す文字は、3種類あります。 「◯」と「○」と「〇」は見た目が似ているためしばしば混同されがちですが、コンピュータが識別に用いる文字コードはそれぞれ異なるということに注意が必要です。 「ー」と「-」と「─」も同様に、よく間違えられる文字の組み合わせです。 入力ソースにこれらの文字が混入していると、データの集計に支障を来す恐れがあります。

一軍の(テーブルスコアページの)投手成績では、四球と死球が分かれていません。 BayStatsは内部的に与四死球を与四球と死球に分ける処理を行いますが、前出の事情により失敗する可能性があります。

打者成績の“結果”は種類が多く、BayStats内部で集約しています。 例えば見逃し三振と空振り三振は、どちらも三振としてカウントします。 この機能は過去のデータをもとに分類方法を決めており、今後未知の文言が出現した時に対応できない場合があります。