最近晚上经常跟几个好友一起玩两局LOL,在连跪几局后,不禁想问到底到底哪里是我们团队的短板,到底是谁应该背起连跪的大锅。这里通过数据分析了最近30场比赛中召唤师的各方面表现,过程不必深究,结果仅供娱乐。

数据获取

由于目前无法查询其他召唤师的战绩,只能从英雄联盟首页的社区个人中心通过爬虫获取本人的战绩。在网页上登陆后,在游戏信息中可以看到历史战绩。从该网页入手,首先按下F12进入开发者工具模式,在Network(网络)标签下,查看战局相关的JS脚本。

从这里可以看到每一个“?c=Battle&a=combatGains&areaId=2&gameId=….&r1=combatGains”都对应着一场比赛,其中每个JS只有gameID不同,因此我们可以通过gameID获取任意一场已知gameID比赛的详细数据。

利用Python的Request库,使用URL和headers获取战局的详细信息。

import requests,json
import numpy as np
gameID = ''
url = 'http://lol.sw.game.qq.com/lol/api/?c=Battle&a=combatGains&areaId=2&gameId=' + gameID + '&r1=combatGains'
headers = {'Cookie':'',
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML,              like Gecko) Chrome/80.0.3987.122 Safari/537.36'}
res = requests.get(url,headers = headers)
json = json.loads(res.text[18:])

需要注意的是,必须在url中确定分析的gameID,在headers中确定登录后的Cookie,删除res结果中的前17个字符可以将res解析为一个JSON数据,主要结构如下图所示:

战局中每个玩家的详细数据保存在[msg]-[participants]下,其中每个玩家的详细数据保存在[msg]-[participants]-[*]-[stats]下,从stats中选取的特征数据包括:

kills ['kills'] # 击杀数
LKS ['largestKillingSpree'] # 最大连杀
LMK ['largestMultiKill'] # 最大多杀
LTSL ['longestTimeSpentLiving'] # 最长生存时间
deaths ['deaths'] # 死亡数
DTSD ['totalTimeSpentDead'] # 累计死亡时间
ToDD ['totalDamageDealt'] # 总伤害
MDD ['magicDamageDealt'] # 魔法伤害
PDD ['physicalDamageDealt'] # 物理伤害
TrDD ['trueDamageDealt'] # 真实伤害
ToDT ['totalDamageTaken'] # 承受伤害
MDT ['magicDamageTaken'] # 承受魔法伤害
PDT ['physicalDamageTaken'] # 承受魔法伤害
TrDT ['trueDamageTaken'] # 承受魔法伤害
totalHeal ['totalHeal'] # 治疗
assists ['assists'] # 助攻
VWBIG ['visionWardsBoughtInGame'] # 购买真眼数
wardsPlaced ['wardsPlaced'] # 放置守卫数
wardsKilled ['wardsKilled'] # 击杀守卫数
goldEarned ['goldEarned'] # 获取金币
goldSpent ['goldSpent'] # 花费金币
minionsKilled ['minionsKilled'] #击杀小兵
towerKills ['towerKills'] # 摧毁防御塔
inhibitorKills ['inhibitorKills'] # 摧毁水晶

因此选取了自己最近30场的匹配模式的数据,每局比赛均包括1-4名经常一起游戏的好友。

实验对象

除了获取“五岳0寻仙”战绩中的上述击杀数、最大连杀数等24个特征,实验还选取了另外经常一起游戏的4个好友的同样的24个特征,召唤师名单如下:

0. 五岳0寻仙
1. 光速英雄
2. Fe1ix丶
3. 半瓶子晃荡
4. 澡雪精神

因此实验中包括的特征数量一共为5×24=120个特征数。

实验过程

  1. 每一局比赛为一条实验记录,每条记录包括120个特征,标签为0或1,代表失败或成功。
  2. 若某个实验对象未参加该局比赛,那么在该条记录中的特征数据均为Nan,按照数据的中位数填充,以表示该召唤师的一般水平。
  3. 基于随机森林拟合数据,输出每个特征对比赛结果的重要程度。

实验结果

前十名的影响因素如下所示:

其中0_kills表示0号召唤师的死亡次数,数字表示召唤师的代码,具体对应关系见实验对象;后面为选取的特征,所有的特征及其简称在前文已给出。

数据分析和结论

  1. 由于数据从0号对象(五岳0寻仙)的战绩中提取,故0号对象的数据分布较多,导致前几位的影响因素均属于0号对象的相关特征,按照重要程度分别为死亡次数、累计死亡时间、排眼数量、助攻数、总伤害。结果表明影响占据胜负的关键因素是五岳0寻仙的死亡状况,因此在今后比赛关键要理性游戏,少送人头。另外,由于其主要玩辅助,视野也是至关重要的一环,但是排眼数量也往往与战局优劣势紧密相关,在劣势局下很难掌握视野的主动性。
  2. 排名第6的影响因素是“光速英雄的真实伤害”,马尔扎哈是光速英雄的挚爱,几乎每局必选,经了解,马尔扎哈仅有的真实伤害来自大招,马尔扎哈的大招提供稳定的控制和伤害,可见其释放的效果是影响战局的最关键的因素之一。
  3. 排名第7的影响因素是“半瓶子晃荡的承受魔法伤害”,半瓶子晃荡经常作为打野选手出现在赛场上,经常也是战局的主要肉盾,因此打野的坦度也至关重要。
  4. 排名第8的影响因素是“Fe1ix丶的魔法伤害”,为什么经常玩ADC的魔法伤害对比赛的胜负如此重要?这里我们猜测可能也有可能其魔法伤害与战局呈负相关,希望今后其少玩法师等花里胡哨。
  5. 排名第9的影响因素是“半瓶子晃荡的购买真眼数”,打野的控视野能力往往被人忽视,购买真眼的数量经常也反映了打野的经济情况,进而影响战局的优劣,无论如何,打野对视野的贡献应该进一步增强。
  6. 排名第10的影响因素是“Fe1ix丶的击杀次数”,Fe1ix丶作为比赛中的ADC,高击杀次数既表明了其在战斗中的输出能力,又体现了其获取的经济情况,保障ADC的发育往往能够取得最终的胜利。这也解释了为什么职业比赛中团队经常会将人头让给ADC。

Ref. 爬虫之爬取英雄联盟战绩详细数据

分类: 娱乐

0 条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注