『Python実践データ分析100本ノック』ノック9〜10
今回は、『Python実践データ分析100本ノック』で学んだことをアウトプットします。
groupbyでまとめたい列が複数ある場合
月別かつ商品別に、売上の合計値、数量を表示します。
今回のように、まとめたい列が複数ある場合、groupbyでは、リスト型で指定することができます。
join_data.groupby(['payment_month', 'item_name']).sum()[['price','quantity']]
pivot_tableによる集計
上記のgroupbyでは、少し表示が直感的に理解しにくいので、pivot_tableを使用して集計してみます。
pd.pivot_table(join_data, index='item_name', columns='payment_month',
values=['price', 'quantity'], aggfunc='sum')
pivot_tableは、行と列を指定することができます。今回は行に商品名、列に年月データがくるように、indexとcolumnsで指定しています。
valuesでは集計したい数値列(price、quantity)、aggfuncには集計方法(sum)を指定しています。
商品別の売上推移を可視化する
月別、商品別の売上推移をグラフにしてみます。
可視化の流れとしては、まずは集計済みのデータを作成し、そのデータを用いてグラフ描画となります。
graph_data = pd.pivot_table(join_data, index='payment_month', columns='item_name',
values ='price', aggfunc='sum')
先ほどと、index、columnsに指定するものを入れ替えています。その結果、payment_monthはデータフレーム型のindexとして、商品名は列として作成できます。
グラフを作成する際には、横軸にpayment_monthを、縦軸にgraph_dataの該当商品を渡すことで描画が可能となります。
import matplotlib.pyplot as plt
%matplotlib inline
plt.plot(list(graph_data.index), graph_data['PC-A'], label='PC-A')
plt.plot(list(graph_data.index), graph_data['PC-B'], label='PC-B')
plt.plot(list(graph_data.index), graph_data['PC-C'], label='PC-C')
plt.plot(list(graph_data.index), graph_data['PC-D'], label='PC-D')
plt.plot(list(graph_data.index), graph_data['PC-E'], label='PC-E')
plt.legend()
1、2行目は、matplotlibの読み込みと、Jupyter-Notebook上で表記するためのコードです。
matplotlibのグラフ描画は、横軸、縦軸の順番に指定します。横軸は、payment_monthなので、graph_data.indexで呼び出しており、リスト型に変換して渡しています。
縦軸は商品ごとの売上なので、graph_dataの列を指定して渡しています。labelを表記することで、凡例に表示されます。
今回の学びのまとめ
○groupbyで、まとめたい列が複数ある場合、リスト型で指定可能
○pivot_tableは、行と列を、indexとcolumnsで指定する。また、valuesでは集計したい数値列、aggfuncには集計方法を指定する。
○可視化の流れは、
①集計済みのデータを作成
②そのデータを用いてグラフ描画
という手順。
○matplotlibのグラフ描画は、横軸、縦軸の順に指定。今回は、横軸をリスト型に変換して渡している。縦軸は列を指定して渡している。また、labelを表記することで、凡例が表示される