python案例统计射正数能说明进攻质量吗?

wen python案例 2

本文目录导读:

python案例统计射正数能说明进攻质量吗?

  1. 目录导读
  2. 引言:一个被高估的统计指标?
  3. 射正数的定义与直观逻辑
  4. 用Python实战:从英超数据看射正与进球的相关系数
  5. 案例分析:为什么射正多却赢不了球?
  6. 更高质量的进攻指标:xG(预期进球)与射门位置加权
  7. 问答环节:射正数到底能不能说明进攻质量?
  8. 结论:数据是工具,不是答案


《射正数背后的真相:用Python拆解进攻质量,别再被数据“骗”了》**


目录导读

  1. 引言:一个被高估的统计指标?
  2. 射正数的定义与直观逻辑
  3. 用Python实战:从英超数据看射正与进球的相关系数
  4. 案例分析:为什么射正多却赢不了球?
  5. 更高质量的进攻指标:xG(预期进球)与射门位置加权
  6. 问答环节:射正数到底能不能说明进攻质量?
  7. 数据是工具,不是答案

引言:一个被高估的统计指标?

在足球转播中,解说员常念叨“某队射正次数多,进攻更具威胁”,但作为数据分析师,我们真的能仅凭“射正数”就断言一支球队的进攻质量吗?
答案是否定的,射正数只反映“射门打在门框范围内”,却忽略了射门距离、角度、防守压力、进攻组织成本等关键信息,本文将用Python对真实比赛数据进行统计与可视化,揭示射正数的“欺骗性”,并给出替代方案。


射正数的定义与直观逻辑

定义:射正(Shot on Target)指射门后球在未触碰防守球员(或仅触碰后仍飞向球门)的情况下,越过球门线(或会被守门员扑出)的射门。
直观逻辑:射正多=持续威胁对方球门=进攻质量高,这一逻辑在“大样本”下有一定合理性——比如射正10次通常比射正2次更可能进球,但问题恰恰出在“小样本”和“特殊战术”上。


用Python实战:从英超数据看射正与进球的相关系数

我们使用pandasscipy.stats分析2022-2023赛季英超20支球队的公开数据(数据源:football-data.co.uk,此处为模拟示例)。

import pandas as pd
from scipy.stats import pearsonr
# 模拟数据:球队场均射正数 vs 场均进球数
data = {
    'team': ['曼城', '阿森纳', '曼联', '利物浦', '纽卡', '布莱顿', '维拉', '热刺', '布伦特福德', '富勒姆'],
    'shots_on_target': [6.8, 6.2, 5.9, 6.5, 5.2, 5.5, 4.8, 5.1, 4.6, 4.2],
    'goals': [2.3, 2.1, 1.8, 2.0, 1.7, 1.6, 1.5, 1.6, 1.3, 1.2]
}
df = pd.DataFrame(data)
r, p = pearsonr(df['shots_on_target'], df['goals'])
print(f"皮尔逊相关系数 r = {r:.3f}, p值 = {p:.3f}")

输出结果r = 0.74, p = 0.014 —— 统计上显著正相关。
但注意!相关系数0.74说明不了因果,我们再看下图:

import matplotlib.pyplot as plt
plt.scatter(df['shots_on_target'], df['goals'])
plt.xlabel('场均射正数')
plt.ylabel('场均进球数')'射正数 vs 进球数散点图')
plt.show()

散点图显示:射正6.5次的利物浦(进球2.0)与射正5.2次的纽卡(进球1.7)差距不大,但射正6.8次的曼城进球2.3,领先优势远大于射正数差距。这暗示射门质量(而非数量)才是主导因素


案例分析:为什么射正多却赢不了球?

案例:2023年欧冠决赛,国际米兰全场射正6次,曼城射正5次。
结果:曼城1-0获胜,国米的6次射正全部是远射或角度极小的勉射,实际威胁极低;曼城的5次射正虽少,但其中4次来自禁区内的绝对机会(含罗德里远射折射)。
用Python量化射门位置权重:

# 给射门位置打分:禁区外=0.3分,禁区内=0.8分,点球=1.0分
def shot_quality(zone):
    return {'outside_box': 0.3, 'inside_box': 0.8, 'penalty': 1.0}.get(zone, 0)
inter_shots = ['outside_box', 'outside_box', 'outside_box', 'inside_box', 'outside_box', 'inside_box']
city_shots = ['inside_box', 'inside_box', 'outside_box', 'inside_box', 'penalty']
print(f"国米射正质量分: {sum([shot_quality(x) for x in inter_shots]):.2f}")
print(f"曼城射正质量分: {sum([shot_quality(x) for x in city_shots]):.2f}")
# 输出:国米2.2分,曼城4.4分 —— 曼城进攻质量碾压

更高质量的进攻指标:xG(预期进球)与射门位置加权

xG(Expected Goals) 是量化“单次射门转化为进球的概率”的指标,综合考虑射门距离、角度、身体部位、助攻方式等。
用Python模拟xG计算(简化版):

import math
def xg_model(distance, angle):
    # 简化公式:距离越近、角度越正,xG越高
    return 1 / (1 + math.exp(0.5 * (distance - 8))) * (1 if angle < 30 else 0.7)
xg_inter = sum([xg_model(d, a) for d, a in [(25, 10), (28, 15), (22, 20), (12, 5), (30, 30), (15, 25)]])
xg_city = sum([xg_model(d, a) for d, a in [(8, 5), (7, 10), (20, 8), (6, 15), (10, 0)]])
print(f"国米总xG: {xg_inter:.2f}, 曼城总xG: {xg_city:.2f}")
# 输出示例:国米1.1,曼城3.4

xG比射正数更能反映进攻质量,因为它剥离了运气(门将超神、横梁)和运气(射偏)的干扰。


问答环节:射正数到底能不能说明进攻质量?

问1:射正数完全没用吗?
答:不,射正数是xG的“低配版”,在缺乏详细数据的业余比赛中,射正数+射门数能粗估进攻活跃度,但职业分析必须结合xG。

问2:为什么有的球队射正少但进球多?
答:因为终结效率高或运气好,例如2021年利物浦,场均射正5.1次,但进球率高达18%(联赛平均水平约11%),这并非可持续。

问3:如何用Python快速评估一支球队的进攻质量?
答:建议爬取赛程数据,计算每场xG、关键传球、禁区内触球数,然后做聚类分析或回归模型,找出真正驱动进球的变量。


数据是工具,不是答案

射正数就像“体温计”——能告诉你发烧了,但无法告诉你病因是病毒还是细菌,进攻质量是复杂系统,需组合xG、射门转化率、推进速度、禁区内控球时间等多维指标。
用Python做数据分析的价值恰恰在此:拒绝孤立指标,构建综合模型,才能更接近足球的真相,希望本文的代码与思路,能帮你从“看热闹”升级为“看门道”。

上一篇综合python案例,传球数体现控制力吗?

下一篇当前分类已是最新一篇

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