PythonでPandasのピボットテーブルの実装をポケモンを例にしてしてみる

スポンサーリンク

今回は、PythonのPivot Tablesについてです。

Pandasモジュールのpivot_table関数を用いて実装します。

スポンサーリンク

ピボットテーブルとは

ピボットテーブルは、Microsoft Excelの重要な機能であり、Excelを企業で普及させた理由の1つです。

ピボットテーブルは、データの分析を実行するための大きな柔軟性を提供します。

列を行に、行を列に変換することができます

任意のパラメータでグループ化できるため、パンダのGroupby関数と混同されやすい。

ピボットテーブルは、多次元版の GroupBy 関数だと考えてください。

Pythonでピボットテーブルを実装するためのステップ

さっそくPythonでピボットテーブルを実装してみましょう。

1. 好きなデータセットを読み込む

今回はPokémon with statsのデータセットを分析します(Kaggleからダウンロード)。

データセットはこちらで入手できます。

また、「ポケモンって何?」という方のために、こちらのリンクから確認できます。

ポケモンが好きかどうかに関係なく、この記事から100%得ることができます。

全部捕まえなきゃ…。

import pandas as pd
 
#importing the dataset
data = pd.read_csv('Pokemon.csv')
data.head()
DataFrame.pivot_table(data, values=None, index=None,columns=None, aggfunc='mean')

2. 2. pivot_table()メソッドの構文

df.groupby(['Type 1'])[['Speed']].mean()

データフレームに対して pivot_table メソッドを呼び出したら、メソッドに渡される重要な入力引数を分解してみましょう。

  • データ – 集計関数を適用する数値列です。
  • インデックス – 行として変換したい列。
  • 列 – 列として保存したい列変数。
  • aggfunc – データに対して実行する操作のタイプ。

例題を出せば、もっと分かりやすくなるはずだ。

3. Python による pivot_tables の実装

例えば、タイプ1に属するポケモンのスピードの平均を求めるとします。

pandasの Groupby を使えば簡単にできますが、同じ出力は pivot_table を使えばもっときれいなコードで簡単に得られます。

それぞれの例で、ゆっくりとpivot_tableの全貌を探っていきましょう。

df.pivot_table('Speed' , index = ['Type 1'], aggfunc = 'mean')

pivot_table`を使用した同様の結果

df.pivot_table('Speed' , index = ['Type 1'] , columns= ['Legendary'] , aggfunc = 'mean')
df['speed_range'] = pd.cut(df['Speed'] , [0,40,60,80,120] , include_lowest=True)

4. ピボットテーブルを使った平均速度の算出

しかし、ここで、タイプ1のポケモンを伝説と非伝説に分類して、それぞれの平均速度を求めろと言われたら。

df.pivot_table('Speed' , index = ['Type 1'] , columns= ['speed_range','Legendary'] , aggfunc = 'mean')
Dataset
Dataset

じゃーん たった1行のコードで、期待通りの結果を得ることができました。

平均して、伝説のポケモンの方が非伝説のポケモンより速いことに気づかざるを得ませんでした。

ここで重要なのは、インデックスとしてType 1カラムが必要なので、pivot_tableメソッドのindex引数に渡しました。

しかし、タイプ1のポケモンは伝説か非伝説のどちらかに属しているので、データフレームを変形して、それぞれのタイプの平均速度を表示するようにしました。

これで、伝説と非伝説がデータの特徴になりました。

新しいデータのカラムとして「Legendary」特徴が必要なので、 columns パラメータに渡すだけでよいのです。

それでは、データセットを少し変更して、新しい分析を行ってみましょう。

ここでは、新しく追加された機能として Speed 変数のビンを作成します。

Result With Gropuby And Pivot Table
Result With gropuby And Pivot Table

Legendary機能とSpeed range機能に基づいた平均速度を示すデータフレームを出力してみましょう。

Mean Speed Legendary Vs Non Legendary Pokemons
Mean Speed Legendary Vs Non Legendary Pokémon’s
Legendary As Well As Range Of Speed As Columns
Legendary As Well As Range Of Speed As Columns

Titanicのデータセットでpandasのpivot_tableを試すと、このトピックの練習を補完することができますので、ぜひ試してみてください。

Pythonのピボットテーブルは簡単なトピックではありませんが、その利点を考えると、分析ツールキットの中にこの知識を必ず入れておく必要があります。

練習あるのみです。

まとめ

この記事では、Pandasのpivot_tableをデータセットに実装することで、いくつかのアイデアを得ようとしました。

これは、groupby操作の多次元版であることがわかりました(概念的に言えば)。

タイトルとURLをコピーしました