世界杯举办地_世界杯预选赛巴西 - emsxbc.com

王者荣耀英雄分析之统计分析,聚类分析

王者荣耀英雄分析之统计分析,聚类分析

在了解了如何绘制饼图和雷达图之后,我们就可以正式的对王者荣耀数据进行分析了。 首先来看看这个数据集吧 包含的内容还是挺多的,有69个英雄,还有他们的一些属性。因为我不会玩王者荣耀,所以对这些信息也不是很了解,接下来有可能分析的不到位,还请大家多多包涵。 我还是选择的使用python来分析,因为简单嘛,然后平台的话还是选择aistudio真的很好用,强烈推荐,一些使用方法可以查看我之前写的博客。 链接:https://blog.csdn.net/weixin_46570668/article/details/115438389.

关联性分析

首先当然是关联性分析,先配置好字体,导入我们需要的包

import pandas as pd

import numpy as np

from matplotlib import pyplot

from matplotlib import font_manager

font = font_manager.FontProperties(fname='font/simhei.ttf')

plt.rcParams['axes.unicode_minus']=False # 用来正常显示负号

# 用热力图呈现 features_mean 字段之间的相关性

corr = data[features].corr()

plt.figure(figsize=(14,14))

# annot=True 显示每个方格的数据

sns.heatmap(corr, annot=True)

plt.xticks(range(0, 18),fontproperties=font)

plt.yticks(range(0, 18),fontproperties=font)

plt.show()

统计分析

首先我们来统计一下主要定位

dd=data1[u'主要定位'].value_counts()

# 生成画布

plt.figure(figsize=(10, 6), dpi=80)

labels =list(dd.index)

sizes = list(dd)

explode = [0.05,0.05,0.05,0.05,0.05,0.05]

plt.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%', shadow=False, startangle=-45, textprops={'fontproperties':font})

plt.title("主要定位统计分析", fontproperties=font)

plt.legend(loc='right', bbox_to_anchor=[0.75, 0.4, 0.5, 0.5], prop=font)

plt.show()

接着我们来统计一下攻击范围

dd=data1[u'攻击范围'].value_counts()

# 生成画布

plt.figure(figsize=(10, 6), dpi=80)

labels =list(dd.index)

sizes = list(dd)

explode = [0.05,0.05]

plt.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%', shadow=False, startangle=-45, textprops={'fontproperties':font})

plt.title("攻击范围统计分析", fontproperties=font)

plt.legend(loc='right', bbox_to_anchor=[0.75, 0.4, 0.5, 0.5], prop=font)

plt.show()

以此类推,大家想统计什么只需要修改一下这句话的参数就可以了 dd=data1[u’攻击范围’].value_counts()

接下来我们查看一下前三的最大生命

ddg=data1[['英雄','最大生命','最大法力','最高物攻','最大物防','最大每5秒回血','最大每5秒回蓝','最大攻速','主要定位']].sort_values(by='最大生命',ascending=False)

ddg[:3]

分别把他们画在雷达图上面

s=[2016,427,514,128,50]

x1 = data1[['英雄','最大法力','最高物攻','最大物防','最大每5秒回血','最大每5秒回蓝']].loc[data1['英雄'] == '廉颇']

x2 = data1[['英雄','最大法力','最高物攻','最大物防','最大每5秒回血','最大每5秒回蓝']].loc[data1['英雄'] == '白起']

x3 = data1[['英雄','最大法力','最高物攻','最大物防','最大每5秒回血','最大每5秒回蓝']].loc[data1['英雄'] == '程咬金']

y1=x1.values.tolist()[0]

y2=x2.values.tolist()[0]

y3=x3.values.tolist()[0]

z1=y1[1:6]

z2=y2[1:6]

z3=y3[1:6]

for i in range(5):

z1[i]=z1[i]/s[i]

for i in range(5):

z2[i]=z2[i]/s[i]

for i in range(5):

z3[i]=z3[i]/s[i]

import numpy as np

