本文目录导读:

我来帮你设计一个统计区域防守漏洞的Python案例,这里提供几种不同场景的实现方案:
方案1:基础版 - 统计文本中的防守漏洞关键词
def count_defense_vulnerabilities(text):
"""
统计文本中防守漏洞关键词出现的次数
"""
# 定义防守漏洞相关关键词
keywords = [
'漏洞', '防守失误', '空档', '漏人',
'失位', '防守漏洞', '防线缺口', '盯防失误'
]
# 统计每个关键词出现的次数
result = {}
for keyword in keywords:
count = text.count(keyword)
if count > 0:
result[keyword] = count
# 计算总数
total = sum(result.values())
return result, total
# 示例数据
match_commentary = """
比赛第23分钟,对方前锋利用快速反击,造成了防守漏洞。
后卫在禁区前沿漏人了,这是严重的防守失误。
第45分钟,防线出现缺口,对方轻松突破。
下半场开始,防守漏洞再次出现,导致失球。
中场球员失位,让对方抓住机会。
"""
result, total = count_defense_vulnerabilities(match_commentary)
print("防守漏洞统计结果:")
for keyword, count in result.items():
print(f" - {keyword}: {count}次")
print(f"\n总漏洞次数: {total}次")
方案2:进阶版 - 按时间段统计防守漏洞
import re
from collections import defaultdict
def analyze_defense_by_minute(commentary):
"""
按比赛时间段统计防守漏洞
"""
# 时间段定义
time_ranges = {
'开局阶段(0-15分钟)': (0, 15),
'上半场中段(15-30分钟)': (15, 30),
'上半场末段(30-45分钟)': (30, 45),
'下半场开局(45-60分钟)': (45, 60),
'下半场中段(60-75分钟)': (60, 75),
'收官阶段(75-90分钟)': (75, 90)
}
# 防守漏洞关键词
keywords = ['漏洞', '防守失误', '空档', '漏人', '失位', '防线缺口']
# 初始化统计字典
stats = defaultdict(lambda: defaultdict(int))
# 解析每一条评论
for line in commentary.strip().split('\n'):
# 提取时间
time_match = re.search(r'第(\d+)分钟', line)
if not time_match:
continue
minute = int(time_match.group(1))
# 确定时间段
time_period = None
for period, (start, end) in time_ranges.items():
if start < minute <= end:
time_period = period
break
# 检查每条评论中的关键词
for keyword in keywords:
if keyword in line:
stats[time_period][keyword] += 1
return stats
# 示例数据
commentary = """
第5分钟,防守出现漏洞,对方有射门机会。
第12分钟,后卫防守失误,差点造成乌龙。
第23分钟,禁区前出现空档。
第30分钟,出现防线缺口,被对方打穿。
第48分钟,防守漏洞再次出现。
第52分钟,漏人情况严重。
第68分钟,失位导致对方获得单刀机会。
第75分钟,防守失误造成点球。
第82分钟,又出现防守漏洞。
"""
stats = analyze_defense_by_minute(commentary)
print("各时间段防守漏洞统计:")
for period, keywords_count in stats.items():
if keywords_count:
total = sum(keywords_count.values())
details = ', '.join([f"{k}:{v}" for k, v in keywords_count.items()])
print(f" {period}: 共{total}次 ({details})")
方案3:专业版 - 可视化分析防守漏洞
import matplotlib.pyplot as plt
import numpy as np
from collections import Counter
def visualize_defense_analysis(commentary_data, position_data=None):
"""
可视化防守漏洞分析
"""
# 1. 统计漏洞类型分布
issue_types = {
'line_break': '防线被突破',
'position_loss': '位置丢失',
'marking_fail': '盯防失败',
'space_left': '空间留给对方',
'miscommunication': '沟通失误'
}
# 2. 模拟数据(实际应用中应从数据源获取)
issue_counts = Counter({
'line_break': 5,
'position_loss': 3,
'marking_fail': 4,
'space_left': 6,
'miscommunication': 2
})
# 3. 创建图表
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))
# 饼图:漏洞类型分布
labels = [issue_types[k] for k in issue_counts.keys()]
values = list(issue_counts.values())
colors = ['#ff9999', '#66b3ff', '#99ff99', '#ffcc99', '#ffb3e6']
ax1.pie(values, labels=labels, colors=colors, autopct='%1.1f%%',
shadow=True, startangle=90)
ax1.set_title('防守漏洞类型分布')
# 条形图:累计漏洞次数
ax2.bar(labels, values, color=colors)
ax2.set_xlabel('漏洞类型')
ax2.set_ylabel('次数')
ax2.set_title('各类型防守漏洞次数')
plt.xticks(rotation=45, ha='right')
plt.tight_layout()
plt.show()
return issue_counts
# 调用可视化函数
issue_counts = visualize_defense_analysis(None)
print(f"防守漏洞总计: {sum(issue_counts.values())}次")
方案4:实时监控版 - 简单的流式统计
class DefenseMonitor:
"""
实时防守漏洞监控器
"""
def __init__(self):
self.vulnerabilities = []
self.alert_threshold = 3 # 连续漏洞预警阈值
def add_event(self, event_time, event_type, position, description):
"""
添加防守事件
"""
event = {
'time': event_time,
'type': event_type, # '漏洞'/'防守失误'/'警告'等
'position': position, # 区域位置
'description': description,
'severity': self._assess_severity(event_type)
}
self.vulnerabilities.append(event)
self._check_alert_pattern()
def _assess_severity(self, event_type):
"""评估事件严重程度"""
severity_map = {
'防守漏洞': 3,
'防守失误': 2,
'警告': 1,
'危险': 4,
'失球': 5
}
return severity_map.get(event_type, 1)
def _check_alert_pattern(self):
"""检查是否触发连续漏洞预警"""
recent = [v for v in self.vulnerabilities[-5:]
if v['severity'] >= 2]
if len(recent) >= self.alert_threshold:
print(f"警告: 连续{len(recent)}次防守威胁!")
def get_statistics(self):
"""获取统计信息"""
total = len(self.vulnerabilities)
by_type = Counter(v['type'] for v in self.vulnerabilities)
avg_severity = sum(v['severity'] for v in self.vulnerabilities) / total
return {
'total_events': total,
'by_type': by_type,
'avg_severity': round(avg_severity, 2),
'high_risk_events': sum(1 for v in self.vulnerabilities if v['severity'] >= 4)
}
def print_report(self):
"""打印报告"""
stats = self.get_statistics()
print("=== 防守漏洞监控报告 ===")
print(f"总事件数: {stats['total_events']}")
print(f"平均严重程度: {stats['avg_severity']}/5")
print(f"高危事件: {stats['high_risk_events']}次")
print("\n详单:")
for v in self.vulnerabilities:
print(f" {v['time']} - {v['type']} - {v['position']}: "
f"{v['description']} (严重程度:{v['severity']})")
# 使用示例
monitor = DefenseMonitor()
monitor.add_event("23:45", "防守漏洞", "禁区前沿", "中卫失位")
monitor.add_event("45:12", "防守失误", "左路", "后卫漏人")
monitor.add_event("50:30", "警告", "中场", "防守站位不当")
monitor.add_event("53:00", "防守漏洞", "右路", "边路被突破")
monitor.add_event("55:45", "防守漏洞", "禁区", "危险区域失误")
monitor.print_report()
使用建议:
-
根据实际需求选择方案:简单统计用方案1,时间分析用方案2,可视化用方案3,实时监控用方案4
-
数据源适配:根据你的数据格式(文本、数据库、API等)调整解析逻辑
-
扩展性考虑:可以根据具体比赛类型(足球、篮球等)自定义漏洞定义
需要特定的数据格式或更具体的功能吗?我可以根据你的实际需求进一步调整。