本文目录导读:

要分析双方射门转化率差异,核心是比较进球数与射门数之间的比值差异,以下是详细的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 '不显著'}")
关键观察指标
- 总体转化率:进球数/总射门数
- 效率差异:主客场转化率对比
- 稳定性:各场比赛转化率的波动(标准差)
- xG对比:如有预期进球数据,对比实际与预期转化率
通过这些分析,你可以明确判断哪支球队的射门效率更高,以及差异是否具有统计意义。