knitr::opts_chunk$set(echo = TRUE)
library(tidyverse)
library(tidymodels)
library(here)
library(hearrthstone)
library(kknn)
dat <- read_csv(here("dev", "data", "df_decks_dummy.csv"))

card_names <- names(dat)[-c(1,2)]
dat <- dat %>%
    mutate_all(~replace_na(., 0)) %>% 
  filter(!str_detect(deckname," Deck"))

classes <- c("Druid", "Demon Hunter", "Mage", "Hunter", "Shaman", "Rogue", "Warrior", "Warlock", "Priest", "Paladin")
dat %>% 
  pc_df("Hunter") %>% 
  select(1:10,deckname)
my_pcs <- prcomp(cards_matrix)

druid_pcs <-  prcomp(druid_matrix)

dh_pcs <-  prcomp(dh_matrix)

mage_pcs <-  prcomp(mage_matrix)

warrior_pcs <-  prcomp(warrior_matrix)

shaman_pcs <-  prcomp(shaman_matrix)

rogue_pcs <-  prcomp(rogue_matrix)

hunter_pcs <-  prcomp(hunter_matrix)

warlock_pcs <-  prcomp(warlock_matrix)

paladin_pcs <- prcomp(paladin_matrix)


druid_pc_df <- druid_pcs$x %>%
  as_tibble() %>%
  mutate(
    deckname = filter(dat, Class == "Druid")$deckname
  )

dh_pc_df <- dh_pcs$x %>%
  as_tibble() %>%
  mutate(
    deckname = dat$deckname
  )

mage_pc_df <- mage_pcs$x %>%
  as_tibble() %>%
  mutate(
     deckname = filter(dat, Class == "Mage")$deckname
  )

warrior_pc_df <- warrior_pcs$x %>%
  as_tibble() %>%
  mutate(
    deckname = dat$deckname
  )

shaman_pc_df <- shaman_pcs$x %>%
  as_tibble() %>%
  mutate(
    deckname = dat$deckname
  )

rogue_pc_df <- rogue_pcs$x %>%
  as_tibble() %>%
  mutate(
    deckname = dat$deckname
  )

hunter_pc_df <- hunter_pcs$x %>%
  as_tibble() %>%
  mutate(
    deckname = dat$deckname
  )

paladin_pc_df <- paladin_pcs$x %>%
  as_tibble() %>%
  mutate(
    deckname = dat$deckname
  )

warlock_pc_df <- warlock_pcs$x %>%
  as_tibble() %>%
  mutate(
    deckname = dat$deckname
  )

pc_df <- my_pcs$x %>%
  as_tibble() %>%
  mutate(
    deckname = dat$deckname
  )
mage_pc_df %>%
  ggplot() +
    geom_boxplot(aes(x = deckname, y = PC2))

enframe(my_pcs$rotation[,"PC2"]) %>%
  arrange(desc(value))

enframe(my_pcs$rotation[,"PC2"]) %>%
  arrange(value)
dat_split <- dat %>%
  filter(Class == "Druid") %>% 
  select(-Class) %>%
  mutate(
    deckname = as_factor(deckname)
  ) %>%
    vfold_cv(v = 5)
