一年一度的欧洲冠军联赛(以下简称欧冠)已经重燃战火,今年谁能在伊斯坦布尔会师?谁能拿下那令人垂涎欲滴的大耳杯?去年夺冠的皇马,今年能否再创辉煌?
身为一名资深老球迷,我也在日夜思考这个问题,甚至梦见了足球界玄学大师皇家马德里(以下简称皇马)主教练齐达内。
没错,就是曾经在世界杯决赛用头将对手撞到的那位,同时也是靠着我国的玄学率领皇马勇夺欧冠三连冠的那位,业界尊称为“齐祖”
我:齐祖,你看今年谁能拿大耳杯?
齐祖(大笑):那还用说,当然是我皇马了!
我:齐祖,你这样说,可有何依据?
齐祖:emm,依据就是你们中国的玄学~
我:我不信,咱俩打个赌,你输了你请,你赢了咱俩AA~
齐祖:赌就赌,谁怕谁,呵呵~
身为一名懂数据的球迷,我决定用python数据分析来检验齐祖的狂言是否属实。数据来源于懂X帝(截止时间2019年11月5日)。
感兴趣数据爬取的小伙伴们可以参考我之前的文章《数据告诉你,中超16家球队谁是老大》,在此就不赘述了。
##球员基本指标分析
我们先来看参加欧冠的球员都是什么样,是不是都是那种身轻如燕、力大无穷,跑起来跟神行太保一样?简单的数据清洗后,上图。
# 对年龄、身高、体重进行数据清洗
def digit(x):
return re.search(r'(\d*)\D*', str(x)).group(1)
df['年龄'] = df['年龄'].apply(digit)
df['身高'] = df['身高'].apply(digit)
df['体重'] = df['体重'].apply(digit)
通过简单的数据观察可以发现:欧冠比赛的球员身高分布在176-190cm之间,体重主要分布在66-85kg之间。年龄上有三个人数高峰:31岁左右、26岁左右、22岁左右,分别对应了一个球队的“老中青”三代。
我这么说读者朋友们可能没有直观的感觉,比如我们耳熟能详的球星C罗,80kg,185cm,去年夺冠时33岁(老干部)
##详细指标和预测
为了能够更好的统计出参加欧冠俱乐部的真正水平,结合我多年的观赛经验,我将每家俱乐部的所有球员按照前锋、中场、后卫、门将4个位置去比较,每个位置的得分算法如下:
######前锋 = 射门0.3 + 力量0.15 + 速度0.2 + 盘带0.2+ 传球0.15
######中场 = 盘带0.35 + 传球0.3 + 速度0.2 + 力量0.15
######后卫 = 防守0.35 + 传球0.3 + 速度0.15 + 力量0.2
######门将 = 扑救0.45 + 反应0.35 + 手型0.2
######俱乐部总分 = 前锋0.25+ 中场0.3 + 后卫0.4 + 门将0.05
由于前锋更多的是参与进攻,所以我将前锋的进攻特点设置较大的比重;中场起到承前启后的作用,充当球队前后场的衔接者,所以我将中场的连接特点设置较大的比重;后卫主要任务是防守,所以我将后卫的防守特点设置较大的比重;门将的任务是反应能力强,并扑出对方的射门,因此扑救和反应这两个特点比重较大。
##前锋综合得分
按照算法,我筛选了前20的前锋,并展示出来:
def zhuzhuangtu(df, t1, t2, col, bottom, color, width):
source1 = ColumnDataSource(df)
output_file('D://' + t1 + '.html')
hover = HoverTool(tooltips = [('综合得分', '@score')])
p1 = figure(x_range = df[col], plot_width = width,
plot_height = 500, x_axis_label = col, y_axis_label = '分数',
title = t2,
tools = [hover, 'reset, xwheel_zoom, pan, crosshair'])
p1.vbar(x = col, top = 'score', bottom = bottom, source = source1,
width = 0.9, alpha = 0.8, fill_color = color, muted_alpha = 0.2)
show(p1)
我们看到,排在一二名的是梅西和C罗,这两位足坛“绝代双骄”依旧在绿茵场上奔驰,仍然是宝刀未老;
排在第三的是埃及神锋萨拉赫,他目前是英超第一豪门利物浦的主力前锋,他能够利用这两大优势冲击对手防线并在乱战中找到破门机会,从而一剑封喉。
排在第四的是2018年世界杯大放异彩的法国足坛新星姆巴佩。他在与阿根廷的比赛中利用速度优势多次撕开对手的防线,为球队晋级乃至最终夺冠立下了汗马功劳;
在这高手如云,球星如雨的前锋里我们看到了一个中文名字,可惜他不是中国人,他来自韩国,叫孙兴慜。他目前是热刺队的绝对大腿,能突能射,所到之处无人能敌。作为一个亚洲人,在身体和天赋上都落后于欧洲人,能挤进这20人的大名单真的实属不易!
但我发现,前20人中属于皇马的前锋仅仅只有阿扎尔和贝尔两人,其中贝尔还不受齐祖待见,能依靠的就只有阿扎尔了。
我们看一下前锋总得分排在前20的俱乐部吧:
可以看出,排在前四名的分别是巴塞罗那、曼城、巴黎圣日耳曼和尤文图斯。**而皇马呢?仅仅排在第6名!**可见自从去年夏天C罗转会之后皇马的攻击能力大打折扣,连没得过几次欧冠冠军的多特蒙德都比不过。皇马你什么时候沦落到这种地步,怎能不让人唏嘘?
##中场综合得分
如果说前锋相比于人的头的话,那么中场就相当于脖子。齐祖在球员时代就被称为中场大师,而当他不在时,球队就完了,这在2006年世界杯决赛就表现得很明显。我们先看一下排在前20名的中场球员都是谁吧:
zhuzhuangtu(df_zc_top20, '中场top20柱状图', '中场top20柱状图', '姓名', 80, '#FF7F50', 1300)
这里很多人我相信大家都不认识,因为大家只关心在比赛中能进球的,而进球机会最多的当然是前锋了。
排在第一的是德布劳内,因其长得像动画中的人物而被称为“丁丁”。他在比利时国家队和曼城队时都是数一数二的人物,经常贡献几次关键进球和助攻。
在这20人名单里,仅仅只有莫德里奇属于皇马(莫德里奇就是2018年金球奖得主和世界足球先生)。其他人由于实力不足根本进不了名单,我们看一下俱乐部中场前20名:
zhuzhuangtu(df_zc_clubs_20, '俱乐部中场统计图', '俱乐部中场统计图', '俱乐部', 73, '#FF1493', 1300)
可以看出,排在前四名的分别是曼城、巴黎圣日耳曼、尤文图斯和多特蒙德。
**至于皇马,已经排到了第7名!**确实,皇马中场目前只有莫德里奇能够挑大梁,2014年世界杯金球奖得主J罗则长时间受伤病困扰,很难上场。所以皇马跟要想从各大豪强中杀出重围、脱颖而出真的是太难了!看来那顿饭真的得由齐祖来请了~
##后卫综合得分
后卫是球队中主要参与防守的人员,他们的强弱决定了球队的丢球数。我们来看一下后卫排在前20的都是谁:
zhuzhuangtu(df_hw_top20, '后卫top20柱状图', '后卫top20柱状图', '姓名', 78, '#87CEEB', 1300)
从图中看出,排在第一的是来自利物浦的范戴克,他目前是球队主力后卫,曾在一场比赛中凭一己之力防住了对方两名球员的进攻。
**在这20人名单里,皇马有3人入选,分别是拉莫斯、卡瓦哈尔和马塞洛。**而且这三人得分都很高,可以称得上是皇马的后防线的中流砥柱。其中拉莫斯经验丰富,经常贡献出多次抢断,化解对手进攻。不过他有时候也因为粗野的犯规而遭到媒体和球迷的口诛笔伐。
我们看一下俱乐部后卫前20名:
zhuzhuangtu(df_hw_clubs_20, '俱乐部后卫统计图', '俱乐部后卫统计图', '俱乐部', 70, '#228B22', 1300)
皇马终于排到了第一位,而且还超出第二名很多,甚至可以说是傲视群雄!这说明皇马的防线还算是固若金汤的。
排在2-4名的分别是曼城、尤文图斯和多特蒙德。在这里我们又看到了曼城的名字,它已经出现3次了,直觉告诉我,曼城真的会坏齐祖的好梦~
##门将综合得分
门将是大门的直接守护者,也同样是队内最大背锅侠。我们看一下门将排在前20的都是谁:
zhuzhuangtu(df_mj_top20, '门将top20柱状图', '门将top20柱状图', '姓名', 82, 'orange', 1300)
排在第一的是奥布拉克,他来自马德里竞技俱乐部,他在163场西甲比赛中95场零封对手,确实很牛逼。
而皇马门将库尔图瓦则排在第7名,实力算不上最强,倒是原皇马门将纳瓦斯却排在了第三名。真想不通皇马高层是不是脑子被门夹了,估计齐祖对此操作也是无能为力吧。
我们看一下俱乐部门将前20名:
zhuzhuangtu(df_mj_clubs_20, '俱乐部门将统计图', '俱乐部门将统计图', '俱乐部', 80, '#53868B', 1300)
由于门将位置很稳定,除非有特殊情况,否则门将几乎都是每场首发且极少被换下或罚下,所以本文在计算俱乐部门将得分时选的是每家俱乐部门将得分的最大值。
我们看出,排在第一的是马德里竞技,**而皇马只排在第7名。**由于库尔图瓦发挥并不稳定,容易犯低级错误。不过好在门将在比赛中并不重要,所以也无可厚非。
##所有俱乐部综合得分
根据之前的算法,我们看一下各俱乐部前20的综合总排名:
def group_score(df, c1, c2, c3, c4, t1, t2, bottom, color):
df_clubs_group = df[(df['俱乐部'] == c1) | (df['俱乐部'] == c2) |
(df['俱乐部'] == c3) | (df['俱乐部'] == c4)]
df_zonghe = df_clubs_group[['俱乐部', '综合得分']]
# 发现俱乐部字段中有些值为'',需将其转换为np.nan形式,然后用前一个值填充空值
df_zonghe[df_zonghe['俱乐部'] == ''] = np.nan
df_zonghe['俱乐部'].fillna(method = 'bfill', inplace = True)
# 筛选综合得分字段中不为空的值
df_zonghe = df_zonghe[df_zonghe['综合得分'].notnull()]
df_zonghe['综合得分'] = df_zonghe['综合得分'].astype('int')
# 按照俱乐部进行分组求平均值
df_zonghe = df_zonghe.groupby(by = '俱乐部').mean()
df_zonghe.reset_index(inplace = True)
df_zonghe.sort_values(by = '综合得分', ascending = False, inplace = True)
df_zonghe = df_zonghe.rename(columns = {'综合得分': 'score'})
#df_zonghe_top20 = df_zonghe.iloc[:20]
# 用bokeh画柱状图
source1 = ColumnDataSource(df_zonghe)
output_file('D://PyCharm 2017.2//' + t1 + '.html')
hover = HoverTool(tooltips = [('综合得分', '@score')])
p1 = figure(x_range = df_zonghe['俱乐部'], plot_width = 900,
plot_height = 500, x_axis_label = '俱乐部', y_axis_label = '分数',
title = t2,
tools = [hover, 'reset, xwheel_zoom, pan, crosshair'])
p1.vbar(x = '俱乐部', top = 'score', bottom = bottom, source = source1,
width = 0.9, alpha = 0.8, fill_color = color, muted_alpha = 0.2)
show(p1)
虽然分项表现一般,皇马还是排在第二的位置,略超第三名巴塞罗那一丢丢,曼城如我所料就是皇马冠军路上的最大绊脚石。可以说曼城将是欧冠冠军,皇马只能位居亚军。不过皇马与其身后的巴塞罗那差距真的是很近,稍有不慎连决赛都进不了,别说拿大耳杯了。
齐祖,这次你的玄学真的好用吗?
关注微信公众号 【大鹏教你玩数据】 ,后台回复【54】获取本文所有代码和数据
作者:城市数据团 数据分析师(Python)微专业学员 何雄飞
共同学习,写下你的评论
评论加载中...
作者其他优质文章