競艇の過去データは、CSV のまま配られてはいません。1 レースずつ写すのをやめて、過去の結果を Excel や CSV で数えたい人に向けて、公式のファイルから CSV を作る方法を書きました。
BOATRACE 公式サイトの「ダウンロード・他」で落とせるのは、競走成績と番組表のテキストファイルです。1 日 1 ファイルで、日付は 2005 年 1 月から選べます。
ファイルは LZH という形式で圧縮されています。中身は Shift_JIS という古い文字コードの、桁をそろえたテキストです。オッズは入っていません。
ただ、CSV に変えること自体はできます。
ZEN AI LAB は 1 日ぶんを実際に落として中身を数え、着順と払戻を CSV にするコードを書いて、自社の研究用データベースと照らし合わせました。そのコードをこの記事に載せます。読み終えると、自分で表にするか、ZEN AI LAB が作って販売している収集ツールに任せるかを決められます。ファイルにせず、サイトやアプリで見て調べるだけで足りる人は、競艇のデータサイト・アプリ7つを比較から選べます。
競艇のデータで何が数えられるかの全体は、競艇のデータ分析の入口にまとめています。
競艇の過去データをCSVにする手順は5つ
公式の競走成績ファイルを、Excel で開ける CSV にするまでの流れです。3〜5 は下の Python(プログラムを動かす無料のソフト)のコードがまとめて行います。python.org から入れておいてください。Python を入れたくない人は、記事の後ろのツールの節を見てください。Excel の操作だけで同じことができるかは試していません。
- 公式サイトの「ダウンロード・他」で、競走成績の月と日を選んで落とす(1 日 1 ファイル)
- LZH の圧縮を展開する。ファイルを置いたフォルダでコマンドプロンプト(文字で命令する Windows の画面)を開き、最初から入っている tar というコマンドで
tar -xf k260915.lzhと打ちます。何日ぶんもあるときはfor %f in (k*.lzh) do tar -xf %fの 1 行でまとめて展開できました - 中のテキストを Shift_JIS として読む
- 艇の行と払戻の行を抜き出し、日付・場・レース番号を付けて CSV に書き出す
- 艇の行の数が「6 艇 × レース数」と合うかを確かめる(コードが最後に表示します)
展開してできた K で始まるテキストと同じフォルダに、次のコードを k2csv.py という名前で保存します。そのフォルダで py k2csv.py と打つと、boats.csv(艇ごと)と payouts.csv(払戻ごと)ができます。フォルダに何日ぶん置いてあっても、まとめて 1 つの CSV になります。最後にレース数と艇の行数を表示し、6 艇でないレースがあれば一覧に出します。ZEN は Python 3.13 で動かしました。
import collections, csv, glob, re
BOAT = re.compile(r"^\s{2}(\S+)\s+([1-6])\s+(\d{4})\s.{8,9}?\s*(\d+)\s+(\d+)\s+(\S+)\s+(\S+)\s+(\S+)")
KIND = re.compile(r"^\s+(単勝|複勝|2連単|2連複|拡連複|3連単|3連複)?\s+(?=\d)")
PAY = re.compile(r"(\d(?:-\d)*)\s+(\d+)(?:\s+人気\s+(\d+))?")
count = collections.Counter()
with open("boats.csv", "w", encoding="utf-8-sig", newline="") as fb, \
open("payouts.csv", "w", encoding="utf-8-sig", newline="") as fp:
boats, pays = csv.writer(fb), csv.writer(fp)
boats.writerow(["日付", "場", "R", "着", "艇", "登番", "モーター", "ボート", "展示", "進入", "ST"])
pays.writerow(["日付", "場", "R", "券種", "組番", "払戻", "人気"])
for path in sorted(glob.glob("K*.TXT")):
day, place, race, kind = path[1:7], "", "", ""
for line in open(path, "rb").read().decode("cp932").splitlines():
if re.fullmatch(r"\d\dKBGN", line.strip()):
place, race = line.strip()[:2], ""
elif m := re.match(r"\s+(\d{1,2})R\s+\S.*H\d+m", line):
race, kind = m.group(1), ""
elif race and (m := BOAT.match(line)):
boats.writerow([day, place, race, *m.groups()])
count[day, place, race] += 1
elif race and (m := KIND.match(line)):
kind = m.group(1) or kind
for p in PAY.finditer(line, m.end()):
pays.writerow([day, place, race, kind, p[1].replace("-", "_"), p[2], p[3] or ""])
print("レース数", len(count), "艇の行数", sum(count.values()))
print("6艇でないレース", [k for k, n in count.items() if n != 6])
boats.csv は、1 行 = 1 艇の 11 列です。2026 年 9 月 15 日の 1 ファイルで 936 行になりました。
| 列 | 中身 |
|---|---|
| 日付 | ファイル名の 6 桁(年月日) |
| 場 | 競艇場の番号。01=桐生から 24=大村まで |
| R | レース番号 |
| 着 | 着順。「F」「K0」のような記号も入る |
| 艇 | 艇番 |
| 登番 | 選手の登録番号 |
| モーター | モーターの番号 |
| ボート | ボートの番号 |
| 展示 | 展示タイム |
| 進入 | 進入したコース |
| ST | スタートタイミング |
記号の行は数字になりません。欠場の行は展示と ST が「K」、進入が「.」です。フライングの行の ST は「F0.03」の形です。数えるときは除いてください。
payouts.csv は、1 行 = 払戻のあった組み合わせ 1 つの 7 列です(日付・場・R・券種・組番・払戻・人気)。同じ 1 ファイルで 1,560 行になりました。人気は単勝と複勝では空です。組番は 1_2_6 のように _ でつなぎました。1-2-6 のままだと、Excel が日付に読み替えることがあるためです。
ZEN の研究用データベースと照らし合わせました。自社ツールの開発で保存していたファイルも合わせて、14 日ぶん・2,160 レースです。
| 列 | 比べた行 | 食い違い |
|---|---|---|
| 着(数字の行) | 12,774 行 | 0 行 |
| 進入 | 12,936 行 | 0 行 |
| ST(数字の行) | 12,885 行 | 0 行 |
| 払戻(組番と金額) | 21,583 行 | 0 行 |
着の記号が入った 186 行は、データベース側の書き方が違うので比べていません。登番・モーター・ボート・展示の列も比べていません。
コードが取りこぼす行もあります。14 日ぶんで 1 行だけあった、単勝の「特払い」の行です。組番が無いので CSV に入りません。特払いを数えるなら、この行は別に拾ってください。
選手名・決まり手・天候は、このコードでは列にしていません。オッズはファイルに入っていないので、CSV にもできません。過去のオッズの見方は、競艇の過去オッズはどこで見る?に書きました。
公式で落とせるのは「競走成績」と「番組表」。1日1ファイルで2005年1月から
公式サイトの「ダウンロード・他」のページには、ダウンロードが 3 つ並んでいます(2026 年 10 月 18 日に確認)。
| ファイル | 中身 | 単位 |
|---|---|---|
| 競走成績 | 全国のレースの結果と払戻 | 1日1ファイル |
| 番組表 | 出走表(選手・勝率・モーター) | 1日1ファイル |
| レーサー期別成績 | 選手ごとの半年の成績 | 半年に1ファイル |
競走成績と番組表は、まず月を選び、次に日を選んで「ダウンロード開始」を押す作りです。月の選択肢は 2026 年 10 月から 2005 年 1 月まで、262 か月ぶんありました。何日ぶんかを一度に落とすボタンは、ページにありません。
期別成績は 2002 年から 2026 年まで、前期・後期に分かれて並んでいます。
同じページには、「番組表閲覧」「オッズ情報・結果」「競走成績閲覧」のサービスを 2025 年 3 月 5 日で終えたとも書かれています。ファイルのダウンロードのほうは、2026 年 10 月 18 日の時点で使えました。
番組表のファイルを1艇1行のCSVにするコードと、エクセルで使う手順は、競艇の出走表をエクセルにする手順にまとめました。
この記事では公式サイトへのリンクは貼っていません。サイトの決まりで、営利目的のリンクを断っているためです。「BOATRACE 公式サイト」で検索し、メニューの「データファイル」にある「ダウンロード・他」から開けます。
1日ぶんを落として開いた。オッズは無く、人気は5券種だけ
ZEN は 2026 年 10 月 18 日に、2026 年 9 月 15 日の競走成績ファイルを 1 つだけ落としました。大きさは 37,077 バイトです。
開いてみると、その日に開催していた 13 場・156 レースが 1 つのファイルに入っていました。艇の行は 936 行で、156 レース × 6 艇とぴったり合います。
入っていたもの・入っていなかったものは、次のとおりです。番組表のほうは、ZEN が 2026 年 9 月に保存していた 2026 年 8 月 24 日のファイルを読みました。番組表はレース前のファイルなので、結果にあたる項目は「—」(対象外)にしています。
| 項目 | 競走成績 | 番組表 |
|---|---|---|
| 着順・進入・スタートタイミング | ある | — |
| 展示タイム | ある | 無い |
| 天候・風・波 | ある | — |
| 気温・水温 | 無い | — |
| 払戻金(7券種) | ある | — |
| 人気 | 5券種だけ | — |
| オッズ | 無い | 無い |
| 級別・勝率・2連率 | 無い | ある |
| 3連率 | 無い | 無い |
人気が付いていたのは、2連単・2連複・拡連複・3連単・3連複の 5 つです。単勝と複勝の払戻には、人気が付いていませんでした。
オッズは、どちらのファイルにもありません。オッズを並べて数えたいなら、公式のダウンロードとは別の取り方が要ります。
展示のスタートタイミングとチルトも、2 つのファイルには見当たりませんでした。

