本文目录导读:

这是一个非常有趣且实战性很强的数据分析问题,要判断“哪队的防线更稳固可靠”,不能只看“失球数”这一个指标(比如某队失球少可能是因为中场控球强,而不是后卫强)。
我们可以构建一个综合的 Python 数据分析案例,通过计算多个维度的防守指标,并利用加权评分法或雷达图来给球队防线打分。
以下是一个完整的 Python 分析思路和代码示例,假设你有球队的比赛数据(如英超、欧冠等)。
定义“稳固防线”的核心指标
我们选取5个关键指标,量化每支球队的防守表现:
- 场均失球数 (Goals Conceded per Game):越低越好,最直观。
- 被射正次数 (Shots on Target Against per Game):防线是否容易被打穿。
- 抢断成功率 (Tackle Success Rate):防守球员一对一的能力。
- 拦截次数 (Interceptions per Game):预判传球路线、阻断进攻的能力。
- 解围次数 (Clearances per Game):在危险区域化解危机的能力(但要结合控球率看,控球低的队解围会虚高,我们这里直接使用)。
模拟数据(假设有5支球队)
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from math import pi
# 模拟 5 支球队的防守数据
data = {
'球队': ['红队', '蓝队', '绿队', '黄队', '紫队'],
'场均失球': [0.8, 1.2, 1.5, 1.0, 1.8], # 越低越好
'被射正次数': [2.5, 3.0, 4.2, 3.5, 5.0], # 越低越好
'抢断成功率': [0.78, 0.72, 0.65, 0.80, 0.60], # 越高越好
'拦截次数': [12, 10, 8, 15, 7], # 越高越好
'解围次数': [18, 15, 22, 20, 25] # 越高越好
}
df = pd.DataFrame(data)
print("原始数据:")
print(df)
数据标准化(关键步骤)
因为指标方向不同(有的越大越好,有的越小越好),我们需要统一量纲并调整为同向(所有值越大代表防守越好)。
- 对于“越大越好”的指标(抢断、拦截、解围):使用 Min-Max 归一化。
- 对于“越小越好”的指标(失球、被射正):先取
1/x或max - x再归一化,或者直接取负值后归一化,简单起见,我们用公式:(max - x) / (max - min)。
# 复制一份用于计算
df_norm = df.copy()
# 定义需要正向化处理的列(越小越好 -> 越大越好)
negative_cols = ['场均失球', '被射正次数']
# 定义正向列(越大越好)
positive_cols = ['抢断成功率', '拦截次数', '解围次数']
# 正向化处理:将负向指标转换为正向指标
for col in negative_cols:
max_val = df_norm[col].max()
min_val = df_norm[col].min()
df_norm[col] = (max_val - df_norm[col]) / (max_val - min_val)
# 正向化处理:正向指标直接 Min-Max 归一化
for col in positive_cols:
max_val = df_norm[col].max()
min_val = df_norm[col].min()
df_norm[col] = (df_norm[col] - min_val) / (max_val - min_val)
# 现在所有指标都变成了 [0, 1] 区间,且越接近 1 代表防守表现越好
print("\n标准化后的数据(分数越高=防守越好):")
print(df_norm[['球队'] + negative_cols + positive_cols])
综合评分(加权求和)
假设我们主观认为“抢断成功率”和“场均失球”最重要,给予更高权重。
# 定义权重(请确保权重之和为1)
weights = {
'场均失球': 0.35, # 失球数最重要
'被射正次数': 0.20,
'抢断成功率': 0.25, # 防守硬实力
'拦截次数': 0.10,
'解围次数': 0.10
}
# 计算加权总分
df_norm['防守总分'] = 0
for col, weight in weights.items():
df_norm['防守总分'] += df_norm[col] * weight
# 查看结果
result = df_norm[['球队', '防守总分']].sort_values(by='防守总分', ascending=False)
print("\n综合防守评分排名(满分1分):")
print(result)
可视化:雷达图(最直观比较防线弱点)
雷达图可以让你一眼看出:A队的优势是拦截,B队的短板是被射正。
# 选择要展示的球队(比如红队和蓝队)
teams_to_plot = ['红队', '蓝队']
categories = negative_cols + positive_cols
N = len(categories)
# 设置角度
angles = [n / float(N) * 2 * pi for n in range(N)]
angles += angles[:1] # 闭合
fig, ax = plt.subplots(figsize=(8, 8), subplot_kw=dict(polar=True))
for team in teams_to_plot:
values = df_norm[df_norm['球队'] == team][categories].values.flatten().tolist()
values += values[:1]
ax.plot(angles, values, linewidth=2, linestyle='solid', label=team)
ax.fill(angles, values, alpha=0.1)
# 设置标签
ax.set_xticks(angles[:-1])
ax.set_xticklabels(categories)
ax.set_ylim(0, 1)'球队防线雷达图 (分数越高越好)', size=15)
plt.legend(loc='upper right')
plt.show()
结果解读示例
- 红队:失球和被射正得分接近1(即失球很少,被射正很少),抢断成功率高。红队防线极其稳固。
- 蓝队:失球得分中等,但拦截得分高,解围得分低。蓝队防线偏向于主动拦截,但在高球解围上可能存在问题。
- 黄队:抢断成功率最高(0.8标准化后接近1),但被射正次数较多。黄队后卫单防能力强,但整体防线容易被拉扯出空间。
- 绿队/紫队:整体得分低,失球多,被射正多,防线问题较大。
如何回答“哪队更稳固”?
不能只看一个指标。 利用上述 Python 案例:
- 看总分:总分最高的球队(如红队)在“失球、被射正、抢断”综合表现最好,数据上最稳固。
- 看极端值:如果黄队总分第二,但“抢断成功率”独一档,说明其防守核心球员极强,但体系有漏洞。
- 看雷达图:如果蓝队的雷达图非常“圆”且靠近外圈,说明它没有明显短板,这是最理想的“稳固”状态。
最终结论公式:
基于对【场均失球、被射正、抢断成功率、拦截、解围】的综合评分,红队以最高总分(X分)被评为本案例中防线最稳固可靠的球队,主要优势在于极低的失球数和被射正频率。
你可以把实际比赛数据(从数据网站如 Understat、FBref 爬取或手动输入)代入这个框架,就能得到科学、量化的防守排名。
版权声明: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直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播