Python案例统计区域防守漏洞出现几次?

wen python案例 1

本文目录导读:

Python案例统计区域防守漏洞出现几次?

  1. 场景假设
  2. 示例数据
  3. 方法1:使用字典统计(最直接)
  4. 方法2:使用collections.Counter
  5. 方法3:按事件类型细化统计
  6. 方法4:使用Pandas(适合大数据量)
  7. 完整实用案例:篮球防守分析
  8. 输出示例

我来帮你分析一个关于统计区域防守漏洞出现次数的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次导致失分
  - 加强对右侧底角的防守训练

针对你问的“统计区域防守漏洞出现几次”,我提供了以下几个方案:

  1. 基础字典法:最直接,适合小数据量
  2. Counter统计:代码简洁,适合简单统计
  3. 细化统计:按事件类型详细分析
  4. Pandas方案:适合大数据量和复杂分析
  5. 完整实例:结合篮球场景的完整分析

如果你有具体的数据格式或场景,请告诉我,我可以提供更精确的解决方案!

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