导入库

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 collections import Counter

1. 所有英雄属性

plt.rcParams['font.sans-serif'] = ['SimHei']  # 正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 正常显示负号
pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)
data = pd.read_csv('/home/mw/input/hero3741/all_hero_init_attr.csv', encoding='gb18030')
feature = ['英雄名字', '生存能力', '攻击伤害', '技能效果','上手难度', '最大生命', '最大法力', '物理攻击','法术攻击', '物理防御', '物理减伤率', '法术防御','法术减伤率', '移速', '物理护甲穿透', '法术护甲穿透','攻速加成', '暴击几率', '暴击效果', '物理吸血', '法术吸血','冷却缩减', '攻击范围', '韧性', '生命回复', '法力回复']
data_init = data[feature]
data_init.head()

# 把空值设置为0
data_init = data_init.fillna(0)
# print(data_init.isnull().sum())
'''
正则匹配包含%%的数据
p = r'(%%)'
a = data_init['物理减伤率'].astype("object").str.extract(p)
print(a)
'''features_remain = ['生存能力', '攻击伤害', '技能效果','上手难度', '最大生命', '最大法力', '物理攻击','法术攻击', '物理防御', '物理减伤率', '移速', '攻击范围', '生命回复', '法力回复']data_init = data_init[features_remain]data_init['物理减伤率'] = data_init['物理减伤率'].apply(lambda x: float(x.strip('%'))/100)data_init['攻击范围'] = data_init['攻击范围'].map({'远程': 1, '近程': 0})# print(data_init)ss = StandardScaler()
data_init = ss.fit_transform(data_init)gmm = GaussianMixture(n_components=20, covariance_type='full')
gmm.fit(data_init)prediction = gmm.predict(data_init)
# print(prediction)
data.insert(0, '分组', prediction)
data.to_csv('/home/mw/input/hero3741/all_hero_init_attr_our.csv', index=False, sep=',', encoding='gb18030')df = data[['分组', '英雄名字']]  # 获取需要的两列grouped = df.groupby(['分组'])  # 以”分组“列来进行分组
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))
key, length

pie = Pie()
pie.add("", [list(z) for z in zip(key, length)],radius=["30%", "75%"], center=["45%", "50%"], rosetype="radius",)
pie.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}, {d}%"))
pie.set_global_opts(title_opts=opts.TitleOpts(title="英雄初始属性分类图"),legend_opts=opts.LegendOpts(type_="scroll", pos_left="80%", orient="vertical"),)
pie.render_notebook()

2. 根据英雄属性进行聚类分析

plt.rcParams['font.sans-serif'] = ['SimHei']  # 正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 正常显示负号
pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)
data = pd.read_csv('/home/mw/input/hero3741/all_hero_init_attr.csv', encoding='gb18030')
data.head()

feature = ['英雄名字', '生存能力', '攻击伤害', '技能效果','上手难度', '最大生命', '最大法力', '物理攻击','法术攻击', '物理防御', '物理减伤率', '法术防御','法术减伤率', '移速', '物理护甲穿透', '法术护甲穿透','攻速加成', '暴击几率', '暴击效果', '物理吸血', '法术吸血','冷却缩减', '攻击范围', '韧性', '生命回复', '法力回复']
data_init = data[feature]
data_init = data_init.fillna(0)
corr = data_init[feature].corr()
plt.figure(figsize=(14, 14))
sns.heatmap(corr, annot=True)
plt.show()

features_remain = ['生存能力', '攻击伤害', '技能效果','上手难度', '最大生命', '最大法力', '物理攻击','法术攻击', '物理防御', '物理减伤率', '移速', '攻击范围', '生命回复', '法力回复']
data_init = data_init[features_remain]
data_init.head()

data_init['物理减伤率'] = data_init['物理减伤率'].apply(lambda x: float(x.strip('%'))/100)data_init['攻击范围'] = data_init['攻击范围'].map({'远程': 1, '近程': 0})
data_init.head()

ss = StandardScaler()
data_init = ss.fit_transform(data_init)
gmm = GaussianMixture(n_components=20, covariance_type='full')
gmm.fit(data_init)
GaussianMixture(covariance_type='full', init_params='kmeans', max_iter=100,means_init=None, n_components=20, n_init=1,precisions_init=None, random_state=None, reg_covar=1e-06,tol=0.001, verbose=0, verbose_interval=10, warm_start=False,weights_init=None)
data.insert(0, '分组', prediction)
data.to_csv('/home/mw/input/hero3741/all_hero_init_attr_our.csv', index=False, sep=',', encoding='gb18030')

pie = Pie()
pie.add("", [list(z) for z in zip(key, length)],radius=["30%", "75%"],center=["40%", "50%"],rosetype="radius")
pie.set_global_opts(title_opts=opts.TitleOpts(title="英雄聚类分布"),legend_opts=opts.LegendOpts(type_="scroll", pos_left="80%", orient="vertical"),)
pie.render_notebook()

