Introduction

As one of the most profitable sports, basketball has created superstars who has taken the game to unimaginable heights. Created in 1892 by Dr. James Naismith, the game of basketball is played all over the world from inner city playgrounds, billion dollar arenas and the Olympics. In 1946 the NBA (National Basketball Association) broke ground and 21 years later the defunct ABA (American Basketball Association) was established. In addition to the male dominated sport, the WNBA began in 1996. From these leagues hundreds of players became household names who have endorsed athletic wear, cars, soft drinks and even started music and acting careers.

In this two-part project I will look at data from all NBA/ABA players as well as my beloved New York Knicks. Firstly, I will look at which colleges have produced the most talent, conduct descriptive statistics on height and weight, identify which position is played most, and then run similar tests on players who’ve reached hall of fame status.

Secondly, I will look at my hometown New York Knicks. In what’s considered the mecca of basketball, the Knicks have only won 2 championships in their 72 seasons. Criticized as a chaotic organization, I will establish who were the franchises best players based a myriad of categories.

Data for this project was extracted and researched from www.basketball-reference.com and www.wikipedia.com

Load packages

The first step is to load the tidyverse and knitr packages into R.

library(tidyverse)
## Warning: package 'tidyverse' was built under R version 3.4.3
## -- Attaching packages ---------------------------------- tidyverse 1.2.1 --
## v ggplot2 2.2.1     v purrr   0.2.4
## v tibble  1.4.1     v dplyr   0.7.4
## v tidyr   0.7.2     v stringr 1.2.0
## v readr   1.1.1     v forcats 0.2.0
## Warning: package 'tibble' was built under R version 3.4.3
## Warning: package 'tidyr' was built under R version 3.4.3
## Warning: package 'readr' was built under R version 3.4.3
## Warning: package 'purrr' was built under R version 3.4.3
## Warning: package 'dplyr' was built under R version 3.4.2
## Warning: package 'forcats' was built under R version 3.4.3
## -- Conflicts ------------------------------------- tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
library(knitr)
library(kableExtra)
## Warning: package 'kableExtra' was built under R version 3.4.4
library(rvest)
## Warning: package 'rvest' was built under R version 3.4.2
## Loading required package: xml2
## Warning: package 'xml2' was built under R version 3.4.2
## 
## Attaching package: 'rvest'
## The following object is masked from 'package:purrr':
## 
##     pluck
## The following object is masked from 'package:readr':
## 
##     guess_encoding

Import NBA/ABA Player Data

Next, the players csv data will be uploaded into R via GitHub into a data set entitled nba, once uploaded we will run the glimpse function to look at the structure of the data.

#import data using read_csv from the readr package
nba <- read_csv("https://raw.githubusercontent.com/LilesB/DATA-607---Final-Project-/master/nba.csv")
## Parsed with column specification:
## cols(
##   Player = col_character(),
##   From = col_integer(),
##   To = col_integer(),
##   Pos = col_character(),
##   HtFeet = col_integer(),
##   HtInches = col_integer(),
##   Wt = col_integer(),
##   Birth_Date = col_character(),
##   Colleges = col_character()
## )
#glimpse
glimpse(nba)
## Observations: 4,580
## Variables: 9
## $ Player     <chr> "Alaa Abdelnaby", "Zaid Abdul-Aziz", "Kareem Abdul-...
## $ From       <int> 1991, 1969, 1970, 1991, 1998, 1997, 1977, 1957, 194...
## $ To         <int> 1995, 1978, 1989, 2001, 2003, 2008, 1981, 1957, 194...
## $ Pos        <chr> "F-C", "C-F", "C", "G", "F", "F", "F", "G", "F", "G...
## $ HtFeet     <int> 6, 6, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, ...
## $ HtInches   <int> 10, 9, 2, 1, 6, 9, 7, 3, 3, 6, 5, 0, 11, 6, 7, 9, 6...
## $ Wt         <int> 240, 235, 225, 162, 223, 225, 220, 180, 195, 190, 1...
## $ Birth_Date <chr> "06/24/1968", "04/07/1946", "04/16/1947", "03/09/19...
## $ Colleges   <chr> "Duke University", "Iowa State University", "Univer...

We have a data set that has 4,580 observations and 9 variables that are broken down as follows: * + Player - Name of the NBA/ABA player + From - First year in the league + To - Last year in the league + Pos - Position played + HtFeet - Player’s Height (Feet) + HtInches - Player’s Height (Inches) + Wt - Player’s weight + Birth_Date - Player’s date of birth + Colleges - College attended

Data Wrangling

First we will create a new field entitled YrsActive using the mutate function which will calculate how many years each player remained active in the league. Secondly, we will create an all encompassing variable named Height which will multiply HtFeet by 12 and then add the HtInches data. Lastly, we will separate the Birth_Date column by month, day, and year using the separate function.

#use mutate from the dplyr package to create new calculated fields 
#adding a day to the calculation includes all years active

#use separate from the tidyr package to create month, day, and year variales

#use select from the dplyr package to rearrange and drop columns

nba <- nba %>%
    mutate(YrsActive = To - From + 1) %>%
    mutate(Height = (HtFeet * 12) + (HtInches)) %>%
    separate(Birth_Date, c("Birth_Month","Birth_Day","Birth_Year")) %>%
    select(Player,From,To,YrsActive,Pos,Height,Wt,
           Birth_Month,Birth_Day,Birth_Year,Colleges)

View the contents of the nba data set using the head function

head(nba)
## # A tibble: 6 x 11
##   Player   From    To YrsAc~ Pos   Height    Wt Birt~ Birt~ Birt~ Colleges
##   <chr>   <int> <int>  <dbl> <chr>  <dbl> <int> <chr> <chr> <chr> <chr>   
## 1 Alaa A~  1991  1995   5.00 F-C     82.0   240 06    24    1968  Duke Un~
## 2 Zaid A~  1969  1978  10.0  C-F     81.0   235 04    07    1946  Iowa St~
## 3 Kareem~  1970  1989  20.0  C       86.0   225 04    16    1947  Univers~
## 4 Mahmou~  1991  2001  11.0  G       73.0   162 03    09    1969  Louisia~
## 5 Tariq ~  1998  2003   6.00 F       78.0   223 11    03    1974  Univers~
## 6 Sharee~  1997  2008  12.0  F       81.0   225 12    11    1976  Univers~

Before we begin wrangling the data, the next step is to run a summary on all of the variables; running a summary provides programmers with a snap shot the data.

summary(nba)
##     Player               From            To         YrsActive     
##  Length:4580        Min.   :1947   Min.   :1947   Min.   : 1.000  
##  Class :character   1st Qu.:1969   1st Qu.:1973   1st Qu.: 1.000  
##  Mode  :character   Median :1987   Median :1992   Median : 4.000  
##                     Mean   :1985   Mean   :1989   Mean   : 5.188  
##                     3rd Qu.:2004   3rd Qu.:2009   3rd Qu.: 8.000  
##                     Max.   :2018   Max.   :2018   Max.   :23.000  
##                     NA's   :85     NA's   :85     NA's   :85      
##      Pos                Height            Wt        Birth_Month       
##  Length:4580        Min.   :63.00   Min.   :114.0   Length:4580       
##  Class :character   1st Qu.:75.00   1st Qu.:190.0   Class :character  
##  Mode  :character   Median :78.00   Median :209.0   Mode  :character  
##                     Mean   :78.01   Mean   :208.8                     
##                     3rd Qu.:81.00   3rd Qu.:225.0                     
##                     Max.   :91.00   Max.   :360.0                     
##                     NA's   :86      NA's   :91                        
##   Birth_Day          Birth_Year          Colleges        
##  Length:4580        Length:4580        Length:4580       
##  Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character  
##                                                          
##                                                          
##                                                          
## 

Based on the summary findings we see which variables are numeric or character plus those have been assigned NAs; this information is pertinent when running certain code.

All Encompassing Descriptives

Yrs Active

With it being difficult to etch out a spot in professional sports as well as have a fruitful career, we will look at the YrsActive variable to identify the IRON MEN of the league.

nba %>% 
    filter(!is.na(YrsActive)) %>% #does not factor data with NA
    summarise(mean = mean(YrsActive),
              median = median(YrsActive),
              max = max(YrsActive),
              sd = sd(YrsActive)) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
mean median max sd
5.187987 4 23 4.491404

Based on the data we see that the career of a basketball player is fairly short with an average of 5.2 and a median of 4. In addition there is an outlier of 23 years. Next we will look at the Yrs Active in the league closer by utlizing the count & arrange features.

Next we will create a lists similar to sports networks like ESPN to identify the players with careers that spanned 20 years or more.

nba %>% filter(YrsActive >= 20) %>%
  arrange(desc(YrsActive)) %>%
  select(Player,From,To,YrsActive,Pos) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
Player From To YrsActive Pos
Kevin Willis 1985 2007 23 F-C
Kevin Garnett 1996 2016 21 F-C
Moses Malone* 1975 1995 21 C-F
Robert Parish* 1977 1997 21 C
Kareem Abdul-Jabbar* 1970 1989 20 C
Kobe Bryant 1997 2016 20 G-F
Vince Carter 1999 2018 20 G-F
Bob Cousy* 1951 1970 20 G
Dirk Nowitzki 1999 2018 20 F

Based on the data we find that only 9 players had a career that spanned 20 years or more. Journeyman Kevin Willis, who played 23 years, is dubbed the NBA/ABA “Iron Man”.

With majority of these players “big men” let’s see if being a big man in the league constitutes a longer career.

ggplot(data = nba) +
    geom_point(mapping = aes(x = Height, y = YrsActive), color = "blue")
## Warning: Removed 86 rows containing missing values (geom_point).

Based on the scatterplot we see that being the tallest in the league constitute a fruitful career; the same can be said for players less than 70 inches (6 feet tall).

Positions

In the 1970s and 80s the NBA was considered a big man league. Currently analysts and pundits say it is now the era of the guard. Next we will view the makeup of the league based on position.

nba %>% 
    filter(!is.na(Pos)) %>%
    group_by(Pos) %>%
    summarise(n = n()) %>%
    mutate(Freq = n/sum(n)) %>%
    arrange(desc(Freq)) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
Pos n Freq
G 1570 0.3493547
F 1271 0.2828215
C 490 0.1090343
F-C 382 0.0850022
G-F 354 0.0787717
F-G 215 0.0478416
C-F 212 0.0471740

Based on the analysis we see that over 1,500 players (34.93%) play the guard position followed by 1,271 at forward (28.28%) and then 490 at center (10.90%); the remaining were considered combo players.

Height

When the Atlanta Hawks Spud Webb won the slam dunk contest in 1986, many weren’t thrilled the dunk itself…it was because Spud stood at only 5-foot-7. Next we will take a look at the height of NBA players.

nba %>% 
    filter(!is.na(Height)) %>% 
    summarise(mean = mean(Height),
              median = median(Height),
              min = min(Height),
              max = max(Height),
              sd = sd(Height)) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
mean median min max sd
78.00979 78 63 91 3.636119

The average and median height of an NBA player is 78 inches (6ft 5in), while the shortest player in the history of the game is 63 inches and the tallest player being 91 inches. Next we will target these heights to identify these “Freaks of the League”.

#create a vector named target that will host the values
target <- c(63,91)
nba %>% filter(Height %in% target) %>%
    arrange(desc(YrsActive)) %>%
    select(Player,YrsActive,Pos,Height) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
Player YrsActive Pos Height
Muggsy Bogues 14 G 63
Manute Bol 10 C 91
Gheorghe Muresan 7 C 91
Penny Early 1 G 63

Muggsy Bogues and Penny Early deviated from the norm as being the shortest players of all time standing at 63 inches, in addition, Bogues played for a remarkable 14 years. Manute Bol and Gheorghe Muresan were the tallest ever standing at 91 inches; both had careers than spanned longer than the average, 10 and 7 years respectively.

Weight

With the average height of an NBA/ABA athelete being 6ft 5in it would be interesting to view the average weight. Accoring to www.disabled-world.com the proper weight-to-height ratio would be between 187-229lbs for someone at that height.

nba %>% 
    filter(!is.na(Wt)) %>% 
    summarise(mean = mean(Wt),
              median = median(Wt),
              min = min(Wt),
              max = max(Wt),
              sd = sd(Wt)) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
