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

把英雄分类,看 Python 带你上王者 王者荣耀这么久了,还没上王者?哈哈哈,看过来,是不是对英雄理解的不够透彻呢,是不是还没有很好的为英雄分类呢,今天就来看看英雄分类 技术栈 一、EM 聚类简介 二、爬取网上的英雄初始属性值 三、做成饼图 EM 聚类简介 EM 英文名是 Expectation Maximization,也叫最大期望算法。 在统计计算中,最大期望(EM)算法是在概率(probabilistic)模型中寻找... 阅读详情

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

技术栈

一、EM 聚类简介

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

三、做成饼图

EM 聚类简介

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

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

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

进行英雄聚类

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

from sklearn.mixture import GaussianMixture

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

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

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

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

所以可以构造 GMM 聚类如下: Python学习交流群:1004391443

# 构造 GMM 聚类
gmm = GaussianMixture(n_components=20, covariance_type='full')

有一份如下结构的数据:

 

 

 

 

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

feature = ['1级物理攻击', '15级物理攻击', '每级成长',
           '1级生命', '15级生命', '生命成长值', '1级物理防御',
           '15级物理防御', '每级物理防御成长', '攻速成长',
           '1级每5秒回血', '15级每5秒回血', '1级最大法力',
           '15级最大法力', '最大法力成长', '1级每五秒回蓝',
           '15级每5秒回蓝', '近/远程?', '移速', '定位', '个人建议分路']

属性降维

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

import seaborn as sns
import matplotlib.pyplot as plt
corr = data[feature].corr()
plt.figure(figsize=(14, 14))
sns.heatmap(corr, annot=True)
plt.show()

 

 

 

 

 

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

features_remain = ['15级生命', '15级物理攻击',
                   '15级物理防御', '15级最大法力',
                   '15级每5秒回血', '15级每5秒回蓝', '移速',
                   '攻速成长', '近/远程?']

数据规范化

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

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

EM 聚类计算

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

# 构造 GMM 聚类
 gmm = GaussianMixture(n_components=20, covariance_type='full')
 gmm.fit(data_new)
 
 # 训练数据
 prediction = gmm.predict(data_new)
 # print(prediction)
 
 hero_data.insert(0, '分组', prediction)
 hero_data.to_csv('hero_out.csv', index=False, sep=',', encoding='gb18030')

饼图输出

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

df = hero_data[['分组', '名称']]
grouped = df.groupby(['分组'])

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

from pyecharts import Pie
 
 k = []
 for name, group in grouped:
     k.append({name: list(group['名称'].values)})
 
 kk = []
 for i in k:
     for k, v in i.items():
        kk.append(v)
length = []
key = []
for i in kk:
    key.append(str(i))
    length.append(len(i))
pie = Pie('英雄完全属性分类图', title_pos='center')
pie.add("", key, length,
        is_label_show=True, legend_pos="bottom", legend_orient="vertical",)
pie.render()

 

 

 

 

 

抓取英雄初始属性

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

 

 

 

 

 

 

 

 

获取英雄页面 URL

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

url = 'http://db.18183.com/'
    url_list = []
    res = requests.get(url + 'wzry').text
    content = BeautifulSoup(res, "html.parser")
    ul = content.find('ul', attrs={'class': "mod-iconlist"})
    hero_url = ul.find_all('a')
    for i in hero_url:
        url_list.append(i['href'])

抓取详细信息

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

base_url = 'http://db.18183.com/'
     detail_list = []
     for i in url:
         # print(i)
         res = requests.get(base_url + i).text
         content = BeautifulSoup(res, "html.parser")
         name_box = content.find('div', attrs={'class': 'name-box'})
         name = name_box.h1.text
         hero_attr = content.find('div', attrs={'class': 'attr-list'})
        attr_star = hero_attr.find_all('span')
        survivability = attr_star[0]['class'][1].split('-')[1]
        attack_damage = attr_star[1]['class'][1].split('-')[1]
        skill_effect = attr_star[2]['class'][1].split('-')[1]
        getting_started = attr_star[3]['class'][1].split('-')[1]
        details = content.find('div', attrs={'class': 'otherinfo-datapanel'})
        # print(details)
        attrs = details.find_all('p')
        attr_list = []
        for attr in attrs:
            attr_list.append(attr.text.split(':')[1].strip())
        detail_list.append([name, survivability, attack_damage,
                            skill_effect, getting_started, attr_list])

保存到 csv 文件

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

