LoginSignup
5
5

More than 3 years have passed since last update.

Pythonを使ったポケモン種族値の絞り込み検索

Last updated at Posted at 2020-06-24

ポケモン対戦でトリックルームを使用できるポケモンを探したいと思ったのですが、どのポケモンを使用するか迷っていました。
まず、トリックルームを使用する際に後行になるので相手からの攻撃に耐えられるポケモンが良いかなと思い種族値で素早さが低くて、防御や特防が高いポケモンを探したいと思いました。そこでcsvデータからプログラミング言語のPythonを使って絞り込んで検索しようと思いつきました。

事前に準備すること

・ExcelまたはNumbersのインストール
・Anacodaのインストール
・PythonとPandasのインストール

手順

① csvファイルのダウンロードと作成
ポケモンの種族値のcsvファイルは下記のURLからダウンロードできます。
https://www.kaggle.com/abcsds/pokemon
このcsvファイルは7-8世代ポケモンのデータが入力されていません。また、英語表記なのでポケモンの名前も英語名になっているので多少扱いにくいところもあります。

8世代のポケモン(剣盾内登場ポケモン)は下記のURLからデータをコピーして若干手間がかかりましたが、Excel上で表を整えてcsvファイルにしました。
https://wiki.ポケモン.com/wiki/種族値一覧_(第八世代)

② Pythonで種族値の絞り込み
まずcsvファイルからデータを読み込んでみます。インストールしたcsvファイルのアイコンをドラッグして画面の左のファイルリストに入れます。次に以下のコードをAnacodaのJupyterLabで入力してみます。

import pandas as pd
df = pd.read_csv("Pokemon.csv")
df

すると画面上で以下の図のようにリストが表示されると思います。

スクリーンショット 2020-06-16 14.47.48.png

次に伝説を除いたエスパータイプのポケモンを絞り込んでみたいと思います。次のコードを入力してみます。

df.loc[(df.Legendary == False) & (df["Type 1"] == "Psychic")]

すると以下の画面のように伝説以外のエスパータイプのポケモンのリストが表示されたと思います。

スクリーンショット 2020-06-16 14.52.30.png

そして、先ほどの絞り込んだリスト結果を引き継いでさらに防御種族値が60以上で素早さが65以下のポケモンを検索するために以下のコードを入力します。

df = df.loc[(df.Legendary == False) & (df["Type 1"] == "Psychic")]
df.loc[(df.Defense >= 60) & (df.Speed <= 65)]

入力した結果、かなり絞り込めたと思います。

スクリーンショット 2020-06-16 15.01.23.png

最後に以下のコードを入力して防御種族値を降順に並び替えれば終了です。

df = df.loc[(df.Defense >= 60) & (df.Speed <= 65)]
df.sort_values(by = ['Defense'], ascending = False)

スクリーンショット 2020-06-16 15.04.13.png

まとめると、以下のコードを入力すれば簡単に結果が出てくると思います。

import pandas as pd
df = pd.read_csv("Pokemon.csv")
df = df.loc[(df.Legendary == False) & (df["Type 1"] == "Psychic")]
df = df.loc[(df.Defense >= 60) & (df.Speed <= 65)]
df.sort_values(by = ['Defense'], ascending = False)

最後に

英語名だとポケモンがわかりにくかったのでURLからコピーしたリストで作成した日本語名のcsvファイルも読み込んで同様に絞り込んでみました。ファイル名をPokemon_data.csvにして下記のコードを入力すると結果が出てきます。

import pandas as pd
df = pd.read_csv("Pokemon_data.csv")
df = df.loc[(df.伝説 == False) & (df["タイプ1"] == "エスパー")]
df = df.loc[(df.防御 >= 60) & (df.素早さ <= 65)]
df.sort_values(by = ['防御'], ascending = False)

スクリーンショット 2020-06-16 15.37.40.png

わかったことはブリムオンとムシャーナは素早さが同程度に低くて防御と特防も高かったのでトリックルームを使うポケモンの候補になると自分の中で解釈しました。

他にもゴーストタイプでトリックルームが使えるポケモンもいたりするので同様にコードを入力して探してみるのもいいかもしれません。

あとがき

Pandasを使ったコードの練習は下記のURLで勉強できます。プログラミングの勉強の参考にすると良いと思います。

5
5
0

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
5
5