原标题:用Python编写代码分析《英雄联盟》游戏胜利的最重要因素

点击上图查看 Python Web 开发入门实战【教学大纲+教学进度表】

介绍

在过去的几年里,电子竞技社区发展迅速,曾经只是休闲娱乐的电子竞技产业,到2022年有望创造18亿美元的收入。虽然在这个生态系统中有很多电子游戏,但很少有游戏像《英雄联盟》那样成为社区的主要元素,该游戏在2019年世界锦标赛期间吸引了超过1亿的独立观众。

《英雄联盟》于2009年底发行,是一款免费的多人在线战斗竞技场(MOBA)视频游戏,由Riot Games公司开发,这款游戏在早期就产生了广泛的竞争场景,2011年的第一届世界冠军创造了约160万观众。随着Riot开始了解如何改变才能使游戏更具竞争性和趣味性,这款游戏在受欢迎程度和可玩性方面都有所提高。

在《英雄联盟》的比赛中,两队各有五名玩家,每一队都控制着一个独特的角色或“冠军”,当其中一队位于其基地深处的Nexus被摧毁时,比赛就会结束。在这个过程中,一个团队可以实现很多目标,比如摧毁炮塔,杀死中立的怪物,比如龙和男爵,以获得整个团队的增益,等等。有些目标,如摧毁至少五个炮塔和一个兵营,是赢得游戏所必需的,而其他目标,如获得第一滴血,是有益的,但不是必须的。通过这个项目,我想更好的了解这些目标中哪一个是赢得英雄联盟游戏最重要的。就此而言,我提出的问题如下:

英雄联盟最重要的获胜条件是什么?

收集数据

我首先申请了一个使用Riot Developer Portal的应用程序,在我的应用程序被接受后,我浏览了api列表,以了解我可以请求的数据类型。不幸的是,没有一种直接的方法可以从一个区域中取出最后X个排名的匹配项,所以我必须找到一种方法来解决这个问题。

我的解决方案是使用召唤者名称列表(用户名)来为每个玩家生成最近的比赛列表。通过Python包Riot-Watcher的调用,获取了差不多10000行的数据与五个地区最新联赛比赛的前100名玩家的数据。乍一看,DataFrame看起来是这样的:

在前7列中,0表示“False”,1表示“True”,而在后面的列中,单元格中编码的数据表示事件发生的次数。每行都包含了一场排位比赛中的一支队伍的统计数据。例如,在第一排,没有获得任何目标的团队首先输掉了整个比赛。

探索性数据分析热图和主成分分析

首先,我发现91%的获胜团队摧毁了第一个兵营,80%杀死了第一个男爵,70%摧毁了第一个塔,63%杀死了第一条龙,59%的获胜团队以第一滴血开始游戏。现在看来,最重要的获胜条件是摧毁第一个兵营,这是有意义的,因为摧毁一条线路的兵营会给他们的基地带来压力,并允许对方拥有更多的地图控制。

接下来,我可视化了数据集中各列之间的相关性:

我还为我的数据中所代表的每个独立地区找到了相同的关联热图,以比较不同地区之间的关联,希望能注意到游戏风格的一些差异。一般来说,相关矩阵看起来非常相似。一个可能的原因是,我的数据包含了每个地区最好的玩家的比赛,其中许多人是职业选手。因此,由于良好的游戏实践在竞争性社区中是一致的,所以我的数据中所代表的匹配涉及到那些在每一款游戏中顶级玩家,而这些玩家相对于每个区域中排名较低的玩家来说是相似的。

我现在很想知道数据中的方差是如何用较少的特征来解释的,而不是我用来预测游戏结果的10个特征。在这种程度上,我进行了主成分分析,以了解我可以将数据简化成多少特征,同时保留大部分的方差:

十个预测列中超过80%的方差可以用一半的特征量来解释。这确实很有趣,通过将每个组件与原始数据集的列关联起来,我希望了解在解释数据的差异时哪些特性是最重要的,这可以帮助我弄清楚哪些列对一个团队是否会获胜最关键。