with open('all_hero_init_attr.csv', 'w', encoding='gb18030') as f:
         f.write('英雄名字,生存能力,攻击伤害,技能效果,上手难度,最大生命,最大法力,物理攻击,'
                 '法术攻击,物理防御,物理减伤率,法术防御,法术减伤率,移速,物理护甲穿透,法术护甲穿透,攻速加成,暴击几率,'
                 '暴击效果,物理吸血,法术吸血,冷却缩减,攻击范围,韧性,生命回复,法力回复\n')
         for i in details:
             try:
                 rowcsv = '{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{}'.format(
                     i[0], i[1], i[2], i[3], i[4], i[5][0], i[5][1], i[5][2], i[5][3], i[5][4], i[5][5],
                     i[5][6], i[5][7], i[5][8], i[5][9], i[5][10], i[5][11], i[5][12], i[5][13], i[5][14], i[5][15],
                    i[5][16], i[5][17], i[5][18], i[5][19], i[5][20]
                )
                f.write(rowcsv)
                f.write('\n')
            except:
                continue

数据清理

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

 

 

 

 

所以需要处理下。

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

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

# 把空值设置为0
data_init = data_init.fillna(0)

完成

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

 

 

 

 

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

用Python更方便了解王者荣耀英雄属性对比 导入库 import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from sklearn.mixture import GaussianMixture from sklearn.preprocessing import StandardScaler from pyecharts.charts import Pie from pyecharts import options as opts from collectio 阅读详情

相关推荐

实战九:输出“王者荣耀”的游戏角色

“王者荣耀”游戏中有许多英雄,这些英雄分为法师、战士、坦克、刺客、射手和辅助。请您应用Python中的列表存储不同类别的英雄,然后全部输出这些英雄名在屏幕上。

python基础--综合练习(之王者荣耀小游戏)

废话不说,直接撸代码。

m0_66171127的博客 1677

Ubuntu 22.04远程桌面终极指南:从零配置RDP到解决黑屏问题

本文提供了一份Ubuntu 22.04远程桌面配置的终极指南,详细讲解了如何从零开始安装和配置RDP服务,并重点解决了连接后常见的黑屏问题。通过分析会话冲突、修复启动脚本及配置权限策略,帮助用户实现稳定、高效的远程桌面连接,优化分辨率、禁用锁屏,打造无缝的远程工作体验。

sony5的博客 1381

python王者战斗_把英雄分类,看 Python 带你上王者

王者荣耀这么久了,还没上王者?哈哈哈,看过来,是不是对英雄理解的不够透彻呢,是不是还没有很好的为英雄分类呢,今天就来看看英雄分类技术栈一、EM 聚类简介二、爬取网上的英雄初始属性值三、做成饼图EM 聚类简介EM 英文名是 Expectation Maximization,也叫最大期望算法。在统计计算中,最大期望(EM)算法是在概率(probabilistic)模型中寻找参数最大似然估计或者最大后验...

weixin_39682673的博客 371

spdk + fio测试nvme 设备的性能

fio的测试对象可以是块设备、文件等,在spdk的使用过程中会unbind默认的nvme driver,所以在系统中是看不到nvme块设备的,在spdk中可以通过fio_plugin的方式,将spdk的用户态driver部分的io功能打包成一个ioengine提供给fio使用,可以综合spdk的高性能和fio提供的复杂场景。更多DPDK相关学习资料有需要的可以自行报名学习,免费订阅,永久学习,或点击这里加。这个jobfile是spdk中提供的例子。领取,关注我持续更新哦!2.7 jobfile的例子。

lingshengxiyou的博客 1088

从零配置到批量处理:FaceFusion 3.1完整使用指南(含hififace_256模型测试)

本文详细介绍了FaceFusion 3.1的完整使用指南,包括环境配置、模型选择(特别是hififace_256模型的深度测试)以及批量处理技巧。通过AI驱动的脸部替换技术,帮助用户高效实现高质量的面部处理,适用于影视制作、广告设计等多种场景。

weixin_29056865的博客 655

教你用Python代码免费获取王者荣耀全英雄皮肤

本篇推文共计3000个字,阅读时间约3分钟。王者荣耀大家都玩过吧,没玩过的也应该听说过,作为当下最火的手机游戏,我们今天的重点是爬取王者荣耀所有英雄的所有皮肤,而且仅仅使用20行Pyth...

看那个码农的博客 4633