mean median min max sd
208.7694 209 114 360 26.12977

Again the mean and median are nearly identical while the minimum and maximum weights are considered outliers. The next step will be to create a scatterplot with the height and weight variables.

ggplot(data = nba) +
    geom_point(mapping = aes(x = Wt, y = Height), color = "blue")
## Warning: Removed 91 rows containing missing values (geom_point).

For the most part, the make up of the league follows the average height and weight. In addition, we see that the outliers follow the common knowledge; shorter players weigh less while the tallest players weigh more.

Next, let’s identify the extreme outliers in the weight class of the NBA/ABA.

target <- c(114,360)
nba %>% filter(Wt %in% target) %>%
    arrange(desc(YrsActive)) %>%
    select(Player,YrsActive,Pos,Wt) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
Player YrsActive Pos Wt
Sim Bhullar 1 C 360
Penny Early 1 G 114

Falling in line with how most outliers are viewed, each player only spent 1 year in the profession. What we also see is the name Penny Early who was also one of the shortest players, Early stood a little over 5 feet and weighed a paltry 114 pounds. Sim Bhullar was the heaviest athlete, weighing in at 360 pounds.

Month

For kicks it would be interesting to see which month on the calendar produced the most basketball talent…hoping for my birth month of July!

nba %>% 
    filter(!is.na(Birth_Month)) %>%
    group_by(Birth_Month) %>%
    summarise(n = n()) %>%
    mutate(Freq = n/sum(n)) %>%
    arrange(desc(Freq)) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
Birth_Month n Freq
07 416 0.0931274
03 395 0.0884262
09 394 0.0882024
10 391 0.0875308
01 377 0.0843967
02 377 0.0843967
08 366 0.0819342
05 362 0.0810387
06 362 0.0810387
11 357 0.0799194
12 345 0.0772330
04 325 0.0727558

Sharing my birth month as I hoped, the month of July has produced the most NBA/ABA players followed closely by March, September, and October.

Colleges

During the month of March, former students and fans of college basketball create brackets surrounding the annual tournament. 64 teams play opponents across the country in order to snip the net at the national champtionship. Our next analysis will look at which college/university has produced the most NBA/ABA talent.

nba %>% 
    filter(!is.na(Colleges)) %>%
    count(Colleges, sort = TRUE) %>%
    filter(n >=40) %>%
    mutate(Colleges = reorder(Colleges,n)) %>%
    ggplot(aes(Colleges,n)) +
    geom_col(fill = "blue") +
    geom_text(aes(label = n), hjust=1.6,color="white", size=3.5)+
    xlab(NULL) +
    coord_flip()

As we can see the University of Kentucky has produced 95 players to the NBA/ABA based on the data set leading the pack with Duke following with 86.

Hall of Famers

Located in Springfield, Massachusetts, the NBA Hall of Fame is where all aspiring basketball players hope to be enshrined. We will now extract the hall of fame athletes using the subset ,grepl, and dim functions from the base package into the hof data set.

hof <- subset(nba, grepl("\\*",nba$Player))
dim(hof)
## [1] 129  11

The hall of fame data set has 129 observations compared to the original NBA/ABA players data set which has 4,580 observations. Based on research, the amount of players is only a third of the entries. Others are coaches, referees and other affiliates. Let’s take a quick look to see the percentage of players inducted in the hall of fame.

(129/4580) *100
## [1] 2.816594

Astonishgly only 2.8% of the players population has been inducted in the hall of fame.

As in the previous analysis, let’s take an in-depth look at the players inducted into the hall of fame.

Hall of Famers - Yrs Active

Earlier we saw that 4 out of the 9 players (44%) that had 20 years or more were hall of famers. Let’s take a look at the rest of the players in this elite class and this time we will include the minimum statistic.

hof %>% 
    filter(!is.na(YrsActive)) %>% 
    summarise(mean = mean(YrsActive),
              median = median(YrsActive),
              min = min(YrsActive),
              max = max(YrsActive),
              sd = sd(YrsActive)) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
mean median min max sd
12.14961 13 2 21 3.889503

The average career of a hall of famer is 12 years while the minimum years active is 2 years while the maximum is 21 years. First, let’s identify the outliers.

target <- c(2,21)
hof %>% filter(YrsActive %in% target) %>%
    arrange(desc(YrsActive)) %>%
    select(-Birth_Month,-Birth_Day,-Birth_Year) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
Player From To YrsActive Pos Height Wt Colleges
Moses Malone* 1975 1995 21 C-F 82 215 NA
Robert Parish* 1977 1997 21 C 84 230 Centenary College of Louisiana
John Thompson* 1965 1966 2 F 82 225 Providence College

For what may seem strange initially, John Thompson was inducted in the hall of fame mostly because of his stint as the coach of the Georgetown Hoyas for 27 years. Thompson’s also had a career in the league as a player was with the Boston Celtics, where he actually won 2 championships in 1965 and 1966.

Next, we will conduct a count on hall of famers to identify those who gave 12+ years to the game; equal to and above the mean.

hof %>% 
    filter (YrsActive >= 12) %>%
    arrange(desc(YrsActive)) %>%
    select(-Birth_Day,-Birth_Month,-Birth_Year) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
Player From To YrsActive Pos Height Wt Colleges
Moses Malone* 1975 1995 21 C-F 82 215 NA
Robert Parish* 1977 1997 21 C 84 230 Centenary College of Louisiana
Kareem Abdul-Jabbar* 1970 1989 20 C 86 225 University of California, Los Angeles
Bob Cousy* 1951 1970 20 G 73 175 College of the Holy Cross
Michael Jordan* 1985 2003 19 G-F 78 195 University of North Carolina
Karl Malone* 1986 2004 19 F 81 250 Louisiana Tech University
John Stockton* 1985 2003 19 G 73 170 Gonzaga University
Reggie Miller* 1988 2005 18 G-F 79 185 University of California, Los Angeles
Dikembe Mutombo* 1992 2009 18 C 86 245 Georgetown University
Patrick Ewing* 1986 2002 17 C-F 84 240 Georgetown University
Artis Gilmore* 1972 1988 17 C 86 240 Gardner-Webb University, Jacksonville University
Magic Johnson* 1980 1996 17 G-F 81 215 Michigan State University
Gary Payton* 1991 2007 17 G 76 180 Oregon State University
Scottie Pippen* 1988 2004 17 F-G 80 210 University of Central Arkansas
Charles Barkley* 1985 2000 16 F 78 252 Auburn University
Julius Erving* 1972 1987 16 F-G 79 210 University of Massachusetts Amherst
John Havlicek* 1963 1978 16 F-G 77 203 Ohio State University
Elvin Hayes* 1969 1984 16 F-C 81 235 University of Houston
Bernard King* 1978 1993 16 F 79 205 University of Tennessee
Alonzo Mourning* 1993 2008 16 C 82 240 Georgetown University
Chris Mullin* 1986 2001 16 F-G 78 200 St. John’s University
Rick Barry* 1966 1980 15 F 79 205 University of Miami
Adrian Dantley* 1977 1991 15 F-G 77 208 University of Notre Dame
Clyde Drexler* 1984 1998 15 G 79 210 University of Houston
Alex English* 1977 1991 15 F 79 190 University of South Carolina
Hal Greer* 1959 1973 15 G-F 74 175 Marshall University
Dan Issel* 1971 1985 15 C-F 81 235 University of Kentucky
Tracy McGrady* 1998 2012 15 F-G 80 210 NA
Dolph Schayes* 1950 1964 15 F-C 80 220 New York University
Lenny Wilkens* 1961 1975 15 G 73 180 Providence College
Tiny Archibald* 1971 1984 14 G 73 150 University of Texas at El Paso
Elgin Baylor* 1959 1972 14 F 77 225 Albertson College of Idaho, Seattle University
Walt Bellamy* 1962 1975 14 C 83 225 Indiana University
Wilt Chamberlain* 1960 1973 14 C 85 275 University of Kansas
Joe Dumars* 1986 1999 14 G 75 190 McNeese State University
George Gervin* 1973 1986 14 G-F 79 180 Eastern Michigan University
Gail Goodrich* 1966 1979 14 G 73 170 University of California, Los Angeles
Richie Guerin* 1957 1970 14 G 76 195 Iona College
Cliff Hagan* 1957 1970 14 F-G 76 210 University of Kentucky
Spencer Haywood* 1970 1983 14 F-C 80 225 University of Detroit Mercy
Allen Iverson* 1997 2010 14 G 72 165 Georgetown University
Dennis Johnson* 1977 1990 14 G 76 185 Pepperdine University
Bob Lanier* 1971 1984 14 C 83 250 St. Bonaventure University
Bob McAdoo* 1973 1986 14 C-F 81 210 University of North Carolina
Don Nelson* 1963 1976 14 F 78 210 University of Iowa
Mitch Richmond* 1989 2002 14 G 77 215 Kansas State University
Oscar Robertson* 1961 1974 14 G-F 77 205 University of Cincinnati
David Robinson* 1990 2003 14 C 85 235 United States Naval Academy
Dennis Rodman* 1987 2000 14 F 79 210 Southeastern Oklahoma State Uni
Nate Thurmond* 1964 1977 14 C-F 83 225 Bowling Green State University
Jerry West* 1961 1974 14 G 74 175 West Virginia University
Zelmo Beaty* 1963 1975 13 C 81 225 Prairie View A&M University
Larry Bird* 1980 1992 13 F 81 220 Indiana State University
Dave Cowens* 1971 1983 13 C-F 81 230 Florida State University
Walt Frazier* 1968 1980 13 G 76 200 Southern Illinois University
Phil Jackson* 1968 1980 13 F-C 80 220 University of North Dakota
Kevin McHale* 1981 1993 13 F-C 82 210 University of Minnesota
Earl Monroe* 1968 1980 13 G 75 185 Winston-Salem State University
Calvin Murphy* 1971 1983 13 G 69 165 Niagara University
Bill Russell* 1957 1969 13 C 82 215 University of San Francisco
Tom Sanders* 1961 1973 13 F 78 210 New York University
Isiah Thomas* 1982 1994 13 G 73 180 Indiana University
Wes Unseld* 1969 1981 13 C-F 79 245 University of Louisville
Chet Walker* 1963 1975 13 F-G 78 212 Bradley University
Bill Walton* 1975 1987 13 C-F 83 210 University of California, Los Angeles
Paul Arizin* 1951 1962 12 F-G 76 190 Villanova University
Dave Bing* 1967 1978 12 G 75 180 Syracuse University
Louie Dampier* 1968 1979 12 G 72 170 University of Kentucky
Dave DeBusschere* 1963 1974 12 F-G 78 220 University of Detroit Mercy
Bailey Howell* 1960 1971 12 F 79 210 Mississippi State University
Sam Jones* 1958 1969 12 G-F 76 198 North Carolina Central University
Guy Rodgers* 1959 1970 12 G 72 185 Temple University
Jo Jo White* 1970 1981 12 G 75 190 University of Kansas
Jamaal Wilkes* 1975 1986 12 F-G 78 190 University of California, Los Angeles
James Worthy* 1983 1994 12 F 81 225 University of North Carolina

Hall of Famers - Position

Next, we will take a look at what position on the court has generated the most hall of famers.

hof %>% 
    filter(!is.na(Pos)) %>%
    group_by(Pos) %>%
    summarise(n = n()) %>%
    mutate(Freq = n/sum(n)) %>%
    arrange(desc(Freq)) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
Pos n Freq
G 32 0.2519685
F-C 20 0.1574803
C 16 0.1259843
C-F 16 0.1259843
F-G 16 0.1259843
G-F 14 0.1102362
F 13 0.1023622

Based on the data, we find that there is a difference between the players enshrined into the hall of fame based on their position. Guards remain in the same spot, while the combo F-C positon comes in second; only 13 forwards entered the hall of fame while they were second overall.

Hall of Famers - Height/Weight

Since we found a shift in the makeup for the position variable, let’s see if the physical makeup of 6ft 5 and 208 pounds changes for hall of fame players.

hof %>% 
    filter(!is.na(Height)) %>% 
    summarise(mean = mean(Height),
              median = median(Height),
              min = min(Height),
              max = max(Height),
              sd = sd(Height)) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
mean median min max sd
78.12598 78 69 90 4.009893
hof %>% 
    filter(!is.na(Wt)) %>% 
    summarise(mean = mean(Wt),
              median = median(Wt),
              min = min(Wt),
              max = max(Wt),
              sd = sd(Wt)) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
mean median min max sd
207.1732 210 150 310 25.78578

For the most part the physical makeup of hall of famers are consistent with the rest of the league.

Hall of Famers - Birth Month

After receiving validation for my birth month of July, let’s see if the month of the ruby has the same luck in the hall of fame.

hof %>% 
    filter(!is.na(Birth_Month)) %>%
    group_by(Birth_Month) %>%
    summarise(n = n()) %>%
    mutate(Freq = n/sum(n)) %>%
    arrange(desc(Freq)) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
Birth_Month n Freq
09 15 0.1181102
03 13 0.1023622
05 13 0.1023622
07 13 0.1023622
06 12 0.0944882
10 11 0.0866142
02 10 0.0787402
08 10 0.0787402
04 9 0.0708661
11 9 0.0708661
12 7 0.0551181
01 5 0.0393701

It seems the month of September gave birth to the most hall of famer with 19, followed by March, May, and Jult with 13.

Hall of Famers - Colleges

Lastly, we will see which college produced the most hall of fame talent.

hof %>% 
    filter(!is.na(Colleges)) %>%
    count(Colleges, sort = TRUE) %>%
    filter(n >=2) %>%
    mutate(Colleges = reorder(Colleges,n)) %>%
    ggplot(aes(Colleges,n)) +
    geom_col(fill = "blue") +
    geom_text(aes(label = n), hjust=1.6,color="white", size=3.5)+
    xlab(NULL) +
    coord_flip()

UCLA produced 6 NBA/ABA hall of famers based on our data, let’s identify the talented 6.

hof %>%
    filter(Colleges =="University of California, Los Angeles") %>%
    select(-Birth_Month, -Birth_Day,-Birth_Year,-Colleges) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
Player From To YrsActive Pos Height Wt
Kareem Abdul-Jabbar* 1970 1989 20 C 86 225
Don Barksdale* 1952 1955 4 F-C 78 200
Gail Goodrich* 1966 1979 14 G 73 170
Reggie Miller* 1988 2005 18 G-F 79 185
Bill Walton* 1975 1987 13 C-F 83 210
Jamaal Wilkes* 1975 1986 12 F-G 78 190

Conclusion

After careful inspection I noticed that the database from www.basket-reference.com was not up to date for all hall of famers. However, it seems 90% accurate and up to date. It was interesting to see the average height and weight of each player as well as the college information.

Based on the data, it’s clear that the average basketball player stands at 6ft 5inches and weighs 208 pounds. In addition, the guard position is the most sought after position in the sport. The big name universities are at the top of their class for recruitment and the average span in this sport is 5 years.

Next we will explore the New York Knicks.

New York Knicks

The New York Knicks have become one of the biggest disappointments in the NBA. In 72 seasons the team has 42 playoff appearances (58.3%) but only mustered 2 championships (2.7%); with the last title occurring 45 years ago. Located in basketball’s mecca, the Knicks are the most profitable team in sports with the worst track record. My goal is to analyze the 480 players who have belonged to this organization and see who were the top Knicks and see which decade had the best talent.

Scrape the Knicks Data

Next we will utilize the read_html function to read the web page that stores the data.

#name the file to store the data knicks_url
knicks_url <- 'https://www.basketball-reference.com/teams/NYK/players.html'

webpage <- read_html(knicks_url)

The data was successfully scraped, we will now convert the data into a dataframe using html_nodes and html_table

knicks_table <- html_nodes(webpage, 'table')
knicks <- html_table(knicks_table)[[1]]

In order to make sure the data is up to standard we will look at the data using the View feature

View(knicks)

Clean Up

For the most part the data looks presentable, but there are a few things that can be removed.

First we see the column names are in the second row of data and we can verify this by using the colnames feature.

colnames(knicks)
##  [1] ""         ""         ""         ""         ""         "Totals"  
##  [7] "Totals"   "Totals"   "Totals"   "Totals"   "Totals"   "Totals"  
## [13] "Totals"   "Totals"   "Totals"   "Totals"   "Totals"   "Totals"  
## [19] "Totals"   "Totals"   "Totals"   "Shooting" "Shooting" "Shooting"
## [25] "Per Game" "Per Game" "Per Game" "Per Game"

We will fix this issue by renaming the columns of the knicks data set using the names function

names(knicks) <- c("Rk","Player","From","To","Yrs","G","MP",
             "FG","FGA","THREE_P","THREE_PA","FT","FTA",
             "ORB","TRB","AST","STL","BLK","TOV","PF","PTS",
             "FG_PER","THREE_PER","FT_PER","MPPG","PPG","TRPG",
             "APG")

In addition to renaming the columns there were breaks in the data that kept the previous column headers, the following code omits all data in column G that has Totals and G to be removed from the data set.

knicks <- knicks[!(knicks$G=="Totals" | knicks$G=="G"), ]

Next, using the glimpse function we will see how our data set is looking

glimpse(knicks)
## Observations: 480
## Variables: 28
## $ Rk        <chr> "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "...
## $ Player    <chr> "Don Ackerman", "Quincy Acy", "Arron Afflalo", "Henr...
## $ From      <chr> "1954", "2015", "2016", "1967", "2014", "2015", "196...
## $ To        <chr> "1954", "2015", "2016", "1967", "2015", "2016", "196...
## $ Yrs       <chr> "1", "1", "1", "1", "2", "2", "1", "2", "4", "1", "1...
## $ G         <chr> "28", "68", "71", "50", "107", "70", "33", "27", "24...
## $ MP        <chr> "220", "1287", "2371", "453", "1306", "1062", "373",...
## $ FG        <chr> "14", "152", "354", "83", "177", "124", "55", "12", ...
## $ FGA       <chr> "63", "331", "799", "230", "362", "296", "143", "35"...
## $ THREE_P   <chr> "", "18", "91", "", "0", "0", "", "2", "127", "5", "...
## $ THREE_PA  <chr> "", "60", "238", "", "0", "1", "", "2", "410", "25",...
## $ FT        <chr> "15", "76", "110", "26", "76", "52", "23", "16", "33...
## $ FTA       <chr> "28", "97", "131", "37", "94", "109", "42", "27", "4...
## $ ORB       <chr> "", "79", "23", "", "138", "112", "", "12", "175", "...
## $ TRB       <chr> "15", "301", "266", "120", "467", "297", "69", "31",...
## $ AST       <chr> "23", "68", "144", "25", "89", "77", "29", "5", "285...
## $ STL       <chr> "", "27", "25", "", "45", "27", "", "3", "189", "17"...
## $ BLK       <chr> "", "22", "10", "", "95", "59", "", "2", "52", "8", ...
## $ TOV       <chr> "", "60", "82", "", "77", "72", "", "7", "330", "24"...
## $ PF        <chr> "43", "147", "142", "82", "162", "159", "32", "23", ...
## $ PTS       <chr> "43", "398", "909", "192", "430", "300", "133", "42"...
## $ FG_PER    <chr> ".222", ".459", ".443", ".361", ".489", ".419", ".38...
## $ THREE_PER <chr> "", ".300", ".382", "", "", ".000", "", "1.000", ".3...
## $ FT_PER    <chr> ".536", ".784", ".840", ".703", ".809", ".477", ".54...
## $ MPPG      <chr> "7.9", "18.9", "33.4", "9.1", "12.2", "15.2", "11.3"...
## $ PPG       <chr> "1.5", "5.9", "12.8", "3.8", "4.0", "4.3", "4.0", "1...
## $ TRPG      <chr> "0.5", "4.4", "3.7", "2.4", "4.4", "4.2", "2.1", "1....
## $ APG       <chr> "0.8", "1.0", "2.0", "0.5", "0.8", "1.1", "0.9", "0....

Our data matches the number of players with 480 observations and 28 variables, but the majority of the fields are character. In our next step we utilize the sapply function to convert columns 3 through 28 to numeric and then re-run the glimpse function

knicks[, c(3:28)] <- sapply(knicks[, c(3:28)], as.numeric)
glimpse(knicks)
## Observations: 480
## Variables: 28
## $ Rk        <chr> "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "...
## $ Player    <chr> "Don Ackerman", "Quincy Acy", "Arron Afflalo", "Henr...
## $ From      <dbl> 1954, 2015, 2016, 1967, 2014, 2015, 1960, 1993, 2002...
## $ To        <dbl> 1954, 2015, 2016, 1967, 2015, 2016, 1960, 1994, 2005...
## $ Yrs       <dbl> 1, 1, 1, 1, 2, 2, 1, 2, 4, 1, 1, 1, 7, 4, 2, 1, 4, 2...
## $ G         <dbl> 28, 68, 71, 50, 107, 70, 33, 27, 245, 27, 1, 2, 412,...
## $ MP        <dbl> 220, 1287, 2371, 453, 1306, 1062, 373, 83, 5321, 496...
## $ FG        <dbl> 14, 152, 354, 83, 177, 124, 55, 12, 635, 56, 0, 3, 3...
## $ FGA       <dbl> 63, 331, 799, 230, 362, 296, 143, 35, 1476, 133, 4, ...
## $ THREE_P   <dbl> NA, 18, 91, NA, 0, 0, NA, 2, 127, 5, NA, 0, 762, 116...
## $ THREE_PA  <dbl> NA, 60, 238, NA, 0, 1, NA, 2, 410, 25, NA, 1, 2067, ...
## $ FT        <dbl> 15, 76, 110, 26, 76, 52, 23, 16, 336, 19, 3, 0, 2170...
## $ FTA       <dbl> 28, 97, 131, 37, 94, 109, 42, 27, 458, 31, 4, 0, 261...
## $ ORB       <dbl> NA, 79, 23, NA, 138, 112, NA, 12, 175, 13, NA, 0, 64...
## $ TRB       <dbl> 15, 301, 266, 120, 467, 297, 69, 31, 726, 60, 2, 1, ...
## $ AST       <dbl> 23, 68, 144, 25, 89, 77, 29, 5, 285, 48, 0, 0, 1328,...
## $ STL       <dbl> NA, 27, 25, NA, 45, 27, NA, 3, 189, 17, NA, 0, 396, ...
## $ BLK       <dbl> NA, 22, 10, NA, 95, 59, NA, 2, 52, 8, NA, 0, 211, 41...
## $ TOV       <dbl> NA, 60, 82, NA, 77, 72, NA, 7, 330, 24, NA, 0, 999, ...
## $ PF        <dbl> 43, 147, 142, 82, 162, 159, 32, 23, 495, 59, 0, 2, 1...
## $ PTS       <dbl> 43, 398, 909, 192, 430, 300, 133, 42, 1733, 136, 3, ...
## $ FG_PER    <dbl> 0.222, 0.459, 0.443, 0.361, 0.489, 0.419, 0.385, 0.3...
## $ THREE_PER <dbl> NA, 0.300, 0.382, NA, NA, 0.000, NA, 1.000, 0.310, 0...
## $ FT_PER    <dbl> 0.536, 0.784, 0.840, 0.703, 0.809, 0.477, 0.548, 0.5...
## $ MPPG      <dbl> 7.9, 18.9, 33.4, 9.1, 12.2, 15.2, 11.3, 3.1, 21.7, 1...
## $ PPG       <dbl> 1.5, 5.9, 12.8, 3.8, 4.0, 4.3, 4.0, 1.6, 7.1, 5.0, 3...
## $ TRPG      <dbl> 0.5, 4.4, 3.7, 2.4, 4.4, 4.2, 2.1, 1.1, 3.0, 2.2, 2....
## $ APG       <dbl> 0.8, 1.0, 2.0, 0.5, 0.8, 1.1, 0.9, 0.2, 1.2, 1.8, 0....

Finally, we will remove the Rk column from the data set since it doesn’t have any significance.