CSVやExcelで使える形にするまでの手間は3つある
落としたファイルは、そのままでは Excel の表になりません。ZEN が 1 日ぶんで試した手間は、次の 3 つでした。
1. LZH形式の圧縮を展開する
ファイルの末尾は「.lzh」です。ZIP とは別の圧縮形式で、公式のページにも「LZH形式の圧縮ファイルは、解凍ソフトで解凍してからご利用ください。」とあります。
展開すると「K260915.TXT」ができます。37,077 バイトのファイルが、183,264 バイトのテキストになりました。
2. 文字コードと「桁そろえ」を読み分ける
中のテキストは Shift_JIS です。UTF-8 として読もうとすると、読めませんでした。
カンマもタブもありません。空白で桁をそろえて並べた形です。選手名の中にも全角の空白が入っているので、空白で区切ると 1 人の名前が 2 つに割れます。
3. 「1行=1艇」の表に組み直す
1 つのファイルの中に、場の見出し、レースの見出し、艇の行、払戻の行が順に混ざっています。約 3,600 行のうち、艇の行は 936 行でした。
Excel で集計するには、艇の行だけを抜き出し、どの場の何レースかを横に付け直す必要があります。払戻は艇の行と別の場所にあるので、レースごとに付け直します。
ZEN が最初に書いた 50 行ほどのプログラムでは、936 行のうち 928 行しか取れませんでした。着順の欄に「F」や「K0」のような記号が入った 8 行を、取りこぼしていたのです。
取りこぼしは、エラーにもならずに起きます。艇の行の数を、6 艇 × レース数と突き合わせて気づきました。上のコードはこの経験から書き直したものです。自分で書き換えたときも、最後の表示で突き合わせを毎回見てください。
コードがあっても、落とす作業は日数ぶん残ります。1 年ぶんなら、競走成績だけで約 365 ファイルになり、番組表も合わせると倍になります。ここを繰り返すのが大変なら、集める作業だけを ZEN AI LAB の自社ツールに任せる方法もあります。
Excel に入れたあとの集計の手順は、競艇のデータ分析をエクセルで始める方法に書きました。
ZENが集めた量は1,366日・210,600レース
ZEN AI LAB は研究のために、2023 年 1 月 1 日から 2026 年 9 月 27 日までの 1,366 日ぶんを、自社ツールで 1 つのデータベースに集めています。期間の 1,366 日すべてにレースがあり、合わせて 210,600 レースでした。
| 年 | レース数 |
|---|---|
| 2023年 | 55,992 |
| 2024年 | 56,352 |
| 2025年 | 55,908 |
| 2026年(9月27日まで) | 42,348 |
同じ期間を公式のダウンロードから手で集めるなら、競走成績だけで 1,366 ファイル、番組表も合わせると 2,732 ファイルです。
このデータベースの 2026 年 9 月 15 日は、156 レース・13 場でした。今回落とした公式のファイルと同じ数です。
自社ツールの開発のときに、2026 年 8 月の 1 か月・24 場を取って測りました。4,944 レースで 390.7 秒、7 分かからずに終わっています。通信は 124 回で、通信のエラーは 0 回でした。
ZEN も最初は、公式サイトを開いて 1 号艇の着順を Excel に手で写していました。30 分ほど続けたところで、手でやる作業ではないと思った話は、2026 年 9 月の note に書いています。
この手順を自分で繰り返す代わりにツールで集めたいときは、BoatDataの使い方で流れを確かめられます。
まとめて落とすときは、サイトの決まりを先に読む
公式サイトの「サイトポリシー」では、私的使用など法律で認められる範囲を超えて、無断で使う(複製・頒布などを含む)ことはできないと書かれています。禁止事項には、「大量の情報送受信及び大量のアクセスなど、本サイトの運営に支障を与える行為」も挙がっています(2026 年 10 月 18 日に確認)。
自分で何年ぶんも落とすなら、1 ファイルごとに間隔をあけてください。落としたファイルや、その中身の表をそのまま人に配ったり、ネットに載せたりするのも避けます。ZEN もこの記事に、ファイルの中身の表は載せていません。
プログラムで取る場合の注意は、競艇のデータを API やプログラムで取るときの注意にまとめました。
集める作業をツールに任せると減る手間と、先に知っておくこと
ZEN AI LAB が作った自社ツールに、BoatData Collector Pro があります。期間と競艇場を選んで、出走表・展示や直前の情報・気象・結果・払戻を集め、Excel・CSV に書き出す Windows 用のツールです。
公式のファイルで手間だったところは、こう変わります。
- 1 日ずつ落とす作業: 期間を指定してまとめて取ります。取ったデータは保存され、次は新しい日の分だけを取ります
- 展開と文字コード: ツールの中で済みます。CSV の文字コードは、同梱の説明書では UTF-8(BOM 付き)が既定です
- 組み直し: 1 行 = 1 艇、または 1 行 = 1 レースの形で書き出せます。同梱の説明書では、1 行 = 1 艇の表が 51 列、1 行 = 1 レースの表が 144 列です
使う前に知っておいてほしいこともあります。
- 予想・買い目・自動投票の機能はありません。集めて書き出すところまでです
- 公式サイトや BOATRACE とは関係のない、非公式のツールです。データの正確さは保証していません
- 同梱の説明書によると、公式の競走成績ファイルのほかに、GitHub で公開されている非公式の API(Boatrace Open API)からも取っています。非公式の経路で、データを配ってよいという許しではありません
- オッズも取れますが、初期設定ではオフです。オッズは公式サイトのオッズのページから 1 レース・1 券種ずつ取る仕組みです。同梱の説明書では、1 年・全場・全券種のオッズは約 527,000 回の通信になるため、その取り方はせず、日付・場・レースを絞って使う前提です
- 無料版があります。取れる期間は直近 30 日までで、ほかの機能は製品版と同じです。無料版のページには「実機での動作確認は未実施」と書かれています
- 無料版は、LINE 公式アカウントの友だち追加で受け取れます
まず直近 30 日で、書き出した表が自分の集計に使えるかを試せます。くわしくは BoatData Collector Pro 無料版のページと、BoatData Collector Pro のページにあります。
競艇のデータを、何か月分も自分で集めて数えるなら

