一、数据集介绍
二、数据探索
1.数据相关性
2.查看各个种族的属性总值分布
3.种族属性雷达图
三、总体可视化展示
四、龙系宝可梦数据可视化展示
附录
1、龙系宝可梦属性图
2、龙系宝可梦图鉴
3、其它系传奇宝可梦图鉴
这是一款经典游戏的数据分析,改编出了很多动画、电影,在全世界都很有名,也是很多人的童年回忆,通过数据集进一步的了解宝可梦的特征,分析的思路也可以天马行空,是一次不错的数据分析锻炼。
本数据涵盖了从第一代到第七代共801只宝可梦小精灵的信息。数据特征上包含了基础的能力值,对于其他属性的克制能力,身高,体重,种类等等。
身高、体重、第二属性存在部分缺失,但不影响后续的分析
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
df = pd.read_csv('/pokemon0820.csv')
correlation_matrix=df.corr()
plt.figure(figsize=(12,10))
sns.heatmap(correlation_matrix,vmax=0.9,linewidths=0.05,cmap="RdGy")
传奇宝贝与孵化阶段相关性很高,感兴趣的朋友可以对传奇宝贝建模预测,最后在特征输出时会发现孵化阶段这个特征对模型的贡献是最高的。
构建属性总值并查看属性统计信息
df['attribute']=df['attack']+df['defense']+df['sp_attack']+df['sp_defense']+df['speed']+df['hp']
re_row=df['type1'].drop_duplicates()
col2 = ['attack','defense','sp_attack','sp_defense','speed','hp','attribute']
df[col2].describe().T #查看统计信息
# 画图
re_row=list(re_row)
plt.figure(figsize=(30,25))
j=1
for col1 in re_row:
row_data=df[df['type1']==col1]
ax=plt.subplot(5,4,j)
ax=sns.distplot(row_data['attribute'],color='green',hist=True)
ax.set_xlabel(col1,fontsize=20,color='red')
ax.set_ylabel('Frequency')
ax.tick_params(labelsize=15) # 调整坐标轴字体大小
j+=1
plt.show()
查看数据的分布可以帮助了解数据的形态,从而决定数据的特征表述方式,如果数据呈现正态分布,则均值是一个比较好的表述特征,如果呈现偏态分布,则中位数可能是更好的选择,本数据及的属性均值与中位数差距相近,后续分析可以采用均值表述。
构建需要绘图的数据
from sklearn.preprocessing import MinMaxScaler
col = ['attack','defense','sp_attack','sp_defense','speed','hp']
data_scaled=df[col]
data_scaled=pd.concat([data_scaled,df['type1'],df['is_legendary']],axis=1,join='outer') # 外连接
# 分组统计
data_scaled1=data_scaled.groupby('type1').mean()
data_scaled1=data_scaled1.drop(['is_legendary'],axis=1)
# 构建传奇龙系属性
data_scaled2=data_scaled.groupby(['is_legendary','type1']).mean().reset_index()
dat=data_scaled2[(data_scaled2['is_legendary']==1)&(data_scaled2['type1']=='dragon')] # 取出传奇的龙系
dat=dat.drop(['is_legendary'],axis=1)
dat=dat.rename({20:'dragon_legend'}) # 重命名行索引
# 构建其它传奇属性
dat1=data_scaled.groupby(['is_legendary']).mean().reset_index()
dat1=dat1[dat1['is_legendary']==1]
dat1=dat1.drop(['is_legendary'],axis=1)
dat1=dat1.rename({1:'is_legendary'})
# 数据合并
data_scaled1=pd.concat([data_scaled1,dat,dat1],axis=0,join='outer')
data_scaled1=data_scaled1.drop(['type1'],axis=1)
ind = list(data_scaled1.index) # 获取行索引
# 标准化
model_scaler = MinMaxScaler()
data_scaled1 = model_scaler.fit_transform(data_scaled1) # 标准化处理
data_scaled1= pd.DataFrame(data_scaled1,index=ind,columns=col)
data_scaled1 # 数据如下
属性雷达图绘制
center_num = list(data_scaled1.index) # 获取行索引
labels = list(data_scaled1) # 获取列索引
df1=data_scaled1.iloc[:,0:].values
# 雷达图
fig = plt.figure(figsize=(28,30))
k=1
for i in range(len(data_scaled1)):
ax = fig.add_subplot(5,4,k,polar=True) # 增加子网格,注意polar参数
data_tmp = np.array(df1[i])
angles = np.linspace(0, 2 * np.pi, len(labels), endpoint=False) # 计算各个区间的角度
angles = np.concatenate((angles, [angles[0]])) # 建立相同首尾字段以便于闭合
radar_labels = np.concatenate((labels, [labels[0]])) # 新版的matplotlib,标签要建立相同首尾字段以便于闭合
data = np.concatenate((data_tmp, [data_tmp[0]])) # 建立相同首尾字段以便于闭合
ax.plot(angles, data, 'o-', c='cyan', label=i) # 画线
ax.fill(angles, data,color='cyan',alpha=0.25) # 填充背景
ax.set_thetagrids(angles * 180 / np.pi, radar_labels, fontproperties="SimHei",fontsize=16) # 设置极坐标轴
ax.set_title(center_num[i], fontproperties="SimHei",fontsize=20,color='red') # 设置标题放置
ax.set_rlim(-0.5, 1.1) # 设置坐标轴尺度范围
k+=1
plt.show()
从属性图上可以看出龙系各个属性值都不低,传奇龙系更是碾压各个系。
水系宝可梦数量最多,飞行系最少。大部分宝可梦性别不确定,不过宝可梦游戏中性别不同对能力没有影响,可能会出现性别导致的形态差异。第1、3、5代的宝可梦总数量占比超50%。
龙系的平均属性总值最高,超过了500, 虫系最低,低于400,与上面雷达图展示一致。虫系历来就是被玩家认为是最弱的属性,大多抗性也不好,很多属性对虫系都有抵抗效果,好用的虫系宝可梦,数量也相对较少。但虫系的宝可梦培育的难度比较小,可以很快的进化到最终形态,能够在游戏的前期就能发挥不小的作用,所以就看玩家自己的选择了。
抗性方面:钢系抗性总值是最好的,除了地面、格斗、火属性伤害值相对较高,其余都比较低。岩石系及冰系抗性是最弱的,岩石系对格斗、草系、地面、钢系、水系抗性较低,冰系对火系、格斗、岩石、钢系抗性较低,龙系处于中间阶段。
尺寸方面:钢系、地面、龙系属于大型宝可梦,这几个系的大型宝可梦较多,同时龙系并不会因为体型较大而影响速度。
捕获率方面:龙系捕获率最低,传奇系远低于普通系,直到第七代,传奇系捕获率才有一个明显上升。毕竟龙系及传奇系本身就很强大,越强大的宝可梦就越稀少,捕获难度自然就高。
活跃指数方面:龙系及恶系都比较低,传奇宝可梦活跃指数低于普通宝可梦。
能力方面:所有种族平均能力都在2-3个,飞行系的平均能力最多,有3个,龙系相对偏少,只有2.22。
本次数据龙系一共27只,以主属性龙系为准,传奇龙系的宝可梦分别是:Latias、Latios、Rayquaza、Reshiram、Zekrom、Kyurem、Zygarde。下面就龙系宝可梦作一下简单展示。
龙系宝可梦主要分布在第3、5代,占比超50%,没有第2代。传奇龙系一共7只,占比25.93%,大部分还是没有性别设定。大部分龙系都具备2到3个特性能力,传奇龙系大部分只有一个特性能力。
龙系属性总值普遍都较高,传奇龙系都在600以上。
从攻、防、特攻、特防、速度、血量可以看出,传奇龙系相比普通龙系都高出一筹,其中Rayquaza偏攻击,它的攻、特攻都很高,速度也快,身体也很长。Zygarde偏物防,特防一般,但血量很厚。
抗性上,龙系还是被冰系、龙系、妖精系克制,从种族抗性图就可以看出,fairy的against_dragon没有显示出来,结合原始数据再看,都是0,是免疫龙属性伤害的。第六世代开始妖精系的出现对于龙属性宝可梦是一个不小的打击,它出现很重要的一部分就是对于龙系的削弱,毕竟还是有游戏平衡性的考虑。
龙系宝可梦抗性最强的是Reshiram,它的属性是dragon+fire,所以冰系对它的伤害就没有增幅,但对龙系、地面、岩石抗性相对较弱。
捕捉率及活跃指数都相对偏低,传奇龙系更低。
总体上来说:龙系宝可梦是很强大的,它的属性值在目前的宝可梦世界里面,是位列第一的,妖精系出现之前,只有冰系和龙系两个弱点,对水、火、草、电这四个属性都是有不错的抗性,龙属性强势的强攻型属性 ,代表龙系的风格大部分都是以攻击性为主,几乎都是输出手。加上龙系的稀有性,进化后强悍的体型,会让很多玩家产生收集培养的欲望。