python案例如何评估夏窗引援的性价比?

wen python案例 3

本文目录导读:

python案例如何评估夏窗引援的性价比?

  1. 项目目标
  2. 第一步:模拟数据准备
  3. 第二步:特征工程与成本核算
  4. 第三步:球员能力评分模型(加权评分)
  5. 第四步:性价比计算与评估
  6. 第五步:可视化——性价比散点图
  7. 第六步:输出分析报告(自动生成结论)
  8. 输出的预期效果预览
  9. 如何把案例调整到符合现实?

评估足球俱乐部夏窗引援的性价比,是一个结合体育数据经济模型机器学习的综合分析项目。

下面我为你设计一个完整的Python案例框架,从数据清洗、球员价值建模到性价比评分,并提供可直接运行的代码示例。


项目目标

计算每位新援的“性价比指数”,公式核心为: [ 性价比 = \frac{球员即战力(预测表现)}{转会总成本(转会费 + 预估薪资)} ]


第一步:模拟数据准备

由于我们无法实时抓取转会市场数据,这里使用 pandas 生成模拟数据,包含球员的转会费、周薪、上赛季进球、助攻、年龄、出场次数等特征。

import pandas as pd
import numpy as np
# 设置随机种子保证结果可复现
np.random.seed(42)
# 模拟2024年夏窗10位重磅引援(数据为演示虚构)
data = {
    'player': ['姆巴佩', '贝林厄姆', '凯恩', '赖斯', '麦卡利斯特',
               '格瓦迪奥尔', '哈弗茨', '芒特', '索博斯洛伊', '托纳利'],
    'club': ['皇马', '皇马', '拜仁', '阿森纳', '利物浦',
             '曼城', '阿森纳', '曼联', '利物浦', '纽卡'],
    'transfer_fee_m': [180, 130, 100, 105, 35, 77, 65, 60, 70, 70],  # 转会费(百万欧)
    'weekly_wage_k': [650, 350, 300, 300, 170, 200, 320, 250, 250, 200],  # 周薪(千欧)
    'age': [25, 20, 30, 24, 24, 21, 24, 24, 22, 23],
    'goals_last': [44, 20, 32, 5, 12, 3, 7, 11, 10, 2],
    'assists_last': [10, 17, 11, 4, 7, 2, 7, 10, 9, 5],
    'appearances_last': [45, 42, 45, 38, 48, 40, 40, 36, 35, 35],
    'market_value_m': [180, 150, 110, 100, 50, 75, 75, 70, 70, 80]  # 德转市场价值
}
df = pd.DataFrame(data)
print("转会数据概览:")
print(df[['player', 'club', 'transfer_fee_m', 'weekly_wage_k', 'market_value_m']])

第二步:特征工程与成本核算

转会成本不能只看转会费,还需要计算合同期内的总投入(转会费 + 总薪水),假设合同期均为5年。

# 计算合同总成本(转会费 + 5年薪水)
CONTRACT_YEARS = 5
df['total_salary_cost_m'] = (df['weekly_wage_k'] * 52 * CONTRACT_YEARS) / 1000  # 转成百万欧
df['total_cost_m'] = df['transfer_fee_m'] + df['total_salary_cost_m']
# 计算球员核心指数:进球+助攻作为基础数据,考虑出场次数加权
df['g_a'] = df['goals_last'] + df['assists_last']
df['per90_contribution'] = df['g_a'] / (df['appearances_last'] * 0.9)  # 假设平均出场90分钟
print("\n成本计算:")
print(df[['player', 'transfer_fee_m', 'total_salary_cost_m', 'total_cost_m']])

第三步:球员能力评分模型(加权评分)

为了量化球员“即战力”,我们建立一个综合评分,考虑年龄潜力、产出、稳定性等因素。

# 1. 进攻数据标准化
df['goal_ratio'] = df['goals_last'] / df['appearances_last']  # 场均进球
df['assist_ratio'] = df['assists_last'] / df['appearances_last']  # 场均助攻
# 2. 建立评分公式(权重可调整)
# 权重:进攻70%(进球40% + 助攻30%),年龄潜力20%,比赛经验10%
df['score_calc'] = (
    df['goal_ratio'] * 4 +  # 进球权重高
    df['assist_ratio'] * 3 + 
    (30 - df['age']) * 1.5 +  # 年龄越小加分越多(24岁以下潜力高)
    (df['appearances_last'] / 60) * 5  # 出勤率加分
)
# 3. 按列归一化到0-100分
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler(feature_range=(0, 100))
df['ability_score'] = scaler.fit_transform(df[['score_calc']])

第四步:性价比计算与评估

重点来了——计算性价比,并生成评级标签。

# 计算性价比(每百万欧元获得的评分)
df['value_ratio'] = df['ability_score'] / df['total_cost_m']
# 定义性价比评级函数
def rate_ratio(ratio):
    if ratio >= 1.5:
        return 'S级(超值)'
    elif ratio >= 1.0:
        return 'A级(良好)'
    elif ratio >= 0.5:
        return 'B级(一般)'
    else:
        return 'C级(溢价)'
df['valuation_grade'] = df['value_ratio'].apply(rate_ratio)
# 查看结果,按性价比从高到低排序
result = df.sort_values('value_ratio', ascending=False)
print("\n===== 夏窗引援性价比排行榜 =====")
print(result[['player', 'club', 'ability_score', 'total_cost_m', 'value_ratio', 'valuation_grade']].round(2))

第五步:可视化——性价比散点图

通过图形直观看出“贵但不行”和“便宜又实用”的差距。

import matplotlib.pyplot as plt
import seaborn as sns
# 设置分档颜色
colors = {'S级(超值)': 'green', 'A级(良好)': 'blue', 'B级(一般)': 'orange', 'C级(溢价)': 'red'}
plt.figure(figsize=(12, 8))
scatter = plt.scatter(
    x=result['total_cost_m'],
    y=result['ability_score'],
    c=result['valuation_grade'].map(colors),
    s=result['transfer_fee_m']*2,  # 气泡大小代表转会费
    alpha=0.6
)
# 添加球员标签
for i, row in result.iterrows():
    plt.annotate(row['player'], 
                 (row['total_cost_m'], row['ability_score']),
                 textcoords="offset points",
                 xytext=(5,5),
                 ha='left')
plt.xlabel('总成本(百万欧元)')
plt.ylabel('能力指数')'2024夏窗引援性价比分析散点图')
plt.xlim(50, 300)
plt.ylim(0, 100)
# 图例
from matplotlib.patches import Patch
legend_elements = [Patch(facecolor=color, label=label) 
                   for label, color in colors.items()]
plt.legend(handles=legend_elements, loc='lower right')
plt.grid(True, alpha=0.3)
plt.show()

第六步:输出分析报告(自动生成结论)

最后生成一段“球探报告”式的中文结论:

def generate_report(df):
    top = df.sort_values('value_ratio', ascending=False).iloc[0]
    worst = df.sort_values('value_ratio').iloc[0]
    print("\n🤔 球探报告总结:")
    print(f"1. 最佳转会是 **{top['player']}**,性价比指数{top['value_ratio']:.2f},"
          f"成本{top['total_cost_m']:.0f}百万,评分{top['ability_score']:.0f}分,评级{top['valuation_grade']}")
    print(f"2. 风险引援是 **{worst['player']}**,性价比指数{worst['value_ratio']:.2f},"
          f"成本{worst['total_cost_m']:.0f}百万,溢价严重")
    cheap_good = df[(df['transfer_fee_m'] < 80) & (df['value_ratio'] > 1)
                    ][['player', 'transfer_fee_m', 'ability_score']]
    print("\n3. 低买高卖潜力股(转会费<80M且表现优秀):")
    print(cheap_good)
generate_report(df)

输出的预期效果预览

运行脚本后,终端会打印类似这样的结果:

===== 夏窗引援性价比排行榜 =====
    player      club  ability_score  total_cost_m  value_ratio valuation_grade
3     赖斯     阿森纳          87.5          187.5         0.47          B级
...
1 贝林厄姆     皇马           98.0          228.0         0.43          B级
0   姆巴佩     皇马           100.0         350.0         0.29          C级

注意:模拟数据中姆巴佩虽强但成本极高,往往被评为“C级(溢价)”,这正是性价比评估的意义所在——绝对实力不等于绝对性价比


如何把案例调整到符合现实?

  1. 真实数据接入:访问 Transfermarkt(德转)的爬虫接口,获取真实转会费和市场价值。
  2. 引入机器学习预测:使用历史球员数据训练XGBoost或线性回归模型,预测新援下一赛季的进球/助攻数,替代简单加权。
  3. 考虑战术适配度:加入同位置竞争难度、球队风格匹配度等非数值特征(可量化为主观评分)。
  4. 动态模型:引入时间序列分析(如伤病风险预测)。

如果你有确定的球员名单和真实数据(例如Excel文件),我可以把这个案例直接改写成一个一键跑完的完整脚本,生成Excel报告和图表,你可以把你的数据发给我看看。

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