import matplotlib.pyplot as plt

#用于正常显示符号

plt.rcParams['axes.unicode_minus'] = False

# 使用ggplot的绘图风格,这个类似于美化了,可以通过plt.style.available查看可选值,你会发现其它的风格真的丑。。。

plt.style.use('ggplot')

# 构造数据

values = z1

feature = ['最大法力', '最高物攻', '最大物防', '最大每五秒回血', '最大每五秒回蓝']

# 设置每个数据点的显示位置,在雷达图上用角度表示

angles=np.linspace(0, 2*np.pi,len(values), endpoint=False)

# 拼接数据首尾,使图形中线条封闭

values=np.concatenate((values,[values[0]]))

angles=np.concatenate((angles,[angles[0]]))

values_2=z2

values_2=np.concatenate([values_2,[values_2[0]]])

values_3 = z3

values_3=np.concatenate([values_3,[values_3[0]]])

fig=plt.figure()

ax = fig.add_subplot(111, polar=True)

ax.plot(angles, values, 'o-', linewidth=2,label='廉颇')

ax.plot(angles, values_2, 'o-', linewidth=2,label='白起')

ax.plot(angles, values_3, 'o-', linewidth=2,label='程咬金')

ax.set_thetagrids(angles * 180/np.pi, feature,fontproperties=font)

ax.set_ylim(0,1)

plt.title('前三最大生命',fontproperties=font)

plt.legend(loc=(1,0.8), prop=font)

ax.grid(True)

plt.show()

依次类推我们来看一下前三最大法力

ddg=data1[['英雄','最大生命','最大法力','最高物攻','最大物防','最大每5秒回血','最大每5秒回蓝','最大攻速','主要定位']].sort_values(by='最大法力',ascending=False)

ddg[:3]

s=[2016,427,514,128,50]

x1 = data1[['英雄','最大法力','最高物攻','最大物防','最大每5秒回血','最大每5秒回蓝']].loc[data1['英雄'] == '妲己']

x2 = data1[['英雄','最大法力','最高物攻','最大物防','最大每5秒回血','最大每5秒回蓝']].loc[data1['英雄'] == '扁鹊']

x3 = data1[['英雄','最大法力','最高物攻','最大物防','最大每5秒回血','最大每5秒回蓝']].loc[data1['英雄'] == '姜子牙']

y1=x1.values.tolist()[0]

y2=x2.values.tolist()[0]

y3=x3.values.tolist()[0]

z1=y1[1:6]

z2=y2[1:6]

z3=y3[1:6]

for i in range(5):

z1[i]=z1[i]/s[i]

for i in range(5):

z2[i]=z2[i]/s[i]

for i in range(5):

z3[i]=z3[i]/s[i]

import numpy as np

import matplotlib.pyplot as plt

#用于正常显示符号

plt.rcParams['axes.unicode_minus'] = False

# 使用ggplot的绘图风格,这个类似于美化了,可以通过plt.style.available查看可选值,你会发现其它的风格真的丑。。。

plt.style.use('ggplot')

# 构造数据

values = z1

feature = ['最大法力', '最高物攻', '最大物防', '最大每五秒回血', '最大每五秒回蓝']

# 设置每个数据点的显示位置,在雷达图上用角度表示

angles=np.linspace(0, 2*np.pi,len(values), endpoint=False)

# 拼接数据首尾,使图形中线条封闭

values=np.concatenate((values,[values[0]]))

angles=np.concatenate((angles,[angles[0]]))

values_2=z2

values_2=np.concatenate([values_2,[values_2[0]]])

values_3 = z3

values_3=np.concatenate([values_3,[values_3[0]]])

fig=plt.figure()

ax = fig.add_subplot(111, polar=True)

ax.plot(angles, values, 'o-', linewidth=2,label='妲己')

ax.plot(angles, values_2, 'o-', linewidth=2,label='扁鹊')

ax.plot(angles, values_3, 'o-', linewidth=2,label='姜子牙')

