CoolFace
Datasetpublic

Glloq/horse-racing-france

French Horse Racing Dataset Structured dataset of French horse racing covering 2014-01-01 → 2026-05-05, restricted to French meetings. This repository is provided "as is" under an other license. Overview Longitudinal collection of French race meetings with full race, runner, and payout records. The data is split into four normalized tables, each exposed as an independent Hub configuration. Configuration Description Rows reunions Race meetings (one row… See the full description on the dataset page: https://huggingface.co/datasets/Glloq/horse-racing-france.

sourceHugging Faceotherupdated 15d agoView on Hugging Face
0likes69downloads
Dataset Card

French Horse Racing Dataset

Structured dataset of French horse racing covering 2014-01-01 → 2026-05-05, restricted to French meetings.

This repository is provided "as is" under an other license.

Overview

Longitudinal collection of French race meetings with full race, runner, and payout records. The data is split into four normalized tables, each exposed as an independent Hub configuration.

ConfigurationDescriptionRows
reunionsRace meetings (one row per French meeting)~20,769
coursesRaces (one row per race)~157,142
participantsRunners (declared starters)~1,957,901
rapportsDefinitive payouts (settlement records)~2,708,247

Additional full-fidelity sources are archived under data/source.

Schema & Join Key

All tables share the `raceKey` join key, formatted as:

text
YYYY-MM-DD_R{numOfficielReunion}_C{numCourse}
  • —courses.ordreArrivee is the finishing-order target (result).
  • —Join with participants on raceKey.

Note: reunions is defined at the meeting level and therefore has no raceKey; join it to courses via reunionKey.

Parquet Files (data/parquet)

Clean, flat, directly loadable tables. Each table is a separate configuration because the schemas differ:

python
from datasets import load_dataset

reunions = load_dataset("annaelmoussa/horse-racing-france", "reunions", split="train")
courses = load_dataset("annaelmoussa/horse-racing-france", "courses", split="train")
participants = load_dataset("annaelmoussa/horse-racing-france", "participants", split="train")
rapports = load_dataset("annaelmoussa/horse-racing-france", "rapports", split="train")

Available configurations: reunions, courses, participants, rapports.

Each table is sharded into 5 Parquet files (suffix -0000 through -0004).

Full-Fidelity Sources (data/source)

The .tar.gz archives contain the unflattened data for full fidelity:

  • —raw.tar.gz — raw JSON responses (source cache, kept so new columns can be derived later).
  • —normalized.tar.gz — normalized JSONL files, each with the nested raw field.

Validation Status

Final validation performed:

  • —0 duplicate race keys.
  • —0 races without participants.
  • —0 mismatches between nombreDeclaresPartants and participant rows.
  • —27 finalized races without an arrival (2014/2015 only, source gap).
  • —4423 races whose programme announces definitive payouts but returned no content (source gaps, mostly 2017/2018).