library(dplyr)
library(cluster)
library(factoextra)
library(ggplot2)
library(readr)
library(datasets)
library(corrplot)
library(stats)
library(ggrepel)
library(textir) 
library(BBmisc)
library(rstudioapi)
library(rvest)
library(reactable)
library(reactablefmtr)
#pull and clean data

player_stats <- read_html("https://www.basketball-reference.com/leagues/NBA_2023_per_minute.html") %>%
  html_node("table") %>% 
  html_table()

adv_stats <- read_html("https://www.basketball-reference.com/leagues/NBA_2023_advanced.html") %>%
  html_node("table") %>% 
  html_table() %>%
  subset( , select = -c(Rk, Pos, Age, Tm, G, MP, Player))

player_df <- cbind(player_stats, adv_stats) %>%
  subset( , select = -c(Rk, Var.42, Var.47)) %>%
  mutate_at(c(3, 5:48), as.numeric)

player_df$MPG <- player_df$MP/player_df$G
player_df$Ast2TO <- player_df$AST/player_df$TOV

player_df[is.na(player_df)] <- 0

player_df <- normalize(player_df, method = "standardize")

main_df <- player_df[c(8:49)]

Unrestricted

free_unrest <- c( "Bruce Brown",
                  "Russell Westbrook",
                  "Kyrie Irving",
                  "D'Angelo Russell",
                  "Kevin Love",
                  "Nikola Vučević",
                  "Draymond Green",
                  "Fred VanVleet",
                  "Harrison Barnes",
                  "Jerami Grant",
                  "Caris LeVert",
                  "Will Barton",
                  "Christian Wood",
                  "Brook Lopez",
                  "Kyle Kuzma",
                  "Kelly Oubre Jr.",
                  "Josh Richardson",
                  "Dillon Brooks",
                  "Dwight Powell",
                  "Jae Crowder",
                  "Dario Šarić",
                  "Jakob Poeltl",
                  "Mason Plumlee",
                  "Seth Curry",
                  "Joe Ingles",
                  "Lonnie Walker IV",
                  "Hamidou Diallo",
                  "Kendrick Nunn",
                  "Cory Joseph",
                  "Torrey Craig",
                  "Ish Smith",
                  "Jeff Green",
                  "Justise Winslow",
                  "Terence Davis",
                  "George Hill",
                  "Alex Len",
                  "Georges Niang",
                  "Robin Lopez",
                  "Blake Griffin",
                  "Bismack Biyombo",
                  "Andre Iguodala",
                  "Udonis Haslem",
                  "Markieff Morris",
                  "Austin Rivers",
                  "Wesley Matthews",
                  "DeAndre Jordan",
                  "Taj Gibson",
                  "Dennis Schröder",
                  "T.J. Warren",
                  "JaMychal Green",
                  "Matthew Dellavedova",
                  "Trey Lyles",
                  "Udoka Azubuike",
                  "Frank Kaminsky",
                  "Raul Neto",
                  "Rodney McGruder",
                  "Jevon Carter",
                  "Dennis Smith Jr.",
                  "Damion Lee",
                  "Thomas Bryant",
                  "Danny Green",
                  "Svi Mykhailiuk",
                  "Aaron Holiday",
                  "Theo Pinson",
                  "Yuta Watanabe",
                  "Josh Okogie",
                  "Troy Brown Jr.",
                  "Drew Eubanks",
                  "Frank Ntilikina",
                  "Juan Toscano-Anderson",
                  "Thanasis Antetokounmpo",
                  "Moritz Wagner",
                  "Keita Bates-Diop",
                  "Gabe Vincent",
                  "Javonte Green",
                  "Max Strus",
                  "Shake Milton",
                  "Jaylen Nowell",
                  "Jalen McDaniels",
                  "Naz Reid",
                  "Chimezie Metu",
                  "Oshae Brissett",
                  "Wenyen Gabriel",
                  "James Johnson",
                  "Terrence Ross",
                  "Reggie Jackson",
                  "Gorgui Dieng",
                  "Dewayne Dedmon",
                  "Justin Holiday",
                  "Boban Marjanović",
                  "Patrick Beverley",
                  "Cody Zeller",
                  "Goran Dragić",
                  "Meyers Leonard",
                  "Louis King",
                  "Ty Jerome")

index_1 <- 1:96

unr <- cbind(index_1, free_unrest) %>% 
  as.data.frame() %>%
  rename( "Player" = free_unrest) 

