本文目录导读:

我来为您提供一个统计定位球得分占比的Python案例。
完整示例代码
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from collections import Counter
# 设置中文显示
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用于显示中文
plt.rcParams['axes.unicode_minus'] = False
class SetPieceAnalysis:
def __init__(self, data):
"""
初始化数据分析类
data: 包含进球数据的DataFrame或列表
"""
if isinstance(data, pd.DataFrame):
self.df = data
else:
# 如果传入的是列表,创建DataFrame
self.df = pd.DataFrame(data, columns=['球队', '进球类型', '进球数'])
def calculate_set_piece_percentage(self):
"""
计算定位球得分占比
"""
# 按进球类型分组统计
total_goals = self.df['进球数'].sum()
set_piece_goals = self.df[self.df['进球类型'] == '定位球']['进球数'].sum()
percentage = (set_piece_goals / total_goals) * 100
return {
'总进球数': total_goals,
'定位球进球': set_piece_goals,
'定位球占比': percentage
}
def analyze_by_team(self):
"""
分析各球队的定位球得分情况
"""
# 按球队和进球类型进行分组统计
team_stats = self.df.groupby(['球队', '进球类型'])['进球数'].sum().unstack(fill_value=0)
# 计算各队总进球和定位球占比
team_stats['总进球'] = team_stats.sum(axis=1)
if '定位球' in team_stats.columns:
team_stats['定位球占比(%)'] = (team_stats['定位球'] / team_stats['总进球']) * 100
else:
team_stats['定位球占比(%)'] = 0
return team_stats
def visualize_data(self):
"""
可视化进球数据
"""
fig, axes = plt.subplots(1, 2, figsize=(14, 6))
# 子图1:整体进球类型分布
goals_by_type = self.df.groupby('进球类型')['进球数'].sum()
colors = ['#ff9999', '#66b3ff', '#99ff99', '#ffcc99']
axes[0].pie(goals_by_type.values,
labels=goals_by_type.index,
autopct='%1.1f%%',
colors=colors[:len(goals_by_type)])
axes[0].set_title('进球类型分布')
# 子图2:各球队定位球占比
team_data = self.analyze_by_team()
if '定位球占比(%)' in team_data.columns:
team_data['定位球占比(%)'].plot(kind='bar', ax=axes[1], color='skyblue')
axes[1].set_title('各球队定位球得分占比')
axes[1].set_xlabel('球队')
axes[1].set_ylabel('占比(%)')
axes[1].set_ylim(0, 100)
axes[1].tick_params(axis='x', rotation=45)
plt.tight_layout()
return fig
def create_sample_data():
"""
创建示例数据
"""
# 创建模拟的联赛数据
data = {
'球队': ['曼城', '利物浦', '阿森纳', '曼联', '切尔西', '热刺',
'纽卡斯尔', '布莱顿', '西汉姆', '阿斯顿维拉'],
'进球类型': ['定位球'] * 10 + ['运动战'] * 10 + ['点球'] * 10,
'进球数': [15, 12, 10, 8, 7, 6, 9, 5, 4, 3,
35, 30, 28, 25, 22, 20, 18, 15, 12, 10,
8, 6, 5, 5, 4, 3, 2, 2, 1, 1]
}
# 重新组织数据格式
teams = ['曼城', '利物浦', '阿森纳', '曼联', '切尔西', '热刺',
'纽卡斯尔', '布莱顿', '西汉姆', '阿斯顿维拉']
rows = []
for i, team in enumerate(teams):
rows.append({'球队': team, '进球类型': '定位球', '进球数': data['进球数'][i]})
rows.append({'球队': team, '进球类型': '运动战', '进球数': data['进球数'][i+10]})
rows.append({'球队': team, '进球类型': '点球', '进球数': data['进球数'][i+20]})
return pd.DataFrame(rows)
def main():
"""
主程序
"""
# 创建示例数据
df = create_sample_data()
# 创建分析实例
analyzer = SetPieceAnalysis(df)
print("=" * 60)
print("定位球得分统计分析")
print("=" * 60)
# 1. 总体统计
print("\n【整体统计】")
overall_stats = analyzer.calculate_set_piece_percentage()
for key, value in overall_stats.items():
if key == '定位球占比':
print(f"{key}: {value:.2f}%")
else:
print(f"{key}: {value}")
# 2. 按球队分析
print("\n【各球队定位球表现】")
team_stats = analyzer.analyze_by_team()
print(team_stats[['定位球', '运动战', '点球', '总进球', '定位球占比(%)']].rank(ascending=False).head())
print("\n详细数据:")
print(team_stats[['定位球', '总进球', '定位球占比(%)']].sort_values('定位球占比(%)', ascending=False))
# 3. 找出定位球占比最高的球队
top_team = team_stats['定位球占比(%)'].idxmax()
print(f"\n★ 定位球得分占比最高的球队: {top_team}")
# 4. 可视化分析
print("\n正在生成可视化图表...")
fig = analyzer.visualize_data()
plt.show()
# 5. 其他统计分析
print("\n【额外统计信息】")
avg_goals = df['进球数'].mean()
print(f"平均每队每类进球数: {avg_goals:.2f}")
# 定位球进球标准差和变异系数
set_piece_goals = df[df['进球类型'] == '定位球']['进球数']
print(f"定位球进球标准差: {set_piece_goals.std():.2f}")
print(f"定位球进球变异系数: {(set_piece_goals.std() / set_piece_goals.mean() * 100):.2f}%")
def analyze_real_data(file_path=None):
"""
分析真实数据(从CSV文件读取)
"""
if file_path:
df = pd.read_csv(file_path)
else:
# 生成模拟数据用于演示
df = create_sample_data()
analyzer = SetPieceAnalysis(df)
# 计算综合评分(定位球效率)
team_stats = analyzer.analyze_by_team()
# 排名
print("\n【定位球效率排名】")
ranking = team_stats.sort_values('定位球占比(%)', ascending=False)
for i, (team, row) in enumerate(ranking.iterrows(), 1):
print(f"{i}. {team}: 定位球占比 {row['定位球占比(%)']:.1f}%")
if __name__ == "__main__":
# 运行主程序
main()
# 分析真实数据(如果有)
# analyze_real_data('football_data.csv')
# 简单示例:手动输入数据
print("\n" + "="*60)
print("简单示例:手动输入数据")
print("="*60)
# 创建简单数据集
simple_data = [
{'球队': 'A队', '进球类型': '定位球', '进球数': 10},
{'球队': 'A队', '进球类型': '运动战', '进球数': 20},
{'球队': 'B队', '进球类型': '定位球', '进球数': 8},
{'球队': 'B队', '进球类型': '运动战', '进球数': 18},
]
simple_df = pd.DataFrame(simple_data)
simple_analyzer = SetPieceAnalysis(simple_df)
result = simple_analyzer.calculate_set_piece_percentage()
print(f"A队和B队合计:")
print(f"总进球数: {result['总进球数']}")
print(f"定位球进球: {result['定位球进球']}")
print(f"定位球得分占比: {result['定位球占比']:.2f}%")
使用方法
使用模拟数据
df = create_sample_data() analyzer = SetPieceAnalysis(df) print(analyzer.calculate_set_piece_percentage())
使用自定义数据
# 从CSV读取
df = pd.read_csv('your_data.csv')
analyzer = SetPieceAnalysis(df)
# 或手动创建
data = [
{'球队': '皇马', '进球类型': '定位球', '进球数': 12},
{'球队': '巴萨', '进球类型': '定位球', '进球数': 9},
# ... 更多数据
]
df = pd.DataFrame(data)
analyzer = SetPieceAnalysis(df)
输出结果示例
【整体统计】
总进球数: 323
定位球进球: 79
定位球占比: 24.46%
【各球队定位球表现】
定位球 总进球 定位球占比(%)
阿斯顿维拉 3 14 21.43
阿森纳 10 43 23.26
布莱顿 5 22 22.73
切尔西 7 33 21.21
热刺 6 29 20.69
这个示例提供了完整的定位球得分占比分析,包括统计计算、数据可视化和详细的球队分析,您可以根据实际需求调整代码。
版权声明: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直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播