こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!
目次
ピボットテーブルとは
ピボットテーブルとは、多様なデータの中からあるデータ断面を切り出し、分析しやすい形式に変換したテーブルです。マーケティングや財務用途で用いられる等様々な側面で応用されてます。
【Python×Pandas】ピボットテーブル作成・データ集計
Pythonを用いたピボットテーブルの作成手順を下記に示します。順を追ってプログラミングしていきましょう。
- サンプルデータ読込
- pandas.pivot_table()メソッドでピボットテーブル作成
- 引数を駆使して多様な目的に応じたピボットテーブル作成
サンプルデータ読込
ピボットテーブルを作成する上で必要なデータを読み込みます。今回はサンプルとして下記を記述します。
import pandas as pd
from io import StringIO
import numpy as np
# ピボットテーブル作成用データ
csv_data = \
'''
No 名前 性別 年齢 購入回数 出身
1 田中 女 20代 1 東京
2 佐藤 女 30代 2 東京
3 山田 男 30代 4 大阪
4 高橋 男 40代 5 大阪
5 田口 女 30代 1 北海道
6 伊藤 男 30代 8 北海道
7 大野 男 30代 6 東京
8 松永 男 40代 1 東京
9 入江 女 50代 7 大阪
'''
# データフレーム
df = pd.read_table(StringIO(csv_data),sep='\s+')
Pandas.pivot_tableメソッドでピボットテーブル作成
ピボットテーブルはPandasライブラリのpivot_table()メソッドを用いて作成します。まずは、下記に示すような最小限必要な引数を指定し、テーブルを作成してみましょう!ここでデータ算出方法のデフォルトは「平均値」であり、変更したい場合はaggfuncで指定できます。
pandas.pivot_table(data,
index="行のデータ項目",
columns="列のデータ項目",
values="値",
aggfunc='mean'
)
以下プログラムの具体例を示します。
ピボット集計|行「性別」・列「年齢」・値「購入回数(平均値)」
コード
pd.pivot_table(df,
index=["性別"],
columns=["年齢"],
values="購入回数",
aggfunc="mean"
)
出力イメージ
ピボット集計|行「出身と性別」・列「年齢」・値「購入回数(平均値)」
コード
pd.pivot_table(df,
index=["出身","性別"],
columns=["年齢"],
values="購入回数",
aggfunc="mean"
)
出力イメージ
ピボット集計|行「性別」・列「出身と年齢」・値「購入回数(平均値)」
コード
pd.pivot_table(df,
index=["性別"],
columns=["出身","年齢"],
values="購入回数",
aggfunc="mean"
)
出力イメージ
【Python】ピボットテーブルの引数を駆使して多様なデータ集計を実現
続いてpivot_table()メソッドの引数を理解し、分析の目的に合わせてピボットテーブルを加工できるようになりましょう。引数を全て与えた場合、下記のように記述できます。
コード
pandas.pivot_table(data,
index=None,
columns=None,
values=None,
aggfunc='mean',
fill_value=None,
dropna=True,
margins=False,
margins_name='All',
observed=False,
sort=True
)
Pandas.pivot_tableメソッドの引数一覧
スクロールできます
引数名 | 概要 | デフォルト |
---|---|---|
data | データ元 | 必須 |
index | 行の項目 | 必須 |
columns | 列の項目 | 必須 |
values | 値 | 必須 |
aggfunc | 値の算出方法 | “mean” (平均) |
fill_value | Null値を何で補完するか | None |
dropna | 全ての値がnullの列の削除要否 | True |
margins | 小計表示要否 | False |
margins_name | 小計の名前 | “All” |
observed | カテゴリ値で適用 | False |
sort | ソート要否 | True |
引数調整によるピボットテーブル作成|データ準備
利用頻度の高い引数を用いてピボットテーブルを作成します。引き続きデータには下記を利用しますため、事前に記述しておきましょう。
import pandas as pd
from io import StringIO
import numpy as np
# ピボットテーブル作成用データ
csv_data = \
'''
No 名前 性別 年齢 購入回数 出身
1 田中 女 20代 1 東京
2 佐藤 女 30代 2 東京
3 山田 男 30代 4 大阪
4 高橋 男 40代 5 大阪
5 田口 女 30代 1 北海道
6 伊藤 男 30代 8 北海道
7 大野 男 30代 6 東京
8 松永 男 40代 1 東京
9 入江 女 50代 7 大阪
'''
# データフレーム
df = pd.read_table(StringIO(csv_data),sep='\s+')
ピボット集計|小計項目追加
コード
pd.pivot_table(df,
index=["性別"],
columns=["年齢"],
values="購入回数",
margins=True,
margins_name="小計"
)
出力イメージ
ピボット集計|集計方法の調整「最大・最小・平均・中央・合計」
コード
pd.pivot_table(df,
index=["性別"],
columns=["年齢"],
values="購入回数",
aggfunc="sum"
)
出力イメージ
集計方法は用途に応じて下記のように指定可能です。
スクロールできます
算出方法 | 記述例 |
---|---|
最大値 | aggfunc = “max” |
最小値 | aggfunc = “min” |
平均値 | aggfunc = “mean” |
中央値 | aggfunc = “median” |
合計値 | aggfunc = “sum” |
ピボット集計|Null値の補完方法(例:Null→0に値変換)
コード
pd.pivot_table(df,
index=["性別"],
columns=["年齢"],
values="購入回数",
fill_value=0
)
出力イメージ
【参考】Pythonでのデータ前処理・分析・可視化
当サイトではPythonを用いた「データ前処理手法」「データ分析」「グラフや表を用いた可視化」手法について幅広く解説しております。AI・機械学習にも応用できる内容となっておりますため、興味がある方は併せてご確認下さい。
Pythonを活用したデータ処理・分析手法一覧
【参考】Pythonとは・できること一覧
Pythonでできること・副業案件の探し方
「Pythonで実現できるお役立ち情報」を多数配信中!Python習熟者向けに「おすすめのPython副業・フリーランス案件の探し方」についてもご紹介してます。
最後に
お問い合わせフォーム
上記課題に向けてご気軽にご相談下さい。
お問い合わせはこちら