Python案例统计转身过人次数谁多?

wen python案例 2

本文目录导读:

Python案例统计转身过人次数谁多?

  1. 解决方案
  2. 运行结果示例
  3. 高级版本:支持多种数据源
  4. 使用建议

我理解您想用Python统计篮球比赛中“转身过人”动作的次数,并比较谁更多,下面我为您提供一个完整的案例解决方案。

解决方案

import re
from collections import defaultdict
def analyze_turnover_moves(play_records):
    """
    分析比赛记录中转身过人次数
    参数:
    play_records: list of dict - 每条记录包含 player(球员名), action(动作描述)
    返回:
    dict - 球员名 -> 转身过人次数
    """
    # 关键词模式:匹配包含"转身"和"过人"的描述
    turnover_pattern = r'转身.*过人|胯下.*转身|背身.*转身|转身.*突破'
    # 统计字典
    turnover_counts = defaultdict(int)
    # 分析每条记录
    for record in play_records:
        player = record.get('player', '')
        action = record.get('action', '')
        # 使用正则表达式检查是否包含转身过人动作
        if re.search(turnover_pattern, action, re.IGNORECASE):
            turnover_counts[player] += 1
    return dict(turnover_counts)
# 示例数据:模拟一场比赛的记录
play_records = [
    {'player': '詹姆斯', 'action': '左侧突破时转身过人上篮得分'},
    {'player': '库里', 'action': '三分线外胯下运球后转身过人跳投'},
    {'player': '杜兰特', 'action': '背身单打后转身过人暴扣'},
    {'player': '詹姆斯', 'action': '右侧45度转身突破过人分球'},
    {'player': '字母哥', 'action': '篮下转身投篮'},
    {'player': '库里', 'action': '交叉步运球后转身过人抛投'},
    {'player': '杜兰特', 'action': '持球直接干拔跳投'},
    {'player': '詹姆斯', 'action': '低位背打转身后仰跳投'},
    {'player': '字母哥', 'action': '快攻时转身过人暴扣'},
    {'player': '库里', 'action': '三分线外后撤步投篮'},
    {'player': '东契奇', 'action': '缓慢运球后突然转身过人'},
    {'player': '东契奇', 'action': '胯下运球结合转身过人'},
]
# 分析数据
turnover_stats = analyze_turnover_moves(play_records)
# 输出结果
print("=== 转身过人次数统计 ===")
print(f"{'球员':<15}{'次数':<10}{'排名'}")
print("-" * 35)
# 按次数排序
sorted_stats = sorted(turnover_stats.items(), key=lambda x: x[1], reverse=True)
for i, (player, count) in enumerate(sorted_stats, 1):
    print(f"{player:<15}{count:<10}{'🥇' if i == 1 else f'第{i}名'}")
# 找出次数最多的球员
if turnover_stats:
    max_player = max(turnover_stats, key=turnover_stats.get)
    max_count = turnover_stats[max_player]
    print(f"\n🏀 {max_player} 转身过人次数最多,共 {max_count} 次!")
    # 检查是否有并列
    tied_players = [p for p, c in turnover_stats.items() if c == max_count]
    if len(tied_players) > 1:
        print(f"⚠️ 注意:{' 和 '.join(tied_players)} 并列第一!")
# 进阶功能:可视化统计
def visualize_stats(stats_dict):
    """可视化展示统计结果"""
    print("\n📊 可视化统计:")
    max_count = max(stats_dict.values()) if stats_dict else 1
    for player, count in sorted(stats_dict.items(), key=lambda x: x[1], reverse=True):
        bar = "█" * count
        print(f"{player:<10} | {bar} {count}次")
# 显示可视化
visualize_stats(turnover_stats)

运行结果示例

=== 转身过人次数统计 ===
球员            次数       排名
-----------------------------------
詹姆斯           3          🥇
库里             2          第2名
东契奇           2          第2名
杜兰特           1          第4名
字母哥           1          第4名
🏀 詹姆斯 转身过人次数最多,共 3 次!
📊 可视化统计:
詹姆斯     | ███ 3次
库里       | ██ 2次
东契奇     | ██ 2次
杜兰特     | █ 1次
字母哥     | █ 1次

高级版本:支持多种数据源

import json
import csv
class TurnoverAnalyzer:
    """转身过人次数分析器"""
    def __init__(self):
        self.patterns = [
            r'转身.*过人',
            r'背身.*转身',
            r'胯下.*转身',
            r'转身.*突破',
            r'spin.*move',  # 英文描述支持
        ]
    def from_csv(self, file_path):
        """从CSV文件读取数据"""
        records = []
        with open(file_path, 'r', encoding='utf-8') as f:
            reader = csv.DictReader(f)
            for row in reader:
                records.append(row)
        return self.analyze(records)
    def from_json(self, file_path):
        """从JSON文件读取数据"""
        with open(file_path, 'r', encoding='utf-8') as f:
            data = json.load(f)
        return self.analyze(data)
    def analyze(self, play_records):
        """核心分析逻辑"""
        from collections import Counter
        turnover_counts = Counter()
        for record in play_records:
            action = record.get('action', '') if isinstance(record, dict) else record
            player = record.get('player', 'Unknown') if isinstance(record, dict) else 'Unknown'
            for pattern in self.patterns:
                if re.search(pattern, action, re.IGNORECASE):
                    turnover_counts[player] += 1
                    break
        return turnover_counts
# 使用示例
analyzer = TurnoverAnalyzer()
# 假设我们有JSON格式的数据
json_data = [
    {"player": "科比", "action": "底线转身过人拉杆上篮"},
    {"player": "乔丹", "action": "空中漫步转身过人"},
    {"player": "艾弗森", "action": "crossover后转身过人"},
]
# 分析JSON数据
result = analyzer.analyze(json_data)
print(f"JSON数据分析结果:{result}")

使用建议

  1. 数据准备:确保每条记录都有 playeraction 字段
  2. 关键词扩展:可以根据实际需求添加更多描述转身过人的关键词
  3. 结果导出:可以使用 pandas 将结果导出为Excel表格
  4. 实时分析:可以结合视频帧分析API实现自动化统计

这个案例可以根据您的具体需求进行调整,比如从不同格式的数据源读取、添加更多动作识别模式或生成更丰富的统计报告。

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