じゃばのひまつぶし:ExcelVBAによる競馬ソフト自作教室とJRA-VAN登録ソフト(おずたんシリーズ)のサポートサイトです。
JRA-VAN Data Lab対応 競馬ソフト自作教室

<New JVData Explorer> 自作の目標とJVーData仕様
 
第1回(2)

更新日
2012-01-14


新タラレバ競馬倶楽部:「New JVData Explorer」自作教室の目標
次のようなことを理解するプログラム作りを目標にします。

1.JRA-VAN Data Labデータ(JV-Data)について理解する。

 JV-Dataには、数年間分のデータを利用するデータベース用の"蓄積系データ"と、土日の開催週分のみの"非蓄積系データ"と、開催日当日に提供される"速報系データ"がありますが、本自作教室では、基本的には非蓄積系データと速報系データを扱い、JV-Dataの構造やJV-Data仕様書を理解することを目標にします。つまり、土日に簡単に利用できるものを作るのが目標です。
(JV-Dataの仕様書では”非蓄積系”データは独立したデータではなく、”蓄積系”データの中の一部ですが、自作教室で作るプログラムは非蓄積系のため、便宜上”非蓄積系”を独立した分類のように見なしています)


2.JV-Dataダウンロードプログラム「New JVData Explorer」を作る。

 Excelを使ってJV-Dataを取得して、データ種別ごとにワークシートに展開するプログラムを作り、一連の動きを理解します。
JV-Dataの各データの中身を見るプログラムのため名称をNew JVData Explorerとしました。

 JV-Dataの扱いに必要なJV-Linkモジュールの設定方法についても説明します。
本自作教室でのJV-Linkモジュールの設定方法はJRA-VAN提供のサンプルプログラムの中で説明されているものとは異なります(自作教室のほうが簡便で使いやすいと思います)。


(注意)本自作教室では原点に帰ってより基礎的なJV-Dataの処理方法について理解を深めることを目標にしますので、予想ソフトの段階までは作りません。もうJV-Dataの取得方法や解析方法をご存知の方にはこの教室は不要と思います。
実際に作るプログラムの完成した画面イメージは下図のようなものです(部分)。実際には内容が変わる場合もあります。
(1)「トップ」シート画面

「New JVData Explorer」の基本画面です。2つの部分に分けて説明します。

[最新開催週のデータの取得]

@「データ取得ボタン」エリアの各ボタンにより各種のJV-Dataをダウンロードします。
(注意:「速報系データ取得」の場合のみ、開催日付を選択する必要があります)

A各データ種類により基本データエリアに開催日や開催場所情報、データ取得状況などを表示します。
[RCOV]系データは黄色の項目の上部に、[RACE]系データは緑色の項目の上部に、速報系の[0BXX]データは水色の項目の上部に表示します。

Bファイル名展開エリアに取得したJV-Dataのファイル名を表示します(各データに応じた項目ゾーン)。このエリアに表示されたファイル名をダブルクリックするとファイル種別に応じた別のシートに内容の詳細を表示します。

[過去のデータの表示]  実際の画面では上図の右横に並ぶ


@「取得済みのフォルダ名展開エリア」にすでに取得した過去の開催週のフォルダが開催週の日付別に表示されるので、見たい開催週の部分をダブルクリックすると、[RCOV]基本データエリアのコンボボックスにその週の日付がセットされます。

Aデータ取得ボタンエリアの「過去データ表示」ボタンをクリックすると、最新開催週のデータの場合と同じように各データの項目別にファイル名が表示されます。

B表示されたファイル名をダブルクリックするとファイル種別に応じた別のシートに内容の詳細を表示します。
(注意:「速報系データ取得」ボタンのみ、開催日付を選択してクリックすると過去(1年以内)の速報系データが取得できる場合があります。その他のデータ取得ボタンは最新開催週データの取得が優先となります)


上図のファイル名展開エリアのファイル名のセル欄をダブルクリックすると下図のようにファイル種別(ID)に対応した各ワークシートにJV-Dataの内容を展開します。

(2)非蓄積系データ"RACE"の中の”レース詳細”(RA)の例

”レース詳細”データは、いわば”出馬表”のようなデータで、レースに関する情報が含まれています。
ここではJV-Data仕様書に従って各データ項目をワークシートのセルに展開表示します。
JV-Data自身はこれらの項目が固定長レコード形式で連続して構成されているので、そのままでは個別項目がみにくい状態になっています。その項目を各セルに分配するのがこのシートです。すべての項目を表示するわけではありません。
またJV-Dataの項目のコード自体を表示するので例えば開催場所もコードで表示します。コード("01")を”札幌”のように意味のある日本語表示に変換するには別途変換プログラムが必要になります。この変換プログラムについても作っていきます。



