ポケモンのデータセットを発見したので分析してみた!【Pythonによるデータの可視化も解説】

ポケモンのデータセットを発見したので分析してみた!【Pythonによるデータの可視化も解説】

こんにちは。TATです。

今日もPythonによるデータ分析の事例をご紹介していきます。

今回のテーマはみんな大好き「ポケモン」です!

ポケモンについてまとめられたデータセットを見つけたので、これをPython使って分析してみました。

伝説のポケモンがいかに強いかをみてみたり、各タイプでどのポケモンが一番強い/弱いのかをみてみたり、各タイプごとの特徴等をみてみました。

ついでに、今回はPythonによるデータの可視化についても少し触れます。

今までは結果だけど紹介していましたが、「どんな感じで書けばいいのかコードを知りたい」というリクエストをいただいたので、これに答えていこうと思います。

ただ、完全遊び用のコードなので汚いです。あらかじめご了承くださいw

ポケモンのデータセットを発見したので分析してみた!【Pythonによるデータの可視化も解説】

ポケモンのデータセットを発見したので分析してみた!【Pythonによるデータの可視化も解説】

1. ポケモンのデータはKaggleからゲットできます

今回用いたポケモンのデータの入手元はKaggleというサイトです。

Kaggle公式サイトより

 

Kaggleはデータ分析のコンペを運営しているサイトで、データが与えられて、それを参加者が分析して結果を競い合います。

優勝者には、賞金が贈られたり、開催企業の就職面接を受ける権利などが与えられます。

GoogleやFacebook、日本企業ではメルカリなどもKaggleによるコンペを企画しています。

さらに他の参加者のコードも見ることができるので、分析手法はコードの書き方を学ぶ場としても最適です。

ある程度の基礎知識があれば、あとは人のコードを見ながら学ぶことは効率的に学ぶポイントです。

ただ、Kaggle は基本的に英語サイトなので、英語が読めないとしんどいです・・・

 

そしてポケモンのデータはこちらになります。

→ The Complete Pokemon Dataset

ちなみにデータをダウンロードするには登録(Register)が必要です。

第7世代までの合計800匹のポケモンデータが含まれています。

今回はこちらのデータを使って分析していきます。

 

2. データの全体像を把握する

それではここから実際にデータを見ていきます。

まずはデータを全体像をチェックします。

ここで見るべきは、Nullデータがあるか、どのような分布をしているのか等です。

一応Pythonによる可視化についても解説していきたいので、コード付きのスクショで紹介していきます。

まずはダウンロードしたCSVファイルを読み取って中身を見てみます。

残念ながら全て英語になってしまいますが、なんとなくわかりますよね。

左から順に、図鑑番号、名前、タイプ1、タイプ2、合計、HP、攻撃、防御、特殊攻撃、特殊防御、スピード、世代、伝説です。

 

データの全体像を見るためにはPandasのDescribeとInfoを使います。

Describeを見てみると、データ数は800個で、さらに各カラムの平均や標準偏差などもわかります。

パッと見た感じだと、攻撃、防御、特殊攻撃のばらつきが少し大きいように見えますね。

ここではなんとなくの把握で問題なしです。

 

さらに各カラムごとの関係を一気に見るには、可視化モジュールであるseabornのpairplotが便利です。

ワンコマンドで全数値データの関係を見ることができます。

細かくてすみませんw

ただ、これを見ると各カラムのデータ間の関係と、各カラムのヒストグラムをまとめてみることができるのでとても便利なんです。

ここで面白いのが、基礎能力値の合計のヒストグラムのピークが2つあることです。

正規分布になると思っていたのですが、かなり違った結果になりましたw

3. 日本語名を取得する

データの全体像を見てきましたが、1つだけ大きな問題があります。

それは「英語名がわからん」ということですw

Kaggleは英語サイトなので、提供されているデータも基本的には英語です。

そりゃそうですよねw

