Information

This report analyzes the League of Legends Champions 2024 dataset to provide insights into champion characteristics, roles release trends, difficulty levels, and balance updates as of 2024. Our goals are to:

Data can be accessed from here.

Champion Release Frequency by Year

data = data %>%
  mutate(Release_Date = dmy(Release.Date), 
         Release_Year = year(Release_Date))

release_trend = data %>%
  group_by(Release_Year) %>%
  summarise(Champion_Count = n()) %>%
  arrange(desc(Release_Year))

release_trend
## # A tibble: 16 × 2
##    Release_Year Champion_Count
##           <dbl>          <int>
##  1         2024              2
##  2         2023              4
##  3         2022              5
##  4         2021              4
##  5         2020              6
##  6         2019              5
##  7         2018              3
##  8         2017              5
##  9         2016              6
## 10         2015              5
## 11         2014              6
## 12         2013              8
## 13         2012             19
## 14         2011             24
## 15         2010             24
## 16         2009             42

The release frequency of League of Legends champions each year provides insights into the game’s evolution and the developers’ efforts to keep the game dynamic. By examining the number of champions released each year, we can identify trends in champion additions over time, such as periods of high release activity which may correlate with major game play overhauls or strategic shifts in the game’s direction.

ggplot(release_trend, aes(x = Release_Year, y = Champion_Count)) +
  geom_bar(stat = "identity", fill = "skyblue", color = "black") +
  labs(title = "League of Legends Champion Release Trends",
       x = "Release Year",
       y = "Number of Champions Released")

Interpretation

The bar plot above shows the yearly count of newly introduced champions. A steady increase in releases in the early years likely reflects efforts to diversify gameplay and build up the champion roster. Peaks in champion releases could indicate phases where the game required fresh content to maintain player engagement or when substantial updates created opportunities for new character roles. In recent years, a gradual decrease in new champion releases may suggest a more balanced roster where existing champions are adjusted rather than new ones added, pointing towards a mature phase in the game’s life cycle focused on refining and balancing existing characters.

Champion Class Distribution

class_distribution = data %>%
  group_by(Classes) %>%
  summarise(Champion_Count = n()) %>%
  arrange(desc(Champion_Count))

class_distribution
## # A tibble: 27 × 2
##    Classes    Champion_Count
##    <chr>               <int>
##  1 Marksman               21
##  2 Diver                  15
##  3 Vanguard               15
##  4 Juggernaut             14
##  5 Specialist             14
##  6 Assassin               13
##  7 Skirmisher             13
##  8 Battlemage             11
##  9 Burst                  11
## 10 Enchanter               8
## # ℹ 17 more rows

Champion classes in League of Legends are designated based on their gameplay styles and primary roles, such as Fighter, Mage, Marksman, Tank, and Support. Analyzing the distribution of champions across these classes reveals which types of playstyles are most represented and highlights potential areas where certain roles might be either abundant or underrepresented.

ggplot(class_distribution, aes(x = Classes, y = Champion_Count)) +
  geom_bar(stat = "identity", fill = "yellow", color = "black") +
  labs(title = "League of Legends Champion Classes",
       x = "Different Classes",
       y = "Count of Classes") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1, size = 10))

Interpretation

The bar plot above illustrates the distribution of champions across different classes. From the data, we observe that certain classes, like Fighters and Mages, are among the most populated, suggesting a high demand for champions that can fulfill flexible, damage-focused roles. In contrast, fewer champions appear in the Support class, possibly reflecting the specialized nature of the role or a lower player demand compared to other classes. This distribution helps game developers identify class imbalances and may inform future champion design, adding new champions to underrepresented classes to enhance gameplay variety and team compositions.

Champion Difficulty Level Breakdown

difficulty_distribution = data %>%
  group_by(Difficulty) %>%
  summarise(Champion_Count = n()) %>%
  arrange(desc(Champion_Count))

difficulty_distribution
## # A tibble: 6 × 2
##   Difficulty        Champion_Count
##   <chr>                      <int>
## 1 Novice                        43
## 2 Intermediate                  38
## 3 Beginner                      29
## 4 Intermediate_Plus             28
## 5 Advanced                      15
## 6 Expert                        15

