DPS Analysis

Analysis of Wow dps by class and fight
Author

Cody Appa

Published

March 25, 2023

Preamble

This project takes the top 10 damage per second (DPS) from the game World of Warcraft from the online log database for every boss fight in the raid. I then classified the bosses by whether they were area of effect (AOE), Single target, or a mix of both. This projects goal is to analyze all of the classes in the game by the top 10 of every fight and determine which classes do the most damage on which fights/fight styles in the game.

Data

Data was acquired from the Warcraftlogs website https://www.warcraftlogs.com/ using the boss rankings for each boss fight. Warcraftlogs is used by all top guilds and most casual players to compare their DPS rankings to eachother and break down individual performances. I took this data from the top 10 rankings (parses) for each boss in the patch of 10.0.2 so data may be dated.

Code
suppressPackageStartupMessages(library(tidyverse))
suppressPackageStartupMessages(library(scales))
library(tidyverse)
library(dplyr)
library(ggplot2)
library(readxl)
library(scales)
DPSsheet<-read.csv("DataVizMidterm - Sheet1.csv")
MidtermDictionary<-read_excel("MidtermSheet.xlsx")
knitr::kable(MidtermDictionary)
Attribute Type Description
Class Categorical The class being utilized by the player.
DPS Quantitative The damager per second done by the player by the end of the boss fight.
Boss Categorical The boss encounter that was defeated to generate the data.
Rank Ordinal Ranking 1-10 for the top 10 players by DPS.
Fight.Type Categorical Area of effect (AOE), Single target, or a mix of both.
Appearance Ordinal Each player who reaches top 10 gets a 1 to normalize ranking.

Visualizations

To help best determine which classes do the most damage on the basis of fight type, I created a stacked bar for each class based on how many times they show up in the top 10 ranking for each type (AOE, Single target, or mixed). I then broke that graph up into each type for easier visualization. Lastly I did a facet of each boss to show number of times each class hit top 10 by boss.

Top 10 ranking by Fight Type

This graph visualizes the number of times each class appears in the top 10 for every encounter type in the raid. Use this, as well as the graphs below to decide which types of DPS class to bring to each encounter. The graph has been further broken down into each different fight type for convenience.

Code
ggplot(DPSsheet, aes(x = reorder(Class, -Appearance, FUN = sum), y=Appearance, fill = Fight.Type)) +
  geom_col()+
  labs(title = "Number of Times in Top 10 per Fight Type", caption = "Figure 1: How often each class appears in the top 10 ranking per fight type", y="Number of Times in Top 10", x ="Class") +
  theme(plot.caption = element_text(hjust = .5)) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

AOE Fight Rankings

This graph shows the number of times each class appears in the top 10 of each boss fight in AOE heavy boss encounters.

Code
test<-as.data.frame(table(DPSsheet$Class, DPSsheet$Fight.Type))  

ggplot(test%>%
         filter(Var2 == "AOE"), aes(x = reorder(Var1, -Freq), y = Freq, fill = Var2)) +
  geom_col() +
  labs(title = "Which Class is Best in AOE Situations",
       caption = "Figure 2: Times each class appears in the top 10 ranking in AOE fights",
       y = "Number of Times in Top 10", x="Class") +
  theme(plot.caption = element_text(hjust = .5)) +
  theme(legend.position = "none")+
  theme(axis.text.x = element_text(angle = 45, hjust = 1))+
  ylim(0,11)

Single Target Rankings

This graph shows the number of times each class appears in the top 10 of each bossfight in mixed AOE and single target boss encounters.

Code
ggplot(test%>%
         filter(Var2 == "Single Target"), aes(x = reorder(Var1, -Freq), y = Freq, fill = Var2)) +
  geom_col(fill = "#709BE1") +
  labs(title = "Which Class is Best in Single Target Situations",
       caption = "Figure 3: Times each class appears in the top 10 ranking in Single Target fights",
       y = "Number of Times in Top 10", x = "Class") +
  theme(plot.caption = element_text(hjust = .5)) +
  theme(legend.position = "none")+
  theme(axis.text.x = element_text(angle = 45, hjust = 1))+
  ylim(0,11)

Mixed Fight Rankings

This graph shows the number of times each class appears in the top 10 of each bossfight in mixed AOE and single target boss encounters.

Code
ggplot(test%>%
         filter(Var2 == "Mixed"), aes(x = reorder(Var1, -Freq), y = Freq, fill = Var2)) +
  geom_col(fill = "#54D16C") +
  labs(title = "Which Class is Best in Mixed Situations",
       caption = "Figure 4: Times each class appears in the top 10 ranking in mixed single target and AOE fights",
       y = "Number of Times in Top 10", x = "Class") +
  theme(plot.caption = element_text(hjust = .5)) +
  theme(legend.position = "none")+
  theme(axis.text.x = element_text(angle = 45, hjust = 1))+
  ylim(0,11)

DPS Per Boss by Class

For if you either aren’t sure what fight type a boss is, or if you want to see which classes excel at specific boss fights I included the DPS values for each class per boss fight. Disclaimer: this graph was made using total damage values and therefor is only accurate in showing the total amount of dps by specific classes for those fights. This is not an average!!

Code
ggplot(DPSsheet, aes(x = Class, y=DPS, fill =Class))+
  geom_col(position = "stack")+
  labs(title = "Top DPS by Class", caption = "Figure 5: DPS per class facetted by boss") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1),
        axis.text.x.bottom = element_blank())+ 
  theme(plot.caption = element_text(hjust = .5))+
  facet_wrap(~Boss)+
  theme(axis.title.x = element_blank())+
  scale_fill_manual(values = c("red", "#B01AAB", "orange", "#219864", "green", "#51CDCD", "#51CD92", "grey", "yellow", "blue", "purple", "brown"), drop = FALSE)

Conclusion

The goal of this project was to determine the best classes in WoW as of patch 10.0.2 for raiding based on each boss and the fight type. The conclusion I came to is that Hunter and Mage are the two best classes in the game as of this patch in terms of pure damage numbers. If you want more pure single target then use a mage, and if you want more AOE then use a hunter. Other classes are not totally useless, however, as if you want more specialized and diverse groups their are classes you can take situationally i.e rogue or warlock for pure single target or druid for AOE.