mzumi's blog

Pythonを使ったデータ分析 (2)

March 12, 2015

前回の続き

まず、月次で集計するため、ログの日付とインストールした日付の月の列を追加する。

追加する方法は、対象となる日付を文字列化し、年月までの部分を切り出すようにする。
ある列のデータから別のデータに変化するには、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 オプションを使用する。

これで書籍と同じ(ような)グラフが作成出来た。

月別、新規/既存ユーザーの購入金額の合計

新規ユーザーからの購入が減少している事がわかる。