この記事は、YouTubeでもご覧いただけます。映像とナレーションで内容がよりわかりやすく解説されているので、ぜひ以下のリンクからご覧ください。
■TARGETのCSVデータをPostgreSQLで使えるようにする方法
https://youtu.be/cBv7oQenbEU
TARGET×PostgreSQLでデータを武器に
この記事では、JRA-VAN DataLab.で人気No.1の競馬ソフト「TARGET」のCSVデータを、PostgreSQLで活用する方法を解説します。
CSVデータを出力する画面や、データにヘッダがある(項目名を付加する)場合や、フォーマットの違いなど細かな調整は必要ですが、基本は今回紹介する方法で、どんなCSVデータも取り込むことができます。
CSVデータをPostgreSQLで使うメリット
大量のデータも余裕で扱える
CSVファイルはExcelで開くこともできますが、大量のデータを扱うと動作が重くなり、保存や検索に時間がかかったりします。
そこで、PostgreSQLを使えば、大量のデータも余裕で扱うことができ、複数のCSVファイルも1つのテーブルにまとめて処理できるため、データの管理や分析がメッチャ楽になります。さらに、保存したデータは、自動投票や競馬予想AIの学習データとしても活用できます。
SQLならデータ分析が一瞬
Excelで関数やピボットテーブルを使って集計するのは手間がかかりますが、SQLを使えば一瞬で処理できます。例えば、「特定の指数の馬の成績を集計する」とか、「複雑な条件に合うパターンを抽出する」といった操作が、数千行のデータでもサクッと実行できます。
加えて、SQLは一度作って保存しておけば、何度でも再利用できるため、同じ処理を繰り返す手間も省けます。
必要なソフトをインストールする
この記事は、「PC-KEIBA Database」と「TARGET」のユーザー様を対象に作成しています。まだインストールしていない場合は、それぞれのマニュアルを参考にセットアップを完了させてから、この記事の手順を進めてください。
サクラエディタのインストール
「サクラエディタ」は、Windowsで使える無料のテキストエディタです。ちなみに「テキストエディタ」とは、文章の作成やプログラムの編集など、さまざまな用途に使えるソフトのことです。
他にお気に入りがあればそれで構いませんが、テキストエディタが初めての人にはサクラエディタをオススメします。
サクラエディタのインストールと使い方は、次の記事を参考にしてください。
■サクラエディタのインストールと初期設定
https://pc-keiba.com/wp/sakura-editor-setting/
■サクラエディタで .sql や .py ファイルを開く方法
https://pc-keiba.com/wp/sakura-editor-guide/
A5:SQL Mk-2のインストール
「A5:SQL Mk-2」は、Windowsで使える無料のデータベース管理ツールです。SELECT文の実行や検索結果のファイル出力、テーブル定義の確認に適しています。
A5:SQL Mk-2のインストールは、次の記事を参考にしてください。
■A5:SQL Mk-2のインストールと初期設定
https://pc-keiba.com/wp/a5sqlmk2-setting/
pgAdminのインストール
「pgAdmin」は、PostgreSQL専用の公式無料データベース管理ツールです。テーブルの作成や、プロシージャの実行を行うならこちらが便利です。エラーが発生した際に行番号を示してくれるため、問題の特定がスムーズにできて、作業効率が大幅にアップします。
「A5:SQL Mk-2」と「pgAdmin」は、それぞれ得意なことが違うため、目的に応じて使い分けるのがベストです。
pgAdminのインストールは、次の記事を参考にしてください。
■pgAdminのインストールと使い方
https://pc-keiba.com/wp/pgadmin/
TARGETでCSVを出力する
今回の例では、「開催成績CSV出力」を使って、過去分の「補正タイム」と「PCI」を一括出力してみます。
「開催成績CSV出力」画面の表示
- ツールバーの「メインメニュー」をクリックします。
- メニューの「開催成績CSV出力」をクリックします。

開催成績CSV出力項目の設定
- 画面左の「成績データ(ユーザー設定)」を選択します。
- 「項目設定」ボタンをクリックします。

今回は例として、TARGETの「選択可能項目リスト」の中から、次の4つの項目を出力してみましょう。

- レースID(新)
- 補正タイム
- 補9
- PCI
TARGETのデータ仕様は、TARGETのオンラインヘルプで確認できます。
「レースID(新)」は、データベースのテーブルに主キーを設定する際に欠かせない重要な項目です。
「OK」ボタンをクリックして確定します。
開催成績選択
「開催選択」ボタンをクリックします。

今回は例として、昨年度(2024年)の全開催データを出力してみましょう。
- 「全選択」ボタンをクリックします。
- 「選択完了」ボタンをクリックします。

テキスト形式出力ファイル名の指定
「参照」ボタンをクリックします。

- 「指定ファイル名」を入力します。今回は例として「開催成績CSV.csv」にします。
- 「アクセスフォルダ」(ファイルの出力先)を設定します。
- 「OK」ボタンをクリックして確定します。

出力開始
すべての設定が完了したら、「出力開始」ボタンをクリックして…、

