ポケモンのデータセットを使ってデータ分析練習[Python]

programming.jpg

こんにちは

kaggleでポケモンのデータセットがありました。

子供のころ、ゲームを一生懸命やった記憶があります。

今回はこれを使って、データ分析の練習をしたい思います。

使用するライブラリ

以下のライブラリをインポートします。

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

データの統計量や図示による比較を行うので、これらをインポートしておきます。

データを用意

ポケモンのデータは以下のサイトから、お借りします。

データを見ていく

ファイルの読込

pd.read_csv()でファイルの読込を行います。

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

要約情報を見る

info()メゾットでデータ要約情報を取得します。

df.info()

DataFrameでデータが入っていることがわかりますね。

Nameの列から、800匹分の情報が入っていることがわかります。

今はポケモンの数がそんなに増えているんですね。

データの中身を見てみる

データがどのようなに入っているのか、見てみましょう。

df.head()

名前やタイプがなどが英語で入っているんですね。

気になったポケモンは都度、検索してみましょう。

ヒストグラムで種族値のばらつき具合を見る

ヒストグラムで種族値の合計(Total)のばらつき具合を見ていきましょう。。

ヒストグラムはplot.hist()を使用して、描画します。

また、参考に種族値の中央値はどのぐらいかを図示します。

plt.axvline(x=df['Total'].median(),color="red")#Totalの中央値に赤いラインを引く
df['Total'].plot.hist(figsize=(12,10),grid=True,bins=60)#ヒストグラムを描画
plt.xlabel("Total")#X軸に名前をつける
plt.ylabel("count")#y軸に名前をつける

図示してみると、種族値にばらつきがありますね。

ただ山がいくつかあるのが分かります。

また種族値がやけ高い、右端のポケモンがいますね。

この辺りを見ていきましょう。

種族値の高い順に並べる

種族値の数値順に並べるためにはsort_values()を使います。

このままだと数値が低い物から順番に表示されてしまいますので、引数にascending=Falseを与えます。

それでは、種族値が高い順に上から20のキャラクターを見ていきましょう。

#Totalが大きい物順に並べて、上位20を表示
df.sort_values(by='Total',ascending=False).head(20)

種族値の上位になっているポケモンは、伝説のポケモンかメガ進化したポケモンが多いですね。

伝説やメガ進化したポケモンが強いのは、当然のような気がしますね…

不要な条件を削除する

伝説やメガ進化したポケモン以外で強い誰なのか。

気になりますよね。

Falseのみ抽出する

データの中のLegendaryで、伝説かそうでないかを判断しています。

今回は伝説以外のキャラを抽出したいので、LegendaryがFalseのキャラクターのみ抽出します。

df_Leg_F=df[df["Legendary"]==False]#Legendaryの列がFalseのみ抽出
df_Leg_F.sort_values(by='Total',ascending=False).head()#種族値が高い順に並べる

Legendaryの列がFalseと等しい物を抽出したことで、伝説のポケモンたちを削除することができました。

特定の文字列以外を抽出する

次に、メガ進化に関係するポケモンを削除したいと思います。

メガ進化後のポケモンは文字列にMegaが含まれるので、ここに着目していきましょう。

文字が含まれているかどうかの判断は、str.contains()を使います。

df_Leg_F[~df_Leg_F['Name'].str.contains('Mega')]#Megaが含まれる行以外を抽出

条件抽出に「~(チルダ)」を記載することで、Megaが含まれる行以外を抽出することができました。

余談ですが、Megaが含まれる行を抽出したい場合は、以下のコードを実行します。

df_Leg_F[df_Leg_F['Name'].str.contains('Mega')]#Megaが含まれる行を抽出

「~(チルダ)」を除いてあげれば、Megaの文字が含まれる行のみ抽出してくれます。

箱ひげ図でばらつきを確認する

箱ひげ図を用いて、種族ごとに種族値に差があるのか見ていきましょう。

箱ひげ図はboxplot()を用いることで描画することができます。

#TotalとType1を抽出して、Type1ごとに表示。
#figsizeでグラフのサイズを指定
df[["Total","Type 1"]].boxplot(by="Type 1",figsize=(12,10))
plt.title("Strength by Type")#タイトル
plt.ylabel("Total")#y軸の名前
plt.xlabel("Type 1")#x軸の名前
plt.show()#図を描画

Dragonタイプのポケモンが全体的に強いですね。

それ以外は伝説やメガ進化するキャラクターに引っ張られて、最大値が伸びているようですね。

反対に虫タイプや毒タイプのポケモンは全体的に低い印象を受けますね。

種族値の観点からみると不遇に見えますね。

箱ひげ図をSeabornで描画する

Seabornを使って箱ひげ図を描画します。

Seabornを利用することで、鮮やかなグラフを描画できます。

また、どのようなデータの配置になっているかも見ていきましょう。

コードは以下を記載します。

plt.figure(figsize=(12,10))#描画するグラフのサイズを指定
sns.boxplot(x="Type 1", y="Total", data=df)#箱ひげ図を描画
sns.swarmplot(x="Type 1", y="Total", data=df, color=".25")#データポイントを描画
plt.title("Strength by Type")#タイトル
plt.ylabel("Total")#y軸の名前
plt.xlabel("Type 1")#x軸の名前
plt.show()#図を描画

Seabornを使用することで、各タイプの範囲が見やすくなりました。

データポイントも合わせて描画することで、分布もわかるようになりましたね。

より見やすいデータを作りたいという方は、下記のSeabornの公式を参照してください。

最後に

子供のころに遊んでいたポケモンをデータの観点から見るというのも面白いですね。

今では新しいポケモンやメガ進化などが追加されて強いポケモンが増えているのがわかりました。

個人的には自分がよく使っていたポケモンが思ったより弱かったので、ちょっと残念でした(笑)

データ分析において、可視化をすることでポケモンの強さの分布が一目でわかるようになるのは便利ですね。

今後も、面白いデータを見つけては勉強がてら分析していきたいですね。

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA