ポケモンプログラミングしてるといくつかの有名どころのサイトからデータを収集することになる。具体的には以下のようなサイト。
- ポケモン徹底攻略
- 言わずと知れた、ポケモン情報の総本山。
- PokéAPI
- ポケモンのデータをRESTで提供してくれるサイト。最近はGraphQLもやってるらしい。英語。
- ポケモンバトルデータベース
- ポケモンホームで閲覧できるような、ランクバトルに関する情報を閲覧できるウェブサイト。
それぞれ便利なのだけど、難儀するのがポケモンのIDにそれぞれ互換性がないこと。No.25 ピカチュウのようにポケモンには全国図鑑番号というのが振られていて、基本的にはこれでいいのだけど、リージョンフォーム(同種のポケモンでも登場する地方によって姿や能力が違う)やフォルム(同じ個体でも持たせるアイテムなどによって姿や能力が違う)違いがあり、これのナンバリング方法が統一されていないということだ。
対応しないデータを見つけるたびに手動で修正するのに飽きてきたので、一旦統一データを作ることにした。その名もPOKEMON_ALL。
どんな感じかは表を作ったので見てもらえるといいですなwww
リポジトリのREADMEにもあるとおり、以下のカラムがありますなwwぜひ利用する以外ありえないwww
yakkuncom_id
- ポケモン徹底攻略のIDですぞwww
yakkuncom_name
- ポケモン徹底攻略における名前ですぞwwあくまで参照用ですなwwwこれをキーにするのはありえないwww
pokeapi_id
- PokéAPIのIDですぞwww
pokeapi_name
- 同上あくまで参照用ですなww
pokedbtokyo_id
- ポケモンバトルデータベースにおけるIDですぞwww
- どうやらsvサブドメインでも未収録ポケモンのデータが閲覧できるようですなww
作り方
データの結合やらなんやらで面倒だったので、pandasでいろいろやることにした。RDBにおけるいわゆるJOINが簡単にかけるので助かった。
PokéAPIが最もデータのカバレッジが多そうなので、残り2つのサイトはこれとJOINする。とはいえ実用的には徹底攻略に対応するデータがあれば十分なこともわかっている。
手順としては、
- それぞれのサイトからポケモンの変種(フォルムとか)込みのIDを取得。
- 変種がない種族はそのまま全国図鑑番号でJOINできる。
- 変種がある場合は変種を手動で正規化してJOIN。
- 徹底攻略⇔PokéAPI: 手作業で文字列の変換テーブルを作った。これは楽しかった。
- ポケモンバトルデータベース⇔PokéAPI: バトルデータベースはポケモンの区別を画像でするしかないので、画像とPokéAPIにおける名前の対応をスプレッドシート上で確認した。これは大変だった。
今後新ポケモンの追加が来ても生成できるようにMakefileを書いておいたけど、こんど決定版の図鑑が出るので映画が来るまではさすがに新ポケモンもないんじゃないかな……。次のナンバリングが出るまでには存在ごと忘れてる可能性があるので場合によっては引き取ってください。