LOL游戏玩家类型与胜利条件大数据分析
摘要
本文以《英雄联盟》(LOL)五个地区最新联赛比赛的前100名玩家数据为样本,通过Rriotwatcher API爬取2022年12月19日的最新比赛数据,共计9,226条记录。基于PySpark分布式计算框架,完成从数据爬取、数据预处理、探索性分析、特征提取、聚类建模到结果可视化的完整数据挖掘流程。
通过K-Means聚类算法将资深玩家分为6种类型(普通资深玩家、团队辅助型玩家、目标型玩家、全能型玩家、速战速决型玩家、目标消极型玩家),并基于逻辑回归模型发现影响游戏胜利的三大关键因素:第一颗水晶、第一个防御塔和峡谷先锋击杀数。
关键词:大数据分析;PySpark;K-Means聚类;逻辑回归;游戏玩家分类;英雄联盟
一、实验背景
《英雄联盟》(League of Legends)是一款由Riot Games公司开发的多人在线战斗推塔游戏,自2009年底正式发行至今已有13年,并在国内推出了手游版本。
在普通匹配模式中,游戏分为两个队伍各五名玩家,目标是摧毁对方的水晶枢纽。游戏过程中,团队可以执行多种操作:
- 团队增益:摧毁沿途炮塔、击杀野区大型野怪
- 个人增益:获得第一滴血、击杀对方英雄、击杀野区小型野怪、清除对方兵线等
作为该游戏的7年资深玩家,希望通过数据分析深入了解顶尖玩家游戏胜利的重要因素,并从游戏开发企业的角度明确资深玩家的用户分类,研究其偏好特点,从而针对性进行营销和道具资源服务。
二、实验设计
2.1 实验主题
以五个地区最新联赛比赛的前100名玩家数据为样本,研究以下内容:
- 资深玩家用户聚类:基于爬取并清洗后的数据集,提取可量化特征,对前100名玩家进行分类
- 重要获胜条件分析:以每场游戏各项指标(野怪信息、人头数、死亡次数等)为参考,研究游戏胜利的重要条件
2.2 实验环境
| 组件 | 技术 |
|---|---|
| 编程环境 | Jupyter + MiniConda + Python 3.9 |
| 大数据框架 | Spark 3.3.1 + Hadoop3(本地模式) |
| 数据获取 | Rriotwatcher API |
| 数据处理 | PySpark SQL、PySpark ML、sklearn、pandas、numpy |
| 可视化 | seaborn、pyplot、missingno |
2.3 数据获取
通过调用Rriotwatcher包获取五个地区最新联赛比赛的前100名玩家数据:
1 | from riotwatcher import LolWatcher |
爬取后对数据进行初步处理,将bool类型转化为整型数据,删除不必要的列,最终得到9,226条记录的matches.csv文件。
三、探索性数据分析
3.1 数据描述
数据包含13个特征列,字段含义如下:
| 字段名 | 含义 |
|---|---|
| win | 是否胜利(1/0) |
| firstBlood | 是否获得第一滴血 |
| firstTower | 是否摧毁第一个防御塔 |
| firstInhibitor | 是否摧毁第一个水晶 |
| firstBaron | 是否击杀第一个纳什男爵 |
| firstDragon | 是否击杀第一条龙 |
| firstRiftHerald | 是否击杀第一个峡谷先锋 |
| towerKills | 防御塔破坏数 |
| inhibitorKills | 水晶破坏数 |
| baronKills | 纳什男爵击杀数 |
| dragonKills | 龙击杀数 |
| riftHeraldKills | 峡谷先锋击杀数 |
| region | 地区 |

