「DIY競馬プログラミング JRA-VAN Data Lab.編」活用教室(1-1) 更新
08-06-17


競馬プログラミング
詳しくは本の画面をクリックしてください。
吉田章太郎著、九天社刊、\3,360税込
吉田章太郎著、九天社刊、\4,725税込
競馬耳寄り情報局「競馬三昧」サイトへのリンク
 2004年末に出版された新JRA-VANデータの入門書「DIY競馬プログラミング JRA-VAN Data Lab.編」(右図上)を買った人、あるいはご存知の方も多いと思います。著者は、サイト競馬耳寄情り報局「競馬三昧」を運営されている吉田章太郎さんです。

(注意)「DIY競馬プログラミング」シリーズの出版元の九天社が平成20年6月10日をもって営業を停止(自己破産申請)したとのことです。今書店に残っている本がなくなれば新刊の入手ができなくなります。当サイトでの掲載はしばらく継続しますが、いずれ中止させていただくかもしれませんのでご了承ください。

 この本には、Data Lab.の基本的な解説をはじめ、Visual Basic 6/Excel VBA/Visual Basic.NETの開発環境で、データのダウンロードの仕方やデータの取り込み方法が詳しく解説されており、競馬ソフトを自作したい方には大きな助けになると思います。

 私も昨年末の出版後まもなく購入しました。本書(以下、本書をDIY2と呼びます)の付録のCD-ROMに内蔵されているサンプルプログラムは、JRA-VAN 自身が提供しているサンプルプログラムと若干異なっている点があるようですが、データをより直感的、効率的に扱えるように工夫されているように思います。またプロの手によるプログラムはすっきりしているので、参考にしたいと思い、当サイトでDIY2のプログラムを利用したい旨を吉田さんにお願いしたところ快くご承諾くださいました。

 この「活用教室」は、DIY2本に掲載されているプログラムを利用して、実際のデータがどのように処理されていくかということをもう少し目に見えるようにして、初心者に理解しやすくしようというものです。
(右図の下は、やはり吉田さんの前著書「DIY競プログラミング」です。こちらは旧仕様のJRA-VANデータ対応ですが、予想ソフトの作り方の参考として多くのヒントがある本です。)

この「活用教室」の対象読者は
(1)「DIY競馬プログラミング JRA-VAN Data Lab.編」(DIY2)を買ったが、実際の動作がよくわからない。
(2)DIY2を実際の予想ソフトにどう利用すればいいのか、よく判らない。
(3)あるいは、これからDIY2を買おうか迷っている。
という方々です。DIY2本のプログラムを使ってすぐに自分のプログラムに利用できる人には、この「活用教室」は必要ありません。

本をご購入希望の方:右の画像をクリックして九天社サイトの「詳細を見る」をクリックすると、Amazonのコーナーからご注文できます。
(注意:九天社の営業停止後、Amazonで新刊を購入できるか未確認です。)

(注意)この「活用教室」でDIY2のプログラムを引用させていただくことは、著者の吉田さんのご了解をいただいていますが、この「活用教室」での記述は、私が自己流に理解したことをベースに書いていますので、本サイトの内容に関するご質問は、当サイトの管理人(じゃば)の方にお願いします。(メールまたは掲示板「パドック」に書き込んでください)
できれば読者の皆さんのQ&Aや情報交換の場になればいいなと思います。
なお、当サイトの情報に基づいて作られたソフトにより、ユーザーさんが受ける不利益・損害については、責任をもちませんので、ご自分の判断でご利用ください。

なお「活用教室」で扱うのは、Excel VBAのみです。VB6/VB.NETについては扱いません(管理人の知識不足のため)が、DIY2を読まれた方なら理解できると思います。
ここで参考にした本書は初版発行(2005年1月15日付け)のものです。

