競艇のデータ分析をエクセルで|表の形と最初に作る集計3つ

競艇のデータ分析をエクセルで|表の形と最初に作る集計3つ(見出し画像)

ZEN AI LAB のキャラクター ZEN

監修:ZEN AI LAB(ZEN)

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

1号艇の1着率や、人気の組み合わせが来る割合を、自分の通う場で数えてみたい。そう思ってエクセルを開いたものの、どんな表にすればいいのかで手が止まっている方向けの記事です。

表は「1行=1艇」で縦に並べます。1レースは6行です。数えるのは COUNTIFS という関数2つの割り算で、場ごとの1号艇の1着率も、月ごとのレース数も同じ形の式で出せます。

この記事では、表の列と、最初に作る集計3つを式つきで書きます。式は、答えの分かっている見本データで計算が合うことを確かめました。最後に、ZEN の研究用データ約11万レースで同じ集計をした結果も載せます。

競艇のデータで何が数えられるかの全体は、競艇のデータの見方と集め方にまとめています。

表は「1行=1艇」。1レースが6行になる

最初に決めるのは、1行に何を書くかです。形は2つあります。

  • 1行=1艇: 1レースを6行に分けて、艇ごとに着順などを書く
  • 1行=1レース: 1レースを1行にして、1号艇から6号艇を横に並べる

集計を作るなら、1行=1艇がおすすめです。「1号艇で、着順が1」という条件を、列を2つ指定するだけで書けるからです。1行=1レースの表だと、艇番ごとに列が分かれます。2号艇や3号艇で同じことをするたびに、式の列を書き換えることになります。

1行=1レースの表は、1レースを横に見比べるのに向いています。見るための表と、数えるための表を分けて考えると迷いません。

最初の集計に要る列は、次の6つです。

列入れるもの書き方
race_dateレースの日2025-01-05 の形
venue_name場の名前毎回同じ表記
race_no何レース目か数字
boat_number艇番(1〜6)数字
finish_position着順数字。失格などは空
result_status着順の状態1着・転覆失格 など

列の名前は、ZEN AI LAB の自社ツール BoatData Collector Pro が出す見出しに合わせました。このツールの出力は、初期設定で、1行=1艇の表が51列、1行=1レースの表が144列あります。144列は、レースの情報18列と、艇ごとの21列×6艇です。

艇ごとの51列には、選手の級や勝率、モーターの2連対率、展示タイム、気象なども入っています。最初は上の6列だけで足ります。展示タイムの順位ごとに1着の割合を数えた結果は、競艇の展示データの見方にまとめました。

まず見本を打ち込んで、式の答えを先に知っておく

自分のデータでいきなり式を作ると、出た数字が合っているのか分かりません。先に、答えの分かっている小さな見本で試します。

次の30行は、式の確認用に作った架空の数字です。見本場A・見本場Bは実在しない場で、5レースぶんです。見本場Bの2レース目は、1号艇が転覆失格で着順が付かなかった、という想定にしました。

race_date,venue_name,race_no,boat_number,finish_position,result_status
2025-01-05,見本場A,1,1,1,1着
2025-01-05,見本場A,1,2,3,3着
2025-01-05,見本場A,1,3,2,2着
2025-01-05,見本場A,1,4,5,5着
2025-01-05,見本場A,1,5,4,4着
2025-01-05,見本場A,1,6,6,6着
2025-01-05,見本場A,2,1,3,3着
2025-01-05,見本場A,2,2,1,1着
2025-01-05,見本場A,2,3,2,2着
2025-01-05,見本場A,2,4,4,4着
2025-01-05,見本場A,2,5,6,6着
2025-01-05,見本場A,2,6,5,5着
2025-02-03,見本場A,1,1,2,2着
2025-02-03,見本場A,1,2,1,1着
2025-02-03,見本場A,1,3,3,3着
2025-02-03,見本場A,1,4,6,6着
2025-02-03,見本場A,1,5,4,4着
2025-02-03,見本場A,1,6,5,5着
2025-02-03,見本場B,1,1,1,1着
2025-02-03,見本場B,1,2,2,2着
2025-02-03,見本場B,1,3,4,4着
2025-02-03,見本場B,1,4,3,3着
2025-02-03,見本場B,1,5,6,6着
2025-02-03,見本場B,1,6,5,5着
2025-02-03,見本場B,2,1,,転覆失格
2025-02-03,見本場B,2,2,1,1着
2025-02-03,見本場B,2,3,2,2着
2025-02-03,見本場B,2,4,3,3着
2025-02-03,見本場B,2,5,5,5着
2025-02-03,見本場B,2,6,4,4着

