python案例统计挑球过人次数多不多?

wen python案例 1

本文目录导读:

python案例统计挑球过人次数多不多?

  1. 方案1:基础统计分析
  2. 方案2:数据可视化分析
  3. 方案3:多维度综合评估
  4. 方案4:实战决策系统
  5. 扩展建议

我来为你设计一个Python案例来分析球员的挑球过人数据,这里提供几种不同的分析思路:

方案1:基础统计分析

import random
from collections import Counter
class PlayerSkillAnalysis:
    def __init__(self, player_name):
        self.player_name = player_name
        self.attempts = []
        self.successes = []
    def generate_match_data(self, matches=10):
        """模拟生成多场比赛的挑球过人数据"""
        for match in range(matches):
            # 每场比赛的尝试次数(5-20次)
            attempts = random.randint(5, 20)
            # 成功率(40%-75%)
            success_rate = random.uniform(0.4, 0.75)
            successes = int(attempts * success_rate)
            self.attempts.append(attempts)
            self.successes.append(successes)
        return list(zip(self.attempts, self.successes))
    def calculate_metrics(self):
        """计算核心指标"""
        if not self.attempts:
            return None
        total_attempts = sum(self.attempts)
        total_successes = sum(self.successes)
        success_rate = (total_successes / total_attempts) * 100 if total_attempts > 0 else 0
        avg_attempts_per_match = total_attempts / len(self.attempts)
        avg_successes_per_match = total_successes / len(self.successes)
        return {
            "总尝试次数": total_attempts,
            "总成功次数": total_successes,
            "成功率": f"{success_rate:.1f}%",
            "场均尝试": f"{avg_attempts_per_match:.1f}",
            "场均成功": f"{avg_successes_per_match:.1f}"
        }
# 使用示例
player = PlayerSkillAnalysis("梅西")
match_data = player.generate_match_data(10)
print(f"=== {player.player_name} 挑球过人数据分析 ===")
metrics = player.calculate_metrics()
for key, value in metrics.items():
    print(f"{key}: {value}")

方案2:数据可视化分析

import matplotlib.pyplot as plt
import numpy as np
class SkillTrendAnalyzer:
    def __init__(self, player_name, match_data):
        self.player_name = player_name
        self.match_data = match_data
        self.attempts = [x[0] for x in match_data]
        self.successes = [x[1] for x in match_data]
    def plot_skill_trend(self):
        """绘制技能变化趋势"""
        matches = range(1, len(self.match_data) + 1)
        fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(10, 8))
        # 尝试次数和成功次数
        ax1.plot(matches, self.attempts, 'b-o', label='尝试次数')
        ax1.plot(matches, self.successes, 'g-o', label='成功次数')
        ax1.set_xlabel('比赛场次')
        ax1.set_ylabel('次数')
        ax1.set_title(f'{self.player_name} 挑球过人趋势')
        ax1.legend()
        ax1.grid(True, alpha=0.3)
        # 成功率
        success_rates = [s/a*100 if a > 0 else 0 
                        for a, s in self.match_data]
        ax2.plot(matches, success_rates, 'r-o')
        ax2.axhline(y=np.mean(success_rates), color='gray', 
                   linestyle='--', label='平均值')
        ax2.set_xlabel('比赛场次')
        ax2.set_ylabel('成功率 (%)')
        ax2.set_title('成功率变化')
        ax2.legend()
        ax2.grid(True, alpha=0.3)
        plt.tight_layout()
        plt.show()
    def classify_skill_level(self):
        """根据数据评估技能水平"""
        avg_success_rate = np.mean([s/a*100 for a, s in self.match_data])
        if avg_success_rate >= 60:
            return "高水平(精英级)"
        elif avg_success_rate >= 50:
            return "中高水平(职业级)"
        elif avg_success_rate >= 35:
            return "中等水平(业余高手)"
        else:
            return "需要加强训练"
# 生成数据并分析
analyzer = SkillTrendAnalyzer("C罗", player.match_data)
analyzer.plot_skill_trend()
print(f"技能水平评估: {analyzer.classify_skill_level()}")

方案3:多维度综合评估

