Overwatch Ranked Data

Collecting and curating a public dataset on Overwatch ranked matches

April 18, 2018

Table of Contents

I started playing Overwatch towards the end of Season 2, and I thought it would be interesting to start collecting data from my own ranked games. The goal was to maintain a dataset of Overwatch ranked data that I could analyze to better understand how skill rating (SR) changes as a function of, for example, win/loss streaks and medals. I have made the dataset public in case anyone wants to run their own statistics or visualizations. However, I only have a few seasons' worth of data as I took a break from the game after Season 4 and picked it up again during Season 9.

The data is from my own ranked matches (1500-2600 SR), and the values are taken from screenshots before and after each match. The values were manually typed into the spreadsheet and include variables such as number of medals, eliminations, healing, etc. I’m (slowly) working on a Python tool that uses the Google Cloud Vision API to capture data directly from the screenshots and insert them into Google Sheets. However, that’s a long way off due to limited time. If anyone knows of a more efficient way, let me know. I really wish Blizzard had an API for this...

All of the data can be found in my GitHub repo or on Kaggle.

Overwatch ranked data preview

Data variables

  • Game # – ID of the game within that season
  • Start SR – Skill rating before starting the game
  • End SR – Skill rating after the game
  • SR Change – Change in skill rating
  • Team SR avg – My team’s average skill rating, taken from the match-up screen before character selection
  • Enemy SR avg – Enemy team’s average skill rating, taken from the match-up screen before character selection
  • Team Stack – Largest number of players on my team that are grouped together
  • Enemy Stack – Largest number of players on the enemy team that are grouped together
  • Role 1 – My primary role throughout the match (offense, defense, tank, support)
  • Role 2 – My secondary role (if any) throughout the match (offense, defense, tank, support)
  • Result – Win/loss/draw
  • Streak – Number of consecutive games that have been won/lost. Losing streaks are negative, winning streaks are positive
  • Leaver – Did any of the players leave the match towards the end of the game?
  • Map – Game map

The following variables were all taken from the post-game stats screen. I’m not 100% sure what the "career" values represent – they are averages, and I believe they work on a per-character basis:

  • Match Time – Length of the match in “MM:SS” format
  • Elim – Number of eliminations
  • Elim_career – Number of career eliminations
  • Elim_medal – Elimination medal (if any)
  • Obj_kills – Number of objective kills
  • Obj_kills_career – Number of career objective kills
  • Obj_kills_medal – Objective kills medal (if any)
  • Obj_time – Objective time
  • Obj_time_career – Career objective time
  • Obj_time_medal – Objective time medal (if any)
  • Dmg – Damage done
  • Dmg_career – Career damage done
  • Dmg_medal – Damage done medal (if any)
  • Heal – Healing done
  • Heal_career – Career healing done
  • Heal_medal – Healing done medal (if any)
  • Death – Number of deaths
  • Death_career – Number of career deaths

There is no API for this data, so it had to all be grabbed manually...

Caveats about the data

  • These are fairly low-ranked games (mostly around gold), and the relationships between variables may change completely at lower/higher ranks.
  • If someone on a team is doing their placement matches, no average SR is given by the game. In this case, I denoted the teams' average SR with P.
  • For team/enemy stack sizes, it’s possible for there to be multiple groups within each team. In that case, I just used the largest sized group.
  • I didn’t track the individual characters that I played during the games, as it’s possible to change characters multiple times. Therefore, I only tracked the roles I played (offense, defense, tank, support).
  • Yes, I mostly play support (Moira and Lucio, if you’re wondering…).
  • There are more winning streaks than losing streaks as I didn’t want to tank games just for the sake of data collection.
  • It’s difficult to know what Blizzard considers a leaver, so if anyone was missing when the score screen popped up, they were considered a leaver regardless of if anyone left in the middle.
  • The performance statistics (e.g., eliminations) are totals across the entire match, not split by characters played (this would be quite time-consuming to track).
  • I didn’t track individual performance statistics during earlier seasons.
  • There are some additional variables that I would like to capture. However, Overwatch ranked data is pretty difficult to track in any detail or in large quantities. It’s either too time-consuming (each player’s current skill rating) or very difficult to get without some sort of API access (average stats of a character at a particular skill rating, across all players in the game).

I’ll keep updating this over time as I collect more ranked data. Let me know if you think there is additional data I should be tracking, or any particular analyses you’d like to see.

You can find my analysis of this data in my other Overwatch blog posts — for example, a post about data visualization can be found here. You can also find analyses by other users on Kaggle.

My Overwatch profile can be found here if you’re interested: Winegum-1637.

Share: