Skip to content

Instantly share code, notes, and snippets.

@CSJCampbell
Created September 30, 2016 13:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save CSJCampbell/9b50cec48e1ad97b24f98c3684e69bc0 to your computer and use it in GitHub Desktop.
Save CSJCampbell/9b50cec48e1ad97b24f98c3684e69bc0 to your computer and use it in GitHub Desktop.
caster scores
###########################################################
#
# Balancing Casters
# csjcampbell
# 2016-09-30
#
# Copyright 2016 CSJCampbell
# This document may be reproduced in whole or part provided
# that this notice is retained.
#
###########################################################
setwd("C:/Users/ccampbell/Documents/Misc/R")
# import data
wtc16 <- read.csv("wtc16.csv", stringsAsFactors = FALSE)
library(dplyr)
library(tidyr)
# wide to skinny format
wtc161 <- rbind(
transmute(wtc16,
game_id, round, TP, year, player = player1,
teamname = team1, list = list1, team = 1),
transmute(wtc16,
game_id, round, TP, year, player = player2,
teamname = team2, list = list2, team = 2))
# generate country
wtc161$country <- gsub(pattern = "Team ", replacement = "",
x = wtc161$teamname)
wtc161$country <- gsub(pattern = "Epic ", replacement = "",
x = wtc161$country)
wtc161$country <- gsub(pattern = "Prime ", replacement = "",
x = wtc161$country)
wtc161$country <- gsub(pattern = "Northern ", replacement = "Northern.",
x = wtc161$country)
wtc161$country <- gsub(pattern = "United ", replacement = "United.",
x = wtc161$country)
wtc161$country <- gsub(pattern = "Middle ", replacement = "Middle.",
x = wtc161$country)
wtc161$country <- gsub(pattern = "Czech ", replacement = "Czech.",
x = wtc161$country)
wtc161$country <- sapply(strsplit(x = wtc161$country, split = " "), function(x) x[1])
wtc161$country[wtc161$country == "United.States"] <- "USA"
unique(wtc161$country)
# write.csv(wtc161, file = "wtc16-skinny.csv",
# quote = FALSE, row.names = FALSE)
###########################################################
checkPlayers <- FALSE
if (checkPlayers) {
# number of games
tabng <- summarise(group_by(wtc161, player), n())
head(tabng)
sum(tabng[[2]] != 6)
# number of lists
tabnl <- summarise(group_by(wtc161, player), nls = n_distinct(list))
head(tabnl)
sum(tabnl[[2]] != 2)
oddids <- filter(tabnl, nls > 2)
for (i in seq_len(nrow(oddids))) {
sub <- table(filter(wtc161, player == oddids$player[i])$list)
sub <- names(sort(sub, decreasing = TRUE))
cat("[*]", paste0(oddids$player[i], "'s"), sub[3], "could be", sub[2], "or", sub[1], "\n")
}
}
###########################################################
# register players with ratings
load("rating2015a.RData")
# unrated
nationalityRating <- read.csv(file = "nationalityRating.csv",
stringsAsFactors = FALSE)
unRegisteredPlayers <- c(
"Alexis Vallalta",
# "Daniel Maierl", # "JustDan"
"Fraser Phillips",
"Kirill Ustilovskiy",
# Laszlo Vuray", # "Mr.Wu"
# "Martin Florian", # "Raghnath"
"Stepan Slavik")
for (iPlayer in seq_along(unRegisteredPlayers)) {
if (!unRegisteredPlayers[iPlayer] %in% rating2015$ratings$Player) {
c1 <- filter(wtc161, player == unRegisteredPlayers[iPlayer])[1, "country"]
c2 <- filter(nationalityRating, country == c1)
if (nrow(c2) != 1) { stop("unregistered country, or dual nationality") }
rating2015$ratings <- rbind(rating2015$ratings,
list("Player" = unRegisteredPlayers[iPlayer],
"Rating" = c2$Rating,
"Deviation" = 0, "Games" = 0, "Win" = 0, "Draw" = 0, "Loss" = 0,
"Lag" = 0, "country" = c1))
}
}
# fix rating names or dataset
rating2015$ratings$Player <- gsub(pattern = " \\(.+\\)$",
replacement = "", x = rating2015$ratings$Player)
rating2015$ratings$Player[rating2015$ratings$Player == "Adam Szyma?ski"] <- "Adam Szymanski"
rating2015$ratings$Player[rating2015$ratings$Player == "André Valentim"] <- "Andre Valentim"
rating2015$ratings$Player[rating2015$ratings$Player == "Andreas Rizopoulos - Skorne"] <- "Andreas Rizopoulos"
rating2015$ratings$Player[rating2015$ratings$Player == "Andy Beat"] <- "Andy Beattie"
rating2015$ratings$Player[rating2015$ratings$Player == "Andy Garrard (Trolls)"] <- "Andy Garrard"
rating2015$ratings$Player[rating2015$ratings$Player == "Andy McBirnie (Cryx)"] <- "Andy McBirnie"
rating2015$ratings$Player[rating2015$ratings$Player == "Asbjørn Willarsrud"] <- "Asbjorn Willarsrud"
rating2015$ratings$Player[rating2015$ratings$Player == "Benjamin Fützi"] <- "Ben Fuzi"
rating2015$ratings$Player[rating2015$ratings$Player == "Christopher Müller"] <- "Christopher Muller"
rating2015$ratings$Player[rating2015$ratings$Player == "Gábor Wolf"] <- "Gabor Wolf"
rating2015$ratings <- rating2015$ratings[-grep("GERARD", rating2015$ratings$Player),]
rating2015$ratings$Player[rating2015$ratings$Player == "Gerard O' Brien"] <- "Gerard O'Brien"
rating2015$ratings$Player[rating2015$ratings$Player == "Giacomo MÄDER"] <- "Giaccomo Mader"
rating2015$ratings$Player[rating2015$ratings$Player == "GUA"] <- "Gua"
rating2015$ratings$Player[rating2015$ratings$Player == "Jarkko Vähämaa"] <- "Jarkko Vahamaa"
rating2015$ratings$Player[rating2015$ratings$Player == "JAVIER SÁNCHEZ"] <- "Javier Sanchez"
rating2015$ratings$Player[grep("^Jir", x = rating2015$ratings$Player)] <- "Jiri Kares"
rating2015$ratings$Player[rating2015$ratings$Player == "Josef Skládanka"] <- "Josef Skladanka"
rating2015$ratings$Player[rating2015$ratings$Player == "Kévin Aouragh"] <- "Kevin Aourragh"
rating2015$ratings$Player[rating2015$ratings$Player == "Kévin Maeder"] <- "Kevin Maeder"
rating2015$ratings$Player[rating2015$ratings$Player == "Konstantinos Oikonomopoulos - Khador"] <- "Konstantinos Oikonomopoulos"
rating2015$ratings$Player[rating2015$ratings$Player == "LEI"] <- "Lei"
rating2015$ratings$Player[rating2015$ratings$Player == "Loránd Sövényházi"] <- "Lorand Sovenyhazi"
rating2015$ratings$Player[rating2015$ratings$Player == "Lorenz GREDIG"] <- "Lorenz Gredig"
rating2015$ratings$Player[rating2015$ratings$Player == "Luas Leite"] <- "Luis Leite"
rating2015$ratings$Player[rating2015$ratings$Player == "Lukasz Kruszewski"] <- "Lukasz Kruszenski"
rating2015$ratings$Player[rating2015$ratings$Player == "Maksimilijan Galos"] <- "Maksimiljan Galos"
rating2015$ratings$Player[rating2015$ratings$Player == "Marc Forsmark Nielsen"] <- "Marc Nielsen"
rating2015$ratings$Player[rating2015$ratings$Player == "Marc TRAUTMANN"] <- "Marc Trautmann"
rating2015$ratings$Player[rating2015$ratings$Player == "Marios Oikonomopoulos - Legion of Everblight"] <- "Marios Oikonomopoulos"
rating2015$ratings$Player[rating2015$ratings$Player == "Martin Andre Røhme"] <- "Martin Andre Rohme"
rating2015$ratings$Player[rating2015$ratings$Player == "Martin Hornácek"] <- "Martin Hornacek"
rating2015$ratings$Player[rating2015$ratings$Player == "Mike Dunl"] <- "Mike Dunlop"
rating2015$ratings$Player[rating2015$ratings$Player == "Marco BERNASCONI"] <- "Marco Bernasconi"
rating2015$ratings$Player[rating2015$ratings$Player == "Pascal KRÜTTLI"] <- "Pascal Kruttli"
rating2015$ratings[grep("Pierre Arnauld de Seze", x = rating2015$ratings$Player), c("Games", "Win", "Loss")] <-
rating2015$ratings[grep("Pierre Arnauld de Seze", x = rating2015$ratings$Player), c("Games", "Win", "Loss")] +
rating2015$ratings[grep("Pierre Arnauld De Seze", x = rating2015$ratings$Player), c("Games", "Win", "Loss")]
rating2015$ratings <- rating2015$ratings[-grep("Pierre Arnauld De Seze", x = rating2015$ratings$Player), ]
rating2015$ratings$Player[rating2015$ratings$Player == "Rafa? Anusiak"] <- "Rafal Anusiak"
rating2015$ratings$Player[rating2015$ratings$Player == "Russell Harmann"] <- "Russell Harman"
rating2015$ratings$Player[rating2015$ratings$Player == "Samu Järvinen"] <- "Samu Jarvinen"
rating2015$ratings$Player[rating2015$ratings$Player == "Simon Sørensen"] <- "Simon Sorensen"
rating2015$ratings$Player[rating2015$ratings$Player == "Spyros Karakitsos Cryx"] <- "Spyros Karakitsos"
rating2015$ratings$Player[rating2015$ratings$Player == "Tero Särkijärvi"] <- "Tero Sarkijarvi"
rating2015$ratings$Player[grep("Tom.. Sedlon", x = rating2015$ratings$Player)] <- "Tomas Sedlon"
rating2015$ratings$Player[rating2015$ratings$Player == "Tomek Tutaj"] <- "Tomasz Tutaj"
rating2015$ratings$Player[grep("Toma. Kovacic", x = rating2015$ratings$Player)] <- "Tomaz Kovacic"
rating2015$ratings$Player[rating2015$ratings$Player == "Torbjörn Hansson"] <- "Torbjorn Hansson"
rating2015$ratings$Player[rating2015$ratings$Player == "WEI JIN 'PLANESWALKER'"] <- "Wei Jin"
rating2015$ratings$Player[rating2015$ratings$Player == "Wiktor Har??lak"] <- "Wiktor Harezlak"
rating2015$ratings$Player[rating2015$ratings$Player == "YANG SONG"] <- "Yang Song"
rating2015$ratings$Player[rating2015$ratings$Player == "Zoltán Gaál"] <- "Zoltan Gaal"
rating2015$ratings$Player[rating2015$ratings$Player == "Michael Llegems"] <- "Michael Ilegems"
wtc161$player <- gsub(pattern = "( )+$", replacement = "",
x = wtc161$player)
wtc161$player[wtc161$player == " Moritz Schwank"] <- "Moritz Schwank"
wtc161$player[wtc161$player == "Benjamin"] <- "Benjamin Kierkegaard"
wtc161$player[wtc161$player == "Daniel Porter"] <- "Dan Porter"
wtc161$player[wtc161$player == "Dmitri Petchonkin"] <- "Dmitri Pechonkin"
wtc161$player[wtc161$player == "Dom Leedham"] <- "Dominic Leedham"
wtc161$player[wtc161$player == "Dominik Beyeler"] <- "Dominic Beyeler"
wtc161$player[wtc161$player == "Dustin Mcwhirter"] <- "Dustin McWhirter"
wtc161$player[wtc161$player == "Dylan Simmer"] <- "Dyland Simmer"
wtc161$player[wtc161$player == "Jocke Rapp"] <- "Joakim Rapp"
wtc161$player[wtc161$player == "Julien Dupoirieux Gamin"] <- "Julien Dupoirieux"
wtc161$player[wtc161$player == "Leif Henning Bohli"] <- "Leif Bohli"
wtc161$player[wtc161$player == "Loránd Sövényházi"] <- "Lorand Sovenyhazi"
wtc161$player[wtc161$player == "Mikkel"] <- "Mikkel Ernst"
wtc161$player[wtc161$player == "Pascal Chruttli"] <- "Pascal Kruttli"
wtc161$player[wtc161$player == "Pat Dunford"] <- "Patrick Dunford"
wtc161$player[wtc161$player == "Pete Croft"] <- "Peter Croft"
wtc161$player[wtc161$player == "Pierre Arnauld de Seze Connetable"] <- "Pierre Arnauld de Seze"
wtc161$player[wtc161$player == "Simon"] <- "Simon Sorensen"
wtc161$player[wtc161$player == "Zoltán Gaál"] <- "Zoltan Gaal"
wtc161$player[wtc161$player == "john helzer"] <- "John Helz"
wtc161$player[wtc161$player == "jan"] <- "Jan D'Souza"
wtc161$player[wtc161$player == "michael ilegems"] <- "Michael Ilegems"
wtc161$player[wtc161$player == "nathan bosa"] <- "Nathan Bosa"
# check names
i = 10
uniPlayers <- sort(unique(wtc161$player))
playersNotInRating <- uniPlayers[!uniPlayers %in% rating2015$ratings$Player]
sort(grep(pattern = "^N",
x = rating2015$ratings$Player, value = TRUE))
# playersNotInRating
pp16r <- grep(pattern = paste0("^", LETTERS[i]),
x = rating2015$ratings$Player, value = TRUE)
pp16d <- grep(pattern = paste0("^", LETTERS[i]),
x = playersNotInRating, value = TRUE)
nm <- matrix(NA, nrow = max(length(pp16r), length(pp16d)), ncol = 3)
nm[seq_along(pp16r), 1] <- sort(pp16r)
nm[seq_along(pp16d), 2] <- sort(pp16d)
rownames(nm)[seq_along(pp16r)] <- sort(pp16r)
nm[rating2015$ratings$Player[rating2015$ratings$Player %in% pp16r], 3] <- rating2015$ratings$country[rating2015$ratings$Player %in% pp16r]
rownames(nm) <- NULL
all(is.na(nm[, 2]))
nm
#save(rating2015, file = "rating2015-reg.RData")
#load(file = "rating2015-reg.RData")
###########################################################
# data from list lock
library(data.table)
players16 <- fread(input = "players2016a.txt",
sep = ";", header = TRUE, stringsAsFactors = FALSE)
players16 <- as.data.frame(players16)
head(players16)
players16$List <- gsub(pattern = "( )+$", replacement = "", x = players16$List)
nc1 <- nchar(players16$List)
players16$list1 <- paste(substr(x = players16$List, start = 1, stop = nc1 - 1),
substr(x = players16$List, start = nc1, stop = nc1))
rating2015$ratings <- rating2015$ratings[-grep(pattern = "eRich Hochauer",
x = rating2015$ratings$Player),]
grep(pattern = "S.ren",
#x = wtc161$player,
x = rating2015$ratings$Player,
value = TRUE)
players16$Player[players16$Player == "Russell Harmann"] <- "Russell Harman"
players16$Player[players16$Player == "DCM"] <- "Alexander Grob"
players16$Player[players16$Player == "JustDan"] <- "Daniel Maierl"
players16$Player[players16$Player == "Mr.Wu"] <- "Laszlo Vuray"
players16$Player[players16$Player == "Raghnath"] <- "Martin Florian"
players16$Player[players16$Player == "Snot"] <- "Daniel Pawelka"
players16$Player[players16$Player == "eRich Hochauer"] <- "Erich Hochauer"
players16$Player[players16$Player == "Martin Hornácek"] <- "Martin Hornacek"
#players16$Player[players16$Player == "Josh Richter"] <-
players16$Player[players16$Player == "GUA"] <- "Gua"
players16$Player[players16$Player == "LEI"] <- "Lei"
players16$Player[players16$Player == "WEI JIN 'PLANESWALKER'"] <- "Wei Jin"
players16$Player[players16$Player == "YANG SONG (CAPTAIN)"] <- "Yang Song"
players16$Player[players16$Player == "Chen Ge (Gary)"] <- "Chen Ge"
players16$Player[players16$Player == "Guanbo Liu (Jack)"] <- "Guanbo Liu"
players16$Player[players16$Player == "He Jiang (Joey)"] <- "He Jiang"
players16$Player[players16$Player == "(C) Daniel Bogdanoski"] <- "Daniel Bogdanoski"
players16$Player[grep("^Jir", x = players16$Player)] <- "Jiri Kares"
players16$Player[players16$Player == "Josef Skládanka"] <- "Josef Skladanka"
players16$Player[grep(".tep.n Slav.k", players16$Player)] <- "Stepan Slavik"
players16$Player[grep("Tom.. Sedlon", x = players16$Player)] <- "Tomas Sedlon"
players16$Player[players16$Player == "Marc Forsmark Nielsen"] <- "Marc Nielsen"
players16$Player[players16$Player == "Simon Sørensen"] <- "Simon Sorensen"
players16$Player[players16$Player == "Søren"] <- "Soren"
players16$Player[players16$Player == "Andy Garrard (Trolls)"] <- "Andy Garrard"
players16$Player[players16$Player == "Andy McBirnie (Cryx)"] <- "Andy McBirnie"
players16$Player[players16$Player == "Chris Murdoch (Mercenaries, Captain)"] <- "Chris Murdoch"
players16$Player[players16$Player == "Samu Järvinen"] <- "Samu Jarvinen"
players16$Player[players16$Player == "Jarkko Vähämaa"] <- "Jarkko Vahamaa"
players16$Player[players16$Player == "Tero Särkijärvi"] <- "Tero Sarkijarvi"
players16$Player[players16$Player == "Kévin Aouragh"] <- "Kevin Aourragh"
players16$Player[players16$Player == "Kévin Maeder"] <- "Kevin Maeder"
players16$Player[players16$Player == "Benjamin Fützi"] <- "Ben Fuzi"
players16$Player[players16$Player == "Dominik de Cassan: Axis+Iron Mother"] <- "Dominik de Cassan"
players16$Player[players16$Player == "Christopher Müller"] <- "Christopher Muller"
players16$Player[players16$Player == "Andreas Rizopoulos - Skorne"] <- "Andreas Rizopoulos"
players16$Player[players16$Player == "Konstantinos Oikonomopoulos - Khador"] <- "Konstantinos Oikonomopoulos"
players16$Player[players16$Player == "Marios Oikonomopoulos - Legion of Everblight"] <- "Marios Oikonomopoulos"
players16$Player[players16$Player == "Spyros Karakitsos Cryx"] <- "Spyros Karakitsos"
players16$Player[players16$Player == "Gábor Wolf"] <- "Gabor Wolf"
players16$Player[players16$Player == "Loránd Sövényházi"] <- "Lorand Sovenyhazi"
players16$Player[players16$Player == "Zoltán Gaál"] <- "Zoltan Gaal"
#players16$Player[players16$Player == "Andy Powell"] <-
players16$Player[players16$Player == "Andy Beat"] <- "Andy Beattie"
players16$Player[grep(pattern = "GERARD", x = players16$Player)] <- "Gerard O'Brien"
players16$Player[players16$Player == "Asbjørn Willarsrud"] <- "Asbjorn Willarsrud"
players16$Player[players16$Player == "Martin Andre Røhme"] <- "Martin Andre Rohme"
players16$Player[players16$Player == "Rafa? Anusiak"] <- "Rafal Anusiak"
players16$Player[players16$Player == "Wiktor Har??lak"] <- "Wiktor Harezlak"
players16$Player[players16$Player == "Adam Szyma?ski"] <- "Adam Szymanski"
players16$Player[players16$Player == "Tomek Tutaj"] <- "Tomasz Tutaj"
players16$Player[players16$Player == "André Valentim"] <- "Andre Valentim"
players16$Player[players16$Player == "Luas Leite"] <- "Luis Leite"
#players16$Player[players16$Player == "Salvador Caetano"] <-
#players16$Player[players16$Player == "Yaroslav Karmannyy"] <-
players16$Player[players16$Player == "Maksimilijan Galos"] <- "Maksimiljan Galos"
players16$Player[grep("Toma. Kovacic", x = players16$Player)] <- "Tomaz Kovacic"
players16$Player[players16$Player == "JAVIER SÁNCHEZ"] <- "Javier Sanchez"
players16$Player[players16$Player == "Torbjörn Hansson"] <- "Torbjorn Hansson"
players16$Player[players16$Player == "Lorenz GREDIG"] <- "Lorenz Gredig"
players16$Player[players16$Player == "Pascal KRÜTTLI"] <- "Pascal Kruttli"
players16$Player[players16$Player == "Giacomo MÄDER"] <- "Giaccomo Mader"
players16$Player[players16$Player == "Marc TRAUTMANN"] <- "Marc Trautmann"
players16$Player[players16$Player == "Marco BERNASCONI"] <- "Marco Bernasconi"
players16$Player[players16$Player == "Michael Llegems"] <- "Michael Ilegems"
players16$Player[players16$Player == "Mike Dunl"] <- "Mike Dunlop"
###########################################################
library(dplyr)
# wtc161 <- read.csv(file = "troop-creator/WTCParse/wtc16-skinny.csv",
# stringsAsFactors = FALSE)
# only replacements left
notGamePlayerInListPlayer <- unique(wtc161$player[!wtc161$player %in% players16$Player])
notGamePlayerInListPlayer
notListPlayerInGamePlayer <- unique(players16$Player[!players16$Player %in% wtc161$player])
notListPlayerInGamePlayer
head(players16)
###########################################################
# register casters
wtc161a <- left_join(x = wtc161,
y = slice(group_by(select(players16, player = Player, faction), player), 1))
head(wtc161a)
players16$list1[players16$list1 == "Auror a"] <- "Aurora 1"
players16$list1[players16$list1 == "Axi s"] <- "Axis 1"
players16$list1[players16$list1 == "Barnabas 1"] <- "Barnabas 1"
players16$list1[players16$list1 == "Calandr a"] <- "Calandra 1"
players16$list1[players16$list1 == "Gunnbjor n"] <- "Gunnbjorn 1"
players16$list1[players16$list1 == "Iron Mother Directri x"] <- "Iron Mother 1"
players16$list1[players16$list1 == "Lucan t"] <- "Lucant 1"
players16$list1[players16$list1 == "Ragno r"] <- "Ragnor 1"
players16$list1[players16$list1 == "Saeryn2 & Rhyas 2"] <- "Saeryn 2 & Rhyas 2"
players16$list1[players16$list1 == "Witch Cove n"] <- "Witch coven 1"
players16$list1[players16$list1 == "Hoarluk 1"] <- "Doomshaper 1"
players16$list1[players16$list1 == "Hoarluk 2"] <- "Doomshaper 2"
players16$list1[players16$list1 == "Hoarluk 3"] <- "Doomshaper 3"
players16$list1[players16$list1 == "Brisbane 1"] <- "Siege 1"
players16$list1[players16$list1 == "Bartolo 1"] <- "Montador 1"
players16$list1[players16$list1 == "Jarl 1"] <- "Skuld 1"
players16$list1[players16$list1 == "Kara Sloan 1"] <- "Sloan 1"
players16$list1 <- gsub(pattern = "^( )+", replacement = "", x = players16$list1)
wtc161a$list <- gsub(pattern = "^( )+", replacement = "", x = wtc161a$list)
wtc161a$list <- gsub(pattern = "( )+$", replacement = "", x = wtc161a$list)
wtc161a$list[wtc161a$list == "Directrix 1"] <- "Iron Mother 1"
wtc161a$list[wtc161a$list == "vHarkevich 1"] <- "Harkevich 1"
lists <- sort(unique(wtc161a$list))
lists[!lists %in% sort(unique(players16$list1))]
wtc161a$valid <- apply(cbind(wtc161a$list, wtc161a$player),
MARGIN = 1,
FUN = function(x) x[1] %in% filter(players16, Player == x[2])[["list1"]])
sum(!wtc161a$valid)
source("printBbcodeTable.R")
printBbcodeTable(dat =
wtc161a[!wtc161a$valid & !wtc161a$player %in% notGamePlayerInListPlayer, -11])
write.csv(wtc161a, file = "wtc16-skinny3.csv",
quote = FALSE, row.names = FALSE)
wtc161a[!wtc161a$valid & !wtc161a$player %in% notGamePlayerInListPlayer, "list"] <- NA
###########################################################
# analyse games
games16 <- arrange(summarize(group_by(wtc161a, list),
N = n()), desc(N))
toplists16 <- games16$list[1:16]
wtc161b <- left_join(x = wtc161a,
y = rating2015$ratings, by = c(player = "Player"))
dim(wtc161a)
# [1] 1920 11
dim(wtc161b)
# [1] 1920 19
library(PlayerRatings)
library(tidyr)
library(ggplot2)
head(wtc161b)
# sum(wtc161b$country.x != wtc161b$country.y, na.rm = TRUE)
#
# wtc161b[!is.na(wtc161b$country.y) &
# wtc161b$country.x != wtc161b$country.y &
# wtc161b$country.y != "United.Nations", c("player", "country.x", "country.y")]
out <- as.data.frame(matrix(NA, nrow = 16*5, ncol = 4,
dimnames = list(NULL, c("Warcaster", "PredictedWins", "ProportionWins", "N"))))
out$Warcaster <- rep(toplists16, each = 5)
for (iList in 1:16) {
# pick records for caster x by game_id
sub <- select(filter(wtc161b, list == toplists16[iList]), game_id)
sub <- select(filter(wtc161b, game_id %in% sub$game_id),
game_id:team, Rating)
sub <- arrange(sub, game_id, team)
# reshape data for prediction tool
sub <- transmute(sub, game_id, round, TP, year,
player1 = player, list1 = list, team1 = teamname, rating1 = Rating,
player2 = player, list2 = list, team2 = teamname, rating2 = Rating,
team)
sub$player2 <- c(sub$player2[-1], NA)
sub$list2 <- c(sub$list2[-1], NA)
sub$team2 <- c(sub$team2[-1], NA)
sub$rating2 <- c(sub$rating2[-1], NA)
sub <- na.omit(select(filter(sub,
team == 1), -team))
# probability of player 1 winning
sub$probp1win <- predict(object = rating2015,
newdat = select(sub, round, player1, player2),
tng = -1, gamma = 0)
# probability of player with caster x winning
sub$probpxwin <- sub$probp1win
sub$probpxwin[sub$list1 != toplists16[iList]] <- (1 - sub$probp1win)[sub$list1 != toplists16[iList]]
sub$TPX <- sub$TP
sub$TPX[sub$list1 != toplists16[iList]] <- (1 - sub$TP)[sub$list1 != toplists16[iList]]
# summarize
# split into bins
qtl <- quantile(sub$probpxwin, probs = (0:5)/5)
sub$pxwinbin <- cut(sub$probpxwin,
breaks = qtl,
labels = diff(qtl)*0.5 + qtl[-6],
include.lowest = TRUE)
# mean is proportion of 0 and 1
res <- summarise(group_by(sub, pxwinbin), ProportionWins = mean(TPX))
res <- transmute(res,
PredictedWins = as.numeric(as.character(pxwinbin)), ProportionWins)
# output to single data object
out[out$Warcaster == toplists16[iList],
c("PredictedWins", "ProportionWins", "N")] <- cbind(res, N = nrow(sub))
}
head(out)
out$Warcaster <- factor(out$Warcaster, levels = toplists16,
labels = paste0(toplists16, " (", out$N[(1:16)*5], ")"))
# plot(res, asp = 1, ylab = "Proportion Won", xlab = "Expected")
# abline(a = 0, b = 1)
png("CasterWins_vs_Predicted.png",
height = 800, width = 800, res = 110)
ggplot(data = out,
aes(x = PredictedWins,
y = ProportionWins)) +
geom_abline(slope = 1, intercept = 0) +
coord_fixed() +
geom_point() +
xlab("Predicted Wins") +
ylab("Proportion Wins") +
facet_wrap(~Warcaster)
dev.off()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment