Two numbers separate "scored a lot" from "good at scoring": usage (how much of the offense runs through a player) and efficiency (how many points they produce per shot). The exciting players are high on both. The empty-calories scorers are high usage, low efficiency. Let's compute both from public box scores and build a leaderboard. Full code: scripts/cbb-player-usage-efficiency-python.py.
The two formulas
True Shooting % = PTS / (2 * (FGA + 0.475 * FTA)) * 100
Shot load / 40 = (FGA + 0.475 * FTA + TOV) / MIN * 40
True shooting is the gold-standard efficiency stat: it counts twos, threes, and free throws together, so a 40% three-point shooter and a 55% two-point shooter are compared fairly. Shot load per 40 is a clean usage proxy — the scoring chances a player "uses" (shots, fouls drawn, turnovers) per 40 minutes. (Full usage rate scales this by team possessions; the per-40 version needs only the player's own line and ranks players almost identically.)
Aggregate the season
Pull player box scores, sum each player's totals, keep the rotation players, and compute:
import sportsdataverse.mbb as mbb
df = mbb.load_mbb_player_boxscore(seasons=[2025]).to_pandas()
agg = df.groupby("athlete_display_name").agg(
MIN=("minutes","sum"), FGA=("field_goals_attempted","sum"),
FTA=("free_throws_attempted","sum"), TOV=("turnovers","sum"),
PTS=("points","sum")).reset_index()
agg = agg[agg.MIN >= 500]
agg["TS"] = agg.PTS / (2 * (agg.FGA + 0.475 * agg.FTA)) * 100
agg["used40"] = (agg.FGA + 0.475 * agg.FTA + agg.TOV) / agg.MIN * 40
The result
Qualified players (>= 500 min): 2,386
Highest usage (shot load per 40 min):
TY Johnson used/40 30.7 TS% 48.1 pts/40 25.1
Jemel Jones used/40 28.3 TS% 55.9 pts/40 28.2
Jordan Marsh used/40 27.8 TS% 53.3 pts/40 26.3
Most efficient high-usage scorers (used/40 >= 18, by TS%):
Daniel Batcho TS% 72.0 used/40 19.7 pts/40 24.1
Graham Ike TS% 65.6 used/40 25.7 pts/40 30.1
Vladislav Goldin TS% 65.4 used/40 21.8 pts/40 24.1
Actual output, sportsdataverse / hoopR, 2024-25, retrieved June 2026.
The two lists tell different stories. The highest-usage players carry their offenses — TY Johnson used a remarkable 30.7 chances per 40 — but high volume doesn't guarantee efficiency (his 48.1% true shooting is below average). The efficient high-usage list is where stars live: Graham Ike at 25.7 used/40 and 65.6% true shooting is doing a lot, very well. That combination — heavy load, high efficiency — is what scouts and ratings prize, because it's hard and rare.
Use it well
- Set a minutes floor. Without one, a walk-on who hit one shot tops the TS% list. We required 500 minutes; raise it for stars only.
- Read the pair, not the single. TS% alone rewards low-usage role players; usage alone rewards chuckers. The interesting players are high on both.
- Women's game: change
mbbtowbb— same columns, same code. - Going further: true usage rate also needs team possessions while the player is on the floor; pull team box scores and scale by minutes for the textbook formula.
Sources & further reading
- sportsdataverse / hoopR — sportsdataverse.org
- Companion code:
scripts/cbb-player-usage-efficiency-python.py - Related: The four factors · Pull basketball data