as.data.frame(dat_split$splits[2])
class <- "Druid"
specify_class <- function(class){
deck  
  dat_split <- dat %>%
  filter(Class == class) %>%
  mutate(
    deckname = as_factor(deckname),
    Class = as_factor(Class)
  ) %>%
    vfold_cv(v = 5)
  data <- dat_split %>% 
  mutate(df_ana = map(splits, analysis),
         df_ass = map(splits, assessment))

  map_dfr((1:nrow(data)),~predictions_tree(as.data.frame(data$df_ana[[.x]]),as.data.frame(data$df_ana[[.x]]),class))

}
class <- "Druid"
cards_matrix <- function(dat,class){
  matrix <- dat %>% 
  filter(Class == class) %>% 
  select(contains("name_")) %>%
  mutate_all(~replace_na(., 0)) %>%
  as.matrix()
  return(matrix)
}
pc_df <- function(dat,class){
  pcs <- prcomp(cards_matrix(dat,class))
  pc_df <-  pcs$x %>%
  as_tibble() %>%
  mutate(
    deckname = filter(dat, Class == class)$deckname
  )
  return(pc_df)
}
predictions_tree <- function(training,test,class){

ctree <- decision_tree(tree_depth = 30, min_n = 2) %>%
  set_engine("rpart") %>%
  set_mode("classification")

tree_fit <- ctree %>%
  fit(deckname ~ ., training)

my_preds <- tree_fit %>%
  predict(new_data = test) %>% 
  mutate(true_class = test$deckname) 


accuracy <- my_preds %>% 
  yardstick::accuracy(truth = true_class, 
            estimate = .pred_class)
prediction_accuracy <- tibble(Class = class,accuracy = accuracy[[1,3]], count = nrow(test))

return(prediction_accuracy)

}
predictions_knn <- function(training,test,class,pc = FALSE){

knn <- nearest_neighbor(neighbors = 3)%>%
  set_engine("kknn") %>%
  set_mode("classification")
if(pc){
neighbor_fit <- knn %>%
  fit(deckname ~ ., training)
} else if(!pc){
neighbor_fit <- knn %>%
  fit(deckname ~ ., training)

}
my_preds <- neighbor_fit %>%
  predict(new_data = test) %>% 
  mutate(true_class = test$deckname) 


accuracy <- my_preds %>% 
  yardstick::accuracy(truth = true_class, 
            estimate = .pred_class)
prediction_accuracy <- tibble(Class = class,accuracy = accuracy[[1,3]], count = nrow(test))

return(prediction_accuracy)

}
accuracy_cv_table <- function(class,model = "tree"){
dat_split <- dat %>%
  mutate(
    deckname = as_factor(deckname),
    Class = as_factor(Class)
  ) %>%
  filter(Class == class) 

if(model != "knn_pc"){
  dat_split <-  dat_split %>% 
      vfold_cv(v = 5, strata = deckname)
} else if(model == "knn_pc"){
    dat_split <- dat_split %>% 
      pc_df(class) %>%  
      select(1:10,deckname) %>% 
      vfold_cv(v = 5, strata = deckname)
  }

  data <- dat_split %>% 
  mutate(df_ana = map(splits, analysis),
         df_ass = map(splits, assessment))
  cv_store <- c()
  counts <- c()
for(i in 1:nrow(data)){
  if(model == "tree"){
  preds <- predictions_tree(data$df_ana[[i]],data$df_ass[[i]],class)
  } else if(model == "knn" ){
  preds <- predictions_knn(data$df_ana[[i]],data$df_ass[[i]],class,FALSE)
  }  else if(model == "knn_pc"){
      preds <- predictions_knn(data$df_ana[[i]],data$df_ass[[i]],class,TRUE)
  }
  cv_store[i] <- preds$accuracy
  counts[i] <- nrow(data$df_ass[[i]])
}
  cv_store <- cv_store %>% 
    unlist()
  accuracy_table <- tibble(class, 
                           avg_test = mean(counts), 
                           min_acc=min(cv_store), 
                           max_acc=max(cv_store), 
                           mean_acc = mean(cv_store), 
                           sd_acc = sd(cv_store))
  return(accuracy_table)
}
accuracy_cv_table_tune <- function(class,model = "tree", depth = 30, min_n = 2, k = NULL){
dat_split <- dat %>%
  mutate(
    deckname = as_factor(deckname),
    Class = as_factor(Class)
  ) %>%
  filter(Class == class) 

if(model != "knn_pc"){
  dat_split <-  dat_split %>% 
      vfold_cv(v = 5, strata = deckname)
} else if(model == "knn_pc"){
    dat_split <- dat_split %>% 
      pc_df(class) %>%  
      select(1:10,deckname) %>% 
      vfold_cv(v = 5, strata = deckname)
  }

  data <- dat_split %>% 
  mutate(df_ana = map(splits, analysis),
         df_ass = map(splits, assessment))
  cv_store <- c()
  counts <- c()
for(i in 1:nrow(data)){
  if(model == "tree"){
  preds <- predictions_tree_tune(data$df_ana[[i]],data$df_ass[[i]],class,depth = depth, min_n = min_n)
  } else if(model == "knn" ){
  preds <- predictions_knn_tune(data$df_ana[[i]],data$df_ass[[i]],class,FALSE, k = k)
  }  else if(model == "knn_pc"){
      preds <- predictions_knn_tune(data$df_ana[[i]],data$df_ass[[i]],class,TRUE, k = k )
  }
  cv_store[i] <- preds$accuracy
  counts[i] <- nrow(data$df_ass[[i]])
}
  cv_store <- cv_store %>% 
    unlist()
  accuracy_table <- tibble(class, 
                           avg_test = mean(counts), 
                           min_acc=min(cv_store), 
                           max_acc=max(cv_store), 
                           mean_acc = mean(cv_store), 
                           sd_acc = sd(cv_store))
  return(accuracy_table)
}
tree <- map_dfr(classes,~accuracy_cv_table(.x,"tree"))
knn <- map_dfr(classes,~accuracy_cv_table(.x,"knn"))
knn_pc <- map_dfr(classes,~accuracy_cv_table(.x,"knn_pc"))
bind_rows(tree %>%  mutate(model_type = "tree"),
knn %>%  mutate(model_type = "knn"),
knn_pc %>%  mutate(model_type = "knn_pc"))
set.seed(300)
tune_classes_tree <- list()
for(i in 1:length(classes)){

ctree <- decision_tree(tree_depth = 30, min_n = tune(), cost_complexity = tune()) %>%
  set_engine("rpart") %>%
  set_mode("classification")
tree_grid <- grid_regular(min_n(),
                          cost_complexity(),
                          levels = 5)

colnames(dat) <- make.names(colnames(dat))
folds <- vfold_cv(dat %>% filter(Class == classes[i]) %>% select(-Class) %>% mutate(deckname = as.factor(deckname)),v = 3, strata = deckname) 

tree_wf <- workflow() %>% 
  add_model(ctree) %>%
  add_formula(deckname ~ .)

tree_res <- 
  tree_wf %>% 
  tune_grid(
    resamples = folds,
    grid = tree_grid
  )

tune_classes_tree[[i]]<-  tree_res %>% 
  collect_metrics() %>% 
  mutate(model_type = "tree")
}
names(tune_classes_tree) <- classes 
set.seed(300)
tune_classes_kknn <- list()
for(i in 1:length(classes)){
knn_tune <- nearest_neighbor( neighbors = tune()) %>%
  set_engine("kknn") %>%
  set_mode("classification")
kknn_grid <- grid_regular(neighbors(),
                          levels = 5)
colnames(dat) <- make.names(colnames(dat))
folds <- vfold_cv(dat %>% filter(Class == classes[i]) %>% select(-Class) %>% mutate(deckname = as.factor(deckname)), v = 3,strata = deckname)

knn_wf <- workflow() %>% 
  add_model(knn_tune) %>%
  add_formula(deckname ~ .)

kknn_res <- 
  knn_wf %>% 
  tune_grid(
    resamples = folds,
    grid = kknn_grid
  )

tune_classes_kknn[[i]] <-  kknn_res %>% 
  collect_metrics() %>% 
  mutate(model_type = "kknn")

}
names(tune_classes_kknn) <- classes
tune_classes_kknn[["Demon Hunter"]] 
set.seed(300)
tune_classes_PCA <- list()
for(i in 1:length(classes)){
knn_tune <- nearest_neighbor( neighbors = tune()) %>%
  set_engine("kknn") %>%
  set_mode("classification")
kknn_grid <- grid_regular(neighbors(),
                          levels = 5)
colnames(dat) <- make.names(colnames(dat))
folds <- vfold_cv(dat %>% pc_df(classes[i]) %>%  
      select(1:10,deckname) %>%  mutate(deckname = as.factor(deckname)), v = 3,strata = deckname)

knn_wf <- workflow() %>% 
  add_model(knn_tune) %>%
  add_formula(deckname ~ .)

kknn_res <- 
  knn_wf %>% 
  tune_grid(
    resamples = folds,
    grid = kknn_grid
  )

tune_classes_PCA[[i]] <-  kknn_res %>% 
  collect_metrics() %>% 
  mutate(model_type = "PCA")

}
names(tune_classes_PCA) <- classes
dh_acc <- bind_rows(tune_classes_tree[["Demon Hunter"]], tune_classes_kknn[["Demon Hunter"]], tune_classes_PCA[["Demon Hunter"]])
druid_acc <-bind_rows(tune_classes_tree[["Druid"]], tune_classes_kknn[["Druid"]], tune_classes_PCA[["Druid"]])
hunter_acc <- bind_rows(tune_classes_tree[["Hunter"]], tune_classes_kknn[["Hunter"]], tune_classes_PCA[["Hunter"]])
mage_acc <- bind_rows(tune_classes_tree[["Mage"]], tune_classes_kknn[["Mage"]], tune_classes_PCA[["Mage"]])
paladin_acc <- bind_rows(tune_classes_tree[["Paladin"]], tune_classes_kknn[["Paladin"]], tune_classes_PCA[["Paladin"]])
priest_acc <- bind_rows(tune_classes_tree[["Priest"]], tune_classes_kknn[["Priest"]], tune_classes_PCA[["Priest"]])
rogue_acc <- bind_rows(tune_classes_tree[["Rogue"]], tune_classes_kknn[["Rogue"]], tune_classes_PCA[["Rogue"]])
warlock_acc <- bind_rows(tune_classes_tree[["Warlock"]], tune_classes_kknn[["Warlock"]], tune_classes_PCA[["Warlock"]])
warrior_acc <- bind_rows(tune_classes_tree[["Warrior"]], tune_classes_kknn[["Warrior"]], tune_classes_PCA[["Warrior"]])
shaman_acc <- bind_rows(tune_classes_tree[["Shaman"]], tune_classes_kknn[["Shaman"]], tune_classes_PCA[["Shaman"]])
dh_acc %>% filter(model_type != "PCA") %>% filter( .metric == "accuracy") %>%  filter(mean == max(mean)) %>% filter(model_type != "PCA")
druid_acc %>% filter(model_type != "PCA") %>%  filter( .metric == "accuracy") %>% filter(mean == max(mean) ) %>% filter(model_type != "PCA")
hunter_acc %>% filter(model_type != "PCA") %>% filter( .metric == "accuracy") %>% filter(mean == max(mean) ) %>% filter(model_type != "PCA")
warlock_acc %>% filter(model_type != "PCA") %>% filter( .metric == "accuracy") %>% filter(mean == max(mean) )%>% filter(model_type != "PCA")
mage_acc %>% filter(model_type != "PCA") %>% filter( .metric == "accuracy") %>% filter(mean == max(mean) )%>% filter(model_type != "PCA")
paladin_acc %>% filter(model_type != "PCA") %>% filter( .metric == "accuracy") %>% filter(mean == max(mean) )%>% filter(model_type != "PCA")
priest_acc %>% filter(model_type != "PCA") %>% filter( .metric == "accuracy") %>% filter(mean == max(mean) )%>% filter(model_type != "PCA")
rogue_acc  %>% filter(model_type != "PCA") %>% filter( .metric == "accuracy") %>% filter(mean == max(mean) )%>% filter(model_type != "PCA")
warrior_acc  %>% filter(model_type != "PCA") %>% filter( .metric == "accuracy") %>% filter(mean == max(mean) )%>% filter(model_type != "PCA")
shaman_acc  %>% filter(model_type != "PCA") %>% filter( .metric == "accuracy") %>% filter(mean == max(mean) )%>% filter(model_type != "PCA")
store_plots_tree <- list() 
for (i in 1:length(classes)){
plot <- tune_classes_tree[[classes[i]]]%>% 
  filter(.metric == 'accuracy') %>% 
    ggplot(aes(x= min_n, y = mean, color = as.factor(tree_depth))) +
  geom_line(size = 1.5, alpha = 0.6) +
  geom_point(size = 2) +
  facet_wrap(~ .metric, scales = "free", nrow = 2)
store_plots_tree[[i]] <- plot 
}
names(store_plots_tree) <- classes 
dat_split %>% 
      pc_df(Druid) %>%  
      select(1:10,deckname) 
counter <- 1
accuracy_table <- tibble("class", "avg_test" , "min_acc", "max_acc") 
for(i in c(5,10,15,20,25,30)){
dat_split <- dat %>%
  mutate(
    deckname = as_factor(deckname),
    Class = as_factor(Class)
  ) %>%
  filter(Class == class) 

if(model != "knn_pc"){
  dat_split <-  dat_split %>% 
      vfold_cv(v = 5, strata = deckname)
} else if(model == "knn_pc"){
    dat_split <- dat_split %>% 
      pc_df(class) %>%  
      select(1:10,deckname) %>% 
      vfold_cv(v = 5, strata = deckname)
  }

  data <- dat_split %>% 
  mutate(df_ana = map(splits, analysis),
         df_ass = map(splits, assessment))
  cv_store <- c()
  counts <- c()
for(i in 1:nrow(data)){
  preds <- predictions_tree_tune(data$df_ana[[i]],data$df_ass[[i]],class, depth = i)
  cv_store[i] <- preds$accuracy
  counts[i] <- nrow(data$df_ass[[i]])
}
  cv_store <- cv_store %>% 
    unlist()
  accuracy_table <- tibble(class, avg_test = mean(counts), min_acc=min(cv_store), max_acc=max(cv_store))
}
dat_split <- dat %>%
  mutate(
    deckname = as_factor(deckname),
    Class = as_factor(Class)
  ) %>%
  filter(Class == class) %>% 
  select(-Class)