ということで、我々がより馴染んでる日本語名をつけていきます。

 

ググってみたところ、Wikipedia先生がしっかりとまとめてくださっていたのでこちらを利用します。

→ ポケモンの外国語名一覧

中国語とか韓国語とかもありますねw

 

このページをPythonでスクレイピングして、和訳するための辞書を作ります。

こんな感じです。

こんなに短いコードで書けてしまうPythonはやっぱりすごいです。

ちなみに大文字小文字などの揺らぎをなくすために、全て小文字に変換しました。

データをざっとみると、例えば、ホウオウがHo-ohとHo-Ohという2種類の表記があったので、小文字で統一して回避します

 

作成した和訳辞書を使って、元データに合体します。

これもワンコマンドで一瞬でできます!

 

しかし、結果を見てみると、対応する日本語名が存在しないものもありますね。

調べてみると95個ありました。

そしてこの原因はメガ進化とか形態変化したポケモン達でした。

いつしかから、メガ進化とかいう謎もシステムが加わりましたよね。

さらにデオキシスとかだと色々な形態に変化して戦っていたことを聞いたことがあります。

僕はルビー・サファイア(第3世代)までしかプレイしてないので、その後のポケモン事情はよくわかりませんw

 

ここでは、メガ進化とかの特殊な状態は除外して、通常形態のポケモンだけで見ていくことにしました!

日本語名がNoneになってる部分を除外したらデータセットの完成です。

95個のデータが除外されて、705個になりました。

データを見てみると、もともと標準偏差が大きめだった攻撃、防御、特殊攻撃がかなり下がりましたね。

メガ進化とかを使うと、これらの値が飛躍的にアップしていたことが想像できます。

 

さらに次に先ほどはpairplotで見てみましたが、次は各カラムの相関係数をヒートマップで見てみます。

色の濃淡によって相関の強さが一発で見えるようになるので、データの全体像を眺めるときに便利です。

Totalとの相関を見てみると、防御や特殊防御の相関が高いことがわかります。

そして伝説のポケモンとの相関もぼちぼちありますね。

 

次に各能力値のヒストグラムを見てみます。

先ほどはpairplotで見たので、小さくて見ずらかったと思うので、次はヒストグラムだけで表示します。

コードは一部だけですが、これを各カラムに繰り返せば表示できます。

Totalはやはりピークが2つある謎の形状になっていることがわかります。

その他は概ね正規分布のように見えますね。

 

次に能力値以外のデータについてざっくりみてみます。

ここでは各値の個数だけを可視化してみました。

Type 1をみると、水タイプとノーマルタイプが多いことがわかります。

そこから少し減って、草タイプとむしタイプと続いていますね。

意外だったのが、ひこうタイプがやたらと少ないことです。

 

対照的にType 2を見ると、持っていないポケモンが圧倒的に多く、持っている場合だとひこうタイプが圧倒的に多いことがわかります。

Type 1で少ないタイプは、Type 2では概ね多くなっている傾向になっており、ここでうまくバランスをとっていそうな感じがします。

4. 各タイプごとにデータを見る

ここからはこれまでにまとめたデータを色々な角度から見ていきましょう。

まずは、ポケモンのタイプごとに能力値を見ていきます。

これを可視化するためには、seabornのボックスプロットを利用します。

ボックスプロットを使うと、データの大まかなばらつきを見ることができます。

日本語では箱ひげ図と言われてます。(詳細はこちらをどうぞ)

 

合計値(Total)をタイプごとに見てみる

まずはTotalをタイプ別にボックスプロットで見てみます。こんな感じです。

Type 1を見てみると、やたらとドラゴンタイプが強いことがわかりますね。

中央値で見ると、かくとうタイプとドラゴンタイプが強いことがわかります。

特にかくとうタイプは、箱ひげで見ると中央値が異常に高いことがわかります。

これは、かくとうタイプでは全体的に強いポケモンが多くて、たまに雑魚キャラがいる感じです。

 

