我来为你创建一个分析球队转会窗后实力变化的Python案例,这个案例会模拟转会市场操作,并计算球队实力的变化。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from datetime import datetime
# 设置中文显示
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
class TransferWindowAnalyzer:
"""转会窗实力变化分析器"""
def __init__(self):
# 球员属性权重
self.attribute_weights = {
'attack': 0.25, # 进攻
'defense': 0.25, # 防守
'midfield': 0.20, # 中场
'physical': 0.15, # 身体素质
'technique': 0.15 # 技术能力
}
# 位置系数
self.position_factor = {
'前锋': 1.2,
'中场': 1.1,
'后卫': 1.1,
'门将': 1.0
}
def create_squad(self, team_name, players_data):
"""创建球队阵容"""
squad_df = pd.DataFrame(players_data)
squad_df['team'] = team_name
squad_df['rating'] = self.calculate_player_rating(squad_df)
return squad_df
def calculate_player_rating(self, df):
"""计算球员综合评分"""
rating = 0
for attr, weight in self.attribute_weights.items():
if attr in df.columns:
rating += df[attr] * weight
return rating
def simulate_transfer(self, squad_df, transfer_list):
"""模拟转会操作"""
temp_squad = squad_df.copy()
for transfer in transfer_list:
action = transfer['action']
player_name = transfer.get('player', '')
if action == 'buy': # 买人
new_player = self.create_player(transfer['player_data'])
temp_squad = pd.concat([temp_squad, new_player], ignore_index=True)
print(f"✅ 买入: {transfer['player_data']['name']} - {transfer['cost']}万欧元")
elif action == 'sell': # 卖人
temp_squad = temp_squad[temp_squad['name'] != player_name]
print(f"❌ 卖出: {player_name} - {transfer.get('fee', 0)}万欧元")
elif action == 'loan': # 租借
if transfer.get('in', True): # 租入
new_player = self.create_player(transfer['player_data'])
temp_squad = pd.concat([temp_squad, new_player], ignore_index=True)
print(f"📥 租入: {transfer['player_data']['name']}")
else: # 租出
temp_squad = temp_squad[temp_squad['name'] != player_name]
print(f"📤 租出: {player_name}")
return temp_squad
def create_player(self, player_data):
"""创建球员数据"""
df = pd.DataFrame([player_data])
df['rating'] = self.calculate_player_rating(df)
return df
def calculate_team_strength(self, squad_df):
"""计算球队整体实力"""
if len(squad_df) == 0:
return 0
# 计算不同位置的评分
positions = ['前锋', '中场', '后卫', '门将']
position_scores = {}
for pos in positions:
pos_players = squad_df[squad_df['position'] == pos]
if len(pos_players) > 0:
pos_score = pos_players['rating'].mean() * self.position_factor[pos]
position_scores[pos] = pos_score
else:
position_scores[pos] = 0
# 整体实力 = 不同位置的平均分
overall_strength = np.mean(list(position_scores.values()))
# 附加因素:阵容深度
squad_depth = min(len(squad_df) / 20, 1.0) # 假设理想阵容为20人
final_strength = overall_strength * (0.8 + 0.2 * squad_depth)
return final_strength, position_scores
def analyze_transfer_impact(self, before_squad, after_squad):
"""分析转会影响"""
print("\n" + "="*50)
print("转会窗实力分析报告")
print("="*50)
# 整体实力对比
before_strength, before_positions = self.calculate_team_strength(before_squad)
after_strength, after_positions = self.calculate_team_strength(after_squad)
change = after_strength - before_strength
change_percent = (change / before_strength * 100) if before_strength else 0
print(f"\n📊 整体实力变化: {before_strength:.2f} → {after_strength:.2f}")
print(f" {'📈 提升' if change > 0 else '📉 下降'}: {abs(change):.2f} ({abs(change_percent):.1f}%)")
# 各位置实力变化
print("\n📍 各位置实力变化:")
position_names = {'前锋': '攻击线', '中场': '中场', '后卫': '防线', '门将': '门将'}
for pos, cn_name in position_names.items():
before = before_positions.get(pos, 0)
after = after_positions.get(pos, 0)
diff = after - before
if diff != 0:
symbol = "📈" if diff > 0 else "📉"
print(f" {cn_name}: {before:.1f} → {after:.1f} ({symbol}{diff:+.1f})")
else:
print(f" {cn_name}: {before:.1f} (无变化)")
# 阵容深度对比
print(f"\n👥 阵容规模: {len(before_squad)}人 → {len(after_squad)}人")
# 综合评估
print("\n🎯 综合评价:")
if change > 2:
print(" ⭐ 转会操作效果显著,球队实力大幅提升")
elif change > 0.5:
print(" ✅ 转会操作积极,球队实力有所增强")
elif change > -0.5:
print(" ➡️ 转会操作基本平衡,球队实力变化不大")
elif change > -2:
print(" ⚠️ 转会操作有待商榷,球队实力略有下降")
else:
print(" ❌ 转会操作效果不佳,球队实力明显下降")
return {
'before_strength': before_strength,
'after_strength': after_strength,
'change': change,
'change_percent': change_percent,
'before_positions': before_positions,
'after_positions': after_positions
}
def visualize_change(self, before_squad, after_squad, team_name):
"""可视化实力变化"""
before_strength, before_positions = self.calculate_team_strength(before_squad)
after_strength, after_positions = self.calculate_team_strength(after_squad)
# 创建子图
fig, axes = plt.subplots(1, 2, figsize=(14, 5))
# 1. 整体实力对比
axes[0].bar(['转会前', '转会后'], [before_strength, after_strength],
color=['#FF6B6B', '#4ECDC4'], alpha=0.7)
axes[0].set_ylabel('综合实力')
axes[0].set_title(f'{team_name} 整体实力对比')
axes[0].grid(alpha=0.3)
# 在柱状图上添加数值
for i, v in enumerate([before_strength, after_strength]):
axes[0].text(i, v + 0.1, f'{v:.2f}', ha='center')
# 2. 各位置雷达图
positions = list(before_positions.keys())
values_before = [before_positions[pos] for pos in positions]
values_after = [after_positions[pos] for pos in positions]
# 雷达图数据
angles = np.linspace(0, 2 * np.pi, len(positions), endpoint=False).tolist()
values_before += values_before[:1]
values_after += values_after[:1]
angles += angles[:1]
ax2 = plt.subplot(122, polar=True)
ax2.plot(angles, values_before, 'o-', linewidth=2, label='转会前', color='#FF6B6B')
ax2.fill(angles, values_before, alpha=0.25, color='#FF6B6B')
ax2.plot(angles, values_after, 'o-', linewidth=2, label='转会后', color='#4ECDC4')
ax2.fill(angles, values_after, alpha=0.25, color='#4ECDC4')
ax2.set_xticks(angles[:-1])
ax2.set_xticklabels(['攻击线', '中场', '防线', '门将'])
ax2.set_title('各位置实力对比')
ax2.legend(loc='upper right', bbox_to_anchor=(1.1, 1.1))
plt.tight_layout()
return fig
def main():
"""主函数 - 示例分析"""
# 创建分析器
analyzer = TransferWindowAnalyzer()
# 1. 创建转会前的球队阵容(简化示例)
before_players = [
{'name': 'C. 罗纳尔多', 'position': '前锋', 'attack': 9.0, 'defense': 4.0,
'midfield': 5.0, 'physical': 8.5, 'technique': 8.5, 'age': 38},
{'name': 'B. 费尔南德斯', 'position': '中场', 'attack': 8.0, 'defense': 6.0,
'midfield': 8.5, 'physical': 7.0, 'technique': 8.0, 'age': 29},
{'name': 'V. 迪亚斯', 'position': '后卫', 'attack': 5.0, 'defense': 8.5,
'midfield': 6.0, 'physical': 8.0, 'technique': 6.5, 'age': 26},
{'name': 'J. 门德斯', 'position': '门将', 'attack': 2.0, 'defense': 8.0,
'midfield': 3.0, 'physical': 7.5, 'technique': 6.0, 'age': 31},
# 可以添加更多球员...
]
# 补充一些球员让阵容更完整
before_players.extend([
{'name': 'R. 桑切斯', 'position': '中场', 'attack': 7.0, 'defense': 6.5,
'midfield': 8.0, 'physical': 7.5, 'technique': 7.5, 'age': 27},
{'name': 'L. 马丁内斯', 'position': '后卫', 'attack': 5.5, 'defense': 8.0,
'midfield': 6.5, 'physical': 8.0, 'technique': 6.0, 'age': 30},
{'name': 'M. 内马尔', 'position': '前锋', 'attack': 9.0, 'defense': 3.0,
'midfield': 6.5, 'physical': 7.0, 'technique': 9.5, 'age': 31},
{'name': 'P. 瓜迪奥拉', 'position': '中场', 'attack': 6.0, 'defense': 7.5,
'midfield': 9.0, 'physical': 6.5, 'technique': 8.5, 'age': 28},
{'name': 'T. 席尔瓦', 'position': '后卫', 'attack': 4.5, 'defense': 8.5,
'midfield': 6.0, 'physical': 8.0, 'technique': 6.5, 'age': 25},
{'name': 'D. 德赫亚', 'position': '门将', 'attack': 1.5, 'defense': 8.5,
'midfield': 2.5, 'physical': 7.0, 'technique': 6.0, 'age': 32}
])
before_squad = analyzer.create_squad('示例队', before_players)
# 2. 模拟转会操作
transfer_list = [
{
'action': 'buy',
'player_data': {
'name': 'O. 贝林厄姆', 'position': '中场', 'attack': 8.5,
'defense': 7.5, 'midfield': 9.0, 'physical': 8.5, 'technique': 8.0,
'age': 20
},
'cost': 15000 # 万欧元
},
{
'action': 'sell',
'player': 'C. 罗纳尔多',
'fee': 5000
},
{
'action': 'buy',
'player_data': {
'name': 'A. 姆巴佩', 'position': '前锋', 'attack': 9.5,
'defense': 4.5, 'midfield': 6.5, 'physical': 9.0, 'technique': 9.0,
'age': 25
},
'cost': 25000
}
]
# 3. 执行转会
print("\n🏗️ 转会窗操作模拟:")
print("-" * 40)
after_squad = analyzer.simulate_transfer(before_squad, transfer_list)
# 4. 分析转会影响
result = analyzer.analyze_transfer_impact(before_squad, after_squad)
# 5. 可视化
fig = analyzer.visualize_change(before_squad, after_squad, '示例队')
plt.show()
# 6. 输出详细转会信息
print("\n📋 转会明细:")
print(f" 总投入: {(15000 + 25000):,}万欧元")
print(f" 总收入: 5,000万欧元")
print(f" 净投入: {20000:,}万欧元")
# 额外建议
print("\n💡 后续建议:")
if result['change'] > 0:
print(" - 保持现有阵容稳定性")
print(" - 关注新援的融入情况")
print(" - 制定长远发展计划")
else:
print(" - 考虑补充关键位置球员")
print(" - 可能需要调整战术体系")
print(" - 关注年轻球员的培养")
if __name__ == "__main__":
main()
让我再提供一个更实用的简化版本,方便快速分析:
import pandas as pd
import numpy as np
def quick_transfer_analysis(player_ratings, transfers):
"""
快速转会分析函数
参数:
player_ratings: 字典,格式为 {'player_name': rating}
transfers: 列表,每项为 {'action': 'buy'/'sell', 'player': 'name', 'rating': 85}
返回:
分析结果字典
"""
# 计算转会前总实力
before_strength = sum(player_ratings.values())
before_count = len(player_ratings)
# 模拟转会
after_ratings = player_ratings.copy()
total_spent = 0
total_income = 0
print("="*50)
print("快速转会分析")
print("="*50)
for transfer in transfers:
if transfer['action'] == 'buy':
player = transfer['player']
rating = transfer['rating']
cost = transfer.get('cost', 0)
after_ratings[player] = rating
total_spent += cost
print(f"🟢 买入: {player} (评分{rating}, 花费{cost}万欧)")
elif transfer['action'] == 'sell':
player = transfer['player']
fee = transfer.get('fee', 0)
if player in after_ratings:
del after_ratings[player]
total_income += fee
print(f"🔴 卖出: {player} (收入{fee}万欧)")
# 计算转会后的总实力
after_strength = sum(after_ratings.values())
after_count = len(after_ratings)
# 计算变化
change = after_strength - before_strength
avg_change = change / max(after_count, 1)
# 输出结果
print("\n" + "="*50)
print("分析结果")
print("="*50)
print(f"总实力: {before_strength} → {after_strength}")
print(f"平均评分: {before_strength/before_count:.2f} → {after_strength/after_count:.2f}")
print(f"实力变化: {change:+.2f} ({change/before_strength*100:+.1f}%)")
print(f"转会净投入: {total_spent - total_income:+,}万欧元")
# 效率分析
if total_spent > 0:
points_per_million = change / total_spent
print(f"每万欧提升: {points_per_million:.4f} 点")
# 简单评级
if change > 0:
ratio = change / before_strength
if ratio > 0.2:
print("\n评级: ⭐⭐⭐ 巨大提升")
elif ratio > 0.1:
print("\n评级: ⭐⭐ 明显提升")
else:
print("\n评级: ⭐ 小幅提升")
else:
print("\n评级: ⚠️ 实力下降,需要调整")
return {
'before': before_strength,
'after': after_strength,
'change': change,
'net_spend': total_spent - total_income
}
# 使用示例
if __name__ == "__main__":
# 球员初始评分
squad = {
'C. 罗纳尔多': 85,
'B. 费尔南德斯': 88,
'V. 迪亚斯': 84,
'J. 门德斯': 82,
'R. 桑切斯': 86,
'L. 马丁内斯': 84,
'M. 内马尔': 89,
'P. 瓜迪奥拉': 87,
'T. 席尔瓦': 83,
'D. 德赫亚': 86
}
# 转会操作
transfers = [
{'action': 'buy', 'player': 'A. 姆巴佩', 'rating': 91,
'cost': 25000},
{'action': 'sell', 'player': 'C. 罗纳尔多', 'fee': 5000},
{'action': 'buy', 'player': 'O. 贝林厄姆', 'rating': 89,
'cost': 15000}
]
# 执行分析
result = quick_transfer_analysis(squad, transfers)
这个案例提供了两种分析方式:
- 详细版:包含多维度分析(位置、评分、可视化)
- 快速版:简洁的参数传递,快速计算
使用建议:
- 可以根据实际需求调整球员属性
- 支持买入、卖出、租借等操作
- 包含财务分析(投入产出比)
- 可视化对比实力变化
你可以根据具体需求修改球员数据、转会策略等参数,获得定制的分析结果。
版权声明: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直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播