本文目录导读:

要查看“让球胜平负”(通常指亚洲盘口或让球盘)的分布,核心是统计在特定让球数下,主队胜、平、负三种结果的出现频率,Python 可以通过 pandas 处理历史比赛数据,用 matplotlib 或 plotly 进行可视化。
以下是一个完整的 Python 案例,分为数据准备、计算分布、可视化三个步骤。
准备示例数据
假设你有一个 CSV 文件 matches.csv,包含以下列:
home_team: 主队away_team: 客队home_score: 主队实际进球away_score: 客队实际进球handicap: 让球数(正数表示主队让球,如5、1;负数表示主队受让,如-0.5)
示例数据(手动构造):
import pandas as pd
data = {
'home_team': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'],
'away_team': ['K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T'],
'home_score': [2, 1, 0, 3, 1, 2, 0, 1, 2, 0],
'away_score': [1, 1, 0, 0, 2, 0, 2, 1, 1, 3],
'handicap': [0.5, -0.5, 0, 1, -1, 0.5, 0, -0.5, 1, -1]
}
df = pd.DataFrame(data)
print(df)
计算让球后的结果(让球胜平负)
核心逻辑:让球后主队净胜球 = 主队实际进球 - 客队实际进球 + 让球数(因为让球数是从主队角度出发的)。
- 如果让球后净胜球 > 0:主胜
- = 0:平局
- < 0:客胜
# 计算让球后的净胜球(让球数直接加在进球差上,因为让球是主队让给客队的优势)
df['handicap_diff'] = (df['home_score'] - df['away_score']) + df['handicap']
# 定义结果分类函数
def classify_handicap_result(x):
if x > 0:
return 'H' # Home Win
elif x == 0:
return 'D' # Draw
else:
return 'A' # Away Win
df['handicap_result'] = df['handicap_diff'].apply(classify_handicap_result)
print(df[['home_team', 'away_team', 'handicap', 'handicap_result']])
按让球数分组统计分布
假设你想看让球数为 0.5 时的胜平负分布,或者整体分布。
# 统计每种让球数下,H/D/A 的数量
distribution = df.groupby(['handicap', 'handicap_result']).size().unstack(fill_value=0)
print("分布表(行:让球数,列:结果):")
print(distribution)
可视化分布(堆叠柱状图)
使用 matplotlib 或 plotly 更直观地展示。
import matplotlib.pyplot as plt
import numpy as np
# 准备绘图数据
handicaps = sorted(distribution.index)
results = ['H', 'D', 'A']
colors = ['green', 'gray', 'red']
# 计算比例(或者数量)
data_plot = []
for h in handicaps:
row = distribution.loc[h]
total = row.sum()
# 计算百分比
percentages = [row.get(r, 0) / total * 100 for r in results]
data_plot.append(percentages)
# 转换为 numpy 数组方便堆叠
data_plot = np.array(data_plot)
# 画堆叠柱状图
fig, ax = plt.subplots(figsize=(10, 6))
bottom = np.zeros(len(handicaps))
for i, result in enumerate(results):
ax.bar(handicaps, data_plot[:, i], bottom=bottom, label=result, color=colors[i])
bottom += data_plot[:, i]
ax.set_xlabel('Handicap (让球数)')
ax.set_ylabel('Percentage (%)')
ax.set_title('让球胜平负分布 (Handicap Result Distribution)')
ax.legend(title='Result')
ax.set_xticks(handicaps)
plt.tight_layout()
plt.show()
扩展:动态过滤(按联赛/时间范围)
如果你有更多列(如 league, date),可以增加过滤:
# 只分析英超 2023年数据 df_filtered = df[(df['league'] == 'EPL') & (df['date'] >= '2023-01-01')] # 然后重复上面的分组统计代码
- 让球数方向:
handicap为正表示主队让球(需获胜更多才算赢);为负表示主队受让(不败即可)。 - 结果计算:
实际净胜球 + 让球数(注意:如果数据中让球数是客队让球,需做符号反转)。 - 可视化技巧:堆叠柱状图最适合展示各类让球下的比例分布。
如果你实际数据中让球数是“客队让球”的表示方式(-0.5 表示主队让 0.5 球,但大多数数据用正数表示主队让球),请根据数据提供方调整符号。Brasil、Soccerway 等数据源使用主队让球为正。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播