LoginSignup
2
1

More than 1 year has passed since last update.

Rでポケモンの主成分分析をしてみた

Last updated at Posted at 2022-04-23

背景

 統計学で「主成分分析」という手法を学んだので、さっそく使ってみようと思いました。何をどう分析しようかと迷っていたところ、ポケモンであればデータが容易に手に入り、結果に対してイメージがしやすく、かつ分析する要素も多いのではと思い、ポケモンの分析をしてみることにしました。
 実際に、ポケモンは種類が多いこと、種族ごとにステータスや重さなどのパラメータが細かく設定されていることなどから、分析を練習するのには格好の素材なんだそうです。

主成分分析とは?

 「主成分分析」とは、相関のある多数の変数(各要素)から、相関のない少数で全体のばらつきをよく表す「主成分」と呼ばれる変数を見つけ出す分析手法のことです。要するに、ごちゃごちゃしている様々な要素の中から、どの要素の組み合わせが良く全体の傾向を表しているか調べる、という分析方法です。
 分散(ばらつき)が最大になるように(情報量が多くなるようにし、説得力が増すように)第一主成分を決定し、第一主成分とはベクトルが直角の方向を指すように第二主成分、続いて第三主成分、第四主成分...と選んでいきます。第一主成分が最も全体の傾向をよく表しているもので、続いて第ニ、第三と関連具合が弱くなっていき、すべての主成分を足し合わせたところで全体の100%の傾向を表すことができます。一般的には、第ニ、三主成分辺りまでを足し合わせると全体の8,9割の傾向について説明できることが多いようです。
 おそらく上記の説明だと何を言っているかよく分からないと思うので、とにかくやってみましょう。

作業環境

 Windows10
 R Studio

分析事項

・2022/4/1時点で出現している、第8世代までのポケモン(赤緑~剣盾のレイスポスまで)について分析する。
・使用データは
 https://smart-hint.com/poke-data/introduction/
 こちらのサイトを参考にしました。PokeAPIで取得できるようです。元々は「ポケモン徹底攻略」のサイトから取得できないかと思っていたのですが、そちらは今後種族値などのデータを分析するのに使います。
・元データ(Excel)の列名は、「id」、「名前」、「タイプ1」、「タイプ2」、「高さ」、「重さ」、「世代」、「ステータス」、「HP」、「こうげき」、「ぼうぎょ」、「とくこう」、「とくぼう」、「すばやさ」、「捕まえやすさ」、「ベビー」、「伝説」、「進化」、「画像URL」です。これはもう皆さん分かりますよね?!!「ベビー」はおそらくピチューやピィなどのベビーポケモンであるかどうかのブーリアン型(TRUEかFALSEか)、「進化」は何段階目の進化かが「1,2,3」などの数値で示されています。進化しないポケモンは「0」です。
・主成分分析で、あるグループのポケモンに対してどのような傾向があるか分析する

手順

 まずは、ExcelのデータをCSVに変換し、RStudioに読み込ませます。この時、CSVデータがエンコーディングUTF-8-BOMで保存されていたため、そのまま読み込むとエラーが出たので注意してください。


### ポケモンの主成分分析
## ポケモンの種類は第8世代(ソード・シールド)までの897匹とする。


# CSVデータ(ポケモンのデータ)の読み込み
# UTF-8-BOMで保存された生のCSVファイルを読み込めるよう、エンコーディングも指定

csvPATH1 <- "./data/pokemon_data.csv"
pokemon_data <- read.csv(file=csvPATH1, fileEncoding="UTF-8-BOM", header=T, sep=",") 

head(pokemon_data)
str(pokemon_data)     # 各変数の一覧
summary(pokemon_data) # 平均値等の内訳

# pokemon_dataデータの確認
View(pokemon_data)
str(pokemon_data)

 先頭数行を表示するhead関数や、平均値などを出力するsummary関数で、どのようなデータか確認しておきます。

 ここで、伝説か否かや、ベビーポケモンかどうかといった変数に関しては、数値ではなくTRUEかFALSEのブーリアン型となっており、そのままでは分析に使えないので、結果を0か1かに変換して「ダミー変数」と呼ばれるものを作ります。タイプに関しても、「あく」、「くさ」といったように文字列型が入ってしまっていたので、各タイプ分の変数(列名)を用意し、該当するタイプの場合は1、それ以外は0を表示するようにします。


## ダミー変数の作成(数値になっていないデータを0,1で表示)
library(dummies)
dummy_type1 <- dummy(pokemon_data$タイプ1, sep=".")
dummy_pokemon <- cbind(pokemon_data, dummy_type1)
dummy_type2 <- dummy(pokemon_data$タイプ2, sep=".")
dummy_pokemon <- cbind(dummy_pokemon, dummy_type2)
dummy_baby <- dummy(pokemon_data$ベビー, sep=".")
dummy_pokemon <- cbind(dummy_pokemon, dummy_baby)
dummy_legend <- dummy(pokemon_data$伝説, sep=".")
dummy_pokemon <- cbind(dummy_pokemon, dummy_legend)
# ダミー変数もつなげた表ができあがっている
# (列数が多すぎるので、右の方の要素は画面上部にある「Cols:」で左右に移動して御確認ください。)
View(dummy_pokemon) 
# 行数確認(897行)
nrow(dummy_pokemon)
# 列数確認(60列)
ncol(dummy_pokemon)
 

 まだこのままでは分析に使えないので、データのうち使えない列や入力値がない行を削除して整理します。


## データの整理
# 欠損値を含む行を削除
dummy_pokemon <- na.omit(dummy_pokemon)
nrow(dummy_pokemon) # 欠損値が元々ないことを確認できる

# データが数値型の列のみ抽出
df <- data.frame(dummy_pokemon) # 処理のためにデータフレームを作成
head(df)

number_col <- NULL # 数値型のみのデータを格納する変数
for(i in 1:ncol(df)) {
  number_col <- append(number_col, is.numeric(df[,i]))
}
number_col

# 抽出した数値型のみの行を新しい変数に格納
dummy_pokemon2 <- dummy_pokemon[,which(number_col == TRUE)]
# 列数確認(54列に削減)
ncol(dummy_pokemon2)
head(dummy_pokemon2)

 dummy_pokemonはこちらのようなデータになります。これから数値のみのデータを抽出して、dummy_pokemon2とします。

dummy_pokemon.png

 さていよいよここからが主成分分析です。
 まずは全てのデータをぶっこんで全体の傾向を把握します。


## 主成分分析の実行
# 主成分(PC)を作成(scale=TRUEで標準化も行う)
pokemon_pca <- prcomp(dummy_pokemon2[-1], scale=TRUE)

## 寄与率の確認
summary(pokemon_pca)
pokemon_pca$x[, c("PC1", "PC2", "PC3")]
pokemon_pca

## 固有ベクトルの表示
pokemon_pca$rotation

## 負荷量行列(元データと主成分の相関)の表示
# 各主成分がどの変数と関連が高いかを把握
# 高さと重さ、各ステータスと全体のステータス、岩タイプと重さ、格闘タイプとこうげき
# などに相関があることが分かる
cor(dummy_pokemon2, pokemon_pca$dummy_pokemon2)

## バイプロット
biplot(pokemon_pca)

 主成分が53個も出てきたりして、はっきりいって訳わからないです。PC3まで足しても、全体の20%くらいしか説明できていないですね。("Cumulative Proportion"の値を確認)

Importance of components:
                          PC1     PC2    PC3     PC4     PC5     PC6     PC7     PC8
Standard deviation     2.3727 1.51172 1.4004 1.35946 1.31090 1.24356 1.21587 1.18215
Proportion of Variance 0.1062 0.04312 0.0370 0.03487 0.03242 0.02918 0.02789 0.02637
Cumulative Proportion  0.1062 0.14934 0.1863 0.22121 0.25364 0.28281 0.31071 0.33707
                           PC9    PC10    PC11    PC12    PC13    PC14    PC15    PC16
Standard deviation     1.16760 1.15738 1.14667 1.13142 1.11443 1.10900 1.09338 1.08780
Proportion of Variance 0.02572 0.02527 0.02481 0.02415 0.02343 0.02321 0.02256 0.02233
Cumulative Proportion  0.36280 0.38807 0.41288 0.43703 0.46047 0.48367 0.50623 0.52855
                          PC17    PC18    PC19    PC20    PC21    PC22    PC23    PC24
Standard deviation     1.07894 1.06519 1.05512 1.04286 1.02612 1.01523 1.01292 1.00911
Proportion of Variance 0.02196 0.02141 0.02101 0.02052 0.01987 0.01945 0.01936 0.01921
Cumulative Proportion  0.55052 0.57193 0.59293 0.61345 0.63332 0.65277 0.67212 0.69134
                          PC25    PC26    PC27    PC28   PC29   PC30    PC31    PC32
Standard deviation     1.00151 0.99448 0.98797 0.96230 0.9465 0.9407 0.93270 0.91753
Proportion of Variance 0.01892 0.01866 0.01842 0.01747 0.0169 0.0167 0.01641 0.01588
Cumulative Proportion  0.71026 0.72892 0.74734 0.76481 0.7817 0.7984 0.81482 0.83071
                          PC33    PC34    PC35    PC36    PC37    PC38    PC39    PC40
Standard deviation     0.91668 0.89253 0.88533 0.87641 0.84032 0.82316 0.80140 0.78433
Proportion of Variance 0.01585 0.01503 0.01479 0.01449 0.01332 0.01278 0.01212 0.01161
Cumulative Proportion  0.84656 0.86159 0.87638 0.89087 0.90420 0.91698 0.92910 0.94071
                          PC41    PC42    PC43   PC44    PC45    PC46    PC47    PC48
Standard deviation     0.75216 0.73624 0.70633 0.6306 0.58284 0.56079 0.52760 0.45351
Proportion of Variance 0.01067 0.01023 0.00941 0.0075 0.00641 0.00593 0.00525 0.00388
Cumulative Proportion  0.95138 0.96161 0.97102 0.9785 0.98493 0.99087 0.99612 1.00000
                            PC49      PC50      PC51      PC52      PC53
Standard deviation     1.274e-15 8.393e-16 4.622e-16 3.371e-16 2.216e-16
Proportion of Variance 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00
Cumulative Proportion  1.000e+00 1.000e+00 1.000e+00 1.000e+00 1.000e+00

 一応それぞれの変数の1対1の組に対して、相関関係も表示されますが、全部ここにコピペするのは諦めましたorz
 一般的に、相関係数が0.4~0.5辺りから、ある程度相関関係にあるとみなすようです。高さと重さ、重さとステータスなどに相関関係がありそうですね。


                              id         高さ         重さ          世代   ステータス
id                  1.0000000000  0.054901674  0.132454388  0.9880032783  0.160478637
高さ                0.0549016737  1.000000000  0.642759394  0.0290867893  0.508832865
重さ                0.1324543882  0.642759394  1.000000000  0.0988123403  0.452759381
世代                0.9880032783  0.029086789  0.098812340  1.0000000000  0.106934554
ステータス          0.1604786371  0.508832865  0.452759381  0.1069345543  1.000000000
HP                  0.0992334553  0.454812912  0.436696466  0.0677930894  0.657402113
こうげき            0.1573734437  0.377801003  0.393883199  0.1222104988  0.713809803
ぼうぎょ            0.1245568854  0.341980631  0.444764949  0.0827442470  0.615674099
とくこう            0.1204483515  0.339238390  0.207068188  0.0807476260  0.715618580
とくぼう            0.0964790549  0.282152850  0.272482215  0.0537147419  0.695412331
すばやさ            0.0299187695  0.213740065  0.032241411  0.0101138454  0.541919801
捕まえやすさ       -0.0939392197 -0.290515333 -0.280083863 -0.0559982933 -0.723705117
進化               -0.1319357396  0.029872173 -0.038584590 -0.0874413530  0.139183276
タイプ1.あく        0.0885532231  0.012893549 -0.003690081  0.0780950168  0.024598579
タイプ1.いわ        0.0182030213  0.039358707  0.113924744  0.0062023136  0.035762470
タイプ1.エスパー    0.0111189027 -0.028902935 -0.023668984 -0.0002723651  0.060605345
タイプ1.かくとう    0.0452527370  0.013353758 -0.004332207  0.0477303744  0.008290092
タイプ1.くさ       -0.0001316077 -0.069954053 -0.085547732  0.0248441045 -0.043590327

 主成分をベクトルで表したものを表示してみましたが、控えめに言って何がなんだか分からないですね!

pokemonPCA_All.png

 現状のままでは何だかしっちゃかめっちゃかになってしまっているので、要素を絞って分析してみます。どのような方向性で分析したいのかを決めてから、使う変数を選びます。

 まずは、個人的に好きな水タイプのポケモンが、重いのか軽いのか、また大きいのか小さいのかなど、どのような特徴を持っているのかについて分析してみようと思います。使う変数は「タイプ1.みず」、「タイプ2.みず」、「高さ」、「重さ」、「ステータス」、「捕まえやすさ」です。


## 水タイプのポケモンはどのような特徴を持っているか分析

# まず項目を絞ったデータフレームを作成する

type_data <- dummy_pokemon2[ , c("タイプ1.みず", "タイプ2.みず", "高さ","重さ", "ステータス", "捕まえやすさ")]
head(type_data)

plot(type_data)   # 散布図
cor(type_data)    # 相関係数行列


## 水タイプのポケモンについて、高さ、重さ、ステータス、捕まえやすさの観点から主成分分析

# 主成分(PC)を作成(scale=TRUEで標準化も行う)
type_pca <- prcomp(type_data, scale=TRUE)

## 寄与率の確認
summary(type_pca)
type_pca # PC1,PC2より、高さと重さは相関関係にあるが、水タイプであるか否かは
     # さほど高さと重さに影響を与えないことが分かる 

## 固有ベクトルの表示
type_pca$rotation

## 主成分得点
head(type_pca$x[,1])
head(type_pca$x[,2])

# 主成分得点の図示
install.packages(maptools) 
library(maptools)
par(las=1)
plot(x=NULL,type="n",xlab="PC1",ylab="PC2",xlim=c(-5,5),ylim=c(-5,5),xaxs="i",yaxs="i",xaxt="n",yaxt="n",bty="n")
axis(side=1,at=seq(-5,5,1),tck=1.0,lty="dotted",lwd=0.5,col="#dddddd",labels=expression(-5,-4,-3,-2,-1,0,1,2,3,4,5))
axis(side=2,at=seq(-5,5,1),tck=1.0,lty="dotted",lwd=0.5,col="#dddddd",labels=expression(-5,-4,-3,-2,-1,0,1,2,3,4,5))
points(x=type_pca$x[,1],y=type_pca$x[,2],pch=16,col="#ff8c00")
pointLabel(x=type_pca$x[,1],y=type_pca$x[,2],labels=rownames(type_data),cex=0.8)
box(bty="l")

## 負荷量行列(元データと主成分の相関)の表示
# 各主成分がどの変数と関連が高いかを把握
cor(type_data, type_pca$x)
# PC2から、「高さ」が低いタイプ2がみずのポケモンがやや多く、
# PC3から、水タイプのポケモンはやや捕まえにくい傾向にあることが分かる。

## バイプロット
biplot(type_pca)
# みずタイプであることは、ステータス、重さ、高さ、捕まえやすさにさほど関係ない

 まず、使う変数のみの列を抽出したデータを作成し、type_dataという変数に代入します。("<-"はRでいう代入です。)

 ここでまず最初に、作ったデータの散布図と、それぞれの変数同士の相関関係を確認しておきます。

散布図

mizu_sanpu2.png

 散布図で外れ値(平均に対して極端に離れているような値)がないか調べてみます。やけに高さが高いポケモンがいますね。(どのポケモンだろう。)本来このような外れ値があると相関係数を調べたりするのに精度が落ちるため、外れ値は落としたいですが、今回は結果にあまり影響しなさそうだったので、別の分析の時に触れます。
 相関関係については、高さと重さにやや正の相関がありそうにも見えますが、これは水タイプと直接関係ないので、スルーします。

相関係数行列

             タイプ1.みず タイプ2.みず        高さ        重さ  ステータス 捕まえやすさ
タイプ1.みず  1.000000000 -0.057045828  0.02813445 -0.03930287 -0.02048791  0.007083156
タイプ2.みず -0.057045828  1.000000000 -0.03187932 -0.01713564 -0.01720244  0.000381172
高さ          0.028134452 -0.031879324  1.00000000  0.64275939  0.50883286 -0.290515333
重さ         -0.039302867 -0.017135635  0.64275939  1.00000000  0.45275938 -0.280083863
ステータス   -0.020487905 -0.017202440  0.50883286  0.45275938  1.00000000 -0.723705117
捕まえやすさ  0.007083156  0.000381172 -0.29051533 -0.28008386 -0.72370512  1.000000000

 水タイプであることと、他の変数にはほとんど相関がないですね。水タイプであるからといって、何か決定的な特徴を持つわけではない、という仮説ができます。ここで、主成分分析に入ります。

 prcomp関数で主成分を作成することができます。ここでの注意点としては、「scale=TRUE」というオプションで標準化をしなければならないことです。標準化とは、ある変数はcm、ある変数は個といったように、バラバラになっている単位を統一することです。(正確には、平均を0、分散を1にすることです。)でないとそれぞれの変数について大小を比較できず、分析する何の意味もありませんよね。

 主成分を作成し、それぞれの主成分について寄与度(全体の傾向を表すのにどれだけ貢献しているか)を確認すると、このような結果が得られます。

Importance of components:
                         PC1    PC2    PC3    PC4     PC5     PC6
Standard deviation     1.568 1.0303 0.9764 0.9665 0.59867 0.48229
Proportion of Variance 0.410 0.1769 0.1589 0.1557 0.05973 0.03877
Cumulative Proportion  0.410 0.5869 0.7458 0.9015 0.96123 1.00000

 PC4までで9割近くを説明できる、ということが分かりました。全体の傾向を表すベクトルのうち、4つめまでで全体の集団についてほぼ説明できるようです。

 それぞれの主成分について固有ベクトル(方向、向きのようなもの)を見てみると、次のようになっています。

                     PC1         PC2        PC3        PC4         PC5          PC6
