本文目录导读:

这是一个非常具体且依赖于代码实现的问题,由于我无法直接访问你提到的那个特定开源项目的最新代码,为了给你最准确的答案,我需要你提供该项目的名称或GitHub链接。
我可以根据足球数据分析的通用逻辑和常见的开源项目架构,为你提供两种最可能的分析方法以及如何查找该项目具体代码的指南。
通过“预期进球”模型(最科学的方法)
绝大多数高级开源足球分析项目(如 SoccerAction、StatsBombR、一些基于 PySport 或 nfl-data-py 风格的项目)不会只算“射正率”,而是会计算 xG(Expected Goals,预期进球)。
逻辑:
- 双方射门转化率差异 = (主队实际进球 / 主队 xG) - (客队实际进球 / 客队 xG)
- 或者更直接的: 双方每 xG 的实际进球数差异。
在代码中如何体现?
-
找到 xG 列: 查看数据框(DataFrame)中是否有
xG、expected_goal、shot_xg等列。 -
计算球队级汇总:
# 假设你的数据是一个名为 'shots' 的 DataFrame # 包含列: 'team', 'shot_outcome' (goal, saved, blocked, etc.), 'xG' # 计算每支球队的总 xG 和实际进球数 team_stats = shots.groupby('team').agg( total_xG=('xG', 'sum'), actual_goals=('shot_outcome', lambda x: (x == 'goal').sum()) # 取决于你的 event type 如何定义 ).reset_index() # 计算转化率差异 team_stats['conversion_efficiency'] = team_stats['actual_goals'] / team_stats['total_xG'] # 计算双方差异 home_team = '主队名称' away_team = '客队名称' conversion_diff = team_stats[team_stats['team'] == home_team]['conversion_efficiency'].values[0] - \ team_stats[team_stats['team'] == away_team]['conversion_efficiency'].values[0] print(f"主队 vs 客队 射门转化效率差异: {conversion_diff:.2f}")
基于“射正/射偏/被封堵”的传统统计
如果项目没有 xG 数据,通常会使用射正率 (SoT%) 和进球转化率 (Conversion Rate)。
逻辑:
- 射门转化率差异 = (主队进球数 / 主队射门数) - (客队进球数 / 客队射门数)
- 射正转化率差异 = (主队进球数 / 主队射正数) - (客队进球数 / 客队射正数)
在代码中如何体现?
# 假设数据有 'team', 'shot_outcome' 列
# shot_outcome 可能是 'goal', 'saved', 'blocked', 'missed', 'post'
team_stats = shots.groupby('team').agg(
total_shots=('shot_outcome', 'count'),
shots_on_target=('shot_outcome', lambda x: x.isin(['goal', 'saved']).sum()),
goals=('shot_outcome', lambda x: (x == 'goal').sum())
).reset_index()
# 计算转化率
team_stats['shot_conversion'] = team_stats['goals'] / team_stats['total_shots']
team_stats['sot_conversion'] = team_stats['goals'] / team_stats['shots_on_target']
# 计算差异
home_stats = team_stats[team_stats['team'] == '主队名称']
away_stats = team_stats[team_stats['team'] == '客队名称']
diff_conversion = home_stats['shot_conversion'].values[0] - away_stats['shot_conversion'].values[0]
print(f"双方射门转化率差异: {diff_conversion:.2%}")
如何定位到你这个项目的具体代码?
请按照以下步骤操作(以最常见的 GitHub 项目为例):
-
找到项目的 README.md 或 documentation 文件夹,搜索以下关键词:
conversion ratefinishingexpected goalsxG differenceshooting analysismatch report
-
直接搜索代码库(在 GitHub 上点击
Go to file或使用搜索引擎site:github.com/项目名称 conversion):- 搜索关键词:
conversion、efficiency、xG、goal_ratio。 - 搜索文件名:
shooting.py、team_stats.py、analysis.py。 - 搜索函数:
def calculate_shooting_stats、def analyze_team_finishing。
- 搜索关键词:
-
查看项目的示例 Jupyter Notebook(.ipynb 文件):
- 通常在
notebooks/或examples/文件夹里。 - 运行其中的代码,观察输出结果中哪个部分提到了“射门转化率”或“双方差异”。
- 通常在
- 如果有 xG 数据: 看
actual_goals / total_xG的差值,正值表示主队“过度发挥”(运气好或射术精),负值表示客队“浪费机会”。 - 如果只有传统数据: 看
goals / shots_on_target的差值(射正转化率),这比单纯看goals / total_shots更有意义。
请把你正在看的开源项目名字发给我,我可以给你更精确的代码定位。 很多项目(如 soccerdata、world-football-py、StatsBomb Open Data 的分析脚本)都有自己的数据处理函数链。