Clustering NBA Shot Charts -Part 2

My previous blog post showed how cluster-able NBA shot charts were. I recently made a few improvements to the model and looked into things that I didn’t look into in the previous article.

A quick summary of that article is that I generated a 14 dimensional vector with shot frequencies for different locations on the court. Then I ran k-means clustering on this vector for each player over a season.

Most of the methodology is the same between the two, so please read the other article for more depth.

Number of Clusters

In my previous iteration, I used 3 clusters. However, I generated a plot that aimed to find the optimal number of clusters. Using the ‘elbow-method’ for k-means clustering, I found that the optimal number of clusters was probably a bit more, around 5.

Clustering Results

After running the clustering algorithm, these were 5 example shot charts for each cluster.

Since we added more clusters, I interpreted what each of these clusters meant.

Cluster 0 seems to represent players who mainly shoot in the paint, but can shoot outside the paint. They don’t shoot many threes. My assumption is that these players used to be traditional big man but are in the transition of becoming stretch forwards.

Cluster 1 seems to represent players who shoot threes and shots in the paint (Moreyball ideals). However, they seem to shoot more threes than paint shots.

Cluster 2 seems to represent players who prefer to shoot midrange shots.

Cluster 3 seems to represent players who play in the paint and leave the paint extremely rarely.

Cluster 4 seems to represent players who shoot threes and shots in the paint (Moreyball ideals). However, they seem to shoot more paint shots than threes.

These are some of the notable players from each of the clusters. Interestingly, LeBron James and Joel Embiid are in the same cluster. Obviously they are not the same type of player, but their shooting tendencies are quite similar. This is why adding something like assist data could be beneficial to the performance of this model.

I was curious so I looked at the Rockets’ distribution of clusters for 2018-19 and this is what I got.

In comparison, this is what the Knicks were.

This highlights that the Rockets really rely on Moreyball a lot (fitting :D), and mainly focus on the three-point aspect of their strategy. Further, the Knicks distribution shows that the Knicks aren’t that progressive in their methods (we knew that).

I then cross referenced the cluster with some statistics to see which clusters relied on the ball a bit more.

These two charts show how the midrange cluster tends to have more opportunity than other clusters. Personally, I believe this has to do with the close correlation between people who shoot from midrange and their reliance on isolation basketball. Players like Kevin Durant, Jimmy Butler, and Carmelo Anthony all fall into this cluster and they are known for playing isolation basketball.

I also cross referenced the clusters with some player statistics, like three point percentage and field goal percentage.

These two graphs help us see that cluster 1 shoots a lot of threes, as they have a higher three point percentage than all the other clusters, but a lower field goal percentage. Further, we can confirm that cluster 3 is the “traditional big man” and is full of extremely poor three point shooters.

Interestingly cluster 2 and cluster 4 have similar percentages for both three point percentages and field goal percentages. However, cluster 2 shoots less threes and more mid-range jumpers, which in general, is less efficient. This is highlighted with EFG% below.

undefined

Cluster 0 is also quite poor at shooting, but they still venture out of the paint more often than cluster 3. When we watch Giannis and Anthony Davis play, we can easily identify this, as we know they are trying to expand their game to the three point shot. However, they are not that efficient from the three point line at the moment.

These graphs also further confirm that midrange players are the least efficient shooters in terms of EFG% and that traditional big men (or merely players who don’t deviate much from the pain) are the most efficient in this sense.

Cluster Distribution Over Time

In the previous blog post, I generated different clusters for each of these years. However, I thought it would be interesting to use the same clusters and see how the distribution of the clusters changed over time.

We see that cluster 2 used to be the most popular for many years. However, with the rise of Moreyball and efficiency, we see that cluster 1 and 4 have become more popular in recent years.

The distribution of the clusters, interestingly, did not change much from 1999-00 to 2008-09. Over this entire timeframe, the number of midrange players decreased slightly, but it is not noticeable. Only recently do we see this complete change in the distribution of clusters.

Future Work

I want to see if I can correlate these clusters to win percentage in some way. This way, we can see what clusters directly translate to winning. I also want to add other mapped data (such as where assists were made from, where rebounds were taken) and see if this helps better cluster players.

