The Indian Premier League (IPL) launched in 2008 and fundamentally changed cricket forever. But beyond the fireworks and celebrity owners, what does the data actually tell us?
This project analyzes committed IPL summary datasets across 1,169 IPL matches spanning 18 seasons (2008-2025) to answer three key questions. The latest committed match date is 2025-06-03.
π Q1: How has batting evolved? Are teams scoring faster than ever?
π Q2: Has the bat-vs-ball balance shifted? Are bowlers endangered?
π Q3: Is the toss advantage a myth or reality?
| # | Finding | Evidence |
|---|---|---|
| 1 | The Run Explosion is Real | Run rate rose about 17% from 2008-2010 to 2023-2025, with sixes per match up about 71.5% |
| 2 | Bowlers Have Adapted, Not Died | Despite soaring economy rates, wickets per match remain stable |
| 3 | The Toss is (Mostly) Irrelevant | Toss winner match-win rate is near 50% across completed matches, though chasing has become preferred in recent seasons |
IPL scoring did not rise evenly. Six-hitting growth and high-scoring recent seasons changed the shape of match totals, while wickets remained a meaningful counterweight for bowlers.
The notebook contains reproducible Plotly visualizations based only on the CSVs committed in this repository:
- The Run Explosion - average match runs and run rate trend
- The Boundary Revolution - fours and sixes per match
- Bowling Under Pressure - economy and wicket-taking trends
- The Great Toss Debate - toss-win conversion and field-first preference
- All-Time Run Scorers - top batters colored by strike rate
- Top Wicket Takers - top bowlers colored by economy
ipl-evolution-data-analysis/
βββ IPL_Evolution_Analysis.ipynb # π Main analysis notebook (submission)
βββ README.md # π This file
βββ data/
β βββ ipl_matches.csv # π 1,169 match summaries
β βββ ipl_batting_stats.csv # π Player batting stats by season
β βββ ipl_bowling_stats.csv # π³ Player bowling stats by season
β βββ DATASET.md # π§Ύ Source, coverage, and limitations card
βββ scripts/
β βββ validate_data.py # β
Validate committed CSVs
β βββ summarize_findings.py # π Recompute README headline claims
β βββ process_data.py # π§ Optional raw data -> clean datasets pipeline
β βββ create_notebook.py # π Notebook generator script
pip install pandas numpy plotly matplotlib seaborn jupyterpython3 scripts/validate_data.py
python3 scripts/summarize_findings.py
python3 scripts/summarize_findings.py --verify-docs
python3 -m unittest discover -s testspython3 scripts/create_notebook.pyjupyter notebook IPL_Evolution_Analysis.ipynbscripts/process_data.py expects the large raw IPL Cricsheet CSV archive under data/ipl_raw/. That raw archive is intentionally not committed. When available locally:
python3 scripts/process_data.py
python3 scripts/validate_data.py
python3 scripts/create_notebook.py- Source: Cricsheet.org β Open-source ball-by-ball cricket data
- Committed Format: CSV summary files for matches, batting-by-season, and bowling-by-season
- Processing: Optional raw match CSVs can be parsed into structured datasets using Python/Pandas
- Current committed data: 1,169 match summaries plus player-season batting and bowling summaries; latest committed match date is 2025-06-03
- Coverage Card:
data/DATASET.md
| Category | How |
|---|---|
| π Best Storyteller | Full end-to-end narrative with clear questions, analysis, and conclusions |
| π Best Data Visualization | Six focused interactive Plotly charts with a premium dark theme |
| π‘ Sherlock "Aha" Moment | Scoring growth + six-hitting pressure + toss myth |
| π Best Original Dataset | Summary datasets processed from open Cricsheet data |
scripts/validate_data.pychecks schema, exact 2008-2025 season coverage, non-negative metrics, date/season consistency, unique player-season rows, and recomputed strike rate/economy values.scripts/summarize_findings.pyrecomputes the README headline numbers from committed CSVs only, including toss calculations that exclude no-result matches.scripts/summarize_findings.py --verify-docsfails when headline README or dataset-card claims drift from the committed CSVs.scripts/create_notebook.pyis the source of truth forIPL_Evolution_Analysis.ipynb; update the script first, then regenerate.
Made with β€οΈ and π for the Codedex February 2026 Dataset Challenge