NBA player and team analysis 2010-2024.

This data analysis uses six (6) raw data files located at the following site: https://github.com/NocturneBear/NBA-Data-2010-2024. These 6 files were cleaned and merged into two files, for analysis. These two files focus on Team data and Player data, both during the regular season and playoffs. The below code imports the two merged files that were previously cleaned and combined in the accompanied “R” file.

# Read in CSV files with data and load libraries
player_box_data <- read.csv("box_combined_data.csv")
team_box_data <- read.csv("team_combined_data.csv")
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(tidyr)
library(janitor)
## 
## Attaching package: 'janitor'
## The following objects are masked from 'package:stats':
## 
##     chisq.test, fisher.test
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats   1.0.0     ✔ readr     2.1.5
## ✔ ggplot2   4.0.0     ✔ stringr   1.5.1
## ✔ lubridate 1.9.4     ✔ tibble    3.3.0
## ✔ purrr     1.1.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(knitr)
library(lubridate)
library(ggplot2)
library(plotly)
## 
## Attaching package: 'plotly'
## 
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## 
## The following object is masked from 'package:stats':
## 
##     filter
## 
## The following object is masked from 'package:graphics':
## 
##     layout

Team Winning Percentage through the years

This code produces Figure 1, which overlays every NBA Team’s winning percentage from 2010-2024 seasons (indicated by the start year of those seasons as NBA seasons carry over into the New Year each season). These team winning percentages show the consistency (or lack of consistency) that each team experiences year to year. This can be a starting spot to assess coaches, players and general managers that performed with these teams during this time span to determine who adds value and who may not be a best fit for a franchise. Individual seasons are not usually a great indicator of coach, player or general manager performance as injuries and team dynamics can impact performance. An example of this is the Golden State Warriors (GSW) 2019 season with a .231 winning percentage as an anomaly as the only sub .500 winning percentage the GSW franchise since 2012. in But sustained success or sustained poor performance could indicate a positive or negative culture that owners may want to consider influencing. This can also impact where top performing NBA players choose to go in free agency as the bottom line for all teams comes down to their ability to win and the financial offering that those teams are willing to invest in players, coaches, equipment, facilities and fan experience.

team_box_data %>%
  filter(SEASON_TYPE == "Regular") %>%
  group_by(START_YEAR, TEAM_NAME) %>%
  summarise(Wins = sum(WL == "W"), Losses = sum(WL == "L"), .groups = 'drop') %>%
  mutate(Win_Percentage = Wins / (Wins + Losses)) %>%
  ggplot(aes(x = START_YEAR, y = Win_Percentage, color = TEAM_NAME)) +
  geom_line() +
  geom_point() +
  labs(title = "Win-Loss Percentage Over Seasons",
       x = "Season Year",
       y = "Win Percentage",
       color = "Team Name") +
  theme_minimal() +
  theme(legend.position = "bottom") -> p

ggplotly(p)

Figure 1. NBA Team Winning percentages from 2010-2024 (Interactive - click on Team Abbreviation in Legend to highlight corresponding data)

team_box_data %>%
  filter(SEASON_TYPE == "Regular") %>%
  group_by(START_YEAR, TEAM_NAME) %>%
  summarise(Wins = sum(WL == "W"), Losses = sum(WL == "L"), .groups = 'drop') %>%
  mutate(Win_Percentage = Wins / (Wins + Losses)) %>%
  ggplot(aes(x = START_YEAR, y = TEAM_NAME, fill = Win_Percentage)) +
  geom_tile() +
  scale_fill_gradient(low = "red", high = "lightblue") +
  labs(title = "Win-Loss Percentage Heatmap",
       x = "Season Year",
       y = "Team Name",
       fill = "Win Percentage") +
  theme_minimal() +
  theme(legend.position = "bottom") -> p

ggplotly(p)
## ggsave("win_loss_percentage_heatmap.png", plot = p, width = 10, height = 8) Use this code to save graph to an image to upload to tableau

Figure 2. Heat Map of NBA Team Winning percentages from 2010-2024 (interactive)