BoatData Collector Pro は、競艇の公開データを期間と競艇場を選んで集め、Excel・CSV に書き出す自社ツールです。予想や買い目は出しません。保存できるのは2016年10月1日以降のレースです。
- BoatData Collector Pro:6,000円(買い切り・note。ココナラでも6,000円)
- 分析版 BOAT DATA PRO:10,000円(ココナラ)。集めたデータを進入コース別・選手別などに集計する画面つき
- 無料版:直近30日まで(LINEで受け取り)
価格は2026年11月7日の表示です。変わることがあるので、買う前に各ページで確かめてください。Windows 11(64bit)用です。
確かめたことと、データでは分からないこと
確かめたことは、次のとおりです。
- 公式サイトの「ダウンロード・他」と、競走成績・番組表の日付を選ぶページ、サイトポリシーは、2026 年 10 月 18 日に開いて本文を保存し、ブラウザでも表示を確かめました
- 競走成績ファイルは、2026 年 9 月 15 日の 1 ファイルだけを、2026 年 10 月 18 日 20 時 24 分に落としました。ほかの日は落としていません
- 変換コードは、2026 年 10 月 30 日に、そのファイルと、2025 年 11 月〜2026 年 8 月に自社ツールの開発で保存していた 13 ファイルの計 14 日ぶんで動かしました。公式サイトへの新しいアクセスはしていません
- 圧縮の形式・文字コード・行の数・入っている項目は、そのファイルをプログラムで数えたものです。選手名・着順・払戻金の中身は、記事に載せていません
- 番組表は、2026 年 9 月 2 日に自社ツールの開発で保存した 2026 年 8 月 24 日のファイルを読みました
- 研究用データベースのレース数は、2026 年 10 月 18 日に数え直しました。2026 年 8 月の 4,944 レースは、自社ツールの 1 か月の試験と同じ数でした
- その 1 か月の試験では、通信のエラーは 0 回でした。ただし、すべての項目がそろわなかったレースが 31 あり(開催中止など 25・気温などが取得元で欠けていた 6)、全体の 0.63% でした
このデータでは分からないことは、次のとおりです。
- 競走成績・番組表のファイルの項目の説明(レイアウト)は、公式サイトのダウンロードのページには見当たりませんでした。項目の名前は、ファイルの中の見出しから読んでいます
- 2005 年など古い年のファイルは開いていません。昔のファイルで項目や並びが違うかは分かりません。変換コードが動くのを確かめたのは 2025 年 11 月以降の 14 日ぶんです
- まだ確かめられていないこと:LZH を Windows のエクスプローラーで開けるかは試していません。展開に使ったのは tar コマンドです
- まだ確かめられていないこと:Microsoft Excel 本体でファイルを読み込む操作はしていません。変換を試したのは Python のプログラムです
- まだ確かめられていないこと:無料版で 30 日ぶんを取るのにかかる時間は測っていません。390.7 秒は製品の開発のときの 1 か月の実測です
まとめ
競艇の過去データは CSV では配られていませんが、公式の 1 日 1 ファイルからコードで CSV にできます。落とす手間は日数ぶん増えます。
- 公式の「ダウンロード・他」から、競走成績を 1 日ぶんだけ落とします
- 展開してコードを動かし、
boats.csvとpayouts.csvを作って、行数の表示を確かめます - 何日ぶん要るかを数えます。落とす作業を日数ぶん続けられるかで、自分でやるか、ツールに任せるかを決めます


[…] 何が取れて、CSVやExcelにするまでに何が手間かは、競艇の過去データをダウンロードする方法にまとめています。 […]
[…] ただ、公式のファイルはそのままではエクセルで開けません。圧縮を解いて、決まった桁ごとに並んだ文字を列に分ける作業が要ります。手順は競艇の過去データをダウンロードする方法に書きました。 […]
[…] 公式の公開データを自分で取って表にする方法は、競艇の過去データをダウンロードする方法に書きました。何か月分も集めるなら、取って表の形にそろえる作業を毎月くり返すことになります。 […]