本文目录导读:

- 项目目标
- 第一步:模拟数据准备
- 第二步:特征工程与成本核算
- 第三步:球员能力评分模型(加权评分)
- 第四步:性价比计算与评估
- 第五步:可视化——性价比散点图
- 第六步:输出分析报告(自动生成结论)
- 输出的预期效果预览
- 如何把案例调整到符合现实?
评估足球俱乐部夏窗引援的性价比,是一个结合体育数据、经济模型和机器学习的综合分析项目。
下面我为你设计一个完整的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级(溢价)”,这正是性价比评估的意义所在——绝对实力不等于绝对性价比。
如何把案例调整到符合现实?
- 真实数据接入:访问
Transfermarkt(德转)的爬虫接口,获取真实转会费和市场价值。 - 引入机器学习预测:使用历史球员数据训练XGBoost或线性回归模型,预测新援下一赛季的进球/助攻数,替代简单加权。
- 考虑战术适配度:加入同位置竞争难度、球队风格匹配度等非数值特征(可量化为主观评分)。
- 动态模型:引入时间序列分析(如伤病风险预测)。
如果你有确定的球员名单和真实数据(例如Excel文件),我可以把这个案例直接改写成一个一键跑完的完整脚本,生成Excel报告和图表,你可以把你的数据发给我看看。