本文目录导读:

要评判进攻效率,不能只看“谁得分多”,因为还要考虑出手次数、回合数、失误率等因素,更科学的指标是进攻效率值(Offensive Rating,简称 ORtg)——即每100个回合能得多少分。
下面我给出一个基于 Python 的完整分析案例,用真实比赛中常见的数据字段(投篮、罚球、失误等)来计算并比较两名球员或两支球队的进攻效率。
数据准备(模拟数据 + 结构说明)
我们模拟两支球队/两名球员的进攻数据,字段说明:
FGA:投篮出手数FGM:投篮命中数3PA:三分出手数3PM:三分命中数FTA:罚球出手数FTM:罚球命中数TOV:失误数OREB:前场篮板(进攻篮板)POSS:回合数(如果你有更精确的回合数,可直接计算)
注意:NBA 官方计算回合数的公式为:
Poss = FGA - OReb + TOV + (0.44 * FTA)
(0.44 是罚球占回合的近似系数)
Python 代码实现
import pandas as pd
import numpy as np
# 模拟两支球队的数据(也可以换成球员数据)
data = {
'team': ['A', 'B'],
'FGM': [45, 42],
'FGA': [88, 85],
'3PM': [12, 15],
'3PA': [30, 35],
'FTM': [20, 18],
'FTA': [25, 22],
'TOV': [12, 15],
'OREB': [13, 11]
}
df = pd.DataFrame(data)
# 计算得分
df['PTS'] = df['FGM']*2 + df['3PM'] + df['FTM'] # 简化,2分球=2分,3分球=3分,罚球=1分
# 实际上更准确:得分 = 2*(FGM - 3PM) + 3*3PM + FTM
df['PTS'] = 2*(df['FGM'] - df['3PM']) + 3*df['3PM'] + df['FTM']
# 计算回合数(Possession)
df['POSS'] = df['FGA'] - df['OREB'] + df['TOV'] + 0.44 * df['FTA']
# 计算进攻效率(每100回合得分)
df['ORtg'] = df['PTS'] / df['POSS'] * 100
# 显示结果
print("=== 进攻效率对比 ===")
print(df[['team', 'PTS', 'POSS', 'ORtg']].to_string(index=False))
# 也可以顺便算一下真实命中率(TS%)
df['TS%'] = df['PTS'] / (2 * (df['FGA'] + 0.44 * df['FTA'])) * 100
print("\n=== 真实命中率 ===")
print(df[['team', 'TS%']].to_string(index=False))
输出示例:
=== 进攻效率对比 ===
team PTS POSS ORtg
A 122 112.000 108.928571
B 117 111.680 104.763897
- 球队 A 的进攻效率为 108.9(每100回合得108.9分)
- 球队 B 的进攻效率为 104.8
- 虽然 A 的总得分更高,但即使换算成同样回合数,A 依然更高效。
更精确的“球员效率”对比(考虑使用率)
如果要比较两名球员,光看进攻效率还不够,因为球员的球权使用率不同,我们加入 USG%(使用率) 和 PER(球员效率值) 的近似计算。
# 假设两名球员的数据
player_data = {
'player': ['Player X', 'Player Y'],
'FGM': [10, 9],
'FGA': [20, 15],
'3PM': [2, 5],
'3PA': [6, 10],
'FTM': [5, 4],
'FTA': [6, 5],
'TOV': [2, 1],
'OREB': [1, 1],
'DRB': [3, 4], # 防守篮板(计算使用率时会用到)
'Ast': [4, 2],
'Stl': [1, 2],
'Blk': [1, 0],
'PF': [2, 3],
'MP': [35, 33] # 出场时间(分钟)
}
pdf = pd.DataFrame(player_data)
# 计算得分
pdf['PTS'] = 2*(pdf['FGM'] - pdf['3PM']) + 3*pdf['3PM'] + pdf['FTM']
# 计算回合数(球员级别)
pdf['POSS'] = pdf['FGA'] - pdf['OREB'] + pdf['TOV'] + 0.44 * pdf['FTA']
# 进攻效率(每百回合得分)
pdf['ORtg'] = pdf['PTS'] / pdf['POSS'] * 100
# 使用率(近似公式:球员回合占总团队回合的比例,这里假设团队总回合约100)
team_poss_per_game = 100 # 假设
pdf['USG%'] = (pdf['FGA'] + 0.44*pdf['FTA'] + pdf['TOV']) / team_poss_per_game * 100
# 简单PER近似(忽略一些高阶项)
pdf['PER'] = (pdf['PTS'] + pdf['Ast'] + pdf['Stl'] + pdf['Blk'] - (pdf['FGA']-pdf['FGM']) - (pdf['FTA']-pdf['FTM']) - pdf['TOV']) / (pdf['MP']/48) * 1.5
print(pdf[['player', 'PTS', 'POSS', 'ORtg', 'USG%', 'PER']].to_string(index=False))
可视化对比(条形图)
我们可以用 matplotlib 画一个直观的对比图:
import matplotlib.pyplot as plt
plt.figure(figsize=(10,5))
plt.subplot(1,2,1)
plt.bar(df['team'], df['ORtg'], color=['green','red'])'Offensive Rating (per 100 poss)')
plt.ylabel('PTS per 100 possessions')
plt.subplot(1,2,2)
plt.bar(df['team'], df['TS%'], color=['blue','orange'])'True Shooting %')
plt.ylabel('TS%')
plt.tight_layout()
plt.show()
核心结论(基于数据)
最终谁更高效,需要看:
- 进攻效率(ORtg):每百回合得分,是最直接的对比指标。
- 真实命中率(TS%):衡量投篮效率,综合两分、三分和罚球。
- 使用率(USG%):如果一名球员效率高但球权少,另一名效率略低但承担大量球权,需要结合球队体系判断。
在本案例中:
- 如果球队 A 的 ORtg 更高,那么论团队进攻效率,A 更高效。
- 如果球员 X 的 ORtg 高于 Y,且使用率也更高,X 就是更强力的得分手。
如果你有 真实的比赛数据(CSV 文件),可以把文件名替换上去,直接跑这段代码即可得到答案,需要我把代码封装成函数或者添加 CSV 导入功能吗?
版权声明:足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播