(3)同じく非蓄積系データ"RACE"の中の”馬毎レース情報”(SE)の例
”馬毎レース情報”は、上記の”レース詳細”データとセットになるもので、各レースに出走する”競走馬”に関する情報が含まれています。下図はこの各レースに登録された競走馬データを展開したものです。


このような形式でトップシートに表示されたファイル名の内容を各ワークシートに表示します。
全部でワークシートは約30枚くらいになります。
準備編
1.JRA-VAN Data Labデータ(JV-Data)について

(1)JRA競馬用のソフトを自作するためには、JV-Dataの利用が基本です。まずはJV-Dataの構造やダウンロード・解析方法を理解する必要があります。
競馬ソフトを作るためにJRA-VAN Data Labでは下記のサイトで“支援”のための仕様書やサンプルプログラムを含む「ソフトウエア開発キット(SDK)」を提供していますので、まずこれを取得しておきましょう。

(2)JV-Dataはソフト自身がJRA-VAN のサーバーにアクセスしてデータをダウンロードします。このためにJV-Linkというインタフェースモジュールを使用します。

(3)ソフトを自作する人も、市販ソフトを利用する人も、JV-Dataの利用は有料(月額単位)です。あらかじめ購入契約をして、上記のJV-Linkモジュールを設定するための“利用キー(サービスキーともいう)”を取得しておいてください。(すでに他のJV-Data対応のソフトをお使いの方は改めて取得の必要はありません)
(注)”利用キー”は2つ取得でき、パソコン1台に1つの利用キーが必要です。同じパソコン上であれば違う種類の競馬ソフトがあっても利用キーは1つで済みます。ただし、パソコンを買い替えたりすると利用キーを再取得する必要があります。

JRA-VAN Data Lab.ソフト開発コーナー
http://jra-van.jp/dlb/sdv/index.html
番号 ソフト開発コーナー 説明
1 JRA-VAN SDK提供コーナー 次のものが含まれます。
@JV-Linkインタフェース仕様書
AJV-Data構造体
BJRA-VAN Data Lab.開発ガイド
2 プログラミングパーツ・開発支援ツール提供コーナー VBAサンプルプログラムがあります。実用的なサンプルではありませんが、手がかりにはなります。
3 競馬ソフト開発体験教室 SDKの取得方法からExcelで開発環境を整える例が記載されています。VB.netが主です。
4 開発サポート掲示板コーナー
JV-Data掲示板
JV-Link質問箱

プログラミング質問広場
JV-DataやJV-Linkの使い方についてのQ&Aコーナー。私も時々覗いています。

もちろん、VB.netなどのサンプルも提供されていますが、Excel以外は省略します。

(4)JV-Dataの構造や基本的なことは上表のJV-Data構造体やJRA-VAN Data Lab.開発ガイド、JV-Linkインタフェース仕様書などに記載されています。

2.JV-Linkインタフェース仕様書

2004年4月以降のJV-Dataは旧仕様と大幅に変わりましたが、リレーショナル・データベース(RDB)に適した形でのデータにするための変更と思われます。RDBではデータの保存の効率化のためにデータをいくつかのテーブルに区別して保存し、そのテーブル同士の項目には極力重複した内容がないように設計されます。

JV-Dataの攻略というか、利用するには、まず”敵を知る”ことが肝心です。JV-Dataがどのような構成になっているかを知らなくてはなりません。ここでは「仕様書」を理解しましょう。
あらかじめ上表のJRA-VAN Data Labソフト開発コーナーから「JV-Linkインタフェース仕様書」を入手してプリントして手元においておいてください。仕様書にはPDF版とExcel版がありますが、どちらも内容は同じです。ここではPDF版(Ver.2.1.4)に基づいて進めます。
(注:このバージョンは本自作教室を作成した2006年当時のものなので、現バージョンとは異なりますが、問題はありません)

仕様書はかなり量の多いものですが、大半は”データフォーマット”の説明です。
競馬用プログラムを作る場合、実際に使うイメージで考えると、手順としては、
@まず金(土)曜日には競馬新聞のように、各レースの”出馬表”や”競走馬”のデータがほしいですよね。
Aそしてレース当日(土日)には、オッズ、馬体重などのデータもほしいですね。
Bさらにレースが終わったら払戻や着順、走破タイムなどのデータがほしいですね。