タイプ1.みず  0.01247937 -0.70282337  0.5550441  0.4386302  0.06880431  0.026060767
タイプ2.みず  0.02263033  0.69610178  0.4257137  0.5774977 -0.01202621  0.007054004
高さ         -0.49682299 -0.10175638 -0.3005044  0.3531331 -0.66983684 -0.281292220
重さ         -0.48001189 -0.02531195 -0.3839062  0.3468553  0.70778771  0.017085003
ステータス   -0.55296957  0.05165259  0.2450635 -0.2333523 -0.14389496  0.745883029
捕まえやすさ  0.46509385 -0.08842269 -0.4614661  0.4178936 -0.15738725  0.602919874

 まずPC1を見ると、「高さ」、「重さ」、「ステータス」が-0.5程となっており、「タイプ1.みず」、「タイプ2.みず」はわずかにプラスの値を取っています。これは、PC1という主成分のベクトルに対して、「高さ」、「重さ」、「ステータス」は5割くらいの負の相関があり、水タイプである、ということはわずかに正の相関がある、ということです。これらを総合して考えると、タイプ1がみずであると、高さ、重さの値が小さく、ステータスが低くなる傾向がわずかだけある、と解釈できます。(少し意味合いが違いますが...。)全体を最もよく表す1つ目の主成分は、高さ、重さ、ステータスと負の相関が強く、タイプ1が水であるということとはわずかに正の相関があるということです。
 同様にPC2について見てみると、今度はタイプ2がみずであることと強い正の相関があり、「高さ」とは弱い負の相関があります。このことから、第2の傾向として、「高さ」が低めな、タイプ2がみずの集団が挙げられる、ということが分かります。
 一方PC3は、「タイプ1.みず」、「タイプ2.みず」どちらとも正の相関があり、「高さ」、「重さ」、「捕まえやすさ」とは負の相関があります。「ステータス」ともやや正の相関がありますね。よって、全体の特徴を表す第3のグループは、「タイプ1,2のいずれかがみずであり、小さく、軽く、捕まえにくく、まあまあ強いポケモン」ということになります。どんなポケモンやねん!
 PC4も見ていきましょう。こちらも先ほど同様水タイプであることと正の相関があり、今度は先程と真逆の傾向です。水タイプのポケモンには、「大きくて重く、捕まえやすいやや弱いポケモン」も多い、ということです。うーん、シザリガーとかかな?(シザリガーごめん)

 また、このような主成分の傾向を、corという関数で「負荷量行列」により確認することもできます。

> cor(type_data, type_pca$x)
                     PC1         PC2        PC3        PC4          PC5          PC6
タイプ1.みず  0.01957334 -0.72413151  0.5419186  0.4239339  0.041191263  0.012568888
タイプ2.みず  0.03549467  0.71720613  0.4156466  0.5581487 -0.007199763  0.003402087
高さ         -0.77924499 -0.10484142 -0.2933982  0.3413014 -0.401013035 -0.135664860
重さ         -0.75287751 -0.02607935 -0.3748277  0.3352339  0.423733181  0.008239953
ステータス   -0.86730843  0.05321859  0.2392683 -0.2255339 -0.086145983  0.359733080
捕まえやすさ  0.72947923 -0.09110348 -0.4505535  0.4038921 -0.094223452  0.290783159

 主成分と元データの各要素との相関関係を表しているのは、本来コチラなのですが、固有ベクトルでみてもこちらで見ても、大体は同じような結果になります。固有ベクトルは、各変数をx1,x2などとした場合、例えば先ほどの例だと PC1 = 0.0124 * X1 + 0.0226 * X2 + ...
などと表せる、ということです。伝われ!!

 固有ベクトルを図示すると、このようになります。これを見ると、「タイプ1.みず」、「タイプ2.みず」と「高さ」、「重さ」、「ステータス」、「捕まえやすさ」のベクトルは内積がほぼ0(ほぼ直角)で、あまり相関関係にないことがよく分かります。結局、水タイプだからといって、大小や強さ、捕まえやすさに関して、他のタイプに比べて明確な違いが出るわけではない、ということが分かりました。

mizu2.png

 という訳で、最初の分析では、水タイプであることは、さほど「高さ」や「重さ」に影響するわけではなく、水タイプのポケモンにはある程度重いポケモンも軽いポケモンも、大きいポケモンも小さいポケモンも、強いポケモンも弱いポケモンもバランスよくいる、ということが分かりました。確かにカイオーガは重くて大きくて強いですし、ヒンバスは小さくて軽くて弱いですからね。納得。

 続いてはかくとうタイプのポケモンが「こうげき」と正の相関がありそうなことが全体の分析で分かったため、こちらについても分析してみます。

### タイプ1がかくとうのポケモンについて、タイプと各ステータスの関係を確認

# まず項目を絞ったデータフレームを作成する

kakutou_data <- dummy_pokemon2[ , c("タイプ1.かくとう", "タイプ2.かくとう", "HP","こうげき", "ぼうぎょ", "とくこう", "とくぼう", "すばやさ")]
head(kakutou_data)

plot(kakutou_data)   # 散布図
cor(kakutou_data)    # 相関係数行列


## 各ステータスで格闘タイプのポケモンについて主成分分析

# 主成分(PC)を作成(scale=TRUEで標準化も行う)
kakutou_pca <- prcomp(kakutou_data, scale=TRUE)

## 寄与率の確認
summary(kakutou_pca)
kakutou_pca 
# PC1から、かくとうタイプのポケモンは全体的な能力が高いことがわかる。
# PC2から、かくとうタイプのポケモンは「ぼうぎょ」が高く、「とくこう」と「すばやさ」が低い傾向にあることが分かる
# 一方で、PC3から、かくとうタイプには「ぼうぎょ」、「とくぼう」が低く、「すばやさ」が高いポケモンも多いことが分かる

## 固有ベクトルの表示
kakutou_pca$rotation

## 負荷量行列(元データと主成分の相関)の表示
# 各主成分がどの変数と関連が高いかを把握
cor(kakutou_data, kakutou_pca$x)
# かくとうタイプは「こうげき」と弱い正の相関にあることが分かる。

# 主成分得点の図示
install.packages(maptools) 
library(maptools)
par(las=1)
plot(x=NULL,type="n",xlab="PC1",ylab="PC2",xlim=c(-5,5),ylim=c(-5,5),xaxs="i",yaxs="i",xaxt="n",yaxt="n",bty="n")
axis(side=1,at=seq(-5,5,1),tck=1.0,lty="dotted",lwd=0.5,col="#dddddd",labels=expression(-5,-4,-3,-2,-1,0,1,2,3,4,5))
axis(side=2,at=seq(-5,5,1),tck=1.0,lty="dotted",lwd=0.5,col="#dddddd",labels=expression(-5,-4,-3,-2,-1,0,1,2,3,4,5))
points(x=type_pca$x[,1],y=type_pca$x[,2],pch=16,col="#ff8c00")
pointLabel(x=type_pca$x[,1],y=type_pca$x[,2],labels=rownames(type_data),cex=0.8)
box(bty="l")

## バイプロット
biplot(kakutou_pca)

# ラベルやサイズを整える
biplot(kakutou_pca, xlim=c(-0.1,0.1), ylim=c(-0.1,0.1), cex=0.7)
# かくとうタイプであることが、「こうげき」や「ぼうぎょ」とやや正の相関があり
# 「すばやさ」や「とくこう」とは弱い負の相関があり
# 「HP」、「とくぼう」にはほとんど影響を与えないことが分かる

## 外れ値の確認
# 散布図を確認した際、やや外れ値が観測されたので、どの程度か確認
# マハラノビス距離を使って確認する

kakutou_mean <- colMeans(kakutou_data)
kakutou_mean # 平均値
kakutou_varians <- var(kakutou_data)
kakutou_varians # 分散
m.d <- mahalanobis(kakutou_data, center=kakutou_mean, cov=kakutou_varians)   # 引数としてカラム平均ベクトル、共分散行列(v)を渡す
m.d # マハラノビスの距離
plot(m.d)
# マハラノビスの距離が100近い外れ値もあった(113, 213, 242)
# 113:HPが以上に高く、こうげき、ぼうぎょが極端に低いラッキー
# 213:ぼうぎょ、とくぼうが異常に高く、他が極端に低いツボツボ
# 242:ラッキーの進化系のハピナス
# いずれも格闘タイプのポケモンたちとは対極の特徴をもつポケモン
# 今回は外れ値とはいえ、典型的な格闘タイプとは対極の関係にあるポケモン
# なので、分析の対象に含めておく。
m.d[m.d>50]

散布図

kakutou_sanpu2.png

相関係数行列

                 タイプ1.かくとう タイプ2.かくとう         HP  こうげき    ぼうぎょ
タイプ1.かくとう      1.000000000      -0.03462274 0.02496373 0.1613192 -0.01088215
タイプ2.かくとう     -0.034622740       1.00000000 0.06440610 0.1473693  0.04702500
HP                    0.024963734       0.06440610 1.00000000 0.4573407  0.25916947
こうげき              0.161319154       0.14736934 0.45734070 1.0000000  0.45517982
ぼうぎょ             -0.010882147       0.04702500 0.25916947 0.4551798  1.00000000
とくこう             -0.117217770       0.04087377 0.37797890 0.3195911  0.19575978
とくぼう             -0.034097502       0.02692398 0.36275722 0.2120534  0.50731303
すばやさ              0.006062308       0.07799210 0.18214278 0.3374332 -0.01570222
                    とくこう    とくぼう     すばやさ
