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
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
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
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.
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).
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.
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.
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.
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.
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.
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.
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 |
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.
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.
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.
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 |
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.
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.
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)
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
For those who are new to the sport of basketball we will take an in-depth look at what each variable is:
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)
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
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.
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 |
#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.
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 |
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 |
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.
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 |
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 |
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 |
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.
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.
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 |
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.
#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.
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 |
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!
#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.
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 |
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 |
#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.
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 |
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 |
#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.
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 |
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 |
#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.
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 |
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 |
#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.
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 |
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%.
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 |
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%.
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 |
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%.
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 |
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 |
#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
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 |
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 |
#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
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 |
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 |
#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
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 |
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 |
#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
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 |
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.