Champion Bans and Early-Game Gold Advantage: Analyzing the Strategic Impact Across Competitive Leagues 2024

Author

Ash Ibasan

League of Legends Champions Korea (LCK) Flickr

T1 vs. BRION July 10, 2024

Introduction: Let’s talk about the dataset

League of Legends (LoL) esports is all about strategy and teamwork, and one of the most exciting parts of the game is the champion ban phase. Even though I don’t play the game anymore, I still follow the competitive scene closely. I’ve always been curious about how much the champion bans actually impact the game—do they give teams an early-game advantage, or are they more about disrupting the other team’s plans? For this project, I decided to focus on how specific banned champions (ban1 through ban5) might be connected to early-game performance, measured by the gold difference at 15 minutes (golddiffat15). The dataset I’m working with comes from Oracle’s Elixir, a resource for esports stats used by analysts, casters, and fans. The match data is updated for 2024.

The dataset includes variables like league, which identifies the region of play (e.g., LCK, LCS, LEC, PCS, and CBLoL), ban1 to ban5, which record the champions banned by each team, and golddiffat15, a numeric variable representing the gold advantage or disadvantage a team has 15 minutes into the game.

To clean the data, I made sure the ban columns and golddiffat15 were free of missing or invalid values. Instead of creating a total_bans column this time, I kept the focus on individual bans (ban1 to ban5) to see if specific champions banned in certain regions correlate with better early-game performance. By narrowing in on this question, I hope to uncover patterns in how different regions approach bans strategically and whether those bans have a tangible impact on the early game. I’m still fascinated by the competitive meta and the strategies teams use to gain an edge, and exploring this connection between bans and performance feels like a way to understand the game on a deeper level.

Load necessary libraries

I started by loading the tools I needed to clean and analyze the dataset.

library(dplyr)
Warning: package 'dplyr' was built under R version 4.4.1

Attaching package: 'dplyr'
The following objects are masked from 'package:stats':

    filter, lag
The following objects are masked from 'package:base':

    intersect, setdiff, setequal, union
library(tidyverse)
Warning: package 'tidyverse' was built under R version 4.4.1
Warning: package 'ggplot2' was built under R version 4.4.1
Warning: package 'tibble' was built under R version 4.4.1
Warning: package 'tidyr' was built under R version 4.4.1
Warning: package 'readr' was built under R version 4.4.1
Warning: package 'purrr' was built under R version 4.4.1
Warning: package 'stringr' was built under R version 4.4.1
Warning: package 'forcats' was built under R version 4.4.1
Warning: package 'lubridate' was built under R version 4.4.1
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ forcats   1.0.0     ✔ readr     2.1.5
✔ ggplot2   3.5.1     ✔ stringr   1.5.1
✔ lubridate 1.9.3     ✔ tibble    3.2.1
✔ purrr     1.0.2     ✔ tidyr     1.3.1
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(ggplot2)
library(plotly)
Warning: package 'plotly' was built under R version 4.4.1

Attaching package: 'plotly'

The following object is masked from 'package:ggplot2':

    last_plot

The following object is masked from 'package:stats':

    filter

The following object is masked from 'package:graphics':

    layout
library(highcharter)
Warning: package 'highcharter' was built under R version 4.4.1
Registered S3 method overwritten by 'quantmod':
  method            from
  as.zoo.data.frame zoo 

Load and inspect the dataset

I loaded the match data and inspected its structure to ensure that the columns we’ll be analyzing (ban1 through ban5, golddiffat15, and league) are present and ready for cleaning. A quick summary also helps identify any glaring issues like missing values or invalid data before we proceed.

