Pythonでクロス集計を実行
こんにちは。データ事業2部の友利です。
クロス集計とは項目を2つ以上かけ合わせて集計する分析手法であり、ビジネスシーンで活用される機会も少なくありません。
性別、年代別をかけ合わせて顧客数を数えたクロス集計などは、割りとお見かけすることがあるかと思います。
クロス集計を行うツールとして馴染みがあるのがExcelのピボットテーブル機能ですがプログラミング言語の1つであるPythonでもクロス集計を行うことができます。
今回はPythonでクロス集計を実行する方法について紹介していきます。
実行環境
Windows10(64bit)
jupyter notebook(Jupyter Notebookを利用してお手軽分析環境構築)
使用データ
下記データ(log2017.csv)を用いてヒストグラムを作成します。
購入月 | 購入商品 | 性別 | 年代 | 購入金額 |
1月 | 水筒 | 男性 | 20代 | 2000 |
1月 | 水筒 | 男性 | 40代 | 1900 |
1月 | フライパン | 女性 | 20代 | 2100 |
1月 | 水筒 | 男性 | 30代 | 2100 |
1月 | 鍋 | 女性 | 40代 | 2200 |
1月 | フライパン | 女性 | 40代 | 3200 |
2月 | 水筒 | 女性 | 20代 | 2300 |
2月 | 鍋 | 男性 | 40代 | 1800 |
2月 | フライパン | 女性 | 30代 | 2900 |
2月 | 水筒 | 女性 | 30代 | 2800 |
クロス集計実行手順
まずは、クロス集計作成に必要なライブラリとデータ(log2017.csv)の読み込みます。
import pandas as pd df = pd.read_csv("log2017.csv")
ここからクロス集計表の作成部分です。
作成するには
pd.pivot_table( [データフレーム名], values="①_集計したい項目", index="②_行に設定したい集計キー", columns="③_列に設定したい集計キー", aggfunc="④_集計方法" )
とコードを書きましょう。
コード内の①~④については下図Excelのピボットテーブルのフィールド機能の各設定項目箇所を示しております。
例えば、クロス集計表の「行」部分に「購入月」を設定したい場合は
values=”購入月”
と引数を設定する必要がある、ということです。
それでは、各クロス集計表の作成を進めていきましょう。
1.購入月×性別(集計したい項目が「購入金額」合計の場合)
pd.pivot_table(df, values="購入金額", index="購入月", columns="性別", aggfunc="sum")
このコードを実行することで下記クロス集計表が表示されます。
2.購入月×年代(集計したい項目が「購入金額」合計の場合)
「columns=”性別”」の部分を「columns=”年代”」に変更する以外は1.購入月×性別と同様のコードです。
pd.pivot_table(df, values="購入金額", index="購入月", columns="年代", aggfunc="sum")
このコードを実行することで下記クロス集計表が表示されます。
3.購入月×性別×年代(集計したい項目が「購入金額」合計の場合)
3項目以上かけ合わせたクロス集計も可能です。下記コードを書き、実行してください。
pd.pivot_table(df, values="購入金額", index="購入月", columns=["性別", "年代"], aggfunc="sum")
下図のExcelピボットテーブルのフィールド機能の「列」部分のように列に設定したい集計キーを複数指定したい場合は[ ]を利用します。
このコードを実行することで下記クロス集計表が表示されます。
実行結果を見ると、「NaN」 が気になるので0に変換します。
変換するには
fill_value=0
を引数に追加します。
pd.pivot_table(df, values="購入金額", index="購入月", columns=["性別", "年代"], aggfunc="sum", fill_value=0)
引数を追加したら、コードを実行してください。
これで完成です。
4.購入月×購入商品×性別×年代(集計したい項目が「購入金額」合計の場合)
「index=”購入月”」の部分を「columns=”年代”」に変更する以外は3.購入月×性別×年代と同様のコードです。
pd.pivot_table(df, values="購入金額", index=["購入月", "購入商品"], columns=["性別", "年代"], aggfunc="sum", fill_value = 0)
このコードを実行することで下記クロス集計表が表示されます。
5.購入月×性別(集計したい項目が「購入商品」数の場合)
今までは集計したい項目を「購入金額」の合計としてきましたが、合計以外、例えばある項目の個数をカウントしたい場合もあるかと思います。その場合は
aggfunc=”count”
とすることで集計の方法をカウントに変更することができます。
下記コードを書き、実行してください。
pd.pivot_table(df, values="購入商品", index="購入月", columns="性別", aggfunc="count", fill_value = 0)
これで完成です。
まとめ
以上、Pythonでクロス集計を作成する方法をお伝えしました。
クロス集計作成以外の普段Excelで行っている内容についても、Pythonを利用すると簡単にできる場合があるかもしれません。今回の記事をきっかけに、ぜひ試してみてください。
DATUM STUDIOは、クライアントの事業成長と経営課題解決を最適な形でサポートする、データ・ビジネスパートナーです。
データ分析の分野でお客様に最適なソリューションをご提供します。まずはご相談ください。
Contact
Explore Jobs
関連記事