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.
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.
Source Code
---title: "Midterm Portfolio"subtitle: "DPS Analysis"author: "Cody Appa"date: "03/25/2023"image: "WowImage.jpg"code-fold: truecode-tools: truedescription: "Analysis of Wow dps by class and fight"---## PreambleThis 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.## DataData 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.```{r}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)```## VisualizationsTo 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 TypeThis 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.```{r}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 RankingsThis graph shows the number of times each class appears in the top 10 of each boss fight in AOE heavy boss encounters.```{r}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 RankingsThis graph shows the number of times each class appears in the top 10 of each bossfight in mixed AOE and single target boss encounters.```{r}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 RankingsThis graph shows the number of times each class appears in the top 10 of each bossfight in mixed AOE and single target boss encounters.```{r}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 ClassFor 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!!```{r}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)```## ConclusionThe 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.