You can view all of the players in each of the clusters here https://docs.google.com/spreadsheets/d/1OphZnMi5a0vYPI_QZ1q8mRANT68oocZVQeKJIAK6nv4/edit?usp=shar

Clustering NBA Shot Charts – Part 1

Methodology

In the NBA, we often assign labels to players, not really looking in depth on what constitutes these labels. Something that we can do to figure out the “definition” of these labels and see whether these labels actually exist is to use an algorithm known as k-means-clustering to cluster shot charts (to find similar shot charts given a set of features).

My approach for clustering the shot charts was to bin groups of shots, much like we do sometimes with visualization. By binning the groups of shots, it means I used data in the form of a vector, highlighting the frequency for individual locations, like so.

Binned FGM/FGA Shot Chart for James Harden

I separated shots into 14 locations as given by the stats.nba.com API, and I created a 14×1 vector per player over each season, containing the shot frequency for each location on the court. The locations are highlighted in the shot chart above. The reason I do not include the field goal percentage is because I was trying to highlight tendencies of the player, and FGP is irrelevant to that in my opinion.

I can’t use the actual raw X-Y coordinates because players take a different number of shots per game, which would make the dimensions of the vector different for every player. This would prevent the usage of k-means clustering on the data.

I ran the clustering algorithm, with the steps highlighted above, for two separate time frames, to see how the clusters have changed over time. The two time frames I selected were the “2016-17”, “2017-18”, “2018-19” (recent) seasons and the “1999-00”, “2000-01”, “2001-02” (old) seasons.

Results

The number I decided on for the number of clusters was 3, but that was an arbitrary number. I can definitely try with a larger number of clusters and see where that takes me.

I first ran UMAP dimensionality reduction and highlighted different clusters, just to verify that there was something to highlight.

UMAP for recent years
UMAP for old years

It’s obviously not easy to make any conclusions from this UMAP visualization alone, so I took some samples from all of the clusters highlighted by the algorithm.

Above, each row represents one cluster highlighted by the algorithm. The first row is obviously a cluster that highlights players that do not deviate from the paint much. It includes players like Dwight Howard and Ben Simmons.

However, the other two clusters that the algorithm highlighted seem extremely similar (2 and 3). Personally, I don’t see any stark differences between the two clusters, but in general, it seems like the second cluster is more inclined to “Moreyball”, meaning people in the second cluster take less mid-range shots than do people of the second cluster. However, the difference seems very low-key so I’m not really sure.

These are the relative amounts of each cluster in the overall dataset. It makes sense, as the number of players who only play in the paint is very low.

Here, the first row highlighted seems to be players who exemplify the “perimeter game”. This makes sense as the perimeter game was very prominent in the seasons we’re looking at.

The second cluster seems to highlight players who mainly rely on the mid-range game, and don’t really venture much into three-point-range. The third cluster seems to use the mid-range game, but also goes to three point game. The distinction between these two isn’t too eye-catching.

These are the relative frequencies of each cluster in the dataset. The mid-range game was quite prominent during this age, and the algorithm seems to agree.

Conclusion

Really, the only cluster that seems to exist in both eras of basketball is the cluster with mid-range and three-point shooters. This really speaks to the quickly changing nature of basketball. The perimeter two is not being used much at all, nor is the pure mid-range game. This is clearly the result of analytics in the sport, as these shots just don’t provide as many points per shot taken.

There are definitely things that I can do better in this project. If you have any suggestions, I can definitely try implementing them.

All the code is at https://github.com/avyayv/blogposts/blob/master/clustershotcharts/

Thanks to Savvas Tjortjoglou for his code for outlining the NBA court in matplotlib.

How useful (or useless) are preseason statistics for rookies?

Zion Williamson has been phenomenal this preseason for the New Orleans Pelicans. This has led to various opinions in the basketball world on how Zion will perform in the regular season.

Some say that Zion is going to be an All-Star in his rookie season. In fact, Stephen A. Smith made the bold claim that Zion’s rookie season will mirror Shaquille O’ Neal’s, based off Zion’s unparalleled efficiency in the paint.

To examine this idea more objectively, I attempted to look at a general case rookies in the preseason and the regular season and isolate some key statistics. One thing to take note of that affect interpretation of these results:

Teams have extreme variability of schedules in the preseason. For instance, one team could be playing a strong Lakers team each game, while another team plays teams like the Shanghai Sharks. Thus, it is tough to generalize anything from preseason to regular season. However, for the purposes of this article, we will assume that this will not affect player/team statistics by a wide margin.

I looked at three different basic statistics (points per game, assists per game, rebounds per game) in the regular season vs. the preseason. I plotted these values on separate histograms for regular season and preseason statistics.

These stats show that show that the overall spread of points scored during the regular season is skewed more right than the preseason points per games for rookies.

To examine this further, I wanted to look at whether players were less efficient during the regular season, or whether one of the main causes for this was because of less opportunity during the regular season.

A dot of this size indicates that the players minutes played stayed constant.

In this scatter plot, the size of the dot corresponds to the rate of the increase of time played. Mathematically, it is simply expressed as

(MPG_{regular season})/(MPG_{preseason}) * k

This constant value is just so that one can distinguish between the sizes of the dots.

If you look closely at this plot, there is a clump of small dots below the line. (which is the line that represents the values staying the same). This means that most of these players received far less minutes during the regular season, which will in turn, skew the points per game histogram more to the right.

Thus, we can assume that rookies maintain fairly similar point averages across the preseason and the regular season. We can also generalize this to assists, with the same type types of plots.

We can see from this plot that regular season assist averages are also more skewed right than preseason assist averages.

A dot of this size indicates that the players minutes played stayed constant.

And again, we see the same trend as we did with points. However the data is far more clumped near zero, which makes sense. Most players do not have the ball in their hands in order to facilitate too much.

When we look at rebounds, however, we can see that the distributions remain fairly similar across the regular season and the preseason.

A dot of this size indicates that the players minutes played stayed constant.

When we look at the scatter plot for this graph, it looks like the number of points above the y=x line and the number of points below the line and above the line seems around the same.

There is obviously some correlation between preseason stats and regular season. The main bottleneck for rookie players which causes regular season statistics to dip is that rookie players do not get as many opportunities in the regular season as they do in the preseason.

However, we should expect Zion to continue to be the main man for the New Orleans Pelicans, and with his body frame and ability to score at will, don’t expect too much of a drop off in regular season statistics.

A Quick 3 or a Quick 2?

Nearly every day in the NBA (playoffs included), there are close games that come down to the wire. We see teams with 3, 4, or 5-point deficits with only a shot-clock remaining quite often, and one of the questions commentators always ask during this situation is:

Do you go for the quick 2 and intentionally foul (and hope that the opponent will miss a free throw) or go for a three?

A lot of the time (we saw this with the Houston vs Golden State series), teams decide to go for the quick two, but other times, they go for the three (in the Golden State vs Portland series). Although it was a 3-point game in the latter game, versus a 5-point deficit in the second one, there should be some simple analytical way of determining when a team should go for the 3 or go for a 2.

Golden State is known for its shooting. Although we mainly consider Golden State to be a great 3-point shooter, GSW is full of great free-throw shooters as well. In the clutch, Steph shoots 97 percent from the line, which is one of the best in the league. In addition, Klay shot 100 percent from the line in the clutch this season, while Durant shot 91 percent. This means that the Warriors have at least 3 great options (out of 5) to give it to when they have a small lead with little time left.

Given all of these options, we’ll assume that the free throw percentage for the Warriors when they are intentionally fouled is 90% (which is obviously conservative). 
In addition, we will assume that the average 2 point percentage in the clutch is 55 percent (for the opposing team)while the average 3 point percentage in the clutch is 30 percent (for the opposing team).

Now assuming it is a 3 point game and the opposing team has the ball, we have a couple scenarios:

1. Shoot a 3 -> tie the game
2. Shoot a 2 -> intentionally foul -> opposing team misses a free throw -> Shoot a 2
3. Shoot a 2 -> intentionally foul -> opposing team misses both free throws -> Shoot a 2
4. Shoot a 2 -> intentionally foul -> opposing team makes both free throws -> Shoot a 3

In all of these cases, the opposing team will catch up, but is it more likely to beat the Warriors by shooting a 3 on that play or shooting a 2 on that play?