しばらくお待ちください。

出力が完了したら、「閉じる」ボタンをクリックして画面を終了しましょう。

「テキスト形式出力ファイル名の指定」画面で設定した場所に、CSVファイルが作成されます。

出力ファイルを「サクラエディタ」で開くと、このようなデータが確認できます。ヘッダ(項目名)は無く、純粋なデータのみが出力される形式になっています。
この状態で、各項目のおおよそのデータ型も把握できるので、次の設定に役立てましょう。

インポート用の仮テーブルを作る
次に、先ほど作成した「開催成績CSV」ファイルを取り込むための仮テーブルを作成します。「A5:SQL Mk-2」を使えば、クリック操作だけで簡単にインポートできるので、SQLに慣れていない人でもすぐに扱えます。
「A5:SQL Mk-2」を立ち上げて、次の手順で進めましょう。
- 画面左のデータベース名(pckeiba)を右クリックして、
- 「CSV/TSVファイルからテーブル作成(インポート)」を選択します。
- ファイル選択のダイアログが表示されるので、先ほど作成した「開催成績CSV」ファイルを選択します。

CSV/TSVファイルからテーブル作成(インポート)
ファイルの内容をもとに設定された初期値は、あまりにもテキトーすぎるため、正確な情報に修正しましょう。

テーブル定義の修正
テーブル名、列名、データ型を「開催成績CSV」ファイルの内容に合わせて、次のように修正します。
- テーブル名
- myd_kaisai_seiseki_tmp
- 列名・データ型
- レースID(新)→race_id_umaban・varchar(18)
- 補正タイム→hosei_time・numeric(3)
- 補9→hosei_time_9・numeric(3)
- PCI→pci・numeric(3,1)
- その他の設定
- レースID(新)の「主キー」にチェックを入れる
- 画面下の「1行目をデータとして扱わない」のチェックを外す

また、データ型と桁数の設計も重要です。各項目のデータの中で最大の桁数を調べ、それに合わせてテーブルを設計しましょう。これを適切に設定しておくと、データの取り扱いがよりスムーズになります。
TARGETのデータ仕様は、TARGETのオンラインヘルプで確認できます。
「データ型」の話は、次の記事を参考にしてください。
■データベースの基礎知識(用語集)
https://pc-keiba.com/wp/glossary/
テーブル作成&インポート
テーブル定義を修正したら「テーブル作成&インポート」ボタンをクリックして、データの取り込みを開始しましょう。

エラーが発生した場合は、表示されたメッセージを確認し、テーブル定義やCSVデータの修正を行いましょう。ここで発生するエラーはググれば解決策が見つかるので、まずは自分で調べて解決する習慣をつけることが大切です。
「A5:SQL Mk-2」の画面左にあるテーブル一覧から「myd_kaisai_seiseki_tmp」テーブルを開き、データが正しく取り込まれているか確認しましょう。

念のため「カラム」タブを開いて、テーブルの定義も確認しておきましょう。

ここまでの作業は面倒くさく感じるかもしれませんが、一度テーブルを作成してしまえば、同じフォーマットのCSVなら、次回からは超簡単!テーブルの「データ」タブにある「CSVからデータをインポート」を使えば、ワンクリックで取り込めます。

JV-Data仕様の正式テーブルを作る
次に、インポートしたデータをJV-Data仕様に合わせて結合できるよう、正式テーブルを作成します。まずは、「pgAdmin」を立ち上げましょう。
「pgAdmin」の画面左にあるテーブル一覧から、仮テーブルの「myd_kaisai_seiseki_tmp」テーブルを選択しましょう。
次に、「SQL」タブをクリックすると、CREATE TABLE文が表示されます。タブ内の右上の「コピー」ボタンをクリックすれば、簡単にクリップボードへコピーできます。このSQLを元に、JV-Data仕様に対応した正式テーブルを作成しましょう。

「サクラエディタ」を立ち上げて、コピーしたSQLを貼り付け「myd_kaisai_seiseki.sql」というファイル名で保存しましょう。

テーブル名を置換する
ファイル内のテーブル名を「myd_kaisai_seiseki_tmp」から「myd_kaisai_seiseki」に「すべて置換」します。

Ctrl+R で置換のダイアログボックスを表示します。
(※Ctrl+R はサクラエディタ独自のショートカット操作)

ここまでできれば、第一ステップは完了です。

JV-Data仕様の主キーに修正する
オリジナルのテーブルを作成する場合は、JV-Data仕様の主キーに合わせて設計すると、多くのデータで応用が利きます。
そこで、「pgAdmin」の画面左にあるテーブル一覧から「jvd_se」テーブルを開きましょう。
今回は、馬毎のデータ(補正タイム・PCI)を保存するため「馬毎レース情報」テーブルを基に作成します。