エクセルへの入れ方です。

  1. A1 セルに貼り付けます。1行が1つのセルに入ります
  2. 貼った列を選んだまま、「データ」タブの「区切り位置」を押します
  3. 区切り文字に「カンマ」を選んで完了します。A〜F列に分かれます

見出しが1行目、データが2行目から31行目です。

式の答えは、Excel 本体ではなく、Excel の関数を再現する計算ライブラリで確かめたものです。

1行=1艇の表(A列からF列にrace_date・venue_name・race_no・boat_number・finish_position・result_status)と、そこから作る3つの集計(場ごとの1号艇の1着率・3連単の1番人気が来た割合・月ごとのレース数)の式と、見本データでの答えを並べた図

集計1: 場ごとの1号艇の1着率は、COUNTIFS 2つで割る

H2に「見本場A」、H3に「見本場B」と打ちます。I2に次の式を入れて、I3へコピーします。

=COUNTIFS(B:B,H2,D:D,1,E:E,1)/COUNTIFS(B:B,H2,D:D,1)

COUNTIFS は、条件に合う行の数を数える関数です。左の COUNTIFS は「場がH2と同じで、艇番が1で、着順が1」の行を数えます。右は「場がH2と同じで、艇番が1」の行、つまりその場のレース数です。

セルの表示形式をパーセントにすると、見本の答えは見本場Aが33.3%、見本場Bが50.0%です。

BoatData で出した艇ごとの表なら、場は C 列、艇番は J 列、着順は AU 列です。51列の表は AY 列で終わるので、右の空いた BA2 に場の名前を打ち、BB2 に次の式を入れます。

=COUNTIFS(C:C,BA2,J:J,1,AU:AU,1)/COUNTIFS(C:C,BA2,J:J,1)

失格で着順が空の行は、分母から外さない

見本場Bの2レース目は、1号艇の着順が空です。この行を分母から外すと、数字が変わります。

=COUNTIFS(B:B,H3,D:D,1,E:E,1)/COUNTIFS(B:B,H3,D:D,1,E:E,">=1")

右の COUNTIFS に「着順が1以上」を足した式です。空のセルはこの条件に合わないので、分母から消えます。見本場Bは50.0%から100.0%になります。

転覆や失格で着順が付かなかったレースも、1号艇が1着ではなかったレースです。分母に残す最初の式のほうを使います。

欠場の行は「走っていない」行として分ける

着順が空になるのは、失格だけではありません。選手が出走しなかった艇は、result_status が「欠場」になり、着順も空です。1着ではなかったのではなく、走っていない行です。

欠場の行を分母から外すなら、右の COUNTIFS に「result_status が欠場ではない」という条件を足します。見本ならF列、BoatData の表ならAV列です。

=COUNTIFS(B:B,H3,D:D,1,E:E,1)/COUNTIFS(B:B,H3,D:D,1,F:F,"<>欠場")

見本に「2025-02-03,見本場B,3,1,,欠場」の1行を足すと、最初の式では見本場Bが33.3%に下がります。この式なら50.0%のままです。確かめ終わったら、足した1行は消してください。残すと、このあとの見本の答えが合わなくなります。

