实用脚本统计任意球直接得分几次?

wen 实用脚本 4

本文目录导读:

实用脚本统计任意球直接得分几次?

  1. 先明确统计规则
  2. 如果你有结构化事件数据
  3. 如果你只有文字记录
  4. 如果你用 football-data.org / API-Football / Opta
  5. 最实用的 SQL 版本
  6. 建议你的脚本至少输出这些结果
  7. 最容易出错的地方

可以,下面给你一个实用脚本模板,用来统计足球比赛里“任意球直接得分”的次数。
核心思路是:先定义什么叫任意球直接得分,再用事件数据过滤统计。


先明确统计规则

“任意球直接得分”通常指:

  • 判罚任意球后
  • 主罚球员直接射门得分
  • 中间没有其他球员触球
  • 不是传中后队友头球/射门得分
  • 不是折射后得分(有些统计把折射也算,需提前定义)

所以脚本里至少要判断:

  1. 事件类型是任意球
  2. 事件结果是进球
  3. 进球方式为直接射门
  4. 中间无其他触球
  5. 可选:排除折射、排除点球、排除间接任意球

如果你有结构化事件数据

CSV / Excel,字段类似:

match_id event_type team player minute outcome assist touch_after_fk is_direct
1 free_kick A 张三 35 goal no yes

Python 脚本

import pandas as pd
# 读取数据
df = pd.read_csv("match_events.csv")
# 筛选任意球直接得分
direct_fk_goals = df[
    (df["event_type"] == "free_kick") &
    (df["outcome"] == "goal") &
    (df["is_direct"] == "yes") &
    (df["touch_after_fk"] == "no")
]
# 统计总次数
total = len(direct_fk_goals)
print("任意球直接得分总次数:", total)
# 按球员统计
by_player = direct_fk_goals.groupby("player").size().sort_values(ascending=False)
print("\n按球员统计:")
print(by_player)
# 按球队统计
by_team = direct_fk_goals.groupby("team").size().sort_values(ascending=False)
print("\n按球队统计:")
print(by_team)
# 按比赛统计
by_match = direct_fk_goals.groupby("match_id").size()
print("\n按比赛统计:")
print(by_match)

如果你只有文字记录

比如比赛战报:

第35分钟,张三主罚任意球直接破门。
第67分钟,李四任意球传中,王五头球得分。
第80分钟,赵六任意球射门被人墙挡出,随后补射得分。

Python 脚本:关键词匹配

import re
text = """
第35分钟,张三主罚任意球直接破门。
第67分钟,李四任意球传中,王五头球得分。
第80分钟,赵六任意球射门被人墙挡出,随后补射得分。
第90分钟,陈七任意球直接得分。
"""
# 匹配“任意球直接得分/破门/进球”
pattern = r"任意球[^。!?\n]{0,10}(直接)?(破门|得分|进球)"
matches = re.findall(pattern, text)
# 更严格:必须出现“直接”
strict_pattern = r"任意球[^。!?\n]{0,10}直接[^。!?\n]{0,6}(破门|得分|进球)"
strict_matches = re.findall(strict_pattern, text)
print("宽松匹配次数:", len(matches))
print("严格匹配次数:", len(strict_matches))

但这个方式适合快速粗筛,不如事件数据准确。


如果你用 football-data.org / API-Football / Opta

不同数据源字段不同。
一般要查:

  • type: Free Kick
  • detail: Direct Free Kick
  • result: Goal

API-Football 风格:

import requests
API_KEY = "你的API_KEY"
url = "https://v3.football.api-sports.io/events"
params = {"fixture": 123456}
headers = {
    "x-apisports-key": API_KEY
}
resp = requests.get(url, headers=headers, params=params)
data = resp.json()
count = 0
for event in data["response"]:
    if (
        event["type"] == "Goal" and
        event["detail"] == "Free Kick" and
        event["comments"] is None
    ):
        count += 1
print("任意球直接得分次数:", count)

注意:不同 API 的 detail 可能叫:

  • Direct Free Kick
  • Free Kick
  • Normal Goal

所以最好先打印几条事件看看字段。


最实用的 SQL 版本

如果数据在数据库:

SELECT COUNT(*) AS direct_fk_goals
FROM match_events
WHERE event_type = 'free_kick'
  AND outcome = 'goal'
  AND is_direct = 1
  AND touch_after_fk = 0;

按球员:

SELECT player, COUNT(*) AS goals
FROM match_events
WHERE event_type = 'free_kick'
  AND outcome = 'goal'
  AND is_direct = 1
  AND touch_after_fk = 0
GROUP BY player
ORDER BY goals DESC;

建议你的脚本至少输出这些结果

总任意球直接得分次数
按球队统计
按球员统计
按比赛统计
每场平均次数
占比:任意球直接得分 / 全部进球
total_goals = len(df[df["outcome"] == "goal"])
ratio = total / total_goals * 100
print(f"占全部进球比例:{ratio:.2f}%")

最容易出错的地方

  1. 把任意球助攻/传中后得分算进去
  2. 把折射进球算成直接得分
  3. 把间接任意球算进去
  4. 把点球算进去
  5. 文字战报里“任意球破门”不一定等于直接得分

所以最推荐:

用事件数据里的 Direct Free Kick Goal 字段统计。
如果没有,就用“任意球 + 进球 + 无其他触球 + 直接射门”过滤。


如果你愿意,我可以直接帮你写一个完整版脚本。
你只需要告诉我:

  1. 你的数据格式是什么?CSV、Excel、JSON、API、还是文字战报?
  2. 字段有哪些?
  3. 你要统计整个赛季、某支球队、还是某球员?

我可以给你一版能直接跑的代码。

上一篇这个实用脚本怎么看双方的中场角力结果?

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

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