Well, when you compute the probabilities using some simple multiplication, you get that the probability of winning when you shoot:

A THREE = 31.52%
A TWO = 19.11 %

Clearly, you should go for the three, and no matter what Mark Jackson and Stan Van Gundy said, this is the case.

However, this is only for the Warriors case. What if you have a bad free throw shooting team. Well, we can represent this as a graph, where the independent variable is the probability that the team with the lead makes their free-throw and the dependent variable is the probability of tying the game. (we are going to assume that the 3PT%=30%, while the 2PT%=55% for all teams)

In the above graph, the green line represents taking a three while the white line represents taking a two. Clearly, teams should always shoot the 3 when they are down 3 and have the ball.

Now let’s see what happens if it’s a 4 point game:
There are more possibilities if its a 4 point game, but we’ll remove some of them when we are generating the model (the ones that are essentially negligible because there is such a low probability that it will occur).

1. Shoot a 3 -> intentionally foul -> opposing team misses a free throw -> Shoot a 2
2. Shoot a 3 -> intentionally foul -> opposing team misses both free throws -> Shoot a 2
3. Shoot a 3 -> intentionally foul -> opposing team makes both free throws -> Shoot a 3
4. Shoot a 2 -> intentionally foul -> opposing team misses a free throw -> Shoot a 3
5. Shoot a 2 -> intentionally foul -> opposing team misses both free throws -> Shoot a 2
6. Shoot a 2 -> intentionally foul -> opposing team makes both free throws -> Shoot a 3 ……

When you are playing against the Warriors, the probabilities are like so:

A THREE = 10.43%
A TWO = 5.47 %
Again, we see that the probability to tie is higher when you go for a three versus if you go for a two. Again, we represent this with a graph, with the same X and Y variables.

Interestingly, it is better to go for the two when the opposing team has bad free throw shooting (< 79%) and you are down 4. However, if you have a high FT%, you should always go for the 3. At ~79% FT% it does not matter whether you go for the 2 or if you go for the 3.

Finally, we’ll look at the 5 point game case (the hopeless cause, basically).
At this point, you can basically accept the loss if you are playing against the Warriors. You need basically everything to line up in your favor (missed free throws, made threes, made twos). More concretely you need one of the following:

1. Shoot a 3 -> intentionally foul -> opposing team misses a free throw -> Shoot a 3
2. Shoot a 3 -> intentionally foul -> opposing team misses both free throws -> Shoot a 2
3. Shoot a 3 -> intentionally foul -> opposing team makes both free throws -> Take the L, basically
4. Shoot a 2 -> intentionally foul -> opposing team misses a free throw -> Take the L, basically
5. Shoot a 2 -> intentionally foul -> opposing team misses both free throws -> Shoot a 3
6. Shoot a 2 -> intentionally foul -> opposing team makes both free throws -> Take the L, basically ……

Against the Warriors:

A THREE = 1.59%
A TWO = 0.647%
With that probability to tie up the game, you should just take the loss 😞. Below, is the same graph as above, but for a five-point game.

CONCLUSION: There are different situations when teams should go for the 3 and the 2, but when it’s a 3 point game, ALWAYS go for the 3. Also, when you play the Warriors, you should always go for the 3. We should expect at least 2 close games this year during the finals, with the Raptors on the losing side. If the Raptors can play by this strategy, they should be able to win at least one of these games.

Playmaking in the Playoffs vs. the Regular Season

The 2019 NBA Playoffs have been excellent, with teams playing at their absolute best. We’ve seen teams like the Warriors and the Bucks absolutely dominate, but how have these teams, along with other teams, changed their playmaking strategies? For instance, if we look at the Bucks in the Playoffs, they have obviously decided to make Giannis drive into the paint more and pass out less. This is due to the fact that Giannis’s points in the paint generate more points per shot (field goal percentage*a three or a two) than would a three-point shooter typically.