knicks$Rk <- NULL
head(knicks)
##          Player From   To Yrs   G   MP  FG FGA THREE_P THREE_PA  FT FTA
## 2  Don Ackerman 1954 1954   1  28  220  14  63      NA       NA  15  28
## 3    Quincy Acy 2015 2015   1  68 1287 152 331      18       60  76  97
## 4 Arron Afflalo 2016 2016   1  71 2371 354 799      91      238 110 131
## 5    Henry Akin 1967 1967   1  50  453  83 230      NA       NA  26  37
## 6  Cole Aldrich 2014 2015   2 107 1306 177 362       0        0  76  94
## 7  Lou Amundson 2015 2016   2  70 1062 124 296       0        1  52 109
##   ORB TRB AST STL BLK TOV  PF PTS FG_PER THREE_PER FT_PER MPPG  PPG TRPG
## 2  NA  15  23  NA  NA  NA  43  43  0.222        NA  0.536  7.9  1.5  0.5
## 3  79 301  68  27  22  60 147 398  0.459     0.300  0.784 18.9  5.9  4.4
## 4  23 266 144  25  10  82 142 909  0.443     0.382  0.840 33.4 12.8  3.7
## 5  NA 120  25  NA  NA  NA  82 192  0.361        NA  0.703  9.1  3.8  2.4
## 6 138 467  89  45  95  77 162 430  0.489        NA  0.809 12.2  4.0  4.4
## 7 112 297  77  27  59  72 159 300  0.419     0.000  0.477 15.2  4.3  4.2
##   APG
## 2 0.8
## 3 1.0
## 4 2.0
## 5 0.5
## 6 0.8
## 7 1.1

Explanation of Variables

For those who are new to the sport of basketball we will take an in-depth look at what each variable is:

Analysis

Overall Stats

In this analysis we will look at who is considered the best and worst Knick in all fields. We will keep track of who is the top Knicks by creating a data frame where we will give each player a score similar to those in the Olympics (i.e. Gold = 5, Silver = 3, and Bronze = 1)

Years with the Organization

Based on player research Dirk Nowitzki has remained with one franchise the longest. His tenure with the Dallas Mavericks is 21 years and counting. Next, we will see which player remained with the Knicks the longest; this data will not be tracked but it’s good to know who is the Knicks “Iron Man”.

knicks %>% 
    filter(!is.na(Yrs)) %>% 
    summarise(mean = mean(Yrs),
              median = median(Yrs),
              max = max(Yrs),
              sd = sd(Yrs)) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
mean median max sd
2.320833 1 15 2.037535

The average length a player remained with the Knicks is 2 years with median of 1. The longest a player has remained with the New York Knicks is 15 years which is 6 years shy of the record held by Nowitzki. Next, we will identify that player as well as highlight which players have remained with the organization at least a decade.

knicks %>% filter(Yrs >= 10) %>%
  arrange(desc(Yrs)) %>%
  select(Player,From,To,Yrs) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
Player From To Yrs
Patrick Ewing 1986 2000 15
Carl Braun 1948 1961 12
Bill Bradley 1968 1977 10
Walt Frazier 1968 1977 10
Phil Jackson 1968 1978 10
Charles Oakley 1989 1998 10
Willis Reed 1965 1974 10
Charlie Ward 1995 2004 10

Based on the data, we surprinsingly found that only 8 Knicks have remained with the team for 10 years or more, while the Knicks ironman is none other than their 1985 first round draft pick Patrick Ewing

Games Played

For what may seem obvious, we will quickly look at how many games were played on average as well as identify which players played the most games for the organization.

knicks %>% 
    filter(!is.na(G)) %>% 
    summarise(mean = mean(G),
              median = median(G),
              max = max(G),
              sd = sd(G)) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
mean median max sd
116.7119 63 1039 149.2019
knicks %>% filter(G >= 600) %>%
  arrange(desc(G)) %>%
  select(Player,From,To,G,Yrs) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
Player From To G Yrs
Patrick Ewing 1986 2000 1039 15
Walt Frazier 1968 1977 759 10
Bill Bradley 1968 1977 742 10
Carl Braun 1948 1961 740 12
Phil Jackson 1968 1978 732 10
Charles Oakley 1989 1998 727 10
Trent Tucker 1983 1991 663 9
Willis Reed 1965 1974 650 10
Harry Gallatin 1949 1957 610 9
Dick Barnett 1966 1974 604 9
Allan Houston 1997 2005 602 9
John Starks 1991 1998 602 8

There were 12 players who played 600 or more games for the Knicks. Without surprise Patrick Ewing has played the most games with 1,039 while Walt Frazier follows behind with 759, and Bill Bradley with 742.

Minutes Played (Most Durable Knick)

Hall of fame center Kareem Abdul-Jabbar played the most minutes by racking in 57,446, let’s see which Knick played the most minutes.

knicks %>% 
    filter(!is.na(MP)) %>% 
    summarise(mean = mean(MP),
              median = median(MP),
              max = max(MP),
              sd = sd(MP)) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
mean median max sd
2905.991 1015.5 37586 4690.498

All-Star Difference - Minutes Played

#Knicks max minutes played subtracted from Kareems minutes played 
57446 - 37586
## [1] 19860

With 19,860 minutes less, the Knick with the most minutes played had 37,586 with the average being 2,905 with a median of 1,015. Let’s identify which players had the most minutes played, and see how many minutes they averaged each year.

Data from this statistic will start the Knicks Olympics

knicks %>% filter(MP >= 17000) %>% 
  mutate(MP_AVG = round(MP/Yrs)) %>%
  arrange(desc(MP_AVG)) %>%
  select(Player,From,To,Yrs,MP, MP_AVG) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
Player From To Yrs MP MP_AVG
Walt Frazier 1968 1977 10 28995 2900
Patrick Ewing 1986 2000 15 37586 2506
Gerald Wilkins 1986 1992 7 17017 2431
Allan Houston 1997 2005 9 21724 2414
Charles Oakley 1989 1998 10 23959 2396
Willis Reed 1965 1974 10 23073 2307
Richie Guerin 1957 1964 8 18257 2282
Bill Bradley 1968 1977 10 22799 2280
John Starks 1991 1998 8 17271 2159
Dick Barnett 1966 1974 9 18442 2049
Earl Monroe 1972 1980 9 17552 1950
Carl Braun 1948 1961 12 17995 1500

Based on the data, we see that point-guard Walt Frazier was the most durable by averaging 2,900 minutes a season, coming in second is Patrick Ewing with 2,506, with third place being Gerald Wilkins with 2,431.

Knicks Olympics - Minutes Played

greatest <- tibble(Player = c("Walt Frazier",
                              "Patrick Ewing",
                              "Gerald Wilkins"),
                          Yrs = c(5,3,1))
greatest %>% kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
Player Yrs
Walt Frazier 5
Patrick Ewing 3
Gerald Wilkins 1

Field Goals

Kareem Abdul-Jabbar tops the all-time list again with 15,837 field goals…does any Knick match up to the hall of famer from UCLA?

knicks %>% 
    filter(!is.na(FG)) %>% 
    summarise(mean = mean(FG),
              median = median(FG),
              max = max(FG),
              sd = sd(FG)) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
mean median max sd
458.1127 121 9260 883.1091

All-Star Difference - Field Goals

15837 - 9260
## [1] 6577

The average field goals by a Knick was 458 while the median is 121 making the data skewed to the left. The Knick with the most fields goals registered in at 9,260. Next, let’s see which Knicks had the knack.

knicks %>% filter(FG >= 3500) %>% 
  mutate(FG_AVG = round(FG/Yrs)) %>%
  arrange(desc(FG_AVG)) %>%
  select(Player,From,To,Yrs,FG, FG_AVG) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
Player From To Yrs FG FG_AVG
Patrick Ewing 1986 2000 15 9260 617
Walt Frazier 1968 1977 10 5736 574
Carmelo Anthony 2011 2017 7 3627 518
Willis Reed 1965 1974 10 4859 486
Richie Guerin 1957 1964 8 3681 460
Allan Houston 1997 2005 9 4103 456
Earl Monroe 1972 1980 9 3971 441
Dick Barnett 1966 1974 9 3742 416
Bill Bradley 1968 1977 10 3927 393
Carl Braun 1948 1961 12 3834 320

Patrick Ewing took the title by averging 617 field goals per year followed by Walt Frazier with 574 and Carmelo Anthony bringing in third with 518.

Knicks Olympics - Field Goals

fg <- tibble(Player = c("Patrick Ewing",
                        "Walt Frazier",
                        "Carmelo Anthony"),
                          FG = c(5,3,1))

greatest <- greatest %>% full_join(fg)
## Joining, by = "Player"
greatest %>% kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
Player Yrs FG
Walt Frazier 5 3
Patrick Ewing 3 5
Gerald Wilkins 1 NA
Carmelo Anthony NA 1

3-Point Field Goals

In Spike Lee’s film, He Got Game a basketball all star named Jesus Shuttlesworth fought with making a decision about which college to attend while his convict father made attempts to guide his choice under the control of a prison warden. The baseketball based film starred Oscar award winner Denzel Washington and Ray Allen, who holds the title of the most 3-point field goals made with 2,973.

knicks %>% 
    filter(!is.na(THREE_P)) %>% 
    summarise(mean = mean(THREE_P),
              median = median(THREE_P),
              max = max(THREE_P),
              sd = sd(THREE_P)) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
mean median max sd
52.09898 3 982 128.9529

All-Star Difference - 3-Point Field Goals

2973 - 982
## [1] 1991

The average 3-Point field goals were 52 with a median of 3; data is skewed to the left. Based on this data it looks like the Knicks are far from a 3-Point shooting team, but let’s identify who are the top marksman.

knicks %>% filter(THREE_P >= 375) %>% 
  mutate(THREE_P_AVG = round(THREE_P/Yrs)) %>%
  arrange(desc(THREE_P_AVG)) %>%
  select(Player,From,To,THREE_P,THREE_P_AVG) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
Player From To THREE_P THREE_P_AVG
Tim Hardaway 2014 2018 381 127
John Starks 1991 1998 982 123
Jamal Crawford 2005 2009 600 120
J.R. Smith 2012 2015 443 111
Carmelo Anthony 2011 2017 762 109
Allan Houston 1997 2005 921 102
Nate Robinson 2006 2010 414 83
Latrell Sprewell 1999 2003 385 77
Charlie Ward 1995 2004 598 60
Trent Tucker 1983 1991 504 56

To top the list we have Tim Hardaway with an average of 127 from beyond the arc, next there is 90’s fan favorite John Starks followed by Jamal Crawford with 120.

three_p <- tibble(Player = c("Tim Hardaway",
                             "John Starks",
                             "Jamal Crawford"),
                          THREE_P = c(5,3,1))

greatest <- greatest %>% full_join(three_p)
## Joining, by = "Player"
greatest %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
Player Yrs FG THREE_P
Walt Frazier 5 3 NA
Patrick Ewing 3 5 NA
Gerald Wilkins 1 NA NA
Carmelo Anthony NA 1 NA
Tim Hardaway NA NA 5
John Starks NA NA 3
Jamal Crawford NA NA 1

Free Throws

Known throughout his career as “The Mailman”, Karl Malone the power forward of the Utah Jazz & Los Angeles Lakers leads the all time list of free throws with 9,787. Let’s see how many Knicks racked in points from the free throw line.

knicks %>% 
    filter(!is.na(FT)) %>% 
    summarise(mean = mean(FT),
              median = median(FT),
              max = max(FT),
              sd = sd(FT)) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
mean median max sd
246.2046 55 5126 508.3655

The mean for free throws were 246 with a median of 55; data remains skewed to the left. The leader at the free throw line for the New York Knicks racked in 5,126 points.

All-Star Difference - Free Throws

9787 - 5126
## [1] 4661
knicks %>% filter(FT >= 2000) %>% 
  mutate(FT_AVG = round(FT/Yrs)) %>%
  arrange(desc(FT_AVG)) %>%
  select(Player,From,To,FT,FT_AVG) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
Player From To FT FT_AVG
Richie Guerin 1957 1964 3030 379
Patrick Ewing 1986 2000 5126 342
Bill Cartwright 1980 1988 2592 324
Kenny Sears 1956 1963 2256 322
Harry Gallatin 1949 1957 2831 315
Walt Frazier 1968 1977 3145 314
Carmelo Anthony 2011 2017 2170 310
Willis Reed 1965 1974 2465 246
Carl Braun 1948 1961 2781 232
Allan Houston 1997 2005 2038 226