dat_split <- dat_split %>%
  select(where( ~ !is.numeric(.x) || sum(.x, na.rm = TRUE) > 0)) %>%
  initial_split(strata = deckname)

dat_train <- training(dat_split)
dat_test <- testing(dat_split)

training <- dat_train
test <- dat_test


accuracy_table <- function(class){
dat_split <- dat %>%
  mutate(
    deckname = as_factor(deckname),
    Class = as_factor(class)
  ) %>%
  filter(Class == class) %>% 
  initial_split()

dat_train <- training(dat_split)
dat_test <- testing(dat_split)
predictions_tree(dat_train,dat_test,class)
}
classes <- c("Druid", "Demon Hunter", "Mage", "Hunter", "Shaman", "Rogue", "Warrior", "Warlock", "Priest", "Paladin")
classification_accuracy <- map_dfr(classes, ~accuracy(.x))
sum(classification_accuracy$accuracy*classification_accuracy$count)/sum(classification_accuracy$count)
classify <- function(deckcode){
  tree <- nearest_neighbor(neighbors =  5) %>%
  set_engine("kknn") %>%
  set_mode("classification") 
  dummy <- get_dummys(deckcode,"deck")
  tree_fit <- ctree %>%
  fit(as.factor(deckname) ~ ., dat)
  my_preds <- tree_fit %>%
  predict(new_data = bind_rows(dat,dummy) %>% filter(deckname =="deck"))

  return(my_preds)

}