まずは、このSQLを「サクラエディタ」に貼り付けて編集しましょう。コピーしたSQLの中から、必要な情報だけを抜き出し、今回は次の3つを使います。
- キー項目
- 主キーの定義(画像の7行目)
- コメントのSQL(画像の10行目以降)
「コメントのSQL」は、テーブル名や項目名に日本語(論理名)を設定するためのものです。
今回の例では、テーブルの物理名(myd_kaisai_seiseki)と、コメントのテーブル名(画像の10行目)を修正すればOKです。

これを、先ほど作成した「myd_kaisai_seiseki.sql」ファイルに貼り付け、「キー項目」と「主キーの定義」を修正しましょう。

また、項目名の「コメントのSQL」も適宜修正し、不足している(追加した項目の)部分は、見よう見まねで補完して完成させます。

このページの最後の、有料会員限定のダウンロードリンクからもファイルをダウンロードできます。
「pgAdmin」のクエリツールにSQLを貼り付けて、実行しましょう。

「A5:SQL Mk-2」に戻り、「カラム」タブを開いて、テーブルが期待どおりの構成になっているか確認しましょう。
「馬毎レース情報」の主キーと、TARGETのオリジナル指数の項目が正しく含まれています。これで、正式テーブルが完成です。

正式テーブルにデータを登録する
仮テーブルから正式テーブルへデータを登録するために「INSERT…SELECT」を使います。「INSERT…SELECT」とは、SELECT文の実行結果をINSERT文でテーブルに登録するSQL文のことです。
ただし、いきなり実行せず、まずはSELECT文の部分だけ作成し、期待どおりの結果が得られるか確認しましょう。
今回のポイントは、TARGETの「レースID(新)」を「馬毎レース情報」の主キーに変換すること。これが正しくできれば、目的達成となります。
レースID(新)を馬毎レース情報の主キーに変換する
SQLで文字列を切り出すには、PostgreSQLの「substring」関数を使います。「レースID(新)」を「substring」で加工し、「馬毎レース情報」の主キーと同じ形式に変換しましょう。
- レースID(新)の仕様
- yyyy:開催年(西暦)
- mmdd:開催月日
- pp:競馬場コード
- kk:開催回(今回は使用しません)
- nn:開催日目(今回は使用しません)
- rr:レース番号
- uu:馬番
この形式に合わせて「substring」関数を使い、適切にデータを切り出しましょう。具体的には、次のように処理します。

TARGETのデータ仕様は、TARGETのオンラインヘルプで確認できます。
「関数」の話は、次の記事を参考にしてください。
■SELECT文の基本
https://pc-keiba.com/wp/sql-basics/
SELECT文の実行結果をチェック
SELECT文が完成したら「A5:SQL Mk-2」で実行し、結果を確認しましょう。
先頭の「race_id_umaban」は、「馬毎レース情報」の主キーとの比較用に一時的に表示しているだけです。

特に注意すべき点は、主キーの値が重複していないかのチェックです。もし重複があると、INSERT実行時にエラーが発生します。

INSERT…SELECTでテーブルにデータを保存する
SELECT文に誤りがないことを確認したら、INSERT句を追加しましょう。このとき、SELECT句の各項目が、INSERT句の項目と正確に対応しているかが重要です。ミスがあるとデータが正しく登録されないため、慎重にチェックしてください。
なお、比較用として表示していた「race_id_umaban」の項目は、INSERTでは不要なので削除しておきましょう。

このSQLをファイルに保存しておけば、次回から同じ作業を簡単に再実行できます。今回の例では、「myd_kaisai_seiseki_import.sql」というファイル名で保存しておきます。

このページの最後の、有料会員限定のダウンロードリンクからもファイルをダウンロードできます。
「A5:SQL Mk-2」のドキュメントにSQLを貼り付けて、実行しましょう。

INSERT…SELECTの実行結果をチェック
「myd_kaisai_seiseki」テーブルの「データ」タブを開き、データが正しく取り込まれているか確認しましょう。問題がなければ、これで作業完了です!

まとめ
今回の記事で学んだ流れ
今回の記事で学んだ流れを振り返りましょう。
- 必要なソフトをインストールする
- TARGETでCSVを出力する
- インポート用の仮テーブルを作る
- JV-Data仕様の正式テーブルを作る
- 正式テーブルにデータを登録する
これだけで、TARGETのオリジナル指数をPostgreSQL上で自在に操作し、SQLでイジりまくって遊べるようになります。
テーブル作成は最初の1回だけでOK
CSVの内容が同じであることを前提に、仮テーブルと正式テーブルの作成は、最初の1回だけ行えばOKです。2回目以降の作業は超簡単で、以下の手順でスムーズに進められます。
- 仮テーブル→「A5:SQL Mk-2」で、各テーブルの「データ」タブにある「CSVからデータをインポート」を使えば、ワンクリックで取り込み完了。
- 正式テーブル→「INSERT…SELECT」文を実行するだけで、データを保存できます。
あとはデータを研究し尽くして、自分なりの予想ロジックを磨き、馬券でしっかり稼いでいきましょう!初めは難しく感じるかもしれませんが、慣れれば驚くほど簡単にデータを扱えるようになります。楽しみながら、どんどん試してみてください!