JV-Dataにはいろいろなデータが組み合わされて、必要なタイミングにあわせて提供されます。
JV-Dataを使う我々としては、実際に使う場面を想定して、必要なデータをちょうどいいタイミングで取得しなければなりません。
まずは、どういうデータを使うのか、そしてそのデータはどういう組み合わせで、どういうタイミングで取得できるのかを理解しましょう。

JV-Dataの仕組みを理解する際に分かりにくいと感じるのは、
@データ種類が”蓄積系”とか”非蓄積系”とか、”速報系”とか,、”セットアップ系”とか利用目的に合わせたデータが混在していること。
A上記の分類の中で、データ種別やレコード種別などが同じ名称で使われていること。
Bいろいろなデータが提供されるタイミングが週単位、開催日単位、レース単位などで行われること。
などが複雑な仕組みに見えるためと思います。
自分が作るソフトでは、どういうデータをどういうタイミングで取得すればいいのかを考える必要があります。

(1)データ種別
まず、JV-Dataの全体像を掴むために仕様書の5項目目の”データ種別一覧”を見ましょう。仕様書の後ろの方に記述があります。
JV-Dataには3つの”データ種別”があります。”蓄積系データ”、”速報系データ”、”セットアップデータ”の3つです。
”セットアップデータ”は、初期データベースを作るための過去の膨大なデータです。”蓄積系データ”というのは、そのデータベースに新しいデータを毎週追加(蓄積)していくための意味だと思いますが、自作教室ではこの”蓄積系データ”の一部を使います。
”速報系データ”は開催日のレース情報を得るためのもので、自作教室で使うメインのデータの一種です。本自作教室では、”セットアップデータ”は使いません。

下表は、”蓄積系データ”の分類の表です。
”蓄積系データ”は、主にデータベースなどにデータを蓄積して利用しますが、ここで作る競馬ソフトは”必要な土日に使う”というその場限りの使い方をメインにしますので、利用するデータはこの表では赤枠部分の”レース情報”(RACE)と非蓄積系ソフト用の”レース情報補てん”(RCOV)です。

”蓄積系”の中に”非蓄積系ソフト用”という言葉があるのが紛らわしいですが、毎週データをデータベースに蓄積して使うソフトもあれば、”毎週は使わないが、気が向いたときに競馬をやる”ときに使うソフトもあります。後者のソフトが”非蓄積系ソフト”ですが、そういうソフトでも騎手成績や競走馬の過去のデータがほしい場合があります。そういうソフト用に使えるデータが”非蓄積系データ”と考えます。

表の”フォーマットNo”というのは仕様書の中で項目番号で示されているデータ(レコード種別)の書式です。詳細は後述します。

下表で”レース情報”(RACE)というのはデータ種別で、その中にレコード種別として”レース詳細”(RA)や”馬毎レース情報”(SE)や
”払戻”(HR)とか”オッズ1(単複枠))”(O1)などのデータが含まれています。
一方、”補てん情報”(RCOV)の中にも”レース詳細”(RA)や”馬毎レース情報”(SE)などがあります。同じレコード種別でフォーマットNoが同じものはデータ構造が同じですが、含まれるデータの内容が取得タイミングにより”RACE”と”RCOV”では異なります。
簡単に言えば”RACE”は今週分、”RCOV”は過去のデータです(”RCOV”には今週の”RACE”データに出てくる騎手や馬の過去の成績が含まれていると考えればいいでしょう)。”今週分”も翌週になれば”過去”のデータになり、過去データが蓄積されていくので、データフォーマットは同じの方が好都合です。



一方、下表は”速報系データ”で主にレース当日に取得します。速報系データの種別は”0BXX”は”ゼロビー”で始まります。
ここで扱うのは赤枠部分のデータです。速報オッズは単複枠、馬連、ワイドなどが各々独立したものと、各オッズデータすべてが統合されたものが提供されますが、ここでは統合された全賭式オッズ(0B30)を主に扱います。

