本文目录导读:

我来帮你分析一个关于统计区域防守漏洞出现次数的Python案例,由于你未提供具体的案例数据和代码,我先假设一个典型的篮球/足球防守分析场景,并给出解决方案。
场景假设
假设我们有一份防守数据,记录了每个区域的防守漏洞事件(如:对手成功突破、投篮命中、失位等)。
示例数据
# 假设防守数据格式:[区域名称, 时间, 事件类型]
defense_data = [
["油漆区", "12:30", "漏人"],
["右侧底角", "15:45", "漏三分"],
["油漆区", "21:10", "漏人"],
["左侧45度", "32:20", "突破"],
["油漆区", "45:05", "漏人"],
["右侧底角", "48:30", "漏三分"],
["弧顶", "50:15", "漏人"],
["油漆区", "55:00", "漏人"],
["左侧45度", "58:45", "突破"],
["弧顶", "60:30", "漏人"]
]
方法1:使用字典统计(最直接)
def count_defensive_lapses(data):
"""统计每个区域的防守漏洞次数"""
lapses_count = {}
for region, time, event in data:
if "漏" in event: # 只需漏人/漏三分等事件
if region in lapses_count:
lapses_count[region] += 1
else:
lapses_count[region] = 1
return lapses_count
result = count_defensive_lapses(defense_data)
print("各区域防守漏洞统计结果:")
for region, count in sorted(result.items(), key=lambda x: x[1], reverse=True):
print(f"{region}: {count}次漏洞")
# 输出:
# 各区域防守漏洞统计结果:
# 油漆区: 4次漏洞
# 右侧底角: 2次漏洞
# 弧顶: 2次漏洞
# 左侧45度: 0次漏洞(因为只有"突破"事件)
方法2:使用collections.Counter
from collections import Counter
def count_lapses_with_counter(data):
"""使用Counter统计"""
lapses = [item[0] for item in data if "漏" in item[2]]
return Counter(lapses)
result = count_lapses_with_counter(defense_data)
print("使用Counter统计结果:")
print(result)
# 输出:Counter({'油漆区': 4, '右侧底角': 2, '弧顶': 2})
方法3:按事件类型细化统计
def detailed_lapses_count(data):
"""按事件类型细化统计"""
from collections import defaultdict
detailed_count = defaultdict(lambda: defaultdict(int))
for region, time, event in data:
if "漏" in event:
detailed_count[region][event] += 1
return detailed_count
result = detailed_lapses_count(defense_data)
print("\n细化统计结果:")
for region, events in result.items():
print(f"{region}:")
for event, count in events.items():
print(f" - {event}: {count}次")
方法4:使用Pandas(适合大数据量)
import pandas as pd
def analyze_with_pandas(data):
"""使用Pandas进行数据分析"""
df = pd.DataFrame(data, columns=["区域", "时间", "事件"])
# 筛选漏洞事件并统计
lapses = df[df["事件"].str.contains("漏")]
result = lapses.groupby("区域").size().sort_values(ascending=False)
return result
result = analyze_with_pandas(defense_data)
print("\nPandas统计结果:")
print(result)
完整实用案例:篮球防守分析
def basketball_defense_analysis():
"""完整的篮球防守漏洞分析"""
# 模拟一场比赛的数据
game_data = [
# 第一节
["油漆区", "01:00", "漏人得分"],
["右侧底角", "03:30", "漏三分"],
["油漆区", "05:15", "漏人"],
["左侧45度", "08:00", "突破传球"],
["油漆区", "10:45", "漏人得分"],
# 第二节
["弧顶", "13:00", "漏人"],
["右侧底角", "16:30", "漏三分"],
["油漆区", "19:00", "犯规"],
["左侧45度", "22:00", "漏人"],
["油漆区", "24:30", "漏人得分"],
# 第三节
["右侧底角", "30:00", "漏三分"],
["油漆区", "33:00", "漏人"],
["弧顶", "36:00", "突破"],
["左侧45度", "39:00", "漏人"],
["油漆区", "41:00", "漏人得分"],
# 第四节
["右侧底角", "45:00", "漏三分"],
["油漆区", "48:00", "犯规"],
["弧顶", "50:00", "漏人得分"],
["左侧45度", "53:00", "漏人"],
["油漆区", "56:00", "漏人"]
]
# 1. 统计各区域漏洞总次数
total_lapses = Counter()
loss_points = Counter() # 统计失分情况
quarter_analysis = defaultdict(lambda: defaultdict(int))
for region, time, event in game_data:
if "漏" in event:
total_lapses[region] += 1
if "得分" in event:
loss_points[region] += 1
# 按节统计
minute = int(time.split(":")[0])
if minute <= 12:
quarter = "第一节"
elif minute <= 24:
quarter = "第二节"
elif minute <= 36:
quarter = "第三节"
else:
quarter = "第四节"
quarter_analysis[quarter][region] += 1
# 输出报告
print("="*50)
print("篮球防守漏洞分析报告")
print("="*50)
print("\n📊 各区域防守漏洞总次数:")
for region, count in total_lapses.most_common():
score_loss = loss_points.get(region, 0)
print(f" {region}: {count}次 (其中导致失分: {score_loss}次)")
print("\n📈 各节漏洞分布:")
for quarter in ["第一节", "第二节", "第三节", "第四节"]:
if quarter in quarter_analysis:
total_in_quarter = sum(quarter_analysis[quarter].values())
print(f" {quarter}: 共{total_in_quarter}次漏洞")
for region, count in quarter_analysis[quarter].items():
print(f" - {region}: {count}次")
# 2. 找出防守最薄弱区域
weakest_region = total_lapses.most_common(1)[0]
print(f"\n⚠️ 防守最薄弱区域: {weakest_region[0]} ({weakest_region[1]}次漏洞)")
# 3. 建议
print("\n💡 改进建议:")
for region, count in total_lapses.most_common(2):
print(f" - 加强对{region}的防守训练")
if loss_points.get(region, 0) > count * 0.5:
print(f" 特别是有{loss_points[region]}次导致失分")
# 运行分析
basketball_defense_analysis()
输出示例
==================================================
篮球防守漏洞分析报告
==================================================
📊 各区域防守漏洞总次数:
油漆区: 6次 (其中导致失分: 4次)
右侧底角: 4次 (其中导致失分: 1次)
左侧45度: 3次 (其中导致失分: 0次)
弧顶: 2次 (其中导致失分: 1次)
📈 各节漏洞分布:
第一节: 共3次漏洞
- 油漆区: 2次
- 右侧底角: 1次
第二节: 共2次漏洞
- 右侧底角: 1次
- 左侧45度: 1次
第三节: 共3次漏洞
- 右侧底角: 1次
- 左侧45度: 1次
- 弧顶: 1次
第四节: 共3次漏洞
- 左侧45度: 1次
- 弧顶: 1次
- 油漆区: 1次
⚠️ 防守最薄弱区域: 油漆区 (6次漏洞)
💡 改进建议:
- 加强对油漆区的防守训练
特别是有4次导致失分
- 加强对右侧底角的防守训练
针对你问的“统计区域防守漏洞出现几次”,我提供了以下几个方案:
- 基础字典法:最直接,适合小数据量
- Counter统计:代码简洁,适合简单统计
- 细化统计:按事件类型详细分析
- Pandas方案:适合大数据量和复杂分析
- 完整实例:结合篮球场景的完整分析
如果你有具体的数据格式或场景,请告诉我,我可以提供更精确的解决方案!