手把手教你成为数据流懂球帝[足球篇]

核桃 164 0

有哪些好用的数据完整的职业足球数据网站?

一、 转会市场:着重于球员的身价以及转会纪录,但是也有球员以及球队的基础数据可供查询

二、WhoScored :除了专业的足球数据之外,还有独特的评分系统 三、雷速体育,国内专业的体育数据网站 雷速体育-体育数据|足球比分|篮球即时比分直播

四、球探网,也是国内比较老牌的数据网站了

球探体育-足球比分_篮球比分_即时比分直播

五、其他APP类,包括懂球帝、虎扑、直播吧等;

以上都是专业的足球数据网站。此外,专业的体育数据供应商有:

先说国内的

纳米数据:国内顶尖的体育数据服务商之一,这几年发展势头很不错。目前他们能够提供足球、篮球、电竞等赛事的全面数据服务。数据稳定性也很不错~

纳米数据-专业体育大数据供应商,足球API,比赛数据库

Opta:不用说,提到数据供应商肯定少不了Opta,他们是全球最顶尖的也是最出名的专业体育数据供应商

全球专业的体育数据供应商 Sportradar - Sports Data Services | Digital | Rights holders | Integrity | Betting

此外,还有飞鲸体育数据、雷达体育也是做的比较好的(但是好像雷达体育目前本土化有点跟不上前面梯队的步伐了)

足球相关数据的获取(上)

写在前面

只关注数据不看比赛的都是耍流氓!

先说一下情况,前段时间手机丢了,电脑硬盘坏了,相关的数据和统计分析的结论都在硬盘上,现已经送去恢复,不过时间不确定。闲着无聊,所以在这里写一篇关于获取数据方式的文章。

这种方法很简单,但却很实用。对一些非计算机专业(比如我这个体育生)来说很实用...其他方法还有很多,但在这里不一一介绍,网上一搜全是数据爬取的教程,大家感兴趣的可以去多看看。大神请路过 ( ^_^ )

在大家做相关的分析的时候,需要到大量的相关数据。数据来源方式无非以下几种种方式。

现场记录的第一手数据;电脑面前看着视频自己数;获取相关的网站的公开数据;花钱买数据。...

不过相信大部分人是舍不得花大量金钱买的,毕竟如果不是公司的话,这块的消费金额是很大的,我见过的有少则几千,多则上万、几十万都有。一般人还真没有这种财力和魄力去消费。但是,花钱买的数据是最完整的,这毋庸置疑。但是相关的权威网站公开的数据同样对于部分人来说也是可以说很“完整”的。比如:腾讯、新浪、虎扑等网站公开的足球数据相对来说算是很完整的了。毕竟并不是每一项统计我们都用的上,有一些统计项是针对职业球队设计的。好了,那么在相关网站上的公开数据怎么能够更快地获取呢?我想你不会复制粘贴吧。。。

废话不多说,我们开始吧。

需要用到的工具以及配置过程先列举一下:必要的工具

1:Python【这个...】

2:Java 开发环境配置(如果系统有则这一步省略):

JDK下载与配置

下载:去官网下载下载java开发工具包JDK,地址见文末。

安装:下一步,下一步就行

配置坏境变量:百度一下(注:要先配置好坏境变量才能安装下面的Tomcat)

检验配置是否完成:在命令行窗口输入 java --version,如果显示以下一串文字即为配置成功。

JAVA坏境测试

2:Tomcat(地址见文末)

Tomcat

推荐下载9.0.8版本的安装版,下载前面两个还需要配置坏境变量,很麻烦。

下载好之后一直点下一步就行,一直到安装结束上面的参数不需要改变,然后打开安装文件目录下的bin文件夹,点击Tomcat9w启动Tomcat。

启动之后,用浏览器打开这个网址(localhost:),能够打开Tomcat官网页则表示安装配置成功。

3:HtmlUnit Driver(地址见文末)

我在使用HtmlUnit Driver之前使用过selenium中的Driver打开浏览器很慢,相对于Chrome来说,对Firefox的支持感觉会更好点,但是感觉还是慢。如果我们在网速很好的情况下手动打开浏览器,访问国内的网站,最多也就3s左右就能渲染完成,但是使用Fire Fox或者Chrome的Webdriver的话至少需要10s,在此期间还需要打开一系列的窗口以及命令行窗口,对于需要大量不属于同一网页上的数据来说,对电脑配置要求是非常高的,