However, the Bucks have obviously employed a different strategy than did other teams in the playoffs. For instance, we know that the Denver Nuggets’ whole strategy depended on Nikola Jokic. However, it wasn’t his extraordinary ability to score that makes Jokic so great. Instead, it is his ability to make plays and get his teammates points, that allows Jokic’s team to win games. Thus, we saw the Nuggets embrace this strategy.
I expressed this idea of teams looking for playmaking with a simple statistic (Points from Assists adjusted for usage rate inflation). This stat basically allowed me to see 
  i) the quality of the passes (if they didn’t pass well, the passes wouldn’t translate into points)   ii) the number of passes (if they didn’t pass often, they wouldn’t generate points)
Then, I graphed these players on a graph to see how (in general) teams change their strategies with regards to passing and playmaking.

In the graph above, the red line represents a player whose points from assists does not change in the playoffs. However, we see that the try line of best fit here has a slope that is slightly lower than 1 (actually it is about 0.79 with an R^2 of 0.65). This shows that teams in today’s league are becoming more focused on playing through a star player in the playoffs, as we have seen with the effects of superstars in the league. 
Although we saw (in my previous post) that teams typically employ the same usage rate to important players in the playoffs vs in the regular season, we see here that teams typically make their players shoot more and pass less. Instead of getting points off of assists like they did in the regular season, they find it more beneficial to score through their star players.
However, outliers in this dataset remain. Steph Curry has actually created more points from assists in the playoffs than he did in the regular season. We’ve seen this with the type of play the Warriors play. 

Usage Rate – Regular Season vs. Playoffs

When we look at games in the playoffs, we see completely different strategies employed by teams. Star players seem to be more relied on than they would in the regular season, while players with smaller roles seem to be less useful than in the regular season. This ‘hunch’ can be represented with a graph of usage rates in the playoffs vs in the regular season. Here is a graph (with a line created with a basic linear regression algorithm).

This graph’s line has a slope of 0.966, which basically means that overall, players normally do not deviate from their regular season usage rate. However, the R^2 value (which here is essentially a metric that evaluates how good of a line of best fit is) is 0.679, which isn’t that good (The optimal R^2 value in statistics is 1.0). Further, when we examine the graph, we see that players with considerably higher usage rate tend to be above the line of best fit.

To isolate player’s into different types, I decided to split players by the number of minutes. I split them into the following groups:

  • 35+ Minutes in the regular season
  • 25-35 Minutes in the regular season
  • 15-25 Minutes in the regular season
  • 5-15 Minutes in the regular season

35+ Minutes (Slope = 1.01, R^2 = 0.808)

The graph above is quite interesting as it shows that heavily relied on players do not typically get used more in the Playoffs. Rather, they get used about as often in the playoffs versus in the regular season. The R^2 value is also close to one, so the line is fairly accurate in predicting this underlying relationship.

25-35 Minutes (Slope = 0.938, R^2 = 0.695)

With the slope of this graph, we see that players who play 25-35 minutes seem to get the ball less often than in the regular season. However, interestingly, the spread between the points and the line is more than with the players with more than 35+ minutes (This is shown with the lower R^2 value as well). This means that players who have 25-35 minutes have more variation in their usage rate.
15-25 Minutes (Slope = 0.907, R^2 = 0.521)

Here, we see that there is an even lower slope but also a lower R^2 value. This means that variation is even higher than players with 25-35 minutes and on average players get less usage. With this low of an R^2 value, the line of best fit barely works as a guideline. This means we cannot really predict how much the player’s usage rate will change in the playoffs. In the next group, we will see an even better example of this.

5-15 Minutes (Slope = 0.877,  R^2 = 0.292)

When we look at this graph, we see that there really isn’t much of a trend in the data. This means that when a player’s minutes are this low, there isn’t a real correlation between a player’s usage rate in the regular season vs. in the playoffs. Instead, it requires more data (i.e a player’s points per minute, assists per minute, etc).

To see what actually determines usage at these lower percentages, I trained a neural network where I inputted some basic stats per minute, offensive rating, defensive rating, along with the player’s usage rate in the regular season. This got me a much higher R^2 Value for these lower minute value, which shows what teams really look for in these players who get fewer minutes. For the actual neural network code and the rest of the code used for this post look here.

Conclusion
When players are more relied on (play more minutes), they are more likely to keep the same usage rate. However, as the number of minutes that a player plays decreases, the variation increases tremendously. Thus, player efficiency is integral to determine how much a player will be used at these lower minute values.

