大家新年好,好久没有更新博客,众所周知,我之前的博客基本上是以系统操作和LeetCode算法题的为主,于是趁着新春佳节给大家介绍一些我的idea,其中一个就是将Nature Language Processing (NLP) 应用在英超范特西联盟(FPL)数据上去分析球员的表现。

为什么说选择FPL的数据作为分析的源头,主要是一般的球员数据在各大平台比较分散,而FPL为玩家提供每周竞赛GW的数据比较全面,容易获得,而且还自带了一个基于高级数据分析的奖励分——bonus,来评价每场比赛的优秀球员,分值从1分到3分。因此这些数据极大减轻了笔者在数据处理中的时间负担。

目录

算法选择

数据

结果

结论

引用


  • 算法选择

作为这个算法的初期实现,笔者采用了比较经典TF-IDF算法。这个算法主要作用是根据字词在语句中出现的次数与整个语料中的语句频率来计算一个字词在整个语料中的重要程度,同时能够过滤掉一些非常常见但无重要意义的词语,例如:the。为什么想到将其应用于FPL数据中,笔者主要考虑到,若是以球队为单位可视作语料,每一个球员即可视为单一语句,其每一个动作比如射门,传球,进球则可以看作是每一个字词,因此利用该算法就可以分析得到每一个球员的所发生的动作重要性,以及他们在球队中的重要性。

  • TF(Term Frequency):词频 

其中t指词在文章中出现的次数,而d指文章的总次数。

  • IDF(Inverse Document Frequency):逆文档频率

其中指语料库中的文档数,而指含有该词语的文档数。

  • 其重要性:
  • 整个语句的长度:

在这里语句长度替代了球员在整个队伍数据所占的篇幅,即其重要性。

  • 数据

数据汇总截止于GW20,即1月28日对阵谢菲联后,只选取了已经出场的球员的数据,数据引用可参考引用一栏。

以下为球员的基础数据,以first name首字母排序:

Goals_scored 进球数

Assists 助攻数

Minutes 上场时间(分钟)

Goal_conceded 失球数

Threat 威胁

FPL_bonus 英超范特西奖励分

Clean_sheets 零封

Red_cards 红牌

Yellow_cards 黄牌

Save 扑救数

Own_goal 乌龙球

Appearance 上场数

Shot_per_90mins 每90分钟射门数

Pass_led_to_shot_per_90mins 每90分钟中引领射门的传球数

其中上场时间和上场数不作为词语分析。

  • 结果

单个动作的重要性(逆文档频率):

Goals_scored 0.693147181
Assists 0.613104473
Goals_conceded 0.042559614
Threat 0.182321557
FPL_bonus 0.613104473
Clean_sheets 0.344840486
Red_cards 3.17805383
Yellow_cards 0.538996501
Save 2.484907
Own_goal 2.484907
Shot_per_90mins 0.233615
Pass_led_to_shot_per_90mins 0.28768207

每个球员的动作频率重要性,以first name首字母排序:

first_name second_name Goals_scored Assists Goals_conceded Threat FPL_bonus Clean_sheets Red_cards Yellow_cards Save Own_goal Shot_per_90mins Pass_led_to_shot_per_90mins
Aaron Wan-Bissaka 0.693147181 0.61 0.936311517 13.12715 1.83931342 2.069042918 0 0 0 0 0.039714525 0.192746989
Alex Nicolao Telles 0 1.23 0.340476915 5.469647 1.83931342 0.344840486 0 0 0 0 0.163530396 0.500566806
Anthony Martial 1.386294361 3.07 0.893751903 90.06685 1.22620895 1.034521459 3.1780538 0 0 0 0.579364831 0.290558893
Axel Tuanzebe 0 0.00 0.127678843 0 0 0 0 0.5389965 0 2.484907 0 0
Brandon Williams 0 0.00 0 0 0 0 0 0 0 0 0 0
Bruno Miguel Borges Fernandes 7.624618986 5.52 0.936311517 129.4483 13.4882984 2.069042918 0 2.155986 0 0 0.83166887 0.91482899
Daniel James 0.693147181 0.00 0.212798072 26.80127 0 0 0 1.077993 0 0 0.62842395 0.307819818
David de Gea 0 0.00 1.021430746 0 1.83931342 2.069042918 0 0 91.9415 0 0 0
Dean Henderson 0 0.00 0.127678843 0 0 0 0 0.5389965 27.334 0 0 0
Donny van de Beek 0.693147181 0.00 0.38303653 10.75697 0 0 0 0 0 0 0.086437495 0.215761554
Edinson Cavani 2.772588722 1.23 0.212798072 48.67986 2.45241789 0.689680973 0 0.5389965 0 0 0.773265157 0.201377451
Eric Bailly 0 0.00 0.468155759 3.646431 2.45241789 0.689680973 0 1.077993 0 0 0.039714525 0
Frederico Rodrigues de Paula Santos 0 0.00 0.553274987 12.58019 0 1.724202431 0 1.6169895 0 0 0.17287499 0.284805252
Harry Maguire 1.386294361 0.61 1.149109589 51.23236 2.45241789 2.069042918 0 2.155986 0 0 0.292018564 0.043152311
Juan Mata 0 1.84 0.127678843 12.21554 0 0.344840486 0 0 0 0 0.247631742 0.609885994
Luke Shaw 0 0.61 0.808632674 13.67412 6.7441492 1.379361945 0 2.155986 0 2.484907 0.032706079 0.5552264
Marcus Rashford 4.852030264 3.07 1.021430746 118.8737 2.45241789 2.069042918 0 1.6169895 0 0 0.593381722 0.333711204
Mason Greenwood 0.693147181 0.00 0.638394216 45.03342 0 0.689680973 0 0.5389965 0 0 0.635432395 0.163978781
Nemanja Matic 0 0.61 0.553274987 4.558039 0 1.034521459 0 1.077993 0 0 0.086437495 0.212884734
Odion Ighalo 0 0.00 0.042559614 0.364643 0 0 0 0 0 0 0 0
Paul Pogba 2.079441542 1.23 0.723513445 42.84557 5.51794026 1.379361945 0 1.077993 0 0 0.310707752 0.256037044
Scott McTominay 1.386294361 0.61 0.595834602 15.86198 1.83931342 1.034521459 0 0 0 0 0.186891881 0.281928431
Timothy Fosu-Mensah 0 0.00 0.085119229 2.917145 0 0 0 0.5389965 0 0 0.247631742 0.609885994
Victor Lindelof 0.693147181 0.61 0.680953831 9.480721 0.61310447 1.379361945 0 0 0 0 0.067748307 0.083427801

对于单个动作来说,自然是物依稀为贵,比如对于非门将球员来说进球,助攻以及威胁球自然是最重要数据,门将则是最看重扑救数。

对每个球员的TF-IDF数据进行汇总,得到其在球队的重要性:

first_name second_name Total
Bruno Miguel Borges Fernandes 130.5324
Marcus Rashford 119.0727
David de Gea 91.98889
Anthony Martial 90.2067
Harry Maguire 51.41404
Edinson Cavani 48.85062
Mason Greenwood 45.05657
Paul Pogba 43.31014
Dean Henderson 27.33958
Daniel James 26.84186
Scott McTominay 16.08797
Luke Shaw 15.70127
Aaron Wan-Bissaka 13.48176
Frederico Rodrigues de Paula Santos 12.81662
Juan Mata 12.37623
Donny van de Beek 10.78859
Victor Lindelof 9.66924
Alex Nicolao Telles 5.942714
Nemanja Matic 4.872661
Eric Bailly 4.60101
Timothy Fosu-Mensah 3.039865
Axel Tuanzebe 2.545895
Odion Ighalo 0.367118
Brandon Williams 0

正如我们的印象一样,我们的大B哥——布鲁诺费尔南德斯,遥遥领先第二名的拉什福德,其动作占据队伍的重要性最大,即他对球队影响最多。

