硬核!宝可梦八大世代数据大揭秘
目标:利用Python对宝可梦八大世代做数据分析
一、各系数量分析
二、各世代宝可梦数量分析
三、种族值分析
四、传说宝可梦分析
五、各世代推荐宝可梦
六、特性分析:特性种类、隐藏特性种类、占比(待更新)
零、预备工作指标解释导入三个Python常用数据分析的库importnumpyasnpimportpandasaspd画图包导入importmatplotlib。pyplotaspltplt。style。use(styleggplot)importmissingnoasmsnoimportseabornassnssns。set()设置画图空间为Seaborn默认风格将文件读取进来pokemonpd。readexcel(UsersglenjiDesktoppokemon(1)。xlsx)
指标解释abilities1特性1,abilities2特性2,abilitiesx特性xclassfication宝可梦分类、classficationCN宝可梦中文分类type1属性1,type2属性2attack攻击defense防御hp血量spattack特攻spdefense特防speed速度basetotal种族值总数
一、各系数量分析
总结:以下分析仅为单系,双系的分析暂无。
各系中,水系、一般系、草系三个的数量比较多,其中水系占比13。56,一般系占比12。02,草系占比9。48;
各系中,飞行系占比最少,仅0。37(唯一一个低于1的);
各系的数量:先做个简单的计数统计,可以初步看到水系、一般系、草系三个的数量比较多。水系那么多,可能因为日本靠海,他们比较喜欢吃鱼吧哈哈哈。查看各系的数量outpokemon〔〔type1,islegendary〕〕。groupby(type1)。count()print(out)
绘制一个柱形图来看看效果:柱形图查看各世代宝可梦不同种族数量pokemon〔type1EN〕。valuecounts()。plot。bar()
绘制饼图看看效果:水系、一般系、草系为数量前三位,冰系、妖精系、飞行系为数量后三位,有点出乎意料,飞行系竟然是最少的,仅0。37(唯一一个低于1的)。水系占比13。56,一般系占比12。02,草系占比9。48。查看各系的占比水系是最多的,为什么呢,可能是因为日本人靠海喜欢吃鱼吧哈哈哈fig,axplt。subplots(2,1,figsize(15,10))pokemon〔type1EN〕。valuecounts()。plot。pie(axax〔0〕,shadowFalse,autopct1。2f)ax〔0〕。setylabel()设置y轴标签ax〔0〕。setxlabel(type1EN)设置x轴标签sns。countplot(type1EN,datapokemon,axax〔1〕)ax〔1〕。setylabel()ax〔1〕。setxlabel(type1EN)plt。show()
二、各世代宝可梦分析
总结:
第5世代是宝可梦数量最多的世代有156只,第6世代是宝可梦数量最少的世代,仅72只;
先做个简单的计数统计(valuecounts),可以看到第5世代是宝可梦数量最多的世代有156只,第一世代次之(第一世代的151手办现在已经很贵很贵很贵了);第6世代是宝可梦数量最少的世代,才72只。计算一下各世代的宝可梦数量pokemon〔generation〕。valuecounts()
再画个柱形图看看效果:柱形图查看各世代宝可梦数量pokemon〔generation〕。valuecounts()。plot。bar()
三、种族值解析
总结:
种族值6大属性中,血量hp的异常值较多;
整体种族值呈双峰分布,以300和500左右的分布较多;
龙系的种族值均值高达515,是最值得培育的种族,其次是钢系、超能力系;而虫系是最可怜的种族,平均种族值仅有378,草系、一般系也惨兮兮;
种族值均值为439,中位数是440,培育宝可梦如果在乎强度,那应该选择高于这两值的宝可梦,如果是真爱党的话,则无所谓了;
绘制线箱图查看各种族值的大致情况:可以看到hp即血量的异常值较多。绘制线箱图可以看到hp的异常值较多plt。figure(figsize(10,5))设置画布大小sns。boxplot(datapokemon〔〔hp,attack,defense,spattack,spdefense,speed〕〕)
查看种族值的分布图:有点类似双峰分布,最多种族值分布在300和500附近。之前世代种族值最高的是800左右,第八世代出了个无极汰那极巨化一下子将种族值上限提高到1000以上。种族值分布plt。hist(pokemon〔basetotal〕,bins35)plt。xlabel(totalstats)plt。ylabel(Frequency)
通过小提琴图观察各个种族的种族值特性:可以看到龙系的整体种族值是相对较高的。psychic超能力bug虫系fairy妖精系通过小提琴的厚度显示的分布sns。setstyle(whitegrid)小提琴图plt。figure(figsize(15,5))设置画布大小sns。violinplot(xtype1EN,ybasetotal,datapokemon)
通过数据透视表,了解完整的各种族的平均种族值情况,得出什么种族是最值得培育的:得到的结论是龙系的种族值均值高达515,是最值得培育的种族,其次是钢系、超能力系;而虫系是最可怜的种族,平均种族值仅有378,草系、一般系也惨兮兮。建立数据透视表计算一下各系宝可梦种族值分布新建一个数据表格,用于保存世代generation与是否传说islegendary两列数据pokemon2pokemon〔〔type1,basetotal〕〕pokemonzpokemon2。pivottable(valuesbasetotal,计算的值indextype1,透视的行,分组的依据aggfuncmean)聚合函数对透视表进行降序排列pokemonzpokemonz。sortvalues(bybasetotal,排序依据ascendingFalse是否升序排列)pokemonz
再看看各系种族值的描述型数据统计:种族值均值为439,中位数是440,各位小伙伴,低于这俩值的宝可梦你要是培育的话,那就真的是真爱了。各系种族值得描述性数据情况pokemonz。describe()
推荐一些培育性价比比较高的宝可梦:种族值高于570,但非传说宝可梦的准神。找到非传说宝可梦但是种族值非常优秀,值得培育的宝可梦pokemon〔(pokemon〔basetotal〕570)(pokemon。islegendary0)〕〔chinesename〕。head(100)
还可以绘制一些种族值之间的关系图:可以看到attack和defense基本呈正相关,其他的你也可以再试试。查看HP和Attack的相关性importscipy。statsasstatsfromwarningsimportfilterwarningsfilterwarnings(ignore)sns。jointplot(xdefense,yattack,datapokemon)。annotate(stats。pearsonr)plt。show()
四、传说宝可梦分析
总结:
传说宝可梦最多的是第7世代,一共有25只,占比28;最少的是第1世代,只有5只,占比3;
越往后的世代传说宝可梦倾向于越多;
特攻值与是否为传说宝可梦相关度最高,而防御与是否为传说宝可梦的相关度最低;
传说宝可梦的种族值平均高达611,而非传说宝可梦的种族值平均为410;
种族与是否为传说宝可梦没有很强的相关性,相对来说超能力系psychic、龙系dragon是传说宝可梦的概率较高;
通过数据透视表统计一下各世代传说宝可梦数量:可以看到传说宝可梦最多的是第7世代,一共有25只;最少的是第1世代,只有5只;有个比较明显的趋势是越往后的世代传说宝可梦倾向于越多。新建一个数据表格,用于保存世代generation与是否传说islegendary两列数据pokemon1pokemon〔〔generation,islegendary〕〕建立数据透视表pokemonppokemon1。pivottable(valuesislegendary,计算的值indexgeneration,透视的行,分组的依据aggfuncsum)聚合函数pokemonp
对数据透视表进行数值降序排列:可以更明显的看清楚各世代传说宝可梦的数量排列。对透视表进行降序排列pokemonppokemonp。sortvalues(byislegendary,排序依据ascendingFalse是否升序排列)pokemonp
对新的透视结果做折线图展示:对新的透视结果做折线图展示x〔1,2,3,4,5,6,7,8〕ypokemonp〔islegendary〕plt。plot(x,y)plt。show()
各世代宝可梦数量及传说宝可梦对比图:查看各世代宝可梦数量f,axplt。subplots(1,2,figsize(18,5))新建画布pokemon〔generation〕。valuecounts()。plot。bar(axax〔0〕)绘制世代宝可梦数量柱形图ax〔0〕。setylabel(countS)设置y轴标签ax〔0〕。settitle(Generation)设置x轴标签sns。countplot(generation,hueislegendary,datapokemon,axax〔1〕)绘制世代传说宝可梦数量对比柱形图ax〔1〕。settitle(LegendaryVSGeneration)设置标题plt。show()
计算各世代传说宝可梦占比:通过数据透视表操作。计算一下各世代传说宝可梦数量新建一个数据表格,用于保存世代generation与是否传说islegendary两列数据pokemon1pokemon〔〔generation,islegendary,pokedexnumber〕〕建立数据透视表pokemonppokemon1。pivottable(valuesislegendary,计算的值indexgeneration,透视的行,分组的依据aggfuncsum)聚合函数pokemonqpokemon1。pivottable(valuespokedexnumber,计算的值indexgeneration,透视的行,分组的依据aggfunccount)聚合函数pokemonwpd。concat(〔pokemonp,pokemonq〕,axis1)用concat将两个表格连在一起pokemonw
可以看到第7世代的传说宝可梦占比最高,达到28;而第1世代是最低的,只有3。计算一下各世代传说宝可梦占比pokemoncpokemonw〔islegendary〕pokemonw〔pokedexnumber〕pokemonc
查看6大能力值与是否传说、世代的相关关系:先用相关关系矩阵查看效果。查看六大能力值与是否传说、世代的相关关系pokemonNewpokemon〔〔hp,attack,defense,spattack,spdefense,speed,generation,islegendary〕〕pokemonNewCorrpokemonNew。corr()plt。figure(figsize(10,10))设置画布sns。heatmap(pokemonNewCorr,annotTrue,cmapRdGy)plt。show()
查看各个能力值与是否为传说宝可梦的相关性排序:得到的结论是特攻值与是否为传说宝可梦相关度最高,也就是说传说宝可梦的特攻属性值一般是较高的。而防御与是否为传说宝可梦的相关度最低。查看各个特征与是否为传说宝可梦的相关性排序pokemonNewCorr〔islegendary〕。sortvalues(ascendingFalse)
传说宝可梦的平均种族值:传说宝可梦的种族值平均高达611,而非传说宝可梦的种族值平均为410。pokemonchuanshuopokemon〔〔basetotal,islegendary〕〕先将种族值和是否传说两列数据取出pokemonchuanshuo1pokemonchuanshuo。pivottable(valuesbasetotal,计算的值indexislegendary,透视的行,分组的依据aggfuncmean)聚合函数对透视表进行降序排列pokemonchuanshuo1pokemonchuanshuo1。sortvalues(bybasetotal,排序依据ascendingFalse是否升序排列)pokemonchuanshuo1
分析不同种族与传说宝可梦的相关关系:得出的结论是种族与是否为传说宝可梦没有很强的相关性,相对来说超能力系、龙系是传说宝可梦的概率较高。将种族type1做转码type1Dfpd。DataFrame()存放提取后的特征type1Dfpd。getdummies(pokemon〔type1〕,prefixtype1)使用getdummies进行onehot编码,列名前缀是Embarkedtype1Df。head(10)
将转码后的数据连接到原来的数据表格pokemonpd。concat(〔pokemon,type1Df〕,axis1)添加onehot编码产生的虚拟变量(dummyvariable)到pokemon中pokemon。head()
查看不同种族与是否传说、世代的相关关系pokemonNewpokemon〔〔type1Bug,type1Dark,type1Dragon,type1Electric,type1Fairy,type1Fighting,type1Fire,type1Flying,type1Ghost,type1Grass,type1Ground,type1Ice,type1Normal,type1Poison,type1Psychic,type1Rock,type1Steel,type1Water,generation,islegendary〕〕pokemonNewCorr1pokemonNew。corr()plt。figure(figsize(20,20))设置画布sns。heatmap(pokemonNewCorr1,annotTrue,cmapBlues)plt。show()
查看各个种族与是否为传说宝可梦的相关性排序pokemonNewCorr1〔islegendary〕。sortvalues(ascendingFalse)
五、各世代推荐宝可梦能力测评属性值加起来basetotaldefabilityvalue(x,outputnumber):pokemonx。copy()pokemonpokemon〔pokemon。islegendary0〕因为是平民策略,把神兽都排除掉Xlist〔〕Xlist是所有featurename,也就是宝可梦的所有属性名forlineinpokemon:rowline。strip()。split(,)Xlist。append(row)againstdatapokemon〔Xlist〔1〕〕Xlistnp。array(Xlist)foriinrange(2,18):againstdata为所有的against??权值加起来的总和,和战斗力成正相关againstdataagainstdatanp。array(pokemon〔Xlist〔i〕〕)basetotalvaluepokemon〔basetotal〕battlevalueagainstdata。mul(basetotalvalue,axis0)rankvaluebattlevalue。sortvalues(by〔againstbug〕,ascendingFalse,napositionfirst)ranknumberrankvalue。axes〔0〕。tolist()foriinrange(0,outputnumber):print(【name】:,pokemon。chinesename〔ranknumber〔i〕〕,【basetotal】:,pokemon。basetotal〔ranknumber〔i〕〕)return0
deftypeprefer(x):pokemonx。copy()typetotalpokemon。type1。dropduplicates(keepfirst)typetotal。resetindex(dropTrue,inplaceTrue)fortypenuminrange(0,len(typetotal)):eachtypepokemon1pokemon。loc〔pokemon〔type1〕typetotal〔typenum〕〕eachtypepokemon2pokemon。loc〔pokemon〔type2〕typetotal〔typenum〕〕eachtypepokemoneachtypepokemon1。append(eachtypepokemon2)print(typename:,typetotal〔typenum〕)abilityvalue(eachtypepokemon,3)每种属性输出最牛逼的3个print()
从培养难度考虑,培养经验值除以捕捉率,再乘以能力值,全部标准化deftraininghardlevel(x,outputnumber):pokemonx。copy()pokemonpokemon〔pokemon。islegendary0〕因为是平民策略,把神兽都排除掉monitor的捕捉率按255算,因为反正能力值都一样,算好抓的pokemon。capturerate〔773〕255pokemon。captureratepd。tonumeric(pokemon。capturerate)normalizationbasetotal(pokemon。basetotalpokemon。basetotal。min())(pokemon。basetotal。max()pokemon。basetotal。min())normalizationcapturerate(pokemon。captureratepokemon。capturerate。min())(pokemon。capturerate。max()pokemon。capturerate。min())normalizationexperiencegrowth(pokemon。experiencegrowthpokemon。experiencegrowth。min())(pokemon。experiencegrowth。max()pokemon。experiencegrowth。min())DifficultylevelnormalizationexperiencegrowthnormalizationcaptureratenormalizationbasetotalDifficultylevelDifficultylevel。sortvalues(ascendingFalse,napositionfirst)ranknumberDifficultylevel。axes〔0〕。tolist()foriinrange(0,outputnumber):print(【name】:,pokemon。chinesename〔ranknumber〔i〕〕,【basetotal】:,pokemon。basetotal〔ranknumber〔i〕〕)return0
ifnamemain:pokemonDatapd。readexcel(UsersglenjiDesktoppokemon。xlsx)首先要确定是哪一代的游戏17代Xlist〔〕forlineinpokemonData:rowline。strip()。split(,)Xlist。append(row)generation1pokemonData。iloc〔0:151〕generation2pokemonData。iloc〔0:251〕generation3pokemonData。iloc〔0:386〕generation4pokemonData。iloc〔0:493〕generation5pokemonData。iloc〔0:649〕generation6pokemonData。iloc〔0:721〕generation7pokemonData。iloc〔0:801〕print(以第2代为例:)print(纯从能力值考虑,前十名的宝可梦有:)abilityvalue(generation2,10)print(考虑捕捉训练难度,前十名的宝可梦有:)traininghardlevel(generation2,10)print(考虑属性多样爱好者,每个属性的前三甲宝可梦有:)typeprefer(generation3)
天气凉了,宝宝出现这4种情况,再脏也别洗澡天气一冷,给娃洗澡就是个难题。比如要不要天天洗?不洗吧,孩子玩了一天,在地上摸爬滚打的,肯定沾了不少的脏东西。洗吧,可天气实在冷,又怕冻着了,得不偿失。比如温度,说实话,秋冬季给娃
小车迷的心头好绘本分享晚安,工地上的车这本书讲述了五种工程车,对于工程车小车迷来说,这就是打开他们认知工程车大门的第一步,不仅让孩子们直观的了解他们最喜欢的工程车,也告诉给他们一些生活秩序。打开绘本,一辆大吊车好像正吊
孩子被打了,家长上门讨公道,失控打了对方孩子今天南京好多群里都在讨论这个事情,起因是小孩A在幼儿园打了小孩B,致使小孩B头部受伤,如图这样的伤口,家长看到肯定心疼坏了,故小孩B的父亲和母亲带上孩子上门讨公道,小孩B的父亲和小
孕妇应如何补充水分,哪些饮料会造成不良影响?孕期由于血容量增加等代谢变化,合理补充水分对于成功妊娠更为关键。根据自身的身体活动环境温度及时调整补充水分,饮水应少量多次为宜,一般一天内任何时刻都可以饮水。目前我们的饮用水主要有
喝水要根据体质度身而行每个人的体质不一样,一定要掌握适合自己的食品和饮食方法,不能因为大家都吃的东西,认为有营养就一哄而上。人家吃完这些变成营养吸收了,可您吃完成毒素堵那儿了,不一样。就像喝水,也要度身
出现这5种情况,说明肾精要用光了,教你3个中成药,补肾填精如果你身体出现这5种情况,可能是体内肾精不足了,大家好,我是和医生,今天送你三个中成药补肾填精。首先第一个就是腰酸腿疼,中医认为肾主骨,肾为腰之府如果你肾精不足呀,就可能会出现肾精
你身体乏力没劲可能是吃出来的我们的中国饮食是非常多样的,从南到北,从东西,都有无数的选择,这极大丰富着人们的味蕾。但是于此同时也出现了两种饮食极端,一种是人生得意须尽欢,暴饮暴食,不知节制一种是为了减肥,一天
俗话说生吃萝卜淡饮茶,为什么不能喝浓茶?主要有2点原因茶叶,作为国民饮品,喜欢喝的人非常多,但是很多人喝茶的方式却不是很好,因此常常有同样的一款茶,不同的人喝,结果也大相径庭的情况。不知道大家有没有听说过一句俗语生吃萝卜淡饮茶,这句话
火箭10换1报价杜兰特!斯通一箭双雕?借机招募哈登重回休城新赛季的布鲁克林篮网队可谓是一波未平一波又起,他们在赛季初就经历了西蒙斯的状态低迷,球队基本全是杜兰特和欧文两位巨头在苦苦支撑。然而,球队没等来西蒙斯的复苏不说,欧文这边又出了问题
产后遭受恶露纠缠?也许是身体发出的信号!产妇要清楚每一位产后的母亲都要经历排泄恶露的过程,但是各位的经历也各不相同,顺利的话就能按时排净,而部分则会出现淋漓不尽的情况。那么对于产后恶露的定义大家是真的有所了解?怀孕过程中,胎儿在子
宝妈们需要重视!科学健康解决产后问题的方法是?从怀孕到生产再到拥有自己的宝宝,对于女性来说是一件幸福的事情,但同时也会给女性朋友们带来一些困扰。比如,宝妈在生完宝宝之后要独自承受身材走样腹部肌肉松弛盆骨变宽耻骨疼痛等问题。尤其