根据python案例,Whoscored评分对比?

wen python案例 3

Whoscored评分对比 - Python案例分析

下面通过一个完整的Python案例,展示如何对比两名球员(或两支球队)的Whoscored评分数据。

根据python案例,Whoscored评分对比?

场景说明

假设我们要对比两名前锋球员在最近5场比赛中的Whoscored评分,找出谁表现更稳定、更出色。

⚠️ 注意:Whoscored没有公开API,实际抓取需遵守网站robots协议,以下用模拟数据演示分析方法,真实使用时可用 requests + BeautifulSoup 或 Selenium 抓取。


完整代码

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
# ---------- 1. 模拟数据(可替换为真实抓取结果)----------
data = {
    '球员': ['哈兰德','哈兰德','哈兰德','哈兰德','哈兰德',
             '姆巴佩','姆巴佩','姆巴佩','姆巴佩','姆巴佩'],
    '比赛': ['第1轮','第2轮','第3轮','第4轮','第5轮'] * 2,
    '评分': [7.8, 8.5, 6.9, 9.1, 7.5,
             8.2, 7.4, 8.8, 7.9, 9.0]
}
df = pd.DataFrame(data)
print(df)
# ---------- 2. 基础统计对比 ----------
stats = df.groupby('球员')['评分'].agg(
    平均分='mean',
    最高分='max',
    最低分='min',
    标准差='std',
    场次='count'
).round(2)
print("\n===== 评分统计对比 =====")
print(stats)
# ---------- 3. 稳定性分析(标准差越小越稳定)----------
stats['波动率(%)'] = (stats['标准差'] / stats['平均分'] * 100).round(1)
print("\n===== 稳定性分析 =====")
print(stats[['平均分', '标准差', '波动率(%)']])
# ---------- 4. 可视化对比 ----------
plt.rcParams['font.sans-serif'] = ['SimHei']  # 中文显示
plt.rcParams['axes.unicode_minus'] = False
fig, axes = plt.subplots(1, 2, figsize=(14, 5))
# 左图:逐场评分折线对比
for player in df['球员'].unique():
    sub = df[df['球员'] == player]
    axes[0].plot(sub['比赛'], sub['评分'], marker='o', label=player)
axes[0].set_title('逐场Whoscored评分对比')
axes[0].set_ylabel('评分')
axes[0].legend()
axes[0].grid(alpha=0.3)
# 右图:平均分柱状图
stats['平均分'].plot(kind='bar', ax=axes[1], color=['#4C72B0','#DD8452'])
axes[1].set_title('平均评分对比')
axes[1].set_ylabel('平均分')
axes[1].set_xticklabels(stats.index, rotation=0)
for i, v in enumerate(stats['平均分']):
    axes[1].text(i, v + 0.05, f'{v}', ha='center')
plt.tight_layout()
plt.show()
# ---------- 5. 结论输出 ----------
best_avg = stats['平均分'].idxmax()
most_stable = stats['标准差'].idxmin()
print(f"\n📊 平均分最高:{best_avg}({stats.loc[best_avg,'平均分']})")
print(f"📊 表现最稳定:{most_stable}(标准差 {stats.loc[most_stable,'标准差']})")

输出示例

===== 评分统计对比 =====
        平均分   最高分  最低分  标准差  场次
球员
哈兰德    7.96   9.1   6.9  0.87    5
姆巴佩    8.26   9.0   7.4  0.66    5
===== 稳定性分析 =====
        平均分   标准差  波动率(%)
球员
哈兰德    7.96   0.87    10.9
姆巴佩    8.26   0.66     8.0
📊 平均分最高:姆巴佩(8.26)
📊 表现最稳定:姆巴佩(标准差 0.66)

关键分析维度

维度 说明 Python实现
平均分 整体表现水平 groupby().mean()
标准差 稳定性(越小越稳) groupby().std()
最高/最低分 上限与下限 .max() / .min()
波动率 相对稳定性 std/mean
趋势对比 逐场走势 plt.plot()

扩展:多球员/多维对比

# 若数据含多项指标(射门、传球、关键传球等)
multi_cols = ['评分', '射门', '关键传球', '传球成功率']
heat = df.groupby('球员')[multi_cols].mean()
# 标准化后画热力图
from sklearn.preprocessing import MinMaxScaler
norm = pd.DataFrame(MinMaxScaler().fit_transform(heat),
                    index=heat.index, columns=heat.columns)
import seaborn as sns
sns.heatmap(norm.T, annot=True, cmap='YlOrRd')'球员综合能力热力图')
plt.show()

实战抓取思路(真实场景)

# 伪代码框架
import requests
from bs4 import BeautifulSoup
import time
headers = {'User-Agent': 'Mozilla/5.0 ...'}
url = 'https://www.whoscored.com/Players/XXXX/Show/Player-Name'
resp = requests.get(url, headers=headers)
soup = BeautifulSoup(resp.text, 'html.parser')
# 评分数据通常在JS中,需用Selenium或解析<script>里的JSON
time.sleep(2)  # 限速,遵守robots

⚠️ 合规提醒:Whoscored 反爬严格且禁止商业抓取,建议通过 FBref / SofaScore / API-Football 等有公开数据的替代源,或使用 football-data.org 免费API。


小结

  • 平均分看整体水平,标准差看稳定性,二者结合才全面;
  • 单场评分易受对手强弱影响,建议按主客场/对手排名分组对比;
  • 可视化用折线+柱状双图最直观。

需要我改成真实数据抓取版本(如接入API-Football)或加对手强度加权分析吗?

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