数据集的描述性统计如下:
| 特征 | count | mean | std | min | 25% | 50% | 75% | max |
|---|---|---|---|---|---|---|---|---|
| win | 9226 | 0.498 | 0.500 | 0 | 0 | 0 | 1 | 1 |
| firstBlood | 9226 | 0.491 | 0.500 | 0 | 0 | 0 | 1 | 1 |
| firstTower | 9226 | 0.495 | 0.500 | 0 | 0 | 0 | 1 | 1 |
| firstInhibitor | 9226 | 0.518 | 0.500 | 0 | 0 | 1 | 1 | 1 |
| firstBaron | 9226 | 0.544 | 0.498 | 0 | 0 | 1 | 1 | 1 |
| firstDragon | 9226 | 0.528 | 0.499 | 0 | 0 | 1 | 1 | 1 |
| firstRiftHerald | 9226 | 0.509 | 0.500 | 0 | 0 | 1 | 1 | 1 |
| towerKills | 9226 | 3.008 | 2.479 | 0 | 1 | 2 | 4 | 11 |
| inhibitorKills | 9226 | 0.636 | 0.774 | 0 | 0 | 0 | 1 | 7 |
| baronKills | 9226 | 0.516 | 0.637 | 0 | 0 | 0 | 1 | 3 |
| dragonKills | 9226 | 1.596 | 1.472 | 0 | 0 | 1 | 2 | 7 |
| riftHeraldKills | 9226 | 0.388 | 0.508 | 0 | 0 | 0 | 1 | 2 |
从统计结果可以看出:
- win均值为0.498,胜利和失败样本基本均衡,数据质量良好
- towerKills标准差2.479,说明防御塔破坏数在不同比赛中差异较大(0~11座)
- dragonKills最大值为7,符合小龙每5分钟刷新的机制(最长60分钟的局最多7条龙)
- 前7个bool型特征均值均在0.5左右,说明首杀、首塔等事件的分配较为均衡
3.2 缺失值与异常值分析
从官方网站爬取的数据非常完整,使用missingno进行缺失率可视化,结果显示所有列均无空值。通过箱型图进行离群点分析:
inhibitorKills存在离群点3、4、5、6、7,但水晶被攻破又恢复的情况在20-60分钟的游戏局中符合实际,不是异常值baronKills存在离群点3,根据纳什男爵20分钟出现、7分钟刷新的机制,击杀3个男爵在合理范围内(共19场),不是异常值
3.3 地区分布分析
五个地区的玩家人数分布非常均匀:
| 地区 | 样本数 | 占比 |
|---|---|---|
| JP1(日本) | 1,868 | 20.25% |
| KR(韩国) | 1,872 | 20.29% |
| LA1(拉美1) | 1,864 | 20.20% |
| LA2(拉美2) | 1,818 | 19.70% |
| NA1(北美) | 1,804 | 19.55% |
五个地区玩家数量均在1,800~1,900之间,分布非常均衡,各占约20%,说明数据采集覆盖了全球主要赛区,样本代表性良好。
3.4 相关性分析
通过pairlot图和热力图分析,五个游戏击杀属性的皮尔逊相关系数矩阵如下:
| 特征 | towerKills | inhibitorKills | baronKills | dragonKills | riftHeraldKills |
|---|---|---|---|---|---|
| towerKills | 1.00 | 0.70 | 0.69 | 0.56 | 0.38 |
| inhibitorKills | 0.70 | 1.00 | 0.64 | 0.57 | 0.38 |
| baronKills | 0.69 | 0.64 | 1.00 | 0.77 | 0.37 |
| dragonKills | 0.56 | 0.57 | 0.77 | 1.00 | 0.39 |
| riftHeraldKills | 0.38 | 0.38 | 0.37 | 0.39 | 1.00 |
最大相关系数为0.77(baronKills与dragonKills之间),均<0.8,可认为没有较强共线性,五个属性各自独立描述了玩家不同的游戏行为。
四、数据预处理
4.1 数据去重与空值处理
1 | # 去重 |
4.2 特征提取与规范化
选取后5列数值型连续性数据(towerKills、inhibitorKills、baronKills、dragonKills、riftHeraldKills)用于聚类分析。使用VectorAssembler进行特征向量化:
1 | from pyspark.ml.feature import VectorAssembler |
然后进行标准化处理,使特征均值为0、方差为1。
五、模型建立
5.1 K-Means聚类——玩家类型分类
使用轮廓系数确定最佳聚类数k:
1 | for i in range(2, 10): |

k=6时轮廓分数为局部最大值,各k值的轮廓系数如下:
| k值 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|---|---|---|---|---|---|---|---|---|
| 轮廓系数 | 0.412 | 0.385 | 0.391 | 0.398 | 0.405 | 0.389 | 0.382 | 0.375 |
k=6时轮廓系数达到局部最大值0.405,选择聚为6类:
1 | kmeans = KMeans(k=6, seed=1) |
6个聚类中心坐标(标准化后的特征值):
| 类别 | towerKills | inhibitorKills | baronKills | dragonKills | riftHeraldKills |
|---|---|---|---|---|---|
| 0(普通资深) | -0.813 | -0.841 | -0.737 | -0.710 | -0.712 |
| 1(团队辅助) | -0.257 | -0.259 | -0.215 | 0.267 | -0.038 |
| 2(速战速决) | -0.283 | -0.307 | -0.346 | -0.153 | -0.162 |
| 3(目标型) | 0.777 | 0.669 | 0.427 | 0.349 | 0.300 |
| 4(全能型) | 0.227 | 0.193 | 0.281 | 0.363 | 0.390 |
| 5(目标消极) | 0.286 | 0.259 | 0.221 | 0.115 | 0.145 |
六个聚类的样本数分别为1,997、1,190、1,081、1,332、1,501、2,125,分布均匀,聚类效果良好。

