PythonTech Blog 

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は、クライアントの事業成長と経営課題解決を最適な形でサポートする、データ・ビジネスパートナーです。
データ分析の分野でお客様に最適なソリューションをご提供します。まずはご相談ください。