本文目录导读:

要统计“区域防守漏洞”出现的次数,需要先明确“漏洞”的定义(是传球被断、漏人、被打穿,还是某个关键词)以及数据的来源(是文本记录、视频标签还是数据库)。
由于你没有提供具体的数据文件,我给你提供三个最常用场景的实用脚本(Python),你可以根据手头的数据类型直接套用。
从视频/直播的文本记录(如解说词、赛后报告)中统计关键词次数
适用情况:你有一段从转播字幕或球探报告中复制下来的文字,想统计“防守漏洞”、“漏人”、“失位”、“被打穿”等词出现的频率。
# -*- coding: utf-8 -*-
"""
脚本名称:区域防守漏洞关键词统计器
功能:统计一段文本中,描述防守漏洞的各种同义词出现的总次数。
"""
import re
from collections import Counter
def count_defensive_lapses(text, keywords=None):
"""
统计防守漏洞关键词出现次数
:param text: 输入的文本字符串
:param keywords: 关键词列表,如果不提供则使用默认内置词库
"""
if keywords is None:
keywords = [
"防守漏洞", "漏人", "失位", "被打穿", "防线缺口",
"空当", "漏防", "盯人不紧", "身后球", "被打身后"
]
# 初始化计数器
total_count = 0
keyword_stats = Counter()
# 将文本转换为小写(如果关键词是英文)
text_lower = text.lower()
# 逐词统计
for kw in keywords:
kw_lower = kw.lower()
# 使用 re.findall 来统计所有出现次数(非重叠)
count = len(re.findall(re.escape(kw_lower), text_lower))
if count > 0:
keyword_stats[kw] = count
total_count += count
return total_count, keyword_stats
# ---------- 使用示例 ----------
if __name__ == "__main__":
# 模拟一段球探报告文本
sample_text = """
第23分钟,对方边锋突破,**防守漏洞**暴露,中卫失位导致射门。
第45分钟,再次出现**漏人**现象,前点**漏人**造成丢球。
下半场,球队整体阵型前压,**被打穿**两次,防线**被打穿**的问题严重。
终场前,**防守漏洞**再一次显现,**失位**后补防不及。
"""
total, stats = count_defensive_lapses(sample_text)
print(f"总漏洞次数: {total} 次")
print("明细统计:")
for kw, c in stats.items():
print(f" - {kw}: {c} 次")
从结构化的赛事数据(Excel/CSV)中统计
适用情况:你有一张表(match_events.csv),里面有“事件类型”列(包含了“防守漏洞”记录),或者有“区域”列(如:A区、B区)和“是否漏洞”列,你想统计某个特定区域在多少场比赛里出现了漏洞。
# -*- coding: utf-8 -*-
"""
脚本名称:CSV数据漏洞统计器
功能:读取CSV文件,筛选出标记为“防守漏洞”的事件,按区域分组统计次数。
前提:CSV文件中有一列叫 'event_type'(值为 'defensive_lapse')和一列叫 'zone'。
"""
import pandas as pd
def analyze_csv(file_path, event_column='event_type', zone_column='zone', lapse_value='defensive_lapse'):
"""
从CSV文件中统计每个区域的防守漏洞次数
:param file_path: CSV文件路径
:param event_column: 事件类型列名
:param zone_column: 区域列名
:param lapse_value: 表示漏洞的特定值(如 '漏洞' 或 'lapse')
"""
# 读取文件(请根据实际分隔符修改 sep 参数)
df = pd.read_csv(file_path)
# 筛选出漏洞事件
lapses_df = df[df[event_column] == lapse_value]
# 如果确实有区域列,则按区域统计
if zone_column in df.columns:
result = lapses_df[zone_column].value_counts().reset_index()
result.columns = [zone_column, '漏洞次数']
total = result['漏洞次数'].sum()
return total, result
else:
# 没有区域列,只返回总数
return len(lapses_df), None
# ---------- 使用示例 ----------
if __name__ == "__main__":
# 假设你的文件是 'match_data.csv'
try:
total, zone_stats = analyze_csv('match_data.csv')
print(f"总漏洞次数: {total}")
if zone_stats is not None:
print("各区域漏洞分布:")
print(zone_stats.to_string(index=False))
except FileNotFoundError:
print("错误:找不到该CSV文件,请检查文件路径。")
从比赛录像的帧/事件日志(JSON)中统计
适用情况:如果你在做视频分析,导出的数据是JSON格式,每个“防守漏洞”都是一个独立事件对象,里面含有位置(x,y坐标)或时间段,可以统计在一场比赛中漏洞发生的频次以及密集时间段。
# -*- coding: utf-8 -*-
"""
脚本名称:JSON事件日志漏洞频次统计
功能:解析JSON事件列表,统计防守漏洞事件总数,并找出发生次数最多的上半场/下半场。
"""
import json
from collections import Counter
def analyze_json_events(json_file_path):
"""
:param json_file_path: JSON文件路径,格式为 [{"type": "lapse", "minute": 23}, ...]
"""
with open(json_file_path, 'r', encoding='utf-8') as f:
events = json.load(f)
# 筛选出类型为 'lapse' 的事件(可以根据你的数据调整字段名)
lapses = [ev for ev in events if ev.get('type') == 'lapse']
# 按分钟统计次数(用于找密集爆发期)
minute_counter = Counter()
for lapse in lapses:
minute = lapse.get('minute', 0)
minute_counter[minute] += 1
# 按时间段划分(上半场1-45分钟,下半场46-90分钟)
first_half = sum(v for k, v in minute_counter.items() if k <= 45)
second_half = sum(v for k, v in minute_counter.items() if k > 45)
# 找出单分钟发生最多的时段
peak_minute = minute_counter.most_common(1)[0] if minute_counter else (0, 0)
return {
"总漏洞次数": len(lapses),
"上半场次数": first_half,
"下半场次数": second_half,
"漏洞最集中的分钟": f"第{peak_minute[0]}分钟 (发生{peak_minute[1]}次)"
}
# ---------- 使用示例 ----------
if __name__ == "__main__":
# 模拟数据
result = analyze_json_events('events.json')
for key, value in result.items():
print(f"{key}: {value}")
如何选择脚本?
| 你的场景 | 推荐脚本 |
|---|---|
| 有文字报告/解说词 | 场景一(关键词统计) |
| 有一张电子表格(Excel/CSV) | 场景二(Pandas统计) |
| 有程序化的比赛事件数据(JSON) | 场景三(结构化统计) |
如果你有具体的文件格式(比如一张截图或CSV表头),可以发给我,我帮你改造成直接可用的代码。