タイプ1.かくとう -0.11721777 -0.03409750  0.006062308
タイプ2.かくとう  0.04087377  0.02692398  0.077992098
HP                0.37797890  0.36275722  0.182142782
こうげき          0.31959114  0.21205335  0.337433180
ぼうぎょ          0.19575978  0.50731303 -0.015702224
とくこう          1.00000000  0.49183224  0.428343134
とくぼう          0.49183224  1.00000000  0.193837059
すばやさ          0.42834313  0.19383706  1.000000000

 散布図を見ても、外れ値があるのか判断しづらいですね。こちらについては後ほど触れます。
 相関係数行列を見ると、一応格闘タイプであることが「こうげき」と正の相関があることが分かります。
 次に主成分分析でより詳しく調べます。
 まずは主成分の寄与度。

Importance of components:
                          PC1    PC2    PC3    PC4     PC5     PC6     PC7     PC8
Standard deviation     1.6232 1.0736 1.0601 1.0024 0.85393 0.82445 0.65206 0.49969
Proportion of Variance 0.3294 0.1441 0.1405 0.1256 0.09115 0.08497 0.05315 0.03121
Cumulative Proportion  0.3294 0.4734 0.6139 0.7395 0.83068 0.91564 0.96879 1.00000

 今回はPC4,PC5辺りで全体の7,8割を説明できるようですが、それぞれどのような主成分となっているのでしょうか。

                         PC1         PC2         PC3         PC4        PC5        PC6
タイプ1.かくとう 0.005355271 -0.54392771  0.56754181 -0.33557564  0.4262968 -0.2566521
タイプ2.かくとう 0.099579054  0.05933955  0.29421756  0.89182806  0.2492231 -0.2013434
HP               0.419554642 -0.08361986  0.05270769 -0.03813903 -0.5747591 -0.5825921
こうげき         0.438033488 -0.25148692  0.32870138  0.07183112 -0.3559061  0.3914790
ぼうぎょ         0.376995826 -0.46635170 -0.36448316  0.14929520  0.1027649  0.4222844
とくこう         0.441628353  0.40452097 -0.05244740 -0.15950691  0.1554062 -0.1814208
とくぼう         0.437532539 -0.02977746 -0.39216060 -0.07737974  0.4890932 -0.2255212
すばやさ         0.305875334  0.49837304  0.43717386 -0.17804006  0.1588013  0.3725906
                          PC7        PC8
タイプ1.かくとう  0.076590213  0.1262297
タイプ2.かくとう  0.007396496  0.0439948
HP               -0.304206423  0.2246015
こうげき          0.245196552 -0.5400281
ぼうぎょ         -0.035539500  0.5432361
とくこう          0.716129412  0.2079136
とくぼう         -0.314493793 -0.5088445
すばやさ         -0.477917983  0.2068770

 こちらが主成分の固有ベクトルです。PC1をみると、タイプ1.かくとうの相関がかなり低いのでわずかにですが、かくとうタイプであることはそれぞれのパラメータと正の相関を持っており、格闘タイプのポケモンは全体的にステータスが高めのようです。

 次にPC2。こちらは顕著ですね。「こうげき」、「ぼうぎょ」、「タイプ1.かくとう」と負の相関、「とくこう」、「すばやさ」と正の相関を持っている。すなわち、タイプ1がかくとうでない、素早い特殊アタッカーが全体の第2の特徴を表すグループとして示されているわけです。逆に言うと、タイプ1がかくとうで、「こうげき」、「ぼうぎょ」が高く、「とくこう」、「すばやさ」が低い武神(ローブシン)みたいなポケモンも多い、ということですね。

 続いてPC3。こちらも分かりやすいですね。今度は、「こうげき」、「すばやさ」が高く、「ぼうぎょ」、「とくぼう」が低い格闘タイプのポケモンが3番目の特徴的なグループとして出てきていますね。コジョンドとかフェローチェとか馬車(鴨の相棒の最終進化系)のことですね。

 一応PC4くらいまで見ておきますか。タイプ2がかくとうで、「ぼうぎょ」がやや高く、「とくこう」、「すばやさ」が低めのポケモン。...うーん、まあいそうですね。

 一応固有ベクトルも見ておきましょう。こちらです。

kakutou2.png

 結構分かりやすいですね。「タイプ1.かくとう」は「すばやさ」、「とくこう」と反対方向を向いているので、格闘タイプには遅い物理アタッカーが多く(すばやさ、とくこうが低い)、「こうげき」、「ぼうぎょ」とはやや同じ向きを向いているのでそれらが高いポケモンが多く、「とくぼう」、「HP」に関してはほぼ直角なので格闘タイプであることとそれほど関係がない、ということですね。ただ、「タイプ2.かくとう」に関しては、「とくこう」のベクトルとほぼ同じ向きを向いているのが不思議でした。

 ここで、少し話が逸れますが、「マハラノビス距離」というものを調べてみましょう。「マハラノビス距離」とは、相関関係を考慮したうえで、それぞれのデータについて、各変数の平均値からの距離を表したものです。一般的には楕円形の形をしており、中心から離れるほど、平均から逸脱した値、つまり「外れ値」であることが視覚的に分かります。
 最初に散布図を確認した際、少し外れ値があるような気もしていました。本来は、外れ値があると、全体の平均値などに影響を与え、精度の高い分析ができなくなるおそれもあるので、今回の場合はどの程度外れ値があるかもついでに見てみましょう。

kakutou_hazurechi2.png

 マハラノビスの距離が100近い値が3つもありました。その他にも、マハラノビスの距離がやや高めなポケモンもチラホラいます。
 ちなみに、この3匹はラッキー(HPが異常に高く、こうげき、ぼうぎょが極端に低い)、ハピナス(ラッキーの進化系)、ツボツボ(ぼうぎょ、とくぼうが極端に高く、他がかなり低い)でした。格闘タイプとは対極にあるようなポケモンたちですね。まあ外れ値とはいえ、これらのポケモンも一応個性あるポケモンの一員なので、今回は入れておきましょう。ポケッターリ、モンスターリ。

 続いては、格闘タイプが全体的にステータスが高めということで、今度はいかにも弱そうな草タイプについて調べてみました。

### タイプ1がくさのポケモンについて、タイプと各ステータスの関係を確認

# まず項目を絞ったデータフレームを作成する

kusa_data <- dummy_pokemon2[ , c("id","HP","こうげき", "ぼうぎょ", "とくこう", "とくぼう", "すばやさ", "タイプ1.くさ")]
head(kusa_data)

## id, 各ステータス, タイプ1で草タイプのポケモンについて主成分分析

# 主成分(PC)を作成(scale=TRUEで標準化も行う)
kusa_pca <- prcomp(kusa_data[-1], scale=TRUE)

## 寄与率の確認
summary(kusa_pca)
kusa_pca 
# PC1から、くさタイプのポケモンは全体的な能力が低いことがわかる。
# PC2から、くさタイプのポケモンは「ぼうぎょ」が高く、「すばやさ」が低い傾向にあることが分かる

## 固有ベクトルの表示
kusa_pca$rotation

## 負荷量行列(元データと主成分の相関)の表示
# 各主成分がどの変数と関連が高いかを把握
cor(kusa_data, kusa_pca$kusa_data)
# くさタイプである、ということは、さほど各ステータスに影響を与えないことが分かる。


## バイプロット
biplot(kusa_pca)

# ラベルやサイズを整える
biplot(kusa_pca, xlim=c(-0.1,0.1), ylim=c(-0.1,0.1), xlabs=kusa_data$id, cex=0.7)
# くさタイプに関しては、「ぼうぎょ」や「とくぼう」とやや正の相関があり
# 「とくこう」や「すばやさ」とはやや負の相関があり
# 「HP」、「こうげき」にはほとんど影響を与えないことが分かる
# 一般的に「とくこう」が強いイメージある草タイプが、「とくこう」と負の相関を持つ、ということが意外であった。

 まずは各主成分の寄与度。

Importance of components:
                          PC1    PC2    PC3    PC4     PC5     PC6     PC7
Standard deviation     1.6189 1.0699 1.0044 0.9227 0.83175 0.64869 0.51144
Proportion of Variance 0.3744 0.1635 0.1441 0.1216 0.09883 0.06011 0.03737
Cumulative Proportion  0.3744 0.5380 0.6821 0.8037 0.90252 0.96263 1.00000

 だいたいPC4,5あたりで全体の8,9割を説明できていますね。

 続いて主成分の固有ベクトル。

                     PC1          PC2         PC3          PC4          PC5          PC6          PC7
HP           -0.42162881  0.021300179 -0.05661271 -0.269756841 -0.777544626 -0.287641770 -0.241843477
こうげき     -0.43575291  0.002446178 -0.16285407 -0.639019274  0.221265682  0.234021591  0.521077469
ぼうぎょ     -0.37913293  0.580428564 -0.19548569 -0.003419308  0.412462799 -0.005693199 -0.557652749
とくこう     -0.44458666 -0.270995657  0.29416712  0.311827802 -0.105823707  0.710571631 -0.170359863
とくぼう     -0.44191856  0.243769709  0.08655766  0.582702825  0.003119604 -0.348473618  0.526123479
すばやさ     -0.30683922 -0.673407018  0.11463401 -0.044460430  0.401403858 -0.472230635 -0.230495481
タイプ1.くさ  0.03882218  0.276231194  0.90823533 -0.283051289  0.063299654 -0.114525180 -0.007539987

 PC1。やっぱり草タイプは全体的に弱いんですね(苦笑)。
 PC2。「ぼうぎょ」と「とくぼう」が高く、「とくこう」と「すばやさ」が低いポケモンたちが2番目の大きな特徴を持つグループ。まあ分からなくないですが、「とくこう」が低いのは意外ですね。まあ確かにたいして「とくこう」高くはないですからね。
 PC3。「とくこう」、「すばやさ」が高く、「HP」、「こうげき」、「ぼうぎょ」が低いポケモン。まあよくいそうですね。でも実際に思い浮かべても実例が出てこない...。
 PC4。「とくこう」、「とくぼう」が高く、「HP」、「こうげき」が低い。...フシギバナ??
 PC5。「こうげき」、「ぼうぎょ」、「すばやさ」が高く、「HP」が低いポケモン。
 .........。いる???ドダイトス??
 PC6。「こうげき」、「とくこう」が強く、他が弱いポケモンは草タイプでないことが多い。確かに。

 2次元平面上の固有ベクトルも見てみましょう。