Excelのバージョンについて
DIY2本で扱うExcelのバージョンは、Excel2003ですが、ここではExcel2000を使っています。このため、使う画面やワークシートのイメージが若干異なっているかもしれません。
(注意)Excel2000の場合、DIY2本のサンプルプログラムはオープンできないと思います。私の場合は、たまたまVisualBasic6を持っていたので、そのモジュールをExcel2000にコピーして使うことができました。
Excel2000は、他にもJVLinkとの相性があまりよくないので、この「活用教室」ではExcel2003のご使用をお勧めします。


私も遅ればせながらExcel2003にバージョンアップしました(2005-09-16)

開発環境について
パソコン:Dell - Celeron 2MHz/ メモリ 256MB/ 17インチ液晶ディスプレイ/ WindowsXP HE SP2
ネットワーク:CATV常時接続。スピードは忘れました。

1.取り上げるDIY2の各章について
DIY2では、いくつかの章にサンプルプログラムが付属していますが、ここでは下記の章のサンプルプログラムについて説明していく予定です。
サンプルプログラム 対象の章 扱うデータ種別 説明のポイント イメージ画面
Chap5 第5章 "RACE" JV-Dataのダウンロード方法 Chap5結果
Chap8 第6章〜第8章 "RACE","RCOV" 非蓄積系データの処理 Chap8結果
Chap9 第9章 "0BXX" 速報系データの処理 Chap9結果
chap10のデータベースに必要な蓄積系データの処理については取り上げません。
(やりたいときだけ競馬データを利用しするためのプログラムには、上記のデータだけでも十分と思います。)


2.「活用教室」の目標
(1)基礎編
DIY2の中では「馬吉」や「Target Frontier JV」の表示結果を例にしている箇所がありますが、活用教室でもDIY2の内容(上記のChap5,Chap8,Chap9)をトレースして、実際のデータでどのような動きをするのかをExcelのワークシートに展開して、見た目に分かるようにしていきます。
 DIY2のサンプルプログラムでは、実行結果がデバッグ・ウインドウやテキストボックスに表示されますが、結果が残らないためにプログラムでやっていることと実際の動きの関係が分かりにくい面があります。ワークシートに結果が残れば、プログラムコードを参照しながら、なるほどと思ったり、何故こうなるの?とかいう疑問が出てきて、それを考えることでプログラムの理解が深くなると思います。