match_data <- read_csv("F:/Fall 2024/MC/DATA 110/b-e-a-utiful/2024_LoL_esports_match_data_from_OraclesElixir.csv")
Rows: 115608 Columns: 161
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr   (22): gameid, datacompleteness, url, league, split, side, position, pl...
dbl  (138): year, playoffs, game, patch, participantid, gamelength, result, ...
dttm   (1): date

ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
glimpse(match_data)
Rows: 115,608
Columns: 161
$ gameid                   <chr> "10660-10660_game_1", "10660-10660_game_1", "…
$ datacompleteness         <chr> "partial", "partial", "partial", "partial", "…
$ url                      <chr> "https://lpl.qq.com/es/stats.shtml?bmid=10660…
$ league                   <chr> "DCup", "DCup", "DCup", "DCup", "DCup", "DCup…
$ year                     <dbl> 2023, 2023, 2023, 2023, 2023, 2023, 2023, 202…
$ split                    <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ playoffs                 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
$ date                     <dttm> 2024-01-01 05:13:15, 2024-01-01 05:13:15, 20…
$ game                     <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, …
$ patch                    <dbl> 13.24, 13.24, 13.24, 13.24, 13.24, 13.24, 13.…
$ participantid            <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100, 200, 1, 2…
$ side                     <chr> "Blue", "Blue", "Blue", "Blue", "Blue", "Red"…
$ position                 <chr> "top", "jng", "mid", "bot", "sup", "top", "jn…
$ playername               <chr> "Zika", "Weiwei", "Scout", "GALA", "Mark", "X…
$ playerid                 <chr> "oe:player:65ed20b21e2993fb00dbd21a2fd991b", …
$ teamname                 <chr> "LNG Esports", "LNG Esports", "LNG Esports", …
$ teamid                   <chr> "oe:team:a9145b7711873f53e610fbba0493484", "o…
$ champion                 <chr> "Aatrox", "Maokai", "Orianna", "Kalista", "Se…
$ ban1                     <chr> "Akali", "Akali", "Akali", "Akali", "Akali", …
$ ban2                     <chr> "Nocturne", "Nocturne", "Nocturne", "Nocturne…
$ ban3                     <chr> "K'Sante", "K'Sante", "K'Sante", "K'Sante", "…
$ ban4                     <chr> "Lee Sin", "Lee Sin", "Lee Sin", "Lee Sin", "…
$ ban5                     <chr> "Wukong", "Wukong", "Wukong", "Wukong", "Wuko…
$ pick1                    <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "Kali…
$ pick2                    <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "Senn…
$ pick3                    <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "Oria…
$ pick4                    <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "Maok…
$ pick5                    <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "Aatr…
$ gamelength               <dbl> 1886, 1886, 1886, 1886, 1886, 1886, 1886, 188…
$ result                   <dbl> 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, …
$ kills                    <dbl> 1, 0, 0, 2, 0, 4, 1, 4, 7, 0, 3, 16, 2, 0, 1,…
$ deaths                   <dbl> 3, 4, 2, 4, 3, 0, 0, 0, 1, 2, 16, 3, 3, 5, 4,…
$ assists                  <dbl> 1, 3, 0, 0, 3, 6, 12, 7, 5, 13, 7, 43, 0, 2, …
$ teamkills                <dbl> 3, 3, 3, 3, 3, 16, 16, 16, 16, 16, 3, 16, 3, …
$ teamdeaths               <dbl> 16, 16, 16, 16, 16, 3, 3, 3, 3, 3, 16, 3, 17,…
$ doublekills              <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ triplekills              <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ quadrakills              <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ pentakills               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ firstblood               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0, 1,…
$ firstbloodkill           <dbl> 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, NA, NA, 0, 0, 0…
$ firstbloodassist         <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ firstbloodvictim         <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ `team kpm`               <dbl> 0.0954, 0.0954, 0.0954, 0.0954, 0.0954, 0.509…
$ ckpm                     <dbl> 0.6045, 0.6045, 0.6045, 0.6045, 0.6045, 0.604…
$ firstdragon              <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ dragons                  <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 2, 3,…
$ opp_dragons              <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 3, 2,…
$ elementaldrakes          <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_elementaldrakes      <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ infernals                <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ mountains                <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ clouds                   <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ oceans                   <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ chemtechs                <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ hextechs                 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ `dragons (type unknown)` <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 2, 3,…
$ elders                   <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_elders               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ firstherald              <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ heralds                  <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_heralds              <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ void_grubs               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_void_grubs           <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ firstbaron               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ barons                   <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0, 2,…
$ opp_barons               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 2, 0,…
$ firsttower               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ towers                   <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 2, 9,…
$ opp_towers               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 9, 2,…
$ firstmidtower            <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ firsttothreetowers       <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ turretplates             <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_turretplates         <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ inhibitors               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0, 1,…
$ opp_inhibitors           <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, 0,…
$ damagetochampions        <dbl> 7092, 7361, 10005, 10892, 6451, 14049, 3945, …
$ dpm                      <dbl> 225.6204, 234.1782, 318.2927, 346.5111, 205.2…
$ damageshare              <dbl> 0.1696480, 0.1761010, 0.2393550, 0.2605630, 0…
$ damagetakenperminute     <dbl> 564.1463, 847.4761, 432.2163, 491.4528, 239.7…
$ damagemitigatedperminute <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ wardsplaced              <dbl> 14, 10, 4, 22, 47, 11, 14, 10, 11, 76, 97, 12…
$ wpm                      <dbl> 0.4454, 0.3181, 0.1273, 0.6999, 1.4952, 0.349…
$ wardskilled              <dbl> 4, 12, 8, 13, 22, 3, 8, 14, 14, 10, 59, 49, 0…
$ wcpm                     <dbl> 0.1273, 0.3818, 0.2545, 0.4136, 0.6999, 0.095…
$ controlwardsbought       <dbl> 5, 10, 2, 4, 12, 5, 11, 8, 7, 25, 33, 56, 6, …
$ visionscore              <dbl> 24, 39, 31, 44, 111, 26, 49, 44, 41, 117, 250…
$ vspm                     <dbl> 0.7635, 1.2407, 0.9862, 1.3998, 3.5313, 0.827…
$ totalgold                <dbl> 11083, 8636, 10743, 12224, 7221, 13378, 10590…
$ earnedgold               <dbl> 6960, 4513, 6620, 8101, 3098, 9255, 6467, 104…
$ `earned gpm`             <dbl> 221.4210, 143.5737, 210.6045, 257.7200, 98.55…
$ earnedgoldshare          <dbl> 0.2376080, 0.1540690, 0.2260000, 0.2765610, 0…
$ goldspent                <dbl> 10784, 8840, 10594, 11119, 6175, 11179, 9455,…
$ gspd                     <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, -0.13…
$ gpr                      <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ `total cs`               <dbl> 279, 153, 270, 311, 30, 283, 169, 329, 303, 1…
$ minionkills              <dbl> 256, 14, 269, 307, 30, 245, 12, 319, 294, 16,…
$ monsterkills             <dbl> 23, 139, 1, 4, 0, 38, 157, 10, 9, 0, 167, 213…
$ monsterkillsownjungle    <dbl> 16, 111, 1, 0, 0, 15, 91, 7, 9, 0, 127, 121, …
$ monsterkillsenemyjungle  <dbl> 0, 3, 0, 0, 0, 6, 21, 2, 0, 0, 3, 29, 0, 1, 0…
$ cspm                     <dbl> 8.8759, 4.8674, 8.5896, 9.8940, 0.9544, 9.003…
$ goldat10                 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ xpat10                   <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ csat10                   <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_goldat10             <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_xpat10               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_csat10               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ golddiffat10             <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ xpdiffat10               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ csdiffat10               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ killsat10                <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ assistsat10              <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ deathsat10               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_killsat10            <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_assistsat10          <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_deathsat10           <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ goldat15                 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ xpat15                   <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ csat15                   <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_goldat15             <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_xpat15               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_csat15               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ golddiffat15             <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ xpdiffat15               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ csdiffat15               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ killsat15                <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ assistsat15              <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ deathsat15               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_killsat15            <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_assistsat15          <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_deathsat15           <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ goldat20                 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ xpat20                   <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ csat20                   <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_goldat20             <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_xpat20               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_csat20               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ golddiffat20             <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ xpdiffat20               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ csdiffat20               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ killsat20                <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ assistsat20              <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ deathsat20               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_killsat20            <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_assistsat20          <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_deathsat20           <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ goldat25                 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ xpat25                   <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ csat25                   <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_goldat25             <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_xpat25               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_csat25               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ golddiffat25             <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ xpdiffat25               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ csdiffat25               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ killsat25                <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ assistsat25              <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ deathsat25               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_killsat25            <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_assistsat25          <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_deathsat25           <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
summary(match_data)
    gameid          datacompleteness       url               league         
 Length:115608      Length:115608      Length:115608      Length:115608     
 Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character  
                                                                            
                                                                            
                                                                            
                                                                            
      year         split              playoffs     
 Min.   :2023   Length:115608      Min.   :0.0000  
 1st Qu.:2024   Class :character   1st Qu.:0.0000  
 Median :2024   Mode  :character   Median :0.0000  
 Mean   :2024                      Mean   :0.2176  
 3rd Qu.:2024                      3rd Qu.:0.0000  
 Max.   :2025                      Max.   :1.0000  
                                                   
      date                             game           patch      
 Min.   :2024-01-01 05:13:15.00   Min.   :1.000   Min.   :13.24  
 1st Qu.:2024-03-08 21:07:46.00   1st Qu.:1.000   1st Qu.:14.04  
 Median :2024-06-06 15:59:43.50   Median :1.000   Median :14.10  
 Mean   :2024-05-25 22:27:15.51   Mean   :1.676   Mean   :14.09  
 3rd Qu.:2024-07-26 11:30:45.00   3rd Qu.:2.000   3rd Qu.:14.13  
 Max.   :2024-11-11 18:36:23.00   Max.   :5.000   Max.   :14.21  
                                                  NA's   :204    
 participantid        side             position          playername       
 Min.   :  1.00   Length:115608      Length:115608      Length:115608     
 1st Qu.:  3.75   Class :character   Class :character   Class :character  
 Median :  6.50   Mode  :character   Mode  :character   Mode  :character  
 Mean   : 29.58                                                           
 3rd Qu.:  9.25                                                           
 Max.   :200.00                                                           
                                                                          
   playerid           teamname            teamid            champion        
 Length:115608      Length:115608      Length:115608      Length:115608     
 Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character  
                                                                            
                                                                            
                                                                            
                                                                            
     ban1               ban2               ban3               ban4          
 Length:115608      Length:115608      Length:115608      Length:115608     
 Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character  
                                                                            
                                                                            
                                                                            
                                                                            
     ban5              pick1              pick2              pick3          
 Length:115608      Length:115608      Length:115608      Length:115608     
 Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character  
                                                                            
                                                                            
                                                                            
                                                                            
    pick4              pick5             gamelength       result      
 Length:115608      Length:115608      Min.   : 522   Min.   :0.0000  
 Class :character   Class :character   1st Qu.:1661   1st Qu.:0.0000  
 Mode  :character   Mode  :character   Median :1858   Median :0.0000  
                                       Mean   :1898   Mean   :0.4999  
                                       3rd Qu.:2097   3rd Qu.:1.0000  
                                       Max.   :3482   Max.   :1.0000  
                                                                      
     kills            deaths          assists         teamkills    
 Min.   : 0.000   Min.   : 0.000   Min.   :  0.00   Min.   : 0.00  
 1st Qu.: 1.000   1st Qu.: 2.000   1st Qu.:  4.00   1st Qu.: 9.00  
 Median : 3.000   Median : 3.000   Median :  7.00   Median :15.00  
 Mean   : 5.021   Mean   : 5.032   Mean   : 11.55   Mean   :15.06  
 3rd Qu.: 6.000   3rd Qu.: 5.000   3rd Qu.: 13.00   3rd Qu.:20.00  
 Max.   :59.000   Max.   :59.000   Max.   :104.00   Max.   :59.00  
                                                                   
   teamdeaths    doublekills      triplekills     quadrakills   
 Min.   : 0.0   Min.   : 0.000   Min.   :0.000   Min.   :0.000  
 1st Qu.: 9.0   1st Qu.: 0.000   1st Qu.:0.000   1st Qu.:0.000  
 Median :15.0   Median : 0.000   Median :0.000   Median :0.000  
 Mean   :15.1   Mean   : 0.579   Mean   :0.104   Mean   :0.018  
 3rd Qu.:20.0   3rd Qu.: 1.000   3rd Qu.:0.000   3rd Qu.:0.000  
 Max.   :59.0   Max.   :10.000   Max.   :4.000   Max.   :2.000  
                NA's   :16692    NA's   :16692   NA's   :16692  
   pentakills      firstblood    firstbloodkill  firstbloodassist
 Min.   :0.000   Min.   :0.000   Min.   :0.0     Min.   :0.00    
 1st Qu.:0.000   1st Qu.:0.000   1st Qu.:0.0     1st Qu.:0.00    
 Median :0.000   Median :0.000   Median :0.0     Median :0.00    
 Mean   :0.004   Mean   :0.291   Mean   :0.1     Mean   :0.14    
 3rd Qu.:0.000   3rd Qu.:1.000   3rd Qu.:0.0     3rd Qu.:0.00    
 Max.   :2.000   Max.   :1.000   Max.   :1.0     Max.   :1.00    
 NA's   :16692   NA's   :13910   NA's   :19268   NA's   :33178   
 firstbloodvictim    team kpm           ckpm         firstdragon   
 Min.   :0.0      Min.   :0.0000   Min.   :0.1301   Min.   :0.0    
 1st Qu.:0.0      1st Qu.:0.2886   1st Qu.:0.7467   1st Qu.:0.0    
 Median :0.0      Median :0.4531   Median :0.9341   Median :0.0    
 Mean   :0.1      Mean   :0.4834   Mean   :0.9668   Mean   :0.5    
 3rd Qu.:0.0      3rd Qu.:0.6429   3rd Qu.:1.1462   3rd Qu.:1.0    
 Max.   :1.0      Max.   :2.4549   Max.   :3.3703   Max.   :1.0    
 NA's   :33178                                      NA's   :99122  
    dragons       opp_dragons    elementaldrakes opp_elementaldrakes
 Min.   :0.00    Min.   :0.00    Min.   :0.00    Min.   :0.00       
 1st Qu.:1.00    1st Qu.:1.00    1st Qu.:1.00    1st Qu.:1.00       
 Median :2.00    Median :2.00    Median :2.00    Median :2.00       
 Mean   :2.22    Mean   :2.22    Mean   :2.16    Mean   :2.16       
 3rd Qu.:3.00    3rd Qu.:3.00    3rd Qu.:3.00    3rd Qu.:3.00       
 Max.   :7.00    Max.   :7.00    Max.   :4.00    Max.   :4.00       
 NA's   :96340   NA's   :96340   NA's   :99122   NA's   :99122      
   infernals       mountains         clouds          oceans     
 Min.   :0.00    Min.   :0.00    Min.   :0.00    Min.   :0.00   
 1st Qu.:0.00    1st Qu.:0.00    1st Qu.:0.00    1st Qu.:0.00   
 Median :0.00    Median :0.00    Median :0.00    Median :0.00   
 Mean   :0.36    Mean   :0.36    Mean   :0.36    Mean   :0.37   
 3rd Qu.:1.00    3rd Qu.:1.00    3rd Qu.:1.00    3rd Qu.:1.00   
 Max.   :4.00    Max.   :4.00    Max.   :4.00    Max.   :4.00   
 NA's   :99122   NA's   :99122   NA's   :99122   NA's   :99122  
   chemtechs        hextechs     dragons (type unknown)     elders     
 Min.   :0.00    Min.   :0.00    Min.   :0.00           Min.   :0.00   
 1st Qu.:0.00    1st Qu.:0.00    1st Qu.:1.00           1st Qu.:0.00   
 Median :0.00    Median :0.00    Median :2.00           Median :0.00   
 Mean   :0.35    Mean   :0.36    Mean   :2.24           Mean   :0.05   
 3rd Qu.:1.00    3rd Qu.:1.00    3rd Qu.:3.00           3rd Qu.:0.00   
 Max.   :4.00    Max.   :4.00    Max.   :4.00           Max.   :3.00   
 NA's   :99122   NA's   :99122   NA's   :112826         NA's   :99122  
   opp_elders     firstherald       heralds       opp_heralds   
 Min.   :0.00    Min.   :0.0     Min.   :0.0     Min.   :0.0    
 1st Qu.:0.00    1st Qu.:0.0     1st Qu.:0.0     1st Qu.:0.0    
 Median :0.00    Median :0.0     Median :0.0     Median :0.0    
 Mean   :0.05    Mean   :0.5     Mean   :0.5     Mean   :0.5    
 3rd Qu.:0.00    3rd Qu.:1.0     3rd Qu.:1.0     3rd Qu.:1.0    
 Max.   :3.00    Max.   :1.0     Max.   :1.0     Max.   :1.0    
 NA's   :99122   NA's   :99122   NA's   :99122   NA's   :99122  
   void_grubs    opp_void_grubs    firstbaron        barons     
 Min.   :0.00    Min.   :0.00    Min.   :0.00    Min.   :0.000  
 1st Qu.:1.00    1st Qu.:1.00    1st Qu.:0.00    1st Qu.:0.000  
 Median :3.00    Median :3.00    Median :0.00    Median :0.000  
 Mean   :2.75    Mean   :2.75    Mean   :0.48    Mean   :0.252  
 3rd Qu.:5.00    3rd Qu.:5.00    3rd Qu.:1.00    3rd Qu.:0.000  
 Max.   :6.00    Max.   :6.00    Max.   :1.00    Max.   :5.000  
 NA's   :99122   NA's   :99122   NA's   :99122   NA's   :13910  
   opp_barons      firsttower        towers        opp_towers   
 Min.   :0.000   Min.   :0.0     Min.   : 0.00   Min.   : 0.00  
 1st Qu.:0.000   1st Qu.:0.0     1st Qu.: 3.00   1st Qu.: 3.00  
 Median :0.000   Median :0.0     Median : 7.00   Median : 7.00  
 Mean   :0.252   Mean   :0.5     Mean   : 6.13   Mean   : 6.13  
 3rd Qu.:0.000   3rd Qu.:1.0     3rd Qu.: 9.00   3rd Qu.: 9.00  
 Max.   :5.000   Max.   :1.0     Max.   :11.00   Max.   :11.00  
 NA's   :13910   NA's   :99122   NA's   :96340   NA's   :96340  
 firstmidtower   firsttothreetowers  turretplates   opp_turretplates
 Min.   :0.0     Min.   :0.0        Min.   : 0.00   Min.   : 0.00   
 1st Qu.:0.0     1st Qu.:0.0        1st Qu.: 2.00   1st Qu.: 2.00   
 Median :0.5     Median :0.0        Median : 4.00   Median : 4.00   
 Mean   :0.5     Mean   :0.5        Mean   : 4.25   Mean   : 4.25   
 3rd Qu.:1.0     3rd Qu.:1.0        3rd Qu.: 6.00   3rd Qu.: 6.00   
 Max.   :1.0     Max.   :1.0        Max.   :15.00   Max.   :15.00   
 NA's   :99124   NA's   :99122      NA's   :99122   NA's   :99122   
   inhibitors     opp_inhibitors   damagetochampions      dpm        
 Min.   : 0.000   Min.   : 0.000   Min.   :     0    Min.   :   0.0  
 1st Qu.: 0.000   1st Qu.: 0.000   1st Qu.:  9644    1st Qu.: 320.1  
 Median : 0.000   Median : 0.000   Median : 17030    Median : 556.2  
 Mean   : 0.323   Mean   : 0.323   Mean   : 26847    Mean   : 842.1  
 3rd Qu.: 0.000   3rd Qu.: 0.000   3rd Qu.: 29026    3rd Qu.: 877.9  
 Max.   :10.000   Max.   :10.000   Max.   :273210    Max.   :5848.9  
 NA's   :13910    NA's   :13910                                      
  damageshare    damagetakenperminute damagemitigatedperminute  wardsplaced    
 Min.   :0.000   Min.   :   0.0       Min.   :  19.77          Min.   :  0.00  
 1st Qu.:0.119   1st Qu.: 507.9       1st Qu.: 355.89          1st Qu.: 10.00  
 Median :0.202   Median : 721.4       Median : 668.91          Median : 15.00  
 Mean   :0.200   Mean   :1160.9       Mean   :1117.90          Mean   : 34.87  
 3rd Qu.:0.270   3rd Qu.:1107.7       3rd Qu.:1305.57          3rd Qu.: 52.00  
 Max.   :0.604   Max.   :6991.2       Max.   :9408.70          Max.   :302.00  
 NA's   :19268                        NA's   :16692                            
      wpm          wardskilled          wcpm        controlwardsbought
 Min.   :0.0000   Min.   :  0.00   Min.   :0.0000   Min.   :  0.00    
 1st Qu.:0.3277   1st Qu.:  5.00   1st Qu.:0.1802   1st Qu.:  4.00    
 Median :0.4503   Median : 10.00   Median :0.3066   Median :  7.00    
 Mean   :1.0895   Mean   : 15.74   Mean   :0.4869   Mean   : 11.66    
 3rd Qu.:1.6611   3rd Qu.: 18.00   3rd Qu.:0.5290   3rd Qu.: 14.00    
 Max.   :6.0707   Max.   :168.00   Max.   :3.4523   Max.   :123.00    
                                                                      
  visionscore          vspm           totalgold        earnedgold   
 Min.   :  0.00   Min.   : 0.0000   Min.   :  1920   Min.   :    0  
 1st Qu.: 30.00   1st Qu.: 0.9906   1st Qu.:  9625   1st Qu.: 5672  
 Median : 45.00   Median : 1.3760   Median : 12336   Median : 8222  
 Mean   : 85.28   Mean   : 2.6576   Mean   : 19507   Mean   :12596  
 3rd Qu.:104.00   3rd Qu.: 3.2958   3rd Qu.: 16194   3rd Qu.:11543  
 Max.   :630.00   Max.   :13.0408   Max.   :110913   Max.   :76293  
                                                                    
   earned gpm     earnedgoldshare   goldspent           gspd      
 Min.   :   0.0   Min.   :0.000   Min.   :     0   Min.   :-0.57  
 1st Qu.: 190.9   1st Qu.:0.158   1st Qu.:  8850   1st Qu.:-0.10  
 Median : 262.7   Median :0.208   Median : 11375   Median : 0.00  
 Mean   : 398.4   Mean   :0.200   Mean   : 17966   Mean   : 0.00  
 3rd Qu.: 350.9   3rd Qu.:0.247   3rd Qu.: 14975   3rd Qu.: 0.10  
 Max.   :2036.7   Max.   :0.421   Max.   :118745   Max.   : 0.57  
                  NA's   :19268                    NA's   :96340  
      gpr           total cs      minionkills      monsterkills   
 Min.   :-9.74   Min.   :  0.0   Min.   :   0.0   Min.   :  0.00  
 1st Qu.:-1.66   1st Qu.:152.0   1st Qu.:  37.0   1st Qu.:  0.00  
 Median : 0.00   Median :223.0   Median : 230.0   Median : 11.00  
 Mean   : 0.00   Mean   :206.6   Mean   : 265.8   Mean   : 64.28  
 3rd Qu.: 1.66   3rd Qu.:278.0   3rd Qu.: 304.0   3rd Qu.:146.00  
 Max.   : 9.74   Max.   :644.0   Max.   :1770.0   Max.   :442.00  
 NA's   :99122   NA's   :19268   NA's   :2782                     
 monsterkillsownjungle monsterkillsenemyjungle      cspm           goldat10    
 Min.   :  0.00        Min.   : 0.00           Min.   : 0.000   Min.   : 1500  
 1st Qu.:  0.00        1st Qu.: 0.00           1st Qu.: 5.641   1st Qu.: 3031  
 Median :  7.00        Median : 0.00           Median : 7.974   Median : 3362  
 Mean   : 44.73        Mean   : 6.42           Mean   :10.347   Mean   : 5321  
 3rd Qu.:102.00        3rd Qu.: 8.00           3rd Qu.: 9.584   3rd Qu.: 3802  
 Max.   :266.00        Max.   :79.00           Max.   :43.288   Max.   :22045  
 NA's   :98916         NA's   :98916           NA's   :2782     NA's   :16704  
     xpat10          csat10       opp_goldat10     opp_xpat10   
 Min.   :    0   Min.   :  0.0   Min.   : 1500   Min.   :    0  
 1st Qu.: 3183   1st Qu.: 62.0   1st Qu.: 3031   1st Qu.: 3183  
 Median : 4116   Median : 80.0   Median : 3362   Median : 4116  
 Mean   : 6291   Mean   :109.5   Mean   : 5321   Mean   : 6291  
 3rd Qu.: 5005   3rd Qu.: 93.0   3rd Qu.: 3802   3rd Qu.: 5005  
 Max.   :22158   Max.   :404.0   Max.   :22045   Max.   :22158  
 NA's   :16704   NA's   :16704   NA's   :16704   NA's   :16704  
   opp_csat10     golddiffat10     xpdiffat10      csdiffat10   
 Min.   :  0.0   Min.   :-7597   Min.   :-5377   Min.   :-128   
 1st Qu.: 62.0   1st Qu.: -351   1st Qu.: -310   1st Qu.:  -8   
 Median : 80.0   Median :    0   Median :    0   Median :   0   
 Mean   :109.5   Mean   :    0   Mean   :    0   Mean   :   0   
 3rd Qu.: 93.0   3rd Qu.:  351   3rd Qu.:  310   3rd Qu.:   8   
 Max.   :404.0   Max.   : 7597   Max.   : 5377   Max.   : 128   
 NA's   :16704   NA's   :16704   NA's   :16704   NA's   :16704  
   killsat10       assistsat10       deathsat10     opp_killsat10   
 Min.   : 0.000   Min.   : 0.000   Min.   : 0.000   Min.   : 0.000  
 1st Qu.: 0.000   1st Qu.: 0.000   1st Qu.: 0.000   1st Qu.: 0.000  
 Median : 0.000   Median : 0.000   Median : 0.000   Median : 0.000  
 Mean   : 0.749   Mean   : 1.086   Mean   : 0.753   Mean   : 0.749  
 3rd Qu.: 1.000   3rd Qu.: 1.000   3rd Qu.: 1.000   3rd Qu.: 1.000  
 Max.   :17.000   Max.   :27.000   Max.   :17.000   Max.   :17.000  
 NA's   :16704    NA's   :16704    NA's   :16704    NA's   :16704   
 opp_assistsat10  opp_deathsat10      goldat15         xpat15     
 Min.   : 0.000   Min.   : 0.000   Min.   : 2713   Min.   : 1922  
 1st Qu.: 0.000   1st Qu.: 0.000   1st Qu.: 4680   1st Qu.: 5294  
 Median : 0.000   Median : 0.000   Median : 5308   Median : 6645  
 Mean   : 1.086   Mean   : 0.753   Mean   : 8418   Mean   :10045  
 3rd Qu.: 1.000   3rd Qu.: 1.000   3rd Qu.: 6157   3rd Qu.: 7907  
 Max.   :27.000   Max.   :17.000   Max.   :37219   Max.   :36131  
 NA's   :16704    NA's   :16704    NA's   :16716   NA's   :16716  
     csat15       opp_goldat15     opp_xpat15      opp_csat15   
 Min.   :  3.0   Min.   : 2713   Min.   : 1922   Min.   :  3.0  
 1st Qu.: 96.0   1st Qu.: 4680   1st Qu.: 5294   1st Qu.: 96.0  
 Median :127.0   Median : 5308   Median : 6645   Median :127.0  
 Mean   :172.3   Mean   : 8418   Mean   :10045   Mean   :172.3  
 3rd Qu.:147.0   3rd Qu.: 6157   3rd Qu.: 7907   3rd Qu.:147.0  
 Max.   :636.0   Max.   :37219   Max.   :36131   Max.   :636.0  
 NA's   :16716   NA's   :16716   NA's   :16716   NA's   :16716  
  golddiffat15      xpdiffat15      csdiffat15      killsat15     
 Min.   :-14440   Min.   :-9477   Min.   :-198    Min.   : 0.000  
 1st Qu.:  -638   1st Qu.: -543   1st Qu.: -12    1st Qu.: 0.000  
 Median :     0   Median :    0   Median :   0    Median : 1.000  
 Mean   :     0   Mean   :    0   Mean   :   0    Mean   : 1.488  
 3rd Qu.:   638   3rd Qu.:  543   3rd Qu.:  12    3rd Qu.: 2.000  
 Max.   : 14440   Max.   : 9477   Max.   : 198    Max.   :30.000  
 NA's   :16716    NA's   :16716   NA's   :16716   NA's   :16716   
  assistsat15       deathsat15     opp_killsat15    opp_assistsat15 
 Min.   : 0.000   Min.   : 0.000   Min.   : 0.000   Min.   : 0.000  
 1st Qu.: 0.000   1st Qu.: 0.000   1st Qu.: 0.000   1st Qu.: 0.000  
 Median : 1.000   Median : 1.000   Median : 1.000   Median : 1.000  
 Mean   : 2.519   Mean   : 1.493   Mean   : 1.488   Mean   : 2.519  
 3rd Qu.: 3.000   3rd Qu.: 2.000   3rd Qu.: 2.000   3rd Qu.: 3.000  
 Max.   :52.000   Max.   :30.000   Max.   :30.000   Max.   :52.000  
 NA's   :16716    NA's   :16716    NA's   :16716    NA's   :16716   
 opp_deathsat15      goldat20         xpat20          csat20     
 Min.   : 0.000   Min.   : 3838   Min.   : 2890   Min.   :  6.0  
 1st Qu.: 0.000   1st Qu.: 6414   1st Qu.: 7554   1st Qu.:128.0  
 Median : 1.000   Median : 7407   Median : 9255   Median :172.0  
 Mean   : 1.493   Mean   :11645   Mean   :13926   Mean   :232.1  
 3rd Qu.: 2.000   3rd Qu.: 8650   3rd Qu.:10756   3rd Qu.:200.0  
 Max.   :30.000   Max.   :51659   Max.   :52550   Max.   :862.0  
 NA's   :16716    NA's   :16920   NA's   :16920   NA's   :16920  
  opp_goldat20     opp_xpat20      opp_csat20     golddiffat20   
 Min.   : 3838   Min.   : 2890   Min.   :  6.0   Min.   :-19017  
 1st Qu.: 6414   1st Qu.: 7554   1st Qu.:128.0   1st Qu.:  -952  
 Median : 7407   Median : 9255   Median :172.0   Median :     0  
 Mean   :11645   Mean   :13926   Mean   :232.1   Mean   :     0  
 3rd Qu.: 8650   3rd Qu.:10756   3rd Qu.:200.0   3rd Qu.:   952  
 Max.   :51659   Max.   :52550   Max.   :862.0   Max.   : 19017  
 NA's   :16920   NA's   :16920   NA's   :16920   NA's   :16920   
   xpdiffat20       csdiffat20      killsat20      assistsat20    
 Min.   :-15523   Min.   :-219    Min.   : 0.00   Min.   : 0.000  
 1st Qu.:  -828   1st Qu.: -16    1st Qu.: 0.00   1st Qu.: 1.000  
 Median :     0   Median :   0    Median : 1.00   Median : 3.000  
 Mean   :     0   Mean   :   0    Mean   : 2.32   Mean   : 4.439  
 3rd Qu.:   828   3rd Qu.:  16    3rd Qu.: 3.00   3rd Qu.: 5.000  
 Max.   : 15523   Max.   : 219    Max.   :43.00   Max.   :92.000  
 NA's   :16920    NA's   :16920   NA's   :16920   NA's   :16920   
   deathsat20     opp_killsat20   opp_assistsat20  opp_deathsat20  
 Min.   : 0.000   Min.   : 0.00   Min.   : 0.000   Min.   : 0.000  
 1st Qu.: 1.000   1st Qu.: 0.00   1st Qu.: 1.000   1st Qu.: 1.000  
 Median : 1.000   Median : 1.00   Median : 3.000   Median : 1.000  
 Mean   : 2.327   Mean   : 2.32   Mean   : 4.439   Mean   : 2.327  
 3rd Qu.: 3.000   3rd Qu.: 3.00   3rd Qu.: 5.000   3rd Qu.: 3.000  
 Max.   :43.000   Max.   :43.00   Max.   :92.000   Max.   :43.000  
 NA's   :16920    NA's   :16920   NA's   :16920    NA's   :16920   
    goldat25         xpat25          csat25        opp_goldat25  
 Min.   : 4630   Min.   : 3514   Min.   :   9.0   Min.   : 4630  
 1st Qu.: 8030   1st Qu.: 9677   1st Qu.: 153.0   1st Qu.: 8030  
 Median : 9439   Median :11801   Median : 210.0   Median : 9439  
 Mean   :14790   Mean   :17890   Mean   : 283.1   Mean   :14790  
 3rd Qu.:11149   3rd Qu.:13694   3rd Qu.: 247.0   3rd Qu.:11149  
 Max.   :59368   Max.   :68784   Max.   :1060.0   Max.   :59368  
 NA's   :23472   NA's   :23472   NA's   :23472    NA's   :23472  
   opp_xpat25      opp_csat25      golddiffat25      xpdiffat25    
 Min.   : 3514   Min.   :   9.0   Min.   :-20366   Min.   :-19754  
 1st Qu.: 9677   1st Qu.: 153.0   1st Qu.: -1338   1st Qu.: -1398  
 Median :11801   Median : 210.0   Median :     0   Median :     0  
 Mean   :17890   Mean   : 283.1   Mean   :     0   Mean   :     0  
 3rd Qu.:13694   3rd Qu.: 247.0   3rd Qu.:  1338   3rd Qu.:  1398  
 Max.   :68784   Max.   :1060.0   Max.   : 20366   Max.   : 19754  
 NA's   :23472   NA's   :23472    NA's   :23472    NA's   :23472   
   csdiffat25      killsat25       assistsat25        deathsat25    
 Min.   :-283    Min.   : 0.000   Min.   :  0.000   Min.   : 0.000  
 1st Qu.: -20    1st Qu.: 1.000   1st Qu.:  2.000   1st Qu.: 1.000  
 Median :   0    Median : 2.000   Median :  4.000   Median : 2.000  
 Mean   :   0    Mean   : 3.259   Mean   :  6.901   Mean   : 3.267  
 3rd Qu.:  20    3rd Qu.: 4.000   3rd Qu.:  8.000   3rd Qu.: 4.000  
 Max.   : 283    Max.   :59.000   Max.   :100.000   Max.   :59.000  
 NA's   :23472   NA's   :23472    NA's   :23472     NA's   :23472   
 opp_killsat25    opp_assistsat25   opp_deathsat25  
 Min.   : 0.000   Min.   :  0.000   Min.   : 0.000  
 1st Qu.: 1.000   1st Qu.:  2.000   1st Qu.: 1.000  
 Median : 2.000   Median :  4.000   Median : 2.000  
 Mean   : 3.259   Mean   :  6.901   Mean   : 3.267  
 3rd Qu.: 4.000   3rd Qu.:  8.000   3rd Qu.: 4.000  
 Max.   :59.000   Max.   :100.000   Max.   :59.000  
 NA's   :23472    NA's   :23472     NA's   :23472   