pokemonPCA4.png

 格闘タイプとは逆向きにステータスのベクトルが向いており、やはり弱いことが分かります。
 「ぼうぎょ」、「とくぼう」が高く、「すばやさ」が遅いようですね。意外にも「こうげき」、「とくこう」はあまり関係ないと。

 続きまして、どういうポケモンが一番捕まえにくいのか調べてみました。「進化」、「ステータス」、「伝説」など、いかにも捕まえにくそうな要素をこれでもか、というくらい集めてみました。一応ベビーポケモンが捕まえやすいのかも検証してみます。ソースコードはこちら↓↓↓


### どのようなポケモンが捕まえにくいのか検証

# まず項目を絞ったデータフレームを作成する

get_data <- dummy_pokemon2[ , c("id","高さ","重さ", "ステータス", "捕まえやすさ", "進化", "ベビー.TRUE", "伝説.TRUE")]
head(get_data)

## 捕まえやすさと、各要素について主成分分析

# 主成分(PC)を作成(scale=TRUEで標準化も行う)
get_pca <- prcomp(get_data[-1], scale=TRUE)

## 寄与率の確認
summary(get_pca)
get_pca 
# PC1から、ステータスの高さが最も捕まえにくさに影響を与えていることが分かる
# PC2から、進化しているポケモンほど捕まえにくいことも分かる
# PC3から、ベビーポケモンは捕まえやすいことが分かる

## 固有ベクトルの表示
get_pca$rotation

## 負荷量行列(元データと主成分の相関)の表示
# 各主成分がどの変数と関連が高いかを把握
cor(get_data, get_pca$get_data)
# 「捕まえやすさ」は、「ステータス」と最も負の相関が強く、
# 「ベビー」とは正の相関があることが分かる

## バイプロット
biplot(get_pca)

# ラベルやサイズを整える
biplot(get_pca, xlim=c(-0.1,0.1), ylim=c(-0.1,0.1), xlabs=get_data$id, cex=0.9)
# 「捕まえやすさ」と「ステータス」がほぼ反対向きになっており、
# このことからも、「ステータス」が「捕まえやすさ」と最も強い負の相関にあることが分かる
# 一方、「伝説」は「捕まえやすさ」とほぼ直角のベクトルであり、
# 伝説ポケモンであるからといって、それほど捕まえやすさに影響する訳ではないことが分かった

 各主成分の寄与度を見てみます。

Importance of components:
                         PC1    PC2    PC3    PC4     PC5    PC6     PC7
Standard deviation     1.661 1.1603 0.9874 0.9447 0.67471 0.5981 0.46423
Proportion of Variance 0.394 0.1923 0.1393 0.1275 0.06503 0.0511 0.03079
Cumulative Proportion  0.394 0.5863 0.7256 0.8531 0.91812 0.9692 1.00000

 PC4までで8割ほど行っていますね。続いて固有ベクトル↓↓↓

                    PC1         PC2          PC3         PC4         PC5         PC6         PC7
高さ          0.4559992 -0.06889642  0.053129635 -0.51953393 -0.08118057 -0.67125127  0.23960634
重さ          0.4465245 -0.16095474  0.069443850 -0.50181829 -0.07841873  0.71512208 -0.02272323
ステータス    0.5197213  0.19864723 -0.002598851  0.26430552 -0.11956343 -0.13158014 -0.76743476
捕まえやすさ -0.4218184 -0.31289787 -0.181290952 -0.50023855  0.32235737 -0.12314611 -0.56743269
進化          0.0198715  0.75709747  0.158354123 -0.21698515  0.59164087  0.05625907  0.03234133
ベビー.TRUE  -0.1105010 -0.20327871  0.963785565  0.03264181  0.02873752 -0.04796680 -0.11572614
伝説.TRUE     0.3633651 -0.46632847 -0.074316799  0.33169088  0.71985121 -0.00882881  0.12922068

 PC1。「ベビー.TRUE」のみ「捕まえやすさ」と正の相関があり、他は負の相関がある。「進化」に関してはさほど影響を与えていない。
 PC2。「伝説」でも「ベビー」でもない軽いポケモンは、「進化」が最も「捕まえやすさ」と強い負の相関がある。このような条件下においては、進化の段階が強く捕まえやすさに影響するのですね。
 PC3。「進化しているベビーポケモンは捕まえにくい」???ちょっとよく分からないです。
 PC4。「ステータス」が高い「伝説」ポケモンは、「軽くて」「低い」ポケモンの中では「捕まえにくい」?ってことですかね?

 いまいちつかめない部分もあるので、図でベクトルを確認してしまいましょうか。

pokemonPCA5 - コピー.png

 「ベビー.TRUE」と「捕まえやすさ」は明確に正の相関があり、「伝説」ポケモンは「進化」しないことが多い...あたりまえの結果が出てきましたね。この中では一番「ステータス」が捕まえにくさに影響しているようですね。伝説であるかどうかはさほど関係ないと。意外といえば意外ですね。

 続きまして、またまた水タイプの登場です。
 水タイプのポケモンって、やたら初代ポケモンに多いイメージがありますが(私だけ??)、世代ごとに水タイプのポケモンの多さはばらつきがあるのか、調べてみましょう。
 ただし、ここで注意があって、今回のデータは世代を数値で表しているので、数字の大小、すなわち最近のポケモンか昔のポケモンか、ということと水タイプのポケモンの多さの相関関係しか調べられませんでした。要するに、個々の世代については詳細に分析してるわけではなく、全体的に、古いポケモン、新しいポケモンどちらに水タイプが多いか、というざっくりとした説明になっている、ということです。

## 水タイプのポケモンについて主成分分析

# 主成分(PC)を作成(scale=TRUEで標準化も行う)
water_pca <- prcomp(water_data[-1], scale=TRUE)

## 寄与率の確認
summary(water_pca)
water_pca 
# PC1から、新しい世代のポケモン(世代の数値が高い)でタイプ1がみずでないポケモンが多いことが分かる
# PC2から、古い世代のポケモン(世代の数値が低い)でタイプ2がみずのポケモンが多いことが分かる

## 固有ベクトルの表示
water_pca$rotation

## 負荷量行列(元データと主成分の相関)の表示
# 各主成分がどの変数と関連が高いかを把握
cor(water_data, water_pca$water_data)
# 全体的に、世代はさほど水タイプの多さに影響しないことが分かった

## バイプロット
biplot(water_pca)

# ラベルやサイズを整える
biplot(water_pca, xlim=c(-0.1,0.1), ylim=c(-0.1,0.1), xlabs=water_data$id, cex=0.9)
# 「世代」と「タイプ2.みず」はほぼ直角のためほとんど相関がなく、
# 「世代」と「タイプ1.みず」はやや負の相関があるため、
# タイプ1がみずのポケモンは、古い世代に多いことが分かる。

 毎回やることは同じです。
 まず散布図
mizu_sedai_sanpu.png

 これみてもよく分かりませんね。とりあえず全体のポケモンの数は第1世代と第5世代(赤緑とブラックホワイト)が多く、第6世代(XY)が少ないのが分かります。まあそうなのかも。

 続いて各2変数間の相関係数を表した行列です。

                  id       世代 タイプ1.みず タイプ2.みず
id            1.0000000  0.9880033  -0.10961762   0.02806170
世代          0.9880033  1.0000000  -0.10330885   0.01923640
タイプ1.みず -0.1096176 -0.1033088   1.00000000  -0.05704583
タイプ2.みず  0.0280617  0.0192364  -0.05704583   1.00000000

 大きくても相関係数が0.1程度なので、大した相関はありませんね。id(ポケモン図鑑の番号)と世代に強い相関があるのは当たり前ですし...。

 寄与度は

Importance of components:
                          PC1    PC2    PC3
Standard deviation     1.0615 0.9919 0.9430
Proportion of Variance 0.3756 0.3280 0.2964
Cumulative Proportion  0.3756 0.7036 1.0000

                    PC1        PC2       PC3
世代          0.6146896 -0.4706299 0.6329804
タイプ1.みず -0.6802787  0.0898495 0.7274255
タイプ2.みず  0.3992212  0.8777440 0.2649300

 PC2までで全体の7割程度説明できていますね。
 PC1:世代が後の方(最近のポケモン)で、タイプ2がみずのポケモンのグループがやや多い。タイプ1がみずでないポケモンのグループも多い。
 PC2:世代が前の方(昔のポケモン)で、タイプ2が水タイプのポケモンのグループも多い。
 PC3:最近のポケモンで、タイプ1がみずのポケモンのグループが3番目の全体的な特徴として挙げられる
 ということです。
 なんとなくですが、最近のポケモンでタイプ1がみずのものは少なく、タイプ2がみずのポケモンはどの世代にも割と多い、ということですかね。水タイプはタイプ2に振り分けられることが多いのでしょうか。

 最後に固有ベクトルを確認してみます。