deckcode <- "AAECAZICHkD+AcQG5Ai5lAOvogPvogP0ogP8owPbpQP2rQP9rQOMrgORsQP5tQPougPsugPuugObzgP1zgOj0QPw1AOd2AOJ4AOK4AOV4AOk4QPR4QOL5AOM5AMAAA=="

class <- classify("AAECAaIHBKeoA/vEA9nRA4TkAw20AY+XA/uaA/6aA/WnA62oA7euA865A9C5A6TRA+XTA+fdA4LkAwA=")
class
#druid
druid_model <- decision_tree(tree_depth = 30, min_n = 2) %>%
  set_engine("rpart") %>%
  set_mode("classification")
druid_fit <- druid_model %>%
  fit(as.factor(deckname) ~ ., dat %>% filter(Class == "Druid"))

#dh
dh_model <- nearest_neighbor(neighbors = 3) %>%
  set_engine("kknn") %>%
  set_mode("classification")
dh_fit <- dh_model %>%
  fit(as.factor(deckname) ~ ., dat %>% filter(Class == "Demon Hunter") %>% select(-Class))

#mage
mage_model <- decision_tree(tree_depth = 15, min_n = 2) %>%
  set_engine("rpart") %>%
  set_mode("classification")
mage_fit <- mage_model %>%
  fit(as.factor(deckname) ~ ., dat %>% filter(Class == "Mage"))

#hunter
hunter_model <- decision_tree(tree_depth = 30, min_n = 2) %>%
  set_engine("rpart") %>%
  set_mode("classification")
hunter_fit <- hunter_model %>%
  fit(as.factor(deckname) ~ ., dat %>% filter(Class == "Hunter"))

