18. Pandasでデータ分析

Pandas ピボットテーブルの作成(クロス集計)

更新日:

ピボットテーブルは、データの集計や分析において、大変重要なツールになります。ピボットテーブルでは、縦軸と横軸、集計値を選択し、クロステーブルで集計結果をすることにより、様々な角度からデータを確認することができます。
 
上のピボットテーブルでは、縦軸に顧客、横軸に商品、集計値として売上を表示しています。このようにクロステーブルで結果を表示することによって、どの顧客のどの商品が売れているか、売れていないかを視覚的に確認することができます。この記事では、Pandasにおけるピボットテーブルの作成方法について、確認していきましょう。

 

著書紹介(清水 義孝)

好評発売中!!

事前準備 - CSVファイルの読み込みと結合

それでは実際にピボットテーブルを作成していきます。ここでは売上ヘッダ情報、売上明細情報を元にピボットテーブルを作成し、販売組織、顧客、製品毎の売上を分析する例をみていくことにしましょう。まずは事前準備として、必要なデータをCSVファイルから読み込みます。
 
最初に売上ヘッダ情報が格納されているCSVファイル「T_Sales_Header_pv.csv」をDataFrame df_sales_headerに読み込みます。(※CSVファイルは上のリンクから取得してください。)

In [1]: import pandas as pd
...: df_sales_header=pd.read_csv("T_Sales_Header_pv.csv",
...:                                                   index_col=["Sales_No"])
...: df_sales_header
Out[1]:

 
次に売上明細情報が格納されているCSVファイル「T_Sales_Item_pv.csv」をdf_sales_itemに読み込みます。(※CSVファイルは上のリンクから取得してください。)

In [2]: df_sales_item=pd.read_csv("T_Sales_Item_pv.csv",
...:                                                   df_sales_item=pd.read_csv("T_Sales_Item_pv.csv",
...: df_sales_item
Out[2]:

 
そして作成した2つのDataFrameを前の章で学んだ左外部結合で結合しdf_salesに格納します。

In [3]: df_sales=pd.merge(df_sales_item, df_sales_header, how="left", on="Sales_No")
...: df_sales.head()
Out[3]:

 
このようにして作成したdf_salesを確認すると、マスタの値がコードで示されており、このままピボットテーブルを作成しても、分析には苦労しそうです。そこでマスタの値も読み込み、名称を表示するようにしましょう。Customer、Product、Sales Organizationの3つのマスタを順に読み込んでいきます。
 
まず最初にCSVファイル「M_Customer.csv」を読み込み、df_customerに格納します。(※CSVファイルは上のリンクから取得してください。)

In [4]: df_customer=pd.read_csv("M_Customer.csv", index_col=["Customer_ID"],
...:                                          encoding="SHIFT-JIS")
...: df_customer.head()
Out[4]:

 
次にCSVファイル「M_Product_pv.csv」を読み込み、df_productに格納します。(※CSVファイルは上のリンクから取得してください。)

In [5]: df_product=pd.read_csv("M_Product_pv.csv", index_col=["Product_ID"],
...:                                          encoding="SHIFT-JIS")
...: df_product
Out[5]:

 
最後にCSVファイル「M_SalesOrganization.csv」を読み込み、df_sales_orgに格納します。(※CSVファイルは上のリンクから取得してください。)

In [6]: df_sales_org=pd.read_csv("M_SalesOrganization.csv", index_col=["Sales_Org"],
...:                                          encoding="SHIFT-JIS")
...: df_sales_org
Out[6]:

 
df_salesに対して、これら読み込んだマスタを左外部結合します。

In [7]: df_sales = pd.merge(df_sales, df_customer, how="left", on="Customer_ID")
...: df_sales = pd.merge(df_sales, df_product, how="left", on="Product_ID")
...: df_sales = pd.merge(df_sales, df_sales_org, how="left", on="Sales_Org")
...: df_sales.head()
Out[7]:

 
このようにして、df_salesに対してマスタも結合し、名称も表示されるようになりました。以上で準備が終わり、いよいよピボットテーブルの作成に取り掛かります。
 
 

著書紹介(清水 義孝)

好評発売中!!

ビボットテーブルの作成(クロス集計)

先ほど準備したDataFrame df_salesを元にピボットテーブルを作成していきます。
 
DataFrameのJoinの結合には、mergeを使います。2つのDataFrameをそれぞれ、df1、df2とすると、以下のように記述します。

df1.pivot_table(values = "集計値", index = “行”, columns = "列")

引数valuesには、集計する値が格納された項目を指定します。
 
また引数indexには行を、columnsには列に表示される項目を指定します。項目が複数ある場合は、listで指定します。
例えば、indexに指定する項目が1つの場合、index = “項目1” と指定し、2つ以上の場合、index = [“項目1”, “項目2”, …] というようにlistで指定します。
 
それではピボットテーブルを作成していきます。まずは顧客、製品毎の売上を見ていきましょう。集計値には”Amount”、行には"Customer_Name"、列には"Product_Name"を指定します。

In [8]: df_sales.pivot_table(values="Amount", index="Customer_Name",
...:                                          columns="Product_Name")
Out[8]:

このようにして作成されたピボットテーブルから、顧客、製品毎の売上が確認でき、例えば、iPod shuffleは佐々木商店によく売れている、海山商事に販売している商品の中ではiPhone 6が売上が高いなどがわかります。
 
さらに分析軸を増やし、行に"Sales_Org"を追加してみましょう。引数indexにはlistで["Sales_Org_Name","Customer_Name"]を渡します。

In [9]: df_sales.pivot_table(values="Amount",
...:                                          index=["Sales_Org_Name","Customer_Name"],
...:                                          columns="Product_Name")
Out[9]:

上記のピボットテーブルでは、販売組織、顧客、製品毎の売上が確認できるようになりました。このようにしてピボットテーブルでは、行や列に項目を増やしたり、集計値を変えてみたりして、様々な切り口からデータを分析することができます。
 
 
関連記事です。
Pandasの中心となるDataFrame(データフレーム)については、次の記事で詳しく解説しております。

 

-18. Pandasでデータ分析

Copyright© AI-interのPython3入門 , 2019 All Rights Reserved.