会員が行うアクションの継続率を出すには
1.対象となる期間のIDを出す
例えば月毎の継続率を見たい場合、
月毎に投稿をしたユーザのIDを抽出してファイルに保存します。
2011-01.log
2011-02.log
2011-03.log
2011-04.log
...
みたいな形で保存しておくと楽ですね!
で、この際に必ず重複は消しておいてくださいね。
2.さっき作ったファイルを全てソートする
ここで何でソートするのかっていうとlinuxのあの変なソートが使いたいからね。3.実際に継続しているかどうか調べる
1月に使ってた人
2011-01.log
2月に使ってた人
2011-02.log
ってな感じでデータが入ってるわけだけど、
継続しているかどうか調べるために、
1月に使ってたけど2月にも使ってた人ってのを出すわけ。
それがこの下の紫の部分です!
で、どうやってそれを出すのかって話なんですけど、
2011-01.logと2011-02.logをまとめて、2個あるものは
1月も2月も使っていたということなので、
それを実際にコマンドでやって見る。
sort -m 2011-01.log 2011-02.log|uniq -d > 2011-01-2011-02.log
二つのファイルを纏めてソートしたやつをパイプで渡して-dオプションの重複のみ表示したやつをファイルに出力する。
これで1月も2月も使ってた人一覧
2011-01-2011-02.log
というファイルが出来上がった。
じゃあ1月も2月も使ってたけど3月も使ってた人は?
sort -m 2011-01-2011-02.log 2011-03.log|uniq -d > 2011-01-2011-03.log
簡単だね\(^o^)/
4.完成!
実際に運営ではこんな風に使われるらしいです。
サイト継続率UPの方法を考えてみました
5.コード
さて皆さんお待ちかねの実装コードです!
<? $date_arr = array(); $result = array(); for($i=1;$i<=12;$i++){ $date_arr[] = '2011-'.sprintf('%02d', $i); } foreach($date_arr as $key=>$date){ foreach($date_arr as $key2=>$date2){ $result[$date][$date2] = 0; } } foreach($date_arr as $date){ $uids = getPostUserId($date); file_put_contents($date.'.log', join("\n", $uids)); } foreach($date_arr as $key=>$date){ $target_a = $date.'.log'; $str = exec('wc -l '.$target_a); list($result[$date][$date]) = explode(' ', $str); for($i=$key+1; $i<count($date_arr); $i++){ $target_b = $date_arr[$i].'.log'; $file = $date.'-'.$date_arr[$i].'.log'; exec('sort -m '.$target_a.' '.$target_b.' | uniq -d >'.$file); $str = exec('wc -l '.$file); list($result[$date][$date_arr[$i]]) = explode(' ', $str); } } function getPostUserId($date=null){ $dateに投稿したユーザIDを返してくれるすごいやつ } ?> <table class="list"> <tr> <th>/</th> <?foreach($result as $key=>$value):?> <th><?=$key?>まで</th> <?endforeach?> <?foreach($result as $key=>$value):?> <tr> <th><?=$key?>から</th> <?foreach($value as $key_=>$value_):?> <td>{[$value_]}</td> <?endforeach?> </tr> <?endforeach?> </tr> </table>