pokemonPCA6.png

 主成分からはあまり想像できなかったですが、世代の古い新しいと、タイプ2がみずであることは、ベクトルがほぼ直角なのでほとんど相関がないこと、「タイプ1.みず」と「世代の数値」はベクトルが反対方向に向いているので、タイプ1がみずのポケモンは古い世代に多い、ということが分かりますね。ほーんという感じですね。

 さて、強いポケモン、弱いポケモン、そんなのひとの勝手、とはいいますが、やはりトレーナーとしてはできれば強いポケモンが欲しいところ。ということで、単刀直入にどのようなポケモンがステータスが高いのか調べてみました。

### 高いポケモン、重いポケモン、ドラゴンポケモン、伝説ポケモン、進化ポケモン
### のうち、どれが一番ステータスが高いか調べる

# まず項目を絞ったデータフレームを作成する

status_data <- dummy_pokemon2[ , c("id", "ステータス", "高さ","重さ", "進化", "タイプ1.ドラゴン", "タイプ2.ドラゴン", "伝説.TRUE")]
head(status_data)

plot(status_data)   # 散布図
cor(status_data)    # 相関係数行列


## それぞれの要素とステータスについて主成分分析

# 主成分(PC)を作成(scale=TRUEで標準化も行う)
status_pca <- prcomp(status_data[-1], scale=TRUE)

## 寄与率の確認
summary(status_pca)
status_pca 
# PC1から、高さや重さがステータスと正の相関が強いことが分かる
# PC2から、伝説ポケモンは進化をすることが少ないことが分かる(あたりまえ)

## 固有ベクトルの表示
status_pca$rotation

## 負荷量行列(元データと主成分の相関)の表示
# 各主成分がどの変数と関連が高いかを把握
cor(status_data, status_pca$status_data)
# やはり、高さや重さが最もステータスに影響を与え、次点で伝説かどうか
# が影響を与えていることが分かった

## バイプロット
biplot(status_pca)

# ラベルやサイズを整える
biplot(status_pca, xlim=c(-0.1,0.1), ylim=c(-0.1,0.1), xlabs=status_data$id, cex=0.9)
# 「重さ」、「高さ」が「ステータス」と強い正の相関関係にあり
# 「ドラゴンタイプ」、「進化」はさほど影響を与えないことが分かった

 まずは散布図
status_sanpu.png

 まあやっぱりポケモン全体で調べている以上、外れ値はありますよね。またラッキーとかツボツボですかね。

 続いて相関係数行列

                          id ステータス       高さ        重さ         進化 タイプ1.ドラゴン
id                1.00000000  0.1604786 0.05490167  0.13245439 -0.131935740      0.084239000
ステータス        0.16047864  1.0000000 0.50883286  0.45275938  0.139183276      0.115601749
高さ              0.05490167  0.5088329 1.00000000  0.64275939  0.029872173      0.111421198
重さ              0.13245439  0.4527594 0.64275939  1.00000000 -0.038584590      0.060860073
進化             -0.13193574  0.1391833 0.02987217 -0.03858459  1.000000000      0.000265372
タイプ1.ドラゴン  0.08423900  0.1156017 0.11142120  0.06086007  0.000265372      1.000000000
タイプ2.ドラゴン  0.15042277  0.1144911 0.22690196  0.22458573 -0.047338850     -0.032035659
伝説.TRUE         0.12707657  0.4143682 0.32474109  0.36632960 -0.336531764      0.152991427
                 タイプ2.ドラゴン   伝説.TRUE
id                     0.15042277  0.12707657
ステータス             0.11449109  0.41436820
高さ                   0.22690196  0.32474109
重さ                   0.22458573  0.36632960
進化                  -0.04733885 -0.33653176
タイプ1.ドラゴン      -0.03203566  0.15299143
タイプ2.ドラゴン       1.00000000  0.06828527
伝説.TRUE              0.06828527  1.00000000

 やはり高さのあるポケモンと重いポケモンはステータス高いのですね。意外にも、ドラゴンタイプであることはあまり相関がなさそうです。

 続いて毎度おなじみ寄与度と固有ベクトルの表示

Importance of components:
                          PC1    PC2    PC3    PC4    PC5     PC6     PC7
Standard deviation     1.5735 1.1080 1.0331 0.9363 0.7871 0.62743 0.58251
Proportion of Variance 0.3537 0.1754 0.1525 0.1252 0.0885 0.05624 0.04847
Cumulative Proportion  0.3537 0.5291 0.6815 0.8068 0.8953 0.95153 1.00000

                        PC1         PC2         PC3         PC4        PC5         PC6
ステータス        0.4750741 -0.21190064  0.17802151 -0.21990459  0.5130868  0.53861682
高さ              0.5207437 -0.18300337 -0.04921337 -0.02593925 -0.4051007  0.25229136
重さ              0.5147143 -0.08824799 -0.12379238 -0.08390368 -0.4848776 -0.35679290
進化             -0.0591483 -0.82044540  0.20570437 -0.01063037  0.2121702 -0.46574747
タイプ1.ドラゴン  0.1359447  0.10679727  0.70762044  0.67299170 -0.1052618  0.02320894
タイプ2.ドラゴン  0.2133081 -0.07879400 -0.62483953  0.67654670  0.3142353 -0.03740463
伝説.TRUE         0.4131828  0.47230856  0.13075329 -0.18216210  0.4274213 -0.54779681
                          PC7
ステータス        0.309817569
高さ             -0.681530254
重さ              0.585243269
進化             -0.137864539
タイプ1.ドラゴン  0.069643066
タイプ2.ドラゴン  0.002884627
伝説.TRUE        -0.270471428

 今回は、PC4くらいまでで全体の8割を説明できるみたいですね。
 PC1:高くて重くて、伝説でステータスが高いグループ
 PC2:伝説で進化しないグループ
 PC3:タイプ1がドラゴンの最終進化系で、ステータスがやや高いグループ
 PC4:タイプ1か2がドラゴンで、ステータスがやや低いグループ
 ...のようです。PC2はあたりまえですし、ステータスに関係ないので無視するとして、PC4みたいなグループもあるんですねぇ。へぇえ

 固有ベクトルを視覚的に見てみましょう。
pokemonPCA7.png

 やはり、重さと高さがステータスのベクトルとほぼ同じ方向を向いてますね。これら2つの要素が一番ステータスに影響を与えるみたいです。一方、ドラゴンタイプかどうか、進化の段階、伝説であるかどうかはあまり関係ないようですね。進化の段階は、そもそも進化しないポケモンは今回の分析では「0」に設定されているので、仕方ないかもしれないですね。ドラゴンタイプは、そりゃあもうフライゴ...ン゛ン゛ンン゛、ゲフンゲフン............ゴホッゴホッ...

 最後にマハラノビスの距離で外れ値も確認しておきましょう。
 status_hazrurechi.png

 なんか一匹だけやたらマハラノビス距離が大きいヤツがいますね。約300って...
 他にもやや距離が大きいのが数匹いるので、検索をかけてみました。

> m.d[m.d>100]
     321      790      890 
176.3542 143.4802 289.3113 

 どうやら、マハラノビス距離が100を超えているのは、id(図鑑番号)321,790,890の三匹のようですね。
 まずマハラノビス距離が289という偉業を成し遂げた890は、ムゲンダイナでした。でもこんなに外れている理由はよく分かりませんでした。伝説かつドラゴンタイプで、こうげきが低めで、全体的なステータスがやたら高いから?でも典型的な強いポケモン、という感じもするんですけどね。伝説でドラゴンタイプなのに、ここまでステータスと強い相関がある、というのが今回の分析からは異端だったのでしょうか。
 次に、id790はコスモウムでした。これはデータをみると確かに、進化している伝説で、しかもステータスが低いという、まさに典型的なレアケースでした。最近のポケモン(特に伝説)は変わったポケモンが多いということですかね。確かに剣盾とか変なのばっかいたな...。
 321はホエルオーでした。これはおそらく、進化系なのに全体のステータスが低く、しかもHPだけやたら高いからでしょう。え、でもハピナスは??

 外れ値をみているだけでも面白いですね!

 続いては、猛威を振るったドラゴンタイプ達を脅かすゲームバランサー、新参者のフェアリータイプについて、どのような特徴があるのか調べていきます。


### 新参者のフェアリータイプにどのようなポケモンが多いかを調べる

# まず項目を絞ったデータフレームを作成する

head(dummy_pokemon2)
fairy_data <- dummy_pokemon2[ , c("id", "タイプ1.フェアリー", "タイプ2.フェアリー", "高さ", "重さ", "HP", "こうげき", "ぼうぎょ", "すばやさ", "とくこう", "とくぼう", "ベビー.TRUE")]
head(fairy_data)

plot(fairy_data)   # 散布図
cor(fairy_data)    # 相関係数行列

## それぞれの要素とフェアリータイプのポケモンについて主成分分析