Richie Guerin doesn’t leave points on the line with an average of 379, followed by big man Patrick Ewing with 342, and Bill Cartwright with 324.

Knicks Olympics - Free Throws

ft <- tibble(Player = c("Richie Guerin",
                        "Patrick Ewing",
                        "Bill Cartwright"),
                          FT = c(5,3,1))

greatest <- greatest %>% full_join(ft)
## Joining, by = "Player"
greatest %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
Player Yrs FG THREE_P FT
Walt Frazier 5 3 NA NA
Patrick Ewing 3 5 NA 3
Gerald Wilkins 1 NA NA NA
Carmelo Anthony NA 1 NA NA
Tim Hardaway NA NA 5 NA
John Starks NA NA 3 NA
Jamal Crawford NA NA 1 NA
Richie Guerin NA NA NA 5
Bill Cartwright NA NA NA 1

Offensive Rebounds

Hall of famer Moses Malone leads the pack as the NBA/ABA all time leader in crashing offensive boards with 7,382…let’s see who grabbed the most offensive rebounds for the team on 7th avenue.

knicks %>% 
    filter(!is.na(ORB)) %>% 
    summarise(mean = mean(ORB),
              median = median(ORB),
              max = max(ORB),
              sd = sd(ORB)) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
mean median max sd
135.6707 41 2580 267.0357

The Knicks offensive rebounds leader garnered 2,580 while the team averaged 135.

All-Star Difference - Offensive Rebounds

#calculate the difference from the all time leader
7382-2580
## [1] 4802
knicks %>% filter(ORB >= 600) %>% 
  mutate(ORB_AVG = round(ORB/Yrs)) %>%
  arrange(desc(ORB_AVG)) %>%
  select(Player,From,To,ORB,ORB_AVG) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
Player From To ORB ORB_AVG
Charles Oakley 1989 1998 2580 258
Tyson Chandler 2012 2014 640 213
David Lee 2006 2010 1031 206
Anthony Mason 1992 1996 1007 201
Patrick Ewing 1986 2000 2568 171
Marvin Webster 1979 1984 894 149
Bill Cartwright 1980 1988 1112 139
Kurt Thomas 1999 2013 1111 139
Larry Johnson 1997 2001 608 122
Kenny Walker 1987 1991 605 121
Louis Orr 1983 1988 604 101
Gerald Wilkins 1986 1992 698 100
Carmelo Anthony 2011 2017 640 91

Charles Oakley leads the way with an averge of 258, with Tyson Chandler behind with 213, and David Lee in third with 206.

Knicks Olympics - Offensive Rebounds

orb <- tibble(Player = c("Charles Oakley",
                         "Tyson Chandler",
                         "David Lee"),
                          ORB = c(5,3,1))

greatest <- greatest %>% full_join(orb)
## Joining, by = "Player"
greatest %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
Player Yrs FG THREE_P FT ORB
Walt Frazier 5 3 NA NA NA
Patrick Ewing 3 5 NA 3 NA
Gerald Wilkins 1 NA NA NA NA
Carmelo Anthony NA 1 NA NA NA
Tim Hardaway NA NA 5 NA NA
John Starks NA NA 3 NA NA
Jamal Crawford NA NA 1 NA NA
Richie Guerin NA NA NA 5 NA
Bill Cartwright NA NA NA 1 NA
Charles Oakley NA NA NA NA 5
Tyson Chandler NA NA NA NA 3
David Lee NA NA NA NA 1

Total Rebounds

Wilt Chamberlain will go down in history for scoring 100 points in one game, a feat that will probably never be challenged. The 7-footer from Philadelphia also is the NBA/ABA total rebound leader with 23,924…will Charles Oakley come close?

knicks %>% 
    filter(!is.na(TRB)) %>% 
    summarise(mean = mean(TRB),
              median = median(TRB),
              max = max(TRB),
              sd = sd(TRB)) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
mean median max sd
557.1071 164.5 10759 1093.66

Knick players averaged 557 total rebounds with the leader pulling over 10K rebounds!

All-Star Difference - Total Rebounds

#calculate the difference from the all time leader
23924-10759
## [1] 13165
knicks %>% filter(TRB >= 4000) %>% 
  mutate(TRB_AVG =  round(TRB/Yrs)) %>%
  arrange(desc(TRB_AVG)) %>%
  select(Player,From,To,TRB, TRB_AVG) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
Player From To TRB TRB_AVG
Willis Reed 1965 1974 8414 841
Dave DeBusschere 1969 1974 4671 778
Charles Oakley 1989 1998 7291 729
Patrick Ewing 1986 2000 10759 717
Willie Naulls 1957 1963 5015 716
Johnny Green 1960 1966 4825 689
Harry Gallatin 1949 1957 5935 659
Nat Clifton 1951 1957 4066 581
Kurt Thomas 1999 2013 4272 534
Walt Frazier 1968 1977 4598 460

Willis Reed pulled down 8,414 total rebounds averaging 841 per year, followed by the late Dave DeBusschere with 778, and the offensive revound king Charles Oakley with 729.

Knicks Olympics - Total Rebounds

trb <- tibble(Player = c("Willis Reed",
                         "Dave DeBusschere",
                         "Charles Oakley"),
                          TRB = c(5,3,1))

greatest <- greatest %>% full_join(trb)
## Joining, by = "Player"
greatest %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
Player Yrs FG THREE_P FT ORB TRB
Walt Frazier 5 3 NA NA NA NA
Patrick Ewing 3 5 NA 3 NA NA
Gerald Wilkins 1 NA NA NA NA NA
Carmelo Anthony NA 1 NA NA NA NA
Tim Hardaway NA NA 5 NA NA NA
John Starks NA NA 3 NA NA NA
Jamal Crawford NA NA 1 NA NA NA
Richie Guerin NA NA NA 5 NA NA
Bill Cartwright NA NA NA 1 NA NA
Charles Oakley NA NA NA NA 5 1
Tyson Chandler NA NA NA NA 3 NA
David Lee NA NA NA NA 1 NA
Willis Reed NA NA NA NA NA 5
Dave DeBusschere NA NA NA NA NA 3

Assists

Utah Jazz point-guard John Stockton is the all-time assist leader with 15,806. Will anyone from the Knicks come close to the leader in assists?

knicks %>% 
    filter(!is.na(AST)) %>% 
    summarise(mean = mean(AST),
              median = median(AST),
              max = max(AST),
              sd = sd(AST)) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
mean median max sd
261.0939 67 4791 536.2113

All-Star Difference - Assists

#calculate the difference from the all time leader
15806-4791
## [1] 11015

With 11,015 assist behind the assist leader it seems that the Knicks are in major need of a talented point guard. Let’s identify which player has led the Knicks with the most dimes.

knicks %>% filter(AST >= 2000) %>% 
   mutate(AST_AVG = round(AST/Yrs)) %>%
  arrange(desc(AST_AVG)) %>%
  select(Player,From,To,AST,AST_AVG) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
Player From To AST AST_AVG
Mark Jackson 1988 2002 4005 572
Micheal Ray Richardson 1979 1982 2244 561
Walt Frazier 1968 1977 4791 479
Ray Williams 1978 1984 2260 452
Stephon Marbury 2004 2008 2004 401
Dick McGuire 1950 1957 2950 369
Rory Sparrow 1983 1988 2164 361
Richie Guerin 1957 1964 2725 341
John Starks 1991 1998 2394 299
Bill Bradley 1968 1977 2533 253
Charlie Ward 1995 2004 2451 245
Carl Braun 1948 1961 2821 235
Earl Monroe 1972 1980 2087 232
Patrick Ewing 1986 2000 2088 139

ABC color commentator Mark Jackson leads the way with 4,005 total assists and an average of 572, followed by Michael Ray Richardson with 561 and Kicks announcer Walt Frazier with 479.

Knicks Olympics - Assists

ast <- tibble(Player = c("Mark Jackson",
                         "Michael Ray Richardson",
                         "Walt Frazier"),
                          AST = c(5,3,1))

greatest <- greatest %>% full_join(ast)
## Joining, by = "Player"
greatest %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
Player Yrs FG THREE_P FT ORB TRB AST
Walt Frazier 5 3 NA NA NA NA 1
Patrick Ewing 3 5 NA 3 NA NA NA
Gerald Wilkins 1 NA NA NA NA NA NA
Carmelo Anthony NA 1 NA NA NA NA NA
Tim Hardaway NA NA 5 NA NA NA NA
John Starks NA NA 3 NA NA NA NA
Jamal Crawford NA NA 1 NA NA NA NA
Richie Guerin NA NA NA 5 NA NA NA
Bill Cartwright NA NA NA 1 NA NA NA
Charles Oakley NA NA NA NA 5 1 NA
Tyson Chandler NA NA NA NA 3 NA NA
David Lee NA NA NA NA 1 NA NA
Willis Reed NA NA NA NA NA 5 NA
Dave DeBusschere NA NA NA NA NA 3 NA
Mark Jackson NA NA NA NA NA NA 5
Michael Ray Richardson NA NA NA NA NA NA 3

Steals

John Stockton is the top man again…this time for defense. With 3,265 steals, Stockton has been deemed a double threat. Is there any Knick with the ability to swipe effectively?

knicks %>% 
    filter(!is.na(STL)) %>% 
    summarise(mean = mean(STL),
              median = median(STL),
              max = max(STL),
              sd = sd(STL)) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
mean median max sd
87.98792 31 1061 150.4476

All-Star Difference - Steals

#calculate the difference from the all time leader
3265-1061
## [1] 2204

With a difference of only 2,204 I’m looking forward to see which Knick is adept in stealing the basketball.

knicks %>% filter(STL >= 600) %>% 
  mutate(STL_AVG = round(STL/Yrs)) %>%
  arrange(desc(STL_AVG)) %>%
  select(Player,From,To,STL,STL_AVG) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
Player From To STL STL_AVG
Micheal Ray Richardson 1979 1982 810 202
Ray Williams 1978 1984 750 150
Mark Jackson 1988 2002 720 103
John Starks 1991 1998 711 89
Gerald Wilkins 1986 1992 614 88
Charles Oakley 1989 1998 844 84
Charlie Ward 1995 2004 744 74
Patrick Ewing 1986 2000 1061 71
Trent Tucker 1983 1991 634 70

Michael Ray Richardson takes the title for the swift hand with 810 total steals and an average of 202, followed by Ray Williams with 150 and Mark Jackson with 103.

Knicks Olympics - Steals

stl <- tibble(Player = c("Michael Ray Richardson",
                         "Ray Williams",
                         "Mark Jackson"),
                          STL = c(5,3,1))

greatest <- greatest %>% full_join(stl)
## Joining, by = "Player"
greatest %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
Player Yrs FG THREE_P FT ORB TRB AST STL
Walt Frazier 5 3 NA NA NA NA 1 NA
Patrick Ewing 3 5 NA 3 NA NA NA NA
Gerald Wilkins 1 NA NA NA NA NA NA NA
Carmelo Anthony NA 1 NA NA NA NA NA NA
Tim Hardaway NA NA 5 NA NA NA NA NA
John Starks NA NA 3 NA NA NA NA NA
Jamal Crawford NA NA 1 NA NA NA NA NA
Richie Guerin NA NA NA 5 NA NA NA NA
Bill Cartwright NA NA NA 1 NA NA NA NA
Charles Oakley NA NA NA NA 5 1 NA NA
Tyson Chandler NA NA NA NA 3 NA NA NA
David Lee NA NA NA NA 1 NA NA NA
Willis Reed NA NA NA NA NA 5 NA NA
Dave DeBusschere NA NA NA NA NA 3 NA NA
Mark Jackson NA NA NA NA NA NA 5 1
Michael Ray Richardson NA NA NA NA NA NA 3 5
Ray Williams NA NA NA NA NA NA NA 3

Blocks

GEICO has become infamous for their outside of the box insurance commercials. NBA shot blocker Dikembe Mutombo swatted breakfast cereal and other objects while wagging his finger, but it’s Hakeem Olajuwon who leads the league in block shots with 3,830…were there any ball swatters on the Knicks?