summary(match_data %>% select(league, starts_with("ban"), golddiffat15))
    league              ban1               ban2               ban3          
 Length:115608      Length:115608      Length:115608      Length:115608     
 Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character  
                                                                            
                                                                            
                                                                            
                                                                            
     ban4               ban5            golddiffat15   
 Length:115608      Length:115608      Min.   :-14440  
 Class :character   Class :character   1st Qu.:  -638  
 Mode  :character   Mode  :character   Median :     0  
                                       Mean   :     0  
                                       3rd Qu.:   638  
                                       Max.   : 14440  
                                       NA's   :16716   

Data cleaning

Clean ban data

I focused on cleaning the ban data here. Missing values in the ban1 through ban5 columns are replaced with “None,” ensuring we can analyze bans even if some matches have incomplete ban data.

cleaned_data <- match_data %>% # replace missing values with none
    mutate(across(starts_with("ban"), ~ ifelse(is.na(.), "None", .)))  # replace NA with none

glimpse(cleaned_data %>% select(starts_with("ban")))
Rows: 115,608
Columns: 5
$ ban1 <chr> "Akali", "Akali", "Akali", "Akali", "Akali", "Poppy", "Poppy", "P…
$ ban2 <chr> "Nocturne", "Nocturne", "Nocturne", "Nocturne", "Nocturne", "Ashe…
$ ban3 <chr> "K'Sante", "K'Sante", "K'Sante", "K'Sante", "K'Sante", "Neeko", "…
$ ban4 <chr> "Lee Sin", "Lee Sin", "Lee Sin", "Lee Sin", "Lee Sin", "Vi", "Vi"…
$ ban5 <chr> "Wukong", "Wukong", "Wukong", "Wukong", "Wukong", "Jarvan IV", "J…
summary(cleaned_data %>% select(starts_with("ban")))
     ban1               ban2               ban3               ban4          
 Length:115608      Length:115608      Length:115608      Length:115608     
 Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character  
     ban5          
 Length:115608     
 Class :character  
 Mode  :character  

Filter rows with valid golddiffat15

I filtered out rows where the golddiffat15 had missing variables to make sure we focus only on matches with valid gold difference data, crucial for understanding early-game performance.

cleaned_data <- cleaned_data %>%
    filter(!is.na(golddiffat15))  # remove rows with missing golddiffat15


summary(cleaned_data$golddiffat15) # check cleaned data
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
 -14440    -638       0       0     638   14440 

Exploratory Data Analysis

Ban frequency by region (league)

colnames(cleaned_data %>% select(starts_with("ban")))
[1] "ban1" "ban2" "ban3" "ban4" "ban5"

Group bans into one column

I used the pivot_longer() function to place ban1 through ban5 columns into a ban_slot column for the ban type and a champion column for the champion names for grouping and ease of counting bans by champions and leagues.

pivoted_data <- cleaned_data %>%
  pivot_longer(
    cols = starts_with("ban"),
    names_to = "ban_slot",
    values_to = "champion",
    names_repair = "unique"
  )
New names:
• `champion` -> `champion...18`
• `champion` -> `champion...158`
glimpse(pivoted_data)
Rows: 494,460
Columns: 158
$ gameid                   <chr> "LOLTMNT99_132542", "LOLTMNT99_132542", "LOLT…
$ datacompleteness         <chr> "complete", "complete", "complete", "complete…
$ url                      <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ league                   <chr> "TSC", "TSC", "TSC", "TSC", "TSC", "TSC", "TS…
$ year                     <dbl> 2024, 2024, 2024, 2024, 2024, 2024, 2024, 202…
$ split                    <chr> "Winter", "Winter", "Winter", "Winter", "Wint…
$ playoffs                 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
$ date                     <dttm> 2024-01-05 14:08:39, 2024-01-05 14:08:39, 20…
$ game                     <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
$ patch                    <dbl> 14.01, 14.01, 14.01, 14.01, 14.01, 14.01, 14.…
$ participantid            <dbl> 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, …
$ side                     <chr> "Blue", "Blue", "Blue", "Blue", "Blue", "Blue…
$ position                 <chr> "top", "top", "top", "top", "top", "jng", "jn…
$ playername               <chr> "Taegyeong", "Taegyeong", "Taegyeong", "Taegy…
$ playerid                 <chr> "oe:player:ee75cdc0e3eb95a85c0b86439acc3a8", …
$ teamname                 <chr> "BoostGate Esports", "BoostGate Esports", "Bo…
$ teamid                   <chr> "oe:team:331c852427c61f82050b618c2b442c4", "o…
$ champion...18            <chr> "Renekton", "Renekton", "Renekton", "Renekton…
$ pick1                    <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ pick2                    <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ pick3                    <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ pick4                    <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ pick5                    <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ gamelength               <dbl> 1446, 1446, 1446, 1446, 1446, 1446, 1446, 144…
$ result                   <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
$ kills                    <dbl> 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 1, 1, 1, 1, 1, …
$ deaths                   <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, …
$ assists                  <dbl> 4, 4, 4, 4, 4, 11, 11, 11, 11, 11, 8, 8, 8, 8…
$ teamkills                <dbl> 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 2…
$ teamdeaths               <dbl> 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, …
$ doublekills              <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
$ triplekills              <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
$ quadrakills              <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
$ pentakills               <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
$ firstblood               <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
$ firstbloodkill           <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
$ firstbloodassist         <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
$ firstbloodvictim         <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, …
$ `team kpm`               <dbl> 0.8299, 0.8299, 0.8299, 0.8299, 0.8299, 0.829…
$ ckpm                     <dbl> 1.1203, 1.1203, 1.1203, 1.1203, 1.1203, 1.120…
$ firstdragon              <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ dragons                  <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_dragons              <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ elementaldrakes          <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_elementaldrakes      <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ infernals                <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ mountains                <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ clouds                   <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ oceans                   <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ chemtechs                <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ hextechs                 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ `dragons (type unknown)` <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ elders                   <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_elders               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ firstherald              <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ heralds                  <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_heralds              <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ void_grubs               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_void_grubs           <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ firstbaron               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ barons                   <dbl> 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, …
$ opp_barons               <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
$ firsttower               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ towers                   <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_towers               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ firstmidtower            <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ firsttothreetowers       <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ turretplates             <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_turretplates         <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ inhibitors               <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
$ opp_inhibitors           <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
$ damagetochampions        <dbl> 11806, 11806, 11806, 11806, 11806, 12455, 124…
$ dpm                      <dbl> 489.8755, 489.8755, 489.8755, 489.8755, 489.8…
$ damageshare              <dbl> 0.1920390, 0.1920390, 0.1920390, 0.1920390, 0…
$ damagetakenperminute     <dbl> 886.8050, 886.8050, 886.8050, 886.8050, 886.8…
$ damagemitigatedperminute <dbl> 947.7593, 947.7593, 947.7593, 947.7593, 947.7…
$ wardsplaced              <dbl> 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, …
$ wpm                      <dbl> 0.2905, 0.2905, 0.2905, 0.2905, 0.2905, 0.290…
$ wardskilled              <dbl> 2, 2, 2, 2, 2, 14, 14, 14, 14, 14, 7, 7, 7, 7…
$ wcpm                     <dbl> 0.0830, 0.0830, 0.0830, 0.0830, 0.0830, 0.580…
$ controlwardsbought       <dbl> 3, 3, 3, 3, 3, 7, 7, 7, 7, 7, 3, 3, 3, 3, 3, …
$ visionscore              <dbl> 17, 17, 17, 17, 17, 40, 40, 40, 40, 40, 24, 2…
$ vspm                     <dbl> 0.7054, 0.7054, 0.7054, 0.7054, 0.7054, 1.659…
$ totalgold                <dbl> 10762, 10762, 10762, 10762, 10762, 10895, 108…
$ earnedgold               <dbl> 7537, 7537, 7537, 7537, 7537, 7670, 7670, 767…
$ `earned gpm`             <dbl> 312.7386, 312.7386, 312.7386, 312.7386, 312.7…
$ earnedgoldshare          <dbl> 0.207072, 0.207072, 0.207072, 0.207072, 0.207…
$ goldspent                <dbl> 9025, 9025, 9025, 9025, 9025, 8625, 8625, 862…
$ gspd                     <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ gpr                      <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ `total cs`               <dbl> 210, 210, 210, 210, 210, 154, 154, 154, 154, …
$ minionkills              <dbl> 210, 210, 210, 210, 210, 27, 27, 27, 27, 27, …
$ monsterkills             <dbl> 0, 0, 0, 0, 0, 127, 127, 127, 127, 127, 0, 0,…
$ monsterkillsownjungle    <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ monsterkillsenemyjungle  <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ cspm                     <dbl> 8.7137, 8.7137, 8.7137, 8.7137, 8.7137, 6.390…
$ goldat10                 <dbl> 3325, 3325, 3325, 3325, 3325, 3409, 3409, 340…
$ xpat10                   <dbl> 4805, 4805, 4805, 4805, 4805, 3166, 3166, 316…
$ csat10                   <dbl> 84, 84, 84, 84, 84, 67, 67, 67, 67, 67, 85, 8…
$ opp_goldat10             <dbl> 3293, 3293, 3293, 3293, 3293, 3308, 3308, 330…
$ opp_xpat10               <dbl> 4921, 4921, 4921, 4921, 4921, 2837, 2837, 283…
$ opp_csat10               <dbl> 87, 87, 87, 87, 87, 54, 54, 54, 54, 54, 88, 8…
$ golddiffat10             <dbl> 32, 32, 32, 32, 32, 101, 101, 101, 101, 101, …
$ xpdiffat10               <dbl> -116, -116, -116, -116, -116, 329, 329, 329, …
$ csdiffat10               <dbl> -3, -3, -3, -3, -3, 13, 13, 13, 13, 13, -3, -…
$ killsat10                <dbl> 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, …
$ assistsat10              <dbl> 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
$ deathsat10               <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, …
$ opp_killsat10            <dbl> 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, …
$ opp_assistsat10          <dbl> 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, …
$ opp_deathsat10           <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
$ goldat15                 <dbl> 5229, 5229, 5229, 5229, 5229, 5366, 5366, 536…
$ xpat15                   <dbl> 7644, 7644, 7644, 7644, 7644, 5342, 5342, 534…
$ csat15                   <dbl> 136, 136, 136, 136, 136, 99, 99, 99, 99, 99, …
$ opp_goldat15             <dbl> 5804, 5804, 5804, 5804, 5804, 5130, 5130, 513…
$ opp_xpat15               <dbl> 8247, 8247, 8247, 8247, 8247, 5449, 5449, 544…
$ opp_csat15               <dbl> 144, 144, 144, 144, 144, 105, 105, 105, 105, …
$ golddiffat15             <dbl> -575, -575, -575, -575, -575, 236, 236, 236, …
$ xpdiffat15               <dbl> -603, -603, -603, -603, -603, -107, -107, -10…
$ csdiffat15               <dbl> -8, -8, -8, -8, -8, -6, -6, -6, -6, -6, -4, -…
$ killsat15                <dbl> 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, …
$ assistsat15              <dbl> 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, …
$ deathsat15               <dbl> 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
$ opp_killsat15            <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, …
$ opp_assistsat15          <dbl> 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, …
$ opp_deathsat15           <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
$ goldat20                 <dbl> 7414, 7414, 7414, 7414, 7414, 7918, 7918, 791…
$ xpat20                   <dbl> 10282, 10282, 10282, 10282, 10282, 7822, 7822…
$ csat20                   <dbl> 178, 178, 178, 178, 178, 141, 141, 141, 141, …
$ opp_goldat20             <dbl> 7893, 7893, 7893, 7893, 7893, 6656, 6656, 665…
$ opp_xpat20               <dbl> 11109, 11109, 11109, 11109, 11109, 7866, 7866…
$ opp_csat20               <dbl> 191, 191, 191, 191, 191, 138, 138, 138, 138, …
$ golddiffat20             <dbl> -479, -479, -479, -479, -479, 1262, 1262, 126…
$ xpdiffat20               <dbl> -827, -827, -827, -827, -827, -44, -44, -44, …
$ csdiffat20               <dbl> -13, -13, -13, -13, -13, 3, 3, 3, 3, 3, 20, 2…
$ killsat20                <dbl> 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, …
$ assistsat20              <dbl> 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, …
$ deathsat20               <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
$ opp_killsat20            <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
$ opp_assistsat20          <dbl> 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, …
$ opp_deathsat20           <dbl> 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, …
$ goldat25                 <dbl> 10762, 10762, 10762, 10762, 10762, 10895, 108…
$ xpat25                   <dbl> 13586, 13586, 13586, 13586, 13586, 11286, 112…
$ csat25                   <dbl> 210, 210, 210, 210, 210, 154, 154, 154, 154, …
$ opp_goldat25             <dbl> 8834, 8834, 8834, 8834, 8834, 7952, 7952, 795…
$ opp_xpat25               <dbl> 12459, 12459, 12459, 12459, 12459, 9331, 9331…
$ opp_csat25               <dbl> 207, 207, 207, 207, 207, 154, 154, 154, 154, …
$ golddiffat25             <dbl> 1928, 1928, 1928, 1928, 1928, 2943, 2943, 294…
$ xpdiffat25               <dbl> 1127, 1127, 1127, 1127, 1127, 1955, 1955, 195…
$ csdiffat25               <dbl> 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 18, 18, 18, 18,…
$ killsat25                <dbl> 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 1, 1, 1, 1, 1, …
$ assistsat25              <dbl> 4, 4, 4, 4, 4, 11, 11, 11, 11, 11, 8, 8, 8, 8…
$ deathsat25               <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, …
$ opp_killsat25            <dbl> 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, …
$ opp_assistsat25          <dbl> 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, …
$ opp_deathsat25           <dbl> 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, …
$ ban_slot                 <chr> "ban1", "ban2", "ban3", "ban4", "ban5", "ban1…
$ champion...158           <chr> "Orianna", "Rell", "Viego", "Viktor", "Malphi…

