根据python案例,板凳深度如何评级打分?

wen python案例 1

本文目录导读:

根据python案例,板凳深度如何评级打分?

  1. 第一步:定义核心指标(维度)
  2. 第二步:Python代码实现核心逻辑
  3. 第三步:实战进阶——考虑“攻防两端”和“化学反应”
  4. 第四步:如何应用到实际项目?

板凳深度”(Bench Depth,即阵容替补实力)的评级打分,在Python数据分析中通常是一个多因子加权模型,核心逻辑是:不仅要看替补球员的数量,更要看替补球员的质量、位置覆盖度以及对主力阵容的替代能力

以下是一个基于Python的实战案例逻辑拆解,分为数据准备指标计算打分模型三个部分。


第一步:定义核心指标(维度)

我们需要从5个维度去量化板凳深度,每个维度设置权重(总和为100分):

  1. 替补得分/篮板/助攻贡献度(权重 30%):替补场均数据与主力场均数据的比值。
  2. 位置覆盖度(权重 25%):替补是否在每个位置都有可靠人选(没有短板)。
  3. 效率值(PER)差值(权重 20%):替补整体效率值与联盟平均水平(通常设定为15)的对比。
  4. 比赛末节关键得分(权重 15%):衡量替补在“垃圾时间”或主力休息时的抢分能力。
  5. 伤病/轮换冗余度(权重 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/off court数据)。
  • “死亡五小”/“超级第六人”:单独识别替补中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字典为真实的球员场均数据,即可快速得到该球队的板凳深度评级。

上一篇综合python案例,新帅上任蜜月期有多久?

下一篇当前分类已是最新一篇

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