The difficulty rating of each League of Legends champion gives players an idea of how challenging a champion is to master. This rating is important as it helps players choose champions that match their skill level, making gameplay more accessible for beginners and offering depth for experienced players. Analyzing the distribution of champions by difficulty level reveals which difficulty levels are most common and helps assess the game’s accessibility.

ggplot(difficulty_distribution, aes(x = reorder(Difficulty, -Champion_Count), y = Champion_Count)) +
  geom_bar(stat = "identity", fill = "lightgreen", color = "black") +
  labs(title = "Champion Difficulty Level Breakdown",
       x = "Difficulty Level",
       y = "Number of Champions")

Interpretation

The bar plot above shows the distribution of champions across different difficulty levels. We can see that most champions are of medium difficulty, indicating a balanced approach by game developers to cater to players of varied skill levels. Champions with high difficulty are less common, likely catering to advanced players seeking more complex gameplay mechanics. This balance suggests an intentional design to ensure both beginners and experienced players have suitable options, promoting both accessibility and skill growth within the game.

Champion Cost by Role (Blue Essence & RP)

champions_role = data %>% separate_rows(Role, sep = ",")
cost_by_role = champions_role %>%
  group_by(Role) %>%
  summarise(Average_Blue_Essence = mean(Blue.Essence),
            Average_RP = mean(RP)) %>%
  arrange(desc(Average_Blue_Essence))

cost_by_role
## # A tibble: 5 × 3
##   Role    Average_Blue_Essence Average_RP
##   <chr>                  <dbl>      <dbl>
## 1 Middle                 3439.       740.
## 2 Top                    3182.       715 
## 3 Bottom                 3031.       683.
## 4 Support                2890.       677.
## 5 Jungle                 2812.       663.
cost_by_role_long=cost_by_role %>%
  pivot_longer(cols = c(Average_Blue_Essence, Average_RP),
               names_to = "Cost_Type",
               values_to = "Cost")

cost_by_role_long
## # A tibble: 10 × 3
##    Role    Cost_Type             Cost
##    <chr>   <chr>                <dbl>
##  1 Middle  Average_Blue_Essence 3439.
##  2 Middle  Average_RP            740.
##  3 Top     Average_Blue_Essence 3182.
##  4 Top     Average_RP            715 
##  5 Bottom  Average_Blue_Essence 3031.
##  6 Bottom  Average_RP            683.
##  7 Support Average_Blue_Essence 2890.
##  8 Support Average_RP            677.
##  9 Jungle  Average_Blue_Essence 2812.
## 10 Jungle  Average_RP            663.

In League of Legends, each champion has an associated cost in terms of Blue Essence (in-game currency) and Riot Points (premium currency). Analyzing the average cost by champion role provides insights into the accessibility and perceived value of champions in different roles. This analysis helps players understand if certain roles generally require more resources to unlock, which might influence role selection for new players.

ggplot(cost_by_role_long, aes(x = Role, y = Cost, fill = Cost_Type)) +
  geom_bar(stat = "identity", position = "dodge", color = "black") +
  labs(title = "Average RP and Blue Essence by Role",
       x = "Role",
       y = "Average Cost",
       fill = "Cost Type")

Interpretation

The bar plot above illustrates the average Blue Essence and Riot Points required to unlock champions across different roles. Roles with higher average costs, such as Mid or Top, suggest that these champions may be more popular or impactful in gameplay, justifying a premium value. Roles with lower costs, such as Support, indicate a more accessible entry point for players. This cost structure likely reflects the game’s design, encouraging players to try various roles while strategically balancing high-demand roles with increased investment.

Base HP and Base Mana by Class

hp_mana_by_class = data %>%
  group_by(Classes) %>%
  summarise(Average_HP = mean(Base.HP),
            Average_Mana = mean(Base.mana)) %>%
  arrange(desc(Average_HP))

hp_mana_by_class_ = hp_mana_by_class %>%
  pivot_longer(cols = c(Average_HP, Average_Mana),
               names_to = "Stat_Type",
               values_to = "Value")