Analyze banned champions

colnames(pivoted_data)
  [1] "gameid"                   "datacompleteness"        
  [3] "url"                      "league"                  
  [5] "year"                     "split"                   
  [7] "playoffs"                 "date"                    
  [9] "game"                     "patch"                   
 [11] "participantid"            "side"                    
 [13] "position"                 "playername"              
 [15] "playerid"                 "teamname"                
 [17] "teamid"                   "champion...18"           
 [19] "pick1"                    "pick2"                   
 [21] "pick3"                    "pick4"                   
 [23] "pick5"                    "gamelength"              
 [25] "result"                   "kills"                   
 [27] "deaths"                   "assists"                 
 [29] "teamkills"                "teamdeaths"              
 [31] "doublekills"              "triplekills"             
 [33] "quadrakills"              "pentakills"              
 [35] "firstblood"               "firstbloodkill"          
 [37] "firstbloodassist"         "firstbloodvictim"        
 [39] "team kpm"                 "ckpm"                    
 [41] "firstdragon"              "dragons"                 
 [43] "opp_dragons"              "elementaldrakes"         
 [45] "opp_elementaldrakes"      "infernals"               
 [47] "mountains"                "clouds"                  
 [49] "oceans"                   "chemtechs"               
 [51] "hextechs"                 "dragons (type unknown)"  
 [53] "elders"                   "opp_elders"              
 [55] "firstherald"              "heralds"                 
 [57] "opp_heralds"              "void_grubs"              
 [59] "opp_void_grubs"           "firstbaron"              
 [61] "barons"                   "opp_barons"              
 [63] "firsttower"               "towers"                  
 [65] "opp_towers"               "firstmidtower"           
 [67] "firsttothreetowers"       "turretplates"            
 [69] "opp_turretplates"         "inhibitors"              
 [71] "opp_inhibitors"           "damagetochampions"       
 [73] "dpm"                      "damageshare"             
 [75] "damagetakenperminute"     "damagemitigatedperminute"
 [77] "wardsplaced"              "wpm"                     
 [79] "wardskilled"              "wcpm"                    
 [81] "controlwardsbought"       "visionscore"             
 [83] "vspm"                     "totalgold"               
 [85] "earnedgold"               "earned gpm"              
 [87] "earnedgoldshare"          "goldspent"               
 [89] "gspd"                     "gpr"                     
 [91] "total cs"                 "minionkills"             
 [93] "monsterkills"             "monsterkillsownjungle"   
 [95] "monsterkillsenemyjungle"  "cspm"                    
 [97] "goldat10"                 "xpat10"                  
 [99] "csat10"                   "opp_goldat10"            
[101] "opp_xpat10"               "opp_csat10"              
[103] "golddiffat10"             "xpdiffat10"              
[105] "csdiffat10"               "killsat10"               
[107] "assistsat10"              "deathsat10"              
[109] "opp_killsat10"            "opp_assistsat10"         
[111] "opp_deathsat10"           "goldat15"                
[113] "xpat15"                   "csat15"                  
[115] "opp_goldat15"             "opp_xpat15"              
[117] "opp_csat15"               "golddiffat15"            
[119] "xpdiffat15"               "csdiffat15"              
[121] "killsat15"                "assistsat15"             
[123] "deathsat15"               "opp_killsat15"           
[125] "opp_assistsat15"          "opp_deathsat15"          
[127] "goldat20"                 "xpat20"                  
[129] "csat20"                   "opp_goldat20"            
[131] "opp_xpat20"               "opp_csat20"              
[133] "golddiffat20"             "xpdiffat20"              
[135] "csdiffat20"               "killsat20"               
[137] "assistsat20"              "deathsat20"              
[139] "opp_killsat20"            "opp_assistsat20"         
[141] "opp_deathsat20"           "goldat25"                
[143] "xpat25"                   "csat25"                  
[145] "opp_goldat25"             "opp_xpat25"              
[147] "opp_csat25"               "golddiffat25"            
[149] "xpdiffat25"               "csdiffat25"              
[151] "killsat25"                "assistsat25"             
[153] "deathsat25"               "opp_killsat25"           
[155] "opp_assistsat25"          "opp_deathsat25"          
[157] "ban_slot"                 "champion...158"          
pivoted_data <- cleaned_data %>%
  pivot_longer(
    cols = starts_with("ban"),
    names_to = "ban_slot",
    values_to = "champion",
    names_repair = "unique"
  )
New names:
• `champion` -> `champion...18`
• `champion` -> `champion...158`
# confirm pivoted data structure
glimpse(pivoted_data)
Rows: 494,460
Columns: 158
$ gameid                   <chr> "LOLTMNT99_132542", "LOLTMNT99_132542", "LOLT…
$ datacompleteness         <chr> "complete", "complete", "complete", "complete…
$ url                      <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ league                   <chr> "TSC", "TSC", "TSC", "TSC", "TSC", "TSC", "TS…
$ year                     <dbl> 2024, 2024, 2024, 2024, 2024, 2024, 2024, 202…
$ split                    <chr> "Winter", "Winter", "Winter", "Winter", "Wint…
$ playoffs                 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
$ date                     <dttm> 2024-01-05 14:08:39, 2024-01-05 14:08:39, 20…
$ game                     <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
$ patch                    <dbl> 14.01, 14.01, 14.01, 14.01, 14.01, 14.01, 14.…
$ participantid            <dbl> 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, …
$ side                     <chr> "Blue", "Blue", "Blue", "Blue", "Blue", "Blue…
$ position                 <chr> "top", "top", "top", "top", "top", "jng", "jn…
$ playername               <chr> "Taegyeong", "Taegyeong", "Taegyeong", "Taegy…
$ playerid                 <chr> "oe:player:ee75cdc0e3eb95a85c0b86439acc3a8", …
$ teamname                 <chr> "BoostGate Esports", "BoostGate Esports", "Bo…
$ teamid                   <chr> "oe:team:331c852427c61f82050b618c2b442c4", "o…
$ champion...18            <chr> "Renekton", "Renekton", "Renekton", "Renekton…
$ pick1                    <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ pick2                    <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ pick3                    <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ pick4                    <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ pick5                    <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ gamelength               <dbl> 1446, 1446, 1446, 1446, 1446, 1446, 1446, 144…
$ result                   <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
$ kills                    <dbl> 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 1, 1, 1, 1, 1, …
$ deaths                   <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, …
$ assists                  <dbl> 4, 4, 4, 4, 4, 11, 11, 11, 11, 11, 8, 8, 8, 8…
$ teamkills                <dbl> 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 2…
$ teamdeaths               <dbl> 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, …
$ doublekills              <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
$ triplekills              <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
$ quadrakills              <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
$ pentakills               <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
$ firstblood               <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
$ firstbloodkill           <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
$ firstbloodassist         <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
$ firstbloodvictim         <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, …
$ `team kpm`               <dbl> 0.8299, 0.8299, 0.8299, 0.8299, 0.8299, 0.829…
$ ckpm                     <dbl> 1.1203, 1.1203, 1.1203, 1.1203, 1.1203, 1.120…
$ firstdragon              <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ dragons                  <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_dragons              <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ elementaldrakes          <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_elementaldrakes      <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ infernals                <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ mountains                <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ clouds                   <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ oceans                   <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ chemtechs                <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ hextechs                 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ `dragons (type unknown)` <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ elders                   <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_elders               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ firstherald              <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ heralds                  <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_heralds              <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ void_grubs               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_void_grubs           <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ firstbaron               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ barons                   <dbl> 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, …
$ opp_barons               <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
$ firsttower               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ towers                   <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_towers               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ firstmidtower            <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ firsttothreetowers       <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ turretplates             <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_turretplates         <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ inhibitors               <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
$ opp_inhibitors           <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
$ damagetochampions        <dbl> 11806, 11806, 11806, 11806, 11806, 12455, 124…
$ dpm                      <dbl> 489.8755, 489.8755, 489.8755, 489.8755, 489.8…
$ damageshare              <dbl> 0.1920390, 0.1920390, 0.1920390, 0.1920390, 0…
$ damagetakenperminute     <dbl> 886.8050, 886.8050, 886.8050, 886.8050, 886.8…
$ damagemitigatedperminute <dbl> 947.7593, 947.7593, 947.7593, 947.7593, 947.7…
$ wardsplaced              <dbl> 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, …
$ wpm                      <dbl> 0.2905, 0.2905, 0.2905, 0.2905, 0.2905, 0.290…
$ wardskilled              <dbl> 2, 2, 2, 2, 2, 14, 14, 14, 14, 14, 7, 7, 7, 7…
$ wcpm                     <dbl> 0.0830, 0.0830, 0.0830, 0.0830, 0.0830, 0.580…
$ controlwardsbought       <dbl> 3, 3, 3, 3, 3, 7, 7, 7, 7, 7, 3, 3, 3, 3, 3, …
$ visionscore              <dbl> 17, 17, 17, 17, 17, 40, 40, 40, 40, 40, 24, 2…
$ vspm                     <dbl> 0.7054, 0.7054, 0.7054, 0.7054, 0.7054, 1.659…
$ totalgold                <dbl> 10762, 10762, 10762, 10762, 10762, 10895, 108…
$ earnedgold               <dbl> 7537, 7537, 7537, 7537, 7537, 7670, 7670, 767…
$ `earned gpm`             <dbl> 312.7386, 312.7386, 312.7386, 312.7386, 312.7…
$ earnedgoldshare          <dbl> 0.207072, 0.207072, 0.207072, 0.207072, 0.207…
$ goldspent                <dbl> 9025, 9025, 9025, 9025, 9025, 8625, 8625, 862…
$ gspd                     <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ gpr                      <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ `total cs`               <dbl> 210, 210, 210, 210, 210, 154, 154, 154, 154, …
$ minionkills              <dbl> 210, 210, 210, 210, 210, 27, 27, 27, 27, 27, …
$ monsterkills             <dbl> 0, 0, 0, 0, 0, 127, 127, 127, 127, 127, 0, 0,…
$ monsterkillsownjungle    <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ monsterkillsenemyjungle  <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ cspm                     <dbl> 8.7137, 8.7137, 8.7137, 8.7137, 8.7137, 6.390…
$ goldat10                 <dbl> 3325, 3325, 3325, 3325, 3325, 3409, 3409, 340…
$ xpat10                   <dbl> 4805, 4805, 4805, 4805, 4805, 3166, 3166, 316…
$ csat10                   <dbl> 84, 84, 84, 84, 84, 67, 67, 67, 67, 67, 85, 8…
$ opp_goldat10             <dbl> 3293, 3293, 3293, 3293, 3293, 3308, 3308, 330…
$ opp_xpat10               <dbl> 4921, 4921, 4921, 4921, 4921, 2837, 2837, 283…
$ opp_csat10               <dbl> 87, 87, 87, 87, 87, 54, 54, 54, 54, 54, 88, 8…
$ golddiffat10             <dbl> 32, 32, 32, 32, 32, 101, 101, 101, 101, 101, …
$ xpdiffat10               <dbl> -116, -116, -116, -116, -116, 329, 329, 329, …
$ csdiffat10               <dbl> -3, -3, -3, -3, -3, 13, 13, 13, 13, 13, -3, -…
$ killsat10                <dbl> 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, …
$ assistsat10              <dbl> 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
$ deathsat10               <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, …
$ opp_killsat10            <dbl> 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, …
$ opp_assistsat10          <dbl> 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, …
$ opp_deathsat10           <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
$ goldat15                 <dbl> 5229, 5229, 5229, 5229, 5229, 5366, 5366, 536…
$ xpat15                   <dbl> 7644, 7644, 7644, 7644, 7644, 5342, 5342, 534…
$ csat15                   <dbl> 136, 136, 136, 136, 136, 99, 99, 99, 99, 99, …
$ opp_goldat15             <dbl> 5804, 5804, 5804, 5804, 5804, 5130, 5130, 513…
$ opp_xpat15               <dbl> 8247, 8247, 8247, 8247, 8247, 5449, 5449, 544…
$ opp_csat15               <dbl> 144, 144, 144, 144, 144, 105, 105, 105, 105, …
$ golddiffat15             <dbl> -575, -575, -575, -575, -575, 236, 236, 236, …
$ xpdiffat15               <dbl> -603, -603, -603, -603, -603, -107, -107, -10…
$ csdiffat15               <dbl> -8, -8, -8, -8, -8, -6, -6, -6, -6, -6, -4, -…
$ killsat15                <dbl> 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, …
$ assistsat15              <dbl> 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, …
$ deathsat15               <dbl> 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
$ opp_killsat15            <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, …
$ opp_assistsat15          <dbl> 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, …
$ opp_deathsat15           <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
$ goldat20                 <dbl> 7414, 7414, 7414, 7414, 7414, 7918, 7918, 791…
$ xpat20                   <dbl> 10282, 10282, 10282, 10282, 10282, 7822, 7822…
$ csat20                   <dbl> 178, 178, 178, 178, 178, 141, 141, 141, 141, …
$ opp_goldat20             <dbl> 7893, 7893, 7893, 7893, 7893, 6656, 6656, 665…
$ opp_xpat20               <dbl> 11109, 11109, 11109, 11109, 11109, 7866, 7866…
$ opp_csat20               <dbl> 191, 191, 191, 191, 191, 138, 138, 138, 138, …
$ golddiffat20             <dbl> -479, -479, -479, -479, -479, 1262, 1262, 126…
$ xpdiffat20               <dbl> -827, -827, -827, -827, -827, -44, -44, -44, …
$ csdiffat20               <dbl> -13, -13, -13, -13, -13, 3, 3, 3, 3, 3, 20, 2…
$ killsat20                <dbl> 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, …
$ assistsat20              <dbl> 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, …
$ deathsat20               <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
$ opp_killsat20            <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
$ opp_assistsat20          <dbl> 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, …
$ opp_deathsat20           <dbl> 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, …
$ goldat25                 <dbl> 10762, 10762, 10762, 10762, 10762, 10895, 108…
$ xpat25                   <dbl> 13586, 13586, 13586, 13586, 13586, 11286, 112…
$ csat25                   <dbl> 210, 210, 210, 210, 210, 154, 154, 154, 154, …
$ opp_goldat25             <dbl> 8834, 8834, 8834, 8834, 8834, 7952, 7952, 795…
$ opp_xpat25               <dbl> 12459, 12459, 12459, 12459, 12459, 9331, 9331…
$ opp_csat25               <dbl> 207, 207, 207, 207, 207, 154, 154, 154, 154, …
$ golddiffat25             <dbl> 1928, 1928, 1928, 1928, 1928, 2943, 2943, 294…
$ xpdiffat25               <dbl> 1127, 1127, 1127, 1127, 1127, 1955, 1955, 195…
$ csdiffat25               <dbl> 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 18, 18, 18, 18,…
$ killsat25                <dbl> 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 1, 1, 1, 1, 1, …
$ assistsat25              <dbl> 4, 4, 4, 4, 4, 11, 11, 11, 11, 11, 8, 8, 8, 8…
$ deathsat25               <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, …
$ opp_killsat25            <dbl> 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, …
$ opp_assistsat25          <dbl> 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, …
$ opp_deathsat25           <dbl> 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, …
$ ban_slot                 <chr> "ban1", "ban2", "ban3", "ban4", "ban5", "ban1…
$ champion...158           <chr> "Orianna", "Rell", "Viego", "Viktor", "Malphi…