# 主成分(PC)を作成(scale=TRUEで標準化も行う)
fairy_pca <- prcomp(fairy_data[-1], scale=TRUE)

## 寄与率の確認
summary(fairy_pca)
fairy_pca 
# PC1から、フェアリーポケモンには低くて軽い、ステータスの低いポケモンが
# 多いことが分かる。
# PC2から、タイプ2がフェアリーのポケモンに、軽くて早いポケモンが多いことが分かる
# PC3から、フェアリーポケモンにはHPやとくぼうが高いポケモン、ベビーポケモンが
# 多いことが分かる。

## 固有ベクトルの表示
fairy_pca$rotation

## 負荷量行列(元データと主成分の相関)の表示
# 各主成分がどの変数と関連が高いかを把握
cor(fairy_data, fairy_pca$fairy_data)
# フェアリータイプのポケモンには、「こうげき」が低く、「とくぼう」が
# 高いポケモンが多いことが分かる。

## バイプロット
biplot(fairy_pca)

# あまり顕著ではないものの、フェアリーポケモンは軽く、「ぼうぎょ」が低く、
# 「すばやさ」が高い傾向にあることが分かる。
# 意外にも、「ベビー」であるかや、「とくぼう」はさほど相関関係にない

 まずは恒例の散布図と相関係数
fairy_sanpu.png

                            id タイプ1.フェアリー タイプ2.フェアリー        高さ        重さ
id                  1.00000000         0.04561412         0.08281579  0.05490167  0.13245439
タイプ1.フェアリー  0.04561412         1.00000000        -0.03025922 -0.04365225 -0.05000377
タイプ2.フェアリー  0.08281579        -0.03025922         1.00000000 -0.06113193 -0.07665588
高さ                0.05490167        -0.04365225        -0.06113193  1.00000000  0.64275939
重さ                0.13245439        -0.05000377        -0.07665588  0.64275939  1.00000000
HP                  0.09923346         0.01803452        -0.04225532  0.45481291  0.43669647
こうげき            0.15737344        -0.06942961        -0.09379712  0.37780100  0.39388320
ぼうぎょ            0.12455689        -0.01807962        -0.01603193  0.34198063  0.44476495
すばやさ            0.02991877        -0.05768676        -0.01869739  0.21374007  0.03224141
とくこう            0.12044835         0.04868220         0.04695952  0.33923839  0.20706819
とくぼう            0.09647905         0.10368257         0.06960470  0.28215285  0.27248221
ベビー.TRUE        -0.06969372         0.08299862         0.09873108 -0.08083363 -0.05411117
                            HP    こうげき    ぼうぎょ    すばやさ    とくこう    とくぼう
id                  0.09923346  0.15737344  0.12455689  0.02991877  0.12044835  0.09647905
タイプ1.フェアリー  0.01803452 -0.06942961 -0.01807962 -0.05768676  0.04868220  0.10368257
タイプ2.フェアリー -0.04225532 -0.09379712 -0.01603193 -0.01869739  0.04695952  0.06960470
高さ                0.45481291  0.37780100  0.34198063  0.21374007  0.33923839  0.28215285
重さ                0.43669647  0.39388320  0.44476495  0.03224141  0.20706819  0.27248221
HP                  1.00000000  0.45734070  0.25916947  0.18214278  0.37797890  0.36275722
こうげき            0.45734070  1.00000000  0.45517982  0.33743318  0.31959114  0.21205335
ぼうぎょ            0.25916947  0.45517982  1.00000000 -0.01570222  0.19575978  0.50731303
すばやさ            0.18214278  0.33743318 -0.01570222  1.00000000  0.42834313  0.19383706
とくこう            0.37797890  0.31959114  0.19575978  0.42834313  1.00000000  0.49183224
とくぼう            0.36275722  0.21205335  0.50731303  0.19383706  0.49183224  1.00000000
ベビー.TRUE        -0.07798494 -0.18001819 -0.16117945 -0.12316941 -0.12209312 -0.06462806
                   ベビー.TRUE
id                 -0.06969372
タイプ1.フェアリー  0.08299862
タイプ2.フェアリー  0.09873108
高さ               -0.08083363
重さ               -0.05411117
HP                 -0.07798494
こうげき           -0.18001819
ぼうぎょ           -0.16117945
すばやさ           -0.12316941
とくこう           -0.12209312
とくぼう           -0.06462806
ベビー.TRUE         1.00000000

 散布図は、変数が多すぎてもう何がなんだか分かりません。
 相関係数も、変数が多すぎてあまり相関関係にあるのなさそうなので、ここは大人しく主成分分析に入ります。

 主成分の寄与度と固有ベクトル

Importance of components:
                          PC1    PC2    PC3     PC4     PC5    PC6     PC7     PC8     PC9
Standard deviation     1.8439 1.1388 1.0994 1.01601 0.99981 0.8661 0.83608 0.78534 0.65315
Proportion of Variance 0.3091 0.1179 0.1099 0.09384 0.09088 0.0682 0.06355 0.05607 0.03878
Cumulative Proportion  0.3091 0.4270 0.5369 0.63070 0.72158 0.7898 0.85332 0.90939 0.94817
                          PC10    PC11
Standard deviation     0.56539 0.50041
Proportion of Variance 0.02906 0.02277
Cumulative Proportion  0.97723 1.00000
                           PC1         PC2         PC3          PC4          PC5         PC6
タイプ1.フェアリー  0.01310181 -0.09896964  0.50198117 -0.695248228  0.005515588 -0.40354358
タイプ2.フェアリー  0.03593063 -0.21656198  0.42509481  0.700017978  0.099225043 -0.47510025
高さ               -0.39434419  0.19843507 -0.03163438  0.054247049 -0.315889215 -0.23344326
重さ               -0.37617151  0.42389808  0.02611511  0.065993708 -0.202238955 -0.16243977
HP                 -0.37894755  0.01981707  0.03981352 -0.049897896 -0.240908304 -0.19879253
こうげき           -0.37865420  0.01587516 -0.25003613 -0.004732391 -0.011359489  0.01643803
ぼうぎょ           -0.34602697  0.29818763  0.15616739  0.059779072  0.471140503  0.28760615
すばやさ           -0.21530691 -0.60512094 -0.28738616 -0.002875747 -0.214640725  0.09111143
とくこう           -0.34042762 -0.48188024  0.10049182 -0.028584245 -0.025856397  0.07057967
とくぼう           -0.34187736 -0.17325946  0.40066154 -0.017675535  0.324621785  0.35570016
ベビー.TRUE         0.12522746  0.07924960  0.47319770  0.109924220 -0.645894465  0.51791750
                           PC7         PC8          PC9         PC10         PC11
タイプ1.フェアリー  0.23876929 -0.18375511  0.014813913  0.008903282  0.026923745
タイプ2.フェアリー  0.20460239 -0.05425064  0.023215617  0.011774734 -0.005513166
高さ               -0.29318638 -0.35400313  0.027776104 -0.644285253 -0.140497282
重さ               -0.14902362 -0.24302008 -0.014388058  0.724565443 -0.003474878
HP                  0.01031399  0.76501493  0.297362204 -0.051078117  0.279263963
こうげき            0.70451002  0.08703417 -0.261986560 -0.029277181 -0.469069128
ぼうぎょ            0.26191792 -0.18635816  0.007405588 -0.174944253  0.569830078
すばやさ            0.16676140 -0.37624770  0.458606307  0.131694335  0.231226577
とくこう           -0.28518409  0.06443878 -0.714763104  0.062429367  0.187266442
とくぼう           -0.26384941  0.07068747  0.341345010  0.055138118 -0.515933299
ベビー.TRUE         0.22172779 -0.02550264 -0.058519392 -0.036481004  0.045288097

 今回はPC5辺りでようやく全体の7割程度でしょうか。
 PC1:肝心のフェアリータイプのところの相関係数がかなり低いので、なんとも言えないですが、とりあえず低くて軽い、全体的にステータスの低いポケモンのグループが今回の一番強い傾向として表れているようです。
 PC2:タイプ2がフェアリーでない、重くて高さがあり、とくこうとすばやさが低いポケモンのグループ。(要するに、タイプ2がフェアリーだと、軽くて低い、とくこうとすばやさが高いポケモンが多い?)
 PC3:フェアリータイプで、こうげきとすばやさが低く、とくぼうが高いベビーポケモンのグループ(ププリンとかピィとか??)
 PC4:ぼうぎょ、とくぼうが高く、高さ、重さがあまりないポケモン。そういうポケモン、いるよねー。(フェアリータイプとはあまり関係ありませんでした。)PC5もあまり関係なさそうなので、割愛します。

 続いて、固有ベクトルを図示してみましょう
pokemonPCA8.png

 驚くことに、フェアリータイプであることと「とくぼう」、「ベビー.TRUE」はほとんど直角(相関関係がほとんどない)で、「とくこう」、「すばやさ」に正の相関、「重さ」、「ぼうぎょ」に負の相関があるようです。要するに、フェアリータイプには速くて軽い、「とくこう」が高く「ぼうぎょ」が低いポケモンが多いということですね。

 最後に、伝説のポケモンにはどのような特徴を持つものが多いか調べました。

### 伝説ポケモンにどのようなポケモンが多いかを調べる

# まず項目を絞ったデータフレームを作成する