至少我的这个配置有时候会卡死。但是使用HtmlUnit Driver的话会非常快,而且不需要打开浏览器和命令行窗口。它是基于htmlunit,使用java来模拟一个浏览器,能够在不启动浏览器的情况下运行相关测试,节省了每次都需要都打开一次浏览器再获取数据所耗费时间,因此获取的数据的速度也非常快。

要使用HtmlUnit Driver首先需要下载一个selenium-server-standalone.jar程序(注:不需要解压),下载放在自己熟悉的目录中就可以。

对我来说这个配置很垃圾。。。。

4: Sublime Text 3(这个就不用解释了吧)

其他:

5:SQL SERVER 或者My SQL(这个不用说,一般都有当打开几百M甚至G级别数据的时候简直就是神器)

6:JsonToMsSql(...墙裂推荐...一款可以直接读取Json文件并将JSON数据导入其MSSQL数据库的应用程序,其实也可以,合并之后复制粘贴成CSV,或者Excel能打开的.xls、.xlsx文件。非常好用,不过需要付费,否则只能一次导入20个文件)。使用这款软件的初衷是:因为你的数据格式可能是这样的。。。

上千个JSON格式的文件

然后现在电脑上安装必要的包:

seleniumrequests一切都配置好之后:

打开我们需要爬取的网站,这里打开的是新浪体育英超-13赛季第一轮每场比赛的统计,

从第一轮的十场比赛中我们发现,网址上面变化的只是id = xxxx。我们试了第二轮的也是一样,因此我们可以使用一个for循环来获取英超联赛-13赛季38轮比赛中每场比赛统计中的url,代码如下:

打开Sublime Text 3,先导入必要的包:

#导入必要的包 from selenium import webdriver import requests import time

经过上面的对比之后我们使用for 循环来获取所有的网址:

for i in range(99,79): url = '#39; + str(i) response = requests.get(url) #print(url) #如果你不嫌麻烦可以试试print。

Ok,经过上面的步骤我们已经基本配置差不多了,但是我们前面提到的HtmlUnit Driver还没用呢,所以我们需要在代码中写上:

driver = driver = webdriver.Remote("#34;, webdriver.DesiredCapabilities.HTMLUNIT) driver.get(url) time.sleep(2)

接着就是需要抓取我们需要的信息了,在网页上我们可以右击需要爬取信息的位置(比如我需要爬取阵形,使用的是Chrome内核的浏览器360),然后选择审查元素,再在相对应的元素的点上右击--Copy--Copy Xpath(如下图所示),可以得到一个路径,这个路径就是网页上阵形所在位置的绝对路径,后面网页也是一样的。然后在代码中表示即为:

formation_host = driver.find_element_by_xpath('//*[@id="J_Position"]/div[1]/div[1]/em').text formation_guest = driver.find_element_by_xpath('//*[@id="J_Position"]/div[1]/div[2]/em').text print(formation_host,end=',')#打印出来 print(formation_guest,end=',')

经过上面的几个步骤,就可以实现抓取新浪体育-13赛季38轮每场比赛的首发阵形的信息了。

接下来就是运行我们所写的代码:

首先,cd到我们下载selenium-server-standalone.jar程序的文件夹(我这里放在C盘中的a文件夹,因此我需要 cd .. cd .. cd a 到a文件夹下)

然后在a文件夹下(即下载的jar路径下)运行如下命令:

java -jar selenium-server-standalone.jar -port

这里的是一般设定,可以自己设定,我一般设定问或者都可以。但是这里输入的话那么代码中也要输入相对应的,否则会出错。出现如下界面

表示程序已经运行,或者可以在程序启动后,浏览器中输入

输入上面的信息之后可以看见服务启动后的一系列session信息。这是用于监控实时运行的情况。(我没有输入,但是也可以正常运行,在CMD中也可以看)

接着再运行代码就可(我是用Python自带的IDLE运行的,效果如下)

99-01的数据99的数据

因为我需要额外增加一些数据,因此没写写入excel的代码。需要的可以自己写在代码后面就可以。

最后,以上就是爬取新浪体育-13赛季英超联赛38轮每场的出场阵形了。原则上来说这个页面上的所有数据都可以爬取,需要用到的朋友再也不用地辛辛苦苦复制粘贴了(三年前我就是如此,现在想想都苦逼)。爬取到数据之后怎么办?当然是清洗啊,分析啊。不过不是这篇的主要目的,我将会在下一篇写上怎么用Python对爬取得到的数据进行分析。

是不是很简单呢?根本不需要懂

最后的最后。一些工具的下载地址和完整的代码:

1:Java 开发环境

Java SE Development Kit 8

2:Tomcat

Tomcat

3:HtmlUnit Driver

HtmlUnit Driver

完整代码:

from selenium import webdriver import requests import time for i in range(99,79): url = '#39; + str(i) response = requests.get(url) #print(url) driver = driver = webdriver.Remote("#34;, webdriver.DesiredCapabilities.HTMLUNIT) driver.get(url) time.sleep(2) formation_host = driver.find_element_by_xpath('//*[@id="J_Position"]/div[1]/div[1]/em').text formation_guest = driver.find_element_by_xpath('//*[@id="J_Position"]/div[1]/div[2]/em').text print(formation_host,end=',') print(formation_guest,end=',')

PS.如果你是用的是Firefox或者Chrome的WebDriver的话,需要关闭黑色的命令行窗口以及每次爬取完之后关闭浏览器窗口的话请私信我。

足球场上数据是怎么统计出来的?

本回复除此句外,全部引用自虎扑前辈 萨缪尔 的回帖(

#86

),所有的赞誉都归于他。

Squawka的热点图是基于“与球相关的行为”,但分区图同样只能反映与球相关的行为,因为squawka、442的Statszone、WhoScored、EPLIndex等主流数据分析网站的数据提供商全都是Opta。 而Opta的统计方式是两个人对着电视屏幕,每人负责一个队来手动统计各类'event',注意这里的数据全都是与球相关的event,所以不管最终数据形象化为Squawka中的地热图/分区图或者442Statszone中的Influence图或者WhoScored的平均站位图,都是根据有球行为(进攻防守都算上)来进行平均的。 而真正为俱乐部提供数据的公司(例如ProZone)是在球场各处放置八个摄像机,然后通过摄像机的影像,电脑自动模拟场上球员的位置(视觉化以后有点像FM里的二维比赛情景),此外也会有人工统计,但很明显这个数据的量级比Opta要高出不少。举个例子,ProZone会统计球员的跑动,而且会进行细分成1.静止2.慢跑3.中速跑4.快速跑5.冲刺来进行统计;而且你还可以依靠模拟观察到例如防线四人组之间站位的距离等等。这个细化程度和统计手段都是Opta无法企及的。但即便是这样程度的数据在主教练的决策中依然是参考,人对于足球的理解和判断永远处于最核心位置。 我以前也曾经提过,现今公众能拿到的数据远远无法展示比赛的全貌,只能粗略反映一些趋势性的东西(而且依然可能会误导)。足球不是单纯的回合制游戏,每个区域和全局的联系繁多而且影响因素繁多,这些东西需要有经验的眼睛来审视比赛反复推敲,解读比赛是思维量很大的脑力劳动。

手把手教你成为数据流懂球帝[足球篇]

注:本文由本文微信公众号的同名文章修改而成。

最近人工智能、大数据这一类的概念非常火爆,感觉就是市场卖菜也能和大数据扯上关系。不过,在一些领域,引入数据分析的话的确能发现很多有意思的东西。以体育领域为例,美国棒球职棒大联盟奥克兰运动家队的前GM(现在是执行副总裁)Billy Beane及其Moneyball理念是较早为大众所知的利用数据分析显著提升球队成绩的案例。现在基于模式识别、机器学习的数据分析技术也逐渐扩散到体育界的各领域。我们大部分都是普通的球迷,没有需要也没有能力更没有原始数据来源对实际问题进行专业的分析。不过对于一些生活中的数据控(如本人),更多的数据可以提供另一个角度的观察。下面本文将会对足球领域一些基础的数据来源:

一、相关网站

1 Whoscored()

对于每场比赛,Whoscored都会有完整的数据统计:

这是球队运动热点图

对于球员也会有相应的数据统计

Whoscored还会有一些个性化的内容,例如会列出来球队和球员的特点

2 Squawka(Football Statistics, Live Scores, Results, News, Analysis)

Squawka上面的数据和Whoscored的数据基本类似,不过表现的风格不同

例如对于一场比赛的传球

Whoscored会用点的形式表示

Squawka会把线路描出来

所以基本看自己的审美,从数据上来看是没有太大区别的。这是因为Whoscored和Squawka的数据提供商都是Opta(Opta Home),他们拿到的数据都是基于与球的运动相关的事件,即ball event。对于每个ball event,记录的是每个事件的种类(传球、射门、扑救、铲球)、发生坐标、结果、相关球员。基于这些数据可以生成常见的所有统计数据(控球率、射门次数等等),不过缺点就是没有无球球员的位置数据,这也是为什么现在很多人诟病数据分析无法揭示体育比赛实际情况的一个重要论点(关于这个问题,这个会在后面详细说明。)

3 Sky Sports(Sky Sports - Sports News, Transfers, Scores)

光从能提供的数据的角度,天空体育肯定是比不上前面提到的两个网站的,不过上面会有更多的新闻和评论向的文章。另外,Whoscored和Squawka的比赛解说是自动生成的,而天空体育的会有一些真实的解说文字,自行对比感受吧,不要问我为什么会关注那么奇怪的点……

二、科研paper

不是开玩笑,分析体育比赛还真能发paper……不过这需要专业的数据和研究方法。先说说足球这边的。

从用到的数据来看,从早起的研究大多基于前面提到的ball event,后来随着技术的发展,数据的收集范围扩展到每一秒中每一帧球员和球的位置,这样的话,只要技术达到相应的水平,对于无球球员的情况也是可以分析出来的。因此回到前面提到的那个问题,的确我们平时接触到的都是一些简单的统计数据,但不代表在非常专业的层面没有分析诸如无球跑动、球队阵型这些深层次内容的数据和方法,只不过普通球迷没有办法获得而已。顺便说一下,目前有这类数据的公司叫Prozone,已经被一家叫STATS(Sports Data Company)的公司收购,这样子的话STATS就垄断了世界上足球和篮球顶级赛事的数据来源,一般只有他们内部或是与他们有合作关系的科研机构才有机会获到相关的数据。

对于足球,利用以上这些数据,可以做的东西有:球队分类、球员之间传球情况分析、下一时刻足球位置预测、射门结果预测、球队阵型分析……在此不一一介绍,推荐一篇近期出来的review(终于要上文章了好兴奋~),里面主要介绍的是足球和篮球相关的,对于相关的文章介绍非常全面:

[1]Gudmundsson J, Horton M. Spatio-Temporal Analysis of Team Sports--A Survey[J]. arXiv preprint arXiv:.4, .

足球分析的话推荐一位大神Patrick Lucey(,最近几年在一些比较好的数据挖掘会议上关于足球的文章几乎全是他的team发的,已经被挖到STATS做数据科学家了,所以说不定很快就看不到他的文章了。总不能在推送里面讲paper吧……所以大家有兴趣的自己去他的主页看就好了。不过(还是没忍住……)推荐一下这篇:

[2]Bialkowski A, Lucey P, Carr P, et al. Large-scale analysis of soccer matches using spatiotemporal tracking data[C]//Data Mining (ICDM), IEEE International Conference on. IEEE, : 725-730.

里面讲的是如何利用整场比赛所有球员的位置数据来估计球队的阵型,下图([2])是对某一年英超进行分析得到的几种常见阵型,看着还挺像那么回事的,像442,,433这些都能看到。另外根据阵型去猜具体是哪支球队能做到75%的准确率也是相当厉害的(20支球队,随机猜的话只有5%的正确率)。

最后推荐一个会议,MIT Sloan Sports Analytics Conference(MIT Sloan Sports Analytics Conference),每年的三月份召开,会聚集很多学界和体育界的专业人士,可以投稿,被录取的paper也会在官网上发布。

总结

在当前这个时代,各种各样的数据充斥着社会生活的方方面面,体育比赛也不例外。对于足球领域(其实对于其他体育领域也一样)来说,由于原始数据的稀缺性和垄断性,我们很难直接得到可以分析的数据,但现实中仍存在很多资源让我们去接触和体验分析足球比赛的方法,不管是直观的可视化手段,或是严谨的科学研究。这些会给予我们另一个视觉去领略足球比赛的美。

以上。