Player Trajectories



Using the stats.nba.com API data and matplotlib, I recently developed a pretty cool visual to see how players’ points (adjusted by usage rate and minute) changed over time. This means that an excess of usage leading to extra points will not affect the quantified improvement over time. The graph above shows the average player who scored >15 pts at least once during his career. Let’s see some actual players on this graph.

The x-axis represents the players’ year in the league(ex. rookie season would be 1, sophomore season 2, etc.) and the Y-axis represents the players’ improvement relative to the base year. A negative value would mean that the player has gotten worse since the rookie season and a positive value means they have gotten better since their rookie year.

For the actual code used for this you can go here.

1. Pascal Siakam

For those doubting that Siakam has improved tremendously, the numbers don’t lie. This serious Most Improved Player candidate has shown that he is truly a force to be reckoned with. Now, does this graph mean he is a phenomenal player already? No.

This graph is relative on the player’s first year, which basically means it is measured based on the players’ improvement since he started in the league. Thus, it shows improvement since the base year, not how good the player actually is.

SeasonAge2P%eFG%FTFTAFT%ORBDRBTRBASTSTLBLKTOVPFPTS
2016-1722.515.5050.40.6.6881.22.23.40.30.50.80.62.04.2
2017-1823.612.5370.71.1.6211.03.54.52.00.80.50.82.07.3
2018-1924.602.5913.03.8.7851.65.36.93.10.90.71.93.016.9
Career.592.5641.41.9.7431.23.85.12.00.70.61.22.410.1

Data courtesy Basketball-Reference.com.

2. LeBron James

At first glance, this may look a little suspicious. Does this graph say that LeBron is worse than Siakam? No!

Again, this graph acts comparatively to the player’s first season. This means that the player’s point production, adjusted for usage rate and minute changes, is measured against his own point production at the beginning of his career.

So, what does this graph mean for LeBron? Surprisingly, LeBron has been pretty average in maintaining his averages on the average player graph. This means, his improvement has basically been perfectly modeled by the average 15+ point scoring player in the NBA.

However, recently (after his 13th season), he began to break off of this trend as he has surged greatly in the last few years, making these last few years some of his best in his career. In fact, instead of following the trend at year 13, James completely defied this trend, going the exact opposite direction. Although he did not make the playoffs, this year was probably one of his most efficient shooting years.

We would expect that LeBron James would take a major hit in the next 1 or 2 years. It is very likely that LeBron’s value will drop by a great amount next year, as his success is clearly not sustainable. However, he is LeBron James, so we can never know what will happen 😅.

3. Stephen Curry

Steph is a strange case. His career started off extraordinarily but after his first season, he was clearly on a downward trend. However, after becoming considerably worse and worse, Curry began to take his skills back during his 5th season in the league (disclaimer: he didn’t actually lose his skill; it was probably because he shot less because of Monta Ellis). Compared with other players, Curry reached his prime late, and it doesn’t seem like he is on a downward trend either.

Some More Players
I won’t explain these in detail, but you should be able to see how players improved/deteriorated.

4. Michael Carter-Williams

SeasonAge2P%eFG%FTFTAFT%ORBDRBTRBASTSTLBLKTOVPFPTS
2013-1422.440.4313.75.2.7031.44.86.26.31.90.63.53.016.7
2014-1523.428.4163.14.4.6941.04.45.36.71.70.53.82.514.6
2014-1523.412.4062.94.4.6431.05.16.27.41.50.44.22.515.0
2014-1523.457.4353.44.4.7800.83.14.05.62.00.53.22.614.1
2015-1624.472.4662.03.0.6540.94.25.15.21.50.82.83.011.5
2016-1725.401.3911.31.7.7530.52.93.42.50.80.51.52.36.6
2017-1826.365.3621.41.7.8200.71.92.72.20.80.41.01.94.6
2018-1927.424.4151.11.9.6040.71.82.52.50.70.50.71.74.8
2018-1927.429.4670.81.6.4620.20.60.81.30.60.40.61.74.3
2018-1927.419.3631.72.3.7411.33.44.84.10.90.80.81.85.4
Career.433.4232.33.3.7020.93.64.54.61.30.62.52.510.9
2 seasons.429.4223.44.9.6831.34.96.26.71.70.53.82.816.0
2 seasons.467.4552.43.4.7050.93.94.75.31.70.72.92.912.4
1 season.365.3621.41.7.8200.71.92.72.20.80.41.01.94.6
1 season.401.3911.31.7.7530.52.93.42.50.80.51.52.36.6
1 season.429.4670.81.6.4620.20.60.81.30.60.40.61.74.3
1 season.419.3631.72.3.7411.33.44.84.10.90.80.81.85.4

