查看原文
其他

图解欧洲足球五大联赛 | R爬虫&可视化第五季

徐麟 R语言中文社区 2019-04-22

作者:徐麟,数据分析师,就职于上海唯品会。热爱数据挖掘和分析,喜欢用R、Python玩点不一样的数据。个人公众号:数据森麟(微信ID:shujusenlin) 


往期回顾:

同花顺股票分数可视化 | R爬虫&可视化第3季

近三十年6000部国产电视剧告诉了我们些什么 | R爬虫&可视化第四季

前言

R爬虫&可视化系列文章来到了第五季,我们来聊聊欧洲足球五大联赛。本人作为一个不会踢球的资深球迷,俗称“懂球帝”,今天就与大家用数据分析一下2017-2018赛季欧洲五大联赛的各项指标。

数据爬取

本次数据爬取我们选择的是虎扑网站,虎扑网站作为大型的体育类资讯网站,可以作为足球类数据的来源。爬取分为两部分,球员资料和比赛统计,比较好的一点是虎扑网站上的数据是以表格形式进行存储,如下图所示:



上图中由于虎扑球队信息更新不是特别及时,我们会在后期把这部分数据和比赛数据做inner join。循环爬取表格的方法基本上是相似的,下面只展示其中一场比赛的数据爬取,球员基本信息爬取与其类似:


  1. i=10854899 ##网站比赛编号,作为循环因子即可

  2. url <- sprintf('https://g.hupu.com/soccer/data_%d.html',i)

  3. temp <- getURL(url,.encoding='utf-8')

  4. doc <-htmlParse(temp)

  5. players <- readHTMLTable(doc)

  6. home <- players$table_home_players_stats

  7. away <- players$table_away_players_stats

  8. ## 判断数据是否爬取,home_row,away_row均大于1说明数据成功爬取

  9. home_row <- nrow(home)

  10. away_row <- nrow(away)

数据分析

PART1:五大联赛比赛数据对比

首先我们通过几个维度对比五大联赛比赛的特点,在pc端我们使用subplot将四幅对比图放在一起,使得对比更加直观:



通过以上指标我们发现英超的球队平均每场犯规次数远低于其他四大联赛,黄牌数量也较少,这与英超宽松的吹罚尺度有着密切的联系。西甲的越位和黄牌数量在五大联赛中均处于领先位置,严格的吹罚尺度更加有利于技术流的发展。


法甲的整体射门转化率在五大联赛中处于最低位置,一方面是由于一些神级门将的发挥(上届世界杯有着神级发挥的奥乔亚就曾在法甲让大巴黎37脚射门仅进1球),另一方面想必法甲也培养了一批的“吐饼王”。

部分代码如下:


  1. ## 球队平均每场犯规数绘制,其他图同理

  2. p1 <- ggplot(league_stat,aes(x=联赛,y=平均每队犯规,fill=联赛))+

  3.    geom_boxplot()+

  4.    scale_color_few()+theme_economist()+ggtitle('球队平均每场犯规数')+

  5.    theme(axis.title = element_blank(),

  6.          plot.title = element_text(hjust=0.5,size=17),

  7.          axis.text.x = element_text(size = 15),

  8.          legend.position = 'NONE')  

  9. ## 设置subplot的行、列数

  10. grid.newpage()

  11. pushViewport(viewport(layout=grid.layout(2,2)))

  12. vplayout<-function(x,y){viewport(layout.pos.row =x,layout.pos.col=y)}

  13. ## 将ggplot放置在subplot中

  14. print(p1,vp=vplayout(1,1))

  15. print(p2,vp=vplayout(1,2))

  16. print(p3,vp=vplayout(2,1))

  17. print(p4,vp=vplayout(2,2))


PART2:球员对比

我们首先挑选四项重要指标,进球效率,助攻效率,被犯规频率和扑救成功率的TOP20。其中被犯规频率需要考虑到联赛整体的吹罚尺度,所以计算时会乘以联赛的吹罚系数。下面战死四项指标的组合图:



进球效率TOP5:卡瓦尼,法尔考,伊卡尔迪,因莫比莱,迪巴拉

助攻效率TOP5:格德斯,夸德拉多,皮亚尼奇,博格巴,达胡德

被犯规速率TOP5:内马尔,巴恩斯,桑切斯,埃尔南德斯,萨尔

扑救成功率TOP5:奥布拉克,波普,特尔施特根,德赫亚,纳瓦斯


内马尔在对手眼中是个极大的威胁,帮助他最常被侵犯排行榜TOP1,希望内少保重身体,明年世界杯就要来了。格德斯和奥布拉克分列助攻和扑球榜榜首,想必已经引起各大豪门的注意。

之前被诟病的卡瓦尼此次荣登进球效率榜首尾有些出人意料,看来大家的直觉和数据本身有时会有偏差。


另外一个大家很关心的问题就是谁拥有球队绝对开火权,我们选取了射门数量占全队百分比的TOP20,并且对比其射门转化率:



梅西、凯恩、C罗、巴洛特利、哲科分列前五位,可见其在球队的地位,巴神在TOP5中射门转化率最高,看来近期状态不错。C罗可能是把进球的感觉都留在了杯赛中,联赛射门转化率不甚理想。


汤姆因斯和卡罗尔两位的射门转化率均为0,这并不是数据缺失,而是这两位确实没有进球,下半赛季两位都需要做出改变。

这部分代码涉及到了melt函数,如下所示:


  1. ord <- order(player_stat$射门占比,decreasing = TRUE)

  2. player_stat_shemen <- player_stat[ord,][1:20,]

  3. player_stat_shemen <- melt(player_stat_shemen,id=c('球员名','射门占比'),

  4. measure=c('射门占比','射门转化率'))


PART3:联赛球员属性对比

我们最后看一下各大联赛球员的属性,重点是对比年龄和国籍分布情况,首先我们看一下五大联赛整体的对比情况:



五大联赛中英超外籍球员出场占比,上场球员平均年龄两项指标均高于其他几大联赛。对此本公众号推测足协正是看到了“欧洲中国队”联赛的现状,所以制定出了“标新立异“的u23和外援新政。


最后我们用地图的视角看一下五大联赛的球员国籍分布:

以西甲静态图为例,颜色深浅表示不同国籍的球员出场总时长情况:



下面是五大联赛的动态GIF图表,由于公众号图片上传大小的限制,所以可能看的不是特别清晰,每次图片的切换代表不同联赛之间的切换:



该部分重要代码如下:

  1. p <- echartr(huizong,x=英文名,y=总时间,type='map_world',

  2.    t=联赛,subtype="move + scale")%>%

  3.    setDataRange(valueRange=c(0,20000))


动态图中可以看到,各大联赛的球员国籍分布还是存在些许的差异,在此就不进行详细的展开说明。关于五大联赛的分析暂时就到这里,后续大家关于这方面有更多分析的点可以留言进行交流。


公众号后台回复关键字即可学习

回复 R               R语言快速入门免费视频 
回复 统计          统计方法及其在R中的实现
回复 用户画像   民生银行客户画像搭建与应用 
回复 大数据      大数据系列免费视频教程
回复 可视化      利用R语言做数据可视化
回复 数据挖掘   数据挖掘算法原理解释与应用
回复 机器学习   R&Python机器学习入门 

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存