python案例统计长短传比例如何分布?

wen python案例 2

足球长短传比例统计案例分析

下面用 Python 演示如何统计和分析长短传的比例分布。

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 = 1000
df = pd.DataFrame({
    'player': np.random.choice(['球员A','球员B','球员C','球员D'], n),
    'pass_length': np.random.exponential(scale=15, size=n) + 2,  # 传球距离(米)
    'success': np.random.choice([0, 1], n, p=[0.2, 0.8])
})
# 长短传划分(通常以30米为界,也可按25/35调整)
SHORT_THRESHOLD = 30
df['pass_type'] = np.where(df['pass_length'] < SHORT_THRESHOLD, '短传', '长传')
print(df.head())
print(df['pass_type'].value_counts())

整体长短传比例分布

# 1. 整体比例
ratio = df['pass_type'].value_counts(normalize=True) * 100
print("整体长短传比例:")
print(ratio.round(2))
# 2. 按球员统计
player_ratio = pd.crosstab(df['player'], df['pass_type'], normalize='index') * 100
print("\n各球员长短传比例(%):")
print(player_ratio.round(2))

可视化分布

fig, axes = plt.subplots(1, 2, figsize=(12, 5))
# 饼图 - 整体比例
ratio.plot.pie(ax=axes[0], autopct='%1.1f%%', colors=['#66b3ff','#ff9999'])
axes[0].set_ylabel('')
axes[0].set_title('整体长短传比例')
# 分组柱状图 - 各球员比例
player_ratio.plot.bar(stacked=True, ax=axes[1], color=['#66b3ff','#ff9999'])
axes[1].set_title('各球员长短传比例')
axes[1].set_ylabel('百分比 (%)')
axes[1].legend(title='传球类型')
plt.tight_layout()
plt.show()

传球距离分布直方图

plt.figure(figsize=(10, 5))
sns.histplot(data=df, x='pass_length', hue='pass_type', bins=40, kde=True,
             palette={'短传':'#66b3ff','长传':'#ff9999'})
plt.axvline(SHORT_THRESHOLD, color='red', linestyle='--', label=f'{SHORT_THRESHOLD}m 分界线')'传球距离分布')
plt.xlabel('传球距离 (米)')
plt.legend()
plt.show()

进阶:按位置/区域分组

如果数据包含位置信息,可以进一步细分:

# 模拟位置数据
df['position'] = np.random.choice(['后卫','中场','前锋'], n)
# 按位置统计长短传比例
pos_ratio = pd.crosstab(df['position'], df['pass_type'], normalize='index') * 100
print(pos_ratio.round(2))
# 热力图展示
plt.figure(figsize=(6, 4))
sns.heatmap(pos_ratio, annot=True, fmt='.1f', cmap='YlOrRd')'不同位置长短传比例(%)')
plt.show()

关键输出示例

整体长短传比例:
短传    86.40
长传    13.60
各球员长短传比例(%):
       短传    长传
球员A  86.02  13.98
球员B  86.29  13.71
球员C  87.11  12.89
球员D  86.24  13.76

分析要点

指标 说明
阈值选择 一般 25-30m;也可按 Opta 标准 (短传 <32m)
比例计算 用 normalize='index' 得行百分比
成功率差异 可对比长传/短传的成功率
分组维度 球员、位置、区域、比赛阶段

成功率对比示例

success_rate = df.groupby('pass_type')['success'].mean() * 100
print(success_rate.round(2))
# 短传: ~81%, 长传: ~76%

需要我针对具体场景 (如某联赛/某球员 Opta 数据、传球路线图、区域划分) 进一步展开吗?

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