python案例统计脚后跟传球成功几次?

wen python案例 1

本文目录导读:

python案例统计脚后跟传球成功几次?

  1. 方案一:基于事件日志的统计
  2. 方案二:简单的计数器版本
  3. 方案三:从CSV文件读取数据
  4. 方案四:从比赛数据中提取
  5. 使用建议

我可以帮你编写一个统计脚后跟传球成功次数的Python程序,不过需要先明确具体的数据格式和分析方法。

基于事件日志的统计

如果有一段足球比赛的事件日志数据:

# 示例数据:每行包含事件类型、球员、结果等
events = [
    {"type": "pass", "method": "heel", "result": "success", "player": "Messi", "minute": 23},
    {"type": "pass", "method": "regular", "result": "success", "player": "Ronaldo", "minute": 25},
    {"type": "pass", "method": "heel", "result": "fail", "player": "Messi", "minute": 30},
    {"type": "pass", "method": "heel", "result": "success", "player": "Iniesta", "minute": 45},
    {"type": "pass", "method": "heel", "result": "success", "player": "Messi", "minute": 67},
]
def count_heel_passes(events):
    """统计脚后跟传球成功次数"""
    successful_heels = 0
    total_heels = 0
    for event in events:
        if event["type"] == "pass" and event["method"] == "heel":
            total_heels += 1
            if event["result"] == "success":
                successful_heels += 1
                print(f"第{event['minute']}分钟 {event['player']} 脚后跟传球成功")
    print(f"\n脚后跟传球总数: {total_heels}")
    print(f"成功次数: {successful_heels}")
    print(f"成功率: {successful_heels/total_heels*100:.1f}%")
    return successful_heels
# 执行统计
result = count_heel_passes(events)

简单的计数器版本

def simple_heel_counter():
    """交互式统计脚后跟传球"""
    successful = 0
    total = 0
    print("请输入每次脚后跟传球的结果 (成功=s, 失败=f, 退出=q):")
    while True:
        user_input = input("本次传球结果: ").lower().strip()
        if user_input == 'q':
            break
        elif user_input == 's':
            successful += 1
            total += 1
            print("✓ 成功!")
        elif user_input == 'f':
            total += 1
            print("✗ 失败")
        else:
            print("无效输入,请输入 s/f/q")
    print(f"\n统计结果:")
    print(f"总传球次数: {total}")
    print(f"成功次数: {successful}")
    if total > 0:
        print(f"成功率: {successful/total*100:.1f}%")
    return successful
# 运行简单计数器
simple_heel_counter()

从CSV文件读取数据

import csv
from collections import Counter
def analyze_heel_passes_from_csv(filename):
    """
    从CSV文件分析脚后跟传球
    CSV格式: 时间,球员,传球方式,结果
    例: 23,Messi,heel,success
    """
    heel_attempts = []
    successful_heels = []
    player_stats = Counter()
    try:
        with open(filename, 'r', encoding='utf-8') as file:
            reader = csv.reader(file)
            header = next(reader)  # 跳过表头
            print(f"CSV列名: {header}")
            for row in reader:
                if len(row) >= 4:
                    minute, player, method, result = row[0], row[1], row[2], row[3]
                    if method.lower() == 'heel':
                        heel_attempts.append(row)
                        player_stats[player] += 1
                        if result.lower() == 'success':
                            successful_heels.append(row)
    except FileNotFoundError:
        print(f"未找到文件: {filename}")
        return 0
    print(f"\n脚后跟传球统计:")
    print(f"总尝试次数: {len(heel_attempts)}")
    print(f"成功次数: {len(successful_heels)}")
    if heel_attempts:
        print(f"成功率: {len(successful_heels)/len(heel_attempts)*100:.1f}%")
    print(f"\n各球员脚后跟传球次数:")
    for player, count in player_stats.most_common():
        print(f"  {player}: {count}次")
    return len(successful_heels)
# 使用示例
# analyze_heel_passes_from_csv('matches.csv')

从比赛数据中提取

def analyze_match_data(match_data):
    """
    从比赛数据中分析脚后跟传球
    match_data: 包含所有事件的列表
    """
    heels = [
        event for event in match_data 
        if event.get('pass_type') == 'heel'
    ]
    successful = [
        event for event in heels 
        if event.get('outcome') == 'complete'
    ]
    print(f"这场比赛共有 {len(heels)} 次脚后跟传球")
    print(f"其中成功 {len(successful)} 次")
    # 可选:按时间分析
    print("\n时间分布:")
    for event in successful:
        minute = event.get('minute', 0)
        quarter = "上半场" if minute <= 45 else "下半场" if minute <= 90 else "加时"
        print(f"  {quarter} {minute}分钟 - {event.get('player')}")
    return len(successful)
# 示例数据
match = [
    {'pass_type': 'heel', 'outcome': 'complete', 'minute': 12, 'player': 'Messi'},
    {'pass_type': 'regular', 'outcome': 'complete', 'minute': 15},
    {'pass_type': 'heel', 'outcome': 'incomplete', 'minute': 30, 'player': 'Neymar'},
    {'pass_type': 'heel', 'outcome': 'complete', 'minute': 55, 'player': 'Messi'},
]
analyze_match_data(match)

使用建议

  1. 确定数据来源:是实时输入、日志文件、CSV还是比赛数据集
  2. 明确统计维度:只统计成功次数,还是需要成功率、球员分布等
  3. 添加可视化(可选):
    import matplotlib.pyplot as plt

def visualize_heel_passes(events): """可视化脚后跟传球数据""" players = [e['player'] for e in events if e['method'] == 'heel'] results = [e['result'] for e in events if e['method'] == 'heel']

# 统计
success_count = results.count('success')
fail_count = results.count('fail')
# 饼图
plt.figure(figsize=(8, 6))
plt.pie([success_count, fail_count], 
        labels=['成功', '失败'], 
        autopct='%1.1f%%',
        colors=['green', 'red'])
plt.title('脚后跟传球成功率')
plt.show()

**请告诉我:**
1. 你的数据是什么样的格式?
2. 数据来源是哪里?(实时摄像头、比赛录像记录、文本文件等)
3. 除了成功次数,还需要什么统计指标?
我可以根据你的具体需求定制更合适的代码方案。

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