Count and sort overall ban frequency

We identified the most banned champions across all leagues. By aggregating the ban data, we can pinpoint the champions that teams consistently prioritize removing from play, possibly due to their strong performance or disruptive playstyles.

# count frequency of each banned champion overall
overall_ban_frequency <- pivoted_data %>%
  group_by(champion...158) %>%
  summarize(count = n(), .groups = "drop") %>%
  arrange(desc(count))

# view top 10 most banned champions overall list
head(overall_ban_frequency, 10)
# A tibble: 10 × 2
   champion...158 count
   <chr>          <int>
 1 Ashe           23814
 2 Rumble         23280
 3 Kalista        17952
 4 Vi             15354
 5 Varus          13722
 6 Tristana       13566
 7 Orianna        11808
 8 Skarner        11544
 9 Maokai         11082
10 Senna          10908

Visualize top 10 most banned champions

top_10_banned <- overall_ban_frequency %>%
  slice_max(order_by = count, n = 10)

ggplot(top_10_banned, aes(x = reorder(champion...158, count), y = count)) +
  geom_bar(stat = "identity", fill = "#FF4500", alpha = 0.8) +
  coord_flip() +
  labs(title = "Top 10 Most Banned Champions Overall",
       x = "Champion",
       y = "Number of Bans") +
  theme_minimal()

Break down bans by region (league)

Filter data for specific leagues

filtered_data <- pivoted_data %>%
  filter(league %in% c("LCK", "LEC", "LCS", "CBLOL", "PCS"))

Count bans by league

regional_ban_frequency <- pivoted_data %>%
  group_by(league, champion...158) %>%
  summarize(count = n(), .groups = "drop") %>%
  arrange(league, desc(count))

# view top banned champions by region
head(regional_ban_frequency)
# A tibble: 6 × 3
  league champion...158 count
  <chr>  <chr>          <int>
1 AC     Varus            132
2 AC     Yone             126
3 AC     None             108
4 AC     Sejuani          108
5 AC     Brand            102
6 AC     Jax              102

Visualize regional bans

The bar chart shows the top 10 most banned champions across the five leagues. Each champion has a group of bars representing the number of times they were banned in each region. The colors differentiate the leagues, allowing for easy visual comparison of the popularity of bans.

We can identify which regions prioritize banning certain champions; for instance, champions like Ashe and Rumble appear highly banned across most regions, suggesting their perceived strength or influence in the current meta, but some champions have relatively consistent ban counts across regions, while others (like Kalista) show strong regional preferences.

bans_by_region <- filtered_data %>% # count bans by region and champion
  group_by(league, champion...158) %>%
  summarize(count = n(), .groups = "drop")

top_10_champions <- bans_by_region %>% # filter the top 10 most banned champions overall
  group_by(champion...158) %>%
  summarize(total_count = sum(count), .groups = "drop") %>%
  arrange(desc(total_count)) %>%
  slice_head(n = 10) %>%
  pull(champion...158)


bans_top_10 <- bans_by_region %>% # filter data for top 10 champs only
  filter(champion...158 %in% top_10_champions)

# create grouped bar chart
ggplot(bans_top_10, aes(x = champion...158, y = count, fill = league)) +
  geom_bar(stat = "identity", position = "dodge") +
  labs(
    title = "Top 10 Most Banned Champions by Region",
    x = "Champion",
    y = "Number of Bans",
    fill = "Region"
  ) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Compare bans to average gold difference

Let’s see whether specific champion bans are associated with better early-game performance, measured by golddiffat15.

Group data by champ and calc average gold difference

# group data by banned champions and calculate average gold difference
bans_gold_diff <- pivoted_data %>%
  group_by(champion...158) %>%
  summarize(avg_gold_diff = mean(golddiffat15, na.rm = TRUE)) %>%
  arrange(desc(avg_gold_diff))


head(bans_gold_diff)
# A tibble: 6 × 2
  champion...158 avg_gold_diff
  <chr>                  <dbl>
1 Qiyana                 3828.
2 Kayn                   1113.
3 Kayle                  1103.
4 Talon                   992.
5 Shaco                   808 
6 Evelynn                 780.

Aggregate and normalize ban data

# aggregate data by champ and patch - calc normalized ban proportions
bans_by_patch_normalized <- cleaned_data %>%
  pivot_longer(
    cols = starts_with("ban"),
    names_to = "ban_slot",
    values_to = "champion...158",
    values_drop_na = TRUE
  ) %>%
  group_by(patch, champion) %>%
  summarize(ban_count = n(), .groups = "drop") %>%
  group_by(patch) %>%
  mutate(ban_proportion = ban_count / sum(ban_count))

glimpse(bans_by_patch_normalized)
Rows: 2,663
Columns: 4
Groups: patch [21]
$ patch          <dbl> 14.01, 14.01, 14.01, 14.01, 14.01, 14.01, 14.01, 14.01,…
$ champion       <chr> "Aatrox", "Ahri", "Akali", "Akshan", "Alistar", "Amumu"…
$ ban_count      <int> 780, 85, 530, 5, 125, 10, 810, 445, 10, 1495, 200, 80, …
$ ban_proportion <dbl> 0.0207667732, 0.0022630458, 0.0141107561, 0.0001331203,…

Ban frequency by region: dot plot

CBLOL and PCS show smaller median ban counts compared to LCK, LCS, and LEC, indicating that bans in CBLOL and PCS might be more evenly distributed across champions.

LCK has the highest variability, shown by a wide interquartile range (IQR) and the presence of outliers. This suggests that certain champions are prioritized more in bans in LCK. In all leagues, some champions are banned significantly more often, indicating key meta-picks that teams aim to eliminate.

Regions like LCK tend to heavily ban certain champions, possibly due to regional strategies or player skill with those champions.

bans_spread <- cleaned_data %>%
  pivot_longer(
    cols = starts_with("ban"),
    names_to = "ban_slot",
    values_to = "champion...158",
    values_drop_na = TRUE
  ) %>%
  filter(!is.na(league) & league %in% c("CBLOL", "LCK", "LCS", "LEC", "PCS")) %>%
  group_by(league, champion) %>%
  summarize(ban_count = n(), .groups = "drop")

library(ggplot2)
ggplot(bans_spread, aes(x = league, y = ban_count, fill = league)) +
  geom_boxplot(alpha = 0.8) +
  labs(
    title = "Distribution of Champion Bans Across Leagues",
    x = "League",
    y = "Number of Bans",
    fill = "League"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(size = 14, face = "bold"),
    axis.text.x = element_text(size = 10, face = "bold"),
    axis.text.y = element_text(size = 10),
    legend.position = "none"
  )

Regression Analysis

We observed the p-values for ban_count and league to determine which variables significantly impact golddiffat15. Then, we interpreted the adjusted R² to understand how well the model explains the variance in the data, and used diagnostic plots to assess the model’s assumptions (e.g., normality of residuals, homoscedasticity, and potential outliers).