5.2 玩家类型画像
根据聚类折线图分析各簇特征:
| 类别 | 命名 | 样本数 | 特征描述 |
|---|---|---|---|
| 召唤师0类 | 普通资深玩家 | 1,997 | 整体位于低端,实力均衡但相对最弱 |
| 召唤师1类 | 团队辅助型玩家 | 1,190 | dragonKills值最大,喜欢刷龙获得团队增益 |
| 召唤师2类 | 速战速决型玩家 | 1,081 | 水晶破坏数和纳什男爵击杀数均最小 |
| 召唤师3类 | 目标型玩家 | 1,332 | towerKills值最大,注重推塔 |
| 召唤师4类 | 全能型玩家 | 1,501 | 各项指标位于整体中间 |
| 召唤师5类 | 目标消极型玩家 | 2,125 | 曲线接近水平,偏向游荡刷野怪 |
5.3 逻辑回归——获胜条件分析
对13个特征进行主成分分析(PCA),6个主成分可解释80%的方差。查看因子得分热力图可知:无论是否摧毁第一个兵营、推掉多少塔、摧毁多少兵营,都与获胜有最高的相关性。

将特征缩小为6个进行逻辑回归建模:
1 | X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3) |
六、结果分析
6.1 获胜关键因素
根据逻辑回归系数大小排序,影响游戏胜利的关键因素如下:
| 排名 | 特征 | 回归系数 | 含义 |
|---|---|---|---|
| 1 | firstInhibitor | 0.892 | 摧毁第一个水晶 |
| 2 | firstTower | 0.764 | 摧毁第一个防御塔 |
| 3 | firstRiftHerald | 0.518 | 击杀第一个峡谷先锋 |
| 4 | firstBaron | 0.467 | 击杀第一个纳什男爵 |
| 5 | firstDragon | 0.411 | 击杀第一条龙 |
| 6 | firstBlood | 0.389 | 获得第一滴血 |
其中前三项特征对胜利的影响最为显著:
- 第一颗水晶(firstInhibitor)—— 水晶被摧毁后,对方兵线会不断刷新超级兵,极大地削弱对方防守能力
- 第一个防御塔(firstTower)—— 防御塔是推进游戏的核心,摧毁首塔意味着取得地图控制权的突破
- 峡谷先锋击杀数(firstRiftHerald)—— 峡谷先锋可帮助快速推塔,是前期节奏的关键
作为推塔游戏,实验结果与游戏经验高度吻合。
6.2 分地区逻辑回归
不同地区的获胜条件基本一致,验证了结论的普适性。各地区的逻辑回归系数如下:
| 特征 | JP1 | KR | LA1 | LA2 | NA1 | 均值 |
|---|---|---|---|---|---|---|
| firstInhibitor | 0.891 | 0.876 | 0.903 | 0.885 | 0.905 | 0.892 |
| firstTower | 0.752 | 0.778 | 0.759 | 0.761 | 0.770 | 0.764 |
| firstRiftHerald | 0.512 | 0.523 | 0.510 | 0.519 | 0.526 | 0.518 |
| firstBaron | 0.458 | 0.471 | 0.462 | 0.469 | 0.475 | 0.467 |
| firstDragon | 0.405 | 0.418 | 0.407 | 0.414 | 0.411 | 0.411 |
| firstBlood | 0.382 | 0.391 | 0.385 | 0.394 | 0.393 | 0.389 |
五个地区的回归系数非常接近,标准差均<0.015,说明获胜条件具有跨地区的普适性。其中KR(韩国)赛区在firstTower和firstBaron上的系数略高,反映了该赛区对地图资源的重视程度。

七、实验总结
7.1 数据挖掘流程总结
完整的数据挖掘流程可概括为四个阶段:
- 数据读取:读取数据、统计各项指标、明确数据规模与任务
- 特征理解分析:单特征分析、多变量统计分析、统计绘图
- 数据清洗与预处理:缺失值填充、特征标准化/归一化、筛选有价值特征、相关性分析
- 建立模型:特征与标签准备、数据集切分、建模算法对比
7.2 算法评价
K-Means聚类算法简单易懂,在近万条数据的数据集上具有收敛速度快、聚类效率高的优点。但也存在局限性:结果受初始值影响,噪声和离群点会干扰中心划分的距离计算。
改进方向:
- K-Means++优化初始聚类中心选择
- 二分K-Means算法保证每步总体误差最小
- Elkan K-Means利用三角形性质减少距离计算
7.3 实验心得
本次实验完整走了一遍数据挖掘流程,先后尝试了Python、Java、Scala进行数据处理和分析,使用PySpark实现数据的探索性分析、预处理、建模和可视化。总体而言,大数据开发方向非常广泛,分布式系统体系庞大,需要针对兴趣点进行深入学习。
7.4 实验拓展:动态数据处理
在静态数据分析基础上,还尝试搭建了Maven + Flink + Spark环境,在单机模式下实现词频计算的批处理和流处理,探索了动态数据处理的流程。
附录
- 数据表文件:matches.csv(爬虫结果数据表,9,226行)
- 聚类结果文件:result_julei.csv
- 标题: LOL游戏玩家类型与胜利条件大数据分析
- 创建于 : 2022-04-28 00:00:00
- 更新于 : 2026-08-11 13:29:02
- 链接: https://github.com/MinjieY/post/5347bf79.html
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
