本文目录导读:

我理解您想用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实现自动化统计
这个案例可以根据您的具体需求进行调整,比如从不同格式的数据源读取、添加更多动作识别模式或生成更丰富的统计报告。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播