python案例如何看让球胜平负的分布?

wen python案例 1

足球让球盘胜平负分布分析案例

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

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 拉取真实数据 + 完整分布分析 + 可视化的完整脚本,要我继续吗?

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