hp_mana_by_class
## # A tibble: 27 × 3
##    Classes            Average_HP Average_Mana
##    <chr>                   <dbl>        <dbl>
##  1 Assassin  Catcher        670          415 
##  2 Juggernaut               657.         222.
##  3 Marksman  Catcher        655          300 
##  4 Vanguard                 648.         320.
##  5 Enchanter  Warden        645          300 
##  6 Warden  Skirmisher       640          345 
##  7 Assassin                 639.         284.
##  8 Diver                    633.         252.
##  9 Marksman  Assassin       630          350 
## 10 Skirmisher               625.         213.
## # ℹ 17 more rows

In League of Legends, each champion’s starting attributes, such as Base HP (Health Points) and Base Mana, significantly impact their early-game effectiveness and role-specific playstyle. Analyzing these stats by champion class helps to identify how classes are structured in terms of durability and resource availability, which in turn influences their role on the battlefield.

ggplot(hp_mana_by_class_, aes(x = Classes, y = Value, fill = Stat_Type)) +
  geom_bar(stat = "identity", position = "dodge", color = "black") +
  labs(title = "Average Base HP and Base Mana by Role",
       x = "Classes",
       y = "Average Value",
       fill = "Stat Type") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Interpretation

The bar plot above displays the average Base HP and Base Mana across different champion classes. As expected, classes like Tanks have higher Base HP, reflecting their role as front-line defenders designed to absorb damage. Mages, on the other hand, have relatively high Base Mana to support frequent ability use, which is key to their ranged, spell-focused gameplay. These differences underscore the game’s balance strategy, where each class’s resource allocation aligns with its designated role, creating a structured and strategic approach to class dynamics in gameplay.

Recent Champion Changes

recent_changes=data %>%
  group_by(Last.Changed) %>%
  summarise(Champion_Count = n()) %>%
  arrange(desc(Champion_Count))

recent_changes
## # A tibble: 19 × 2
##    Last.Changed Champion_Count
##    <chr>                 <int>
##  1 V14.18                   37
##  2 V14.9                    22
##  3 V14.15                   20
##  4 V14.14                   17
##  5 V14.16                   13
##  6 V14.12                   12
##  7 V14.13                   10
##  8 V14.11                    7
##  9 V14.10                    6
## 10 V14.8                     6
## 11 V14.2                     3
## 12 V14.4                     3
## 13 V14.7                     3
## 14 V13.22                    2
## 15 V14.3                     2
## 16 V14.5                     2
## 17 V13.16                    1
## 18 V13.19                    1
## 19 V14.6                     1
ggplot(recent_changes, aes(x = reorder(Last.Changed, -Champion_Count), y = Champion_Count)) +
  geom_bar(stat = "identity", fill = "lightblue", color = "black") +
  labs(title = "Champion Updates by Last Changed Version",
       x = "Patch Version",
       y = "Number of Champions Updated") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Interpretation

The bar chart shows that patch V14.18 had the highest number of champion updates, with over 30 champions affected, indicating a major rebalancing effort. Other patches, like V14.9 and V14.15, also have high update counts, suggesting periodic large-scale adjustments. As the patch versions progress, the frequency of updates decreases, implying that the developers initially focused on extensive balancing, followed by smaller, targeted updates to fine-tune the game.

Ranged vs. Melee Champions

rangetype_distribution=data %>%
  group_by(Range.type) %>%
  summarise(Champion_Count = n()) %>%
  arrange(desc(Champion_Count))

rangetype_distribution
## # A tibble: 2 × 2
##   Range.type Champion_Count
##   <chr>               <int>
## 1 Melee                  88
## 2 Ranged                 80
ggplot(rangetype_distribution, aes(x = "", y = Champion_Count, fill = Range.type)) +
  geom_bar(stat = "identity", width = 1) +
  coord_polar("y", start = 0) +
  labs(title = "Champion Distribution by Range Type") +
  theme_void() +
  theme(legend.title = element_blank()) + 
  scale_fill_brewer(palette = "Set3")

Interpretation

The pie chart illustrates the distribution between melee and ranged champions. The split reveals the developer’s design preference, showing whether one range type is more prevalent. This distribution impacts gameplay strategies and team compositions, with the proportions reflecting the diversity in champion playstyles within the game.