综合赛后python案例,进攻效率谁更高效?

wen python案例 5

本文目录导读:

综合赛后python案例,进攻效率谁更高效?

  1. 数据准备(模拟数据 + 结构说明)
  2. Python 代码实现
  3. 更精确的“球员效率”对比(考虑使用率)
  4. 可视化对比(条形图)
  5. 核心结论(基于数据)

要评判进攻效率,不能只看“谁得分多”,因为还要考虑出手次数、回合数、失误率等因素,更科学的指标是进攻效率值(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()

核心结论(基于数据)

最终谁更高效,需要看:

  1. 进攻效率(ORtg):每百回合得分,是最直接的对比指标。
  2. 真实命中率(TS%):衡量投篮效率,综合两分、三分和罚球。
  3. 使用率(USG%):如果一名球员效率高但球权少,另一名效率略低但承担大量球权,需要结合球队体系判断。

在本案例中

  • 如果球队 A 的 ORtg 更高,那么论团队进攻效率,A 更高效。
  • 如果球员 X 的 ORtg 高于 Y,且使用率也更高,X 就是更强力的得分手。

如果你有 真实的比赛数据(CSV 文件),可以把文件名替换上去,直接跑这段代码即可得到答案,需要我把代码封装成函数或者添加 CSV 导入功能吗?

抱歉,评论功能暂时关闭!