作為童年玩Pokemon長大的孩子跪腹,經(jīng)歷了火焰版娇钱、葉綠版、紅寶石钾麸、藍(lán)寶石船殉、綠寶石鲫趁,五個(gè)版本的GBA游戲洗禮,對(duì)于Pokemon有著深深的情懷利虫,偶然看到有這么一個(gè)數(shù)據(jù)集挨厚,試試看,看看分析出來的東西和我所想是不是一樣的糠惫。雖然這個(gè)分析半夜三更進(jìn)行疫剃,腰酸腿痛的,但是硼讽,爽巢价!
1.數(shù)據(jù)整理和查看
1.導(dǎo)入所需要的package
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import pyecharts
#echart只是為了一個(gè)比較酷炫的雷達(dá)圖
%matplotlib notebook
#notebook模式更方便圖片的導(dǎo)出
2.讀取數(shù)據(jù)
data = pd.read_csv('pokemon_list.csv')
data.head()
居然名字都是英文版的,但是也沒有什么問題,資深玩家無所畏懼壤躲,第一個(gè)肯定是妙蛙種子城菊,不信你百度看看。
還有就是這個(gè)數(shù)據(jù)是721個(gè)柒爵,所以沒有一些新的小精靈和mega升級(jí)版本役电。
data.info()
每一列的數(shù)據(jù)基本可以有個(gè)了之,分別是Number編號(hào)棉胀、Name名稱、Type_1類別1冀膝、Type_2類別2(蒸汽系就是火焰系加上水系)唁奢、Total數(shù)值總計(jì)、HP血量窝剖、Attack攻擊麻掸、Defense防御、Sp_Atk魔法攻擊赐纱、Sp_Def魔法防御脊奋、Speed速度、Generation幾代疙描、isLegendary是否是神獸诚隙、Color顏色、Pr_male為男性精靈的幾率起胰、Egg_Group_1蛋的第一種類久又、Egg_Group_2蛋的第二種類、hasMegaEvolution有超進(jìn)化(總覺得是數(shù)碼寶貝)效五、Height_m高度以米為單位地消、Weight_kg重量以公斤為單位、Catch_Rate捕獲幾率畏妖、Body_Style身體形態(tài)(百變怪最牛逼)
基本看出只有350個(gè)有類別2的屬性脉执,大部分為單一屬性精靈,191個(gè)有第二種類的蛋戒劫,對(duì)于兩種屬性的缺失值半夷,都是統(tǒng)一屬性的多分類,可用第一分類作為填充谱仪。
#缺失值處理策略為前一列種類填充后一列
data['Type_2'] = data['Type_2'].fillna(value = data['Type_1'])
data['Egg_Group_2'] = data['Egg_Group_2'].fillna(value = data['Egg_Group_1'])
3.數(shù)據(jù)描述性統(tǒng)計(jì)列表
Total一列75%線在499玻熙,而最大值為720,高數(shù)值一類應(yīng)該是神獸(玩過的都知道疯攒,神獸特么一張嘴一個(gè)島就沒了嗦随。。。)數(shù)值包括血量枚尼、攻擊等贴浙,標(biāo)準(zhǔn)差基本為28左右,這一點(diǎn)還是很良心署恍,讓玩家有良好的從小怪到大怪有一個(gè)階梯形的概念崎溃。其他的都是單獨(dú)特性,在這里要說一下捕獲率Catch_Rate盯质,口袋妖怪的設(shè)定是從血量多到血量少袁串,捕獲率會(huì)提升,最小為3呼巷,最大為255囱修,應(yīng)該是從2的一次方+1,一直到2的八次方-1王悍。不然通俗理解為255%破镰,丟個(gè)球,捕獲率抓到兩個(gè)半多压储?鲜漩!兩個(gè)我還能理解,半個(gè)多是什么意思集惋?孕似!買一贈(zèng)一還送個(gè)小的?芋膘!情侶入住鳞青,房租減半?为朋!一家人整整齊齊臂拓?!
2.數(shù)據(jù)分析
2.1種類分析
Type_pd=pd.concat([data.Type_1,data.Type_2],axis=1)
#計(jì)算出第一種類的數(shù)量加上第二種類數(shù)量
Type_count = data.Type_2.value_counts() + data.Type_1.value_counts()
Type_count.sort_values(ascending = False)
由于失誤习寸,第一次只計(jì)算第一類別胶惰,發(fā)現(xiàn)飛行類的只有3個(gè),但是鳥類中最愛的比比鳥居然不是飛行類霞溪,進(jìn)行單獨(dú)查看后孵滞,發(fā)現(xiàn)比比鳥第一類別是normal,第二類別就是飛行鸯匹,所以將兩者進(jìn)行累加坊饶,能夠看出來,水生類最多殴蓬,幽靈類最少匿级。畢竟幽靈類的蟋滴,沒有道具無法進(jìn)行捕獲。
2.2可視化分析
#Series序列中添加0痘绎,并對(duì)指作排序處理津函,便于繪圖
Type_count = data.Type_2.value_counts() + data.Type_1.value_counts()
Type_count = pd.Series([0]).append(Type_count).sort_values()
#畫布大小設(shè)置
plt.figure(figsize=(14,5))
#類別設(shè)置
cata = [0,'Ghost','Steel','Ice','Dragon','Fairy',
'Dark','Fighting','Rock','Electric','Ground','Poison',
'Bug','Fire','Flying','Psychic','Grass','Normal','Water']
#坐標(biāo)軸y值由Series中的值作為代替
y_pos = Type_count
#設(shè)置橫坐標(biāo)和縱坐標(biāo),顏色孤页,透明度
plt.bar(cata,y_pos,facecolor = 'yellowgreen',alpha=0.4)
#設(shè)置橫坐標(biāo)類別進(jìn)行映射
plt.xticks(cata)
#x軸名稱
plt.xlabel('Type')
#x的橫向數(shù)量
plt.xlim(0,18)
#總體圖形名稱
plt.title('the num of Type')
#進(jìn)行展示
plt.show()
plt.figure(figsize=(10,10))
#標(biāo)簽名稱
cata = ['Ghost','Steel','Ice','Dragon','Fairy',
'Dark','Fighting','Rock','Electric','Ground','Poison',
'Bug','Fire','Flying','Psychic','Grass','Normal','Water']
#分塊數(shù)據(jù)
sizes = Type_count.drop(0)
#顏色設(shè)置
colors = [ '#ff8100', '#057d9f', '#00bd39', 'yellow', 'lightgreen', 'orange', '#64de89']
#各個(gè)色塊的偏移
explode = (0, 0, 0, 0, 0, 0, 0, 0, 0,0,0,0,0,0,0,0,0,0.1)
#畫餅圖
plt.pie(sizes, explode=explode, labels=cata, colors=colors,
autopct='%1.1f%%', shadow=False, startangle=90)
#呈現(xiàn)正圓形的圖形
plt.axis('equal')
#標(biāo)題
plt.title("Percentage of Different Types of Pokemon")
plt.show()
可以看出整體尔苦,水系精靈最多,其次是Normal正常系精靈行施,也符合游戲大陸海洋分布的設(shè)定允坚。
2.2.多屬性結(jié)合分析
- 種類結(jié)合性別分析
- 種類結(jié)合數(shù)值分析
2.2.1結(jié)合性別分析
因?yàn)閷?duì)于有性別的精靈分析類別價(jià)值不大,所以故對(duì)于無性別精靈進(jìn)行分析
nogender_num = data[data['hasGender']==False].groupby('Type_1',as_index = False).Number.count().s ort_values(by='Number',ascending = False)
對(duì)于類別Type_1進(jìn)行分類(再次不對(duì)第二類別做分析蛾号,因?yàn)榈诙悇e往往是因?yàn)榫`在進(jìn)化和相應(yīng)的環(huán)境中屋讶,才會(huì)出現(xiàn)第二類別。)
#進(jìn)行可視化圖表建立
#修改列名便于觀察
nogender_num.rename(columns={'Type_1':'Type'},inplace=True)
#設(shè)置畫布
plt.figure(figsize=(12,8))
#
sns.set(font_scale=1.2,color_codes='#df1234')
sns.barplot(x='Type',y='Number',data = nogender_num)
可以看出Steel鋼鐵類和Psychic超能力類高于其他類別须教,主要是鋼鐵類和超能力類的設(shè)定,鋼鐵類趨向于一種分化和類似于修煉的方式來進(jìn)行斩芭,而超能力就像他的設(shè)定一般轻腺,不詳。
2.2.2結(jié)合數(shù)值分析
#調(diào)用seaborn畫箱線圖分析數(shù)值total和種類的關(guān)系
#map映射種類和數(shù)值
type_to_dict = { 'Grass': 0, 'Fire': 1, 'Water': 2, 'Bug': 3, 'Normal': 4,
'Poison': 5, 'Electric': 6, 'Ground': 7, 'Fairy': 8, 'Fighting': 9,
'Psychic' : 10, 'Rock': 11, 'Ghost':12, 'Ice' : 13, 'Dragon': 14,
'Dark': 15, 'Steel': 16, 'Flying': 17}
data['Int_Type1'] = data['Type_1'].map(type_to_dict).astype(int)
#設(shè)置相關(guān)的sns參數(shù)
sns.set(style="ticks")
fig, ax = plt.subplots(figsize=(8,6))
sns.boxplot(ax = ax, x="Int_Type1", y="Total",data=data, palette="PRGn")
sns.despine(offset=10, trim=True)
plt.show()
可以看出平均水平普遍較高的是龍類(大家都是龍圖騰的國度)划乖。
#進(jìn)行分類別計(jì)算各個(gè)數(shù)值的均值
sum_abili = data[['HP','Attack','Defense','Sp_Atk','Sp_Def','Speed']].groupby(data['Type_1'],as_index=True).mean().round(2)
#use
colorlist = ['#313695', '#abd9e9', '#ffffbf',
'#fdae61','#d73027', '#a50026',
'#314693', '#3bd9e9', '#f23fbf',
'#fda231','#d73a27', '#f51026',
'#312d93', '#3bd9ea', '#f23abf',
'#fda2f1','#df1a27', '#a50f26',]
c_schemas= [{"name": "生命值/HP", "min": 0},
{"name": "攻擊值/Attack", "min": 0},
{"name": "防御值/Defense", "min": 0},
{"name": "特殊攻擊值/Sp.Atk", "min":0},
{"name": "特殊防御值/Sp.Def", "min":0},
{"name": "速度/Speed", "min":0}]
radar = Radar('不同次代小精靈屬性均值情況',width=800 ,height=600,
title_pos='center')
radar.config(c_schema=c_schemas, shape='polygon')
for i in range(18):
radar.add(sum_abili.index[i], [list(sum_abili.iloc[i,:])], item_color=colorlist[i],symbol=None,
legend_pos='0%',legend_orient='vertical')
radar
可以看出贬养,總體類別中,攻擊值和生命值的差別不大琴庵,畢竟在寵物小精靈中误算,更多的是釋放技能,而不是單純的撞擊迷殿,速度的差異性最大儿礼,飛行系因?yàn)樘厥獾膶傩缘乃俣茸羁欤笫请娤岛妄埾登焖拢軌蜥尫烹姽饣鹗寄艿囊簿瓦@幾個(gè)類別蚊夫。
#單獨(dú)將Type_1,各數(shù)值,Generation合成一個(gè)表
data_ex = data[['Type_1','HP','Attack','Defense','Sp_Atk','Sp_Def','Speed','Generation']]
查看數(shù)值變量按照pairs組合后的分布特征
sns.pairplot(data_ex,vars=['HP','Attack','Defense','Sp_Atk','Sp_Def','Speed'],hue = 'Type_1')
查看每個(gè)數(shù)值型變量的分布特征
#單獨(dú)抽出數(shù)值做成feature表
feature = data_ex.columns[1:7]
plt.figure(1,figsize=(18,18))
#設(shè)置x軸線風(fēng)格
sns.axes_style('ticks')
for i in range(len(feature)):
tmp = data[feature[i]]
#畫出畫布
plt.subplot(3,3,i+1)
#在畫布中畫出柱狀圖和密度分布線
sns.distplot(tmp)
plt.show()
數(shù)值相關(guān)性分析
#相關(guān)性分析
data[['Total','HP','Attack','Defense','Sp_Atk','Sp_Def','Speed']].corr()
#熱力圖繪制
plt.figure(figsize=(10,10))
plt.title('num_heatmap')
sns.heatmap(corr,square=True,linewidths=.5,cmap="YlGnBu")
plt.show()
- 嘗試聚類和精靈特征來進(jìn)行分類
- 嘗試構(gòu)建新的特征
未完待續(xù)懦尝。知纷。。