[スマブラSP]ファイターをキャラパラメータで分類してみた!!!(R言語、クラスター分析)

# 概要
この記事では、Nintendo Switch用ソフト大乱闘スマッシュブラザーズSPECIALの全82ファイターをキャラパラメータ(歩行速度や空中速度等)でクラスター分析を用い、運動性能の似ているファイターを統計的に分類します。クラスター分析は多変量解析の手法の一つです。運動性能の使用感には個人差が存在するため、明確に分類できるかはわかりませんが、参考までに読んでいただけると幸いです。また、複数の空中ジャンプを持つファイター等もいるためすべてのキャラパラメータを用いているわけではないです。

# 大乱闘スマッシュブラザーズSPECIALとは
大乱闘スマッシュブラザーズSPECIAL(スマブラSP)は相手ファイターを画面外にふっとばす対戦型アクションゲームです。全82ファイターが参戦していますが、今回集計ではキャラパラメータが同じダッシュファイターは一つとしました。

# 準備(データ収集)
各ファイターのパラメータを収集するために以下のサイトを利用させていただきました。

大乱闘スマッシュブラザーズWiki　https://smashwiki.info/%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa:%e3%83%91%e3%83%a9%e3%83%a1%e3%83%bc%e3%82%bf

スマブラSPECIAL 検証wiki　https://w.atwiki.jp/smashsp_kensyou/pages/30.html

全ファイターの全パラメータはスマブラSPECIAL 検証wikiさんの[スプレッドシート](https://docs.google.com/spreadsheets/d/1UdH2L0xi8dO6jyPCcO5e5-8j7SGzezxkeZuF1uP8uOw/edit?pli=1#gid=963542361)に書かれていましたが、データによっては数値ではないデータも含まれており、今回使用するクラスター分析以外の分析手法も必要となってくるため、全データから運動性能に関するデータのみを抽出することとしました。

今回使用する元データは以下の表のとおりです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253181/7aa2c527-4721-651a-4c80-faf8f0b0909f.png)
運動性能のパラメータとして地上、空中横移動、空中落下、ジャンプ関連のパラメータを考慮しました。
クラスター分析するにあたって、元データを標準化しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253181/55c6a7b9-6e34-594c-6a3c-02f629a6058b.png)
標準化は16個のパラメータの単位をそろえるために行います。
標準化後は各パラメータの分散は1になります。
上記の表を今回使用する解析ソフトであるRStudioで使いやすくするために、下のデータを元データとして用います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253181/03e7fecc-d61f-1e06-72bb-a5e83ac6ac8b.png)
元データはRstudioで読み込むためにcsv形式で出力します。

# 準備(R編)
キャラパラメータを分析するにあたってR言語を使用します。
R言語を使用するために統計解析用ソフトであるR、RStudioをダウンロードする必要があります。
どちらもフリーソフトで、下記のURLからダウンロードできます。

R　https://cran.r-project.org/
RStudio　https://www.rstudio.com/products/rstudio/download/#download

# クラスター分析(RStudioの操作)
**クラスター分析**(cluster analysis)とは、「類似のデータをいくつかのグループに分類する」多変量解析です。クラスター分析でデータを分類する難易度は、明確な分類基準の有無に依存します。
クラスター分析では、分類基準となる変数の数値(今回は16個のキャラパラメータ)を用いて、各ファイターが「どの程度似ているか」という**類似度**(similarity)または、「似ていないか」という**非類似度**(dissimilarity)を算出し、これらをもとにファイターをグループ(クラスター)に分類します。

1. RStudioを立ち上げます。
   下のようなConsoleが出てくると思います。
   コマンドは赤い丸で示している「>」の隣に書きます。　

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253181/a0e2af4c-b13c-95b3-b446-e2624a1977c6.png)

2.　RStudio作業用ディレクトリの確認もしくは変更します。
作業用ディレクトリ確認コマンド   

```
getwd()
```
作業用ディレクトリ変更コマンド  

```
 setwd("パス名")
```

作業用ディレクトリ確認コマンドをConsoleに打ち込みます。
作業用ディレクトリが分かるので、そのディレクトリにcsv形式の元データを入れておきます。
もしくは、setwd("パス名")で作業用ディレクトリを変更可能です。

3.　Rstudioに元データを読み込み
　　その後、Consoleに下記のコマンドを打ち込みます。

```
 (データ名)<-read.csv("(ファイル名)",header=T)
```
実際の画面は下のとおりです。
　　保存するデータ名を「sp1」にして、元データのファイル名は「sp1.csv」で保存していたので、下のようになります。
　　header=Tとなっていますが、これは元データの「ファイター名」や「歩行加速」といったセルをデータと認識させないためです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253181/50d5eb50-a01f-a4dd-a7d1-17e66600ad88.png)

