美文网首页Python爬虫系列Python学习资料整理
把英雄分类,看 Python 带你上王者

把英雄分类,看 Python 带你上王者

作者: 我爱学python | 来源:发表于2019-07-27 15:25 被阅读4次

    王者荣耀这么久了,还没上王者?哈哈哈,看过来,是不是对英雄理解的不够透彻呢,是不是还没有很好的为英雄分类呢,今天就来看看英雄分类

    技术栈

    一、EM 聚类简介

    二、爬取网上的英雄初始属性值

    三、做成饼图

    EM 聚类简介

    EM 英文名是 Expectation Maximization,也叫最大期望算法。

    在统计计算中,最大期望(EM)算法是在概率(probabilistic)模型中寻找参数最大似然估计或者最大后验估计的算法,其中概率模型依赖于无法观测的隐藏变量(Latent Variable)。

    最大期望算法经过两个步骤交替进行计算,第一步是计算期望(E),利用对隐藏变量的现有估计值,计算其最大似然估计值;第二步是最大化(M),最大化在 E 步上求得的最大似然值来计算参数的值。M 步上找到的参数估计值被用于下一个 E 步计算中,这个过程不断交替进行。

    进行英雄聚类

    使用 sklearn 库中的的 EM 聚类算法框架,采用高斯混合模型

    一些主要参数意义如下,其他参数可以查看相关文档

    n_components:混合高斯模型个数,也就是想要的聚类个数,默认为1

    covariance_type:协方差类型,包括{‘full’,‘tied’, ‘diag’, ‘spherical’}四种,分别对应完全协方差矩阵(元素都不为零),相同的完全协方差矩阵(HMM会用到),对角协方差矩阵(非对角为零,对角不为零),球面协方差矩阵(非对角为零,对角完全相同,球面特性),默认‘full’ 完全协方差矩阵

    max_iter:最大迭代次数,默认100

    所以可以构造 GMM 聚类如下:

    有一份如下结构的数据:

    可以看到,涉及到的属性非常多,初始的属性设置如下:

    属性降维

    可以先通过热力图来判断下哪些属性是强相关的,只保留唯一属性

    可以看到,其中”1级最大法力“,”15级最大法力“,”最大法力成长“,是强相关的,由此可以做出属性筛选,最终保留的属性如下:

    数据规范化

    将攻击范围字段(”近/远程?“)转换为 0 和 1

    data_new['近/远程?'] = data_new['近/远程?'].map({'远程': 1,'近程': 0})复制代码

    EM 聚类计算

    采用高斯混合模式,并把生成的类别写入 csv 文件中

    饼图输出

    为了更加直观的查看各个英雄的分组情况,这里使用饼图来做可视化 首先取出数据的”分组“和”名称“两个字段,并对”分组“字段进行分组处理

    然后取出分组中的数值,并用 pyecharts 来画饼图

    抓取英雄初始属性

    要想获得更加全的英雄数据,还是需要到网上抓取,这样才能够保证英雄的数量是最新的。这里我使用的是db.18183.com/网站的数据,页面如下:


    获取英雄页面 URL

    使用 BeautifulSoup 来定位到 class 为 mod-iconlist 的 ul 元素,里面保存的就是各个英雄的页面

    抓取详细信息

    循环抓取到的 URL 列表,抓取每个英雄的详细信息

    保存到 csv 文件

    open 一个文件,把对应的列表字段存入

    数据清理

    因为这个网站可能做的不是很用心,有些属性会存在两个百分号和为空的情况,如图:

    所以需要处理下。

    对于两个百分号,直接使用 notepad++ 把所有的 %% 的替换为单 % 即可

    对于为空的字段,使用如下代码处理,填为 0

    完成

    对于数据规范化,GMM 聚类和饼图呈现,都和前面类似,不再赘述,下面来看看饼图效果

    虽然通过这两张饼图,没有办法一下子提高你手残的毛病,但是明确了英雄的分类,不是离王者更近了一步吗

    相关文章

      网友评论

        本文标题:把英雄分类,看 Python 带你上王者

        本文链接:https://www.haomeiwen.com/subject/nfrerctx.html