match_data <- read_csv("F:/Fall 2024/MC/DATA 110/b-e-a-utiful/2024_LoL_esports_match_data_from_OraclesElixir.csv")
Rows: 115608 Columns: 161
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr   (22): gameid, datacompleteness, url, league, split, side, position, pl...
dbl  (138): year, playoffs, game, patch, participantid, gamelength, result, ...
dttm   (1): date

ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
glimpse(match_data)
Rows: 115,608
Columns: 161
$ gameid                   <chr> "10660-10660_game_1", "10660-10660_game_1", "…
$ datacompleteness         <chr> "partial", "partial", "partial", "partial", "…
$ url                      <chr> "https://lpl.qq.com/es/stats.shtml?bmid=10660…
$ league                   <chr> "DCup", "DCup", "DCup", "DCup", "DCup", "DCup…
$ year                     <dbl> 2023, 2023, 2023, 2023, 2023, 2023, 2023, 202…
$ split                    <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ playoffs                 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
$ date                     <dttm> 2024-01-01 05:13:15, 2024-01-01 05:13:15, 20…
$ game                     <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, …
$ patch                    <dbl> 13.24, 13.24, 13.24, 13.24, 13.24, 13.24, 13.…
$ participantid            <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100, 200, 1, 2…
$ side                     <chr> "Blue", "Blue", "Blue", "Blue", "Blue", "Red"…
$ position                 <chr> "top", "jng", "mid", "bot", "sup", "top", "jn…
$ playername               <chr> "Zika", "Weiwei", "Scout", "GALA", "Mark", "X…
$ playerid                 <chr> "oe:player:65ed20b21e2993fb00dbd21a2fd991b", …
$ teamname                 <chr> "LNG Esports", "LNG Esports", "LNG Esports", …
$ teamid                   <chr> "oe:team:a9145b7711873f53e610fbba0493484", "o…
$ champion                 <chr> "Aatrox", "Maokai", "Orianna", "Kalista", "Se…
$ ban1                     <chr> "Akali", "Akali", "Akali", "Akali", "Akali", …
$ ban2                     <chr> "Nocturne", "Nocturne", "Nocturne", "Nocturne…
$ ban3                     <chr> "K'Sante", "K'Sante", "K'Sante", "K'Sante", "…
$ ban4                     <chr> "Lee Sin", "Lee Sin", "Lee Sin", "Lee Sin", "…
$ ban5                     <chr> "Wukong", "Wukong", "Wukong", "Wukong", "Wuko…
$ pick1                    <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "Kali…
$ pick2                    <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "Senn…
$ pick3                    <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "Oria…
$ pick4                    <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "Maok…
$ pick5                    <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "Aatr…
$ gamelength               <dbl> 1886, 1886, 1886, 1886, 1886, 1886, 1886, 188…
$ result                   <dbl> 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, …
$ kills                    <dbl> 1, 0, 0, 2, 0, 4, 1, 4, 7, 0, 3, 16, 2, 0, 1,…
$ deaths                   <dbl> 3, 4, 2, 4, 3, 0, 0, 0, 1, 2, 16, 3, 3, 5, 4,…
$ assists                  <dbl> 1, 3, 0, 0, 3, 6, 12, 7, 5, 13, 7, 43, 0, 2, …
$ teamkills                <dbl> 3, 3, 3, 3, 3, 16, 16, 16, 16, 16, 3, 16, 3, …
$ teamdeaths               <dbl> 16, 16, 16, 16, 16, 3, 3, 3, 3, 3, 16, 3, 17,…
$ doublekills              <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ triplekills              <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ quadrakills              <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ pentakills               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ firstblood               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0, 1,…
$ firstbloodkill           <dbl> 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, NA, NA, 0, 0, 0…
$ firstbloodassist         <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ firstbloodvictim         <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ `team kpm`               <dbl> 0.0954, 0.0954, 0.0954, 0.0954, 0.0954, 0.509…
$ ckpm                     <dbl> 0.6045, 0.6045, 0.6045, 0.6045, 0.6045, 0.604…
$ firstdragon              <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ dragons                  <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 2, 3,…
$ opp_dragons              <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 3, 2,…
$ elementaldrakes          <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_elementaldrakes      <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ infernals                <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ mountains                <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ clouds                   <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ oceans                   <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ chemtechs                <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ hextechs                 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ `dragons (type unknown)` <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 2, 3,…
$ elders                   <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_elders               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ firstherald              <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ heralds                  <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_heralds              <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ void_grubs               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_void_grubs           <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ firstbaron               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ barons                   <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0, 2,…
$ opp_barons               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 2, 0,…
$ firsttower               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ towers                   <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 2, 9,…
$ opp_towers               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 9, 2,…
$ firstmidtower            <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ firsttothreetowers       <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ turretplates             <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_turretplates         <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ inhibitors               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0, 1,…
$ opp_inhibitors           <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, 0,…
$ damagetochampions        <dbl> 7092, 7361, 10005, 10892, 6451, 14049, 3945, …
$ dpm                      <dbl> 225.6204, 234.1782, 318.2927, 346.5111, 205.2…
$ damageshare              <dbl> 0.1696480, 0.1761010, 0.2393550, 0.2605630, 0…
$ damagetakenperminute     <dbl> 564.1463, 847.4761, 432.2163, 491.4528, 239.7…
$ damagemitigatedperminute <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ wardsplaced              <dbl> 14, 10, 4, 22, 47, 11, 14, 10, 11, 76, 97, 12…
$ wpm                      <dbl> 0.4454, 0.3181, 0.1273, 0.6999, 1.4952, 0.349…
$ wardskilled              <dbl> 4, 12, 8, 13, 22, 3, 8, 14, 14, 10, 59, 49, 0…
$ wcpm                     <dbl> 0.1273, 0.3818, 0.2545, 0.4136, 0.6999, 0.095…
$ controlwardsbought       <dbl> 5, 10, 2, 4, 12, 5, 11, 8, 7, 25, 33, 56, 6, …
$ visionscore              <dbl> 24, 39, 31, 44, 111, 26, 49, 44, 41, 117, 250…
$ vspm                     <dbl> 0.7635, 1.2407, 0.9862, 1.3998, 3.5313, 0.827…
$ totalgold                <dbl> 11083, 8636, 10743, 12224, 7221, 13378, 10590…
$ earnedgold               <dbl> 6960, 4513, 6620, 8101, 3098, 9255, 6467, 104…
$ `earned gpm`             <dbl> 221.4210, 143.5737, 210.6045, 257.7200, 98.55…
$ earnedgoldshare          <dbl> 0.2376080, 0.1540690, 0.2260000, 0.2765610, 0…
$ goldspent                <dbl> 10784, 8840, 10594, 11119, 6175, 11179, 9455,…
$ gspd                     <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, -0.13…
$ gpr                      <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ `total cs`               <dbl> 279, 153, 270, 311, 30, 283, 169, 329, 303, 1…
$ minionkills              <dbl> 256, 14, 269, 307, 30, 245, 12, 319, 294, 16,…
$ monsterkills             <dbl> 23, 139, 1, 4, 0, 38, 157, 10, 9, 0, 167, 213…
$ monsterkillsownjungle    <dbl> 16, 111, 1, 0, 0, 15, 91, 7, 9, 0, 127, 121, …
$ monsterkillsenemyjungle  <dbl> 0, 3, 0, 0, 0, 6, 21, 2, 0, 0, 3, 29, 0, 1, 0…
$ cspm                     <dbl> 8.8759, 4.8674, 8.5896, 9.8940, 0.9544, 9.003…
$ goldat10                 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ xpat10                   <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ csat10                   <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_goldat10             <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_xpat10               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_csat10               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ golddiffat10             <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ xpdiffat10               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ csdiffat10               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ killsat10                <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ assistsat10              <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ deathsat10               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_killsat10            <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_assistsat10          <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_deathsat10           <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ goldat15                 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ xpat15                   <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ csat15                   <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_goldat15             <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_xpat15               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_csat15               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ golddiffat15             <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ xpdiffat15               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ csdiffat15               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ killsat15                <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ assistsat15              <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ deathsat15               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_killsat15            <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_assistsat15          <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_deathsat15           <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ goldat20                 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ xpat20                   <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ csat20                   <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_goldat20             <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_xpat20               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_csat20               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ golddiffat20             <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ xpdiffat20               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ csdiffat20               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ killsat20                <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ assistsat20              <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ deathsat20               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_killsat20            <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_assistsat20          <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_deathsat20           <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ goldat25                 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ xpat25                   <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ csat25                   <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_goldat25             <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_xpat25               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_csat25               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ golddiffat25             <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ xpdiffat25               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ csdiffat25               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ killsat25                <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ assistsat25              <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ deathsat25               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_killsat25            <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_assistsat25          <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ opp_deathsat25           <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
summary(match_data)
    gameid          datacompleteness       url               league         
 Length:115608      Length:115608      Length:115608      Length:115608     
 Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character  
                                                                            
                                                                            
                                                                            
                                                                            
      year         split              playoffs     
 Min.   :2023   Length:115608      Min.   :0.0000  
 1st Qu.:2024   Class :character   1st Qu.:0.0000  
 Median :2024   Mode  :character   Median :0.0000  
 Mean   :2024                      Mean   :0.2176  
 3rd Qu.:2024                      3rd Qu.:0.0000  
 Max.   :2025                      Max.   :1.0000  
                                                   
      date                             game           patch      
 Min.   :2024-01-01 05:13:15.00   Min.   :1.000   Min.   :13.24  
 1st Qu.:2024-03-08 21:07:46.00   1st Qu.:1.000   1st Qu.:14.04  
 Median :2024-06-06 15:59:43.50   Median :1.000   Median :14.10  
 Mean   :2024-05-25 22:27:15.51   Mean   :1.676   Mean   :14.09  
 3rd Qu.:2024-07-26 11:30:45.00   3rd Qu.:2.000   3rd Qu.:14.13  
 Max.   :2024-11-11 18:36:23.00   Max.   :5.000   Max.   :14.21  
                                                  NA's   :204    
 participantid        side             position          playername       
 Min.   :  1.00   Length:115608      Length:115608      Length:115608     
 1st Qu.:  3.75   Class :character   Class :character   Class :character  
 Median :  6.50   Mode  :character   Mode  :character   Mode  :character  
 Mean   : 29.58                                                           
 3rd Qu.:  9.25                                                           
 Max.   :200.00                                                           
                                                                          
   playerid           teamname            teamid            champion        
 Length:115608      Length:115608      Length:115608      Length:115608     
 Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character  
                                                                            
                                                                            
                                                                            
                                                                            
     ban1               ban2               ban3               ban4          
 Length:115608      Length:115608      Length:115608      Length:115608     
 Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character  
                                                                            
                                                                            
                                                                            
                                                                            
     ban5              pick1              pick2              pick3          
 Length:115608      Length:115608      Length:115608      Length:115608     
 Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character  
                                                                            
                                                                            
                                                                            
                                                                            
    pick4              pick5             gamelength       result      
 Length:115608      Length:115608      Min.   : 522   Min.   :0.0000  
 Class :character   Class :character   1st Qu.:1661   1st Qu.:0.0000  
 Mode  :character   Mode  :character   Median :1858   Median :0.0000  
                                       Mean   :1898   Mean   :0.4999  
                                       3rd Qu.:2097   3rd Qu.:1.0000  
                                       Max.   :3482   Max.   :1.0000  
                                                                      
     kills            deaths          assists         teamkills    
 Min.   : 0.000   Min.   : 0.000   Min.   :  0.00   Min.   : 0.00  
 1st Qu.: 1.000   1st Qu.: 2.000   1st Qu.:  4.00   1st Qu.: 9.00  
 Median : 3.000   Median : 3.000   Median :  7.00   Median :15.00  
 Mean   : 5.021   Mean   : 5.032   Mean   : 11.55   Mean   :15.06  
 3rd Qu.: 6.000   3rd Qu.: 5.000   3rd Qu.: 13.00   3rd Qu.:20.00  
 Max.   :59.000   Max.   :59.000   Max.   :104.00   Max.   :59.00  
                                                                   
   teamdeaths    doublekills      triplekills     quadrakills   
 Min.   : 0.0   Min.   : 0.000   Min.   :0.000   Min.   :0.000  
 1st Qu.: 9.0   1st Qu.: 0.000   1st Qu.:0.000   1st Qu.:0.000  
 Median :15.0   Median : 0.000   Median :0.000   Median :0.000  
 Mean   :15.1   Mean   : 0.579   Mean   :0.104   Mean   :0.018  
 3rd Qu.:20.0   3rd Qu.: 1.000   3rd Qu.:0.000   3rd Qu.:0.000  
 Max.   :59.0   Max.   :10.000   Max.   :4.000   Max.   :2.000  
                NA's   :16692    NA's   :16692   NA's   :16692  
   pentakills      firstblood    firstbloodkill  firstbloodassist
 Min.   :0.000   Min.   :0.000   Min.   :0.0     Min.   :0.00    
 1st Qu.:0.000   1st Qu.:0.000   1st Qu.:0.0     1st Qu.:0.00    
 Median :0.000   Median :0.000   Median :0.0     Median :0.00    
 Mean   :0.004   Mean   :0.291   Mean   :0.1     Mean   :0.14    
 3rd Qu.:0.000   3rd Qu.:1.000   3rd Qu.:0.0     3rd Qu.:0.00    
 Max.   :2.000   Max.   :1.000   Max.   :1.0     Max.   :1.00    
 NA's   :16692   NA's   :13910   NA's   :19268   NA's   :33178   
 firstbloodvictim    team kpm           ckpm         firstdragon   
 Min.   :0.0      Min.   :0.0000   Min.   :0.1301   Min.   :0.0    
 1st Qu.:0.0      1st Qu.:0.2886   1st Qu.:0.7467   1st Qu.:0.0    
 Median :0.0      Median :0.4531   Median :0.9341   Median :0.0    
 Mean   :0.1      Mean   :0.4834   Mean   :0.9668   Mean   :0.5    
 3rd Qu.:0.0      3rd Qu.:0.6429   3rd Qu.:1.1462   3rd Qu.:1.0    
 Max.   :1.0      Max.   :2.4549   Max.   :3.3703   Max.   :1.0    
 NA's   :33178                                      NA's   :99122  
    dragons       opp_dragons    elementaldrakes opp_elementaldrakes
 Min.   :0.00    Min.   :0.00    Min.   :0.00    Min.   :0.00       
 1st Qu.:1.00    1st Qu.:1.00    1st Qu.:1.00    1st Qu.:1.00       
 Median :2.00    Median :2.00    Median :2.00    Median :2.00       
 Mean   :2.22    Mean   :2.22    Mean   :2.16    Mean   :2.16       
 3rd Qu.:3.00    3rd Qu.:3.00    3rd Qu.:3.00    3rd Qu.:3.00       
 Max.   :7.00    Max.   :7.00    Max.   :4.00    Max.   :4.00       
 NA's   :96340   NA's   :96340   NA's   :99122   NA's   :99122      
   infernals       mountains         clouds          oceans     
 Min.   :0.00    Min.   :0.00    Min.   :0.00    Min.   :0.00   
 1st Qu.:0.00    1st Qu.:0.00    1st Qu.:0.00    1st Qu.:0.00   
 Median :0.00    Median :0.00    Median :0.00    Median :0.00   
 Mean   :0.36    Mean   :0.36    Mean   :0.36    Mean   :0.37   
 3rd Qu.:1.00    3rd Qu.:1.00    3rd Qu.:1.00    3rd Qu.:1.00   
 Max.   :4.00    Max.   :4.00    Max.   :4.00    Max.   :4.00   
 NA's   :99122   NA's   :99122   NA's   :99122   NA's   :99122  
   chemtechs        hextechs     dragons (type unknown)     elders     
 Min.   :0.00    Min.   :0.00    Min.   :0.00           Min.   :0.00   
 1st Qu.:0.00    1st Qu.:0.00    1st Qu.:1.00           1st Qu.:0.00   
 Median :0.00    Median :0.00    Median :2.00           Median :0.00   
 Mean   :0.35    Mean   :0.36    Mean   :2.24           Mean   :0.05   
 3rd Qu.:1.00    3rd Qu.:1.00    3rd Qu.:3.00           3rd Qu.:0.00   
 Max.   :4.00    Max.   :4.00    Max.   :4.00           Max.   :3.00   
 NA's   :99122   NA's   :99122   NA's   :112826         NA's   :99122  
   opp_elders     firstherald       heralds       opp_heralds   
 Min.   :0.00    Min.   :0.0     Min.   :0.0     Min.   :0.0    
 1st Qu.:0.00    1st Qu.:0.0     1st Qu.:0.0     1st Qu.:0.0    
 Median :0.00    Median :0.0     Median :0.0     Median :0.0    
 Mean   :0.05    Mean   :0.5     Mean   :0.5     Mean   :0.5    
 3rd Qu.:0.00    3rd Qu.:1.0     3rd Qu.:1.0     3rd Qu.:1.0    
 Max.   :3.00    Max.   :1.0     Max.   :1.0     Max.   :1.0    
 NA's   :99122   NA's   :99122   NA's   :99122   NA's   :99122  
   void_grubs    opp_void_grubs    firstbaron        barons     
 Min.   :0.00    Min.   :0.00    Min.   :0.00    Min.   :0.000  
 1st Qu.:1.00    1st Qu.:1.00    1st Qu.:0.00    1st Qu.:0.000  
 Median :3.00    Median :3.00    Median :0.00    Median :0.000  
 Mean   :2.75    Mean   :2.75    Mean   :0.48    Mean   :0.252  
 3rd Qu.:5.00    3rd Qu.:5.00    3rd Qu.:1.00    3rd Qu.:0.000  
 Max.   :6.00    Max.   :6.00    Max.   :1.00    Max.   :5.000  
 NA's   :99122   NA's   :99122   NA's   :99122   NA's   :13910  
   opp_barons      firsttower        towers        opp_towers   
 Min.   :0.000   Min.   :0.0     Min.   : 0.00   Min.   : 0.00  
 1st Qu.:0.000   1st Qu.:0.0     1st Qu.: 3.00   1st Qu.: 3.00  
 Median :0.000   Median :0.0     Median : 7.00   Median : 7.00  
 Mean   :0.252   Mean   :0.5     Mean   : 6.13   Mean   : 6.13  
 3rd Qu.:0.000   3rd Qu.:1.0     3rd Qu.: 9.00   3rd Qu.: 9.00  
 Max.   :5.000   Max.   :1.0     Max.   :11.00   Max.   :11.00  
 NA's   :13910   NA's   :99122   NA's   :96340   NA's   :96340  
 firstmidtower   firsttothreetowers  turretplates   opp_turretplates
 Min.   :0.0     Min.   :0.0        Min.   : 0.00   Min.   : 0.00   
 1st Qu.:0.0     1st Qu.:0.0        1st Qu.: 2.00   1st Qu.: 2.00   
 Median :0.5     Median :0.0        Median : 4.00   Median : 4.00   
 Mean   :0.5     Mean   :0.5        Mean   : 4.25   Mean   : 4.25   
 3rd Qu.:1.0     3rd Qu.:1.0        3rd Qu.: 6.00   3rd Qu.: 6.00   
 Max.   :1.0     Max.   :1.0        Max.   :15.00   Max.   :15.00   
 NA's   :99124   NA's   :99122      NA's   :99122   NA's   :99122   
   inhibitors     opp_inhibitors   damagetochampions      dpm        
 Min.   : 0.000   Min.   : 0.000   Min.   :     0    Min.   :   0.0  
 1st Qu.: 0.000   1st Qu.: 0.000   1st Qu.:  9644    1st Qu.: 320.1  
 Median : 0.000   Median : 0.000   Median : 17030    Median : 556.2  
 Mean   : 0.323   Mean   : 0.323   Mean   : 26847    Mean   : 842.1  
 3rd Qu.: 0.000   3rd Qu.: 0.000   3rd Qu.: 29026    3rd Qu.: 877.9  
 Max.   :10.000   Max.   :10.000   Max.   :273210    Max.   :5848.9  
 NA's   :13910    NA's   :13910                                      
  damageshare    damagetakenperminute damagemitigatedperminute  wardsplaced    
 Min.   :0.000   Min.   :   0.0       Min.   :  19.77          Min.   :  0.00  
 1st Qu.:0.119   1st Qu.: 507.9       1st Qu.: 355.89          1st Qu.: 10.00  
 Median :0.202   Median : 721.4       Median : 668.91          Median : 15.00  
 Mean   :0.200   Mean   :1160.9       Mean   :1117.90          Mean   : 34.87  
 3rd Qu.:0.270   3rd Qu.:1107.7       3rd Qu.:1305.57          3rd Qu.: 52.00  
 Max.   :0.604   Max.   :6991.2       Max.   :9408.70          Max.   :302.00  
 NA's   :19268                        NA's   :16692                            
      wpm          wardskilled          wcpm        controlwardsbought
 Min.   :0.0000   Min.   :  0.00   Min.   :0.0000   Min.   :  0.00    
 1st Qu.:0.3277   1st Qu.:  5.00   1st Qu.:0.1802   1st Qu.:  4.00    
 Median :0.4503   Median : 10.00   Median :0.3066   Median :  7.00    
 Mean   :1.0895   Mean   : 15.74   Mean   :0.4869   Mean   : 11.66    
 3rd Qu.:1.6611   3rd Qu.: 18.00   3rd Qu.:0.5290   3rd Qu.: 14.00    
 Max.   :6.0707   Max.   :168.00   Max.   :3.4523   Max.   :123.00    
                                                                      
  visionscore          vspm           totalgold        earnedgold   
 Min.   :  0.00   Min.   : 0.0000   Min.   :  1920   Min.   :    0  
 1st Qu.: 30.00   1st Qu.: 0.9906   1st Qu.:  9625   1st Qu.: 5672  
 Median : 45.00   Median : 1.3760   Median : 12336   Median : 8222  
 Mean   : 85.28   Mean   : 2.6576   Mean   : 19507   Mean   :12596  
 3rd Qu.:104.00   3rd Qu.: 3.2958   3rd Qu.: 16194   3rd Qu.:11543  
 Max.   :630.00   Max.   :13.0408   Max.   :110913   Max.   :76293  
                                                                    
   earned gpm     earnedgoldshare   goldspent           gspd      
 Min.   :   0.0   Min.   :0.000   Min.   :     0   Min.   :-0.57  
 1st Qu.: 190.9   1st Qu.:0.158   1st Qu.:  8850   1st Qu.:-0.10  
 Median : 262.7   Median :0.208   Median : 11375   Median : 0.00  
 Mean   : 398.4   Mean   :0.200   Mean   : 17966   Mean   : 0.00  
 3rd Qu.: 350.9   3rd Qu.:0.247   3rd Qu.: 14975   3rd Qu.: 0.10  
 Max.   :2036.7   Max.   :0.421   Max.   :118745   Max.   : 0.57  
                  NA's   :19268                    NA's   :96340  
      gpr           total cs      minionkills      monsterkills   
 Min.   :-9.74   Min.   :  0.0   Min.   :   0.0   Min.   :  0.00  
 1st Qu.:-1.66   1st Qu.:152.0   1st Qu.:  37.0   1st Qu.:  0.00  
 Median : 0.00   Median :223.0   Median : 230.0   Median : 11.00  
 Mean   : 0.00   Mean   :206.6   Mean   : 265.8   Mean   : 64.28  
 3rd Qu.: 1.66   3rd Qu.:278.0   3rd Qu.: 304.0   3rd Qu.:146.00  
 Max.   : 9.74   Max.   :644.0   Max.   :1770.0   Max.   :442.00  
 NA's   :99122   NA's   :19268   NA's   :2782                     
 monsterkillsownjungle monsterkillsenemyjungle      cspm           goldat10    
 Min.   :  0.00        Min.   : 0.00           Min.   : 0.000   Min.   : 1500  
 1st Qu.:  0.00        1st Qu.: 0.00           1st Qu.: 5.641   1st Qu.: 3031  
 Median :  7.00        Median : 0.00           Median : 7.974   Median : 3362  
 Mean   : 44.73        Mean   : 6.42           Mean   :10.347   Mean   : 5321  
 3rd Qu.:102.00        3rd Qu.: 8.00           3rd Qu.: 9.584   3rd Qu.: 3802  
 Max.   :266.00        Max.   :79.00           Max.   :43.288   Max.   :22045  
 NA's   :98916         NA's   :98916           NA's   :2782     NA's   :16704  
     xpat10          csat10       opp_goldat10     opp_xpat10   
 Min.   :    0   Min.   :  0.0   Min.   : 1500   Min.   :    0  
 1st Qu.: 3183   1st Qu.: 62.0   1st Qu.: 3031   1st Qu.: 3183  
 Median : 4116   Median : 80.0   Median : 3362   Median : 4116  
 Mean   : 6291   Mean   :109.5   Mean   : 5321   Mean   : 6291  
 3rd Qu.: 5005   3rd Qu.: 93.0   3rd Qu.: 3802   3rd Qu.: 5005  
 Max.   :22158   Max.   :404.0   Max.   :22045   Max.   :22158  
 NA's   :16704   NA's   :16704   NA's   :16704   NA's   :16704  
   opp_csat10     golddiffat10     xpdiffat10      csdiffat10   
 Min.   :  0.0   Min.   :-7597   Min.   :-5377   Min.   :-128   
 1st Qu.: 62.0   1st Qu.: -351   1st Qu.: -310   1st Qu.:  -8   
 Median : 80.0   Median :    0   Median :    0   Median :   0   
 Mean   :109.5   Mean   :    0   Mean   :    0   Mean   :   0   
 3rd Qu.: 93.0   3rd Qu.:  351   3rd Qu.:  310   3rd Qu.:   8   
 Max.   :404.0   Max.   : 7597   Max.   : 5377   Max.   : 128   
 NA's   :16704   NA's   :16704   NA's   :16704   NA's   :16704  
   killsat10       assistsat10       deathsat10     opp_killsat10   
 Min.   : 0.000   Min.   : 0.000   Min.   : 0.000   Min.   : 0.000  
 1st Qu.: 0.000   1st Qu.: 0.000   1st Qu.: 0.000   1st Qu.: 0.000  
 Median : 0.000   Median : 0.000   Median : 0.000   Median : 0.000  
 Mean   : 0.749   Mean   : 1.086   Mean   : 0.753   Mean   : 0.749  
 3rd Qu.: 1.000   3rd Qu.: 1.000   3rd Qu.: 1.000   3rd Qu.: 1.000  
 Max.   :17.000   Max.   :27.000   Max.   :17.000   Max.   :17.000  
 NA's   :16704    NA's   :16704    NA's   :16704    NA's   :16704   
 opp_assistsat10  opp_deathsat10      goldat15         xpat15     
 Min.   : 0.000   Min.   : 0.000   Min.   : 2713   Min.   : 1922  
 1st Qu.: 0.000   1st Qu.: 0.000   1st Qu.: 4680   1st Qu.: 5294  
 Median : 0.000   Median : 0.000   Median : 5308   Median : 6645  
 Mean   : 1.086   Mean   : 0.753   Mean   : 8418   Mean   :10045  
 3rd Qu.: 1.000   3rd Qu.: 1.000   3rd Qu.: 6157   3rd Qu.: 7907  
 Max.   :27.000   Max.   :17.000   Max.   :37219   Max.   :36131  
 NA's   :16704    NA's   :16704    NA's   :16716   NA's   :16716  
     csat15       opp_goldat15     opp_xpat15      opp_csat15   
 Min.   :  3.0   Min.   : 2713   Min.   : 1922   Min.   :  3.0  
 1st Qu.: 96.0   1st Qu.: 4680   1st Qu.: 5294   1st Qu.: 96.0  
 Median :127.0   Median : 5308   Median : 6645   Median :127.0  
 Mean   :172.3   Mean   : 8418   Mean   :10045   Mean   :172.3  
 3rd Qu.:147.0   3rd Qu.: 6157   3rd Qu.: 7907   3rd Qu.:147.0  
 Max.   :636.0   Max.   :37219   Max.   :36131   Max.   :636.0  
 NA's   :16716   NA's   :16716   NA's   :16716   NA's   :16716  
  golddiffat15      xpdiffat15      csdiffat15      killsat15     
 Min.   :-14440   Min.   :-9477   Min.   :-198    Min.   : 0.000  
 1st Qu.:  -638   1st Qu.: -543   1st Qu.: -12    1st Qu.: 0.000  
 Median :     0   Median :    0   Median :   0    Median : 1.000  
 Mean   :     0   Mean   :    0   Mean   :   0    Mean   : 1.488  
 3rd Qu.:   638   3rd Qu.:  543   3rd Qu.:  12    3rd Qu.: 2.000  
 Max.   : 14440   Max.   : 9477   Max.   : 198    Max.   :30.000  
 NA's   :16716    NA's   :16716   NA's   :16716   NA's   :16716   
  assistsat15       deathsat15     opp_killsat15    opp_assistsat15 
 Min.   : 0.000   Min.   : 0.000   Min.   : 0.000   Min.   : 0.000  
 1st Qu.: 0.000   1st Qu.: 0.000   1st Qu.: 0.000   1st Qu.: 0.000  
 Median : 1.000   Median : 1.000   Median : 1.000   Median : 1.000  
 Mean   : 2.519   Mean   : 1.493   Mean   : 1.488   Mean   : 2.519  
 3rd Qu.: 3.000   3rd Qu.: 2.000   3rd Qu.: 2.000   3rd Qu.: 3.000  
 Max.   :52.000   Max.   :30.000   Max.   :30.000   Max.   :52.000  
 NA's   :16716    NA's   :16716    NA's   :16716    NA's   :16716   
 opp_deathsat15      goldat20         xpat20          csat20     
 Min.   : 0.000   Min.   : 3838   Min.   : 2890   Min.   :  6.0  
 1st Qu.: 0.000   1st Qu.: 6414   1st Qu.: 7554   1st Qu.:128.0  
 Median : 1.000   Median : 7407   Median : 9255   Median :172.0  
 Mean   : 1.493   Mean   :11645   Mean   :13926   Mean   :232.1  
 3rd Qu.: 2.000   3rd Qu.: 8650   3rd Qu.:10756   3rd Qu.:200.0  
 Max.   :30.000   Max.   :51659   Max.   :52550   Max.   :862.0  
 NA's   :16716    NA's   :16920   NA's   :16920   NA's   :16920  
  opp_goldat20     opp_xpat20      opp_csat20     golddiffat20   
 Min.   : 3838   Min.   : 2890   Min.   :  6.0   Min.   :-19017  
 1st Qu.: 6414   1st Qu.: 7554   1st Qu.:128.0   1st Qu.:  -952  
 Median : 7407   Median : 9255   Median :172.0   Median :     0  
 Mean   :11645   Mean   :13926   Mean   :232.1   Mean   :     0  
 3rd Qu.: 8650   3rd Qu.:10756   3rd Qu.:200.0   3rd Qu.:   952  
 Max.   :51659   Max.   :52550   Max.   :862.0   Max.   : 19017  
 NA's   :16920   NA's   :16920   NA's   :16920   NA's   :16920   
   xpdiffat20       csdiffat20      killsat20      assistsat20    
 Min.   :-15523   Min.   :-219    Min.   : 0.00   Min.   : 0.000  
 1st Qu.:  -828   1st Qu.: -16    1st Qu.: 0.00   1st Qu.: 1.000  
 Median :     0   Median :   0    Median : 1.00   Median : 3.000  
 Mean   :     0   Mean   :   0    Mean   : 2.32   Mean   : 4.439  
 3rd Qu.:   828   3rd Qu.:  16    3rd Qu.: 3.00   3rd Qu.: 5.000  
 Max.   : 15523   Max.   : 219    Max.   :43.00   Max.   :92.000  
 NA's   :16920    NA's   :16920   NA's   :16920   NA's   :16920   
   deathsat20     opp_killsat20   opp_assistsat20  opp_deathsat20  
 Min.   : 0.000   Min.   : 0.00   Min.   : 0.000   Min.   : 0.000  
 1st Qu.: 1.000   1st Qu.: 0.00   1st Qu.: 1.000   1st Qu.: 1.000  
 Median : 1.000   Median : 1.00   Median : 3.000   Median : 1.000  
 Mean   : 2.327   Mean   : 2.32   Mean   : 4.439   Mean   : 2.327  
 3rd Qu.: 3.000   3rd Qu.: 3.00   3rd Qu.: 5.000   3rd Qu.: 3.000  
 Max.   :43.000   Max.   :43.00   Max.   :92.000   Max.   :43.000  
 NA's   :16920    NA's   :16920   NA's   :16920    NA's   :16920   
    goldat25         xpat25          csat25        opp_goldat25  
 Min.   : 4630   Min.   : 3514   Min.   :   9.0   Min.   : 4630  
 1st Qu.: 8030   1st Qu.: 9677   1st Qu.: 153.0   1st Qu.: 8030  
 Median : 9439   Median :11801   Median : 210.0   Median : 9439  
 Mean   :14790   Mean   :17890   Mean   : 283.1   Mean   :14790  
 3rd Qu.:11149   3rd Qu.:13694   3rd Qu.: 247.0   3rd Qu.:11149  
 Max.   :59368   Max.   :68784   Max.   :1060.0   Max.   :59368  
 NA's   :23472   NA's   :23472   NA's   :23472    NA's   :23472  
   opp_xpat25      opp_csat25      golddiffat25      xpdiffat25    
 Min.   : 3514   Min.   :   9.0   Min.   :-20366   Min.   :-19754  
 1st Qu.: 9677   1st Qu.: 153.0   1st Qu.: -1338   1st Qu.: -1398  
 Median :11801   Median : 210.0   Median :     0   Median :     0  
 Mean   :17890   Mean   : 283.1   Mean   :     0   Mean   :     0  
 3rd Qu.:13694   3rd Qu.: 247.0   3rd Qu.:  1338   3rd Qu.:  1398  
 Max.   :68784   Max.   :1060.0   Max.   : 20366   Max.   : 19754  
 NA's   :23472   NA's   :23472    NA's   :23472    NA's   :23472   
   csdiffat25      killsat25       assistsat25        deathsat25    
 Min.   :-283    Min.   : 0.000   Min.   :  0.000   Min.   : 0.000  
 1st Qu.: -20    1st Qu.: 1.000   1st Qu.:  2.000   1st Qu.: 1.000  
 Median :   0    Median : 2.000   Median :  4.000   Median : 2.000  
 Mean   :   0    Mean   : 3.259   Mean   :  6.901   Mean   : 3.267  
 3rd Qu.:  20    3rd Qu.: 4.000   3rd Qu.:  8.000   3rd Qu.: 4.000  
 Max.   : 283    Max.   :59.000   Max.   :100.000   Max.   :59.000  
 NA's   :23472   NA's   :23472    NA's   :23472     NA's   :23472   
 opp_killsat25    opp_assistsat25   opp_deathsat25  
 Min.   : 0.000   Min.   :  0.000   Min.   : 0.000  
 1st Qu.: 1.000   1st Qu.:  2.000   1st Qu.: 1.000  
 Median : 2.000   Median :  4.000   Median : 2.000  
 Mean   : 3.259   Mean   :  6.901   Mean   : 3.267  
 3rd Qu.: 4.000   3rd Qu.:  8.000   3rd Qu.: 4.000  
 Max.   :59.000   Max.   :100.000   Max.   :59.000  
 NA's   :23472    NA's   :23472     NA's   :23472   