数据结构课程设计C/C++版--美团餐馆预定信息的管理与分析 5 6

第5关:注销个人信息。

m0_62222486的博客 2120

requests 分类多级页面_把英雄分类,看 Python 带你上王者

微信公众号:萝卜大杂烩关注可了解更多的原创内容。问题或建议,请公众号留言或加本人微信;如果你觉得文章对你有帮助,欢迎加微信交流王者荣耀这么久了,还没上王者?哈哈哈,看过来,是不是对英雄理解的不够透彻呢,是不是还没有很好的为英雄分类呢,今天就来看看英雄分类技术栈一、EM 聚类简介二、爬取网上的英雄初始属性值三、做成饼图EM 聚类简介EM 英文名是 Expectation Maximizat...

weixin_35289035的博客 125

最详细的 SAP ABAP Web Service 创建和消费步骤讲解

本文原版发表于 SAP 官方社区,当时用的英文版写作,标题为:Step by step to create, consume and trace web service in ABAP system https://blogs.sap.com/2014/05/20/step-by-step-to-create-consume-and-trace-web-service-in-abap-system/ 总共阅读量超过 18 万。 How to create web service provider in A

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3150

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】5.2 数据分组与透视(CUBE/ROLLUP/GROUPING SETS)

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】5.2 数据分组与透视(CUBE/ROLLUP/GROUPING SETS)

kngines 1834

em算法怎么对应原有分类_把英雄分类,看 Python 带你上王者

王者荣耀这么久了,还没上王者?哈哈哈,看过来,是不是对英雄理解的不够透彻呢,是不是还没有很好的为英雄分类呢,今天就来看看英雄分类技术栈一、EM 聚类简介二、爬取网上的英雄初始属性值三、做成饼图EM 聚类简介EM 英文名是 Expectation Maximization,也叫最大期望算法。在统计计算中,最大期望(EM)算法是在概率(probabilistic)模型中寻找参数最大似然估计或者最大后验...

weixin_34982726的博客 247

13、控制依赖与切片的新基础及递归While程序的摘要

本文探讨了控制依赖和程序切片的新研究进展,并提出了一种用于递归While程序的广义过程摘要概念和验证框架。文章介绍了控制依赖的新定义及其优势,程序切片的相关工作,以及递归While程序的过程摘要在完全正确性和终止性证明中的应用。通过阶乘和插入排序程序的示例分析,展示了过程摘要的有效性。未来的研究将聚焦于并发程序的依赖计算、依赖关系的语义连接以及时间属性的保留。

kotlin6android的博客 85

手把手教你使用Python网络爬虫获取王者荣耀英雄皮肤

点击上方“Python爬虫与数据挖掘”,进行关注回复“书籍”即可获赠Python从入门到进阶共10本电子书今日鸡汤欢度国庆,共度中秋。/1 前言/王者荣耀,想必大家都玩过或听过,...

pdcfighting的博客 3723

华为OD机试双机位C卷-虚拟文件系统(C/C++/Py/Java/Js/Go)

华为OD机试(机考)双机位C卷 【虚拟文件系统】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【虚拟文件系统】。

qq_45776114的博客 476

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

利用python获取王者荣耀英雄的相关信息

游戏,是用来放松身心的,也有很多人对游戏研究很深,今天我们就用python获取农药上的英雄的部分信息吧 # @author: 、Edgar # @date: 3/8 # @version: 1.0.0 import urllib import urllib.error import urllib.request from bs4 import BeautifulSoup, Comment i...

、Edgar的博客 1288

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

利用Python完成对王者荣耀英雄全皮肤的下载