用于生成上述热图的组件来自一个包含六个PCA对象,因为我希望这些组件能够解释数据中超过90%的差异。看来推塔,摧毁兵营,以及一个团队是否摧毁了第一个兵营在确定方差最重要的特征数据,第一个组件解释40%的方差和三个上述列加权最该组件。

重申一下我在这一点上的领悟:

从我的关联热图来看,无论一个团队是否摧毁了第一个兵营,一个团队推掉了多少塔,以及一个团队摧毁了多少兵营都与获胜有最高的相关性。

从我的PCA分析来看,团队是否摧毁了第一个兵营,团队摧毁了多少塔,以及团队摧毁了多少兵营在解释数据中的差异方面发挥了最大的作用。

使用逻辑回归进行数据建模

我使用了Logistic回归模型来理解《英雄联盟》排名比赛的获胜条件。我的过程是首先将我的数据分割成一组特征和一组目标,其中我的特征是除‘win’和‘region’列之外的所有列,我的目标是‘win’列。然后我将我的数据分解为一个列集和一个测试集,通过Logistic回归模型进行运行,并检查分类报告和混淆矩阵,确保有较强的预测能力。当逻辑回归模型在整个数据集上运行时,模型的精度和召回率分别为。86和。85。

从这里开始,我对只包含一个区域的数据子集进行逻辑回归,比如只在NA、BR等中进行的匹配,并在一个Pandas数据模型中记录模型的系数。这个数据图被可视化了,所以我可以比较不同的区域:

回归系数描述预测变量和目标变量之间的关系。例如,当我们看上面的一血预测变量时,第一个拿到一血的队伍是对比赛结果的适度预测,因为第一个拿一血的队伍更有可能获胜。另一方面,峡谷先驱的击杀实际上是在相反的方向上相关的(除了EUNE),并且获得更多峡谷先驱击杀的队伍更有可能输掉。

通过这个分析过程,我了解了哪些专栏更能预测胜利,帮助我回答了关于《英雄联盟》中获胜条件的问题。

结论

通过我的项目,我得出以下结论:

根据我的逻辑回归模型,按照最大到最小的顺序,第一个兵营,第一个塔,塔摧毁是数据集中最重要的获胜条件(这是推塔游戏)。

根据我的关联热图,从最大到最小,塔摧毁,第一个兵营,兵营摧毁数是数据集中最重要的获胜条件(这是推塔游戏)。

虽然获得第一个baron的NA和EUW团队更有可能获胜,但随着杀死的baron数量的增加,这些地区的团队更有可能失败。

与其他地区相比,在NA地区的团队更有可能赢得第一只龙,这一事实或许表明在NA地区的游戏更倾向于龙的爱好者和围绕龙的战斗

滚雪球式的游戏(当一个团队在游戏中扩大一个小优势以赢得胜利)。

KR游戏并没有受到一个特性的不均衡影响。这可能表明KR的队员比其他地区的队员更了解如何在劣势中有细,这促使团队比其他地区的团队更经常地赢得组合目标。

本文源代码:https://github.com/ankushbharadwaj/league-of-legends-win-conditions

译者注:这个模型没有使用 “region”列作为训练参数使用国服数据训练可能是个败笔,毕竟处理祖安的玩家数据可能需要更多的自然语言处理技术提取聊天的特征,这才是祖安人胜利的关键