ZEN の集計では、1号艇に限らず、欠場の艇がいたレースをまるごと除きました。外すかどうかを、数える前に決めておきます。

自分で決めた数え方は、表の横にメモしておくと、あとで数字を見返したときに迷いません。

集計2: 人気は、払戻の表で数える

「人気ごとの来る割合」を出したいときに気をつけることがあります。1行=1艇の表には、その艇が何番人気だったかの列がありません。

人気の数字が入っているのは、払戻の表です。1行が「そのレースで払戻のあった組み合わせ1つ」で、券種・組み合わせ・払戻金・人気が並びます。BoatData の払戻の表は10列で、bet_type(券種)がE列、popularity(人気)がH列です。

ZEN の研究用データ(2023〜24年)では、単勝と複勝の行には人気の数字が1件も入っていませんでした。3連単や2連単の行には、99.9%以上に入っています。単勝の人気ごとの1着率は、このデータからは出せません。

そこで、3連単で1番人気の組み合わせが来た割合を数えます。次の10行も架空の見本です。5レースぶんの3連単(trifecta)と2連単(exacta)で、払戻金と人気も作った数字です。

race_date,venue,race_no,race_id,bet_type,combination,payout_yen,popularity
2025-01-05,見本場A,1,20250105_A_01,trifecta,1-3-2,1180,1
2025-01-05,見本場A,1,20250105_A_01,exacta,1-3,420,1
2025-01-05,見本場A,2,20250105_A_02,trifecta,2-3-1,5630,7
2025-01-05,見本場A,2,20250105_A_02,exacta,2-3,1250,4
2025-02-03,見本場A,1,20250203_A_01,trifecta,2-1-3,3240,4
2025-02-03,見本場A,1,20250203_A_01,exacta,2-1,690,1
2025-02-03,見本場B,1,20250203_B_01,trifecta,1-2-4,1560,1
2025-02-03,見本場B,1,20250203_B_01,exacta,1-2,380,1
2025-02-03,見本場B,2,20250203_B_02,trifecta,2-3-4,8910,9
2025-02-03,見本場B,2,20250203_B_02,exacta,2-3,1570,3

別のシートに同じ手順で貼り、A〜H列に分けます。J2に次の式を入れます。

=COUNTIFS(E:E,"trifecta",H:H,1)/COUNTIFS(E:E,"trifecta")

左は「券種が3連単で、人気が1」の行、右は3連単の行の数です。見本の答えは40.0%です。

券種の条件を外して =COUNTIFS(H:H,1)/COUNT(H:H) にすると、50.0%になります。2連単の1番人気まで混ざるからです。払戻の表には券種がいくつも並ぶので、券種の条件は必ず付けます。

1番人気から5番人気までに入った割合は、人気の条件を "<=5" に変えれば出ます。見本では60.0%です。

集計3: 月ごとのレース数は、1号艇の行だけ数える

データがどの月に何レースぶんあるかを、先に数えておきます。H6に次の式を入れます。

=COUNTIFS(A:A,">="&DATE(2025,1,1),A:A,"<"&DATE(2025,2,1),D:D,1)

「日付が2025年1月1日以上で、2月1日より前で、艇番が1」の行を数えます。見本の答えは2です。2月にするなら、DATE の中を (2025,2,1) と (2025,3,1) に変えます。答えは3です。

艇番が1の行だけを数えるのは、1レースが6行あるからです。条件を外すと、レース数の6倍が出ます。

月ごとのレース数を見ておくと、「この月の1着率は何レースから出した数字か」が分かります。レース数の少ない月や場の数字は、参考として扱います。

ピボットテーブルでも、着順の内訳を出せる

式を書くのが面倒なら、ピボットテーブルでも数えられます。表の中のセルを選び、「挿入」タブの「ピボットテーブル」を押します。

  • フィルター: boat_number を入れて「1」だけを選ぶ
  • 行: venue_name
  • 列: finish_position
  • 値: race_no を入れて、集計の方法を「個数」にする