#shaman
shaman_model <- decision_tree(tree_depth = 30, min_n = 2) %>%
  set_engine("rpart") %>%
  set_mode("classification")
shaman_fit <- shaman_model %>%
  fit(as.factor(deckname) ~ ., dat %>% filter(Class == "Shaman"))

#rogue
rogue_model <- decision_tree(tree_depth = 30, min_n = 2) %>%
  set_engine("rpart") %>%
  set_mode("classification")
rogue_fit <- rogue_model %>%
  fit(as.factor(deckname) ~ ., dat %>% filter(Class == "Rogue"))

#warrior
warrior_model <- decision_tree(tree_depth = 30, min_n = 2) %>%
  set_engine("rpart") %>%
  set_mode("classification")
warrior_fit <- warrior_model %>%
  fit(as.factor(deckname) ~ ., dat %>% filter(Class == "Warrior"))

#warlock
warlock_model <- decision_tree(tree_depth = 30, min_n = 2) %>%
  set_engine("rpart") %>%
  set_mode("classification")
warlock_fit <- warlock_model %>%
  fit(as.factor(deckname) ~ ., dat %>% filter(Class == "Warlock"))

#priest

priest_model <- decision_tree(tree_depth = 30, min_n = 2) %>%
  set_engine("rpart") %>%
  set_mode("classification")
priest_fit <- priest_model %>%
  fit(as.factor(deckname) ~ ., dat %>% filter(Class == "Priest"))

#paladin

paladin_model <- decision_tree(tree_depth = 30, min_n = 2) %>%
  set_engine("rpart") %>%
  set_mode("classification")
paladin_fit <- paladin_model %>%
  fit(as.factor(deckname) ~ ., dat %>% filter(Class == "Paladin"))
classify <- function(deckcode){
  dummy <- get_dummys(deckcode,"deck")
  dummy <- bind_rows(dat %>% 
                       filter(Class == dummy$Class),dummy) %>% 
    filter(deckname =="deck") %>% 
    mutate_all(~replace_na(., 0)) 
  if(dummy$Class =="Druid"){
    classification <- druid_fit %>%
      predict(new_data = dummy) 

  } else if(dummy$Class =="Demon Hunter"){
    classification <- dh_fit %>%
      predict(new_data = dummy) 

  } else if(dummy$Class == "Mage"){
    classification <- mage_fit %>%
      predict(new_data = dummy) 

  } else if(dummy$Class == "Hunter"){
    classification <- hunter_fit %>%
      predict(new_data = dummy) 
  } else if(dummy$Class == "Shaman"){
    classification <- shaman_fit %>%
      predict(new_data = dummy) 

  } else if(dummy$Class == "Rogue"){
    classification <- rogue_fit %>%
      predict(new_data = dummy) 

  } else if(dummy$Class == "Warrior"){

    classification <- warrior_fit %>%
      predict(new_data = dummy) 

  } else if(dummy$Class == "Warlock"){
    classification <- warlock_fit %>%
      predict(new_data = dummy) 

  }else if(dummy$Class == "Priest"){
    classification <- priest_fit %>%
      predict(new_data = dummy) 

  }else if(dummy$Class == "Paladin"){
    classification <- paladin_fit %>%
      predict(new_data = dummy) 
  } 
  classification <- as.character(classification$.pred_class)
  return(classification)

}
classify("AAECAea5AwAP/acD+a4Di7oD4LwD174D3r4D98gD8skD3MwDgtADxtEDzd0Dz90D2d4DyuMDAA==")
dummy <- get_dummys("AAECAf0GBsUE2wbcBvqkA/zeA/bjAwzVA4oHoaEDrMsD7NEDzNIDzdIDxt4D5uED9eMD+OMDkuQDAA==","deck")
deckcode <- "AAECAea5AwAP/acD+a4Di7oD4LwD174D3r4D98gD8skD3MwDgtADxtEDzd0Dz90D2d4DyuMDAA=="
  dummy <- get_dummys(deckcode,"deck")
  dummy <- bind_rows(dat %>% filter(Class == dummy$Class),dummy) %>% filter(deckname =="deck") %>% 
    mutate_all(~replace_na(., 0)) 
dat %>% 
  filter(Class == "Warlock") %>% 
  group_by(deckname) %>%
  summarise(count = n())
