CoolFace
Datasetpublic

wolframko/pipes-lie-embargo-dominus

Betty Dota 2 Pro Matches Dataset 9,388 professional Dota 2 matches parsed from replay files with per-second game state snapshots and combat log events. Dataset Structure matches.parquet (9,388 rows) One row per match. Contains metadata, STRATZ player statistics, and draft data. Column Type Description match_id int64 Dota 2 match ID league_name string Tournament name league_tier string PROFESSIONAL, MAJOR, etc. duration_sec int64… See the full description on the dataset page: https://huggingface.co/datasets/wolframko/pipes-lie-embargo-dominus.

sourceHugging Facemitupdated 6mo agoView on Hugging Face
0likes223downloads
Dataset Card

Betty Dota 2 Pro Matches Dataset

9,388 professional Dota 2 matches parsed from replay files with per-second game state snapshots and combat log events.

Dataset Structure

matches.parquet (9,388 rows)

One row per match. Contains metadata, STRATZ player statistics, and draft data.

ColumnTypeDescription
match_idint64Dota 2 match ID
league_namestringTournament name
league_tierstringPROFESSIONAL, MAJOR, etc.
duration_secint64Match duration in seconds
radiant_winboolTrue if Radiant won
radiantteamid / direteamidint64Team IDs
p0..p9heroidint64Hero ID per player (STRATZ)
p0..p9_kills/deaths/assistsint64Final KDA per player
p0..p9_gpm/xpm/networthint64Economy stats per player
p0..p9gpmper_minlist[int]Gold per minute time-series
p0..p9networthper_minlist[int]Net worth per minute
p0..p9herodamageperminlist[int]Hero damage per minute
stratzpbhero_idlist[int]STRATZ pick/ban hero IDs
replaypbhero_idlist[int]Replay-parsed pick/ban hero IDs

ticks/ (189,120,930 rows)

One row per game-tick per hero. ~1,500 ticks per match x 10 heroes. Per-second snapshots of full game state.

ColumnTypeDescription
match_idint64Match ID
tickint32Raw tick number
game_timefloatGame time in seconds
slotint8Player slot (0-9)
herostringHero internal name
x, yfloatMap position coordinates
hp, max_hpint32Current and max health
mana, max_manafloatCurrent and max mana
goldint32Current gold
net_worthint32Total net worth
xpint32Total experience
kills, deaths, assistsint16KDA at this moment
last_hits, deniesint16CS at this moment
levelint8Hero level
str, agi, int_floatAttribute values
armorfloatArmor value
move_speedint16Movement speed
item0..item5stringItems in 6 inventory slots

events/ (295,810,843 rows)

One row per combat log event. Damage, kills, gold gains, XP, healing, purchases.

ColumnTypeDescription
match_idint64Match ID
tickint32Raw tick number
game_timefloatGame time in seconds
timestampfloatExact event timestamp
event_typestringDOTACOMBATLOGDAMAGE, DEATH, GOLD, HEAL, PURCHASE, _XP
sourcestringSource entity (e.g. npcdotahero_invoker)
targetstringTarget entity
valueint32Damage/gold/xp amount
itemstringItem name (for PURCHASE events)

Statistics

  • —Matches: 9,388 professional games from 2025
  • —Ticks: 189,120,930 per-second hero state snapshots
  • —Events: 295,810,843 combat log entries
  • —Size: 5.97 GB compressed Parquet (from 103 GB JSON)
  • —Source: Valve replay files (.dem) parsed with manta + STRATZ API metadata

Usage

python
from datasets import load_dataset

# Load matches metadata
matches = load_dataset("wolframko/pipes-lie-embargo-dominus", data_files="matches.parquet", split="train")

# Load ticks (large - use streaming)
ticks = load_dataset("wolframko/pipes-lie-embargo-dominus", data_files="ticks/*.parquet", split="train", streaming=True)

# Load events
events = load_dataset("wolframko/pipes-lie-embargo-dominus", data_files="events/*.parquet", split="train", streaming=True)
python
import pandas as pd

# Quick analysis with pandas
matches_df = pd.read_parquet("hf://datasets/wolframko/pipes-lie-embargo-dominus/matches.parquet")
print(f"Matches: {len(matches_df)}, Radiant winrate: {matches_df.radiant_win.mean():.1%}")

Data Pipeline

  1. 1.Fetch: Match IDs from STRATZ GraphQL API (pro leagues 2025)
  2. 2.Download: Replay files (.dem.bz2) from Valve CDN
  3. 3.Parse: Per-second hero states + combat log via manta (Go)
  4. 4.Enrich: Player/team stats from STRATZ API
  5. 5.Convert: JSON to Parquet with full validation

License

MIT