python案例统计斜长传精准度如何?

wen python案例 3

本文目录导读:

python案例统计斜长传精准度如何?

  1. 📊 主要功能:
  2. 🔧 可扩展方向:
  3. 💡 实际应用场景:

我来为你设计一个统计斜长传精准度的Python案例,这个案例会模拟足球比赛中的斜长传数据,并计算相关统计指标。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import mean_squared_error
import seaborn as sns
class DiagonalPassAnalyzer:
    """斜长传精准度分析器"""
    def __init__(self):
        self.passes_data = []
    def generate_pass_data(self, num_passes=100):
        """生成模拟的斜长传数据"""
        np.random.seed(42)
        # 生成模拟数据:包括传球距离、角度偏差、是否成功等
        for i in range(num_passes):
            pass_data = {
                'pass_id': f'P{i+1:03d}',
                'distance': np.random.normal(45, 10),  # 传球距离(米)
                'angle_error': np.random.beta(2, 5) * 15,  # 角度偏差(度)
                'height_error': np.random.normal(0.8, 0.3),  # 高度偏差(米)
                'success': np.random.choice([True, False], p=[0.72, 0.28]),  # 是否成功
                'player_skill': np.random.randint(60, 95),  # 球员能力值
                'team': np.random.choice(['A队', 'B队'], p=[0.5, 0.5]),  # 球队
            }
            self.passes_data.append(pass_data)
        return pd.DataFrame(self.passes_data)
    def calculate_accuracy(self, df):
        """计算精准度指标"""
        # 1. 基本成功率
        success_rate = df['success'].sum() / len(df) * 100
        # 2. 平均角度偏差(成功的传球)
        successful_passes = df[df['success'] == True]
        avg_angle_error = successful_passes['angle_error'].mean()
        # 3. 综合精准度评分(自定义公式)
        df['accuracy_score'] = (
            100 - (df['angle_error'] * 2) - (df['height_error'] * 10)
        ).clip(0, 100)
        df.loc[df['success'] == False, 'accuracy_score'] = 0
        # 4. 加权精准度(考虑传球距离)
        df['weighted_accuracy'] = df['accuracy_score'] * (df['distance'] / df['distance'].max())
        return {
            'success_rate': success_rate,
            'avg_angle_error': avg_angle_error,
            'avg_accuracy_score': df['accuracy_score'].mean(),
            'total_weighted_accuracy': df['weighted_accuracy'].sum()
        }, df
    def team_comparison(self, df):
        """球队对比分析"""
        team_stats = df.groupby('team').agg({
            'success': 'mean',
            'angle_error': 'mean',
            'accuracy_score': 'mean'
        }).round(2)
        team_stats.columns = ['成功率(%)', '平均角度偏差(度)', '平均精准度评分']
        team_stats['成功率(%)'] = team_stats['成功率(%)'] * 100
        return team_stats
    def player_skill_analysis(self, df):
        """球员能力与精准度关系分析"""
        # 按能力值分档
        df['skill_level'] = pd.cut(df['player_skill'], 
                                   bins=[0, 60, 70, 80, 90, 100], 
                                   labels=['低', '中下', '中等', '良好', '优秀'])
        skill_accuracy = df.groupby('skill_level', observed=True).agg({
            'success': 'mean',
            'angle_error': 'mean',
            'accuracy_score': 'mean'
        }).round(2)
        return skill_accuracy
    def visualize_results(self, df, metrics):
        """可视化分析结果"""
        fig, axes = plt.subplots(2, 2, figsize=(14, 10))
        # 1. 精准度分布直方图
        axes[0, 0].hist(df['accuracy_score'], bins=20, alpha=0.7, edgecolor='black')
        axes[0, 0].set_title(f'精准度分布 (平均: {metrics["avg_accuracy_score"]:.1f})')
        axes[0, 0].set_xlabel('精准度评分')
        axes[0, 0].set_ylabel('传球次数')
        axes[0, 0].axvline(metrics['avg_accuracy_score'], color='red', linestyle='--')
        # 2. 角度偏差与成功率关系
        angle_bins = pd.cut(df['angle_error'], bins=[0, 2, 4, 6, 8, 10, 15])
        angle_success = df.groupby(angle_bins, observed=True)['success'].mean() * 100
        axes[0, 1].bar(range(len(angle_success)), angle_success.values)
        axes[0, 1].set_xticks(range(len(angle_success)))
        axes[0, 1].set_xticklabels([f'{interval}' for interval in angle_success.index], rotation=45)
        axes[0, 1].set_title('角度偏差 vs 成功率')
        axes[0, 1].set_xlabel('角度偏差范围')
        axes[0, 1].set_ylabel('成功率(%)')
        # 3. 传球距离与精准度散点图
        axes[1, 0].scatter(df['distance'], df['accuracy_score'], 
                          c=df['success'], cmap='RdYlGn', alpha=0.6)
        axes[1, 0].set_title('传球距离 vs 精准度')
        axes[1, 0].set_xlabel('传球距离(米)')
        axes[1, 0].set_ylabel('精准度评分')
        axes[1, 0].colorbar = plt.colorbar(axes[1, 0].collections[0], ax=axes[1, 0], label='成功(绿)/失败(红)')
        # 4. 球员能力与精准度关系
        skill_accuracy = self.player_skill_analysis(df)
        axes[1, 1].plot(skill_accuracy.index, skill_accuracy['success'] * 100, 
                       'o-', linewidth=2, markersize=8)
        axes[1, 1].set_title('球员能力 vs 精准度')
        axes[1, 1].set_xlabel('能力等级')
        axes[1, 1].set_ylabel('成功率(%)')
        axes[1, 1].grid(True)
        plt.tight_layout()
        plt.show()
    def export_report(self, df, metrics, team_stats, filename='pass_report.csv'):
        """导出详细报告"""
        report = pd.DataFrame({
            '指标': list(metrics.keys()),
            '数值': list(metrics.values())
        })
        report.to_csv(filename, index=False)
        team_stats.to_csv('team_stats.csv')
        df.to_csv('pass_details.csv', index=False)
        print(f"报告已导出: {filename}, team_stats.csv, pass_details.csv")
    def run_complete_analysis(self):
        """运行完整分析流程"""
        print("="*50)
        print("斜长传精准度分析系统")
        print("="*50)
        # 生成数据
        df = self.generate_pass_data(100)
        # 计算指标
        metrics, df = self.calculate_accuracy(df)
        # 球队对比
        team_stats = self.team_comparison(df)
        # 输出结果
        print("\n📊 总体精准度指标:")
        print(f"• 成功率: {metrics['success_rate']:.2f}%")
        print(f"• 平均角度偏差: {metrics['avg_angle_error']:.2f}度")
        print(f"• 平均精准度评分: {metrics['avg_accuracy_score']:.2f}/100")
        print(f"• 加权精准度总分: {metrics['total_weighted_accuracy']:.2f}")
        print("\n🏆 球队对比:")
        print(team_stats)
        print("\n📈 球员能力分析:")
        print(self.player_skill_analysis(df))
        # 可视化
        self.visualize_results(df, metrics)
        # 导出报告
        self.export_report(df, metrics, team_stats)
        return df, metrics, team_stats