单位分钟里对球队的总重要性:

first_name second_name Total/mins
Dean Henderson 0.121509267
Edinson Cavani 0.092345225
Daniel James 0.083101736
Bruno Miguel Borges Fernandes 0.078871558
Anthony Martial 0.078645774
Marcus Rashford 0.073185419
David de Gea 0.058405642
Mason Greenwood 0.057913324
Donny van de Beek 0.041978943
Odion Ighalo 0.040790934
Timothy Fosu-Mensah 0.037998313
Juan Mata 0.037054584
Paul Pogba 0.035587624
Harry Maguire 0.028563355
Axel Tuanzebe 0.019434311
Scott McTominay 0.015850215
Luke Shaw 0.012481135
Frederico Rodrigues de Paula Santos 0.011736832
Alex Nicolao Telles 0.011675272
Eric Bailly 0.008396003
Aaron Wan-Bissaka 0.008322075
Victor Lindelof 0.007829344
Nemanja Matic 0.006674878
Brandon Williams 0

在每一分钟内,迪恩亨德森,卡瓦尼和丹尼尔詹姆斯对球队的贡献最大。同样的,B费不仅贡献良多,而且效率突出。

每次出场里对球队的总重要性:

first_name second_name Total/apps
Dean Henderson 9.113195
Bruno Miguel Borges Fernandes 6.52662143
Marcus Rashford 5.95363381
Anthony Martial 5.63791894
David de Gea 5.11049369
Daniel James 4.47364345
Edinson Cavani 3.75774033
Mason Greenwood 3.21832616
Timothy Fosu-Mensah 3.03986502
Harry Maguire 2.57070191
Paul Pogba 2.54765522
Juan Mata 2.06270518
Luke Shaw 0.98132926
Donny van de Beek 0.98078076
Scott McTominay 0.94635106
Frederico Rodrigues de Paula Santos 0.91547288
Alex Nicolao Telles 0.8489591
Aaron Wan-Bissaka 0.74898675
Victor Lindelof 0.69066001
Eric Bailly 0.65728709
Axel Tuanzebe 0.50917895
Nemanja Matic 0.40605507
Odion Ighalo 0.3671184
Brandon Williams 0

在每一次的出场中,迪恩亨德森和B费对球队影响最为突出。

  • 结论

毫无疑问,我们B费的确是曼联20~21赛季的半程MVP。而在门将位置上,迪恩亨德森在有限的出场里在门将数据指标上比德赫亚更加有效率,后生可期。在替补的选择上,索尔斯克亚不妨多考虑下丹尼尔詹姆斯,这个上赛季上半程给我们带来希望的小伙子。

但是单从这个算法的应用来说,其实仍有缺陷之处,比如红黄牌以及乌龙球的符号是否应该在后期考虑根据语境或者比赛的进程判断应该为正还是负,还有各个数据标签之间是否应该根据特定的系数计算后进行累加,而不是直接叠加,以及这种算法能否为未来比赛作出预测,这些都是需要去进行探究的,欢迎各位读者留言进行探讨,谢谢。

  • 引用

https://understat.com/team/Manchester_United/2020

https://github.com/vaastav/Fantasy-Premier-League

