前回の続き
まず、月次で集計するため、ログの日付とインストールした日付の月の列を追加する。
追加する方法は、対象となる日付を文字列化し、年月までの部分を切り出すようにする。
ある列のデータから別のデータに変化するには、apply
が使えそうなので、
以下のようにして、lambda式を使用して変換する。
次に、新規/既存ユーザー別で集計を行うために、新規ユーザーかどうかを判断するカラムを追加する。
ここでいう新規ユーザーはインストールした月とログインした月が同じ場合、その月の新規ユーザーとしているようだ。
ここで、準備がそろったので、月別での新規/既存ユーザーの購入金額の合計を集計する。
集計をする際は、groupby
を使用する。引数には、グルーピングする列を配列で指定する。
また、集計した結果に対し、unstack()
を使用する事により行から列へピボットする。
これを実行すると、以下の結果になる。
|---------------------------------------|
| new_user | False | True |
|----------------------|--------|-------|
| app_name | log_month | |
|----------|-----------|-----------------
| game-01 | 2013-06 | 177886 | 49837 |
| | 2013-07 | 177886 | 29199 |
|---------------------------------------|
なんか見づらいような気がする。。。
一応これで、集計できたので、実際に書籍にかかれているようなグラフを表示してみる。
グラフの作成には、matplotlibを使用するが、pandasにはmatplotlibを作成できる高レベルのメソッドが あるので、基本的にはそちらを使用する。(もちろん、複雑な事をしたければ、matlibplotのAPIを直接操作する。)
集計した結果のDataFrameを棒グラフでプロットするには、plot(kind='bar')
を呼べば良いのだが、
これだと、月別で新規と既存のグラフが横に並んでしまう。
積み上げるためには stacked
オプションを使用する。
これで書籍と同じ(ような)グラフが作成出来た。
新規ユーザーからの購入が減少している事がわかる。