IPL by the Numbers
70,208 deliveries · 298 matches · 5 seasons analysed
"Everyone has IPL opinions. We used numbers."
How the Data Pipeline Works
From raw CSV to interactive charts — here's the journey your data takes.
Load CSV
Reads 17 MB of ball-by-ball delivery data spanning 2015–2019 using Pandas.
Clean & Validate
Checks all 20 required columns, coerces numeric types, and drops malformed rows.
Compute Metrics
Aggregates 8 analytical dimensions — toss impact, phases, top performers, venues, and more.
Export JSON
Writes validated results to dashboard_data.json, consumed by Chart.js in the browser.
Visual Analysis
Interactive charts powered by Chart.js, rendered from the computed metrics.
🪙 Toss Outcome vs Match Result
📈 Phase-wise Run Comparison
🏏 Top 5 Run Scorers
🎳 Top 5 Wicket Takers
🥧 Dismissal Type Breakdown
📉 Seasonal Run Trend
🏟️ Top 5 Venues by Match Count
🚀 Scoring Acceleration by Over
Franchise Leaderboard
Total match wins across all 5 seasons.
Season Spotlight
Drill into any individual season — see the champion, award winners, and key stats.
Deep Dive: Your Questions Answered
Data-backed answers to the four big IPL questions.
How we computed this: The Python script de-duplicated matches by match_id, then compared each match's toss_winner to winner. Matches where they're the same count as "toss-winner wins".
How we computed this: Each delivery's over number was binned into phases (0–5 = Powerplay, 6–14 = Middle, 15–19 = Death). We summed runs per innings per phase, then averaged across matches, splitting by whether the batting team won that match.
How we computed this: Batting: grouped by batter, summed runs_batter. Bowling: filtered wickets to bowler-credited kinds (caught, bowled, lbw, stumped, caught and bowled, hit wicket — excluding run-outs), then grouped by bowler and counted.
1. The Over-19 Explosion: The average scoring rate per ball follows a distinctive U-curve across the innings, dipping from 1.43 in over 2 to 1.11 in over 6, then steadily climbing to a peak of 1.81 RPB (Runs Per Ball) in over 19 — a 63% surge from the mid-innings trough. Death over slogging is not just a feeling; the data proves it.
2. Catching is King: A staggering 62.7% of all dismissals are catches. Combined with caught-and-bowled (3.0%), nearly two-thirds of wickets fall to a fielder's hands. Bowled (16.3%) is a distant second.
3. 2018: The Run Feast: Season 2018 produced 19,901 total runs — the highest across all five seasons, roughly 1,500 more than 2015. Yet 2019 saw a slight pullback to 19,434, hinting at evolving strategies or conditions.
4. Mumbai's Dominance: Mumbai Indians led the franchise leaderboard with 44 wins, followed by Sunrisers Hyderabad (42) and KKR (39). MI's consistency made them the team to beat across the era.
How we discovered this: Over scoring was computed by grouping every delivery by over number and averaging runs_total. Dismissal distribution used value_counts() on wicket_kind with percentage normalisation. Season trends summed runs_total grouped by season.
Key Takeaways
- Toss winners converted the advantage into match wins 54% of the time — a real but modest edge that proves execution trumps luck.
- Middle overs (6–14) created the largest winner-loser gap at ~7.75 runs, making them the phase that truly separates champions from contenders.
- V Kohli led the 5-year batting chart with 2,780 runs, while B Kumar topped wickets with 89 — both winning their races by razor-thin margins.
- The scoring rate curve forms a distinctive U-shape: high in powerplay, dips in the middle, then rockets to 1.81 RPB (Runs Per Ball) in over 19.
- Nearly two-thirds (62.7%) of all dismissals are catches — fielding quality is the single biggest factor in taking wickets.
- Eden Gardens hosted the most matches (37), edging Wankhede (36), making Kolkata the unofficial IPL capital of this era.