我来为您提供一个统计低位防守解围次数的Python案例,这个案例将模拟足球比赛中的防守数据。

import pandas as pd
import numpy as np
from datetime import datetime
class DefenseStatsAnalyzer:
"""低位防守解围次数统计分析器"""
def __init__(self):
self.defense_data = []
def generate_sample_data(self, num_matches=10):
"""生成模拟的防守数据"""
teams = ['曼联', '利物浦', '阿森纳', '曼城', '切尔西']
positions = ['中后卫', '边后卫', '后腰', '门将']
for match_id in range(1, num_matches + 1):
for player_idx in range(5): # 每场5名防守球员
data = {
'match_id': match_id,
'date': datetime(2024, 1, 1) + pd.Timedelta(days=match_id*7),
'team': np.random.choice(teams),
'player': f'球员{player_idx+1}',
'position': np.random.choice(positions),
'clearance_count': np.random.randint(0, 15), # 解围次数
'low_block_clearance': np.random.randint(0, 10), # 低位防守解围
'minutes_played': np.random.randint(60, 95), # 出场时间
'opponent_attacks': np.random.randint(5, 30) # 对手进攻次数
}
self.defense_data.append(data)
return pd.DataFrame(self.defense_data)
def calculate_low_block_clearance_stats(self, df):
"""计算低位防守解围统计"""
stats = {
'total_low_block_clearance': df['low_block_clearance'].sum(),
'avg_low_block_clearance_per_match': df.groupby('match_id')['low_block_clearance'].sum().mean(),
'avg_low_block_clearance_per_player': df['low_block_clearance'].mean(),
'max_low_block_clearance': df['low_block_clearance'].max(),
'min_low_block_clearance': df['low_block_clearance'].min()
}
return stats
def analyze_by_position(self, df):
"""按位置分析低位防守解围"""
position_stats = df.groupby('position')['low_block_clearance'].agg(['sum', 'mean', 'max'])
return position_stats
def analyze_by_team(self, df):
"""按球队分析低位防守解围"""
team_stats = df.groupby('team')['low_block_clearance'].agg(['sum', 'mean', 'count'])
return team_stats
def identify_top_performers(self, df, top_n=5):
"""找出表现最好的防守球员"""
player_stats = df.groupby(['player', 'position'])['low_block_clearance'].agg(['sum', 'mean']).reset_index()
top_performers = player_stats.nlargest(top_n, 'mean')
return top_performers
def visualize_defense_stats(self, df):
"""可视化防守统计数据"""
import matplotlib.pyplot as plt
fig, axes = plt.subplots(2, 2, figsize=(15, 10))
# 1. 每场比赛的低位防守解围趋势
match_stats = df.groupby('match_id')['low_block_clearance'].sum()
axes[0, 0].plot(match_stats.index, match_stats.values, marker='o')
axes[0, 0].set_title('每场比赛低位防守解围趋势')
axes[0, 0].set_xlabel('比赛编号')
axes[0, 0].set_ylabel('解围次数')
# 2. 不同位置的平均解围次数
position_stats = df.groupby('position')['low_block_clearance'].mean().sort_values()
axes[0, 1].barh(position_stats.index, position_stats.values)
axes[0, 1].set_title('不同位置平均解围次数')
axes[0, 1].set_xlabel('平均解围次数')
# 3. 各球队总解围次数
team_stats = df.groupby('team')['low_block_clearance'].sum().sort_values()
axes[1, 0].bar(team_stats.index, team_stats.values)
axes[1, 0].set_title('各球队总解围次数')
axes[1, 0].set_xlabel('球队')
axes[1, 0].set_ylabel('总解围次数')
plt.setp(axes[1, 0].xaxis.get_majorticklabels(), rotation=45)
# 4. 解围次数分布
axes[1, 1].hist(df['low_block_clearance'], bins=15, edgecolor='black')
axes[1, 1].set_title('解围次数分布')
axes[1, 1].set_xlabel('解围次数')
axes[1, 1].set_ylabel('频率')
plt.tight_layout()
plt.show()
def generate_report(self, df):
"""生成详细报告"""
print("="*60)
print("低位防守解围分析报告")
print("="*60)
# 总体统计
total_clearances = df['low_block_clearance'].sum()
avg_clearances = df['low_block_clearance'].mean()
print(f"\n1. 总体统计:")
print(f" - 总解围次数: {total_clearances}次")
print(f" - 平均每场解围: {avg_clearances:.1f}次")
print(f" - 场均解围次数: {df.groupby('match_id')['low_block_clearance'].sum().mean():.1f}次")
# 位置统计
print(f"\n2. 位置分析:")
position_stats = self.analyze_by_position(df)
for position in position_stats.index:
print(f" - {position}: 总计{position_stats.loc[position, 'sum']:.0f}次, "
f"平均{position_stats.loc[position, 'mean']:.1f}次, "
f"最高{position_stats.loc[position, 'max']:.0f}次")
# 球队统计
print(f"\n3. 球队分析:")
team_stats = self.analyze_by_team(df)
for team in team_stats.index:
print(f" - {team}: 总计{team_stats.loc[team, 'sum']:.0f}次, "
f"平均每场{team_stats.loc[team, 'mean']:.1f}次")
# 最佳球员
print(f"\n4. 最佳防守球员TOP5:")
top_performers = self.identify_top_performers(df)
for idx, (_, player) in enumerate(top_performers.iterrows(), 1):
print(f" {idx}. {player['player']} ({player['position']}): "
f"累计{player['sum']:.0f}次, 场均{player['mean']:.1f}次")
# 关键指标
print(f"\n5. 关键指标:")
clearances_per_attack = df['low_block_clearance'].sum() / df['opponent_attacks'].sum()
print(f" - 解围效率(每百次对手进攻解围): {clearances_per_attack*100:.1f}%")
print(f" - 场均解围率: {df['low_block_clearance'].mean()/df['opponent_attacks'].mean()*100:.1f}%")
# 使用示例
def main():
analyzer = DefenseStatsAnalyzer()
# 生成模拟数据
df = analyzer.generate_sample_data(num_matches=10)
print("生成了模拟的防守数据...")
print(f"数据条数: {len(df)}")
print(f"涉及球队: {df['team'].unique()}")
# 生成分析报告
analyzer.generate_report(df)
# 可视化
analyzer.visualize_defense_stats(df)
# 高级分析:找出解围效率最高的比赛
print("\n6. 解围效率最高的比赛:")
df['efficiency'] = df['low_block_clearance'] / df['minutes_played'] * 90 # 90分钟标准化
top_efficiency_games = df.nlargest(5, 'efficiency')[['match_id', 'team', 'player', 'low_block_clearance', 'minutes_played', 'efficiency']]
print(top_efficiency_games)
if __name__ == "__main__":
main()
主要功能说明:
-
数据统计
- 总解围次数
- 场均解围次数
- 按位置、球队进行分类统计
- 球员个人表现排名
-
分析方法
- 按位置分析(中后卫、边后卫、后腰、门将)
- 按球队分析
- 时间趋势分析
- 效率指标计算
-
可视化展示
- 比赛趋势图
- 位置对比图
- 球队对比图
- 分布直方图
-
输出报告
- 详细文本报告
- 关键绩效指标
- 最佳球员排名
运行这个程序会生成模拟数据,进行统计分析,并提供直观的可视化结果,您可以根据实际需求修改数据生成逻辑来适配真实比赛数据。
版权声明: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直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播