unr$index_1 <- as.numeric(as.character(unr$index_1))

main_data1 <- left_join(unr, player_df) %>%
  subset( , select = -c( Pos, Tm, Ast2TO, index_1, Player))
res.dist <- get_dist(main_data1, stand = TRUE, method = "euclidean")
fviz_dist(res.dist, gradient = list(low = "#00AFBB", mid = "white", high = "#FC4E07"), lab_size = 2)

fviz_nbclust(main_data1, kmeans, method = "gap_stat")

km.res <- kmeans(main_data1, 6, nstart = 25)
rownames(main_data1) <- main_data1$Player

fviz_cluster(km.res, main_data1, ellipse = TRUE, ellipse.alpha = .1,
             palette = "jco", repel = TRUE, ggtheme = theme_minimal(),
             main = FALSE, xlab = FALSE, ylab = FALSE,
             labelsize = 9, lwd=2)

res.hc <- hclust(res.dist, method = "ward.D2")

fviz_dend(res.hc, k = 8, cex = .3, horiz = TRUE, rect = TRUE,
          labelsize = 1, repel = TRUE, labels_track_height = 5,
          lwd = .2,
          main = "Cluster Dendogram for Unrestricted Free Agents",
          sub = "Bruce Brown is 1 and is in the purple cluster;
          Jeff Green is 52 and is in the blue cluster ",)

left_join(unr, player_df) %>%
  select(Player) %>%
  mutate(index = 1:146) %>%
  select(index, Player) 
##     index                 Player
## 1       1            Bruce Brown
## 2       2      Russell Westbrook
## 3       3      Russell Westbrook
## 4       4      Russell Westbrook
## 5       5           Kyrie Irving
## 6       6           Kyrie Irving
## 7       7           Kyrie Irving
## 8       8       D'Angelo Russell
## 9       9       D'Angelo Russell
## 10     10       D'Angelo Russell
## 11     11             Kevin Love
## 12     12             Kevin Love
## 13     13             Kevin Love
## 14     14         Nikola Vučević
## 15     15         Draymond Green
## 16     16          Fred VanVleet
## 17     17        Harrison Barnes
## 18     18           Jerami Grant
## 19     19           Caris LeVert
## 20     20            Will Barton
## 21     21            Will Barton
## 22     22            Will Barton
## 23     23         Christian Wood
## 24     24            Brook Lopez
## 25     25             Kyle Kuzma
## 26     26        Kelly Oubre Jr.
## 27     27        Josh Richardson
## 28     28        Josh Richardson
## 29     29        Josh Richardson
## 30     30          Dillon Brooks
## 31     31          Dwight Powell
## 32     32            Jae Crowder
## 33     33            Dario Šarić
## 34     34            Dario Šarić
## 35     35            Dario Šarić
## 36     36           Jakob Poeltl
## 37     37           Jakob Poeltl
## 38     38           Jakob Poeltl
## 39     39          Mason Plumlee
## 40     40          Mason Plumlee
## 41     41          Mason Plumlee
## 42     42             Seth Curry
## 43     43             Joe Ingles
## 44     44       Lonnie Walker IV
## 45     45         Hamidou Diallo
## 46     46          Kendrick Nunn
## 47     47          Kendrick Nunn
## 48     48          Kendrick Nunn
## 49     49            Cory Joseph
## 50     50           Torrey Craig
## 51     51              Ish Smith
## 52     52             Jeff Green
## 53     53        Justise Winslow
## 54     54          Terence Davis
## 55     55            George Hill
## 56     56            George Hill
## 57     57            George Hill
## 58     58               Alex Len
## 59     59          Georges Niang
## 60     60            Robin Lopez
## 61     61          Blake Griffin
## 62     62        Bismack Biyombo
## 63     63         Andre Iguodala
## 64     64          Udonis Haslem
## 65     65        Markieff Morris
## 66     66        Markieff Morris
## 67     67        Markieff Morris
## 68     68          Austin Rivers
## 69     69        Wesley Matthews
## 70     70         DeAndre Jordan
## 71     71             Taj Gibson
## 72     72        Dennis Schröder
## 73     73            T.J. Warren
## 74     74            T.J. Warren
## 75     75            T.J. Warren
## 76     76         JaMychal Green
## 77     77    Matthew Dellavedova
## 78     78             Trey Lyles
## 79     79         Udoka Azubuike
## 80     80         Frank Kaminsky
## 81     81         Frank Kaminsky
## 82     82         Frank Kaminsky
## 83     83              Raul Neto
## 84     84        Rodney McGruder
## 85     85           Jevon Carter
## 86     86       Dennis Smith Jr.
## 87     87             Damion Lee
## 88     88          Thomas Bryant
## 89     89          Thomas Bryant
## 90     90          Thomas Bryant
## 91     91            Danny Green
## 92     92            Danny Green
## 93     93            Danny Green
## 94     94         Svi Mykhailiuk
## 95     95         Svi Mykhailiuk
## 96     96         Svi Mykhailiuk
## 97     97          Aaron Holiday
## 98     98            Theo Pinson
## 99     99          Yuta Watanabe
## 100   100            Josh Okogie
## 101   101         Troy Brown Jr.
## 102   102           Drew Eubanks
## 103   103        Frank Ntilikina
## 104   104  Juan Toscano-Anderson
## 105   105  Juan Toscano-Anderson
## 106   106  Juan Toscano-Anderson
## 107   107 Thanasis Antetokounmpo
## 108   108          Moritz Wagner
## 109   109       Keita Bates-Diop
## 110   110           Gabe Vincent
## 111   111          Javonte Green
## 112   112              Max Strus
## 113   113           Shake Milton
## 114   114          Jaylen Nowell
## 115   115        Jalen McDaniels
## 116   116        Jalen McDaniels
## 117   117        Jalen McDaniels
## 118   118               Naz Reid
## 119   119          Chimezie Metu
## 120   120         Oshae Brissett
## 121   121         Wenyen Gabriel
## 122   122          James Johnson
## 123   123          Terrence Ross
## 124   124          Terrence Ross
## 125   125          Terrence Ross
## 126   126         Reggie Jackson
## 127   127         Reggie Jackson
## 128   128         Reggie Jackson
## 129   129           Gorgui Dieng
## 130   130         Dewayne Dedmon
## 131   131         Dewayne Dedmon
## 132   132         Dewayne Dedmon
## 133   133         Justin Holiday
## 134   134         Justin Holiday
## 135   135         Justin Holiday
## 136   136       Boban Marjanović
## 137   137       Patrick Beverley
## 138   138       Patrick Beverley
## 139   139       Patrick Beverley
## 140   140            Cody Zeller
## 141   141           Goran Dragić
## 142   142           Goran Dragić
## 143   143           Goran Dragić
## 144   144         Meyers Leonard
## 145   145             Louis King
## 146   146              Ty Jerome

Restricted

restic <- c( "Bruce Brown",
             "Jeff Green",
            "Coby White",
            "Jaxson Hayes",
            "Cam Reddish",
            "Cameron Johnson",
            "Romeo Langford",
            "Nickeil Alexander-Walker",
            "Matisse Thybulle",
            "P.J. Washington",
            "Grant Williams",
            "Darius Bazley",
            "Dylan Windler",
            "Omer Yurtseven",
            "Tre Jones",
            "Paul Reed",
            "Austin Reaves",
            "Ayo Dosunmu",
            "Dalano Banton",
            "Jock Landale",
            "Luka Garza",
            "Sandro Mamukelashvili",
            "Anthony Lamb",
            "David Duke Jr.",
            "Saben Lee",
            "Trevor Keels",
            "Lester Quinones",
            "Mfiondu Kabengele",
            "Jared Butler",
            "A.J. Green",
            "Trevor Hudgins",
            "Scotty Pippen Jr.",
            "Xavier Moon",
            "Julian Champagnie",
            "Mac McClung",
            "John Butler",
            "Matt Ryan",
            "JD Davison",
            "Ron Harper Jr.",
            "Jeff Dowtin",
            "Darius Days",
            "Jack White",
            "Olivier Sarr",
            "Orlando Robinson",
            "Neemias Queta",
            "Keon Ellis",
            "Jamal Cain",
            "Mamadi Diakite",
            "Buddy Boeheim",
            "Jared Rhoden",
            "Isaiah Mobley",
            "Terry Taylor",
            "Dru Smith",
            "Johnny Juzang",
            "Trent Forrest",
            "Théo Maledon",
            "McKinley Wright IV",
            "Gabe York",
            "Duane Washington Jr.",
            "Dominick Barlow",
            "Moussa Diabaté",
            "Jay Huff",
            "Kendall Brown") 

index_2 <- 1:63

rest <- cbind(index_2, restic) %>% 
  as.data.frame() %>%
  rename( "Player" = restic) 

rest$index_2 <- as.numeric(as.character(rest$index_2))


main_data2 <- left_join(rest, player_df) %>%
  subset( , select = -c( Pos, Tm, Ast2TO, index_2, Player))
res.dist1 <- get_dist(main_data2, stand = TRUE, method = "euclidean")

fviz_dist(res.dist1, gradient = list(low = "#00AFBB", mid = "white", high = "#FC4E07"), lab_size = 2)

fviz_nbclust(main_data2, kmeans, method = "wss")

km.res1 <- kmeans(main_data2, 6, nstart = 25)
rownames(main_data2) <- main_data2$Player

fviz_cluster(km.res1, main_data2, ellipse = TRUE, ellipse.alpha = .1,
             palette = "jco", repel = TRUE, ggtheme = theme_minimal(),
             main = FALSE, xlab = FALSE, ylab = FALSE,
             labelsize = 9, lwd=2)

res.hc1 <- hclust(res.dist1, method = "ward.D2")

fviz_dend(res.hc1, k = 8, cex = .3, horiz = TRUE, rect = TRUE,
          labelsize = 1, repel = TRUE, labels_track_height = 5,
          lwd = .2,
          main = "Cluster Dendogram for Restricted Free Agents",
          sub = "Bruce Brown is 1 and is in the blue cluster;
          Jeff Green is 2 ")

left_join(rest, player_df) %>%
  select(Player) %>%
  mutate(index = 1:85) %>%
  select(index, Player)
##    index                   Player
## 1      1              Bruce Brown
## 2      2               Jeff Green
## 3      3               Coby White
## 4      4             Jaxson Hayes
## 5      5              Cam Reddish
## 6      6              Cam Reddish
## 7      7              Cam Reddish
## 8      8          Cameron Johnson
## 9      9          Cameron Johnson
## 10    10          Cameron Johnson
## 11    11           Romeo Langford
## 12    12 Nickeil Alexander-Walker
## 13    13 Nickeil Alexander-Walker
## 14    14 Nickeil Alexander-Walker
## 15    15         Matisse Thybulle
## 16    16         Matisse Thybulle
## 17    17         Matisse Thybulle
## 18    18          P.J. Washington
## 19    19           Grant Williams
## 20    20            Darius Bazley
## 21    21            Darius Bazley
## 22    22            Darius Bazley
## 23    23            Dylan Windler
## 24    24           Omer Yurtseven
## 25    25                Tre Jones
## 26    26                Paul Reed
## 27    27            Austin Reaves
## 28    28              Ayo Dosunmu
## 29    29            Dalano Banton
## 30    30             Jock Landale
## 31    31               Luka Garza
## 32    32    Sandro Mamukelashvili
## 33    33    Sandro Mamukelashvili
## 34    34    Sandro Mamukelashvili
## 35    35             Anthony Lamb
## 36    36           David Duke Jr.
## 37    37                Saben Lee
## 38    38                Saben Lee
## 39    39                Saben Lee
## 40    40             Trevor Keels
## 41    41          Lester Quinones
## 42    42        Mfiondu Kabengele
## 43    43             Jared Butler
## 44    44               A.J. Green
## 45    45           Trevor Hudgins
## 46    46        Scotty Pippen Jr.
## 47    47              Xavier Moon
## 48    48        Julian Champagnie
## 49    49        Julian Champagnie
## 50    50        Julian Champagnie
## 51    51              Mac McClung
## 52    52              John Butler
## 53    53                Matt Ryan
## 54    54                Matt Ryan
## 55    55                Matt Ryan
## 56    56               JD Davison
## 57    57           Ron Harper Jr.
## 58    58              Jeff Dowtin
## 59    59              Darius Days
## 60    60               Jack White
## 61    61             Olivier Sarr
## 62    62         Orlando Robinson
## 63    63            Neemias Queta
## 64    64               Keon Ellis
## 65    65               Jamal Cain
## 66    66           Mamadi Diakite
## 67    67            Buddy Boeheim
## 68    68             Jared Rhoden
## 69    69            Isaiah Mobley
## 70    70             Terry Taylor
## 71    71             Terry Taylor
## 72    72             Terry Taylor
## 73    73                Dru Smith
## 74    74                Dru Smith
## 75    75                Dru Smith
## 76    76            Johnny Juzang
## 77    77            Trent Forrest
## 78    78             Théo Maledon
## 79    79       McKinley Wright IV
## 80    80                Gabe York
## 81    81     Duane Washington Jr.
## 82    82          Dominick Barlow
## 83    83           Moussa Diabaté
## 84    84                 Jay Huff
## 85    85            Kendall Brown

Options

opt <- c( "Bruce Brown",
          "Jeff Green",
  "Khris Middleton",
              "James Harden",
              "Kristaps Porziņģis",
              "Jordan Clarkson",
              "Josh Hart",
              "Talen Horton-Tucker",
              "Victor Oladipo",
              "Rudy Gay",
              "Donte DiVincenzo",
              "Andre Drummond",
              "Malik Beasley",
              "Derrick Rose",
              "Alec Burks",
              "Mike Muscala",
              "Lindy Waters III",
              "Kevin Knox",
              "Willy Hernangómez",
              "Nathan Knight",
              "Michael Carter-Williams",
              "Kessler Edwards",
              "Herbert Jones",
              "Xavier Tillman Sr.",
              "Kenyon Martin Jr.",
              "Isaiah Livers",
              "Lamar Stevens",
              "Miles McBride",
              "Goga Bitadze",
              "Naji Marshall",
              "Admiral Schofield",
              "Ish Wainright",
              "Eugene Omoruyi")

index_3 <- 1:33

opt2 <- cbind(index_3, opt) %>% 
  as.data.frame() %>%
  rename( "Player" = opt) 

opt2$index_3 <- as.numeric(as.character(opt2$index_3))


main_data3 <- left_join(opt2, player_df) %>%
  subset( , select = -c( Pos, Tm, Ast2TO, index_3, Player))
res.dist2 <- get_dist(main_data3, stand = TRUE, method = "euclidean")

fviz_dist(res.dist2, gradient = list(low = "#00AFBB", mid = "white", high = "#FC4E07"), lab_size = 2)

fviz_nbclust(main_data3, kmeans, method = "wss")

km.res2 <- kmeans(main_data3, 6, nstart = 25)
rownames(main_data3) <- main_data3$Player

fviz_cluster(km.res2, main_data3, ellipse = TRUE, ellipse.alpha = .1,
             palette = "jco", repel = TRUE, ggtheme = theme_minimal(),
             main = FALSE, xlab = FALSE, ylab = FALSE,
             labelsize = 9, lwd=2)

res.hc2 <- hclust(res.dist2, method = "ward.D2")

fviz_dend(res.hc2, k = 8, cex = .3, horiz = TRUE, rect = TRUE,
          labelsize = 1, repel = TRUE, labels_track_height = 5,
          lwd = .2,
          main = "Cluster Dendogram for Options",
          sub = "Bruce Brown is 1 and is in the blue cluster;
          Jeff Green is 2 ")

left_join(opt2, player_df) %>%
  select(Player) %>%
  mutate(index = 1:47) %>%
  select(index, Player)
##    index                  Player
## 1      1             Bruce Brown
## 2      2              Jeff Green
## 3      3         Khris Middleton
## 4      4            James Harden
## 5      5      Kristaps Porziņģis
## 6      6         Jordan Clarkson
## 7      7               Josh Hart
## 8      8               Josh Hart
## 9      9               Josh Hart
## 10    10     Talen Horton-Tucker
## 11    11          Victor Oladipo
## 12    12                Rudy Gay
## 13    13        Donte DiVincenzo
## 14    14          Andre Drummond
## 15    15           Malik Beasley
## 16    16           Malik Beasley
## 17    17           Malik Beasley
## 18    18            Derrick Rose
## 19    19              Alec Burks
## 20    20            Mike Muscala
## 21    21            Mike Muscala
## 22    22            Mike Muscala
## 23    23        Lindy Waters III
## 24    24              Kevin Knox
## 25    25              Kevin Knox
## 26    26              Kevin Knox
## 27    27       Willy Hernangómez
## 28    28           Nathan Knight
## 29    29 Michael Carter-Williams
## 30    30         Kessler Edwards
## 31    31         Kessler Edwards
## 32    32         Kessler Edwards
## 33    33           Herbert Jones
## 34    34      Xavier Tillman Sr.
## 35    35       Kenyon Martin Jr.
## 36    36           Isaiah Livers
## 37    37           Lamar Stevens
## 38    38           Miles McBride
## 39    39            Goga Bitadze
## 40    40            Goga Bitadze
## 41    41            Goga Bitadze
## 42    42           Naji Marshall
## 43    43       Admiral Schofield
## 44    44           Ish Wainright
## 45    45          Eugene Omoruyi
## 46    46          Eugene Omoruyi
## 47    47          Eugene Omoruyi