王者荣耀英雄分析之统计分析,聚类分析
在了解了如何绘制饼图和雷达图之后,我们就可以正式的对王者荣耀数据进行分析了。
首先来看看这个数据集吧
包含的内容还是挺多的,有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.