The Heat Map in Figure 2 gives an easy visual way to see where sustained culture of winning (and losing) exist, as well as where possible outlier seasons may exist due to potential one-off factors. Teams such as the Detroit Pistons have sustained poor performance and a downward trend in recent seasons, suggesting a change in personnel, culture or direction is likely necessary to bring about change to install a winning culture.

Are Free Throws predictive of Team Wins?

This model seeks to identify if Free Throw percentage or Free Throw attempts are an indicator of weather a game will be won or lost. If there is a correlation, coaches and players may consider creating additional opportunities to get opponents to foul them by using various screens, plays and body movement to initiate contact with an opponent when that opponent is not in a legal guarding position. This is a fairly common thought through basketball plays now, especially at the collegiate level. However, this section seeks to determine if that myth holds any weight at the NBA level. This section looks at Free Throw percentage and Free Throw Attempts (FTA) from 2010-2024 in both the regular season and playoffs.

Free Throw Percentage in Wins and Losses by Season

ggplot(team_box_data, aes(x = factor(START_YEAR), y = FT_PCT, fill = WL)) +
  geom_boxplot() +
  labs(title = "Boxplot of Winning and Losing Team Free Throw Percentage by Year",
       x = "Start Year",
       y = "Free Throw Percentage",
       fill = "Win/Loss") +
  scale_fill_manual(values = c("W" = "lightblue", "L" = "red")) +
  theme_minimal()

##ggsave("boxplot_free_throw_percentage.png", width = 10, height = 6)
##Use this code to save graph to an image to upload to tableau

Figure 3. Boxplot of Free Throw made percentages in wins and losses from 2010-2024 in the NBA including regular season and postseason.

ggplot(team_box_data, aes(, y = FTA, fill = WL)) +
  geom_boxplot() +
  labs(title = "Boxplot of Free Throw Percentage of Winning and Losing Teams (2010-2024)",
       y = "Free Throw Percentage",
       x = "Losing Teams                                      Winning Teams",
       fill = "Win/Loss") +
  scale_fill_manual(values = c("W" = "lightblue", "L" = "red")) +
  theme_minimal() +
  theme(axis.text.x = element_blank())

##ggsave("Boxplot free throw pct vs wins combined seasons.png", width = 10, height = 8) 
##Use this code to save graph to an image to upload to tableau

Figure 4. Boxplot of Combined Free Throw percentage in NBA Winning and Losing Teams from 2010-2024

ggplot(team_box_data, aes(x = WL, y = FTA, fill = WL)) +
  geom_violin() +
  labs(title = "Violin Plot of Free Throw Percentage of Winning and Losing Teams (2010-2024)",
       y = "Free Throw Percentage",
       x = "Losing Teams                                      Winning Teams",
       fill = "Win/Loss") +
  scale_fill_manual(values = c("W" = "lightblue", "L" = "red")) +
  theme_minimal() +
  theme(axis.text.x = element_blank())

##ggsave("Violin Plot free throw pct vs wins.png", width = 10, height = 8) 
##Use this code to save graph to an image to upload to tableau

Figure 5. Violin Plot of Combined Free Throw percentage in NBA Winning and Losing Teams from 2010-2024

Figure 3 shows that winning teams consistently make free throws at a slightly higher percentage in every year, but the median data point and the bottom and top of the box plot all are only approximately one percent higher in winning teams than in losing teams. Since teams are not expected to get anywhere near 100 free throws in any individual game, this approximately one percent is negligible as evident in Figure 4 where all data from 2010-2024 is combined into one plot). Figure 5 further demonstrates that the difference is negligible where the Violin Plots reveal almost the same shape, demonstrating the frequency and distribution of results is nearly identical and thus not a great predictor of future success on an individual game basis. There is a clear correlation, given the consistency of winning teams having higher marks over time, but not enough of an advantage for coaches or players to consider free throw percentage as an actionable part of the daily game plan to achieve wins. Instead, this consistently higher free throw percentage might be attributed to other factors such as the winning team getting more free throw attempts due to end of game fouls as the losing team plays to extend the game with additional possessions, or it could be that teams with better shooters (and thus better at free throws) are naturally on teams that win more, meaning free throw percentage may not be a good individual game plan issue, but could instead be a factor that general managers consider when determining which players to sign in free agency or in the draft, especially if they have high free throw percentages and fit the team in other facets of the game.

