DIYしよう! EXCELでDIY

Excelで競馬分析をしよう    
   Home > DIYしよう!> ExcelでDIY
お知らせ ソフトウェア 競馬研究 DIYしよう 出馬表 開催情報 BLOG リンク モバイル
 
 

■JRA-VANデータの読み込み方法 その1

 Excelは非常に便利な分析ツールですが、分析をするにしても元になるデータが必要になります。特に、競馬の場合、毎週データが更新される上、情報量も膨大でとても手で入力する気にはなれません。そこで、誰もが思いつくのは、JRA-VANのデータを取り込めないかと言うことです。しかし、どこから手をつければよいのか、見当もつかない人がほとんどでしょう。そこで、今回からJRA-VANデータを取り込むためのコツを数回に分けて紹介します。

注)この記事は、2003年1月の情報を元に、JRA-VAN第3期フォーマットの解説をしています。

■手順

 細かな方法論を説明する前に、大まかな概要について触れておきます。

  1. JRA-VANデータは仕様書によって定義されているテキストデータ
  2. C言語で読むことを前提としているため、バイト単位でのデータ構成
  3. VBでのバイト単位文字列処理方法
  4. 根性

 ExcelにJRA-VANデータを取り込むこと自体は簡単です。VBで処理される文字コード(Unicode)をきちんと理解していれば。あとは仕様書を見ながらめげずにコードを記述するという力作業になります。故に最も必要なのは、

4.根性

なのです。初めにお断りしておきますが、かなりの精神力を要求することだけは覚悟しておいてください(笑)。

■JRA-VANデータの仕様

 取り込むデータがどういう形式の物なのかを理解しなくては、始まりません。試しにお手持ちのJRA-VANデータを解凍してみてください。成績表を例に取ると次の2つのファイルが現れます。

JracDen1.dat
JracUmaj.dat

拡張子はDATですが、中身はテキストファイルなので、メモ帳や秀丸エディタ、EmEditorなどのエディタソフトで読み込めます。ただし、中身はただの数字の羅列で、何が書いてあるのかさっぱり分からないと思います。それはそうです。コンピュータで読みとることを前提に制定されているので、扱いやすく、データサイズをコンパクトにするためにJRA-VANで定めたコードに基づき表記されているからです。だから、JRA-VANデータを読むには、このコードが分からなければ何も出来ないでしょう。

 そこで、まずJRA-VANの仕様書をダウンロードする必要があります。

  ダウンロード JRA-VAN仕様書

■JRA-VANデータの種別

 仕様書にざっと目を通してもらえば分かりますが、JRA-VANデータには以下のデータが含まれています(大まかなデータ)。

  • 出馬表…………指定開催日のレースに出走する馬と枠順
  • 競走馬…………出走馬の近5走の成績
  • 成績……………指定開催日のレースの成績と払い戻し
  • 票数……………指定開催日のレースの票数

他にも特別登録や時系列オッズ、騎手、調教師データがありますが、競馬新聞を作成する場合上記データを押さえておけば取りあえず作れる様になります。

■出馬表を読み込んでみよう

 先程述べたとおり、JRA-VANデータはテキストファイルです。これを読み込んで、分解して意味のあるデータに分類すれば完了です。VBAで外部ファイルを読み込む場合、OPENステートメントとINPUTステートメントを利用します。

List1.JRA-VAN出馬表読み込み

Private Sub LoadDenma()
Dim FN As Integer,szBuf As String

FN=FreeFile 'ファイル番号取得
Open "JracDen1.dat" for Input As #FN '出馬表読み込み
 Do While (Not Eof(FN)) 'ファイルの終端まで読み込み Input #FN,szBuf '1行読み込む Loop
Close #FN 'ファイルを閉じる End Sub

と記述すれば、解凍された出馬表ファイル(JracDen1.dat)を開き、最初の1行だけ取得して終了します。1行ずつステップ実行してみれば、動作が分かるでしょう。
 この場合、szBuf変数に1R分の出馬表データが取り込まれます。あとは、szBufに取り込まれたデータから必要な情報を取り出せば完了です。
 文字列szBufの中から必要な情報だけを切り出すには、Mid$()関数を利用します。Mid$関数は指定した文字列のn文字目からm文字目までを取り出すことの出来る関数です。詳しくはExcelのヘルプで調べてみて下さい。

 では、先ほどのサンプルプログラムに読み込んだデータから日付と開催場を読みとる処理を追加してみましょう。

List2.JRA-VAN出馬表読み込み(開催日の取得)

Private Sub LoadDenma()
Dim FN As Integer,szBuf As String,szTxt as String FN=FreeFile 'ファイル番号取得 Open "JracDen1.dat" for Input As #FN '出馬表読み込み
Do While (Not Eof(FN)) 'ファイルの終端まで読み込み Input #FN,szBuf szTxt=Mid$(szBuf,1,4)+"/"+Mid$(szBuf,5,2)+"/"+Mid$(szBuf,7,2) szTxt=szTxt+" Cor="+Mid$(szBuf,9,2) szTxt=szTxt+" RaceNo="+Mid$(szBuf,15,2)
MsgBox szTxt '結果を表示 Loop
Close #FN 'ファイルを閉じる End Sub

 要は仕様書とにらめっこして、必要なデータがかかれている桁数と文字数を指定すればいいのです。でも、ここで1つ問題があります。レース名や馬名など、全角で書かれた文字を読み込むと、以後の文字列がずれてしまうのです。JRA-VANデータを処理するコツは、この桁ずれをどう処理するかにかかっています。

【ファイルを読み込むときの注意点】

OPENステートメントを使えば、自由にファイルを開いて編集や読み込みが出来る様になります。でも、いくつかルールがあるので、それを守りましょう。

  • ファイルを開くにはファイル番号が必要
  • ファイル番号は重複してはならない
  • 開いているファイル番号を取得するには、FreeFileステートメントを利用する
  • ファイルを開いたら、必ず最後に閉じることを忘れない。
  • ファイルを閉じるにはCloseステートメントを利用する
  • ファイルの終端まで読み込みたい場合は、EOF()関数を利用する。

次回は全角文字の含まれたデータを難なく読みとるテクニックを紹介します。

 
 

HomeMenuBackNext