Data courtesy Basketball-Reference.com.5. Derrick Rose

SeasonAge2P%eFG%FTFTAFT%ORBDRBTRBASTSTLBLKTOVPFPTS
2008-0920.491.4822.43.1.7881.22.73.96.30.80.22.51.516.8
2009-1021.500.4953.34.3.7660.82.93.86.00.70.32.81.220.8
2010-1122.481.4855.96.9.8581.03.14.17.71.00.63.41.725.0
2011-1223.475.4735.06.1.8120.72.73.47.90.90.73.11.321.8
2012-1324
2013-1425.359.4022.73.2.8440.92.33.24.30.50.13.41.515.9
2014-1526.465.4503.03.7.8130.72.53.24.90.70.33.21.217.7
2015-1627.449.4482.22.7.7930.72.73.44.70.70.22.71.316.4
2016-1728.487.4773.54.0.8741.02.83.84.40.70.32.31.318.0
2017-1829.474.4541.61.8.8700.50.91.41.50.30.21.40.68.4
2017-1829.481.4622.22.6.8540.61.21.81.60.20.31.80.99.8
2017-1829.458.4350.60.61.0000.30.30.71.20.40.00.80.25.8
2018-1930.509.5182.73.1.8560.62.12.74.30.60.21.61.118.0
Career.481.4773.44.1.8240.92.63.55.60.80.32.71.318.8
7 seasons.478.4743.64.4.8130.92.83.76.20.80.42.91.419.7
1 season.487.4773.54.0.8741.02.83.84.40.70.32.31.318.0
2 seasons.505.5122.42.8.8610.61.82.43.90.60.21.51.016.2
1 season.481.4622.22.6.8540.61.21.81.60.20.31.80.99.8

Data courtesy Basketball-Reference.com.6. Kevin Durant

SeasonAge2P%eFG%FTFTAFT%ORBDRBTRBASTSTLBLKTOVPFPTS
2007-0819.455.4514.95.6.8730.93.54.42.41.00.92.91.520.3
2008-0920.486.5106.17.1.8631.05.56.52.81.30.73.01.825.3
2009-1021.506.5149.210.2.9001.36.37.62.81.41.03.32.130.1
2010-1122.504.5097.68.7.8800.76.16.82.71.11.02.82.027.7
2011-1223.535.5476.57.6.8600.67.48.03.51.31.23.82.028.0
2012-1324.539.5598.49.3.9050.67.37.94.61.41.33.51.828.1
2013-1425.549.5608.79.9.8730.76.77.45.51.30.73.52.132.0
2014-1526.565.5785.46.3.8540.66.06.64.10.90.92.71.525.4
2015-1627.569.5736.26.9.8980.67.68.25.01.01.23.51.928.2
2016-1728.608.5945.46.2.8750.67.68.34.81.11.62.21.925.1
2017-1829.565.5865.35.9.8890.56.46.85.40.71.83.02.026.4
2018-1930.587.5715.76.5.8850.45.96.45.90.71.12.92.026.0
Career.532.5426.87.7.8830.76.37.14.11.11.13.11.927.0
9 seasons.517.5307.28.1.8820.86.27.03.71.21.03.21.927.4
3 seasons.586.5835.56.2.8830.56.67.15.40.81.52.71.925.8

Data courtesy Basketball-Reference.com.7. Russell Westbrook