　　すると、元データがRStudioに取り込まれます。
　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253181/4bc5d2ac-2434-825e-3002-1d767f065e3a.png)

4.　非類似度の導出
データの非類似度を導出するコマンド　

```
dist()
```    
実際の画面は下のとおりです。
sp1の1列目はファイター名を書いているので、sp1[,2:17]と指定します。
変数distance_sp1に非類似度を代入しておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253181/89fa9075-bdfb-3564-aace-a4f1d2f5fca0.png)

5.　デンドログラム作成
デンドログラム作成コマンド　

```
hclust(distance_sp1, "ward.D2")
```
上記でdistance_sp1に非類似度を代入しています。
ward.D2はクラスター間の距離算出方法の一つであるウォード法を示しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253181/2927ca2a-e9ba-aad2-9cd7-d9f2adff9cc6.png)
plotより下のようなデンドログラムが作成できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253181/9114275d-27c1-fdbe-51ee-45606b5f2366.png)
しかし、これではどの数字がどのファイターかわからないため、下の処理をします。
ファイター名を記入し、見やすくなります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253181/d7caf154-830e-a7d6-e411-d29bdd53a0e7.png)
これによりわかりやすいデンドログラムが作成できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253181/6f8625e0-8e09-354b-0542-7e31107a9391.png)
縦軸が非類似度を表しています。近いファイターほど似ていることになります。
わかりやすいところで行くとリュウとケンであることからファイターの非類似度は小さいです。(リュウとケンはダッシュファイターであるがキャラパラメータは異なる)
また、むらびととしずえはダッシュファイターではないものの運動性能はよく似ており、むらびととしずえの非類似度は最も小さいです。

デンドログラムを適当な距離で切断するために下記の関数を用います。
クラスター分割関数　

```
cutree()
```

分割するクラスター数を7とすると、下のとおりになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253181/ece058b4-219e-1033-180a-96a5b484edc5.png)

k=をh=とすることで、デンドログラムの高さに変更できます。
分割のイメージは下のとおりです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253181/e16f732c-2b75-7943-d433-7411dd988413.png)
分割すると、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253181/c1b5ac9d-1ad7-a487-212b-ab163c4166cb.png)
となり、グループ番号でソートすると、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253181/4e182f81-8fbb-4f2d-948c-3fef2b5ad2bb.png)
となり、図示すると、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253181/49bf620f-9a88-0913-0f30-46eb71e362c7.png)
ここでグループ番号による優劣はないです。
まず大前提として、今回はスマブラSPECIAL 検証wikiさんの[スプレッドシート](https://docs.google.com/spreadsheets/d/1UdH2L0xi8dO6jyPCcO5e5-8j7SGzezxkeZuF1uP8uOw/edit?pli=1#gid=963542361)のデータを全て使っているわけではありません。
そのうえで、結果を見るとリュウとケン、むらびととしずえは直感的にも似ているとは思いますが、実際解析してみると運動性能が近いことが近いことがわかります。
運動性能が近いからなのかはわかりませんが、個人的にむらびとを使うプレイヤーやしずえを、リュウを使うプレイヤーはケンを使用することもあるような気がします。
ネスとリュカの非類似度も小さいですが、むらびととゼルダの非類似度の方が小さいことがわかります。空中でふわふわとした挙動を取るファイターは多くいますが細かく見ると多少は散らばっているように見えます。
ベレトが他のファイターとの非類似度が大きくグループに分割した際に孤立するという結果になりました。
僕個人のスマブラ素人の見解ではある程度は直感通りな気がしますが、スマブラをやりこんだプレイヤー目線で見ると違った見方もあると思います。
また、個人の使用感によって運動性能に対する感覚は人それぞれであり、今回のような見解を不自然に捉える方がいても普通だと思います。
スプレッドシートの全データを使っていないとはいえ、今回の結果のようにグループ分けがされていることを見ると大乱闘スマッシュブラザーズのファイターバランスの良さがわかるような気がします。

# まとめ
・ファイターの運動性能に関連するキャラパラメータからファイターを7つのクラスター(グループ)に分類しました。
・分類後の各クラスター(グループ)を見るとある程度直感と似ている気がする。

# あとがき
今回はスマブラspのファイターを分類してみました。
直感とは概ね似ている結果となって面白かったです。
出力した結果に対してもうちょっと良い考察ができたらよかったと思いました。
また、スプレッドシートのデータを全て使うためには数量化理論等が必要かと思われます。
いろいろなサイトを参考にさせていただきました。ありがとうございます。
最近、いろいろな方がスマブラspの統計的な考察をしていて楽しく読ませていただいてます。
自分も何かできたらと思い書かせていただきました。
あくまで今回のような見方もできるかも程度で読んでいただけると幸いです。

お読みいただきありがとうございました。