Analyze and visualize NBA franchise value - compare franchise value and broadcast rights fees
Every year, Forbes, an American business magazine, values the 30 NBA teams and publishes a ranking. The October 26, 2024 Latest ResourcesAccording to, Golden State Warriorstopped the list for the third year in a row with a value of $8.8 billion. The average NBA team is valued at $4.4 billion, up $151 TP3T year-over-year, reflecting the league's growth and popularity.

In this post, I'll show you an example of how to use R to analyze and visualize franchise value and broadcast rights data, based on Forbes' top 10 NBA franchise values for 2024.
NBA team valuation analysis
NBA team valuations are based on a combination of team revenue, operating income, market size, arena contracts, brand value, and more. The value of NBA teams fluctuates from year to year based on a variety of factors, including media rights deals, arena revenue, sponsorships, and more, and is closely tied to the economic growth of the league as a whole.
One of the major drivers of NBA team valuations in recent years has been the continued rise in broadcast rights fees. In July 2024, the NBA signed an 11-year broadcast rights deal with Disney (ESPN-ABC), NBC, and Amazon totaling $76 billion over 11 years, nearly triple the value of the previous deal. These large-scale deals significantly increase the revenue of the teams, which naturally has a positive impact on team valuation analysis.
1. Create a club value dataframe
First, prepare the NBA team value data. In this example, we create a dataframe with franchise names and values to create the base data for our analysis. Each franchise value is set to $100 million.
Generate # team value example data (in billions of dollars)
nba_teams <- data.frame(
Team = c("Warriors", "Knicks", "Lakers", "Celtics", "Clippers", "Bulls",
"Mavericks", "Rockets", "76ers", "Raptors", "Grizzlies"),
Value = c(88, 75, 71, 47, 46.5, 46, 45, 44, 43, 41, 30) # Unit: Billion Dollars
)Code description:
nba_teamsCreate a data frame named- A data frame has two rows (columns):
Team: a vector of strings representing team namesValue: a vector of numbers representing the value of each team (in billions of dollars)
TeamThe column contains the names of 11 NBA teams.ValueThe column contains the value for each team. For example, the Warriors are valued at $8.8 billion, the Knicks at $7.5 billion, and so on.- Annotations
# Units: Billion dollarsspecifies that the units in the Value column are in billions of dollars.
2. Calculate the average, highest, and lowest values for club values
Calculates the average value, highest value, and lowest value of a club, giving you a comprehensive understanding of the value of each club.
Calculate # average, highest, and lowest team values
mean_value <- mean(nba_teams$Value)
max_value <- max(nba_teams$Value)
min_value <- min(nba_teams$Value)
cat("Average team value:", mean_value, "billion dollars\n")
cat("Highest value team:", max_value, "billion dollars\n")
cat("Lowest value team:", min_value, "billion dollars\n")Code description:
- mean(nba_teams$Value): Calculates the average of the team values.
- max(nba_teams$Value): Calculate the highest team value.
- min(nba_teams$Value): Calculates the lowest team value and outputs it to the console.
3. visualize the distribution of club values (bar graph)
Visualize each club's value as a bar graph, with the average value as a red dashed line to make it easy to see the distribution of club values and their position relative to the average.
# Team value distribution visualization
library(ggplot2)
ggplot(nba_teams, aes(x = reorder(Team, -Value), y = Value)) +
geom_bar(stat = "identity", fill = "skyblue") +
geom_hline(yintercept = mean_value, linetype = "dashed", color = "red", size = 1) +
labs(title = "NBA Team Value Comparison", x = "Team", y = "Team Value (Billion USD)") +
theme_minimal() +
geom_text(aes(label = Value), vjust = -0.5, color = "blue") +
annotate("text", x = 1, y = mean_value + 5,
label = paste("Average Value:", round(mean_value), "Billion USD"), color = "red")Code description:
- geom_bar(stat = "identity", fill = "skyblue"): Represents the value of each club in a bar graph.
- geom_hline(yintercept = mean_value): Plot the mean of the club values as a red dashed line.
- geom_text(aes(label = Value)): Displays the club value above each bar for better readability.
- annotate(): Adds a label to the average value so that it is clearly visible in the graph.

4. Visualize the correlation between broadcast rights fees and team value (hypothetical data)
Let's analyze the relationship between broadcast rights fees and team value. We'll calculate the correlation between team value and broadcast rights fees and visualize it in a scatter plot to understand how broadcast rights fees affect team value. We'll use hypothetical values for the broadcast rights data for illustrative purposes.
# Add media rights data (hypothetical data)
nba_teams$Media_Rights <- c(2.5, 2.3, 2.2, 1.7, 1.6, 1.6, 1.6, 1.5, 1.4, 1.4, 1.4, 1.3, 1.0) # Unit: Billion USD
# Correlation analysis
cor_value_media <- cor(nba_teams$Value, nba_teams$Media_Rights)
cat("Correlation between team value and media rights:", cor_value_media, "\n")
# Scatter plot visualization
ggplot(nba_teams, aes(x = Media_Rights, y = Value)) +
geom_point(color = "darkgreen", size = 3) +
geom_smooth(method = "lm", col = "blue", se = FALSE) +
labs(title = "Correlation between Team Value and Media Rights",
x = "Media Rights (Billion USD)",
y = "Team Value (Billion USD)") +
theme_minimal()
geom_text(aes(label = Team), vjust = -0.5, color = "black") +
annotate("text", x = min(nba_teams$Media_Rights), y = max(nba_teams$Value),
label = paste("Correlation:", round(cor_value_media, 2)),
hjust = 0, vjust = 1, color = "red", size = 5)Code description:
- nba_teams$Media_Rights: Add broadcast rights data to analyze the relationship with team value.
- cat(): Calculate the correlation between club value and broadcast rights fee and print it to the console.
- geom_point(): Scatter plot of broadcast rights fees and club value.
- geom_smooth(method = "lm"): Add a linear regression line to visually represent the relationship between broadcast rights fees and club value.

Wrap-up: Visualizing NBA team value and broadcast rights fees
The example code above introduces a simple way to analyze and visualize the relationship between NBA franchise value and broadcast rights fees. These graphs allow you to analyze franchise value and intuitively see how broadcast rights fees affect franchise value. You can use this code to visualize a wide variety of data, and try your hand at sports data analysis!
As a side note, if you want to learn the basics of graphing data in R, check out the What is ggplot2? - Basic packages in R Visualization Basics Check out the post.