ax.set_thetagrids(angles * 180/np.pi, feature,fontproperties=font)

ax.set_ylim(0,1)

plt.title('前三最大法力',fontproperties=font)

plt.legend(loc=(1,0.8), prop=font)

ax.grid(True)

plt.show()

依次类推,大家可以查看任意属性的前三 接下来我们来看看法师都是什么样子的

s=[2016,427,514,128,50]

x = data1[['英雄','主要定位','最大法力','最高物攻','最大物防','最大每5秒回血','最大每5秒回蓝']].loc[data1['主要定位'] == '法师']

y=x.values.tolist()

z=[[]]*len(y)

for i in range(len(y)):

z[i]=y[i][2:7]

for i in range(len(y)):

for j in range(5):

z[i][j]=z[i][j]/s[j]

import numpy as np

import matplotlib.pyplot as plt

#用于正常显示符号

plt.rcParams['axes.unicode_minus'] = False

# 使用ggplot的绘图风格,这个类似于美化了,可以通过plt.style.available查看可选值,你会发现其它的风格真的丑。。。

plt.style.use('ggplot')

feature = ['最大法力', '最高物攻', '最大物防', '最大每五秒回血', '最大每五秒回蓝']

# 设置每个数据点的显示位置,在雷达图上用角度表示

angles=np.linspace(0, 2*np.pi,len(feature), endpoint=False)

fig=plt.figure()

ax = fig.add_subplot(111, polar=True)

angles=np.concatenate((angles,[angles[0]]))

for i in range(len(y)):

values = z[i]

values=np.concatenate((values,[values[0]]))

ax.plot(angles, values, 'o-', linewidth=2,label=y[i][0])

ax.set_thetagrids(angles * 180/np.pi, feature,fontproperties=font)

ax.set_ylim(0,1)

plt.title('法师',fontproperties=font)

plt.legend(loc=(1.5,0), prop=font)

ax.grid(True)

plt.show()

想要查看那个定位的英雄只要修改一下参数即可,修改一下这句话中的‘主要定位’后面的参数

x = data1[['英雄','主要定位','最大法力','最高物攻','最大物防','最大每5秒回血','最大每5秒回蓝']].loc[data1['主要定位'] == '法师']

那我们再来看一下战士

s=[2016,427,514,128,50]

x = data1[['英雄','主要定位','最大法力','最高物攻','最大物防','最大每5秒回血','最大每5秒回蓝']].loc[data1['主要定位'] == '战士']

y=x.values.tolist()

z=[[]]*len(y)

for i in range(len(y)):

z[i]=y[i][2:7]

for i in range(len(y)):

for j in range(5):

z[i][j]=z[i][j]/s[j]

import numpy as np

import matplotlib.pyplot as plt

#用于正常显示符号

plt.rcParams['axes.unicode_minus'] = False

plt.style.use('ggplot')

feature = ['最大法力', '最高物攻', '最大物防', '最大每五秒回血', '最大每五秒回蓝']

# 设置每个数据点的显示位置,在雷达图上用角度表示

angles=np.linspace(0, 2*np.pi,len(feature), endpoint=False)

fig=plt.figure()

ax = fig.add_subplot(111, polar=True)

angles=np.concatenate((angles,[angles[0]]))

for i in range(len(y)):

values = z[i]

values=np.concatenate((values,[values[0]]))

ax.plot(angles, values, 'o-', linewidth=2,label=y[i][0])

ax.set_thetagrids(angles * 180/np.pi, feature,fontproperties=font)

ax.set_ylim(0,1)

plt.title('战士',fontproperties=font)

plt.legend(loc=(1.5,0), prop=font)

ax.grid(True)

plt.show()

基本上就是这样啦,大家相分析哪方面的内容都可以修改一下参数,如果大家有一些我没想到的分析内容,请一定要评论告诉我哦。 完整项目和运行结果已经上传资源: https://download.csdn.net/download/weixin_46570668/16455298.