蓄積系と速報系で”データ種別ID”が異なっても、”レコード種別ID”が同じものは同じデータフォーマットです。
つまり、”RACE”の中の”RA”も、速報レース情報の”0B12”の中の”RA”も、”RCOV”の”RA”も1レース分のデータは同じフォーマットです。データ種別によりデータ区分(後述)やレコード数(内容)が異なるだけです。言い方を変えれば、データ区分により、同じ”RA”フォーマットのデータでも提供されるデータ種別が変わります。
たとえば”RA”データの場合、木曜から月曜にかけて次のように提供されるデータ種別が変わります。
データ種別”RACE”の”RA”―木曜にはデータ区分”1”、金曜にはデータ区分”2”で提供。
データ種別”0B12”の”RA”―土曜(日曜)のレース結果確定状況により、データ区分”4”〜”6”で提供。
データ種別”RACE”の”RA”―月曜日にデータ区分”7”の確定版として提供。(この確定版が、次回に出走する場合に、補てん情報の”RCOV”の中の”RA”として提供されます。この時点で今週分の土日の”RACE”は過去のデータとなり、次回に”RCOV”として提供されると考えればいいでしょう。)



ここで扱うJV-Dataは”データ種別”では9種類、”レコード種別”では24種類のデータです。
(2)データ取得タイミングと取得単位

下表は蓄積系データがJRA-VAN Data Labから提供されるタイミングとそのデータ単位です。
我々から見れば提供=取得になります。
例えば”レース詳細(RACE)”は木曜日の午後から取得できますが、よく使うのは午後8時頃に提供されるデータです。
これには枠番・馬番の情報がないですが、登録馬の情報が分かります。
実際に有効なのは金(土)曜日に提供される枠番・馬番データのあるデータでしょう。
街で売っている競馬新聞も基本的にはこの情報を使っています(我々よりも時間が早いだけ)。

”RACE”情報が次に提供されるのは、月曜の確定成績情報です。
”RACE”データの取得単位は”開催日単位”、つまり土曜・日曜に開催される全場所1日分単位になります。(日曜分は前日発売レースを除き、通常土曜日の12時頃に取得できます。)
”レース情報補てん(RCOV)”データは通常木曜日の午後8時頃に取得できます。このデータには土日に出走する競走馬の過去の全成績や調教師・騎手・馬主などの全成績が含まれ、マスタデータといいます。
”RCOV”データの取得単位は”週単位”、つまり土日分を一括して取得します。


速報系データが提供されるタイミングと単位は下表の通りです。
”速報レース情報(0B12)”(ゼロ・ビー・12)は開催日当日のレース確定後に払戻・着順情報が提供されますが、最初は3着まで、ついで5着まで、最後は全馬着順までと何段階かに分けて提供されます。単位は”開催日単位”ですが、当然ながらレースが終わっていないものは取得できず、レースが進むにつれて取得できるデータが増加します。

同様に”馬体重情報(0B11)”も”開催日単位”で提供されますが、レースの1時間前に発表になるので、これもレースが進むにつれて取得できるデータが増加します。

”速報開催変更情報(0B14)”は、取消・除外、騎手変更など変更情報なので、変更がなければデータはありませんし、タイミングも不定です。天候・馬場状態は随時発表されます。この単位も”開催日単位”です。

”速報データマイニング(0B13)”は、前日に全レース分が発表されますが、馬場状態や馬体重に応じて変更がある場合はレース直前まで随時発表されます。取得は”開催日単位”(最新仕様ではレース単位)です。

速報総合オッズ(0B30)”は通常土曜の朝から随時発表されます(日曜分は土曜の夜から発表される場合もある)が、取得単位は”レース毎”です。つまり開催日・場所名・レース番号を特定して取得する必要があります。(同じ速報系でもオッズと他の情報は取得単位が違います)

時系列オッズ(0B41・0B42)”も同様ですが、こちらは発表開始時から取得時点の最新データまでが累積して発表されます。これも取得単位は”レース毎”です。



つぎは各データのデータフォーマットについて調べます。前述の”データ種別ID”と”取得タイミング(データ区分)”に密接に関係しています。

(1)「レース詳細」(RA)のデータフォーマット
 まずは一番よく使う下図の「レース詳細」のデータフォーマットについて調べます。「レース詳細」はいわゆる”出馬表”で開催レースの基本情報を含みます。
必要のない項目はスペースやゼロが入っていますが、新馬戦もG1レースもすべて同じフォーマットでデータが提供されます。
1レース分のデータサイズ(レコード長)は1272バイト固定で、三場所で全36レースの場合のデータサイズは1272*36=45,792バイトになります。



