見出し画像

『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')

画像1

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を表記することで、凡例に表示されます。

画像2

今回の学びのまとめ

○groupbyで、まとめたい列が複数ある場合、リスト型で指定可能

○pivot_tableは、行と列を、indexとcolumnsで指定する。また、valuesでは集計したい数値列、aggfuncには集計方法を指定する。

○可視化の流れは、

①集計済みのデータを作成
②そのデータを用いてグラフ描画

という手順。

○matplotlibのグラフ描画は、横軸、縦軸の順に指定。今回は、横軸をリスト型に変換して渡している。縦軸は列を指定して渡している。また、labelを表記することで、凡例が表示される

サポート、本当にありがとうございます。サポートしていただいた金額は、知的サイドハッスルとして取り組んでいる、個人研究の費用に充てさせていただきますね♪