这个Python案例怎么看双方射门转化率差异?

wen python案例 2

本文目录导读:

这个Python案例怎么看双方射门转化率差异?

  1. 数据准备
  2. 计算单场转化率
  3. 汇总各队的射门转化率
  4. 对比分析
  5. 核心差异分析
  6. 统计显著性检验(可选)
  7. 关键观察指标

要分析双方射门转化率差异,核心是比较进球数射门数之间的比值差异,以下是详细的Python分析步骤:

数据准备

假设你有如下格式的数据(用字典或Pandas DataFrame表示):

# 示例数据
data = {
    'Home_Team': ['A', 'B', 'A', 'C', 'B'],
    'Away_Team': ['B', 'A', 'C', 'A', 'C'],
    'Home_Shots': [10, 5, 8, 7, 6],
    'Home_Goals': [2, 0, 3, 1, 1],
    'Away_Shots': [6, 8, 9, 5, 7],
    'Away_Goals': [1, 1, 0, 2, 0]
}

计算单场转化率

df['Home_Conversion'] = df['Home_Goals'] / df['Home_Shots'].replace(0, 1) * 100  # 百分比
df['Away_Conversion'] = df['Away_Goals'] / df['Away_Shots'].replace(0, 1) * 100

汇总各队的射门转化率

# 计算主客场合计
home_stats = df.groupby('Home_Team').agg({
    'Home_Shots': 'sum',
    'Home_Goals': 'sum'
}).rename(columns={'Home_Shots': 'Shots', 'Home_Goals': 'Goals'})
away_stats = df.groupby('Away_Team').agg({
    'Away_Shots': 'sum',
    'Away_Goals': 'sum'
}).rename(columns={'Away_Shots': 'Shots', 'Away_Goals': 'Goals'})
# 合并总数据
team_stats = home_stats.add(away_stats, fill_value=0)
team_stats['Conversion_Rate'] = team_stats['Goals'] / team_stats['Shots'] * 100

对比分析

import matplotlib.pyplot as plt
# 可视化对比
fig, axes = plt.subplots(1, 2, figsize=(12, 4))
# 柱状图对比进球效率
axes[0].bar(team_stats.index, team_stats['Conversion_Rate'])
axes[0].set_title('Team Shooting Conversion Rate (%)')
axes[0].set_ylabel('Conversion Rate (%)')
# 散点图:射门数 vs 进球数
axes[1].scatter(team_stats['Shots'], team_stats['Goals'], s=100)
for team in team_stats.index:
    axes[1].annotate(team, (team_stats.loc[team, 'Shots'], 
                            team_stats.loc[team, 'Goals']))
axes[1].set_xlabel('Total Shots')
axes[1].set_ylabel('Total Goals')
axes[1].set_title('Shots vs Goals by Team')
plt.tight_layout()
plt.show()

核心差异分析

# 计算转化率差值
if len(team_stats) >= 2:
    max_team = team_stats['Conversion_Rate'].idxmax()
    min_team = team_stats['Conversion_Rate'].idxmin()
    diff = team_stats.loc[max_team, 'Conversion_Rate'] - team_stats.loc[min_team, 'Conversion_Rate']
    print(f"转化率最高: {max_team} ({team_stats.loc[max_team, 'Conversion_Rate']:.1f}%)")
    print(f"转化率最低: {min_team} ({team_stats.loc[min_team, 'Conversion_Rate']:.1f}%)")
    print(f"差异: {diff:.1f} 个百分点")

统计显著性检验(可选)

from scipy.stats import chi2_contingency
# 构建列联表
contingency = [
    [team_stats.loc['A', 'Goals'], team_stats.loc['A', 'Shots'] - team_stats.loc['A', 'Goals']],
    [team_stats.loc['B', 'Goals'], team_stats.loc['B', 'Shots'] - team_stats.loc['B', 'Goals']]
]
chi2, p, dof, expected = chi2_contingency(contingency)
print(f"卡方检验 p值: {p:.4f}")
print(f"差异{'显著' if p < 0.05 else '不显著'}")

关键观察指标

  1. 总体转化率:进球数/总射门数
  2. 效率差异:主客场转化率对比
  3. 稳定性:各场比赛转化率的波动(标准差)
  4. xG对比:如有预期进球数据,对比实际与预期转化率

通过这些分析,你可以明确判断哪支球队的射门效率更高,以及差异是否具有统计意义。

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