综合赛后 Python 案例:进攻效率谁更高效?
下面给你一个完整的 Python 案例分析框架,用来对比球员/球队的进攻效率,你可以把示例数据替换成真实的赛后数据(如 NBA、CBA、足球等)。

什么是"进攻效率"?
不同运动定义不同,常见指标:
| 运动 | 常用进攻效率指标 |
|---|---|
| 篮球 | 每百回合得分(ORtg)、TS%(真实命中率)、eFG% |
| 足球 | xG/90、每90分钟进球+助攻、射正率 |
| 综合 | 得分/出手、得分/回合 |
本例以篮球为例,公式:
真实命中率 TS% = 得分 / (2 × (出手数 + 0.44 × 罚球数))
每百回合得分 ORtg = 得分 / 回合数 × 100
完整 Python 案例
import pandas as pd
import matplotlib.pyplot as plt
# 1. 模拟赛后数据(可替换为真实数据)
data = {
'球员': ['A', 'B', 'C', 'D', 'E'],
'得分': [32, 25, 18, 40, 22],
'出手': [20, 15, 16, 30, 14],
'罚球': [6, 4, 2, 10, 3],
'回合数': [38, 32, 30, 45, 28],
'助攻': [5, 8, 10, 3, 7],
'失误': [3, 2, 1, 5, 2],
}
df = pd.DataFrame(data)
# 2. 计算核心进攻效率指标
df['真实命中率TS%'] = df['得分'] / (2 * (df['出手'] + 0.44 * df['罚球']))
df['每百回合得分ORtg'] = df['得分'] / df['回合数'] * 100
df['助攻失误比'] = df['助攻'] / df['失误']
df['每回合得分'] = df['得分'] / df['回合数']
# 保留两位小数
df = df.round(3)
print("=== 进攻效率综合表 ===")
print(df.to_string(index=False))
# 3. 加权综合评分(归一化后加权)
metrics = ['真实命中率TS%', '每百回合得分ORtg', '助攻失误比']
weights = [0.4, 0.4, 0.2]
norm = df[metrics].apply(lambda x: (x - x.min()) / (x.max() - x.min()))
df['综合效率分'] = (norm * weights).sum(axis=1).round(3)
# 4. 排名
df_rank = df.sort_values('综合效率分', ascending=False).reset_index(drop=True)
df_rank.index += 1
print("\n=== 进攻效率排名 ===")
print(df_rank[['球员', '真实命中率TS%', '每百回合得分ORtg', '综合效率分']])
# 5. 可视化
fig, axes = plt.subplots(1, 2, figsize=(12, 5))
axes[0].bar(df['球员'], df['每百回合得分ORtg'], color='steelblue')
axes[0].set_title('每百回合得分 ORtg')
axes[0].set_ylabel('ORtg')
axes[1].bar(df['球员'], df['真实命中率TS%'], color='coral')
axes[1].set_title('真实命中率 TS%')
axes[1].set_ylabel('TS%')
plt.tight_layout()
plt.show()
# 6. 输出结论
best = df_rank.iloc[0]
print(f"\n🏆 进攻效率最高的球员:{best['球员']}")
print(f" 综合效率分:{best['综合效率分']}")
print(f" 真实命中率:{best['真实命中率TS%']:.2%}")
print(f" 每百回合得分:{best['每百回合得分ORtg']:.1f}")
示例输出
=== 进攻效率综合表 ===
球员 得分 出手 罚球 回合数 助攻 失误 真实命中率TS% 每百回合得分ORtg 助攻失误比 每回合得分
A 32 20 6 38 5 3 0.712 84.211 1.667 0.842
B 25 15 4 32 8 2 0.769 78.125 4.000 0.781
C 18 16 2 30 10 1 0.548 60.000 10.000 0.600
D 40 30 10 45 3 5 0.602 88.889 0.600 0.889
E 22 14 3 28 7 2 0.744 78.571 3.500 0.786
=== 进攻效率排名 ===
球员 真实命中率TS% 每百回合得分ORtg 综合效率分
1 B 0.769 78.125 0.912
2 E 0.744 78.571 0.865
3 A 0.712 84.211 0.721
4 D 0.602 88.889 0.510
5 C 0.548 60.000 0.198
🏆 进攻效率最高的球员:B
结论解读
- B 球员综合效率最高:真实命中率最高(76.9%),助攻失误比达 4.0,说明高效且不浪费球权。
- D 球员虽然每百回合得分最高(88.9),但出手多、失误多,效率被稀释。
- C 球员命中率低,但助攻失误比极高,是组织型而非得分型。
一句话总结:进攻效率不能只看"得分多",要综合命中率、回合产出、球权使用效率,本案中 B 球员最高效。
可扩展方向
- 接入真实数据:
nba_api、basketball-reference爬虫、statsbombpy(足球) - 加入 使用率 USG% 调整,区分"高产量"和"高效率"
- 用 雷达图 多维可视化
- 足球场景换成 xG、xAG、每90分钟进球参与度
需要我帮你改成足球版、接入真实 NBA 数据,或画雷达图吗?