python游戏代码怎样才能玩好英雄联盟_用Python编写代码分析《英雄联盟》游戏胜利的最重要因素...相关推荐

  1. 开发者实践:做一个双人视频社交小游戏,“甩头”才能玩

    在 RTC 2020 编程挑战赛春季赛中.我们还有一个获奖团队,思路新颖,开发了一款基于双人视频聊天场景的小游戏--"拿头玩".在视频聊天过程中即可开启游戏.通过人脸识别算法识别转 ...

  2. python编写格斗游戏_设计并编写代码自动格斗类游戏

    题目描述: 1)角色类CRole为基类: 构造函数.析构函数: 成员变量:头像.HP(血量).ATK(攻击力).DEF(防御力).Lv(等级),EXP(经验值): 成员函数:武器攻击.跳跃. 2)英雄 ...

  3. python程序写完后点哪个运行快_让 Python 代码运行更快的最佳方式!

    PyPy与CPython PyPy是Python解释器CPython的直接替代品.CPython将Python编译为中间字节码然后由虚拟机解释,而PyPy使用实时(JIT)编译将Python代码转换为 ...

  4. python是一种动态语言、这意味着_【python编程的优点是什么?难怪选择python的人越来越多了】- 环球网校...

    [摘要]Python是一种动态解释的.强类型定义语言:编写它时不需要定义变量类型.python判断值的类型的方法是什么,那么python编程的优点是什么?难怪选择python的人越来越多了,所以你知道 ...

  5. python第一个发行版本由c语言实现_【Python】讲真,你知道Python咋来的吗?

    Python诞生在一个圣诞节 Python诞生于1989年的一个圣诞节,其创作者Guido van Rossum为了打发圣诞节假期的无聊,便开始了Python语言的编写.Python第一个发行版本是在 ...

  6. python提取网页中p标签中的内容_使用Python进行爬虫的初学者指南

    前言 爬虫是一种从网站上抓取大量数据的自动化方法.即使是复制和粘贴你喜欢的网站上的引用或行,也是一种web抓取的形式.大多数网站不允许你保存他们网站上的数据供你使用.因此,唯一的选择是手动复制数据,这 ...

  7. python中的装饰器、装饰器模式_浅析Python装饰器以及装饰器模式

    漫谈 如果作为一个Python入门,不了解Python装饰器也没什么,但是如果作为一个中级Python开发人员,如果再不对python装饰器熟稔于心的话,那么可能并没有量变积累到质变. 我以前也看过很 ...

  8. python中一般使用几个空格表示缩进_为什么Python pep-8强烈建议使用标签上的空格来缩进?...

    为什么Python pep-8强烈建议使用标签上的空格来缩进? 我在Stack Overflow和PEP 8上看到,建议仅在Python程序中使用空格进行缩进. 我能理解一致压痕的必要性,我感到痛苦. ...

  9. python中init方法的两个下划线_为什么Python中有各种各样的“_”下划线?分别有什么用?...

    刚开始学Python的你一定很疑惑,为什么Python里会出现各种各样的下划线 "_",而且位置都不相同,有时候在名称后面,有时候在前面,有时候还会在数字中间......这些下划线 ...

最新文章

  1. 对线性代数的思考和理解
  2. 简明 Python 编程规范v2
  3. 牛客题霸 [ 大数加法]C++题解/答案
  4. Python正则表达式如何进行字符串替换
  5. Android RxJava(一) create操作符的用法和源码分析
  6. android double转string_如何使用Java程序将Double转换为String
  7. vscode不能跳转_vscode-goto-node-modules 一个快速定位 node 模块的 vscode 插件
  8. linux安全与优化
  9. 2.2同步访临界区(Synchronizing Access to Critical Section)
  10. python盖帽法_干货:用Python进行数据清洗,这7种方法你一定要掌握
  11. NNDL 实验三 线性回归
  12. ffmpeg使用指令转码b站上下载的视频
  13. 大批制造企业总部离沪 三四线城市成避风港
  14. 詹姆斯等十位大佬的作息时间表曝光
  15. kubernetes Downward API
  16. 变更控制委员会CCB
  17. 7.8 Introduce Local Extension 引入本地扩展
  18. error C251: illegal octal digit 错误提示
  19. 【学生管理系统】用户管理之用户登录
  20. 多元统计分析及R语言建模(第五版)——第6章 判别分析课后习题

热门文章

  1. 在Chrome浏览器中如何将网页保存为单个文件mhtml?
  2. idea切换主题与背景颜色
  3. 393页13万字智慧旅游大脑建设方案
  4. 一句话评述8个最热的原型工具
  5. POC_百卓网络Smart多业务安全网关
  6. ADVISOR - 1
  7. php电子商务面试题,php面试题附答案
  8. 专科生也有大梦想吗?
  9. 人因梦想而伟大。有梦最美,希望相随
  10. 证明分布越均匀熵越大