鸟枪换炮,利用python3对球员做大数据降维(因子分析得分),为C罗找到合格僚机

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 众所周知,尤文图斯需要一座欧冠奖杯,C罗也还想再拿一座欧冠奖杯,为自己的荣誉簙上锦上添花。意甲霸主在意甲虽然风生水起,予取予求,但是在今年欧冠1/8决赛赛场上,被法甲球队里昂所淘汰,痛定思痛,球队解雇了主教练萨里,签约名宿皮尔洛,但是要想在欧冠赛场上夺冠,这还不够,球队还需要什么?没错,需要一名强力中锋,在正印中锋伊瓜因难堪大用的情况下,尤文图斯必须引进一名强力中锋。

众所周知,尤文图斯需要一座欧冠奖杯,C罗也还想再拿一座欧冠奖杯,为自己的荣誉簙上锦上添花。意甲霸主在意甲虽然风生水起,予取予求,但是在今年欧冠1/8决赛赛场上,被法甲球队里昂所淘汰,痛定思痛,球队解雇了主教练萨里,签约名宿皮尔洛,但是要想在欧冠赛场上夺冠,这还不够,球队还需要什么?没错,需要一名强力中锋,在正印中锋伊瓜因难堪大用的情况下,尤文图斯必须引进一名强力中锋。

现在的问题是,在新赛季即将开始、疫情下球队银根紧缩的背景下,到底谁才是合格的引援人选?本次我们使用基于Python3的factor\_analyzer库来对球员进行分析,试图寻找尤文图斯最适合引援的球员。

首先我们来划定范围,先排除掉不可能的签约,比如拜仁的莱万多夫斯基,或者是热刺的哈里凯恩亦或是皇马的哈基姆本泽马,这三人都是世界级中锋,但是由于身价等多种因素导致他们加盟尤文图斯的可能性无限趋近于零。好吧,让我们现实点,巴萨的苏亚雷斯,罗马的哲科以及马竞的莫拉塔才是可能的人选,苏亚雷斯已经和巴萨闹翻,出走几乎是必然。莫拉塔下个赛季也不会出现在卡尔德隆球场,哲科在罗马虽然过得还不错,但是很明显他想要更高的荣誉。

数据分析首先就得有数据,让我们来看看他们三个上赛季的比赛数据。

首先来看看同在西甲的苏亚雷斯和莫拉塔:

这里我们抽取中锋最重要的两项数据,进球数和进球转化率,可以看到在进球数相差4个的情况下,莫拉塔的进球转化率仅为14.5%,落后于苏亚雷斯的19%。

作为中锋,除了进球,还需要一定的策应能力,这样就可以为C罗的后插上提供帮助:

可以看到在策应能力上,莫拉塔也落后于苏亚雷斯,让我们再看看同在意甲的哲科和伊瓜因的数据:

哲科在上个赛季无论是进攻能力还是策应能力都明显强于伊瓜因。

现在我们来抽取一些高阶数据,这里以进球、转换率和助攻作为特征样本,当然了,如果愿意,也可以添加一些别的特征,这里只是简单演示一下,但是需要注意一点,数据建模只有有限的参考价值,因为球员的个人因素如:球员国籍,球员丑闻,球员个人目标定位(或期望值),球员伤病史及严重程度等等,这些都是没有参考数据的。

所以,我们以纯能力数据为核心考量,球员转会身价及年薪这些成本因素不作年化成本计算,理论上也可以说是从主观角度根据转会新闻对此进行判断。同样,球员及所处球队的竞训水平也不作为参考数据,因为即便天赋再高的球员,长期和不在同一水平的球员或者教练员一起训练,也会导致与期望值有巨大偏差。

将数据添加到数据集:

import pandas as pd  
import numpy as np  
from pandas import DataFrame,Series  
  
#构建数据集  
mydata = {  
       '进球':[16,12,16,8],  
       '进球转化率':[19,14,13,10],  
       '助攻':[8,2,7,4],  
}  
data = DataFrame(mydata)  
  
data.index=['苏亚雷斯','莫拉塔','哲科','伊瓜因']  
  
print(data)

数据矩阵:

进球  进球转化率  助攻  
苏亚雷斯  16     19   8  
莫拉塔   12     14   2  
哲科    16     13   7  
伊瓜因    8     10   4

因子分析是通过对原始数据相关系数内部结构的研究,将多个指标转化为少量互相不相关且不可观测的随机变量(即因子),以提取原有指标的绝大部分的信息的统计方法。因子分析首先将原始数据标准化处理,建立相关系数矩阵并计算其特征值和特征向量,接着从中选择特征值大于等于1的特征值个数为公共因子数,或者根据特征值累计贡献率大于80%来确定公共因子,求得正交或斜交因子载荷矩阵,最后计算公因子得分和综合得分。

第一步,建立因子分析模型:

from factor_analyzer import FactorAnalyzer, Rotator  
  
fa = FactorAnalyzer(rotation=None)  
fa.fit(data)

print(fa.loadings_)

公共因子与原有变量指标之间的关联程度由因子载荷值体现,由于初始因子载荷矩阵结构不够简明,各个因子的含义不突出。为此采用方差最大法,使各个变量在某个因子上产生较高的载荷,而在其余因子上载荷较小。

但是公共因子与原有变量指标之间的关联程度由因子载荷值体现,由于初始因子载荷矩阵结构不够简明,各个因子的含义不突出。为此采用方差最大法,使各个变量在某个因子上产生较高的载荷,而在其余因子上载荷较小,经过特征数据迭代收敛,得到旋转后因子载荷矩阵:

rotator = Rotator()  
print("旋转后矩阵:\n", rotator.fit_transform(fa.loadings_))

随后我们可以简单看一下变量方差,即是每个原始变量在每个共同因子的负荷量的平方和,也就是指原始变量方差中由共同因子所决定的比率。变量的方差由共同因子和唯一因子组成。共同性表明了原始变量方差中能被共同因子解释的部分,共同性越大,变量能被因子说明的程度越高,即因子可解释该变量的方差越多。共同性的意义在于说明如果用共同因子替代原始变量后,原始变量的信息被保留的程度。

print(fa.get_communalities())

也可以查看因子相关矩阵和特征值:

print(fa.get_eigenvalues())

当然了,我们的最终目的是根据因子模型对各个球员进行综合打分,最后使用各个因子方差贡献率占3个因子方差贡献率的比重作为权重进行加权汇总,得到各个球员的综合得分F,即:

def F(factors):  
    return sum(factors*fa.get_factor_variance()[1])

之后就可以在矩阵中依次进行计算:



scores = []  
for i in range(len(fa.transform(data))):  
    new = F(fa.transform(data)[i])  
    scores.append(new)  
  
print(scores)

得到分值数组:

[0.7294004536510521, -0.2958329655707666, 0.530110265958429, -0.9636777540387146]

然后我们就可以为原矩阵添加一列数据:

data['综合打分'] = scores
print(data)

得到新矩阵:

进球  进球转化率  助攻      综合打分  
苏亚雷斯  16     19   8  0.729400  
莫拉塔   12     14   2 -0.295833  
哲科    16     13   7  0.530110  
伊瓜因    8     10   4 -0.963678

同时可以指定按照新字段列进行排序,方便数据展示:

data = data.sort_values(by='综合打分',ascending=False)

得到排序后的矩阵:

进球  进球转化率  助攻      综合打分  
苏亚雷斯  16     19   8  0.729400  
哲科    16     13   7  0.530110  
莫拉塔   12     14   2 -0.295833  
伊瓜因    8     10   4 -0.963678

如果愿意,我们也可以对矩阵进行可视化操作,这里以水平柱状图为例子:

import matplotlib.pyplot as plt  
import matplotlib  
  
matplotlib.rcParams['font.sans-serif'] = ['SimHei']  
matplotlib.rcParams['axes.unicode_minus'] = False  
  
  
plt.barh(range(4), scores, height=0.7, color='steelblue', alpha=0.8)    
plt.yticks(range(4), ['苏亚雷斯','莫拉塔','哲科','伊瓜因'])  
plt.xlim(-1,2)  
plt.xlabel("分数")  
plt.title("引援打分")  
for x, y in enumerate(scores):  
    plt.text(y + 0.2, x - 0.1, '%s' % y)  
plt.show()