Do increased number of Free Throw Attempts drive increased field goal percentage in a game?

While listening to a sports broadcast of a basketball game (college or professional), if a player is struggling in their Field Goal Percentage and missing shots, or maybe a star player hasn’t taken many shots, you may hear the announcer say something similar to: “Sometimes all it takes is for a player to see the ball go through the hoop to get them started.” This phases (or a similar phrase) is often used when a player who is struggling, gets a chance to shoot free throws which are uncontested by any defense and a repetitive position that the player has likely practiced thousands of times. This comment is intended to cue the audience that even though the player is struggling, the next couple free throws may be all that player needs to get back their shooting form by calming their nerves and getting back to the basics of shooting. This re-baseline of their shot could get their in-game shot back into form, despite being contested by defensive pressure from the opposition. This is a comment that is also paraphrased at times in post-game press conferences by players and coaches.

However, is this bold claim actually the truth? Do additional free throw attempts really help improve in game shooting efficiency? If so, this could be the statistical proof that coaches and players could target during games to get their star players to the free throw line (or even have their players go shoot a few practice shots during a timeout rather than wait for free throws, pending the venue and league allow such action).

To test this theory, the below charts in Figures 6 shows a scatterplot of Free Throw Efficiency vs Field Goal Percentage for every player and every game from 2010-2024 on an individual game basis.

ggplot(player_box_data, aes(x = FTA, y = FG_PCT)) +
  geom_point() +
  geom_smooth(method = "lm", se = TRUE, color = "blue") +
  labs(title = "Scatterplot of Free Throw Attempts vs Field Goal Percentage",
       x = "Free Throw Attempts",
       y = "Field Goal Percentage") +
  theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'

##ggsave("scatterplot FTA vs FG PCT.png", width = 10, height = 8) 
##Use this code to save graph to an image to upload to tableau

Figure 6. Scatterplot of Free Throw Attempts vs Field Goal Percentage in a game (with correlation line)

Figure 6 is a good place to start, but due to the large quantity of data and the limited number of possible outcomes, a regression line is necessary to give a visual cue of the weighted averages to understand if there is any trend. While this blue regression line in Figure 6 does show a positive correlation suggesting that more free throw attempts increase field goal shooting percentage in a game (for each player), the graph loses viability somewhere between 10-20 free throws in the game, even showing that the regression line expects shooters that take approximately 22+ free throws in a game to have a 100% field goal percentage in those games, despite not a single incident occurring in the past 15 years of any player shooting 100% from the field in a game where they took 19+ Free Throws. This scatterplot does show how the number of occurrences of players shooting more than 25 Free Throws in a game becomes very small. Table 1 (below) shows the specific number of observations of each outcome, highlighting that only 16 times in the past 15 years, did a player shoot 26+ Free Throws in a game, making the data outliers among the 455,663 observations during that time span.

fta_table <- player_box_data %>%
  group_by(FTA) %>%
  summarise(`Number of Observations` = n()) %>%
  rename(`Free Throw Attempts` = FTA)

knitr::kable(fta_table)
Free Throw Attempts Number of Observations
0 242469
1 21345
2 77093
3 20623
4 35443
5 13448
6 16107
7 7453
8 7564
9 3931
10 3523
11 1967
12 1601
13 916
14 733
15 462
16 320
17 208
18 180
19 87
20 62
21 49
22 26
23 14
24 14
25 9
26 4
27 3
28 2
29 1
32 1
34 2
36 1
39 2

Table 1. Free Throw Attempt Table with raw data of number of observations at each number of free throw attempts

Since many players are bench players and only play a couple minutes and may or may not take any free throws or make any shots from the field in limited minutes, Figure 7 removes the incidents where the player attempted zero Free Throws in the game. While it is likely that we are leaving out a few results from key players, the reduction of the 242,469 observations where players attempted zero free throws should help clear the data of many bench players and those that played very few minutes in the game and were likely not involved enough to draw any hard conclusions in this study. This action removed over 53% of the observations from the data. The new correlation scatterplot is visible in Figure 7.

