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

wen python案例 1

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

下面用一个完整的 Python 案例演示如何分析和可视化让球胜平负的分布。

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

数据准备

假设你有一批比赛数据(可从 API 或爬虫获取),格式如下:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.sans-serif'] = ['SimHei']  # 中文显示
matplotlib.rcParams['axes.unicode_minus'] = False
# 模拟数据:一场比赛的让球盘口和赛果
data = {
    'match_id': range(1, 21),
    'home_team': ['A队','B队','C队','D队','E队']*4,
    'away_team': ['F队','G队','H队','I队','J队']*4,
    'handicap': [-1, -0.5, 0, 0.5, 1, -1.5, -0.5, 0, 0.5, 1.5,
                 -1, -0.5, 0, 0.5, 1, -1, -0.25, 0.25, 0.75, -0.75],
    # 实际赛果(主队视角):home_win / draw / away_win
    'result': ['home_win','draw','away_win','home_win','draw',
               'away_win','home_win','draw','home_win','away_win',
               'home_win','draw','away_win','home_win','draw',
               'away_win','home_win','draw','home_win','away_win'],
    # 让球后赛果:让球胜 / 让球平 / 让球负
    'handicap_result': ['win','push','lose','win','win',
                        'lose','win','push','win','lose',
                        'win','push','lose','win','win',
                        'lose','win','push','win','lose']
}
df = pd.DataFrame(data)
print(df.head())

统计让球胜平负的分布

# 整体分布
overall = df['handicap_result'].value_counts(normalize=True).sort_index()
print("整体分布:\n", overall)
# 按盘口分组统计
by_handicap = pd.crosstab(df['handicap'], df['handicap_result'], normalize='index')
print("\n各盘口下的分布:\n", by_handicap)

可视化分布

饼图 —— 整体占比

labels = {'win':'让球胜','push':'让球平','lose':'让球负'}
overall.plot.pie(
    autopct='%.1f%%',
    labels=[labels[i] for i in overall.index],
    colors=['#4CAF50','#FFC107','#F44336'],
    startangle=90, figsize=(6,6)
)'让球胜平负整体分布')
plt.ylabel('')
plt.show()

堆叠柱状图 —— 按盘口

by_handicap.plot(kind='bar', stacked=True,
                 color=['#F44336','#FFC107','#4CAF50'],
                 figsize=(10,5))'不同让球盘口的胜平负分布')
plt.xlabel('让球盘口(负=主让,正=主受让)')
plt.ylabel('占比')
plt.legend(['让球负','让球平','让球胜'])
plt.xticks(rotation=0)
plt.tight_layout()
plt.show()

热力图 —— 盘口 × 结果

import seaborn as sns
pivot = pd.crosstab(df['handicap'], df['handicap_result'], normalize='index')
sns.heatmap(pivot, annot=True, fmt='.2f', cmap='YlOrRd')'让球盘口 × 胜平负 热力图')
plt.show()

进阶分析

计算赔率隐含概率 vs 实际概率

# 假设某盘口的欧赔:胜2.10 / 平3.40 / 负3.20
odds = np.array([2.10, 3.40, 3.20])
implied = (1/odds) / (1/odds).sum()
print("隐含概率:", dict(zip(['胜','平','负'], implied.round(3))))
# 实际概率(以该盘口为例)
actual = df[df['handicap']==-0.5]['handicap_result'].value_counts(normalize=True)
print("实际概率:\n", actual)

按主客场或时间维度细分

# 假设字段中有日期和主客
df['month'] = pd.to_datetime('2024-01-01') + pd.to_timedelta(df.index, unit='D')
df['month'] = df['month'].dt.to_period('M')
monthly = pd.crosstab(df['month'], df['handicap_result'], normalize='index')
monthly.plot(kind='line', marker='o', figsize=(10,5))'让球胜平负按月分布趋势')
plt.ylabel('占比')
plt.show()

关键要点小结

步骤 方法 用途
数据整理 pd.crosstab 交叉表统计分布
整体分布 value_counts(normalize=True) 求占比
分盘口分析 crosstab(..., normalize='index') 条件概率
可视化 饼图/柱状图/热力图 直观展示
深度分析 赔率隐含概率 vs 实际概率 找价值盘口

数据来源建议

  • API:Football-Data.org、API-Football、TheSportsDB
  • 爬虫:500.com、澳客、懂球帝(需注意反爬和合规)
  • 公开数据集:Kaggle 上的欧洲联赛历史数据

需要我针对某一联赛真实数据的抓取 + 分布分析给出完整代码吗?或者聚焦于赔率/让球盘口的价值分析模型?

上一篇python案例认为半全场玩法如何入手?

下一篇当前分类已是最新一篇

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

友情链接攻略窝 · 礼包窝 · 配置窝 · 换算窝 · 算法窝 · 查文窝 · 手册窝 · 问答窝 · 全文搜 · 手册库
相关站点礼包窝 · 查文窝