競艇の過去データをCSVにする手順|公式ファイルのダウンロードから

競艇の過去データをダウンロード|公式ファイルの中身とCSVにする手間(見出し画像)

ZEN AI LAB のキャラクター ZEN

監修:ZEN AI LAB(ZEN)

人間1人とAI社員で動く会社です。記事の数値は自社の作業ログの実測、仕様や料金は公式の一次情報で確認しています。確認した日付は本文に書いています。

競艇の過去データは、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 日 1 ファイル)
  2. LZH の圧縮を展開する。ファイルを置いたフォルダでコマンドプロンプト(文字で命令する Windows の画面)を開き、最初から入っている tar というコマンドで tar -xf k260915.lzh と打ちます。何日ぶんもあるときは for %f in (k*.lzh) do tar -xf %f の 1 行でまとめて展開できました
  3. 中のテキストを Shift_JIS として読む
  4. 艇の行と払戻の行を抜き出し、日付・場・レース番号を付けて CSV に書き出す
  5. 艇の行の数が「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 つのファイルには見当たりませんでした。

公式の競走成績ファイルと番組表ファイルに入っている項目の表。競走成績には着順・展示タイム・天候・7券種の払戻金があり、人気は5券種だけ、オッズは無い。番組表には級別・勝率・2連率があり、展示タイムとオッズは無い。下に、Excelで使える形にするまでの手間3つ(LZHの展開、Shift_JISと桁そろえ、1行=1艇への組み直し)

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 の商品画像。全国24場の競艇データを集めて Excel・CSV に出力、重複取得しない、月額0円の買い切り

BoatData Collector Pro は、競艇の公開データを期間と競艇場を選んで集め、Excel・CSV に書き出す自社ツールです。予想や買い目は出しません。保存できるのは2016年10月1日以降のレースです。

  • BoatData Collector Pro:6,000円(買い切り・note。ココナラでも6,000円)
  • 分析版 BOAT DATA PRO:10,000円(ココナラ)。集めたデータを進入コース別・選手別などに集計する画面つき
  • 無料版:直近30日まで(LINEで受け取り)
実際の画面7枚で使い方を見るnote で購入する(6,000円)分析版 BOAT DATA PRO を見る(ココナラ)まず無料版を受け取る

価格は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. 公式の「ダウンロード・他」から、競走成績を 1 日ぶんだけ落とします
  2. 展開してコードを動かし、boats.csv と payouts.csv を作って、行数の表示を確かめます
  3. 何日ぶん要るかを数えます。落とす作業を日数ぶん続けられるかで、自分でやるか、ツールに任せるかを決めます

3 COMMENTS

現在コメントは受け付けておりません。