knicks %>% 
    filter(!is.na(BLK)) %>% 
    summarise(mean = mean(BLK),
              median = median(BLK),
              max = max(BLK),
              sd = sd(BLK)) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
mean median max sd
47.42296 11 2758 167.1621

All-Star Difference - Blocks

#calculate the difference from the all time leader
3830-2758
## [1] 1072

With an edge of 1,072 there seems to be a Knick who doesn’t mind blocking shots…will it be Patrick Ewing?

knicks %>% filter(BLK >= 250) %>% 
  mutate(BLK_AVG = round(BLK/Yrs)) %>%
  arrange(desc(BLK_AVG)) %>%
  select(Player,From,To,Yrs,BLK,BLK_AVG) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
Player From To Yrs BLK BLK_AVG
Patrick Ewing 1986 2000 15 2758 184
Kristaps Porzingis 2016 2018 3 378 126
Marvin Webster 1979 1984 6 542 90
Kyle O’Quinn 2016 2018 3 251 84
Marcus Camby 1999 2013 5 390 78
Charles Smith 1993 1996 4 287 72
Bill Cartwright 1980 1988 8 543 68
Kurt Thomas 1999 2013 8 479 60
Amar’e Stoudemire 2011 2015 5 287 57
John Gianelli 1973 1977 5 250 50

Patrick Ewing has a commanding lead with 2,758 blocked shots and a 184 avrage, followed by Kristaps Porzingis with 126 and Marvin Webster with 90.

Knicks Olympics - Blocked Shots

blk <- tibble(Player = c("Patrick Ewing",
                         "Kristaps Porzingis",
                         "Marvin Webster"),
                          BLK = c(5,3,1))

greatest <- greatest %>% full_join(blk)
## Joining, by = "Player"
greatest %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
Player Yrs FG THREE_P FT ORB TRB AST STL BLK
Walt Frazier 5 3 NA NA NA NA 1 NA NA
Patrick Ewing 3 5 NA 3 NA NA NA NA 5
Gerald Wilkins 1 NA NA NA NA NA NA NA NA
Carmelo Anthony NA 1 NA NA NA NA NA NA NA
Tim Hardaway NA NA 5 NA NA NA NA NA NA
John Starks NA NA 3 NA NA NA NA NA NA
Jamal Crawford NA NA 1 NA NA NA NA NA NA
Richie Guerin NA NA NA 5 NA NA NA NA NA
Bill Cartwright NA NA NA 1 NA NA NA NA NA
Charles Oakley NA NA NA NA 5 1 NA NA NA
Tyson Chandler NA NA NA NA 3 NA NA NA NA
David Lee NA NA NA NA 1 NA NA NA NA
Willis Reed NA NA NA NA NA 5 NA NA NA
Dave DeBusschere NA NA NA NA NA 3 NA NA NA
Mark Jackson NA NA NA NA NA NA 5 1 NA
Michael Ray Richardson NA NA NA NA NA NA 3 5 NA
Ray Williams NA NA NA NA NA NA NA 3 NA
Kristaps Porzingis NA NA NA NA NA NA NA NA 3
Marvin Webster NA NA NA NA NA NA NA NA 1

Points

With his unblockable sky hook shot Kareem Abdul-Jabbar is the all time leader in points with 38,387. Who is the Knick who has racked up the most points?

knicks %>% 
    filter(!is.na(PTS)) %>% 
    summarise(mean = mean(PTS),
              median = median(PTS),
              max = max(PTS),
              sd = sd(PTS)) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
mean median max sd
1194.299 319 23665 2292.684

All-Star Difference - Points

#calculate the difference from the all time leader
38387-23665
## [1] 14722

With a difference of 14,722 it’s a safe bet that Patrick Ewing is the owner of this phenomenal statistic or is he?

knicks %>% filter(PTS >= 9200) %>% 
  mutate(PTS_AVG = round(PTS/Yrs)) %>%
  arrange(desc(PTS_AVG)) %>%
  select(Player,From,To,Yrs,PTS, PTS_AVG) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
Player From To Yrs PTS PTS_AVG
Patrick Ewing 1986 2000 15 23665 1578
Walt Frazier 1968 1977 10 14617 1462
Carmelo Anthony 2011 2017 7 10186 1455
Richie Guerin 1957 1964 8 10392 1299
Allan Houston 1997 2005 9 11165 1241
Willis Reed 1965 1974 10 12183 1218
Earl Monroe 1972 1980 9 9679 1075
Dick Barnett 1966 1974 9 9442 1049
Bill Bradley 1968 1977 10 9217 922
Carl Braun 1948 1961 12 10449 871

Based on our data Patrick Ewing is the Knicks top scoring maching with 23,655 points and averaged 1,578 points per year for his career. Walt Frazier came in second with 14,617 total points and averaged 1,462 points per year followed by Carmelo Anthony who tallied 10,186 points in his 7 year career averaging 1,455 points per year.

Knicks Olympics - Points

pts <- tibble(Player = c("Patrick Ewing",
                         "Walt Frazier",
                         "Carmelo Anthony"),
                          PTS = c(5,3,1))

greatest <- greatest %>% full_join(pts)
## Joining, by = "Player"
greatest %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
Player Yrs FG THREE_P FT ORB TRB AST STL BLK PTS
Walt Frazier 5 3 NA NA NA NA 1 NA NA 3
Patrick Ewing 3 5 NA 3 NA NA NA NA 5 5
Gerald Wilkins 1 NA NA NA NA NA NA NA NA NA
Carmelo Anthony NA 1 NA NA NA NA NA NA NA 1
Tim Hardaway NA NA 5 NA NA NA NA NA NA NA
John Starks NA NA 3 NA NA NA NA NA NA NA
Jamal Crawford NA NA 1 NA NA NA NA NA NA NA
Richie Guerin NA NA NA 5 NA NA NA NA NA NA
Bill Cartwright NA NA NA 1 NA NA NA NA NA NA
Charles Oakley NA NA NA NA 5 1 NA NA NA NA
Tyson Chandler NA NA NA NA 3 NA NA NA NA NA
David Lee NA NA NA NA 1 NA NA NA NA NA
Willis Reed NA NA NA NA NA 5 NA NA NA NA
Dave DeBusschere NA NA NA NA NA 3 NA NA NA NA
Mark Jackson NA NA NA NA NA NA 5 1 NA NA
Michael Ray Richardson NA NA NA NA NA NA 3 5 NA NA
Ray Williams NA NA NA NA NA NA NA 3 NA NA
Kristaps Porzingis NA NA NA NA NA NA NA NA 3 NA
Marvin Webster NA NA NA NA NA NA NA NA 1 NA

Field Goal Percentage

Known as a recipient of “Lob City” during the high flying years as a center for the Los Angeles Clippers, DeAndre Jordan holds the leagues record for the highest field goal percentage with .6726…let’s see who is the most reliable Knick.

knicks %>% 
    filter(!is.na(FG_PER)) %>% 
    summarise(mean = mean(FG_PER),
              median = median(FG_PER),
              max = max(FG_PER),
              sd = sd(FG_PER)) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
mean median max sd
0.4062017 0.4195 1 0.1048437

In order to obtain our top ten list we tweaked the filtering process to highlight players who played more than 5 years and who had a field goal percentange of 46.4% or higher.

knicks %>% filter(FG_PER >= 0.464 & Yrs > 5) %>% 
  arrange(desc(FG_PER)) %>%
  select(Player,From,To,Yrs,FG_PER) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
Player From To Yrs FG_PER
Bill Cartwright 1980 1988 8 0.552
Patrick Ewing 1986 2000 15 0.508
Charles Oakley 1989 1998 10 0.493
Walt Frazier 1968 1977 10 0.492
Kurt Thomas 1999 2013 8 0.486
Marvin Webster 1979 1984 6 0.481
Earl Monroe 1972 1980 9 0.478
Willis Reed 1965 1974 10 0.476
Rory Sparrow 1983 1988 6 0.468
Dick Barnett 1966 1974 9 0.464

Based on our data, we see that Bill Cartwright had the highest field goal percentage shooting 55.2%, followed by Patrick Ewing with 50.8%, and Charles Oakley with 49.3%.

Knicks Olympics - Field Goal Percentage

fg_per <- tibble(Player = c("Bill Cartwright",
                         "Patrick Ewing",
                         "Charles Oakley"),
                          FG_PER = c(5,3,1))

greatest <- greatest %>% full_join(fg_per)
## Joining, by = "Player"
greatest %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
Player Yrs FG THREE_P FT ORB TRB AST STL BLK PTS FG_PER
Walt Frazier 5 3 NA NA NA NA 1 NA NA 3 NA
Patrick Ewing 3 5 NA 3 NA NA NA NA 5 5 3
Gerald Wilkins 1 NA NA NA NA NA NA NA NA NA NA
Carmelo Anthony NA 1 NA NA NA NA NA NA NA 1 NA
Tim Hardaway NA NA 5 NA NA NA NA NA NA NA NA
John Starks NA NA 3 NA NA NA NA NA NA NA NA
Jamal Crawford NA NA 1 NA NA NA NA NA NA NA NA
Richie Guerin NA NA NA 5 NA NA NA NA NA NA NA
Bill Cartwright NA NA NA 1 NA NA NA NA NA NA 5
Charles Oakley NA NA NA NA 5 1 NA NA NA NA 1
Tyson Chandler NA NA NA NA 3 NA NA NA NA NA NA
David Lee NA NA NA NA 1 NA NA NA NA NA NA
Willis Reed NA NA NA NA NA 5 NA NA NA NA NA
Dave DeBusschere NA NA NA NA NA 3 NA NA NA NA NA
Mark Jackson NA NA NA NA NA NA 5 1 NA NA NA
Michael Ray Richardson NA NA NA NA NA NA 3 5 NA NA NA
Ray Williams NA NA NA NA NA NA NA 3 NA NA NA
Kristaps Porzingis NA NA NA NA NA NA NA NA 3 NA NA
Marvin Webster NA NA NA NA NA NA NA NA 1 NA NA

3-Point Field Goal Percentage

As the current coach of the Golden State Warrriors, Steve Kerr holds the title for highest 3-point field goal percentage of .4540 …are any Knicks reliable beyond the arc?

knicks %>% 
    filter(!is.na(THREE_PER)) %>% 
    summarise(mean = mean(THREE_PER),
              median = median(THREE_PER),
              max = max(THREE_PER),
              sd = sd(THREE_PER)) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
mean median max sd
0.2577331 0.302 1 0.17734

Similar to the field goal percentage, we will tweak our code in order to obtain our top ten list.

knicks %>% filter(THREE_PER >= 0.225 & Yrs > 5) %>% 
  arrange(desc(THREE_PER)) %>%
  select(Player,From,To,Yrs,THREE_PER) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
Player From To Yrs THREE_PER
Trent Tucker 1983 1991 9 0.409
Allan Houston 1997 2005 9 0.399
Carmelo Anthony 2011 2017 7 0.369
Charlie Ward 1995 2004 10 0.366
John Starks 1991 1998 8 0.345
Kurt Thomas 1999 2013 8 0.333
Mark Jackson 1988 2002 7 0.319
Gerald Wilkins 1986 1992 7 0.309
Rory Sparrow 1983 1988 6 0.250
Jared Jeffries 2007 2012 6 0.225

Based on our data, we see that Trent Tucker had the highest 3-point field goal percentage shooting 40.9%, followed by Allan Houston with 39.9%, and Carmelo Anthony with 36.9%.

Knicks Olympics - Field Goal Percentage

three_per <- tibble(Player = c("Trent Tucker",
                         "Allan Houston",
                         "Carmelo Anthony"),
                          THREE_PER = c(5,3,1))

