统计门前抢点射门次数对比
下面用 Python 模拟统计两名球员在"门前抢点"场景下的射门次数对比,包含数据生成、统计分析和可视化。

完整代码
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 设置中文显示
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# ========== 1. 模拟射门数据 ==========
np.random.seed(42)
# 模拟球员A和球员B的射门记录
data = {
'球员': ['球员A']*60 + ['球员B']*60,
'射门类型': (
# 球员A:抢点射门占比高
list(np.random.choice(['门前抢点', '远射', '头球', '单刀'], 60,
p=[0.5, 0.2, 0.2, 0.1])) +
# 球员B:抢点射门占比低
list(np.random.choice(['门前抢点', '远射', '头球', '单刀'], 60,
p=[0.3, 0.35, 0.25, 0.1]))
),
'是否进球': (
list(np.random.choice([1, 0], 60, p=[0.35, 0.65])) +
list(np.random.choice([1, 0], 60, p=[0.25, 0.75]))
)
}
df = pd.DataFrame(data)
# ========== 2. 统计门前抢点射门次数 ==========
# 筛选门前抢点射门
qiangdian = df[df['射门类型'] == '门前抢点']
# 按球员统计抢点次数
count_by_player = qiangdian.groupby('球员').size().reset_index(name='抢点射门次数')
# 统计总射门次数、抢点进球数
total_shots = df.groupby('球员').size().reset_index(name='总射门次数')
goals = qiangdian.groupby('球员')['是否进球'].sum().reset_index(name='抢点进球数')
# 合并统计结果
summary = count_by_player.merge(total_shots, on='球员') \
.merge(goals, on='球员')
summary['抢点占比'] = (summary['抢点射门次数'] / summary['总射门次数'] * 100).round(1)
summary['抢点转化率'] = (summary['抢点进球数'] / summary['抢点射门次数'] * 100).round(1)
print("========== 门前抢点射门统计对比 ==========")
print(summary.to_string(index=False))
# ========== 3. 可视化对比 ==========
fig, axes = plt.subplots(1, 3, figsize=(15, 5))
players = summary['球员']
colors = ['#4C72B0', '#DD8452']
# 图1:抢点射门次数
axes[0].bar(players, summary['抢点射门次数'], color=colors)
axes[0].set_title('门前抢点射门次数对比')
axes[0].set_ylabel('次数')
for i, v in enumerate(summary['抢点射门次数']):
axes[0].text(i, v + 0.5, str(v), ha='center', fontweight='bold')
# 图2:抢点射门占比
axes[1].bar(players, summary['抢点占比'], color=colors)
axes[1].set_title('抢点射门占比(%)')
axes[1].set_ylabel('占比 (%)')
for i, v in enumerate(summary['抢点占比']):
axes[1].text(i, v + 0.5, f'{v}%', ha='center', fontweight='bold')
# 图3:抢点转化率
axes[2].bar(players, summary['抢点转化率'], color=colors)
axes[2].set_title('抢点射门转化率(%)')
axes[2].set_ylabel('转化率 (%)')
for i, v in enumerate(summary['抢点转化率']):
axes[2].text(i, v + 0.5, f'{v}%', ha='center', fontweight='bold')
plt.tight_layout()
plt.savefig('抢点射门对比.png', dpi=100)
plt.show()
# ========== 4. 全部射门类型分布对比 ==========
type_dist = df.groupby(['球员', '射门类型']).size().unstack(fill_value=0)
print("\n========== 射门类型分布 ==========")
print(type_dist)
type_dist.plot(kind='bar', figsize=(10, 5), colormap='Set2')'两名球员射门类型分布对比')
plt.ylabel('次数')
plt.xticks(rotation=0)
plt.tight_layout()
plt.show()
输出示例
========== 门前抢点射门统计对比 ==========
球员 抢点射门次数 总射门次数 抢点进球数 抢点占比 抢点转化率
球员A 32 60 12 53.3 37.5
球员B 18 60 4 30.0 22.2
代码说明
| 步骤 | 功能 | 关键代码 |
|---|---|---|
| 数据生成 | 模拟真实场景 | np.random.choice 按概率生成射门类型 |
| 数据筛选 | 提取抢点射门 | df[df['射门类型']=='门前抢点'] |
| 分组统计 | 按球员聚合 | groupby('球员').size() / .sum() |
| 指标计算 | 占比与转化率 | 抢点次数/总次数、进球数/抢点次数 |
| 可视化 | 三图对比 + 类型分布 | matplotlib 柱状图 |
关键指标解读
- 抢点次数:反映球员前插意识和跑位能力
- 抢点占比:说明该球员在进攻中更依赖门前抢点
- 抢点转化率:衡量抢点射门的把握机会能力
💡 提示:实际应用中可将
df替换为真实比赛数据表(如 StatsBomb、Opta 数据),只需保证有「球员、射门类型、是否进球」三列即可复用此代码。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播