player_box_data_filtered <- player_box_data[player_box_data$FTA > 0, ]

ggplot(player_box_data_filtered, aes(x = FTA, y = FG_PCT)) +
  geom_point() +
  geom_smooth(method = "lm", se = TRUE, color = "blue") +
  labs(title = "Scatterplot of Free Throw Attempts vs Field Goal Percentage per person per game",
       x = "Free Throw Attempts",
       y = "Field Goal Percentage") +
  theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'

##ggsave("Scatterplot FTA vs FG PCT minus zero FTA data.png", width = 10, height = 8) 
##Use this code to save graph to an image to upload to tableau

Figure 7. Scatterplot of Free Throw Attempts vs Field Goal Percentage in a game without Zero Free Throw Attempts observations (with correlation line)

By removing the “zero” Free Throw Attempt observations (more than half the observances, in an attempt to remove players that mostly did not affect the game’s outcome), there remains a correlation line between Free Throw Attempts and Field Goal Percentage. However, this relationship is only a slightly positive relationship and could be skewed by the presence of players that scored Zero field goals made despite attempting between 1 - 14 Free Throws in a game. Table two indicates the number of players that did not attempt a field goal despite having 1 -14 Free Throws.

fg_pct_table <- player_box_data %>%
  filter(FTA != 0) %>%
  group_by(FG_PCT) %>%
  summarise(`Number of Observations` = n()) %>%
  rename(`Field Goal Percentage` = FG_PCT)

knitr::kable(fg_pct_table)
Field Goal Percentage Number of Observations
0.000 10858
0.056 3
0.059 1
0.063 2
0.067 6
0.071 10
0.077 48
0.083 58
0.091 130
0.100 199
0.105 5
0.111 438
0.118 7
0.125 707
0.133 39
0.136 2
0.143 1276
0.150 5
0.154 175
0.158 15
0.167 2082
0.174 2
0.176 65
0.182 578
0.188 98
0.190 20
0.192 2
0.200 3650
0.207 1
0.208 7
0.211 54
0.212 1
0.214 361
0.217 14
0.222 1519
0.227 19
0.231 552
0.233 3
0.235 190
0.238 53
0.240 10
0.241 1
0.250 6599
0.259 9
0.261 32
0.263 156
0.265 1
0.267 526
0.269 13
0.273 1518
0.276 5
0.278 256
0.280 27
0.281 1
0.286 3839
0.290 2
0.292 40
0.294 442
0.296 20
0.297 2
0.300 2176
0.303 1
0.304 74
0.308 1289
0.310 12
0.313 706
0.314 1
0.316 334
0.318 145
0.320 47
0.321 21
0.323 7
0.324 1
0.333 13836
0.342 1
0.343 1
0.344 6
0.345 21
0.346 52
0.348 151
0.350 353
0.351 1
0.353 758
0.355 9
0.357 1492
0.360 86
0.361 1
0.364 2732
0.367 12
0.368 523
0.370 51
0.371 3
0.375 4907
0.378 2
0.379 17
0.381 384
0.382 4
0.385 2139
0.386 1
0.387 11
0.389 836
0.390 2
0.391 235
0.393 42
0.394 4
0.395 1
0.400 9468
0.406 2
0.407 73
0.409 334
0.410 2
0.412 1160
0.414 33
0.417 2748
0.419 15
0.421 777
0.423 102
0.424 8
0.429 6494
0.433 19
0.435 294
0.436 2
0.438 1516
0.440 173
0.441 4
0.444 4676
0.447 2
0.448 38
0.450 651
0.452 27
0.455 3439
0.457 3
0.458 245
0.459 3
0.462 2322
0.463 1
0.464 47
0.467 1732
0.469 11
0.471 1303
0.472 5
0.474 812
0.476 500
0.478 292
0.480 161
0.481 88
0.483 33
0.484 16
0.485 10
0.486 3
0.488 1
0.500 27003
0.514 6
0.515 15
0.516 10
0.517 34
0.519 82
0.520 142
0.522 279
0.524 482
0.525 2
0.526 715
0.529 1088
0.531 9
0.532 1
0.533 1584
0.536 49
0.538 2132
0.541 2
0.542 171
0.543 1
0.545 2925
0.548 11
0.550 485
0.552 50
0.556 3995
0.559 2
0.560 104
0.563 1126
0.565 201
0.567 17
0.568 1
0.571 5334
0.576 5
0.577 77
0.579 566
0.581 15
0.583 2040
0.585 1
0.586 17
0.588 742
0.591 252
0.593 25
0.594 4
0.595 1
0.600 7465
0.606 3
0.607 20
0.609 121
0.611 474
0.613 12
0.615 1383
0.618 1
0.619 181
0.621 9
0.625 3526
0.630 18
0.632 286
0.633 5
0.636 1766
0.640 49
0.643 824
0.645 3
0.647 417
0.650 178
0.652 64
0.654 16
0.655 6
0.657 1
0.667 10007
0.676 1
0.677 1
0.679 13
0.680 15
0.682 51
0.684 133
0.688 321
0.690 2
0.692 707
0.696 22
0.700 1354
0.704 3
0.706 191
0.708 21
0.714 2450
0.720 5
0.722 95
0.724 1
0.727 809
0.731 3
0.733 219
0.737 61
0.739 11
0.741 1
0.750 4435
0.758 1
0.760 2
0.762 11
0.765 71
0.769 283
0.773 7
0.778 871
0.783 4
0.786 153
0.789 10
0.792 2
0.800 2310
0.810 6
0.813 28
0.818 286
0.824 18
0.826 2
0.833 1351
0.842 2
0.846 71
0.850 4
0.857 788
0.867 18
0.870 1
0.875 438
0.882 2
0.889 240
0.895 1
0.900 139
0.909 56
0.917 21
0.923 13
0.929 9
0.933 2
1.000 6523