greatest <- greatest %>% full_join(three_per)
## Joining, by = "Player"
greatest %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
Player Yrs FG THREE_P FT ORB TRB AST STL BLK PTS FG_PER THREE_PER
Walt Frazier 5 3 NA NA NA NA 1 NA NA 3 NA NA
Patrick Ewing 3 5 NA 3 NA NA NA NA 5 5 3 NA
Gerald Wilkins 1 NA NA NA NA NA NA NA NA NA NA NA
Carmelo Anthony NA 1 NA NA NA NA NA NA NA 1 NA 1
Tim Hardaway NA NA 5 NA NA NA NA NA NA NA NA NA
John Starks NA NA 3 NA NA NA NA NA NA NA NA NA
Jamal Crawford NA NA 1 NA NA NA NA NA NA NA NA NA
Richie Guerin NA NA NA 5 NA NA NA NA NA NA NA NA
Bill Cartwright NA NA NA 1 NA NA NA NA NA NA 5 NA
Charles Oakley NA NA NA NA 5 1 NA NA NA NA 1 NA
Tyson Chandler NA NA NA NA 3 NA NA NA NA NA NA NA
David Lee NA NA NA NA 1 NA NA NA NA NA NA NA
Willis Reed NA NA NA NA NA 5 NA NA NA NA NA NA
Dave DeBusschere NA NA NA NA NA 3 NA NA NA NA NA NA
Mark Jackson NA NA NA NA NA NA 5 1 NA NA NA NA
Michael Ray Richardson NA NA NA NA NA NA 3 5 NA NA NA NA
Ray Williams NA NA NA NA NA NA NA 3 NA NA NA NA
Kristaps Porzingis NA NA NA NA NA NA NA NA 3 NA NA NA
Marvin Webster NA NA NA NA NA NA NA NA 1 NA NA NA
Trent Tucker NA NA NA NA NA NA NA NA NA NA NA 5
Allan Houston NA NA NA NA NA NA NA NA NA NA NA 3

Free Throw Percentage

Hall of famer Steve Nash was considered cash money on the free throw line with his astounding 90.43%…who holds the title in Madison Square Garden.

knicks %>% 
    filter(!is.na(FT_PER)) %>% 
    summarise(mean = mean(FT_PER),
              median = median(FT_PER),
              max = max(FT_PER),
              sd = sd(FT_PER)) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
mean median max sd
0.7031983 0.73 1 0.1490141

Similar to the prior percentage analysis, we will tweak our code in order to obtain our top ten list.

knicks %>% filter(FT_PER >= 0.783 & Yrs > 5) %>% 
  arrange(desc(FT_PER)) %>%
  select(Player,From,To,Yrs,FT_PER) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
Player From To Yrs FT_PER
Allan Houston 1997 2005 9 0.872
Bill Bradley 1968 1977 10 0.840
Carmelo Anthony 2011 2017 7 0.830
Kenny Sears 1956 1963 7 0.825
Earl Monroe 1972 1980 9 0.821
Willie Naulls 1957 1963 7 0.819
Rory Sparrow 1983 1988 6 0.810
Carl Braun 1948 1961 12 0.804
Bill Cartwright 1980 1988 8 0.784
Walt Frazier 1968 1977 10 0.783

Based on our data, we see that Allan Houston had the highest free throw percentage shooting 87.2%, followed by Bill Bradley with 84%, and Carmelo Anthony with 83%.

Knicks Olympics (Free Throw Percentage)

ft_per <- tibble(Player = c("Allan Houston",
                         "Bill Bradley",
                         "Carmelo Anthony"),
                          FT_PER = c(5,3,1))

greatest <- greatest %>% full_join(ft_per)
## Joining, by = "Player"
greatest %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
Player Yrs FG THREE_P FT ORB TRB AST STL BLK PTS FG_PER THREE_PER FT_PER
Walt Frazier 5 3 NA NA NA NA 1 NA NA 3 NA NA NA
Patrick Ewing 3 5 NA 3 NA NA NA NA 5 5 3 NA NA
Gerald Wilkins 1 NA NA NA NA NA NA NA NA NA NA NA NA
Carmelo Anthony NA 1 NA NA NA NA NA NA NA 1 NA 1 1
Tim Hardaway NA NA 5 NA NA NA NA NA NA NA NA NA NA
John Starks NA NA 3 NA NA NA NA NA NA NA NA NA NA
Jamal Crawford NA NA 1 NA NA NA NA NA NA NA NA NA NA
Richie Guerin NA NA NA 5 NA NA NA NA NA NA NA NA NA
Bill Cartwright NA NA NA 1 NA NA NA NA NA NA 5 NA NA
Charles Oakley NA NA NA NA 5 1 NA NA NA NA 1 NA NA
Tyson Chandler NA NA NA NA 3 NA NA NA NA NA NA NA NA
David Lee NA NA NA NA 1 NA NA NA NA NA NA NA NA
Willis Reed NA NA NA NA NA 5 NA NA NA NA NA NA NA
Dave DeBusschere NA NA NA NA NA 3 NA NA NA NA NA NA NA
Mark Jackson NA NA NA NA NA NA 5 1 NA NA NA NA NA
Michael Ray Richardson NA NA NA NA NA NA 3 5 NA NA NA NA NA
Ray Williams NA NA NA NA NA NA NA 3 NA NA NA NA NA
Kristaps Porzingis NA NA NA NA NA NA NA NA 3 NA NA NA NA
Marvin Webster NA NA NA NA NA NA NA NA 1 NA NA NA NA
Trent Tucker NA NA NA NA NA NA NA NA NA NA NA 5 NA
Allan Houston NA NA NA NA NA NA NA NA NA NA NA 3 5
Bill Bradley NA NA NA NA NA NA NA NA NA NA NA NA 3

Minutes Per Game

For what may seem absurd, Wilt Chamberlain averaged 45.8 minutes per game

knicks %>% 
    filter(!is.na(MPPG)) %>% 
    summarise(mean = mean(MPPG),
              median = median(MPPG),
              max = max(MPPG),
              sd = sd(MPPG)) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
mean median max sd
17.36847 15.5 39.8 9.311215

All-Star Difference - MMPG

#calculate the difference from the all time leader
45.80-39.8
## [1] 6

Six minutes short, there is a Knick who averaged 39.8 minutes per game. Let’s identify who were the iron men of the NY Knicks.

knicks %>% filter(MPPG >= 36) %>% 
  arrange(desc(MPPG)) %>%
  select(Player,From,To,Yrs,MPPG) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
Player From To Yrs MPPG
Bob McAdoo 1977 1979 3 39.8
Latrell Sprewell 1999 2003 5 39.1
Walt Frazier 1968 1977 10 38.2
Stephon Marbury 2004 2008 5 37.9
Walt Bellamy 1966 1969 4 37.0
Jamal Crawford 2005 2009 5 36.9
Dave DeBusschere 1969 1974 6 36.7
Patrick Ewing 1986 2000 15 36.2
Allan Houston 1997 2005 9 36.1
Carmelo Anthony 2011 2017 7 36.0

Based on our data, we see that Bob McAdoo remained the court the most with 39.8 minutes per game, followed by Latrell Sprewell with 39.1, and Walt Frazier with 38.2

Knicks Olympics (Minutes Per Game)

mppg <- tibble(Player = c("Bob McAdoo",
                         "Latrell Sprewell",
                         "Walt Frazier"),
                          MPPG = c(5,3,1))

greatest <- greatest %>% full_join(mppg)
## Joining, by = "Player"
greatest %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
Player Yrs FG THREE_P FT ORB TRB AST STL BLK PTS FG_PER THREE_PER FT_PER MPPG
Walt Frazier 5 3 NA NA NA NA 1 NA NA 3 NA NA NA 1
Patrick Ewing 3 5 NA 3 NA NA NA NA 5 5 3 NA NA NA
Gerald Wilkins 1 NA NA NA NA NA NA NA NA NA NA NA NA NA
Carmelo Anthony NA 1 NA NA NA NA NA NA NA 1 NA 1 1 NA
Tim Hardaway NA NA 5 NA NA NA NA NA NA NA NA NA NA NA
John Starks NA NA 3 NA NA NA NA NA NA NA NA NA NA NA
Jamal Crawford NA NA 1 NA NA NA NA NA NA NA NA NA NA NA
Richie Guerin NA NA NA 5 NA NA NA NA NA NA NA NA NA NA
Bill Cartwright NA NA NA 1 NA NA NA NA NA NA 5 NA NA NA
Charles Oakley NA NA NA NA 5 1 NA NA NA NA 1 NA NA NA
Tyson Chandler NA NA NA NA 3 NA NA NA NA NA NA NA NA NA
David Lee NA NA NA NA 1 NA NA NA NA NA NA NA NA NA
Willis Reed NA NA NA NA NA 5 NA NA NA NA NA NA NA NA
Dave DeBusschere NA NA NA NA NA 3 NA NA NA NA NA NA NA NA
Mark Jackson NA NA NA NA NA NA 5 1 NA NA NA NA NA NA
Michael Ray Richardson NA NA NA NA NA NA 3 5 NA NA NA NA NA NA
Ray Williams NA NA NA NA NA NA NA 3 NA NA NA NA NA NA
Kristaps Porzingis NA NA NA NA NA NA NA NA 3 NA NA NA NA NA
Marvin Webster NA NA NA NA NA NA NA NA 1 NA NA NA NA NA
Trent Tucker NA NA NA NA NA NA NA NA NA NA NA 5 NA NA
Allan Houston NA NA NA NA NA NA NA NA NA NA NA 3 5 NA
Bill Bradley NA NA NA NA NA NA NA NA NA NA NA NA 3 NA
Bob McAdoo NA NA NA NA NA NA NA NA NA NA NA NA NA 5
Latrell Sprewell NA NA NA NA NA NA NA NA NA NA NA NA NA 3

Points Per Game

Seen as one of the first basketball superstars to become a marketing goliath Michael Jordan averaged 30.12 points per game..do the Knicks have a player that comes close to the GOAT?

knicks %>% 
    filter(!is.na(PPG)) %>% 
    summarise(mean = mean(PPG),
              median = median(PPG),
              max = max(PPG),
              sd = sd(PPG)) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
mean median max sd
6.565971 5.3 26.7 4.766176

All-Star Difference - PPG

#calculate the difference from the all time leader
30.12-26.7
## [1] 3.42

With only 3.42 points shy of the GOAT, there was a Knick who averaged 26.7 points per game. Overall, the Knicks averaged close to 7 points per game with a median of 5.3

knicks %>% filter(PPG >= 18.7) %>% 
  arrange(desc(PPG)) %>%
  select(Player,From,To,Yrs,PPG) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
Player From To Yrs PPG
Bob McAdoo 1977 1979 3 26.7
Bernard King 1983 1987 4 26.5
Carmelo Anthony 2011 2017 7 24.7
Patrick Ewing 1986 2000 15 22.8
Richie Guerin 1957 1964 8 20.1
Walt Frazier 1968 1977 10 19.3
Willie Naulls 1957 1963 7 19.3
Al Harrington 2009 2010 2 19.2
Walt Bellamy 1966 1969 4 18.9
Willis Reed 1965 1974 10 18.7

Based on our data, we see that Bob McAdoo recorded 26.7 points per game, followed by Bernard King with 26.5 and Carmelo Anthony with 24.7

Knicks Olympics (Points Per Game)

ppg <- tibble(Player = c("Bob McAdoo",
                         "Bernard King",
                         "Carmelo Anthony"),
                          PPG = c(5,3,1))