# Inspect golddiffat15
summary(match_data$golddiffat15)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
 -14440    -638       0       0     638   14440   16716 
# Plot distribution to visualize
ggplot(match_data, aes(x = golddiffat15)) +
  geom_histogram(binwidth = 500, fill = "#FF4500", color = "black") +
  labs(
    title = "Distribution of Gold Difference at 15 Minutes (Raw Data)",
    x = "Gold Difference at 15 Minutes",
    y = "Count"
  ) +
  theme_minimal()
Warning: Removed 16716 rows containing non-finite outside the scale range
(`stat_bin()`).

cleaned_data <- match_data %>%
  filter(!is.na(golddiffat15)) %>%  
  filter(golddiffat15 != 0) # remove constant values


summary(cleaned_data$golddiffat15)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
 -14440    -639       0       0     639   14440 
glimpse(cleaned_data %>% select(starts_with("ban")))
Rows: 98,842
Columns: 5
$ ban1 <chr> "Orianna", "Orianna", "Orianna", "Orianna", "Orianna", "Rumble", …
$ ban2 <chr> "Rell", "Rell", "Rell", "Rell", "Rell", "Ashe", "Ashe", "Ashe", "…
$ ban3 <chr> "Viego", "Viego", "Viego", "Viego", "Viego", "Nocturne", "Nocturn…
$ ban4 <chr> "Viktor", "Viktor", "Viktor", "Viktor", "Viktor", "Poppy", "Poppy…
$ ban5 <chr> "Malphite", "Malphite", "Malphite", "Malphite", "Malphite", "Vi",…
# Check for missing values
colSums(is.na(cleaned_data %>% select(starts_with("ban"))))
ban1 ban2 ban3 ban4 ban5 
 546  384  468  708  954 
regression_data <- cleaned_data %>%
  pivot_longer(
    cols = starts_with("ban"),
    names_to = "ban_slot",
    values_to = "champion...158",
    values_drop_na = TRUE
  ) %>%
  group_by(gameid, league) %>%
  summarize(
    ban_count = n(),
    golddiffat15 = mean(golddiffat15, na.rm = TRUE),
    .groups = "drop"
  ) %>%
  filter(!is.na(golddiffat15) & ban_count > 0)
model <- lm(golddiffat15 ~ ban_count + league, data = regression_data)
summary(model)

Call:
lm(formula = golddiffat15 ~ ban_count + league, data = regression_data)

Residuals:
     Min       1Q   Median       3Q      Max 
-2429.65    -0.13     0.16     1.54  1621.55 

Coefficients:
                      Estimate Std. Error t value Pr(>|t|)    
(Intercept)           247.9024    18.5807  13.342  < 2e-16 ***
ban_count              -4.2313     0.2821 -14.998  < 2e-16 ***
leagueAL                2.5740     9.3868   0.274   0.7839    
leagueCBLOL             5.8127     9.0281   0.644   0.5197    
leagueCBLOLA            4.4197     9.0034   0.491   0.6235    
leagueCDF               6.0227    10.3770   0.580   0.5617    
leagueCT                5.9736    11.6193   0.514   0.6072    
leagueEBL               4.6916     9.4556   0.496   0.6198    
leagueEBLPA             6.3803    13.0434   0.489   0.6247    
leagueEM                5.2579     8.8488   0.594   0.5524    
leagueEPL              18.4360     9.4007   1.961   0.0499 *  
leagueESLOL             2.5170     8.9755   0.280   0.7792    
leagueEWC               5.9736    14.1816   0.421   0.6736    
leagueGLL               6.6845     9.3891   0.712   0.4765    
leagueGLLPA            52.4319    11.6834   4.488  7.3e-06 ***
leagueHC                4.8064     9.7080   0.495   0.6205    
leagueHM                4.1264     9.3797   0.440   0.6600    
leagueHW                6.8331    10.0639   0.679   0.4972    
leagueIC                2.6367    10.5957   0.249   0.8035    
leagueLAS              10.6646     9.0216   1.182   0.2372    
leagueLCK               6.0001     8.7909   0.683   0.4949    
leagueLCKC              6.0532     8.7734   0.690   0.4902    
leagueLCO               8.4035     9.3743   0.896   0.3700    
leagueLCS               5.9771     9.2156   0.649   0.5166    
leagueLEC               6.1075     8.9727   0.681   0.4961    
leagueLFL               3.4717     9.0820   0.382   0.7023    
leagueLFL2              5.5662     9.2958   0.599   0.5493    
leagueLIT               7.4281     9.4119   0.789   0.4300    
leagueLJL               4.2297     9.4180   0.449   0.6534    
leagueLLA               6.4517     9.1479   0.705   0.4807    
leagueLPLOL             9.3734     9.3832   0.999   0.3178    
leagueLRN              11.2993     9.9643   1.134   0.2568    
leagueLRS              -1.5721     9.8132  -0.160   0.8727    
leagueLVP SL            4.2900     9.0718   0.473   0.6363    
leagueNACL              4.4300     8.7836   0.504   0.6140    
leagueNEXO              9.7395     9.5514   1.020   0.3079    
leagueNLC               3.5187     9.3550   0.376   0.7068    
leagueNLC Aurora Open -25.6433    10.3461  -2.479   0.0132 *  
leaguePCS               5.5846     8.9706   0.623   0.5336    
leaguePRM               5.9736     9.0755   0.658   0.5104    
leaguePRMP              7.0016     9.5116   0.736   0.4617    
leagueTCL              10.4366     9.2571   1.127   0.2596    
leagueTSC               5.9070     9.7820   0.604   0.5460    
leagueUL                5.0359     9.3618   0.538   0.5906    
leagueUSP               1.5456    11.6854   0.132   0.8948    
leagueVCS               5.4488     9.0502   0.602   0.5471    
leagueWLDs              4.6589     9.6310   0.484   0.6286    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 49.49 on 8180 degrees of freedom
Multiple R-squared:  0.03752,   Adjusted R-squared:  0.03211 
F-statistic: 6.933 on 46 and 8180 DF,  p-value: < 2.2e-16
# diagnostic plots
par(mfrow = c(2, 2))
plot(model)

