足球让球盘胜平负分布分析案例
下面用 Python 演示如何分析足球让球盘(亚洲让球/欧赔让球)的胜平负分布,包括数据构造、分布统计和可视化。

案例场景
假设我们有一批比赛数据,每场包含:
- 主队、客队
- 让球数(如 -1 表示主队让 1 球,+1 表示主队受让 1 球)
- 实际比分
目标:分析在不同让球数下,让球胜平负(让胜/让平/让负)的分布情况。
构造示例数据
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 中文显示
plt.rcParams['axes.unicode_minus'] = False
# 模拟比赛数据:让球数、主队进球、客队进球
np.random.seed(42)
data = {
'handicap': np.random.choice([-2, -1, -0.5, 0, 0.5, 1, 2], size=500),
'home_goals': np.random.poisson(1.4, 500),
'away_goals': np.random.poisson(1.2, 500),
}
df = pd.DataFrame(data)
计算让球胜平负
核心逻辑:让球后净胜球 = 主队进球 + 让球数 - 客队进球
> 0→ 让胜= 0→ 让平< 0→ 让负
df['adj_diff'] = df['home_goals'] + df['handicap'] - df['away_goals']
def classify(x):
if x > 0:
return '让胜'
elif x == 0:
return '让平'
else:
return '让负'
df['result'] = df['adj_diff'].apply(classify)
分布统计
整体分布
overall = df['result'].value_counts(normalize=True).round(3) * 100
print("整体让球胜平负分布(%):")
print(overall)
按让球数分组分布
dist = pd.crosstab(df['handicap'], df['result'], normalize='index').round(3) * 100
print("\n各让球数下胜平负分布(%):")
print(dist)
用透视表更直观
pivot = df.pivot_table(
index='handicap',
columns='result',
values='adj_diff',
aggfunc='count',
fill_value=0
)
pivot['总数'] = pivot.sum(axis=1)
print(pivot)
可视化
# 图1:整体分布条形图
fig, axes = plt.subplots(1, 2, figsize=(14, 5))
df['result'].value_counts().plot(
kind='bar', ax=axes[0], color=['#4CAF50', '#FFC107', '#F44336']
)
axes[0].set_title('整体让球胜平负分布')
axes[0].set_ylabel('场次')
axes[0].tick_params(axis='x', rotation=0)
# 图2:按让球数分组堆叠图
dist.plot(kind='bar', stacked=True, ax=axes[1],
color=['#4CAF50', '#FFC107', '#F44336'])
axes[1].set_title('各让球数下胜平负占比')
axes[1].set_ylabel('百分比 (%)')
axes[1].set_xlabel('让球数')
axes[1].tick_params(axis='x', rotation=0)
axes[1].legend(title='结果')
plt.tight_layout()
plt.show()
进阶:结合赔率计算隐含概率
如果你有欧赔让球赔率,可以算市场隐含概率:
# 示例:某场比赛让球胜/平/负赔率
odds = {'让胜': 2.10, '让平': 3.40, '让负': 3.30}
# 反算隐含概率(去水后)
inv = {k: 1/v for k, v in odds.items()}
total = sum(inv.values())
probs = {k: round(v/total*100, 2) for k, v in inv.items()}
print("市场隐含概率(%):", probs)
分析结论示例
从模拟数据可以观察到:
| 让球数 | 让胜 | 让平 | 让负 |
|---|---|---|---|
| -2 | 低 | 低 | 高 |
| -1 | 中 | 中 | 中 |
| 0 | 高 | 低 | 中 |
| +1 | 高 | 中 | 低 |
规律:让球数越大(主队受让越多),让胜概率越高;让球越深(-2),让负概率越高。
真实数据来源建议
实际分析可接入:
- 中国竞彩官方 API(让球胜平负)
- Football-data.org、API-Football
- 爬取 500彩票网/雷速体育 的历史让球盘数据
需要的话我可以给你写一个从 API 拉取真实数据 + 完整分布分析 + 可视化的完整脚本,要我继续吗?