head(dummy_pokemon2)
legend_data <- dummy_pokemon2[ , c("id", "伝説.TRUE", "高さ", "重さ", "HP", "こうげき", "ぼうぎょ", "すばやさ", "とくこう", "とくぼう", "タイプ1.エスパー", "タイプ2.エスパー", "タイプ1.ドラゴン", "タイプ2.ドラゴン", "タイプ1.フェアリー", "タイプ2.フェアリー", "タイプ1.みず", "タイプ2.みず")]
head(legend_data)

plot(legend_data)   # 散布図
cor(legend_data)    # 相関係数行列


## それぞれの要素と伝説ポケモンについて主成分分析

# 主成分(PC)を作成(scale=TRUEで標準化も行う)
legend_pca <- prcomp(legend_data[-1], scale=TRUE)

## 寄与率の確認
summary(legend_pca)
legend_pca 
# PC1から、伝説ポケモンであるかは高さ、重さ、ステータスと正の相関があり、
# フェアリータイプや水タイプのポケモンはやや少ないことが分かる。
# PC2から、伝説ポケモンにはタイプ1がエスパーであるポケモンが多いことが分かる。
# PC3から、伝説ポケモンには早いドラゴンタイプのポケモンもやや多いことが分かる。

## 固有ベクトルの表示
legend_pca$rotation

## 負荷量行列(元データと主成分の相関)の表示
# 各主成分がどの変数と関連が高いかを把握
cor(legend_data, legend_pca$legend_data)
# 伝説のポケモンであるかは、「重さ」、「高さ」、「とくこう」の順に
# 正の相関が強いと言える。

## バイプロット
biplot(legend_pca)

# ラベルやサイズを整える
biplot(status_pca, xlim=c(-0.15,0.15), ylim=c(-0.1,0.1), xlabs=status_data$id, cex=0.9)

# 伝説ポケモンであるということは、ドラゴンタイプと正の相関があり、
# 進化しないことが多く、
# 意外にもステータスや重さとはさほど相関関係がないことが分かる。

 もう疲れたんで、結論だけ言いますね。伝説ポケモンには進化しないドラゴンタイプが多いです。エスパータイプも多いですよ。

pokemonPCA9.png

Importance of components:
                          PC1     PC2     PC3     PC4     PC5     PC6     PC7     PC8     PC9
Standard deviation     1.9212 1.21838 1.10727 1.06981 1.05851 1.02605 1.01040 0.98751 0.94425
Proportion of Variance 0.2171 0.08732 0.07212 0.06732 0.06591 0.06193 0.06005 0.05736 0.05245
Cumulative Proportion  0.2171 0.30443 0.37655 0.44387 0.50978 0.57171 0.63176 0.68913 0.74157
                          PC10    PC11    PC12    PC13    PC14    PC15    PC16    PC17
Standard deviation     0.93174 0.87221 0.84648 0.74528 0.73026 0.64225 0.55075 0.49323
Proportion of Variance 0.05107 0.04475 0.04215 0.03267 0.03137 0.02426 0.01784 0.01431
Cumulative Proportion  0.79264 0.83739 0.87954 0.91221 0.94358 0.96785 0.98569 1.00000
                            PC1          PC2          PC3         PC4         PC5          PC6
伝説.TRUE           0.297475586 -0.202939086  0.016820325 -0.02936793 -0.17583846  0.027367502
高さ                0.379354734  0.202308043  0.049381468 -0.19681083 -0.03671396 -0.015845364
重さ                0.366300708  0.313155915 -0.140677351 -0.15754676 -0.11942270  0.043420470
HP                  0.355500236  0.044743190  0.033616808 -0.03844553  0.06751596 -0.092893787
こうげき            0.346566597  0.155718087  0.234790710  0.16657549 -0.08600711  0.047548532
ぼうぎょ            0.316888088  0.200508389 -0.391376446  0.17803069  0.02883463  0.172765196
すばやさ            0.211577586 -0.340176392  0.526598653  0.03660821  0.06723848 -0.045444086
とくこう            0.328729728 -0.376184325  0.081006364 -0.01732029  0.17731148 -0.100399855
とくぼう            0.326675563 -0.242402684 -0.347074468  0.17830425  0.20356059 -0.009738809
タイプ1.エスパー    0.033914482 -0.509845557 -0.204472685 -0.24580160 -0.23605689  0.114608947
タイプ2.エスパー    0.024134114 -0.025762820 -0.096280915  0.35209809  0.49346449  0.248134600
タイプ1.ドラゴン    0.093288704 -0.005625547  0.338359241  0.39565747 -0.25138260  0.142383134
タイプ2.ドラゴン    0.123312152  0.198805420  0.007622568 -0.49243858 -0.04741710 -0.219348685
タイプ1.フェアリー -0.007461924 -0.098422678 -0.254633180  0.24735009  0.05273392 -0.814423111
タイプ2.フェアリー -0.021912475 -0.331377403 -0.260128372 -0.24825475 -0.06326408  0.296440686
タイプ1.みず       -0.019451169  0.091506035  0.095415343 -0.27495572  0.65936722  0.114061987
タイプ2.みず       -0.020357658  0.096645558 -0.237685075  0.24368807 -0.23888658  0.192019588
                           PC7         PC8          PC9         PC10        PC11         PC12
伝説.TRUE           0.18157052 -0.02885764 -0.074386123 -0.306154032  0.25249488 -0.617937797
高さ                0.08039624  0.02704974 -0.038614033 -0.133155310  0.25486704  0.090536422
重さ                0.17709440  0.01976030  0.080185214 -0.107749353  0.24646414 -0.042712161
HP                 -0.03121630 -0.09641709  0.139169766  0.004575194  0.24898946  0.567568997
こうげき           -0.18371622 -0.20261666  0.147434689  0.318814982 -0.05617258  0.016636982
ぼうぎょ           -0.05810219 -0.15998366  0.058342674  0.128945413 -0.38978740 -0.242352092
すばやさ           -0.27132899  0.10980726 -0.037108921  0.179175256  0.07180662 -0.262701523
とくこう           -0.17856778  0.15586578 -0.095189278  0.009046197 -0.10961942  0.190211762
とくぼう           -0.03747519 -0.02087860 -0.056232350  0.001544159 -0.33199498  0.004786392
タイプ1.エスパー    0.09267397  0.14626647  0.395055605 -0.314154882 -0.13879155  0.189348858
タイプ2.エスパー    0.36131894  0.52076475  0.005441298  0.129256027  0.28448973  0.004564132
タイプ1.ドラゴン    0.40159133 -0.10579040 -0.436048316 -0.326578501 -0.28611099  0.260801157
タイプ2.ドラゴン    0.07129838  0.50483137 -0.399044190  0.144780106 -0.35030890 -0.016813680
タイプ1.フェアリー  0.06273453 -0.13613976 -0.174494529 -0.067802299  0.17159712 -0.021479669
タイプ2.フェアリー  0.09709052 -0.34744907 -0.516903384  0.406299240  0.27959573  0.095690849
タイプ1.みず       -0.16086747 -0.31514724 -0.164989485 -0.478606425 -0.06855236 -0.035481465
タイプ2.みず       -0.66291365  0.29682327 -0.313216934 -0.291024179  0.22130039  0.081972476
                           PC13        PC14        PC15         PC16         PC17
伝説.TRUE           0.354629493  0.29901030  0.13161600 -0.158794512 -0.033730746
高さ               -0.522867057 -0.18618871 -0.05078670 -0.579377764 -0.162802535
重さ               -0.188296452 -0.12412737  0.04014867  0.734132700  0.056671559
HP                  0.385148173  0.37927961 -0.26661422 -0.080038769  0.268979828
こうげき            0.391975107 -0.35417589  0.17250370 -0.005104295 -0.502618540
ぼうぎょ            0.043099657 -0.20566962 -0.07758699 -0.199669147  0.542322196
すばやさ           -0.175549356 -0.14954353 -0.48317516  0.154142519  0.224849476
とくこう           -0.142910677  0.02527757  0.71906537  0.052958898  0.218170080
とくぼう           -0.234750267  0.37769859 -0.26987510  0.129633738 -0.487944086
タイプ1.エスパー    0.150001450 -0.42321899 -0.15303407 -0.015195500 -0.051923130
タイプ2.エスパー    0.145000603 -0.18985913 -0.02541405 -0.047437522 -0.032025703
タイプ1.ドラゴン   -0.001461525 -0.09282221 -0.05367859  0.055804416  0.054939740
タイプ2.ドラゴン    0.272498176 -0.02033313 -0.10744034 -0.018292184 -0.051700793
タイプ1.フェアリー  0.072872043 -0.31725146 -0.06588868  0.012876804  0.016830188
タイプ2.フェアリー  0.028407883 -0.12835091 -0.03173286  0.022277792  0.001375395
タイプ1.みず        0.159114092 -0.19415800 -0.04692064  0.060818709 -0.049123054
タイプ2.みず        0.077361912 -0.06524566 -0.04732705  0.013943022 -0.041241607

まとめ

 以上です。これから他のものも色々分析してみたいです。
 あとは今後は外れ値なども意識して、精度の高い分析が行えるようにしたいですね。
 そもそもidを分析対象に入れてるのは良くないのではないか、とのご指摘をいただいたので、再度分析しなおして文章を修正します。もしかしたら、これの補足、という形で、別記事として挙げなおすかもしれません。
 過去の記事も改善案がいくつかでているので、改善出来次第更新していこうと思います。

参考サイト

2
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1