本文目录导读:

我来为你设计一个统计斜长传精准度的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()
这个案例提供了以下功能:
📊 主要功能:
-
数据模拟:生成模拟的斜长传数据(距离、角度偏差、高度偏差等)
-
精准度计算:
- 成功率
- 角度偏差分析
- 综合精准度评分(自定义公式)
- 加权精准度(考虑传球距离)
-
多维度分析:
- 球队对比
- 球员能力分析
- 距离与精准度的关系
- 角度偏差的影响
-
可视化呈现:
- 精准度分布直方图
- 角度偏差与成功率关系
- 距离与精准度散点图
- 球员能力热力图
🔧 可扩展方向:
- 真实数据接入:可以接入实际比赛数据或视频分析数据
- 机器学习预测:使用AI预测传球成功率
- 实时监控:用于训练或比赛中的实时分析
- 多维度评估:加入更多指标如落点准确性、防守压力等
💡 实际应用场景:
- 教练员评估球员技术
- 球队战术分析
- 球员训练效果评估
- 比赛数据报告
如果你有具体的实际数据,我可以帮你调整分析逻辑以适配你的数据格式。
版权声明: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直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播