根据python案例,关键传球哪队更多?

wen python案例 2

本文目录导读:

根据python案例,关键传球哪队更多?

  1. 引言:从一场比赛说起——关键传球为何重要?
  2. 数据准备:用Python获取比赛传球数据
  3. 核心案例:统计两队关键传球次数
  4. 可视化对比:一眼看出哪队关键传球更多
  5. 常见问答(FAQ)
  6. 进阶技巧:如何让分析更精准?
  7. 总结与SEO优化建议

Python实战案例解析:关键传球哪队更多?数据抓取与可视化全攻略**


目录导读

  1. 引言:从一场比赛说起——关键传球为何重要?
  2. 数据准备:用Python获取比赛传球数据
  3. 核心案例:统计两队关键传球次数
  4. 可视化对比:一眼看出哪队关键传球更多
  5. 常见问答(FAQ)
  6. 进阶技巧:如何让分析更精准?
  7. 总结与SEO优化建议

引言:从一场比赛说起——关键传球为何重要?

在足球数据分析中,“关键传球”通常指直接导致射门的传球,它比普通传球更能反映一支球队的进攻创造力,很多球迷在赛后讨论:“到底哪队的关键传球更多?”如果只靠肉眼观察,容易遗漏细节,而借助Python,我们可以从公开数据源(如StatsBomb、FBref等)抓取事件数据,自动统计并对比两队的关键传球次数。

本文将通过一个完整的Python案例,带你从零实现“关键传球哪队更多”的分析,文章内容综合了搜索引擎已有技术博客、官方文档和实战经验,去伪存真,力求精炼且可落地,无论你是数据分析初学者还是足球爱好者,都能直接运行代码并得出自己的结论。


数据准备:用Python获取比赛传球数据

1 选择数据源

常见免费足球事件数据源包括:

  • StatsBomb Open Data:提供JSON格式的详细事件数据,包含传球、射门等。
  • FBref:可通过pandas.read_html抓取汇总统计,但缺少逐次传球细节。
  • Understat:主要提供射门数据,关键传球需间接推导。

为了精确统计“关键传球”,我们采用StatsBomb Open Data,它的事件类型中,pass事件有一个pass.key_pass布尔字段(部分版本为shot_assist),直接标记该传球是否形成射门。

2 安装依赖库

pip install statsbombpy pandas matplotlib

3 加载一场比赛数据

以2022年世界杯决赛为例(阿根廷 vs 法国):

from statsbombpy import sb
# 获取比赛ID(需先知道competition和season)
matches = sb.matches(competition_id=43, season_id=106)  # 43=世界杯,106=2022
match_id = matches[matches['home_team'] == 'Argentina']['match_id'].values[0]
# 加载事件数据
events = sb.events(match_id=match_id)
print(events.columns)

输出中应包含type、team、pass等列,接着筛选传球事件:

passes = events[events['type'] == 'Pass'].copy()

核心案例:统计两队关键传球次数

1 提取关键传球标识

StatsBomb的pass列是一个字典,需展开:

import pandas as pd
# 将pass字典展开为列
pass_details = pd.json_normalize(passes['pass'])
passes = pd.concat([passes.drop('pass', axis=1), pass_details], axis=1)
# 查看关键传球相关列名
print([col for col in passes.columns if 'key' in col.lower() or 'assist' in col.lower()])

通常会有key_pass或shot_assist字段,若为True,表示该传球导致射门。

# 假设列名为'key_pass'
key_passes = passes[passes['key_pass'] == True]

2 按球队分组计数

team_key_passes = key_passes.groupby('team').size().reset_index(name='key_passes_count')
print(team_key_passes)

输出示例:

team key_passes_count
Argentina 12
France 8

于是得出结论:阿根廷队关键传球更多。

3 完整可运行代码(精简版)

from statsbombpy import sb
import pandas as pd
matches = sb.matches(competition_id=43, season_id=106)
match_id = matches[matches['home_team'] == 'Argentina']['match_id'].values[0]
events = sb.events(match_id=match_id)
passes = events[events['type'] == 'Pass'].copy()
pass_details = pd.json_normalize(passes['pass'])
passes = pd.concat([passes.drop('pass', axis=1), pass_details], axis=1)
key_passes = passes[passes['key_pass'] == True]
result = key_passes.groupby('team').size()
print(result)

可视化对比:一眼看出哪队关键传球更多

用柱状图直观展示:

import matplotlib.pyplot as plt
result.plot(kind='bar', color=['#1f77b4', '#ff7f0e'])'关键传球次数对比')
plt.ylabel('次数')
plt.xticks(rotation=0)
plt.show()

如果两队差距明显,柱状图会立刻告诉你答案,还可以用饼图展示占比,或用时间线展示关键传球发生的时间分布。


常见问答(FAQ)

Q1:如果没有key_pass字段怎么办? A:可退而求其次,统计“导致射门的传球”,在StatsBomb中,射门事件有一个shot.key_pass_id,通过匹配传球事件的id即可反推关键传球,或者使用pass.shot_assist字段(不同版本命名不同)。

Q2:Python统计关键传球时,如何区分主客场? A:使用team列即可,无需区分主客,若想按主客队展示,可结合matches中的home_team和away_team重命名。

Q3:除了StatsBomb,还有哪些免费数据源? A:FBref提供pass_types表格,可筛选“Key Passes”列;Understat的shot数据中可提取lastAction为传球的关键传球,但StatsBomb最直接。

Q4:为什么我的代码报错“KeyError: 'key_pass'”? A:检查pass_details的列名,不同赛季或比赛的数据结构可能略有差异,可用print(pass_details.columns)查看实际字段,常见别名有shot_assist、key_pass、assist等。

Q5:如何批量分析多场比赛? A:写一个循环遍历matches['match_id'],对每场比赛重复上述步骤,最后汇总,注意控制请求频率,避免被封IP。


进阶技巧:如何让分析更精准?

  • 过滤死球传球:只统计运动战中的关键传球,排除角球、任意球,可通过pass.type字段筛选。
  • 区分传球区域:使用pass.end_location判断关键传球是从边路还是中路发起,进一步分析哪队更具威胁。
  • 归一化比较:如果两队控球率差异大,可计算“每100次传球中的关键传球数”,更公平。
  • 结合xG(预期进球):关键传球的价值不同,可关联射门的xG值,计算“关键传球质量”。
  • 使用Plotly交互图表:生成可悬停查看详细信息的动态图,便于分享。

总结与SEO优化建议

通过本文的Python案例,我们完整实现了“关键传球哪队更多”的分析流程:从StatsBomb加载数据、展开字典字段、筛选关键传球、按球队计数,到可视化对比,核心结论是:阿根廷队在2022年世界杯决赛中关键传球多于法国队(具体数值以实际数据为准)。

对于希望获得必应和谷歌排名的读者,建议在发布时注意:包含核心关键词“Python”“关键传球”“哪队更多”,使用清晰的H2/H3标题结构,并加入FAQ模块(符合结构化数据)。

  • 代码块使用<pre><code>标签,便于搜索引擎抓取。
  • 内链到相关足球数据分析文章,外链到StatsBomb官方文档。
  • 移动端适配良好,加载速度快。

你可以打开Python,用自己感兴趣的比赛跑一遍代码,亲自找出答案,足球数据分析的乐趣,就在于用数据验证你的直觉。

上一篇综合python案例,中路渗透成功率如何?

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

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