ただ箱ひげ図だけだと、全体的なデータのばらつきはわかっても、データの分布はわかりません。

こういう場合にはstripplotと組み合わせると便利です。こんな感じです。

点が集中していると該当するデータ(つまりポケモン)がたくさんいることを示しています。

 

さらに分布を見る別の方法としてviolinplotがあります。

データ数が多いと横幅が大きくなり、少ないと細くなるので、データの分布を把握することができます。

ただ、これだと中央値とかは見れないので、その場合は箱ひげ図などを使う必要があります。

この辺はやはり各チャートにメリットとデメリットがあります。

 

各能力値のタイプごとに見る

次に各能力値を見ていきます。

まずはType 1ごとの平均値をざっくりとみてみましょう。

やっぱりTotalで見るとドラゴンタイプが最強ですね。

一番弱いのはむしタイプです。

 

これだけだと、データのばらつきがわからないので、それぞれの能力値を箱ひげ図で見ていきます。

 
HP

HPは、ゴーストタイプがやたら低いこと、ノーマルタイプで吹っ飛んで高いポケモンがいることがわかります。

 

Attack

攻撃は、やはりかくとう、じめん、いわ、ドラゴンあたりが強いですね。

イメージ通りです。

 

Defense

防御は、じめん、いわ、はがねが高いことがわかります。

これも想像通りですね。

 

Sp. Atk

特殊攻撃は、ほのお、でんき、エスパー、ドラゴンなどが高いですね。

Type 2だとほのおがダントツで高いことがわかります。

とりあえずドラゴンタイプはどれも強いですね。

 

Sp. Def

特殊防御はフェアリー、エスパー、ドラゴンあたりが強いですね。

フェアリーについては当初はなかったでタイプなので、よくわかりませんw

 

Speed

スピードはでんきやひこうタイプが高いことがわかります。

そしてフェアリーは圧倒的に低いですね。

5. やはり伝説のポケモンは強い

伝説のポケモンとそれ以外で比較する

さて、ここまでで各タイプごとの特徴をざっくりと見てきました。

次にみんな大好きな伝説のポケモンを見ていきます。

僕も初めてポケモンのゲームをした際には、サンダー、フリーザー、ファイアーをゲットした時には嬉しかったものです。

ここでは本当に伝説のポケモンは強いんかということを見ていきます。

これを見るためには、ヒストグラムを伝説のポケモンとそれ以外で比較してみていきます。

一目瞭然ですよね。

ブルーで表示されている伝説のポケモンはその他のポケモンに比べて圧倒的に強いことがわかります。

各能力値でみると、非伝説のポケモンが優っている場合もありますが、Totalでみるとえげつない差ですね。

これは公式の大会では伝説のポケモンが禁止されることも納得ですw

 

(おまけ)Type 2があるポケモンとないポケモンで比較する

ここまでデータを見てきた中で、「Type 2を持つポケモンの方が強いのかな〜」とふと疑問が湧いてきたので、チェックしてみることにしました。

Type 2に値があれば1、なければ0というカラムを追加します。

こんな感じでワンコマンドで書くことができます。

このhas Type 2カラムでデータを比較してみます。

結果を見てみると、そこまで差がないことがわかります。

しかし一つだけ疑問が解消されました。

それがTotalのピークが2つあることです。

これをみると、Type 2を持つポケモンと、そうでないポケモンでそれぞれピークを形成していることがわかります。

これらを合わせると、ピークが2つになっていることがわかります。

何気ない疑問から見ただけだったのですが、1つの疑問の答えを得ることができました。

6. 各能力値・タイプごとの最強・最弱ポケモンを見る

次に最強・最弱ポケモンを見ていきます。

 

各能力値ごとの最強・最弱ポケモン

まずは各能力値ごとで見ていきます。

これをみると、ほぼ伝説のポケモンで支配されていることがわかります。

なので、伝説のポケモンを除外した上で見ていきます。

