はい、どうも。ポケモン剣盾にハマりすぎて研究が進みません。
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)
まとめ
今回はただ単純にポケモンネタでした。
ドラメシア 1強ですね!!