これで、場ごとに1号艇の着順の内訳が出ます。見本なら見本場Aは1着・2着・3着が1つずつ、見本場Bは1着が1つ、空白が1つです。

ZEN のデータで同じ集計をすると、54.6%と53.8%

ここからは、見本ではなく実際のデータです。ZEN BOAT LAB は BoatData で集めた研究用データベースを持っています。2023〜24年の全24場のレースで、集計1と同じ数え方をしました。

数える前に、どのレースを入れるかを決めました。欠場の艇がいたレースや、3連単の払戻が成立しなかったレースは除いています。無料で公開している1号艇の着順の記事と同じ条件です。

1号艇の1着率は54.6%でした(109,188レース)。 公開済みの記事の値と同じです。失格などで着順が付かなかった1号艇は、分母に残しています。

次に、条件を何も付けずに数え直しました。1号艇の行をすべて分母にすると、112,344レースで53.8%です。

数え方を変えただけで、0.8ポイント下がりました。 除いていた3,156レースが分母に入ったためです。どちらが正しいかではなく、何を分母にしたかで数字は動きます。人と数字を比べるときは、条件もいっしょに伝えます。

3連単の1番人気も、1番人気の記事と同じ条件で数えました。107,166レースで10.4%です。こちらも公開済みの値と同じでした。払戻の表の行をそのまま数えた集計2の式では、10.5%でほぼ同じです。

1号艇の1着率は、場によって違います。場ごとの値は、ここでは載せません。自分の場で集計1の式を使えば、同じ形で出せます。

数字はどれも過去のレースを数えたものです。この先の結果を約束するものではなく、買い方の良し悪しを示すものでもありません。

1号艇の1着率をレース番号やレースの種類で分けた結果は、競艇の1号艇の勝率にまとめました。

期間を長くすると、行は何十万にもなる

集計の式は短くても、元の表を作るのはひと仕事です。

研究用データベースでは、1年のレースは約5万6千でした。1行=1艇にすると、1年で約34万行です。2023年は55,992レース、335,952行でした。月で見ると、2023〜2025年は1か月3,948〜5,196レースです。

2023〜2025年の3年ぶんだと、1,009,512行になります。エクセルの1枚のシートに入るのは1,048,576行までです(Microsoft の「Excel の仕様と制限」)。3年でほぼ上限です。

研究用データベース全体は、2023年1月1日から2026年9月27日までの1,366日で、210,600レース・1,263,600行です。1枚のシートには入りません。

公式の公開データを自分で取って表にする方法は、競艇の過去データをダウンロードする方法に書きました。何か月分も集めるなら、取って表の形にそろえる作業を毎月くり返すことになります。

出走表(公式の番組表のファイル)を日付つきの1艇1行のCSVにするコードは、競艇の出走表をエクセルにする手順に載せています。

その作業が重くなったら、集めて Excel・CSV にするところだけツールに任せる方法もあります。ZEN の自社ツール BoatData Collector Pro は、この記事と同じ列名・1行=1艇の形で書き出せます。

集めて表にするところを任せるなら

ZEN AI LAB が作った自社ツールに、BoatData Collector Pro があります。競艇の公開データを、期間と競艇場を選んでまとめて集め、Excel・CSV にする Windows 用のツールです。この記事の研究用データベースも、このツールで集めました。

  • 出力は「レースごとに1行」と「艇ごとに1行」の2つの形です。この記事の表は、艇ごとに1行のほうです
  • Excel に出すと「レース一覧」「艇別データ」「払戻」などのシートに分かれます
  • 1枚のシートが100万行を超えると、「艇別データ_2」のように分けて出力します(ZEN の開発資料の仕様)
  • 開発時の試験では、2026年8月の1か月・24場・4,944レースの取得に390.7秒でした
  • 長い期間を Excel 形式で出すと時間がかかります。開発資料では、その場合は CSV か分割での出力を勧めています