Table 2. Count of observations of various Field Goal Percentage results

Table 2 shows there are 10,858 Instances of players having zero made field goals who also attempted Free Throws. These are players that had the opportunity to shoot free throws but were unable to score any actual in-game baskets during the game. Some of these players may be players that were put into the game at the end when the opposition is fouling to extend the game, meaning they would not have the opportunity for any in game field goal attempts. Figure 8 (below), shows what the correlation is between Free Throws Attempted and Field Goal percentage if both the observations for zero free throw attempts and zero field goals made are removed.

data_remove_zero_FTA <- player_box_data[player_box_data$FTA > 0 & player_box_data$FG_PCT != 0, ]

ggplot(data_remove_zero_FTA, aes(x = FTA, y = FG_PCT)) +
  geom_point() +
  geom_smooth(method = "lm", se = TRUE, color = "blue") +
  labs(title = "Scatterplot of Free Throw Attempts vs Field Goal Percentage",
       x = "Free Throw Attempts",
       y = "Field Goal Percentage") +
  theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'

##ggsave("Scatterplot FTA vs FG PCT minus all zero values1.png", width = 10, height = 8) 
##Use this code to save graph to an image to upload to tableau

Figure 8. Scatterplot of Free Throw Attempts vs Field Goal Percentage in a game without Zero Free Throw Attempts observations or zero field goals made (with correlation line)

With the “zero” observations removed from both Free Throw Attempts and Field Goal Percentage, there is actually a negative correlation. This is unique and somewhat unexpected as this suggests the opposite of what broadcasters, announcers, coaches and players have said repeatedly regarding a struggling player just needing to “see the ball go through the hoop” to get their scoring rhythm and confidence back. However, this negative correlation is so slight that it essentially suggests there is no correlation at all once a player that attempts free throws actually scores one basket in the game. For this reason, it is possible that a struggling player who hasn’t made a single basket during the game, might be able to improve their shot ability in game by getting to the free throw line, however, the data suggests that after even one basket is made by that player, there may no longer be any valid correlation to seek getting to the foul line any more.

If this is true, then have broadcasters, coaches and players simply been making this up to tell the fans as a convenient excuse or way to draw intrigue from the fans? Or is there more to their claims that are not yet visible in this study. Perhaps the correlation only applies to Guards who are known for distance shooting, or to Centers who are known for their work around the rim. Additional analysis is necessary to determine, but at the very least, this study suggests that if a shooter is struggling, getting them to the Free Throw Line can be helpful until they see the first shot from the field go in. After that, the correlation ceases to exist and coaches and players ought to find other ways to spur offensive production when players are struggling in a game.