利用英超FPL数据分析球员第一期——曼联半程MVP相关推荐

  1. 《利用Python进行数据分析》第一个案例

    首先上数据 链接:添加链接描述 提取码:i7xl 我是用的jupter notebook 写的 首先读入数据,由于数据是json形式 #导入数据 import json path='C:\\Users ...

  2. 啃书:《利用Python进行数据分析》第一章

    1.1本书内容 本书系统阐述了Python进行数据控制.处理.整理.分析等多方面的具体细节和基本要点.我再学习这本书的过程中进行一个汇总和总结,通过笔记来强化牢记知识点. 数据的类别 本书中出现的数据 ...

  3. 用python进行数据分析举例说明_《利用python进行数据分析》读书笔记 --第一、二章 准备与例子...

    第一章 准备工作 今天开始码这本书--<利用python进行数据分析>.R和python都得会用才行,这是码这本书的原因.首先按照书上说的进行安装,google下载了epd_free-7. ...

  4. 数据基础---《利用Python进行数据分析·第2版》第11章 时间序列

    之前自己对于numpy和pandas是要用的时候东学一点西一点,直到看到<利用Python进行数据分析·第2版>,觉得只看这一篇就够了.非常感谢原博主的翻译和分享. 时间序列(time s ...

  5. 利用Python进行数据分析笔记-pandas建模(statsmodels篇)

    跟着教程学习了一段时间数据分析,越学感觉坑越多.于是花了一个星期仔细看了下<利用Python进行数据分析>.写在这里主要是记录下,方便自己查看. statsmodels简介 statsmo ...

  6. 利用python进行数据分析_从删库到跑路

    目录 前言 一 numpy模块 1.numpy的数据结构:多维数组ndarray 数组转置和轴对换 矩阵内积 通用函数 利用数组进行数据处理(矢量化) 将条件逻辑表述为数组运算 数组和统计法方法 约简 ...

  7. 利用Python进行数据分析之金融数据的统计分析

    金融领域必备的数据分析技能 上期讲了金融数据的储存,这期讲解利用Python进行金融数据的统计分析 下面运行环境没有的,请看第一期内容安装环境 本节重点: 分析HS300股票的市值和PE的统计规律 个 ...

  8. 让创新,从“芯”加速—安创孵化成长营第一期成果展示顺利举行

    2015年6月24日,北京讯,安创孵化成长营第一期成果展示今日在北京顺利拉开帷幕.在首次展示日上,24家智能硬件和物联网热点领域创新创业团队,向业界展示了他们各自的创新成果及技术"硬&quo ...

  9. 如何利用数据仓库优化数据分析?

    在整个数据分析流程中,数据处理的时间往往要占据70%以上!这个数字有没有让你震惊呢?为了提高分析效率和质量,借用数据仓库进行数据分析是一个很好的选择,详细的工作方法本文都有所介绍. 首先,我们来了解一 ...

最新文章

  1. 天津商业大学计算机科学与技术分数线,天津商业大学录取分数线2021是多少分(附历年录取分数线)...
  2. 数据库字段设置为非空默认值
  3. angularJS 表单验证
  4. page,client,offset区别
  5. [PBI催化剂]国际水准,中国首款重量级PowerBIDeskTop外部工具问世
  6. python3捕获异常_python中异常捕获方法详解
  7. 母版事件中注册javascript脚本
  8. oracle inventory directory,oraInventory目录的作用
  9. 【已解决】Failed to start cron.service: Unit cron.service not found.
  10. 1000个JQuery插件(转载)
  11. matlab图像分割算法源码
  12. 本科大学计算机专业排名2015,2015年美国大学本科计算机专业排名
  13. 产品经理如何设计网页导航菜单
  14. tig git的好搭档
  15. 大家都在努力,你凭什么不努力?
  16. spring cache注解@Cacheable参数key赋值
  17. 计算机图形学——游戏方向 第一章 计算机图形学概述
  18. linux查看dns命令
  19. 当下非常火的VR全景展示到底是什么?
  20. MySQL的定时任务详解

热门文章

  1. node.js使用Sequelize实现多表连接查询
  2. Python脚本——信手拈来的自动化测试工具
  3. OMAP3630 I2C device驱动
  4. Android美化之全局透明背景
  5. 什么是全量数据、增量数据?如何统一一套系统?
  6. 远程桌面 域计算机,在AD中实现仅普通域用户可通过远程桌面控制自身计算机
  7. AttributeError: ‘FigureCanvasTkAgg‘ object has no attribute ‘set_window_title‘
  8. 浅谈Feature Scaling
  9. 国内三大制式3G网络简介及比较
  10. Python数据结构与算法基础|第五期:代码实现——循环队列的链式存储结构