本文目录导读:

我理解您想用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}")
使用建议
- 数据准备:确保每条记录都有
player和action字段 - 关键词扩展:可以根据实际需求添加更多描述转身过人的关键词
- 结果导出:可以使用
pandas将结果导出为Excel表格 - 实时分析:可以结合视频帧分析API实现自动化统计
这个案例可以根据您的具体需求进行调整,比如从不同格式的数据源读取、添加更多动作识别模式或生成更丰富的统计报告。