This project analyzes Overwatch Champion Series (OWCS) EMEA Stage 2 match data using PostgreSQL and Python.
.
├── owcs_analysis.py # Python script to generate charts
├── match_data_analysis.sql # Full cleaned SQL query file
├── owcs25_emea_stage2.csv # The dataset used
├── top_..._... # PNG of charts generated by the Python code
└── README.md # Project documentation
- Team map and match win rates (per phase)
- Hero pick and ban rates
- Hero win rates (min 10 games)
- Player average performance (damage, healing, elims)
- Saudi team head-to-head win tracking
- PostgreSQL 15
- Python 3.10
- pandas
- seaborn
- matplotlib
- Run all SQL in
match_data_analysis.sqlon a PostgreSQL database withmatch_data_rawtable. - Copy the SQL query results (as CSV or DataFrame) into
owcs_analysis.pyas needed. - Run the Python script:
python owcs_analysis.pyCharts will be viewed in VSCode not saved.
- Team win rates by phase
- Top 20 banned heroes
- Team map winrate
- Most frequent hero switches
-
Hero Win Rates
Pharah led with the highest map win rate (68.8%), followed by Kiriko (64.3%) and Symmetra (61.8%) showing their strong impact when picked. -
Most Banned Heroes
Lucio (29 bans), D.Va (23), and Freja (19) were the most banned heroes, reflecting their high strategic threat across both team comps and tempo control. Junkerqueen remained either under-picked or had low win rates suggesting their minimal impact in EMEA Stage 2 until playoffs where the hero got a buff which caused bans to happen. -
Versatility by Role
Skai (Support), Pak (DPS), and Heesung (Tank) demonstrated the highest flexibility, each playing 9 unique heroes a key trait in dynamic matchups. -
Team Performance by Phase
Al Qadsiah maintained a perfect 100% win rate across both Regular Season and Playoffs. Twisted Minds followed with a strong 71.4% in the Regular Season.
- Matches are counted from the moment “Assemble Heroes” starts, not when the team fight begins.
- Switches made at the last second to touch the objective are only counted if the team won the fight. Otherwise, they’re ignored.
- Symmetra (for TP) and Lucio (for speed) used only briefly at the start are not counted as starting heroes, unless they were used in the first fight.
- All match data was gathered from OW Esports YouTube VODs.
- Final scoreboard verification was done using ObsSojourn VODs.
Author: [Majed Almusayhil]
Data Source: Manually curated OWCS EMEA Stage 2 dataset (2025)