使う前に知っておいてほしいことです。

  • 予想・買い目・自動投票の機能はありません。集めて出力するところまでです
  • 公式サイトや BOATRACE とは関係のない、非公式のツールです。データの正確性は保証していません
  • 無料版があります。取得できる期間は直近30日までです。製品版は期間を自分で選べます(保存できるのは2016年10月1日以降のレース。2026年11月に実際に取得して確かめた範囲)
  • オッズも取得できますが、初期設定ではオフです

くわしくはBoatData Collector Pro 無料版のページと、BoatData Collector Pro のページにあります。自分で取得の仕組みを作る場合の注意は、競艇のデータをAPIで取得するときの注意にまとめました。

競艇のデータを、何か月分も自分で集めて数えるなら

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)用です。

確かめたことと、データでは分からないこと

確かめたことは、次のとおりです。

  • 記事の式は、見本データ(艇ごと30行・払戻10行)を入れたエクセルのファイルを作り、Python の計算ライブラリ(formulas)で評価しました。同じ集計を Python(pandas)でも計算し、8個のセルの答えがすべて一致しました
  • BoatData の実際の出力と同じ列の並び(艇ごと51列・払戻10列)にも同じ見本を置き、列の記号を読み替えた式で8個のセルが一致しました
  • 欠場の1行を足した場合の2つの式も、見本の並びと BoatData の並びの両方で、同じ方法で確かめました
  • 51列・144列・10列は、BoatData のソースコードの列の定義から数えました
  • 54.6%・10.4% は、研究用データベースの2023〜24年を、公開済みの2本の記事と同じ条件で数え直した値です。件数まで一致しました
  • 行数・レース数は、研究用データベースの件数です。2026年のぶんは、件数だけを数えました
  • 販売ページ2つと Microsoft の仕様のページは、2026年10月18日に開いて読みました

このデータでは分からないことは、次のとおりです。

  • まだ確かめられていないこと:Microsoft Excel 本体では、式を実行していません。確かめたのは、Excel の関数を再現する計算ライブラリでの答えです。Excel で違う答えが出たら、先に見本の貼り付けがずれていないかを見てください
  • まだ確かめられていないこと:ピボットテーブルと「区切り位置」は、実際の画面で操作していません。ピボットテーブルの内訳は、Python で同じ表を作った値です
  • まだ確かめられていないこと:CSV をエクセルで開いたとき、日付が日付として読まれるかは確かめていません。集計3の答えが合わないときは、日付の列が日付になっているかを見てください
  • まだ確かめられていないこと:Google スプレッドシートなど、ほかの表計算ソフトでは試していません
  • まだ確かめられていないこと:0.8ポイントの差を、除いた理由ごとに分けてはいません

まとめ

競艇のデータ分析は、「1行=1艇」の表を縦にためれば、COUNTIFS の割り算で始められます。

  1. 日付・場・レース番号・艇番・着順・着順の状態の6列で、1レースを6行に分けて並べます
  2. 見本を貼って、見本場Aが33.3%、3連単の1番人気が40.0%、1月が2レースになるかを確かめます
  3. 自分のデータでは、月ごとのレース数と、何を分母に入れたかを数字の横に書いておきます

8 COMMENTS

競艇の出目ランキング|3連単120通りを約21万レースで数えた出目表

[…] ただし、スプレッドシートに CSV を読み込むと、3連単の組み合わせ「1-4-6」が「2001-4-6」のような日付に変わりました。式の「1-2-3」も同じように日付として扱われるので、数は合います。表を目で見るときは、組み合わせが日付になっていることに気をつけてください。ピボットテーブルで組み合わせごとの回数を一度に出す手順は、競艇のデータ分析をエクセルでに書いています。 […]

返信する

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です