TARGET外部指数の取り込み設定方法
外部指数を利用することで競馬データ分析の可能性が大きく広がる
競馬データの分析ソフトであるTARGETには、標準で様々なファクターの検索機能が設けられています。
一方で、他の有料サービス等が提供する調教情報や指数の情報などは当然ながら標準では搭載されていないため、その情報が回収率に与える影響を調査することは非常に困難となります。
そのような外部データをTARGETに取り込み、分析を可能にするのが「外部指数」の機能です。
しかし、外部指数の取り込みを初めて行う方には、どのように設定すればいいのかなかなかわかりにくいものとなっています。
このページでは、なかなか外部指数の取り込み設定がうまくできない方向けに、外部指数の設定項目の解説および実際の取り込み設定方法について解説します。
外部指数の設定画面の説明
まずは外部指数の取り込みを行うための設定画面を開きましょう。
メニュー画面の中の「環境設定」をクリックします。
「◆その他」の中にある「外部指数の設定」をクリックします。
ウィンドウ右側に外部指数の設定画面が表示されるので、「新規追加」のボタンをクリックします。
外部指数ファイルの定義画面が表示されます。この画面で名称の入力や形式を選択し外部指数取り込みの設定を行っていきます。
まずはそれぞれの設定項目について簡単に解説します。
作成する外部指数の名称です。ぱっと見でわかりやすい名称にしましょう。
読み込む外部指数ファイルデータのパスを入力します。詳細な設定方法は後程説明します。
レース単位または馬単位の2種類があり、さらにそれぞれCSV形式または固定長に分類されます。このサイトではCSV形式を採用する想定で説明しています。
レース単位の場合は、1行にそのレースに出走する全頭分の指数データを記載します。馬単位の場合は、1行につき1頭分のデータを記載します。レース単位と馬単位の詳細は次章で説明します。
読み込む外部指数ファイルデータの中身が指数のみなのか、指数+順位のデータなのかを選択します。
指数のみを選択しても、事項の指数順位判定ルールに基づいて、TARGETが自動で順位判定をしてくれるため、基本的には「指数」を選択しておけば問題ありません。
TARGETが指数の値を基に順位を判定する際のルールを指定します。
例えば、指数の中身が着順のデータであれば、1着を指数順位1位としたいので、「小さいほうが優位」を選択します。
馬体重など、一概にどちらが優位と言えない指数については、どれを選択しても構いません。
読み込む外部指数ファイルで使用するレースIDの形式を指定します。
基本的には一般的に使用されている「新仕様(16/18桁)」が推奨です。
読み込む外部指数の形式により選択します。
通常は「整数(0~999999)ですが、小数点以下の数値があるか、マイナスの値がある場合などはそれぞれに応じた項目を選択してください。
レース単位と馬単位の特徴
外部指数の「レース単位」と「馬単位」について、もう少し掘り下げて説明します。
それぞれ、Excel画面イメージを基に説明します。
レース単位
レース単位の外部指数ファイルでは、1レース分を1行で記載します。
画像の通り、A列には16桁のレースID(馬番なし)を入力し、B列からS列までに、それぞれ馬番1番から18番までの馬に該当する指数の値を入力します。
1レース=1行のため、例えば東京・阪神の2場開催の場合、1日分のデータは24行となります。
- メリット:行数が少ないため、外部指数の読み込みにかかる時間が短い
- デメリット:1行に複数頭のデータを記載するため、関数等を駆使する必要があり、ファイル作成の難易度が高い
馬単位
馬単位の外部指数ファイルでは、各出走馬を1行ごとに記載します。
A列には18桁のレースID(馬番あり)を入力し、B列にはその馬の指数の値を入力します。
1頭=1行のため、1日分のデータであっても数百行となります。
- メリット:1頭=1行とシンプルな構成であるため、ファイル作成が容易
- デメリット:行数が多いため、外部指数の読み込みにかかる時間が長い
推奨の指数形式は「馬単位」
レース単位と馬単位の特徴及びメリット・デメリットについて説明しました。その上でどちらの形式を採用するのがよいでしょうか。
結論としては、馬単位を推奨します。
確かに馬単位で外部指数ファイルを作成した場合、データ読み込みにかかる時間は非常に長くかかります。
読み込むデータ量とPCの性能にもよりますが、数年分のデータを読み込む場合は1分以上かかるでしょう。
頻繁に外部指数の読み込みを行う場合、この所要時間は非常にストレスになります。
しかし、馬単位のデータであっても読み込みを高速化する方法があります。それが、外部指数ファイルを日にち単位で分割する方法です。
日にち単位で外部指数ファイルを作成する方法
数年分のデータを1ファイルでまとめた場合、行数が数万行となるため、TARGETがその膨大な行数の中から特定の馬の指数データを読み込むのに時間がかかります。
しかし、データを1日単位で分割することで、1ファイル当たりのデータは数百行になるため、長期間のデータであっても高速に読み込むことができるようになります。
例えば、3年分のデータであれば、3秒程度で読み込みが可能です。
もちろんレース単位で作成したうえで日にち単位で分割することでさらなる短縮が可能ですが、3秒を1~2秒にすることができたとしても大きなメリットはありません。
それよりも、1行=1頭というシンプルなファイル構成であることの方がメリットは大きいと言えます。
外部指数ファイルを日にち単位で作成し読み込むにあたっては、以下の2つの課題が生じます。
- どのように日にちごとのファイルを作成するか
- 複数存在するファイルをTARGETにどのように読み込ませればよいか
どのように日にちごとのファイルを作成するか
複数年分のデータから日にちの区切りを探し、コピー&ペーストで新たなファイルとして保存し作成していくことは現実的ではありません。
そのため、自動的に大量のデータを日にち単位で分割する必要があります。
プログラミングができる方であれば、ファイル分割のプログラムを組むことは簡単かもしれません。しかし、そのような知識がない方が大多数だと思います。
その場合は、ExcelのVBA(マクロ)機能で分割処理を行いましょう。
「そうはいっても、マクロなんてわからない・・・」という方も多いと思います。ですので、ファイル分割用マクロを記載いたします。
Sub SplitWorkbookByDateAndSaveAsCSV()
Dim ws As Worksheet
Dim lastRow As Long, i As Long, startRow As Long
Dim currentDate As String, previousDate As String
Dim newWorkbook As Workbook
Dim savePath As String
' 現在のワークシートを設定
Set ws = ThisWorkbook.Sheets(1)
' 最後の行を見つける
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
' 初期化
startRow = 2
previousDate = Left(ws.Cells(2, 1).Value, 8)
' データをループして処理
For i = 3 To lastRow + 1
If i <= lastRow Then
currentDate = Left(ws.Cells(i, 1).Value, 8)
End If
' 日付が変わった、または最後の行に到達した場合に保存
If previousDate <> currentDate Or i = lastRow + 1 Then
' 新しいワークブックを作成
Set newWorkbook = Workbooks.Add
ws.Rows(startRow & ":" & i - 1).Copy Destination:=newWorkbook.Sheets(1).Rows(1)
' ファイル名を設定
savePath = ThisWorkbook.Path & "\" & Left(ThisWorkbook.Name, InStrRev(ThisWorkbook.Name, ".") - 1) & "_" & previousDate & ".csv"
' CSV UTF-8形式で保存
newWorkbook.SaveAs Filename:=savePath, FileFormat:=xlCSVUTF8
newWorkbook.Close SaveChanges:=False
' 次のグループのために初期化
startRow = i
previousDate = currentDate
End If
Next i
MsgBox "分割が完了しました。", vbInformation
End Sub
※本マクロの使用は自己責任でお願いいたします。本マクロを実行した結果、いかなる損害が発生したとしても、一切の保証をいたしかねます。
- VBAの詳細説明
-
このVBAコードはExcelのワークブック内のデータを特定の基準に基づいて分割し、それらを個別のCSVファイルとして保存するためのマクロです。以下は各部分の詳細な説明です:
- 変数の宣言:
ws
: 現在のワークシートを参照するための変数。lastRow
: データが含まれている最後の行の番号。i
,startRow
: ループで使用されるカウンター変数。currentDate
,previousDate
: データの日付を格納するための変数。newWorkbook
: 新しいワークブックを参照するための変数。savePath
: 保存するファイルのパス。
- ワークシートの設定:
ThisWorkbook.Sheets(1)
: 現在のワークブックの最初のシートをws
に設定。
- 最後の行を見つける:
ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
: 列Aで最後の使用されているセルの行番号を検索。
- 変数の初期化:
startRow
: 処理を開始する行番号を2に設定(ヘッダーを除外)。previousDate
: 最初のデータ行から日付を取得し、初期化。
- データのループ処理:
For i = 3 To lastRow + 1
: 3行目から最後の行までループ。currentDate
: 現在の行の日付を取得。- 日付が変わるか最後の行に到達した時、以下の処理を実行:
- 新しいワークブックの作成:
Workbooks.Add
で新しいワークブックを作成。 - データのコピー: 指定された範囲の行を新しいワークブックにコピー。
- ファイル名の設定: 保存するファイルのパスと名前を設定。
- CSVファイルとして保存:
SaveAs
メソッドでCSV UTF-8形式で保存。 - ワークブックを閉じる:
Close
メソッドで新しいワークブックを閉じる。 - 変数の更新:
startRow
とpreviousDate
を次のデータグループのために更新。
- 新しいワークブックの作成:
- 完了メッセージの表示:
MsgBox
: 処理が完了したことをユーザーに知らせるメッセージボックスを表示。
このマクロは、日付ごとにデータをグループ化し、それぞれの日付のデータを個別のCSVファイルとして保存することを目的としています。
作成されたCSVファイルは、このVBAマクロが実行されるワークブックが保存されているフォルダに格納されます。
各CSVファイルは
「[ワークブックが保存されているフォルダのパス][ワークブックの名前]_[データの日付].csv」
という形式のファイル名で保存されます。例えば、ワークブック「Report.xlsx」が「C:\Documents」フォルダにあり、データの日付が「20230101」の場合、CSVファイルの名前は「C:\Documents\Report_20230101.csv」となります。
- 変数の宣言:
こちらを以下の手順で設定していただくことで、どなたでも日にち単位でのファイル分割が可能となります。
マクロの設定手順
Excelでマクロを実行するためのボタンを配置する手順を以下に説明します。
Excelを開きます。リボンの右上隅にある「ファイル」タブをクリックします。
左側のメニューから「オプション」を選択します。
「Excelのオプション」ウィンドウが開きます。左側のメニューから「リボンのユーザー設定」を選択します。
右側のリストに「開発」が表示されているはずです。これを探し、チェックボックスにチェックを入れます。
「OK」ボタンをクリックして設定を適用します。
「開発」タブをクリックします。「Visual Basic」ボタンをクリックしてVBAエディタを開きます。
VBA Projectを右クリックし、「挿入」、「標準モジュール」をクリックしモジュールを開きます。
先ほどのVBAコードを貼り付けます。
マクロを実行すると、元のデータがあるフォルダ内に日付単位に分割されたCSVファイルが作成されます。
複数存在するファイルをTARGETにどのように読み込ませればよいか
外部指数ファイルを日にち単位で分割できたら、次はそのファイルを読み込むための設定が必要となります。
しかし、TARGETの外部指数設定画面の「パス・ファイル名」の入力欄は1つしかありません。では、どのように設定すればいいかと言うと、TARGETで設定されている「内部変数」というものを使用します。
例えば、デスクトップ上に以下のファイルが保存されているとします。
- 外部指数20230101.csv
- 外部指数20230102.csv
- 外部指数20230103.csv・・・
この中の、「外部指数20230101.csv」を読み込みファイルとする場合は、画像のようになります。
このままだと、2023年1月1日の外部指数しか読み込めません。
そこで「内部変数」を使用します。
TARGETでは様々な内部変数が使用できますが、外部指数を日にち単位で分割している場合は次の内部変数を使用します。
- %Y3:西暦年4桁半角数字
- %M1:月半角数字2桁
- %D1:日半角数字2桁
先ほどの例のように、ファイル名が「外部指数+年月日」の形式となっている場合は、以下のような設定となります。
C:¥Users¥■■■¥Desktop¥外部指数%Y3%M1%D1.csv
このように、ファイル名の年月日部分に内部変数を使用して記載することで、各馬の外部指数データを読み込む際に、TARGET側でその日付を自動で判別して、該当日付のファイルから指数データを読み込んでくれます。
注意点として、各日付のデータは同一のフォルダに保存する必要があります。
もし、デスクトップの中で「2023」「2022」「2021」というようにフォルダを年単位で分割している場合は、フォルダ名部分も以下のように変数で指定する必要があります。
C:¥Users\■■■\Desktop\%Y3\外部指数%Y3%M1%D1.csv
年単位や月単位などでフォルダを分割しなくても、実際の読み込み速度の面では特にストレスを感じるほど遅くなることはありません。
そのため、ファイルの管理面でどうしても年単位や月単位で分割したいという理由がない限りは、1つの外部指数は1つのフォルダにまとめてしまって問題ありません。
日にち単位の外部指数ファイルを作成することで、高速な読み込みが可能となる
TARGETに標準で搭載されている分析ファクターだけでは、なかなか高い期待値の馬を見つけ出すシステムの構築は困難です。
そのため、外部データを外部指数という形でTARGETに取り込み、分析できるようにする必要があります。
外部指数取り込み用ファイルの構成には大きく2つのパターンがあります。
- 「レース単位」の外部指数ファイル
- 「馬単位」の外部指数ファイル
レース単位ファイルの方が読み込み速度は速くなりますが、ファイルの構成がシンプルな馬単位が作成が簡単なためおすすめです。
また、外部指数の読み込み速度はファイルを日にち単位に分割することで高速化することが可能です。
初めて外部指数を作成し取り込みを行う際には、大半の方がなかなかうまくいかないと思います。本サイトの説明だけではなく、TARGET公式のヘルプ情報も確認し、一つ一つ確実に設定を行ってみましょう。