足球数据分析
数据分析师 & 科学家—2024
客户
地区足球俱乐部
角色
数据分析师 & 科学家
技术栈
Python, Pandas, Matplotlib, mplsoccer, Jupyter, Scikit-learn
日期
2024
01
挑战
一家地区足球俱乐部找到我,希望为他们的球队带来专业级的数据分析。他们拥有基本的比赛统计数据,但缺乏提取可操作战术见解的工具和专业知识。教练组需要在团队会议期间实际使用的可视化图表——球员比较、传球模式、射门效率——以便在阵型、换人和引援方面做出数据驱动的决策。
02
解决方案
构建了一个受专业体育科学工作流程启发的完整分析管道。抓取并汇总了来自 FBRef 的比赛数据,然后开发了一套基于 Python 的分析工具:用于跨进攻、防守和控球指标进行多维球员分析的 StatsBomb 风格雷达图;带有预期威胁 (xT) 叠加的传球网络图,以揭示组织模式;按每 90 分钟预期进球数 (xG) 排名的射门图;以及按位置和联赛百分位数标准化球员统计数据的比较报告。所有输出都作为易于理解的视觉报告交付,供教练组在每场比赛前查看。
python
# Player radar chart — percentile-based profiling
def build_player_radar(player: str, df: pd.DataFrame):
metrics = [
"goals_p90", "xG_p90", "key_passes_p90",
"progressive_carries", "tackles_won_pct",
"interceptions_p90", "pass_completion_pct",
"aerial_duels_won_pct"
]
values = []
for m in metrics:
pctl = percentileofscore(df[m], df.loc[player, m])
values.append(round(pctl, 1))
radar = Radar(params=metrics, min_range=[0]*8,
max_range=[100]*8)
fig, ax = radar.setup_axis()
radar.draw_circles(ax, facecolor="#0a0a0a")
radar.draw_radar(values, ax,
kwargs_radar={"facecolor": "#2d6a4f", "alpha": 0.6})
return fig↳ 使用 mplsoccer 进行多维球员分析的基于百分位数的雷达图



下一个项目
UI 设计教学
教育 / UX-UI 设计