用Python来解读神奇宝贝

来自:菜鸟学Python(微信号:cainiao_xueyuan),作者:果然翁



最近电影《大侦探皮卡丘》上映,相信很多人对皮卡丘都不陌生,特别是90后的,那可是儿时的回忆。皮卡丘的角色最初来自于一款游戏,但是大部分人是从动画片熟知的,也就是《神奇宝贝》(又叫《宠物小精灵》,《精灵宝可梦》)。而这次呢,我们就通过宝可梦们的数据,结合Pandas和Seaborn来了解这个神奇的宝可梦世界吧!


01.导入数据集


第一步,自然是先导入我们所需要的库并读取数据集:

运行结果:

数据的字段不算多,对于了解神奇宝贝的同学来说,应该很容易知道每个字段的意思。不过还是贴上每个字段的含义(按顺序):

数据集字段解释:

  • #ID:每个宠物小精灵的ID

  • 名称:每个口袋妖怪的名字

  • 属性1:每个口袋妖怪都有一个属性,这决定了他们的克制与被克制关系

  • 属性2:还有一些口袋妖怪是双重属性的

  • 总计:所有的统计数据的总和,某种程度上决定了精灵的强弱

  • HP:生命值,在被击倒之前宠物小精灵可以承受多少的伤害

  • 攻击:物理攻击的基础数值(例如Scratch,Punch)

  • 防御:抵抗物理攻击的基础数值

  • SP攻击:特殊攻击,特殊攻击的基础数值(例如火焰爆炸,泡沫射线)

  • SP Def:抵抗特殊攻击的基础数值

  • 速度:决定宠物小精灵的进攻顺序

  • 世代: 该精灵在第几世代中出现

  • 神兽: 该精灵是否为神兽



02.数据清洗


第二步,读取完数据后,一般先对数据做一个总体的了解。通过isnull()和describe()可以看到数据基本没有缺失值。type2这个字段有缺失值属于正常情况(因为一些神奇宝贝没有第二个属性),所以缺失值这块不用做任何处理。


通过和describe,可以发现,这份数据集包含了800个神奇宝贝的属性数据,跨越了6个世代,以及各个属性的最大最小值等。


03.各种花式数据分析


了解了数据的基本信息含义后,接下来就可以进行近一步的分析了,首先来看看不同属性的神奇宝贝数量,因为考虑到一些神奇宝贝拥有两个属性,所以这里先把属性1和属性2合并起来,再进行统计:


看下结果:


在神奇宝贝的属性分布中,水系,普通系和飞行系数量排在前三,最少的后三名是冰系,妖精系和幽灵系。《神奇宝贝》分为好几个世代,来比较每个世代第一次出现的神奇宝贝数量都有多少:



在六个世代中,登场神奇宝贝最多的是第一代和第五代(超过160种),最少的是第六代。


除此之外呢,我们还可以看看大体的一些能力值的分布,比如血量,发现大部分是处于50-100区间。类似地,也可以对其它特征做同样的可视化探索。

04.写个函数,PK宝贝的平均值


最后,我们来写一个函数,用来比较不同属性的神奇宝贝的平均能力值,并且可视化。比如,我想知道哪一类的神奇宝贝的防守能力是比较厉害的呢?来看看分析结果(函数会返回排序结果和图片,这里只贴上可视化结果):


从结果来看,岩石系的防守能力最好,电系的防守能力最差(这里心疼下电气老鼠比卡


同样的,我们可以运行下函数power_rank(‘HP’),看看哪一类神奇宝贝的平均血量最高,或者是其它的,只需要保持传入的参数和数据列名一样即可。


除了这些,我还想了解下这些特征间是否有相关性,比如,攻击能力高的是不是血量也会高,它们间的相关性有多高呢:


从结果来看,两者间的相关系数为0.42,属于中度相关。那如果我要看其它的呢,也要一个个只要写吗?其实不用,我们使用相关矩阵,并且用一个heatmap图就可以了:


这样是不是很清晰了呢,整体上来看,颜色越深,表示相关性越高。可以看到最高的相关系数是0.51(自身和自身比较的不算),也是属于中度相关。所以,神奇宝贝各能力特征间就不算有很强的相关性了。


其实,还可以进一步探索,比如,就拿一种类型的来看(例如水系)它们间的相关性是如何的。有兴趣的小伙伴可以尝试一下。


05.终极探索,神奇宝贝之王


目前为止,貌似只是了解了大概,我还想知道究竟是哪一些神奇宝贝最厉害,是不是比卡丘呢?接下来就让我们来一探究竟!


先来看综合能力,就是看Total数值最高的,我们对其做一个排序,并查看前五名:


呃。。。好吧,这里注意到最后一列Legendary都是Ture,说明了都是神兽级别的,这对非神兽的神奇宝贝就不是很友好了,所以,我们就不讨论神兽的,当然也可以专门分析神兽的数据,看看神兽里面是哪个最厉害,哪个最菜(不过这里已经给出来了,就是裂空座的综合能力最高了)。于是看看非神兽里综合能力值最高的有哪些:


这些基本都不认识,也不一一去搜索了。但是接下来,我们将来写一个函数,接受两只神奇宝贝的输入,并且用雷达图可视化它们的能力分布:


这个函数整体上还是比较简单,参考源码应该可以理解,作图用的是Pyecharts,即动态又炫酷,体验感真的不错,来看下结果:



这里是比较了比卡丘和杰尼龟,两者的综合值相差不大,但是可以很清楚的看到,皮卡丘的优势在于速度,弱势在于防御能力;而杰尼龟则是各方面比较平衡。如果你是神奇宝贝的主人,将会采用什么样的战略呢?



神奇宝贝对于我而言,是小学时候的一部经典,那时候就老幻想有一只比卡丘多好呀,大部分的神奇宝贝都很可爱。我最喜欢的是可爱的比卡丘,呆萌的可达鸭,和“索纳斯”的果然翁,你们喜欢哪一些神奇宝贝呢,欢迎大家讨论!

推荐↓↓↓
Python编程
上一篇:用Python分析韩国女团喜欢什么单词 下一篇:就是牛逼|用Python调用百度地图接口,给你一个端午旅游攻略