greatest <- greatest %>% full_join(ppg)
## Joining, by = "Player"
greatest %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
Player Yrs FG THREE_P FT ORB TRB AST STL BLK PTS FG_PER THREE_PER FT_PER MPPG PPG
Walt Frazier 5 3 NA NA NA NA 1 NA NA 3 NA NA NA 1 NA
Patrick Ewing 3 5 NA 3 NA NA NA NA 5 5 3 NA NA NA NA
Gerald Wilkins 1 NA NA NA NA NA NA NA NA NA NA NA NA NA NA
Carmelo Anthony NA 1 NA NA NA NA NA NA NA 1 NA 1 1 NA 1
Tim Hardaway NA NA 5 NA NA NA NA NA NA NA NA NA NA NA NA
John Starks NA NA 3 NA NA NA NA NA NA NA NA NA NA NA NA
Jamal Crawford NA NA 1 NA NA NA NA NA NA NA NA NA NA NA NA
Richie Guerin NA NA NA 5 NA NA NA NA NA NA NA NA NA NA NA
Bill Cartwright NA NA NA 1 NA NA NA NA NA NA 5 NA NA NA NA
Charles Oakley NA NA NA NA 5 1 NA NA NA NA 1 NA NA NA NA
Tyson Chandler NA NA NA NA 3 NA NA NA NA NA NA NA NA NA NA
David Lee NA NA NA NA 1 NA NA NA NA NA NA NA NA NA NA
Willis Reed NA NA NA NA NA 5 NA NA NA NA NA NA NA NA NA
Dave DeBusschere NA NA NA NA NA 3 NA NA NA NA NA NA NA NA NA
Mark Jackson NA NA NA NA NA NA 5 1 NA NA NA NA NA NA NA
Michael Ray Richardson NA NA NA NA NA NA 3 5 NA NA NA NA NA NA NA
Ray Williams NA NA NA NA NA NA NA 3 NA NA NA NA NA NA NA
Kristaps Porzingis NA NA NA NA NA NA NA NA 3 NA NA NA NA NA NA
Marvin Webster NA NA NA NA NA NA NA NA 1 NA NA NA NA NA NA
Trent Tucker NA NA NA NA NA NA NA NA NA NA NA 5 NA NA NA
Allan Houston NA NA NA NA NA NA NA NA NA NA NA 3 5 NA NA
Bill Bradley NA NA NA NA NA NA NA NA NA NA NA NA 3 NA NA
Bob McAdoo NA NA NA NA NA NA NA NA NA NA NA NA NA 5 5
Latrell Sprewell NA NA NA NA NA NA NA NA NA NA NA NA NA 3 NA
Bernard King NA NA NA NA NA NA NA NA NA NA NA NA NA NA 3

Total Rebounds Per Game

With 11 championship rings with the Boston Celtics, Bill Rusell averaged 24.87 total rebounds per game in his illustrious career…which Knick crashed the boards like Bill?

knicks %>% 
    filter(!is.na(TRPG)) %>% 
    summarise(mean = mean(TRPG),
              median = median(TRPG),
              max = max(TRPG),
              sd = sd(TRPG)) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
mean median max sd
3.216964 2.6 13.3 2.425411

All-Star Difference TRPG

#calculate the difference from the all time leader
24.87-13.3
## [1] 11.57

It doesn’t seem like the Knicks haven’t had anybody like Bill, and they average a paltry 3.2 rebounds per game with a median of 2.6

knicks %>% filter(TRPG >= 10.6) %>% 
  arrange(desc(TRPG)) %>%
  select(Player,From,To,Yrs,TRPG) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
Player From To Yrs TRPG
Walt Bellamy 1966 1969 4 13.3
Willis Reed 1965 1974 10 12.9
Harry Gallatin 1949 1957 9 12.1
Bob McAdoo 1977 1979 3 12.0
Earl Barron 2010 2013 2 11.9
Willie Naulls 1957 1963 7 11.7
Maurice Lucas 1982 1982 1 11.3
Enes Kanter 2018 2018 1 11.0
Dave DeBusschere 1969 1974 6 10.7
Zach Randolph 2008 2009 2 10.6

Based on our data, we see that Walt Bellamy recorded 13.3 total rebounds per game, followed by Willis Reed with 12.9 and Harry Gallatin with 12.1

Knicks Olympics (Total Rebounds Per Game)

trpg <- tibble(Player = c("Walt Bellamy",
                         "Willis Reed",
                         "Harry Gallatin"),
                          TRPG = c(5,3,1))

greatest <- greatest %>% full_join(trpg)
## Joining, by = "Player"
greatest %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
Player Yrs FG THREE_P FT ORB TRB AST STL BLK PTS FG_PER THREE_PER FT_PER MPPG PPG TRPG
Walt Frazier 5 3 NA NA NA NA 1 NA NA 3 NA NA NA 1 NA NA
Patrick Ewing 3 5 NA 3 NA NA NA NA 5 5 3 NA NA NA NA NA
Gerald Wilkins 1 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
Carmelo Anthony NA 1 NA NA NA NA NA NA NA 1 NA 1 1 NA 1 NA
Tim Hardaway NA NA 5 NA NA NA NA NA NA NA NA NA NA NA NA NA
John Starks NA NA 3 NA NA NA NA NA NA NA NA NA NA NA NA NA
Jamal Crawford NA NA 1 NA NA NA NA NA NA NA NA NA NA NA NA NA
Richie Guerin NA NA NA 5 NA NA NA NA NA NA NA NA NA NA NA NA
Bill Cartwright NA NA NA 1 NA NA NA NA NA NA 5 NA NA NA NA NA
Charles Oakley NA NA NA NA 5 1 NA NA NA NA 1 NA NA NA NA NA
Tyson Chandler NA NA NA NA 3 NA NA NA NA NA NA NA NA NA NA NA
David Lee NA NA NA NA 1 NA NA NA NA NA NA NA NA NA NA NA
Willis Reed NA NA NA NA NA 5 NA NA NA NA NA NA NA NA NA 3
Dave DeBusschere NA NA NA NA NA 3 NA NA NA NA NA NA NA NA NA NA
Mark Jackson NA NA NA NA NA NA 5 1 NA NA NA NA NA NA NA NA
Michael Ray Richardson NA NA NA NA NA NA 3 5 NA NA NA NA NA NA NA NA
Ray Williams NA NA NA NA NA NA NA 3 NA NA NA NA NA NA NA NA
Kristaps Porzingis NA NA NA NA NA NA NA NA 3 NA NA NA NA NA NA NA
Marvin Webster NA NA NA NA NA NA NA NA 1 NA NA NA NA NA NA NA
Trent Tucker NA NA NA NA NA NA NA NA NA NA NA 5 NA NA NA NA
Allan Houston NA NA NA NA NA NA NA NA NA NA NA 3 5 NA NA NA
Bill Bradley NA NA NA NA NA NA NA NA NA NA NA NA 3 NA NA NA
Bob McAdoo NA NA NA NA NA NA NA NA NA NA NA NA NA 5 5 NA
Latrell Sprewell NA NA NA NA NA NA NA NA NA NA NA NA NA 3 NA NA
Bernard King NA NA NA NA NA NA NA NA NA NA NA NA NA NA 3 NA
Walt Bellamy NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 5
Harry Gallatin NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 1

Assist Per Game

Known as the “Magic Man” with the showtime Los Angeless Lakers, Magic Johnson recorded 11.19 assists per game…do the Knicks have a floor general dropping dimes like Magic?

knicks %>% 
    filter(!is.na(APG)) %>% 
    summarise(mean = mean(APG),
              median = median(APG),
              max = max(APG),
              sd = sd(APG)) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
mean median max sd
1.447182 1 8 1.4092

All-Star Difference - APG

#calculate the difference from the all time leader
11.19-8
## [1] 3.19

As a team the Knicks mean and median is almost symmetrical for assists with the top man raking in 8 per game.

knicks %>% filter(APG >= 5.7) %>% 
  arrange(desc(APG)) %>%
  select(Player,From,To,Yrs,APG) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
Player From To Yrs APG
Mark Jackson 1988 2002 7 8.0
Micheal Ray Richardson 1979 1982 4 7.1
Stephon Marbury 2004 2008 5 7.0
Raymond Felton 2011 2014 3 6.6
Chris Duhon 2009 2010 2 6.5
Walt Frazier 1968 1977 10 6.3
Jeremy Lin 2012 2012 1 6.2
Rory Sparrow 1983 1988 6 6.2
Gerald Henderson 1987 1988 2 6.1
Ray Williams 1978 1984 5 5.7

Based on our data, we see that Mark Jacksoin recorded 8 assists per game, followed by Michael Ray Richardson with 7.1 and Stephon Marbury with 7

Knicks Olympics - Assists Per Game

apg <- tibble(Player = c("Mark Jackson",
                         "Michael Ray Richardson",
                         "Stephon Marbury"),
                          APG = c(5,3,1))

greatest <- greatest %>% full_join(apg)
## Joining, by = "Player"
greatest %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
Player Yrs FG THREE_P FT ORB TRB AST STL BLK PTS FG_PER THREE_PER FT_PER MPPG PPG TRPG APG
Walt Frazier 5 3 NA NA NA NA 1 NA NA 3 NA NA NA 1 NA NA NA
Patrick Ewing 3 5 NA 3 NA NA NA NA 5 5 3 NA NA NA NA NA NA
Gerald Wilkins 1 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
Carmelo Anthony NA 1 NA NA NA NA NA NA NA 1 NA 1 1 NA 1 NA NA
Tim Hardaway NA NA 5 NA NA NA NA NA NA NA NA NA NA NA NA NA NA
John Starks NA NA 3 NA NA NA NA NA NA NA NA NA NA NA NA NA NA
Jamal Crawford NA NA 1 NA NA NA NA NA NA NA NA NA NA NA NA NA NA
Richie Guerin NA NA NA 5 NA NA NA NA NA NA NA NA NA NA NA NA NA
Bill Cartwright NA NA NA 1 NA NA NA NA NA NA 5 NA NA NA NA NA NA
Charles Oakley NA NA NA NA 5 1 NA NA NA NA 1 NA NA NA NA NA NA
Tyson Chandler NA NA NA NA 3 NA NA NA NA NA NA NA NA NA NA NA NA
David Lee NA NA NA NA 1 NA NA NA NA NA NA NA NA NA NA NA NA
Willis Reed NA NA NA NA NA 5 NA NA NA NA NA NA NA NA NA 3 NA
Dave DeBusschere NA NA NA NA NA 3 NA NA NA NA NA NA NA NA NA NA NA
Mark Jackson NA NA NA NA NA NA 5 1 NA NA NA NA NA NA NA NA 5
Michael Ray Richardson NA NA NA NA NA NA 3 5 NA NA NA NA NA NA NA NA 3
Ray Williams NA NA NA NA NA NA NA 3 NA NA NA NA NA NA NA NA NA
Kristaps Porzingis NA NA NA NA NA NA NA NA 3 NA NA NA NA NA NA NA NA
Marvin Webster NA NA NA NA NA NA NA NA 1 NA NA NA NA NA NA NA NA
Trent Tucker NA NA NA NA NA NA NA NA NA NA NA 5 NA NA NA NA NA
Allan Houston NA NA NA NA NA NA NA NA NA NA NA 3 5 NA NA NA NA
Bill Bradley NA NA NA NA NA NA NA NA NA NA NA NA 3 NA NA NA NA
Bob McAdoo NA NA NA NA NA NA NA NA NA NA NA NA NA 5 5 NA NA
Latrell Sprewell NA NA NA NA NA NA NA NA NA NA NA NA NA 3 NA NA NA
Bernard King NA NA NA NA NA NA NA NA NA NA NA NA NA NA 3 NA NA
Walt Bellamy NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 5 NA
Harry Gallatin NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 1 NA
Stephon Marbury NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 1

The Greatest Knick

First let’s create a total variable and then create a bar chart

greatest$Total <- rowSums(greatest[2:18], na.rm=TRUE) 
greatest %>% arrange(desc(Total)) %>%
    select(Player,Total) %>%
    kable("html") %>%
    kable_styling(bootstrap_options = "striped",
                  full_width = F,
                  position = "left")
Player Total
Patrick Ewing 24
Walt Frazier 13
Mark Jackson 11
Michael Ray Richardson 11
Bob McAdoo 10
Willis Reed 8
Allan Houston 8
Charles Oakley 7
Bill Cartwright 6
Carmelo Anthony 5
Tim Hardaway 5
Richie Guerin 5
Trent Tucker 5
Walt Bellamy 5
John Starks 3
Tyson Chandler 3
Dave DeBusschere 3
Ray Williams 3
Kristaps Porzingis 3
Bill Bradley 3
Latrell Sprewell 3
Bernard King 3
Gerald Wilkins 1
Jamal Crawford 1
David Lee 1
Marvin Webster 1
Harry Gallatin 1
Stephon Marbury 1

Based on our findings we see that Patrick Ewing is the greatest Knick of all time, followed by Walt Frazier and Mark Jackson & Michael Ray Richardson.

As a Knick fan, the first two players make sense because they are both hall of famers. Surprinsingly, hall of famer Bernard King did not not rank higher. The remaining names with a score of 3 or higher have always been considered great Knicks sthat part of the analysis seems correct. If the Knicks want to start making changes they might need to obtain a high lottery pick like they did in 1985 with Patrick Ewing.