1
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

マジカル交換200回やってみた【ポケモン剣盾】

スクリーンショット 2019-12-10 11.51.21.png

はい、どうも。ポケモン剣盾にハマりすぎて研究が進みません。
Dasonと申します。よろしくお願いします。

さて、私が卒業した現象数理学科には、学生発の学年間交流LTの「#MS_NCLT」というものがあります(というか、僕らが作った)。そこで私が今年発表した内容なのですが、その裏にPythonの基礎集計を学ぶ良い題材があったので、Qiitaにまとめていこうかな、と思います。

技術的な話は...

  • pandasで簡単な集計
  • matplotlibで横軸ラベルが斜めな棒グラフを描く
  • matplotlibで日本語を利用する

になります。簡単なのしか使わないです。

ポケモン剣盾「マジカル交換」

ポケモンをやったことのある方ならお馴染みですね、マジカル交換。
(最近まで「ミラクル交換」だと思ってました。アローラ!)

世界中の誰かとランダムに接続して、その人と1回だけポケモン交換をするという機能です。

相手から何が来るか分からないのが良さでもあり、怖さでもあります。

200回やってみた

マジカル交換に流れて来るポケモンは
よっぽど不要なポケモン or 孵化厳選の余りポケモン
になります。

実験日は11月30日。発売から2週間しか経っておらず
いわゆる「ガチ勢」が孵化厳選をしまくっている時期で、良い個体が多く流れて来る期間でもあります。

つまり、
この時期にマジカル交換に流れてくるポケモンを見れば
今作の強いor人気なポケモンが分かるのではないか?

と思ったわけです。

そこで、200回。
交換しては、手元に来たポケモンをメモっていく。
〆切3日前の論文要旨執筆と〆切5日前のレポート執筆をしながら
およそ8時間。頑張りました。

さぁ、集計するぞ!!!

Pythonの登場

200回交換を記録したファイルをNCLT_pokemon.csvと名付けました。ここには、上から順に手元に来たポケモンが羅列されています。

これをpythonで読み込んで、集計していきます。
まずは使うパッケージを宣言。

import numpy as np
import pandas as pd
import collections
import matplotlib.pyplot as plt
%matplotlib inline

そしたら、csvを読み込む。

df = pd.read_csv('NCLT_pokemon.csv')

データの中身を見てみましょう。

#データフレームdfからランダムに3つ抽出する。
df.sample(3)
ポケモンたち
21 ロゼリア
10 ベロバー
89 ワンリキー

こんな感じ。

では、各ポケモンが何回手元に来たか、集計します。collectionsの中のCounterを使えば、一瞬で数えてくれます。

c = collections.Counter(np.array(df['ポケモンたち']))

このcには、集計結果がもう入っています。
ただ、このままでは非常に見辛いので、pandasで整形してあげましょう。

#Counterが辞書になっているので、それをDataFrameに変換する。
num_poke = pd.DataFrame.from_dict(c, orient='index')
#ついでに列名を指定する
num_poke.columns = ['出現回数']
#出現回数順にソートする。
num_poke_sort = num_poke.sort_values('出現回数', ascending=False)

これで整形完了です。
Top5をみてみましょう!

num_poke_sort.head(5)
出現回数
ドラメシア 12
コイキング 9
ミミッキュ 6
ヒバニー 6
ガラルポニータ 5

というわけで、200回の結果
ドラメシアが12回で1位でした!
新600族で強いですもんね〜

最後にプロットしてみましょう。
ポケモンの名前を日本語にしているので、matplotlibを日本語対応させるライブラリ japanize-matplotlib を使います。インストールは

pip install japanize-matplotlib

からできます。
では、描画しましょう。

import matplotlib.pyplot as plt
import japanize_matplotlib

#図の画面サイズを指定
plt.figure(figsize=(30,5))
#棒グラフを描画
plt.bar(np.array(num_poke_sort.index), num_poke_sort['出現回数'])
#横軸のラベルを70度回転して見やすく
plt.xticks(rotation=70)

できました。
image.png

まとめ

今回はただ単純にポケモンネタでした。
ドラメシア 1強ですね!!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
1
Help us understand the problem. What are the problem?