发布时间:2025-12-09 15:57:53 浏览次数:4
EDG夺得2021英雄联盟全球总决赛冠军,这场比赛让所有观赛者热血沸腾,也唤起了我这个沉睡多年老玩家对MOBA游戏的兴趣,兴冲冲地下载了英雄联盟,却发现这并不是一个可以轻松上手的游戏。
对于时下最流行的MOBA类游戏——英雄联盟,作为一个新手可以从哪些方面切入,通过数据分析了解游戏机制并快速上手,降低新人过渡期的难度,是该项目的中心主题。
数据源:League of Legends Ranked Matches
数据集包含英雄联盟的18万场对局数据,数据表包括:
champs.csv :包含英雄名称和英雄id
matches.csv : 包含比赛信息
participants : 每场比赛的玩家信息
stats1.csv & stats2.csv : 对战数据
teambans : 队伍ban选数据
teamstats : 队伍总数据
1.导入数据
导入所有数据表
展示champs表:
champs.head()
展示matches表:
展示participants表:
展示stats1& stats2表,由于列数过多,仅能展示部分:
展示teambans表:
展示teamstats表:
2.查找缺失值
计算各表缺失值总和,若缺失值过多再逐列处理
各表缺失值均为0,说明数据集完整
3.合并数据表
stats = stats1.append(stats2)df = pd.merge(participants, stats, how= 'left', on= ['id'])df = pd.merge(df, champs, how= 'left', left_on= 'championid', right_on= 'id')df = pd.merge(df, matches, how= 'left', left_on= 'matchid', right_on= 'id')df.columns#Index(['id_x', 'matchid', 'player', 'championid', 'ss1', 'ss2', 'role',# 'position', 'win', 'item1', 'item2', 'item3', 'item4', 'item5', 'item6',# 'trinket', 'kills', 'deaths', 'assists', 'largestkillingspree',# 'largestmultikill', 'killingsprees', 'longesttimespentliving',# 'doublekills', 'triplekills', 'quadrakills', 'pentakills',# 'legendarykills', 'totdmgdealt', 'magicdmgdealt', 'physicaldmgdealt',# 'truedmgdealt', 'largestcrit', 'totdmgtochamp', 'magicdmgtochamp',# 'physdmgtochamp', 'truedmgtochamp', 'totheal', 'totunitshealed',# 'dmgselfmit', 'dmgtoobj', 'dmgtoturrets', 'visionscore', 'timecc',# 'totdmgtaken', 'magicdmgtaken', 'physdmgtaken', 'truedmgtaken',# 'goldearned', 'goldspent', 'turretkills', 'inhibkills',# 'totminionskilled', 'neutralminionskilled', 'ownjunglekills',# 'enemyjunglekills', 'totcctimedealt', 'champlvl', 'pinksbought',# 'wardsbought', 'wardsplaced', 'wardskilled', 'firstblood', 'name',# 'id_y', 'id', 'gameid', 'platformid', 'queueid', 'seasonid', 'duration',# 'creation', 'version'],# dtype='object')4.添加必要字段
df['teamid']= df['player'].apply(lambda x: '1' if x<5 else '2')#设置团队编号def final_position(row):if row['role'] in ('DUO_SUPPORT','DUO_CARRY'):return row['role']else:return row['position']df['adjposition']= df.apply(final_position, axis= 1)#整理得到玩家位置信息,包括TOP(上单)、MID(中单)、JUNGLE(打野)、DUO_SUPPORT(辅助)、DUO_CARRY(C位)df['team_role']= df['teamid']+ '-'+ df['adjposition']#设置玩家角色1.英雄获胜率、KDA
英雄联盟中的英雄众多,新手往往会不知道该怎么选择英雄练手,因此分析哪些英雄更容易取胜,能得到更高得KDA((K击杀数+A助攻数)/ D死亡数),为新手选择英雄提供参考。
获胜率排名前10的英雄:
获胜率倒数的10名英雄:
最高获胜率为55.87%,最低获胜率为39.65%,差值并不算大,为了突出英雄之间获胜率的差异,以50%为基准值,观察所有英雄的获胜率情况:
以KDA平均值为基准值,观察所有英雄的KDA情况:
可以看到获胜率在50%以上和50%以下的英雄数量分布相对平衡。获胜率排名前10的英雄里超过一半是法师角色。
KDA最高值是3.81,最低值1.68。KDA排名前10的英雄里以战士/坦克、法师为主,而法师排在头部,考虑到法师在队伍中通常担任辅助角色,能拿到更多助攻;战士/坦克的生存能力、输出能力一般情况下都更强,击杀或助攻数值会比较高。
翠神这个英雄的获胜率和KDA都是所有英雄里最高的,该英雄的官方定位是打野、辅助。
2.英雄出场率
英雄的获胜率高并不代表这个英雄是对新手友好的,这类英雄可能对玩家的游戏技巧和熟练度有很高的要求,因此转向英雄出场率的分析,看看在对局中玩家最常使用的是哪些英雄。
可以看到最热门的英雄分别是盲僧、皮城女警、圣枪游侠、魂锁典狱长、九尾妖狐、暗夜猎手、疾风剑豪、发条魔灵、逆羽、探险家,其中只有九尾妖狐在获胜率TOP10里。
出场率最低的10名英雄中,水晶先锋斯卡纳位列获胜率TOP10,可以看出斯卡纳不是绝大多数玩家的选择,但如果能驾驭好这个英雄,可以给团队带来巨大优势。
3.英雄出场次数与获胜率
基于英雄的出场次数和获胜率制作散点图。
可以很明显地看出盲僧的虽然非常热门但是获胜率并不高,翠神则相反地获胜率最高但并不是热门英雄。
新手玩家可以选择获胜率优秀的热门英雄进行练手,比如阿狸、迦娜、亚索等,这类英雄比较好上手,能够提升新手玩家的体验感。
4.取胜相关因素分析
分析获胜与击杀数(kills)、死亡数(deaths)、助攻数(assists)、推塔数(turretkills)、总治疗数(totheal)、补刀数(totminionskilled)、花费金币总数(goldspent)、总承伤(totdmgtaken)、推水晶数(inhibkills)、插眼数(wardsplaced)、游戏时长(duration)等因素间存在怎样的相关性。
可以看到,推塔数和推水晶数是制胜关键因素,毕竟这款游戏是以摧毁对方水晶枢纽为目标的推塔游戏;助攻数和击杀数也极大关系着对局的输赢;另外花费金币总数也是重要指标,经济越好,团队的战斗力就会更高,在对剧中更具优势。
未完待续……