# 使用示例
if __name__ == "__main__":
    analyzer = DiagonalPassAnalyzer()
    df, metrics, team_stats = analyzer.run_complete_analysis()

这个案例提供了以下功能:

📊 主要功能:

  1. 数据模拟:生成模拟的斜长传数据(距离、角度偏差、高度偏差等)

  2. 精准度计算

    • 成功率
    • 角度偏差分析
    • 综合精准度评分(自定义公式)
    • 加权精准度(考虑传球距离)
  3. 多维度分析

    • 球队对比
    • 球员能力分析
    • 距离与精准度的关系
    • 角度偏差的影响
  4. 可视化呈现

    • 精准度分布直方图
    • 角度偏差与成功率关系
    • 距离与精准度散点图
    • 球员能力热力图

🔧 可扩展方向:

  1. 真实数据接入:可以接入实际比赛数据或视频分析数据
  2. 机器学习预测:使用AI预测传球成功率
  3. 实时监控:用于训练或比赛中的实时分析
  4. 多维度评估:加入更多指标如落点准确性、防守压力等

💡 实际应用场景:

  • 教练员评估球员技术
  • 球队战术分析
  • 球员训练效果评估
  • 比赛数据报告

如果你有具体的实际数据,我可以帮你调整分析逻辑以适配你的数据格式。

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