用Python更方便了解王者荣耀英雄属性对比相关推荐

  1. Python爬虫爬取王者荣耀英雄人物高清图片

    Python爬虫爬取王者荣耀英雄人物高清图片 实现效果: 网页分析 从第一个网页中,获取每个英雄头像点击后进入的新网页地址,即a标签的 href 属性值: 划线部分的网址是需要拼接的 在每个英雄的具体 ...

  2. Python批量爬取王者荣耀英雄高清壁纸

    Python批量爬取王者荣耀英雄高清壁纸 文章目录 Python批量爬取王者荣耀英雄高清壁纸 前言 爬虫步骤 python代码实现 总结 前言 很多喜欢玩王者的朋友很希望把王者荣耀的英雄图片拿来做壁纸 ...

  3. 初学Python,爬取王者荣耀英雄介绍及皮肤下载

    前言 其实一开始是准备爬王者荣耀官网的,但是研究了很长时间,发现它的官网爬取后的数据说是乱码也不算,但都看不懂,也没查到解决办法,估计是反爬比较强,对于新手来说,有点困难. 所以为了练习,还是选择了难 ...

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

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 欢度国庆,共度中秋. /1 前言/ ...

  5. python爬虫——爬取王者荣耀英雄出装建议(一)

    爬取装备列表 #爬取王者荣耀装备,并写入MySQL数据库import requests import re import pymysqldb=pymysql.connect('localhost',' ...

  6. JavaScript 练手小技巧:我用canvas画出了王者荣耀英雄属性的雷达图

    新年伊始,学习不止. 顺带恭喜下自己博客点击量突破 20w~啦~~ 不容易啊~~ ----------------------------------------------------------- ...

  7. python 山脊图_爬虫:带你一键爬取王者荣耀英雄皮肤壁纸

    一.前言 王者荣耀这款手游,想必大家都玩过或听过,游戏里英雄有各式各样的皮肤,制作得很精美,有些拿来做电脑壁纸它不香吗.本文带你利用Python爬虫一键下载王者荣耀英雄皮肤壁纸. 1. 目标 创建一个 ...

  8. 图片链接用src不能被爬虫爬到吗_爬虫:带你一键爬取王者荣耀英雄皮肤壁纸

    一.前言 王者荣耀这款手游,想必大家都玩过或听过,游戏里英雄有各式各样的皮肤,制作得很精美,有些拿来做电脑壁纸它不香吗.本文带你利用Python爬虫一键下载王者荣耀英雄皮肤壁纸. 1. 目标 创建一个 ...

  9. scrapy框架爬取王者荣耀英雄数据

    scrapy框架爬取王者荣耀英雄属性 爬虫工程 爬虫文件 import scrapy from theKingPro.items import ThekingproItemclass ThekingS ...

最新文章

  1. 1004 Counting Leaves (30分) (vector实现)
  2. 安卓tinyalsa源码,可使用makefile直接编译
  3. 【网址收藏】安装VMware Tools显示灰色正确解决办法
  4. 为什么 IEnumerable 没有提供 ForEach ?
  5. 黑色背景下,描绘照片的轮廓形状并保存
  6. 返回指定月份的周列表 包含 周序号、开始日期、结束日期(不包含周末)
  7. 简述C++程序编写的过程
  8. Android相关sdk使用
  9. python打开word后再关闭再打开出错_用Python写了个程序调用word,运行完后再手动打开word文档就变慢了,这是为啥?...
  10. 编译程序和解释程序有哪些区别?
  11. jquery 中多条件选择器,相对选择器,层次选择器的区别
  12. 投票选择eclipse.org的新界面
  13. HTTP 错误 404.2 – Not Found
  14. OSError: cannot identify image file
  15. MySpace:.Net架构网站的王者
  16. 执行对象cocos2d-x 2.x action动作整理集合
  17. VMware虚拟机安装Linux教程(超详细)
  18. android星星闪效果,css3夜空中闪烁的星星效果
  19. Vulkan学习(一)介绍
  20. APP与小程序—信息收集

热门文章

  1. 领歌敏捷协作——设置微信接收卡片提醒
  2. python历史波动率_历史波动率计算问题?
  3. Java面向对象之接口
  4. DeFi之道访谈:如何参与Web3?哪些细分赛道值得关注?
  5. elasticsearch 大数据场景下使用scroll实现分页查询
  6. 英文输入时的自动补全功能
  7. Linux常用的基本命令
  8. FPGA基础知识----第二章 FPGA 开发流程
  9. c++ [Error] conflicting declaration的错误
  10. 计导 第 10 章 软件工程