sleepy_classify <- function(deckcode){
  Sys.sleep(.5)
  classify(deckcode)
}
df_lineup <- read_csv("lineup_details.csv")
wider <- df_lineup %>% 
  filter(Tournament == 1) %>% 
  mutate(Date = as.character(Date)) %>% 
  pivot_wider(c(Player,Tournament),
              values_from = 4:5) %>%
  head(30)


tournament_1_lineups <- wider %>% 
  mutate(`Deck Code_` = map_chr(`Deck Code_`,
                                paste, 
                                collapse = "SPLIT"), Date_ = map_chr(`Date_`,unique)) %>% 
  separate(`Deck Code_`,sep = "SPLIT", into = c("Deck1","Deck2","Deck3")) %>% 
  mutate(Date_ = as.Date(Date_)) %>% 
  rename(Date = Date_) %>% 
  mutate(`Deck 1 Pred` = map_chr(Deck1,sleepy_classify))


tournament_1_lineups_deck_2 <- 
  tournament_1_lineups %>%
  mutate(`Deck 2 Pred` = map_chr(Deck2,sleepy_classify))
Sys.sleep(5)
tournament_1_lineups_deck_3 <-   
tournament_1_lineups_deck_2 %>% 
  mutate(`Deck 3 Pred` = map_chr(Deck3,sleepy_classify))

write_csv(tournament_1_lineups_deck_3, here("dev" ,"data", "lineupdecks.csv"))
mage_model <- nearest_neighbor(neighbors = 5) %>%
  set_engine("kknn") %>%
  set_mode("classification")
mage_fit <- mage_model %>%
    fit(as.factor(deckname) ~ ., dat %>% filter(Class == "Mage")
      #  %>% pc_df("Mage") %>% select(1:10,deckname)
      %>% select(-Class)
        )
deckcode <- "AAECAf0EAsW4A5LLAw6rBLQE5gSWBaQHvAifmwP/nQPBuAPgzAPHzgPNzgP30QOF5AMA"
  dummy <- get_dummys(deckcode,"deck")
      dummy <- bind_rows(dat %>%
                             filter(Class == dummy$Class),dummy) %>%
     #   pc_df("Mage") %>% 
          filter(deckname =="deck") 
    classification <- mage_fit %>%
              predict(new_data = dummy)
deckcode <- "AAECAea5AwbMugPevgPaxgPyyQP21gPF3QMM/acD+a4D4LwD2cYD98gD3MwD+84DgtADz90DyuMD8+MDkOQDAA=="  
dummy <- get_dummys(deckcode,"deck")
      dummy <- bind_rows(dat %>%
                             filter(Class == dummy$Class),dummy) %>%
     #   pc_df("Mage") %>% 
          filter(deckname =="deck") 

paladin_model <- nea(tree_depth = 30, min_n = 2) %>%
    set_engine("rpart") %>%
    set_mode("classification")
paladin_fit <- paladin_model %>%
    fit(as.factor(deckname) ~ ., dat %>% filter(Class == "Paladin"))
### Mozaki OTK Mage
# Class: Mage
# Format: Standard
# Year of the Phoenix
#
# 2x (1) Ray of Frost
# 2x (1) Primordial Studies
# 2x (1) Mirror Image
# 2x (1) Magic Trick
# 2x (1) Devolving Missiles
# 2x (1) Brain Freeze
# 2x (1) Arcane Missiles
# 2x (2) Sorcerer's Apprentice
# 2x (2) Incanter's Flow
# 2x (2) Frostbolt
# 1x (2) Evocation
# 2x (2) Cram Session
# 2x (2) Conjure Mana Biscuit
# 2x (3) Arcane Intellect
# 1x (5) Mozaki, Master Duelist
# 2x (6) Gadgetzan Auctioneer
#
AAECAf0EAsW4A5LLAw6rBLQE5gSWBaQHvAifmwP/nQPBuAPgzAPHzgPNzgP30QOF5AMA
# To use this deck, copy it to your clipboard and create a new deck in Hearthstone
# Find this deck on https://hsreplay.net/decks/tVtyquZMyjdsgLrkmUv8zd/


kabhatia7/hearrthstone documentation built on March 24, 2021, 5:54 p.m.