前述のようにデータ区分により、提供されるデータ項目が変わります。
表で項目1は”レコード種別ID”で「レース詳細」データの種類を特定する記号”RA”が設定されます。
この”RA”は内容が何段階かの区分があり、それを識別するのが項目2の”データ区分”で表の右端の欄の○印のものが提供されます。
例えばデータ区分”1”は木曜日に提供されるデータですが馬番など一部のデータは提供されません(○のない個所)。
天候・馬場状態データはデータ区分の”3”(速報成績)以降でしか提供されません。
またレース結果のラップタイムや各馬のコーナー通過順位などはデータ区分”6”以降に提供されます。

前述のデータ種別IDに基づいて考えると、
@金曜(土曜)の”レース詳細”(RA)データは蓄積系の”RACE”として区分”1”もしくは”2”で取得し、
A土曜(日曜)の開催日当日のレース結果は速報系の”0B12”として区分”3”〜”6”で取得し、
B月曜に確定データがほしい場合は、再度”RACE”として区分”7”で取得する
という具合になります。(区分の”6”と”7”は基本的には同じ内容です)

「レース詳細」(RA)のフォーマットの見方
”RA”データは1レース分のデータサイズは1272バイト固定で、基本的には連続した文字列データです。
表の「位置」が該当する項目の開始位置で、データの先頭からのバイト位置です。「バイト」というのは、その項目のデータサイズです。「繰返」は同じような項目がある場合の繰返し回数です。
たとえば”RA”の場合、項目「レコード種別ID」は先頭(1バイト目)から2バイトのサイズで、項目「データ区分」は先頭から3バイト目(レコード種別IDの2バイトの後だから)から1バイト、「データ作成年月日」項目は、4バイト目からサイズ8バイト、というように順次連続しています。したがって取り出したい項目の開始位置とデータサイズが分かれば文字列から任意の項目を得ることができます。
実際には項目ごとに位置を探すのは面倒なので、JRA-VANからはフォーマットに沿って任意の項目を抽出できる便利なデータセット関数がサンプルプログラムの中に提供されています。自作教室でもそれらを利用していきます。
(2)「馬毎レース情報」(SE)のデータフォーマット

いわゆる”競走馬”データで”レース詳細(RA)”と一対になって提供されます。使う場合もほとんど対で使います。
内容は土日のレースに関するもので過去のレースに関する情報はありません。
新馬もG1馬も同じフォーマットで作られます。レコード長は1頭あたり555バイトです。1日三場所で全36レースにすべて18頭フルゲートで出走した場合のデータサイズは最大で555*36R*18=359,640バイトになります。ここまでいくことは通常ありません。



このSEには”データマイニング予想値”が含まれますが、注意すべきはデータ区分”7”でしか、つまり月曜の確定成績データでしか提供されないということです。レース前のデータマイニング値は、前述の速報系の(0B13)で提供されます。これが紛らわしいところです。
(3)「払戻」(HR)のデータフォーマット
この払戻データは当然ながらレース前の区分のものはなく、”1”(速報)、”2”(確定)の2つの区分しかありません。
提供されるのは、速報系では”RA”、”SE”と同じ(0B12)の中で、蓄積系では確定の”RACE”で提供されます。
以上が基本的なデータのフォーマットの説明です。
重要なことは、JV-Dataが同じようなフォーマットを使って、いろいろなデータ種別で提供され、その提供単位やタイミングもさまざまということです。ダウンロードする場合は、そのデータに応じたJV-Link処理をする必要があります。
次回以降で、早速プログラムを作りながら理解していきます。

競馬プログラムに必要なデータの取得タイミングについて
@競馬場ごとのレースや競争条件、登録競走馬情報を解析するには、土日の朝にレース詳細の”RACE”データのうちの”RA”(出馬表)や”SE”(競走馬)データが必要です。”RACE”にはレース結果や票数、オッズデータもありますが、開催日には取得できません。通常確定後の月曜日に取得できます。

A開催日当日の着順や配当などのレース結果を照合するためには、速報系データの”0BXX”の中のデータをレース確定ごとに取得します。馬体重であれば”0B11”、マイニングデータなら”0B13”、総合オッズなら”0B30”(時系列オッズオッズなら”0B41”や”0B42”)、レース結果なら”0B12”の”RA”、”SE”、”HR”などを取得します。

Bもし、騎手成績や競走馬の過去の成績を調べるソフトなら”RCOV”データを取得します。これらは木曜・金曜に取得できます。


えっ!もう面倒になった?まだ何もしてませんよ。面倒になるのはこれからです。
自作ソフトのためにがんばってください。ムリにはお勧めしませんが・・・


ページトップへ
 Copyright(C):Jaba 2000-2016