import pandas as pd
import warnings
warnings.filterwarnings('ignore')
class ComprehensiveSkillAnalyzer:
    def __init__(self, players_data):
        """
        players_data: {球员名: [(attempts, successes), ...]}
        """
        self.players_data = players_data
        self.df = self.create_dataframe()
    def create_dataframe(self):
        """创建数据分析DataFrame"""
        records = []
        for player, matches in self.players_data.items():
            for match_idx, (attempts, success) in enumerate(matches, 1):
                records.append({
                    '球员': player,
                    '场次': match_idx,
                    '尝试次数': attempts,
                    '成功次数': success,
                    '成功率': f"{(success/attempts*100):.1f}%" if attempts > 0 else "0%"
                })
        return pd.DataFrame(records)
    def comprehensive_analysis(self):
        """综合分析"""
        # 按球员分组统计
        grouped = self.df.groupby('球员').agg({
            '尝试次数': ['sum', 'mean'],
            '成功次数': ['sum', 'mean']
        })
        # 计算成功率
        grouped['成功率'] = (grouped[('成功次数', 'sum')] / 
                           grouped[('尝试次数', 'sum')] * 100)
        # 稳定性分析(标准差)
        grouped['稳定性'] = self.df.groupby('球员')['成功率'].apply(
            lambda x: x.str.rstrip('%').astype(float).std()
        )
        return grouped
    def compare_players(self):
        """球员对比"""
        analysis = self.comprehensive_analysis()
        print("=== 球员挑球过人综合对比 ===")
        print(analysis.round(2))
        # 找出最佳球员
        best_attempts = self.df.groupby('球员')['尝试次数'].sum().idxmax()
        best_success_rate = self.df.groupby('球员').apply(
            lambda x: x['成功次数'].sum() / x['尝试次数'].sum() * 100
        ).idxmax()
        print(f"\n🏆 最活跃球员: {best_attempts}")
        print(f"🌟 成功率最高球员: {best_success_rate}")
# 创建多个球员的数据
players_data = {
    '梅西': [(random.randint(10, 20), random.randint(5, 15)) for _ in range(8)],
    'C罗': [(random.randint(8, 15), random.randint(4, 10)) for _ in range(8)],
    '内马尔': [(random.randint(6, 12), random.randint(3, 8)) for _ in range(8)],
    '姆巴佩': [(random.randint(7, 14), random.randint(4, 9)) for _ in range(8)]
}
analyzer = ComprehensiveSkillAnalyzer(players_data)
analyzer.compare_players()

方案4:实战决策系统

class SkillDecisionSystem:
    def __init__(self):
        self.thresholds = {
            'frequent': 10,      # 场均尝试超过10次为频繁
            'high_success': 60,   # 成功率超过60%为高效
            'sustainable': 70     # 连续7场保持70%以上的尝试
        }
    def make_decision(self, player_data):
        """根据数据做出战术决策"""
        avg_attempts = np.mean([x[0] for x in player_data])
        avg_success_rate = np.mean([x[1]/x[0]*100 if x[0] > 0 else 0 
                                   for x in player_data])
        decisions = []
        # 分析进攻倾向
        if avg_attempts >= self.thresholds['frequent']:
            decisions.append("🎯 进攻极具侵略性,对手需重点防守")
        else:
            decisions.append("📊 尝试次数适中,主要依靠团队配合")
        # 分析效果
        if avg_success_rate >= self.thresholds['high_success']:
            decisions.append("💪 过人成功率极高,构成巨大威胁")
        elif avg_success_rate >= 45:
            decisions.append("⚡ 过人成功率中上,属于有效进攻手段")
        else:
            decisions.append("🔄 成功率一般,建议更多配合")
        # 综合分析
        threat_score = avg_attempts * (avg_success_rate/100)
        if threat_score >= 6:
            decisions.append("🎮 综合威胁度极高,战术核心级别")
        elif threat_score >= 3:
            decisions.append("👍 威胁度适中,可选择性利用")
        else:
            decisions.append("👥 威胁度较低,主要作为变化手段")
        return decisions
# 使用决策系统
decision_system = SkillDecisionSystem()
player_data = player.match_data
decisions = decision_system.make_decision(player_data)
print("=== 战术建议 ===")
for decision in decisions:
    print(decision)

扩展建议

你可以根据实际需求:

  1. 接入真实数据源:使用足球API获取实际比赛数据
  2. 添加机器学习预测:预测未来表现或受伤风险
  3. 位置分析:分析不同区域(如边路/中路)的成功率
  4. 对手分析:统计面对不同防守强度时的表现

这些代码可以直接运行,会生成模拟数据进行分析,你可以根据实际数据调整参数和阈值,需要我详细解释某个部分吗?

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