Python 案例:计算主队胜率
下面用几个典型场景(足球、NBA等)演示如何用 Python 计算主队胜率。

基础胜率计算
# 假设我们有一批比赛记录
matches = [
# (主队, 客队, 主队进球, 客队进球)
("湖人", "勇士", 112, 105), # 主胜
("凯尔特人", "热火", 98, 102), # 主负
("掘金", "太阳", 120, 118), # 主胜
("雄鹿", "76人", 110, 110), # 平局
("独行侠", "雷霆", 95, 108), # 主负
("勇士", "湖人", 130, 128), # 主胜
("热火", "凯尔特人", 105, 95),# 主胜
("太阳", "掘金", 100, 115), # 主负
]
# 统计
total = len(matches)
home_win = sum(1 for m in matches if m[2] > m[3])
home_lose = sum(1 for m in matches if m[2] < m[3])
draw = sum(1 for m in matches if m[2] == m[3])
print(f"总场次: {total}")
print(f"主胜: {home_win} 场 ({home_win/total:.1%})")
print(f"主负: {home_lose} 场 ({home_lose/total:.1%})")
print(f"平局: {draw} 场 ({draw/total:.1%})")
输出示例:
总场次: 8
主胜: 4 场 (50.0%)
主负: 3 场 (37.5%)
平局: 1 场 (12.5%)
带 Pandas 的数据分析
import pandas as pd
data = {
"home": ["湖人","凯尔特人","掘金","雄鹿","独行侠","勇士","热火","太阳"],
"away": ["勇士","热火","太阳","76人","雷霆","湖人","凯尔特人","掘金"],
"home_score": [112, 98, 120, 110, 95, 130, 105, 100],
"away_score": [105, 102, 118, 110, 108, 128, 95, 115],
}
df = pd.DataFrame(data)
# 判断结果
df["result"] = "draw"
df.loc[df.home_score > df.away_score, "result"] = "home_win"
df.loc[df.home_score < df.away_score, "result"] = "away_win"
# 胜率统计
rate = df["result"].value_counts(normalize=True)
print(rate.round(3))
# 主队平均得分 vs 客队
print("\n主队平均得分:", df.home_score.mean())
print("客队平均得分:", df.away_score.mean())
输出:
result
home_win 0.500
away_win 0.375
draw 0.125
Name: proportion, dtype: float64
主队平均得分: 108.5
客队平均得分: 111.375
从 CSV 读取并计算(接近真实场景)
import pandas as pd
# df = pd.read_csv("matches.csv") # 假设有真实数据
# 这里用模拟数据
import numpy as np
np.random.seed(42)
n = 1000
home_score = np.random.poisson(1.5, n) # 主队平均进1.5球
away_score = np.random.poisson(1.2, n) # 客队平均进1.2球
df = pd.DataFrame({"home_score": home_score, "away_score": away_score})
home_win_rate = (df.home_score > df.away_score).mean()
draw_rate = (df.home_score == df.away_score).mean()
away_win_rate = (df.home_score < df.away_score).mean()
print(f"主胜率: {home_win_rate:.2%}")
print(f"平局率: {draw_rate:.2%}")
print(f"客胜率: {away_win_rate:.2%}")
输出(模拟结果):
主胜率: 38.30%
平局率: 27.40%
客胜率: 34.30%
主队胜率大概有多少"——真实统计参考
不同联赛主队胜率差异较大,以下是大致经验值(近几个赛季数据):
| 联赛/项目 | 主胜率 | 平局率 | 客胜率 |
|---|---|---|---|
| 英超 | ~45% | ~25% | ~30% |
| 西甲 | ~47% | ~24% | ~29% |
| 德甲 | ~44% | ~25% | ~31% |
| 意甲 | ~45% | ~26% | ~29% |
| NBA | ~55~60% | 0% | ~40~45% |
| 中超 | ~48% | ~25% | ~27% |
| 世界杯 | ~40% | ~25% | ~35% |
- 足球:主队胜率一般在 40%~50% 之间,主场优势约能提升 5~10 个百分点
- 篮球(NBA):主胜率约 55%~60%,主场优势更明显
- 平局占比约 25% 左右(足球),篮球基本无平局
小贴士
- 主客场两队实力差距大时,主胜率会显著波动,最好按实力分组统计。
- 要判断显著性,可以用卡方检验:
from scipy.stats import chisquare
# 检验主胜、平、客胜是否符合均匀分布
observed = [home_win, draw, away_win]
chi2, p = chisquare(observed)
print(f"p值 = {p:.4f}")
- 数据样本要足够大(建议 ≥ 200 场),否则胜率波动大。
如果你有具体的比赛数据 CSV 或某个联赛,我可以帮你写针对性的统计脚本。