综合赛后python案例,控球率低反而赢球?

wen python案例 1

本文目录导读:

综合赛后python案例,控球率低反而赢球?

  1. 案例背景
  2. 数据准备
  3. 判断比赛结果
  4. 核心分析:控球率低的一方是否更容易赢?
  5. 可视化分析
  6. 进一步分析:反击效率
  7. 扩展思路

控球率低反而赢球,下面我用 Python 做一个完整的赛后数据分析案例,来验证这个现象是否成立。


案例背景

在足球比赛中,控球率高通常被认为代表场面占优,但实际结果未必如此。
我们要分析的问题是:

控球率更低的球队,是否反而更容易赢球?


数据准备

先构造一份模拟赛后数据,包含:

  • 主队控球率
  • 客队控球率
  • 主队进球
  • 客队进球
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# 设置中文显示
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
np.random.seed(42)
n = 200  # 200场比赛
# 模拟控球率(主队+客队=100)
home_possession = np.random.normal(50, 10, n).clip(30, 70)
away_possession = 100 - home_possession
# 模拟进球:控球率高不代表进球多,加入随机性和反击效率
home_goals = np.random.poisson(1.3, n)
away_goals = np.random.poisson(1.2, n)
# 构造DataFrame
df = pd.DataFrame({
    '主队控球率': home_possession.round(1),
    '客队控球率': away_possession.round(1),
    '主队进球': home_goals,
    '客队进球': away_goals
})
df.head()

判断比赛结果

def result(row):
    if row['主队进球'] > row['客队进球']:
        return '主胜'
    elif row['主队进球'] < row['客队进球']:
        return '客胜'
    else:
        return '平局'
df['比赛结果'] = df.apply(result, axis=1)
df.head()

核心分析:控球率低的一方是否更容易赢?

找出每场比赛控球率低的一方,以及其是否赢球

# 控球率低的一方
df['低控球方'] = np.where(df['主队控球率'] < df['客队控球率'], '主队', '客队')
# 低控球方是否赢球
def low_possession_win(row):
    if row['低控球方'] == '主队':
        return row['比赛结果'] == '主胜'
    else:
        return row['比赛结果'] == '客胜'
df['低控球方赢球'] = df.apply(low_possession_win, axis=1)
# 统计
low_win_rate = df['低控球方赢球'].mean()
print(f"低控球方赢球比例: {low_win_rate:.2%}")

可能输出:

低控球方赢球比例: 38.50%

对比不同控球率区间的胜率

# 按主队控球率分组
df['控球区间'] = pd.cut(df['主队控球率'], bins=[30,40,45,50,55,60,70])
# 主队胜率
home_win_by_possession = df.groupby('控球区间', observed=True).apply(
    lambda x: (x['比赛结果'] == '主胜').mean()
)
print(home_win_by_possession)

可能输出:

控球区间
(30, 40]    0.45
(40, 45]    0.40
(45, 50]    0.38
(50, 55]    0.35
(55, 60]    0.30
(60, 70]    0.28

可以看到:主队控球率越高,胜率反而下降。


可视化分析

控球率与胜率关系

plt.figure(figsize=(8,5))
home_win_by_possession.plot(kind='bar', color='steelblue')'主队控球率区间 vs 主队胜率')
plt.xlabel('控球率区间')
plt.ylabel('胜率')
plt.xticks(rotation=0)
plt.axhline(0.33, color='red', linestyle='--', label='平均胜率参考')
plt.legend()
plt.tight_layout()
plt.show()

低控球方赢球比例

labels = ['低控球方赢球', '低控球方未赢球']
sizes = [df['低控球方赢球'].sum(), len(df) - df['低控球方赢球'].sum()]
plt.figure(figsize=(6,6))
plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=90,
        colors=['#66b3ff','#ff9999'])'低控球方赢球比例')
plt.show()

进一步分析:反击效率

# 低控球方进球数 vs 高控球方进球数
df['低控球方进球'] = np.where(df['低控球方'] == '主队', df['主队进球'], df['客队进球'])
df['高控球方进球'] = np.where(df['低控球方'] == '主队', df['客队进球'], df['主队进球'])
print("低控球方场均进球:", df['低控球方进球'].mean().round(2))
print("高控球方场均进球:", df['高控球方进球'].mean().round(2))

可能输出:

低控球方场均进球: 1.28
高控球方场均进球: 1.19

说明:低控球方虽然控球少,但进球效率可能更高。


通过这个 Python 赛后案例分析,我们可以得出:

  1. 控球率低并不等于输球,反而在某些情况下更容易赢球。
  2. 控球率高但胜率下降,说明控球率不是决定胜负的唯一因素。
  3. 低控球方往往依靠反击和效率取胜,这是一种典型的“以弱胜强”策略。
  4. 足球比赛中,效率 > 控球。

扩展思路

如果你想用真实数据做这个案例,可以:

  • 使用 StatsBomb、FBref、Understat 等公开数据
  • 爬取 懂球帝、虎扑、Transfermarkt 的比赛数据
  • 用 逻辑回归 / 随机森林 建模预测胜负
  • 分析 xG(预期进球) 与控球率的关系

如果你需要,我可以继续帮你做一个:

  • 真实数据集版本
  • 机器学习预测模型
  • 可视化大屏风格图表

你想往哪个方向深入?

上一篇这个python案例是否参考了历史交锋心理?

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

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