weighted_data <- player_box_data %>%
  group_by(SEASON_TYPE, FTA) %>%
  summarise(weighted_avg_FG_PCT = weighted.mean(FG_PCT, FTA, na.rm = TRUE), .groups = 'drop')

ggplot(weighted_data, aes(x = FTA, y = weighted_avg_FG_PCT, color = SEASON_TYPE)) +
  geom_point() +
  geom_line() +
  geom_smooth(method = "lm", se = FALSE) +  # Add correlation line
  labs(title = "Weighted Average of Free Throw Attempts vs Field Goal Percentage",
       x = "Free Throw Attempts",
       y = "Weighted Average Field Goal Percentage") +
  theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 2 rows containing non-finite outside the scale range
## (`stat_smooth()`).
## Warning: Removed 2 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 2 rows containing missing values or values outside the scale range
## (`geom_line()`).

##ggsave("Weighted AVG FTA and FG PCT.png", width = 10, height = 8) 
##Use this code to save graph to an image to upload to tableau

Figure 9. Weighted average trend line results for Free Throw Attempts with Field Goal Percentage (Playoffs and Regular Season)

weighted_data <- player_box_data %>%
  group_by(SEASON_TYPE, FTA) %>%
  summarise(weighted_avg_FG_PCT = weighted.mean(FG_PCT, FTA, na.rm = TRUE), .groups = 'drop')

filtered_data2 <- weighted_data %>%   # Filter for FTA ranging from 1 to 20 to cut off outlier FTA data
  filter(FTA >= 1 & FTA <= 20)

ggplot(filtered_data2, aes(x = FTA, y = weighted_avg_FG_PCT, color = SEASON_TYPE)) +
  geom_point() +
  geom_line() +
  geom_smooth(method = "lm", se = FALSE) +  # Add correlation line
  labs(title = "Weighted Average of Free Throw Attempts vs Field Goal Percentage",
       x = "Free Throw Attempts",
       y = "Weighted Average Field Goal Percentage") +
  theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'

##ggsave("Weighted AVG FTA and FG PCT playoff and reg season.png", width = 10, height = 8) 
##Use this code to save graph to an image to upload to tableau

Figure 10. Weighted average trend line results fro Free Throw Attempts with Field Goal Percentage (Playoffs and Regular Season); capped at 20 Free Throws to remove outliers

Figures 9 and 10 show the weighted averages of number of observations by type and where those average fall in each number of Free Throw Attempts, separated by both the Regular Season and Playoffs. In Figure 9, there appears to be a much stronger correlation between Free Throw Attempts and Field Goal Percentage. However, since weighted averages can oversimplify the number of observations in each Free Throw Attempt category, Figure 10 shows only Free Throw attempts 1 - 20, removing the highest outliers. The results is a near identical result for Playoff and Regular Season results, again, suggesting almost no correlation between Free Throw Attempts and Field Goal Percentage either in the regular Season or in the Playoffs.

Recommendation

General Managers, Owners, Coaches and even players in Free Agency, should strongly consider winning percentage trends when making decisions on where to sign and which players/coaches to employ in an NBA organization, There are strong year-to-year correlations between winning organizations and losing organizations over a prolonged 15 year period that transcends that majority of playing years for most active NBA players. If a team is losing and consistently getting worse, then ownership or general managers ought to consider making significant changes possibly with the coaching staff or other impact personnel with the organization. In the same manner, owners and general managers of teams that have consistent winning success should try to keep their coaches and other pieces that produce that culture while also allowing potential single-season outliers of poor performance to not necessarily cause drastic changes. Some flexibility should be allowed for organizations with string successful culture.

Additionally, Broadcasters and coaches alike are often heard saying phrases similar to “games are won and lost at the free throw line”. While this might be true, in the data suggests that in the NBA, Free Throws are not a reliable method to break a players slump unless they have not yet made a single basket from the field. Once that player makes a single basket from the field, the coach and players on the team should employ different tactics to spur offensive production in a struggling player or team.