(2)応用編
当サイトで公開中のデータマイニングを利用したソフト「NewLiteMining」をDIY2にならって変更しようと思います。(応用編のイメージ画面はこちら
DIY2のサンプルプログラムだけでは実際の予想ソフトへの展開が難しいと思われる人もいるかもしれません。ここではサンプルプログラムをベースにして変更しながら作り上げていこうと思います。
 いわば、(1)では、JV-Dataのダウンロード方法や個別のデータの理解に主眼を置き、(2)ではこれらのデータを総合的に扱うことを目標にします。これを発展させて「あなただけの予想ソフト」を作ることを”あなたの目標”にしてください。

以上が、今回の「活用教室」の目標です。
さて、果たして息が持つかどうか。。。途中で落馬したり、4コーナー手前でバッタリということもありえます。。。そんなときは、あなたの”愛のムチ”でゴールまで。。。


3.DIY2のプログラムと「活用教室」のプログラムの関係
この「活用教室」で作るプログラムは、ユーザーフォームや標準モジュールを追加して作りますが、基本的な変数やサブルーチンはDIY2のものを利用します。つまり、『DIY2のプログラム+「活用教室」のプログラム』の組合せで動作します。DIY2のサンプルプログラムに「活用教室」のプログラム(ユーザーフォームや標準モジュール)を追加して作り上げるというイメージです。

「活用教室」で作るプログラムは全て公開する予定ですが、それだけでは動きませんのでご注意ください。DIY2のプログラムの利用方法については適宜説明しますが、本の内容の詳細やプログラムを公開することはできません。

4.JRA-VANサンプルプログラムとDIY2プログラムの違い
 JRA-VANのソフト開発用サンプルプログラムとDIY2のサンプルプログラムはデータ構造体の定義が若干違います。といっても元のJRA-VANデータが変るわけではなく、同じデータに対して読み方が違うというものです。

 私が気づいた違いは、
(1)DIY2ではデータ構造体定義の”項目”(変数)の割り当てが変っている。
 元のJRA-VANサンプルプログラムでは、構造体の”項目”(変数)はすべてString型ですが、DIY2ではString型,Integer型,Long型,Date型などの変数が割り当てられています。これによるメリット・デメリットはよく判りませんが、変数が全てStringの場合は、計算をする場合にVal( )、Clng()などでいったん計算できる”数値”に変換する必要がありますが、IntegerやLongに変換されていれば、そのまま計算ができる点は便利です。

(2)DIY2では、データ構造体の区分けの仕方が変っている。
 例えばプログラムのヒント1で説明した「レース詳細」(JV_RA_RACE)の中で使う共通データ構造体<競走識別情報1>(RACE_ID)の定義が、DIY2では変わっています。一見、問題があるように見えますが、JRA-VANデータの読み方を変えるだけなので、元のJV-Dataには影響を与えることはないので、問題はありません。

 下図は、JV-Dataを使うとき、JRA-VANサンプルプログラムとDIY2プログラムがデータセット関数やデータ構造体で処理するイメージです。
元のJV-Data(ダウンロードしたデータ)は当然同じですが、異なる定義の関数や構造体を経るために得られた利用可能なデータは表示形式や変数の型が違います。例えば日付データはJRA-VANサンプルプログラムでは、YYYYMMDDのString型のままですが、DIY2ではYYYY/MM/DDのようなDate型に変換したり、レース番号や馬番データもJRA-VANプログラムでは"01"、"09"のようなString型ですが、DIY2では、1,9のように数値型になります。
 つまり、両者では利用できるデータの形式が変ります。この違いは”慣れ”が必要ですが、プログラムでの扱いを注意すれば問題はありません。


 下図は、よく使われる共通データ構造体の定義の比較例です。左がJRA-VANサンプルの例、右がDIY2プログラムの例です。どちらも対象とするデータはほぼ同じですが、区分けの仕方が違います。DIY2では、JRA-VANの<レコードヘッダ>と<競走識別情報1>とを併せていますが、さらに”データ発表日時”、”登録頭数”、”出走頭数”などの項目も含んでいます。データ型もString型、Date型、Long型とさまざまです。


(DIY2プログラム例のコメントで、「コース番号」というのは競馬場コードです。また「発売日時」は「データ発表日時」のこと、「登録頭数」のところに”ないデータもある”とありますが、むしろ上の「データ発表日時」のデータのことだと思います。)

(3)DIY2では、データのセットがされない変数がある。
 例えば、「レース詳細」には”曜日コード”の変数がありますが、DIY2にはこの項目にデータをセットする関数がない(と思われる)ため、データが取り出せません。プログラムで曜日を使うことは殆どないので実用上差し支えないですが、気になる場合は追加すればいいでしょう。

(4)JRA-VANプログラムとDIY2プログラムのデータ構造体及びデータセット関数の比較
 下表に元のJRA-VANサンプルプログラム及びDIY2プログラムで使われている「データ構造体」と「データセット関数名」を比較します。これらは各フォーマット名に対応して定義されています。
大きく異なるのはオッズデータの構造体で、JRA-VANプログラムでは、馬連・ワイド・馬単を別々に定義していますが、DIY2では共通化(同じ構造体を利用)しています。三連複・三連単オッズも同様です。

番号 フォーマット名 JRA-VANプログラム DIY2プログラム 備考
データ構造体名 データセット関数名 データ構造体名 データセット関数名
1 特別登録馬 JV_TK_TOKUUMA SetData_TK STRUCT_TOKUBETSU GetTokubetsuInfo  
2 レース詳細 JV_RA_RACE SetData_RA STRUCT_RACE GetRaceInfo  
3 馬毎レース情報 JV_SE_RACE_UMA SetData_SE STRUCT_SEISEKI GetSeisekiInfo  
4 払戻 JV_HR_PAY SetData_HR STRUCT_REPAYMENT GetRepaymentInfo  
5 票数1 JV_H1_HYOSU_
ZENKAKE
SetData_H1 STRUCT_HYOSUU GetHyousu1Info 三連単以外
6 票数6 JV_H6_HYOSU_
SANRENTAN
SetData_H6 STRUCT_HYOSUU6 GetHyousu6Info 三連単のみ
7 オッズ1 JV_O1_ODDS_
TANFUKUWAKU
SetData_O1 STRUCT_ODDS1 GetOdds1 単複枠連オッズ
8 オッズ2 JV_O2_ODDS_
UMAREN
SetData_O2 STRUCT_ODDS2 GetOdds2 馬連オッズ
9 オッズ3 JV_O3_ODDS_
WIDE
SetData_O3 STRUCT_ODDS2 GetOdds3 ワイドオッズ
10 オッズ4 JV_O4_ODDS_
UMATAN
SetData_O4 STRUCT_ODDS2 GetOdds4 馬単オッズ
11 オッズ5 JV_O5_ODDS_
SANREN
SetData_O5 STRUCT_ODDS3 GetOdds5 三連複オッズ
12 オッズ6 JV_O6_ODDS_
SANRENTAN
SetData_O6 STRUCT_ODDS3 GetOdds6 三連単オッズ
13 競走馬マスタ JV_UM_UMA SetData_UM STRUCT_HORSE GetHorseInfo  
14 騎手マスタ JV_KS_KISYU SetData_KS STRUCT_JOCKEY GetJockeyInfo   
15 調教師マスタ JV_CH_CHOKYOSI SetData_CH STRUCT_TRAINER GetTrainerInfo  
16 生産者マスタ JV_BR_BREEDER SetData_BR STRUCT_BREEDER GetBreederInfo  
17 馬主マスタ JV_BN_BANUSI SetData_BN STRUCT_OWNER GetOwnerInfo  
18 繁殖馬マスタ JV_HN_HANSYOKU SetData_HN STRUCT_PEDIGREE GetPedigreeInfo  
19 産駒マスタ JV_SK_SANKU SetData_SK STRUCT_SIRLINE GetSirlineInfo  
20 レコードマスタ JV_RC_RECORD SetData_RC STRUCT_RECORD GetRecordInfo  
21 坂路調教 JV_HC_HANRO SetData_HC STRUCT_HANRO GetHanroInfo  
22 馬体重 JV_WH_BATAIJYU SetData_WH STRUCT_WEIGHT GetWeightInfo  
23 天候馬場状態 JV_WE_WEATHER SetData_WE STRUCT_WEATHER GetWeatherInfo  
24 出走取消・競走除外 JV_AV_INFO SetData_AV STRUCT_SCRATCH GetScratchInfo  
25 騎手変更 JV_JC_INFO SetData_JC STRUCT_CHGJOCKEY GetChangeJockeyInfo  
26 発走時刻変更 JV_TC_INFO SetData_TC STRUCT_CHGTIME GetChangeTimeInfo  
27 コース変更 JV_CC_INFO SetData_CC STRUCT_CHGCOURSE GetChangeCourseInfo  
28 データマイニング予想 JV_DM_INFO SetData_DM STRUCT_DATAMINING GetDataMining  
29 開催スケジュール JV_YS_SCHEDULE SetData_YS STRUCT_SCHEDULE GetScheduleInfo  

このほかにDIY2プログラムではデータを切り出すための独自の関数がいくつか定義されていますが、説明を省略します。詳細はDIY2本を参照ください。


ホームへ 新タラレバ競馬倶楽部へ 
活用教室:Chap5 →(1-2)(1-3)
活用教室:Chap8 →(1-4)(1-5)(1-6)(1-7)(1-8)(1-9)(1-10)
活用教室:Chap9 →(1-11)(1-12)