本文目录导读:

板凳深度”(Bench Depth,即阵容替补实力)的评级打分,在Python数据分析中通常是一个多因子加权模型,核心逻辑是:不仅要看替补球员的数量,更要看替补球员的质量、位置覆盖度以及对主力阵容的替代能力。
以下是一个基于Python的实战案例逻辑拆解,分为数据准备、指标计算和打分模型三个部分。
第一步:定义核心指标(维度)
我们需要从5个维度去量化板凳深度,每个维度设置权重(总和为100分):
- 替补得分/篮板/助攻贡献度(权重 30%):替补场均数据与主力场均数据的比值。
- 位置覆盖度(权重 25%):替补是否在每个位置都有可靠人选(没有短板)。
- 效率值(PER)差值(权重 20%):替补整体效率值与联盟平均水平(通常设定为15)的对比。
- 比赛末节关键得分(权重 15%):衡量替补在“垃圾时间”或主力休息时的抢分能力。
- 伤病/轮换冗余度(权重 10%):当主力缺席时,替补是否具备“即插即用”的同位置顶替能力。
第二步:Python代码实现核心逻辑
import pandas as pd
import numpy as np
# 示例数据:假设这是某支球队的球员数据
data = {
'player': ['SGA', 'Chet', 'J-Dub', 'Giddey', 'Lugo', # 首发
'Wallace', 'Wiggins', 'Dieng', 'Mann', 'Poku'], # 替补
'position': ['PG', 'C', 'SF', 'SG', 'PF', # 首发
'PG', 'SF', 'SG', 'PG', 'PF'], # 替补
'starter': [1, 1, 1, 1, 1, 0, 0, 0, 0, 0], # 1=首发, 0=替补
'points': [30.1, 18.5, 22.0, 12.8, 14.2, # 首发
8.5, 9.1, 6.3, 5.9, 4.2], # 替补
'PER': [29.5, 24.8, 23.1, 17.3, 19.9, # 效率值
16.5, 15.8, 14.2, 13.1, 11.5],
'minutes': [35, 32, 34, 30, 28,
22, 20, 18, 15, 12]
}
df = pd.DataFrame(data)
# ---- 核心评级函数 ----
def bench_depth_score(df):
starters = df[df['starter'] == 1]
bench = df[df['starter'] == 0]
# 1. 得分贡献度(替补/主力)
score_contrib = bench['points'].sum() / starters['points'].sum()
score_contrib_score = min(score_contrib / 0.5, 1.0) * 30 # 替补得分达到主力50%为满分
# 2. 位置覆盖度(检查每个位置是否有替补)
starter_positions = set(starters['position'])
bench_positions = set(bench['position'])
coverage_ratio = len(starter_positions & bench_positions) / len(starter_positions)
coverage_score = coverage_ratio * 25
# 3. 替补效率值(PER)达标率
# 设定联盟平均PER=15,替补PER高于15视为优质替补
bench_per_mean = bench['PER'].mean()
per_efficiency = max(min(bench_per_mean / 15.0, 1.0), 0)
per_score = per_efficiency * 20
# 4. 得分效率(每分钟得分,衡量“微波炉”属性)
bench_pts_per_min = bench['points'].sum() / bench['minutes'].sum()
# 设定一个标准值,比如每分钟0.4分算合格
efficiency_score = min(bench_pts_per_min / 0.5, 1.0) * 15
# 5. 冗余度(同位置替补人数)
redundancy_score = min(len(bench) / len(starters), 1.0) * 10
# 总分
total_score = score_contrib_score + coverage_score + per_score + efficiency_score + redundancy_score
return {
'score': round(total_score, 1),
'details': {
'得分贡献(30分)': round(score_contrib_score, 1),
'位置覆盖(25分)': round(coverage_score, 1),
'PER效率(20分)': round(per_score, 1),
'得分效率(15分)': round(efficiency_score, 1),
'冗余度(10分)': round(redundancy_score, 1)
}
}
# 执行评级
result = bench_depth_score(df)
print(f"总得分: {result['score']} / 100")
print("明细:", result['details'])
# ---- 自动评级(S/A/B/C/D)----
def get_grade(score):
if score >= 85: return 'S级(顶级板凳)'
elif score >= 75: return 'A级(优秀板凳)'
elif score >= 65: return 'B级(合格板凳)'
elif score >= 50: return 'C级(薄弱板凳)'
else: return 'D级(极差板凳)'
grade = get_grade(result['score'])
print(f"评级结果: {grade}")
第三步:实战进阶——考虑“攻防两端”和“化学反应”
在真实的体育分析中,上述代码只是基础版,更科学的模型会引入:
- 净效率值(Net Rating):替补在场时球队的攻防效率差(使用
on/offcourt数据)。 - “死亡五小”/“超级第六人”:单独识别替补中PER>20的球员,给予额外加成。
- 伤病模拟(蒙特卡洛):跑10000次模拟,随机缺阵1-2名主力,看替补能否维持球队胜率。
代码示例(模拟伤病冗余):
# 简单模拟:随机抽掉一名首发,看替补顶上去后得分下降率
import random
def simulate_injury_safety(df, trials=1000):
starters = df[df['starter'] == 1].index.tolist()
safe_count = 0
for _ in range(trials):
injured = random.choice(starters)
injured_player = df.loc[injured]
# 找一个位置匹配的替补顶上
candidates = df[(df['starter'] == 0) & (df['position'] == injured_player['position'])]
if len(candidates) > 0:
# 计算原首发得分 vs 替补得分
drop_rate = 1 - (candidates['points'].max() / injured_player['points'])
if drop_rate < 0.3: # 得分下降不超过30%视为能顶住
safe_count += 1
safety_ratio = safe_count / trials
# 该比例直接作为“冗余度”修正因子
return safety_ratio
第四步:如何应用到实际项目?
在给出一份评级报告时,建议直接输出一个雷达图(使用matplotlib),直观展示五个维度的得分情况。
打分逻辑总结:
| 维度 | 权重 | 计算逻辑 |
|---|---|---|
| 得分贡献 | 30% | 替补总得分 / 主力总得分,达到50%为满分 |
| 位置覆盖 | 25% | 替补能覆盖的主力位置比例 |
| 效率值 | 20% | 替补平均PER / 15(联盟均值) |
| 得分效率 | 15% | 替补每分钟得分 / 0.5(基准值) |
| 冗余度 | 10% | 替补人数 / 主力人数 |
最终评级标准:
- S级(85+):如2023-24赛季的凯尔特人,拥有5名以上PER>15的替补。
- A级(75-84):如掘金,替补有稳定第六人。
- B级(65-74):替补有一定厚度但有明显短板。
- C级(50-64):主力缺阵后胜率会大幅下降。
- D级(<50):典型的“5巨头+边缘人”阵容。
这个模型的核心思想是:数字不会说谎,但权重要根据球队风格调整(例如进攻型球队提高得分权重,防守型球队则要提高防守效率权重),在实际操作中,您可以直接替换上面代码里的data字典为真实的球员场均数据,即可快速得到该球队的板凳深度评级。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播