SeasonAge2P%eFG%FTFTAFT%ORBDRBTRBASTSTLBLKTOVPFPTS
2008-0920.415.4144.35.2.8152.22.74.95.31.30.23.32.315.3
2009-1021.438.4284.05.1.7801.73.14.98.01.30.43.32.516.1
2010-1122.451.4546.57.7.8421.53.14.68.21.90.43.92.521.9
2011-1223.482.4815.26.3.8231.53.14.65.51.70.33.62.223.6
2012-1324.466.4705.67.0.8001.43.95.27.41.80.33.32.323.2
2013-1425.482.4805.36.4.8261.24.55.76.91.90.23.82.321.8
2014-1526.457.4558.19.8.8351.95.47.38.62.10.24.42.728.1
2015-1627.503.4895.87.2.8121.86.07.810.42.00.34.32.523.5
2016-1728.459.4768.810.4.8451.79.010.710.41.60.45.42.331.6
2017-1829.485.4775.27.1.7371.98.210.110.31.80.34.82.525.4
2018-1930.481.4684.16.2.6561.59.611.110.71.90.54.53.422.9
Career.465.4655.77.1.8011.75.37.08.41.80.34.12.523.0

Data courtesy Basketball-Reference.com.8. James Harden

SeasonAge2P%eFG%FTFTAFT%ORBDRBTRBASTSTLBLKTOVPFPTS
2009-1020.424.4842.63.2.8080.62.63.21.81.10.31.42.69.9
2010-1121.514.5183.54.2.8430.52.63.12.11.10.31.32.512.2
2011-1222.579.5825.06.0.8460.53.64.13.71.00.22.22.416.8
2012-1323.477.5048.610.2.8510.84.14.95.81.80.53.82.325.9
2013-1424.515.5297.99.1.8660.83.94.76.11.60.43.62.425.4
2014-1525.480.5118.810.2.8680.94.75.77.01.90.74.02.627.4
2015-1626.494.5128.810.2.8600.85.36.17.51.70.64.62.829.0
2016-1727.530.5259.210.9.8471.27.08.111.21.50.55.72.729.1
2017-1828.531.5418.710.1.8580.64.85.48.81.80.74.42.330.4
2018-1929.528.5419.711.0.8790.85.86.67.52.00.75.03.136.1
Career.506.5257.38.5.8570.84.55.26.21.60.53.62.624.3
7 seasons.506.5248.810.2.8610.85.16.07.71.80.64.42.629.0
3 seasons.506.5293.64.3.8350.52.93.42.51.10.31.62.512.7

Data courtesy Basketball-Reference.com.9. Giannis Antetokounmpo

SeasonAge2P%eFG%FTFTAFT%ORBDRBTRBASTSTLBLKTOVPFPTS
2013-1419.440.4631.82.6.6831.03.44.41.90.80.81.62.26.8
2014-1520.511.4963.24.3.7411.25.56.72.60.91.02.13.112.7
2015-1621.537.5203.75.1.7241.46.27.74.31.21.42.63.216.9
2016-1722.563.5415.97.7.7701.87.08.85.41.61.92.93.122.9
2017-1823.554.5456.58.5.7602.18.010.04.81.51.43.03.126.9
2018-1924.641.5996.99.5.7292.210.312.55.91.31.53.73.227.7
Career.557.5394.66.2.7421.66.78.34.11.21.32.63.018.8

Data courtesy Basketball-Reference.com.10. Klay Thompson

SeasonAge2P%eFG%FTFTAFT%ORBDRBTRBASTSTLBLKTOVPFPTS
2011-1221.460.5201.21.4.8680.42.12.42.00.70.31.62.312.5
2012-1322.437.5091.61.9.8410.43.33.72.21.00.51.92.916.6
2013-1423.464.5331.82.3.7950.52.63.12.20.90.51.72.918.4
2014-1524.481.5552.93.3.8790.42.93.22.91.10.81.91.621.7
2015-1625.510.5692.42.8.8730.43.43.82.10.80.61.71.922.1
2016-1726.516.5652.42.8.8530.63.03.72.10.80.51.61.822.3
2017-1827.526.5851.11.3.8370.43.43.82.50.80.51.81.620.0
2018-1928.516.5531.72.0.8160.53.43.82.41.10.61.52.021.5
Career.491.5511.92.3.8480.43.03.52.30.90.51.72.119.5

Data courtesy Basketball-Reference.com.