根据综合评分,苏亚雷斯无疑是最佳人选,退而求其次是哲科,第三选择是莫拉塔,无论如何,他们三位的综合能力都要比队内的伊瓜因都要强,从这个角度来看,就算选择莫拉塔,也是比让伊瓜因留队更好的选择。

结语:必须指出的一点是,球员特征所形成的数据结果,绝对不能成为做决策的主要依据,只能作为参考而存在,过度依赖数据往往可能适得其反,比如曾被誉为足坛“数据战术大师”的贝尼特斯,其根据数据排首发阵型的操作曾经聒噪一时,可现在呢?只能混迹于中超联赛。截止到本文发布的2020年9月24日凌晨,尤文图斯俱乐部通过租借的形式引进莫拉塔,而苏亚雷斯600万英镑转会马德里竞技,哲科留队。尤文图斯选择了因子分析模型分数不高的莫拉塔,莫拉塔能否帮助C罗圆梦?新赛季欧冠谁执牛耳?让我们拭目以待。

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
16天前
|
机器学习/深度学习 数据采集 TensorFlow
使用Python实现智能食品消费模式分析的深度学习模型
使用Python实现智能食品消费模式分析的深度学习模型
109 70
|
18天前
|
机器学习/深度学习 数据采集 TensorFlow
使用Python实现智能食品消费习惯分析的深度学习模型
使用Python实现智能食品消费习惯分析的深度学习模型
121 68
|
14天前
|
机器学习/深度学习 数据采集 数据挖掘
使用Python实现智能食品消费市场分析的深度学习模型
使用Python实现智能食品消费市场分析的深度学习模型
91 36
|
8天前
|
数据可视化 算法 数据挖掘
Python量化投资实践:基于蒙特卡洛模拟的投资组合风险建模与分析
蒙特卡洛模拟是一种利用重复随机抽样解决确定性问题的计算方法,广泛应用于金融领域的不确定性建模和风险评估。本文介绍如何使用Python和EODHD API获取历史交易数据,通过模拟生成未来价格路径,分析投资风险与收益,包括VaR和CVaR计算,以辅助投资者制定合理决策。
49 15
|
12天前
|
机器学习/深度学习 数据采集 数据挖掘
使用Python实现智能食品消费趋势分析的深度学习模型
使用Python实现智能食品消费趋势分析的深度学习模型
67 18
|
1天前
|
分布式计算 大数据 数据处理
技术评测:MaxCompute MaxFrame——阿里云自研分布式计算框架的Python编程接口
随着大数据和人工智能技术的发展,数据处理的需求日益增长。阿里云推出的MaxCompute MaxFrame(简称“MaxFrame”)是一个专为Python开发者设计的分布式计算框架,它不仅支持Python编程接口,还能直接利用MaxCompute的云原生大数据计算资源和服务。本文将通过一系列最佳实践测评,探讨MaxFrame在分布式Pandas处理以及大语言模型数据处理场景中的表现,并分析其在实际工作中的应用潜力。
14 2
|
6天前
|
SQL 分布式计算 DataWorks
DataWorks产品测评|基于DataWorks和MaxCompute产品组合实现用户画像分析
本文介绍了如何使用DataWorks和MaxCompute产品组合实现用户画像分析。首先,通过阿里云官网开通DataWorks服务并创建资源组,接着创建MaxCompute项目和数据源。随后,利用DataWorks的数据集成和数据开发模块,将业务数据同步至MaxCompute,并通过ODPS SQL完成用户画像的数据加工,最终将结果写入`ads_user_info_1d`表。文章详细记录了每一步的操作过程,包括任务开发、运行、运维操作和资源释放,帮助读者顺利完成用户画像分析。此外,还指出了文档中的一些不一致之处,并提供了相应的解决方法。
|
4天前
|
分布式计算 DataWorks 搜索推荐
用户画像分析(MaxCompute简化版)
通过本教程,您可以了解如何使用DataWorks和MaxCompute产品组合进行数仓开发与分析,并通过案例体验DataWorks数据集成、数据开发和运维中心模块的相关能力。
37 4
|
20天前
|
机器学习/深度学习 数据采集 供应链
使用Python实现深度学习模型:智能食品市场分析
使用Python实现深度学习模型:智能食品市场分析
32 0
|
16天前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
下一篇
DataWorks