Explore predictors

Interaction plot

The plots shows how the relationship between the total number of bans and the gold difference at 15 minutes varies across different leagues. The slopes and directions of the lines suggest that the impact of bans on early-game gold advantage differs by region, with some leagues showing stronger associations than others.

# gold difference at 15 min by bans and league
ggplot(regression_data, aes(x = ban_count, y = golddiffat15, color = league, group = league)) +
  geom_point(alpha = 0.5) +  # scatterplot to show data points
  geom_smooth(method = "lm", se = FALSE) +  # add regression lines for each league
  labs(
    title = "Interaction Plot: Total Bans and League on Gold Difference",
    x = "Total Bans",
    y = "Gold Difference at 15 Min",
    color = "League"
  ) +
  theme_minimal()
`geom_smooth()` using formula = 'y ~ x'

Faceted interaction plot

ggplot(regression_data, aes(x = ban_count, y = golddiffat15)) +
  geom_point(alpha = 0.5, aes(color = league)) +
  geom_smooth(method = "lm", se = FALSE, aes(color = league)) +
  facet_wrap(~league) +  # 1 plot per league
  labs(
    title = "Total Bans on Gold Difference by League",
    x = "Total Bans",
    y = "Gold Difference at 15 Min"
  ) +
  theme_minimal()
`geom_smooth()` using formula = 'y ~ x'

Keep it simple: interaction.plot()

interaction.plot( 
  x.factor = regression_data$ban_count,
  trace.factor = regression_data$league,
  response = regression_data$golddiffat15,
  xlab = "Total Bans",
  ylab = "Gold Difference at 15 Min",
  legend = TRUE,
  col = rainbow(length(unique(regression_data$league)))
)

Visualize residuals

This histogram of residuals with an adjusted scale shows that most residuals from the regression model are tightly clustered around zero, indicating that the model captures much of the variability in the gold difference at 15 minutes. However, the presence of a few outliers suggests potential areas where the model could be refined.

ggplot(data.frame(residuals = residuals(model)), aes(x = residuals)) +
  geom_histogram(binwidth = 10, fill = "#FF4500", color = "black") +
  labs(
    title = "Histogram of Residuals (Adjusted Scale)",
    x = "Residuals",
    y = "Frequency"
  ) +
  xlim(-100, 100) +  # adjust the x-axis limits for a closer look
  theme_minimal()
Warning: Removed 108 rows containing non-finite outside the scale range
(`stat_bin()`).
Warning: Removed 2 rows containing missing values or values outside the scale range
(`geom_bar()`).

Main Visualization

Refine data

# filter for relevant columns and clean data
final_data <- cleaned_data %>%
  select(league, patch, starts_with("ban"), golddiffat15) %>% # only necessary columns
  pivot_longer(cols = starts_with("ban"), 
               names_to = "ban_slot", 
               values_to = "champion") %>% # transform bans into long format
  filter(!is.na(golddiffat15) & golddiffat15 != 0) %>% # remove NA and zero values
  filter(!is.na(champion) & champion != "NA") %>% # remove invalid champion data
  drop_na() # remove any remaining NAs

summary(final_data)
    league              patch        golddiffat15          ban_slot        
 Length:491150      Min.   :14.01   Min.   :-14440.000   Length:491150     
 Class :character   1st Qu.:14.04   1st Qu.:  -637.000   Class :character  
 Mode  :character   Median :14.11   Median :     1.000   Mode  :character  
                    Mean   :14.10   Mean   :     0.857                     
                    3rd Qu.:14.14   3rd Qu.:   639.000                     
                    Max.   :14.21   Max.   : 14440.000                     
   champion        
 Length:491150     
 Class :character  
 Mode  :character  
                   
                   
                   
glimpse(final_data)
Rows: 491,150
Columns: 5
$ league       <chr> "TSC", "TSC", "TSC", "TSC", "TSC", "TSC", "TSC", "TSC", "…
$ patch        <dbl> 14.01, 14.01, 14.01, 14.01, 14.01, 14.01, 14.01, 14.01, 1…
$ golddiffat15 <dbl> -575, -575, -575, -575, -575, 236, 236, 236, 236, 236, -4…
$ ban_slot     <chr> "ban1", "ban2", "ban3", "ban4", "ban5", "ban1", "ban2", "…
$ champion     <chr> "Orianna", "Rell", "Viego", "Viktor", "Malphite", "Oriann…

Interactive plot across all leagues

scatter_data <- cleaned_data %>%
  pivot_longer(
    cols = starts_with("ban"),
    names_to = "ban_slot",
    values_to = "champion...158",
    values_drop_na = TRUE
  ) %>%
  group_by(gameid, league) %>%
  summarize(
    total_bans = n(),
    avg_gold_diff = mean(golddiffat15, na.rm = TRUE),
    .groups = "drop"
  )

scatter_plot <- scatter_data %>%
  plot_ly(
    x = ~total_bans,
    y = ~avg_gold_diff,
    type = "scatter",
    mode = "markers+lines",
    color = ~league,
    hoverinfo = "text",
    text = ~paste(
      "League: ", league,
      "<br>Total Bans: ", total_bans,
      "<br>Gold Difference: ", avg_gold_diff
    )
  ) %>%
  layout(
    title = "Gold Difference vs. Total Bans by League",
    xaxis = list(title = "Total Bans"),
    yaxis = list(title = "Gold Difference at 15 Minutes"),
    legend = list(title = list(text = "League"))
  )

scatter_plot
Warning in RColorBrewer::brewer.pal(N, "Set2"): n too large, allowed maximum for palette Set2 is 8
Returning the palette you asked for with that many colors
Warning in RColorBrewer::brewer.pal(N, "Set2"): n too large, allowed maximum for palette Set2 is 8
Returning the palette you asked for with that many colors

Scatterplot of gold difference vs. total bans by selected leagues

The scatterplot will allow us to better visualize the relationship between total bans and gold difference without the connecting lines, focusing on individual matches instead of league-wide trends.

scatter_data <- cleaned_data %>%
  pivot_longer(
    cols = starts_with("ban"),
    names_to = "ban_slot",
    values_to = "champion...158",
    values_drop_na = TRUE
  ) %>%
  group_by(gameid, league) %>%
  summarize(
    total_bans = n(),
    avg_gold_diff = mean(golddiffat15, na.rm = TRUE),
    .groups = "drop"
  ) %>%
  filter(league %in% c("CBLOL", "LCK", "LCS", "LEC", "PCS")) %>%
  mutate(
    tooltip = paste(
      "League: ", league, "<br>",
      "Region: ", ifelse(league == "LCK", "South Korea",
                 ifelse(league == "LCS", "North America",
                 ifelse(league == "LEC", "Europe",
                 ifelse(league == "PCS", "Southeast Asia, Taiwan, Hong Kong", "Brazil")))), "<br>",
      "Total Bans: ", total_bans, "<br>",
      "Gold Difference at 15 Min: ", avg_gold_diff, "<br>",
      "Insight: ", ifelse(league == "LCK", "Disciplined playstyle with focus on team fights.",
                  ifelse(league == "LCS", "Fast-paced games with creative strategies.",
                  ifelse(league == "LEC", "Dynamic and aggressive with innovative strategies.",
                  ifelse(league == "PCS", "Aggressive and unpredictable, with diverse tactics.", "Balanced gameplay approach."))))
    )
  )

scatter_plot <- scatter_data %>%
  plot_ly(
    x = ~total_bans,
    y = ~avg_gold_diff,
    type = "scatter",
    mode = "markers",
    color = ~league,
    hoverinfo = "text",
    text = ~tooltip
  ) %>%
  layout(
    title = list(
      text = "<b>Gold Difference vs. Total Bans by League (Scatterplot)</b>",
      x = 0.5,
      y = 0.95,
      font = list(size = 22, color = "white")
    ),
    xaxis = list(
      title = "Total Bans",
      titlefont = list(size = 14, color = "white"),
      tickfont = list(color = "white"),
      gridcolor = "#333333"
    ),
    yaxis = list(
      title = "Gold Difference at 15 Minutes",
      titlefont = list(size = 14, color = "white"),
      tickfont = list(color = "white"),
      gridcolor = "#333333"
    ),
    legend = list(
      title = list(text = "<b>League</b>", font = list(color = "white")),
      font = list(color = "white"),
      bgcolor = "rgba(0, 0, 0, 0.5)",
      x = 0.85,
      y = 1
    ),
    margin = list(t = 100, l = 70, r = 50, b = 50),
    paper_bgcolor = "black",
    plot_bgcolor = "black",
    hovermode = "closest"
  )

scatter_plot

Interactive plot across LCK, LCS, LEC, PCS, CBLoL

The interactive plot, visualizing gold difference against total bans across five major leagues—LCK, LCS, LEC, PCS, and CBLOL—highlights the differing strategic impacts of bans in early-game performance. Each league’s approach to bans influences the gold difference at 15 minutes, with LCK standing out for its consistent, disciplined use of bans that often yields a strong early gold lead. In contrast, regions like PCS show a wider spread of data points, reflecting a more volatile and diverse strategic landscape. The line segments and tooltips enrich the interpretation by showcasing individual league trends and specific game contexts, revealing that more frequent bans do not always guarantee a substantial gold lead. The numbers represented show a variety of outcomes, ranging from large positive gains in gold for some leagues to negative values in others, indicating the varying success of strategic bans.

This plot gives insight into how bans impact early-game success, with clear contrasts between stable, controlled leagues like LCK and more unpredictable ones like PCS.

filtered_data <- cleaned_data %>%
  pivot_longer(
    cols = starts_with("ban"),
    names_to = "ban_slot",
    values_to = "champion...158",
    values_drop_na = TRUE
  ) %>%
  group_by(gameid, league) %>%
  summarize(
    total_bans = n(),
    avg_gold_diff = mean(golddiffat15, na.rm = TRUE),
    .groups = "drop"
  ) %>%
  filter(league %in% c("LCK", "LCS", "LEC", "PCS", "CBLOL"))

# tooltip details
filtered_data$tooltip <- paste(
  "League: ", filtered_data$league, "<br>",
  "Region: ", 
  ifelse(filtered_data$league == "LCK", "South Korea",
  ifelse(filtered_data$league == "LCS", "North America",
  ifelse(filtered_data$league == "LEC", "Europe",
  ifelse(filtered_data$league == "PCS", "Southeast Asia, Taiwan, Hong Kong",
  "Brazil (CBLOL)")))), "<br>",
  "Total Bans: ", filtered_data$total_bans, "<br>",
  "Gold Difference at 15: ", filtered_data$avg_gold_diff, "<br>",
  "Insight: ", 
  ifelse(filtered_data$league == "LCK", "Disciplined playstyle with focus on team fights.",
  ifelse(filtered_data$league == "LCS", "Fast-paced games with creative strategies.",
  ifelse(filtered_data$league == "LEC", "Dynamic and aggressive with innovative strategies.",
  ifelse(filtered_data$league == "PCS", "Aggressive and unpredictable, with diverse tactics.",
  "Bold and aggressive playstyle, focused on early-game dominance and skirmishes. Known for passionate fans and exciting matches."
  )))))


scatter_plot <- filtered_data %>%
  plot_ly(
    x = ~total_bans,
    y = ~avg_gold_diff,
    type = "scatter",
    mode = "markers+lines",
    color = ~league,
    colors = c("LCK" = "#1f77b4", "LCS" = "#ff7f0e", "LEC" = "#2ca02c", 
               "PCS" = "#d62728", "CBLOL" = "#9467bd"),
    hoverinfo = "text",
    text = ~tooltip  # tooltips
  ) %>%
  layout(
    title = list(
      text = "<b>Gold Difference vs. Total Bans by League</b>",
      x = 0.5,
      y = 0.95, 
      font = list(size = 22, color = "white")
    ),
    xaxis = list(
      title = "Total Bans",
      titlefont = list(size = 14, color = "white"),
      tickfont = list(color = "white"),
      gridcolor = "#333333"
    ),
    yaxis = list(
      title = "Gold Difference at 15 Minutes",
      titlefont = list(size = 14, color = "white"),
      tickfont = list(color = "white"),
      gridcolor = "#333333"
    ),
    legend = list(
      title = list(text = "<b>League</b>", font = list(color = "white")),
      font = list(color = "white"),
      bgcolor = "rgba(0, 0, 0, 0.5)",
      x = 0.85,
      y = 1
    ),
    margin = list(t = 100, l = 70, r = 50, b = 50),
    paper_bgcolor = "black",
    plot_bgcolor = "black",
    hovermode = "closest"
  )

scatter_plot

Interpretation

Throughout this analysis, I explored how the champion banning phase can influence early-game performance in competitive League of Legends, specifically focusing on five key regions: LCK, LCS, LEC, PCS, and CBLOL. My goal was to uncover whether the strategic choices during bans translate into a meaningful advantage within the first 15 minutes of a game. It turns out that they do, but not in a one-size-fits-all kind of way.

The findings show that each region approaches the game differently, and those differences really shine in how they handle bans. For example, the LCK, known for their disciplined and highly coordinated play, tends to gain a consistent gold lead early on, directly benefiting from calculated bans that align well with their game plans. This early gold lead is significant because it gives LCK teams better control over the map, which means easier objectives, vision dominance, and more flexibility in decision-making, all of what sets them up for a stronger mid to late game.

On the other hand, regions like LCS and LEC use bans in a more creative way. The outcome? A mix of results. Sometimes they gain a decent early lead; other times, they rely more on adapting as the game goes on rather than controlling the early game outright, and the variation shows that their bans are less about immediate suppression and more about keeping options open. The PCS, with its unpredictable and aggressive style, showed the highest variability, suggesting that their bans can either propel them forward or fall flat, depending on execution. CBLOL’s approach seemed to be somewhere in the middle. They weren’t overly aggressive or conservative, resulting in moderate early-game advantages.

It is interesting to see how their steady strategy played out: they may not always dominate early, but they also don’t seem to lose control entirely, indicating a balanced and reliable game plan.

The visualizations, especially the interactive scatterplots across the five leagues, made these trends clearer. It’s a given, as one play more, early-game gold difference is tied closely to how disciplined or varied each region’s ban strategy is. For example, LCK’s steady line leading to a positive gold difference showcases control right from the beginning. In contrast, PCS’s scattered outcomes highlight the risk and reward of unpredictability. The numbers might look abstract at first, but they tell a story of how well teams can establish an advantage or adapt, depending on their drafting phase.

While narrowing down to just five leagues for this analysis, I realized the importance of including regions like the LPL (based in China) to provide a more comprehensive perspective. The five leagues I selected, although representative of different competitive styles, could be perceived as biased without proper context. My main focus was on delivering clarity and maintaining a digestible visualization for viewers who may not be into the esports scene, which is why I ultimately decided to spotlight these leagues, considering they were the most prominent ones available in the dataset.

Unfortunately, data limitations also meant that certain leagues were missing entirely from the dataset. This was a compromise I had to make, as my goal was to keep the visualization both insightful and easy to interpret, especially for those curious about trends in specific regions. However, I acknowledge that a more extensive inclusion of all major competitive leagues around the world could have provided a richer story, allowing for more robust comparative analysis.

In the end, while every team has the same tools available in the banning phase, how they wield them carries through for the rest of the game. It is not necessary to buy the strongest items and have the gold lead in the first 15 minutes, but it dictates the pace of the game, asserts dominance, and forces the enemy into a reactive position. That’s the power of an effective and strategic ban phase, and each region’s unique and cultural philosophy adds a fascinating layer to competitive League of Legends.