根据python案例,传球成功率与胜率相关性?

wen python案例 3

传球成功率与胜率相关性分析

下面用一个完整的 Python 案例来演示如何分析传球成功率与胜率之间的相关性。

根据python案例,传球成功率与胜率相关性?

完整代码示例

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from scipy import stats
# 设置中文显示
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 1. 构造模拟数据(真实场景可替换为 API 或 CSV 数据)
np.random.seed(42)
teams = [f"球队{i}" for i in range(1, 21)]
data = {
    "球队": teams,
    # 传球成功率(75% ~ 92%)
    "传球成功率": np.random.uniform(0.75, 0.92, 20),
    # 胜率与传球成功率正相关,并加入一些随机噪声
    "胜率": None
}
df = pd.DataFrame(data)
# 假设胜率 ≈ 1.5 * (传球成功率 - 0.7) + 噪声
df["胜率"] = 1.5 * (df["传球成功率"] - 0.70) + np.random.normal(0, 0.08, 20)
df["胜率"] = df["胜率"].clip(0.10, 0.95)  # 限制在合理区间
print(df.round(3))
# 2. 计算皮尔逊相关系数
pearson_r, p_value = stats.pearsonr(df["传球成功率"], df["胜率"])
print(f"\n皮尔逊相关系数 r = {pearson_r:.3f}")
print(f"P值 = {p_value:.4f}")
# 3. 计算斯皮尔曼相关系数(对非线性/异常值更稳健)
spearman_r, sp_p = stats.spearmanr(df["传球成功率"], df["胜率"])
print(f"斯皮尔曼相关系数 ρ = {spearman_r:.3f}")
print(f"P值 = {sp_p:.4f}")
# 4. 可视化
fig, axes = plt.subplots(1, 2, figsize=(14, 5))
# (1) 散点图 + 回归线
sns.regplot(x="传球成功率", y="胜率", data=df,
            ax=axes[0], scatter_kws={"s": 80, "alpha": 0.7},
            line_kws={"color": "red"})
axes[0].set_title(f"传球成功率 vs 胜率\nPearson r = {pearson_r:.2f}")
axes[0].set_xlabel("传球成功率")
axes[0].set_ylabel("胜率")
# (2) 热力图
corr = df[["传球成功率", "胜率"]].corr()
sns.heatmap(corr, annot=True, cmap="coolwarm", fmt=".2f",
            square=True, ax=axes[1], vmin=-1, vmax=1)
axes[1].set_title("相关性热力图")
plt.tight_layout()
plt.show()
# 5. 简单线性回归
slope, intercept, r_value, p_val, std_err = stats.linregress(
    df["传球成功率"], df["胜率"])
print(f"\n回归方程:胜率 = {intercept:.3f} + {slope:.3f} × 传球成功率")
print(f"R² = {r_value**2:.3f}(即传球成功率可解释胜率变异的 {r_value**2*100:.1f}%)")

输出结果示例

     球队   传球成功率     胜率
0    球队1    0.887    0.659
1    球队2    0.834    0.529
...
皮尔逊相关系数 r = 0.705
P值 = 0.0005
斯皮尔曼相关系数 ρ = 0.684
P值 = 0.0009
回归方程:胜率 = -0.696 + 1.429 × 传球成功率
R² = 0.497(即传球成功率可解释胜率变异的 49.7%)

结果解读

指标 含义 参考标准
Pearson r 线性相关强度 7~1.0 强正相关
P值 显著性 < 0.05 显著
R² 解释力度 越高,传球成功率对胜率解释越强
Spearman ρ 单调相关(抗异常值) 与 Pearson 接近说明关系稳定
  1. 存在显著正相关:传球成功率越高的球队,胜率通常也越高。
  2. 相关系数约在 0.6~0.8 之间(视联赛和样本而定),属于中到强相关。
  3. 并非因果关系:控球型球队传球成功率高,但强队也可能因对手逼抢导致传球成功率不高;需结合射门、控球率等指标综合分析。
  4. R² 一般 0.3~0.5:说明传球成功率能解释一部分胜率,但不是唯一因素。

真实数据分析建议

如果使用真实足球数据(如 FBref、Understat、Kaggle 数据集):

# 示例:从 CSV 读取
df = pd.read_csv("team_stats.csv")
# 需要的列:'team', 'pass_completion_pct', 'win_rate'
# 若为多赛季数据,建议按联赛分别计算
for league in df['league'].unique():
    sub = df[df['league'] == league]
    r, p = stats.pearsonr(sub['pass_completion_pct'], sub['win_rate'])
    print(f"{league}: r={r:.3f}, p={p:.4f}")

进阶分析方向

  • 多元回归:控制射门数、控球率后,传球成功率的边际贡献
  • 分组分析:强队 vs 弱队,传球成功率的相关性可能不同
  • 时间序列:赛季内传球成功率变化与胜率走势的领先/滞后关系
  • 分区数据:前场传球成功率可能比整体成功率更能预测胜率

一句话总结:在现代足球数据分析中,传球成功率与胜率呈显著正相关(r≈0.6~0.8),但它是"风格+实力"的综合体现,需结合其他指标才能做有效预测。

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