本文使用python的第三方模块requests爬取王者荣耀所有英雄的图片,并将图片按每个英雄为一个目录存入文件夹中,方便用作桌面壁纸。 基本环境配置 版本:Python3 系统:Windows 相关模块:requests 安装模块: pip install requests 完整代码 ''' 在学习过程中有什么不懂得可以加我的 python学习交流扣扣qun,93410...

Python新手学习之家 679

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

python英雄联盟脚本是什么_用python写王者荣耀脚本!

00. 前言今天这篇文章我想很多人都有想过,比如说脚本自动走位,对于王者荣耀和英雄联盟都是怪物级别的存在。但是还是觉得有些不够熟练,自己试过几次才成功。01. 目录文件分类前言有时候,想要对一个目录里的文件进行搜索或者分类操作往往是一件痛苦的事情,下面这个程序的目的是将目录下的文件树以某种分类规则进行排列。用法usage: classify.py [-h] [-t {ext,mtime,back}...

weixin_39580682的博客 1803

python玩王者荣耀皮肤_利用Python完成对王者荣耀英雄全皮肤的下载

本文使用python的第三方模块requests爬取王者荣耀所有英雄的图片,并将图片按每个英雄为一个目录存入文件夹中,方便用作桌面壁纸。基本环境配置版本:Python3系统:Windows相关模块:requests安装模块:pip install requests完整代码# -*- coding: utf-8 -*-"""Created on Wed Dec 13 13:49:52 2017@au...

weixin_39594895的博客 235

python面向对象实例王者荣耀_Python设计王者荣耀人物结构(63)*

今天我们作为游戏程序员,设计王者荣耀人物结构。王者荣耀,玩家可以选择很多英雄,每种英雄有很多属性,请用我们学过的list和字典,将这些内容表达出来,并用循环遍历你创造的英雄,并打印出他们的属性出来。首先看王者荣耀的人物分类。王者荣耀人物共分为6类:坦克英雄、战士英雄、刺客英雄、法师英雄、射手英雄、辅助英雄而每一类英雄里面又有很多个角色。坦克:庄周、项羽、程咬金、关羽、廉颇等。战士:曹操、达摩、典韦...

weixin_39672296的博客 1244

20行Python代码爬取王者荣耀全英雄皮肤

引言 王者荣耀大家都玩过吧,没玩过的也应该听说过,作为时下最火的手机MOBA游戏,咳咳,好像跑题了。我们今天的重点是爬取王者荣耀所有英雄的所有皮肤,而且仅仅使用20行Python代码即可完成。 准备工作 爬取皮肤本身并不难,难点在于分析,我们首先得得到皮肤图片的url地址,话不多说,我们马上来到王者荣耀的官网: 我们点击英雄资料,然后随意地选择一位英雄,接着F12打开调试台,找到英...

Python学习Q群696455390 216

python面向对象实例王者荣耀_用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例...

本文使用python的第三方模块requests爬取王者荣耀所有英雄的图片,并将图片按每个英雄为一个目录存入文件夹中,方便用作桌面壁纸下面时具体的代码,已通过python3.6测试,可以成功运行:对于所要爬取的网页连接可以通过王者荣耀官网找到,# -*- coding: utf-8 -*-"""Created on Wed Dec 13 13:49:52 2017@author:KillerTwo...

weixin_39830233的博客 235

Python分析王者峡谷中英雄信息

    自从王者荣耀手游推出以来陆陆续续出来了很多新的玩法、新的场地、新的英雄等等,对于王者峡谷内英雄的分析是一件很有意思的事情,今天难得闲下来一晚上的时间,索性来简单对这一款优秀的手游进行分析。    首先我们先从王者荣耀官网获取到所有的英雄信息如下:[{ "ename": 105, "cname": "廉颇", "title": "正义爆轰", "new_type": 0,

Together_CZ的博客 3万+

python玩王者荣耀皮肤碎片怎么获得_教你用Python代码免费获取王者荣耀全英雄皮肤...

本篇推文共计3000个字,阅读时间约3分钟。王者荣耀大家都玩过吧,没玩过的也应该听说过,作为当下最火的手机游戏,我们今天的重点是爬取王者荣耀所有英雄的所有皮肤,而且仅仅使用20行Python代码即可完成。No.1准备工作爬取皮肤本身并不难,难点在于分析,我们首先要得到皮肤图片的url地址,我们先来到王者荣耀的官网: 图片来源:王者荣耀官网点击游戏资料—>英雄资料,随机选取一个英雄,例如“嫦...

weixin_39623713的博客 512

Python—爬取王者荣耀官网全英雄图片,包括图片命名英雄名字

在王者荣耀这个热门游戏中,英雄形象各具特色,深受玩家喜爱。为了方便对这些英雄图片进行整理和研究,本文将详细介绍如何爬取王者荣耀官网的全英雄图片,并按照英雄名字进行命名。通过浏览器开发者工具,观察王者荣耀官网中英雄图片的加载方式和存储路径。注意:需在该py文件下创建一个名为head的文件用来存储图片。

weixin_Z-fovik-Y-2912 1045
上一篇: Python之利用opecv图像识别 (模板匹配) !
下一篇: 微博对大A股的预测能力到底怎样?(附Python代码)
普通网友
博客等级 码龄7年 438粉丝 263原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值