NI+C SAS<第7弾>&「自動分析」で伝説ポケモンたらしめる特徴を探索してみた
投稿者:SASソリューション担当
日本情報通信株式会社のSAS担当です。
SAS Visual Analytics on SAS Viyaに「自動分析」機能が存在していることはご存じでしょうか?
「自動分析」機能では予測(説明)したいターゲットに対して最も影響を与える要因を特定したり、そのターゲットを説明づけるための条件を文章で表現してくれたりと、とても便利な機能です。
今回はKaggleサイトで公開されているポケモンデータ(801匹)を使って、「伝説ポケモン」の特徴を「自動分析」機能を使って探索していきたいと思います。
「伝説ポケモン」とは、ゲーム内の神話などに登場し特別な扱いをされているポケモンのことで、ゲーム内で1匹だけ入手可能なとても強力で珍しいポケモンです。
筆者は第1世代と言われる「赤緑青」しかやったことないのでミュウツーしか知らないのですが、特定の場所でしか捕まえられないレアポケモンで、捕まえた時点で即戦力になるくらい全ての戦闘能力が圧倒的に高いポケモンだった記憶があります。(あの手この手使っても捕まえられず、攻略本買ってあっさり捕まえた時はあっけないものでした)
なんとなく他のポケモンとの違いはありそうな気はしますが、実際に伝説ポケモンってどんな特徴があるの?という視点で定量的、定性的に表現していきたいと思います。
目次
1.データの準備
2.データの探索
3.自動分析
4.まとめ
1.データの準備
まずは今回使用するデータを準備していきます。
今回はこちらのブログで紹介されている無料SASトライアル環境を使用していきます。使用するアプリケーションは「探索とビジュアル化」で、こちらはSAS Visual Analyticsの機能が提供されています。
まずはローカルにあるポケモンデータ(pokedex.csv)をSAS Visual Analytics on SAS Viyaに取り込んでいきます。
ローカルからインポート後、使用可能なデータソースからデータ数や列名など概要をみることができます。
ポケモンは801匹で、14列のポケモンに関する情報がありました。列名はすべて英語で表記されていますが、日本語にすると上から「図鑑番号」、「名前」、「攻撃」、「防御」、「身長」、「HP」、「オスの割合」、「特殊攻撃」、「特殊防御」、「すばやさ」、「タイプ」、「体重」、「世代」、「伝説」でしょうか。
ポケモン図鑑に載っていそうなデータが揃っていますね。
気になるところをグラフで可視化していきましょう。
2.データの探索
まずは「伝説(is_legendary)」です。こちらが今回ターゲットとなる変数で、伝説ポケモンであるかそうでないかが0、1の値で表現されています。(下処理としてメジャーからカテゴリに変換しています。)
キャンバス上へドラッグ&ドロップし、自動チャートで棒グラフを作成します。
伝説ポケモンは801匹中70匹いるようです。約9%が伝説ポケモンです。(伝説の割には割と多め)
次に「世代(generation)」です。こちらもキャンバス上へドラッグ&ドロップし、自動チャートでヒストグラムを作成します。(今回はメジャー変数なので、自動的にヒストグラムが作成されました。)
「第7世代」までのポケモンデータでした。ちなみに第1世代は151匹ですね。(ラララ言えるかなぁ~のあれです)
次に「攻撃力」のようなポケモンの特性に関する数値データ同士の関係性を確認しておきます。使うのは「攻撃(attack)」、「防御(defense)」、「HP(hp)」、「「特殊攻撃(sp_attack)」、「特殊防御(sp_defense)」、「すばやさ(speed)」です。メジャーセクションにあるこれらを同時に選択し、キャンバス上へドラッグ&ドロップ。自動チャートで相関行列を作成します。
一番相関が高いのは「防御」と「特殊防御」、次いで「攻撃」と「特殊攻撃」でした。その他はそれほど相関は強くないですが、正の相関はあるようなので、どの能力もバランスよく高いということなのかもしれません。ただし「すばやさ」と「防御」は相関が無いようなので、それ限りではないですね。
ちなみに、これらの能力に関する値は「種族値」というもので、ポケモンの種類ごとの基準値のようなものらしく、実際にはポケモンのつよさは種族値以外にゲーム中の経験値などで決まるのですが、種族値も大切な1つのステータスになっているとのこと。
では最後にこの種族値が「伝説」別に違いがあるのか確認します。
6つの種族値(攻撃、防御、HP、特殊攻撃、特殊防御、すばやさ)と「伝説」を使って箱ひげ図を作成します。先ほどまでと違って箱ひげ図は自動チャートではできないので、オブジェクトペインより箱ひげ図を選択して作成します。
箱ひげ図をキャンバスにドラッグ&ドロップしたのち、データの役割からカテゴリに「伝説」、メジャーに「攻撃」、「防御」、「HP」、「特殊攻撃」、「特殊防御」、「すばやさ」を選択します。
オプションペインでグラフの見た目(箱の向きを横向き、外れ値表示、平均値表示)を変更して完成!
普通のポケモンは中央値は70前後ですが、伝説ポケモンは100前後と数値が高く、普通ポケモンに比べて能力が高いことが伺えます。中にはHPが200越えの強者もいますね。
それほど種族値の説明力が強いということであれば、ポケモンの強さを総合的に評価する値を持った変数を作っておくと良さそうです。データペインから「新しいデータアイテム」-「計算アイテム」を選択し、計算式を設定します。
計算式は以下のように6つの種族値の合計値とし、「種族値」という新しい変数を作成します。
分布を見てみます。
0~800の値で分布が描かれました(なんとなく2つの山が見えるのが気になる…)。尚、ミュウツーは「780」で全ポケモンの最高値でした。さすが初代伝説ポケモン、作者の思いが伝わります。
では、これらの変数を使って伝説ポケモンたる由縁を「自動分析」の機能を使用して探索していきます。
3.自動分析
データペインより「伝説」を右クリックし、「説明」-「新しいページで説明」をクリック。すると、
新しいページにターゲット変数である「伝説」に関する分析レポートが自動で表示されました。
たったこれだけ。簡単ですねぇ~。
画面の解説をしていきます。画面は大きく5つの表現がされています。
1)まず右上にある0、1ボタン。これは注目したいイベントに切り替えるためのボタンで、今回は「伝説ポケモン」の特徴を探索するので「1」に合わせておきます。
2)その左には「is_legendaryの特徴は何ですか?」と書かれており、内容は、『全てのポケモンの内、「伝説ポケモン」は8.74%(70/801)存在し、関連する因子は「種族値」、「オスの割合(percentage_male)」、「攻撃(sp_attack)」である。』とのこと。この分析のサマリ情報が表記されています。
3)その下にある棒グラフは、ターゲット変数に対する変数の関連度合い(相対的な大きさ)を表現しており、視覚的にとらえることができます。
先ほどの説明にも書かれているように、一番関連性が大きいのは「種族値」なのですが、次いで「オスの割合」も同じくらい関連性が大きいようです。
4)その右にあるのは(3)で選択した変数(上の写真だと「種族値」を選択中)の普通ポケモン(0)、伝説ポケモン(1)別のヒストグラム(もしくは棒グラフ)を表示しています。
「種族値」については伝説ポケモンの場合、普通ポケモンに比べて数値が大きい傾向にあります。「オスの割合」については伝説ポケモンの場合、欠損、に多くのデータが集まっていることが分かります。
尚、「オスの割合」とはその名の通りオスの割合のこと。第2世代以降ポケモンにオスメスが追加され、ポケモンによってオスメスの割合が異なるようです。また、性別不明なポケモンも存在し、欠損はそのことを示していると思われます。
5)最後、左下にあるのグラフは伝説ポケモンの確率が高くなる(低くなる)グループが文章で表現されています。
一番確率の高いグループは『「種族値」が569以上で「オスの割合」が0、100または欠損』であり、94.37%(71匹中67匹)がそのグループに属するようです。かなり高い的中率ですね~。
このように「自動分析」の機能を使うことで、様々な観点で伝説ポケモンの特徴を捉えることができます。結果、伝説ポケモンは「種族値」が高く、かつ性別不明(もしくは異性がいない)という特徴があることが分かりました。やはり伝説ポケモンは能力が高くて謎めいたポケモンなんですねぇ~。(ポケモン図鑑のミュウツーも性別不明となっています。)
4.まとめ
ポケモンが好きな方からするとそりゃそうだ、という結果になったのかもしれませんが、ポケモン無知な筆者からすると、オスの割合が上位に食い込んでいたのが意外な結果でした。
また、この結果を違う観点でみるとすると、例えば伝説ポケモングループに属された普通ポケモンは誰かを見てみても面白そうです。
先ほど上げたグループ(「種族値」が569以上で「オスの割合」が0、100または欠損)で見てみると、普通ポケモンの4匹が伝説ポケモングループと判断されていました。
name | type | generation | height_m | percentage_male | weight_kg | 種族値 |
Metagross | steel | 3 | 1.6 | . | 550 | 700.00 |
Gallade | psychic | 4 | 1.6 | 100 | 52 | 618.00 |
Kangaskhan | normal | 1 | 2.2 | 0 | 80 | 590.00 |
Silvally | normal | 7 | 2.3 | . | 100.5 | 570 |
きっとこのポケモンはゲームの中でも伝説ポケモンに次いで希少なポケモンとして扱われているのではないでしょうか。(詳しい方がいたら聞いてみたいものです。)
ご覧いただきありがとうございました。