Totalでみると圧倒的にケッキングが強いですね。

2位以降は大差なしです。

もう新しいポケモンが多すぎてわからないのですが、少なくともカイリューとかバンギラスは僕でもわかります。

知っているポケモンが入ってくれててよかったw

 

次に最弱ポケモンを見ていきます。

コイキング、ヒンバス、キャタピー、ビードルなどおなじみな雑魚キャラが勢ぞろいです。

さらにHPでは最強だったラッキーは、攻撃と防御がクソ雑魚であることわかります。

なかなか扱いにくいポケモンです。

 

各タイプごとの最強・最弱ポケモン

次にタイプごとの最強・最弱を見ていきます。

ここではType 1のみで見て、それぞれのNo1を見てみます。

まずは最強ポケモンです。

これは可視化が難しかったので、表でお見せします。見にくくてすみません。

ご覧の通り。ほぼ伝説のポケモンです。

 

ゆえに先ほど同様に、伝説のポケモンを除いた状態で見てみます。

これからポケモンを始める方はこの中から育てるポケモンを選ぶと良いのではないでしょうか。

僕が好きだったウインディやクロバットやメタグロスも入っていました。

当時選んでいたポケモンは間違っていなかったことがわかって満足ですw

 

次に各タイプの最弱ポケモンを見ていきます。

おなじみの雑魚ポケモンが並んでいますね。

基本的には進化前のポケモンばかりで、進化するとかなり強くなるポケモンが多いように感じます。

この辺は、制作会社の方でもバランスを考えていたんですかね。

 

以上で、ポケモンのデータ分析はおしまいです。

7. Pythonならデータ分析・可視化が簡単にできます

ここまでご紹介したデータ分析は全てPythonというプログラミング言語を利用しています。

Pythonはデータ分析やAI関連に強くて、世界中で人気を集めている言語です。

すっきりとしたコード体系で、誰でもきれいなコードが書けるような設計になっています。

過去の記事では、データ分析としてPythonをご紹介している記事や、Pythonでできることをまとめたものがありますので、もしPythonにご興味があれば合わせてご覧ください。

【人気上昇中】今人気のプログラミング言語「Python」は何ができるのか?できることまとめます【転職でも有利です】

2020年6月14日

【いますぐ始められます】データ分析をするならPythonが最適です。【学習方法もご紹介します!】

2019年11月10日

 

さらにプログラミングの学習方法についてもまとめた記事もあります。

プログラミング学習は独学とプログラミングスクールどちらにすべきか?【結論、全部試すべし!】

2020年6月12日

プログラミングの独学にUdemyをおすすめする理由!【僕はUdemyでPythonを独学しました!】

2020年4月22日

【挫折しないために!】プログラミングを学習するためには目的意識が重要!途中で挫折する人の特徴とは?

2020年2月24日

 

Pythonに限らず、プログラミングを学んでいると転職時やキャリアアップでも有利に働きます。

僕は独学でPythonを習得して、今では仕事でもPythonをバリバリ使っています。

もしプログラミングに少しでも興味があれば、是非ともチャレンジしてみてください。

【迷っている方へ!】プログラミングに興味を持ったらとりあえずやってみよう!

【迷っている方へ!】プログラミングに興味を持ったらとりあえずやってみよう!

2020年7月21日

【副業は神です】2度の転職において副業が内定の決め手になったお話。

2019年11月23日

まとめ

いかがでしたでしょうか。

ここでは、Kaggleでゲットしたポケモンのデータセットを分析した結果をご紹介しました。

こういった分析結果をもとに育てるポケモンを決めるのも面白いと思います。

Pythonを使うと誰でも簡単にここで紹介したような分析ができるのでオススメです。

個人的には、ポケモンバトルの勝敗予測とかもできたら面白いなと思います。

そういったことができるデータがあればちょっと試しみたいと思います。

 

ここまで読んでくださって、ありがとうございました。