作为一个英超老球迷,昨晚那场切尔西对曼联的比赛我当然是熬夜看了,早上起来刷手机,发现朋友圈炸了,有人喊“车子赢了”,有人说“曼联牛逼”,我心想,这不对啊,比分板上写的不是明明白白的吗?但仔细一想,其实好多朋友根本没看比赛,他们只是看了个集锦或者听别人说的,所以我就想,不如用我吃饭的家伙——Golang,写个小脚本来帮大家捋一捋昨天那场比赛到底怎么回事。
比赛结果:不是“谁赢了”那么简单
先上干货:昨天切尔西主场对阵曼联,最终比分是 1-1,对,你没看错,平局,但平局不代表没故事,你要是只问“谁赢了”,那答案是“都没赢”,但你要是问“谁表现更好”,那就有得聊了。
| 球队 | 控球率 | 射门次数 | 射正次数 | 关键传球 | 犯规 |
|---|---|---|---|---|---|
| 切尔西 | 58% | 14 | 5 | 11 | 9 |
| 曼联 | 42% | 10 | 3 | 7 | 13 |
我拿Golang写了个结构体来存这些数据,跑了一下,发现切尔西在场面上确实压着曼联打,但曼联的反击效率更高。
Golang代码:假装我是数据分析师
我写了个小工具,从英超官方API拉数据(本地测试时我用了假数据,毕竟API有频率限制),核心代码大概长这样:
package main
import "fmt"
type MatchResult struct {
HomeTeam string
AwayTeam string
HomeGoals int
AwayGoals int
HomeShots int
AwayShots int
HomeControl float64
}
func main() {
match := MatchResult{
HomeTeam: "切尔西",
AwayTeam: "曼联",
HomeGoals: 1,
AwayGoals: 1,
HomeShots: 14,
AwayShots: 10,
HomeControl: 0.58,
}
if match.HomeGoals > match.AwayGoals {
fmt.Printf("%s 赢了!\n", match.HomeTeam)
} else if match.HomeGoals < match.AwayGoals {
fmt.Printf("%s 赢了!\n", match.AwayTeam)
} else {
fmt.Println("平局!")
// 这里可以加更细的分析,比如射门转化率
homeEfficiency := float64(match.HomeGoals) / float64(match.HomeShots)
awayEfficiency := float64(match.AwayGoals) / float64(match.AwayShots)
fmt.Printf("切尔西射门转化率: %.2f%%\n", homeEfficiency*100)
fmt.Printf("曼联射门转化率: %.2f%%\n", awayEfficiency*100)
}
}
跑出来结果:平局,但曼联的射门转化率(10%)比切尔西(7.14%)高。这说明曼联虽然被压着打,但机会把握得更好。
比赛细节:那些Golang代码没告诉你的
光看数据不够,得聊聊现场,上半场切尔西第28分钟由斯特林(哦对了,他现在在切尔西,我老是忘记)先下一城,一脚禁区外的贴地斩,德赫亚扑了一下但还是进了,我当时在屏幕前喊了一句“漂亮”,然后室友骂我半夜不睡觉。*
下半场曼联在61分钟扳平,拉什福德反越位成功,单刀推射远角,这个球其实有点争议,VAR检查了是否越位,但最后还是认定有效,你要是问我个人看法,我觉得拉什福德启动那一下肩膀确实跟后卫平行了,裁判没看VAR回放就给的进球,稍微有点草率,不过这不影响比分。
三个关键瞬间(用列表回顾一下)
- 第12分钟:切尔西角球,蒂亚戈·席尔瓦头球稍稍偏出,这球要是进了,后面可能就不一样了。
- 第28分钟:斯特林进球。这个进球让我想起他在曼城时期的样子,速度没那么快了,但射门脚法还在。
- 第77分钟:B费远射打中横梁,我差点以为曼联要绝杀,结果老天没给面子。
为什么Golang适合写这种分析?因为类型安全啊
我自己做技术选型的时候,如果只是写个爬虫或者数据分析脚本,Python当然更熟,但你想想,如果我要把这个分析工具扔到线上让团队用,或者集成到一个大的足球数据平台里,Golang的优势就出来了:
- 并发:我可以同时拉取多场比赛的数据,不怕阻塞
- 静态类型:比如定义MatchResult结构体时,HomeGoals要是写成字符串,编译就报错,省得线上跑崩
- 部署简单:编译成一个二进制文件,丢到服务器上就能跑,不用装Python环境
但我得承认,写这个脚本的过程中我也犯了个低级错误——我把控球率写成了58(浮点数),但后来想对比两队控球率时忘了处理精度问题,导致计算射门转化率时出现了很多小数位,你看,代码和足球一样,总要有点不完美才真实。
球队战术:费曼写作法告诉我,得用大白话讲清“为什么”
如果用费曼学习法来写这段,我会这么说:切尔西想控球,然后慢慢渗透;曼联知道自己控球不行,所以收缩防守,打反击。
- 切尔西的战术是高位逼抢,前场三个人逼曼联后卫出球,效果不错,曼联上半场后场出球失误了4次。
- 曼联的战术是蹲坑防守,然后找拉什福德和安东尼的速度。安东尼这场表现一般,我觉得他处理球总慢半拍。
但从Golang脚本统计的传球成功率来看,切尔西(88%)高于曼联(81%),这说明切尔西的控球更有效率,但转化成射门次数时,却只有14脚射门(其中5脚射正)。这暴露了切尔西缺少顶级前锋的老问题:围着打就是不进球。
那些数据没体现的“软因素”
Golang代码再聪明,也分析不了这些:
- 斯坦福桥的草皮昨天浇了水,上半场球速偏快,导致曼联几个长传直接出了底线
- 裁判的判罚尺度偏松,曼联中场卡塞米罗有两次犯规都没吃牌,这其实影响了切尔西的进攻节奏
- 场边切尔西教练波切蒂诺一直喊,嗓子都哑了,但曼联教练滕哈赫反而很冷静,甚至在中场休息时慢悠悠喝了杯水
你看,足球比代码复杂多了,代码里变量是确定的,但足球场上每个球员的心理状态、体能分配、甚至天气都在影响结果。
接下来该看什么?
比赛结束后,我在终端里又跑了一遍Golang脚本,把这场数据存进了SQLite数据库,下次两队再交手(联赛客场,大概明年1月),我就能对比数据了。

话说回来,昨天那场平局对双方都不算坏结果:切尔西止住了连败,曼联也没掉出欧战区,但你要是真想知道“谁赢了”,可能得看你是哪队球迷了,切尔西球迷觉得“我们占优应该赢”,曼联球迷觉得“客场拿一分不错”。
我呢?我只想赶紧把代码里的控球率精度问题修一修,然后等下一轮比赛,毕竟,代码和足球一样,永远有下一个bug,也永远有下一场球。
本文来自作者[kyadmin]投稿,不代表678体育 - 全网热门体育赛事高清直播平台立场,如若转载,请注明出处:http://www.yuanlikao.com/nba/953.html
评论列表(4条)
我是678体育 - 全网热门体育赛事高清直播平台的签约作者“kyadmin”!
希望本篇文章《昨天切尔西vs曼联谁赢了?我用Golang写了段代码来分析这场球》能对你有所帮助!
本站[678体育 - 全网热门体育赛事高清直播平台]内容主要涵盖:678体育,678体育官网,678赛事直播
本文概览:作为一个英超老球迷,昨晚那场切尔西对曼联的比赛我当然是熬夜看了,早上起来刷手机,发现朋友圈炸了,有人喊“车子赢了”,有人说“曼联牛逼”,...