すごいwebマーケティングをしてるGUの広告メールが、何時に来てるか統計にしたよ
昨日、入門機械学習 読書会@静岡 3回目に行ってきました。
勉強会の前にみんなで集まってお昼ご飯食べるワフワフな雰囲気♪
清水港みなみさんのまぐろ丼最高でした!
そろそろ何かできるだろってことで、ずーっと仕事でやりたいなと思ってた自社webサービスに送られるメールの分析をすることにしたよ。
ただその内容はブログでは書けないので、試しにGUさんからのメールで実験してみることにしました。
GUさんのwebマーケティングってすごいじゃないですか。いやぁまぶしい。
私も今年の1月から会員になっていますので、メール受信やらポップアップ通知やら来ます。靴下を頂いたこともあります。ありがとうございます。
そのメールを、いったい何時に受信しているか?をRを使ってまとめてみよう。きっと、マーケティングに最適な時間に送信されているはずなので、参考にさせていただきますよ。ホクホク。
- 受信したメールのリストを取得
- RStudioでリストを読み込む
- とりあえず受信時刻をグラフ化
- もそっと見やすい形に変更
1. 受信したメールのリストを取得
わたしはthunderbirdを使ってるので、アドオンでImportExportToolsを追加して、あとは右クリック > フォルダ内のすべてのメッセージをエクスポート > インデックスのみ(CSV)を選ぶだけで、受信メールのリストが出力できます。
かんたん。
ただ、GUからのだけが欲しかったから、まずGUからのメールをフォルダ分けしてそのフォルダの受信リストを出力したよ(ImportExportToolsでフィルタをかけようとしてもうまくいかなかった)。あと、当然だけどUTF-8で出力されるよ。
さて、取得できたら、欲しいのは時間だけなので、リストの受信日時の列だけのリストに加工しました。
できあがったのはこんな感じのリスト。
なんかすでに答えが見えてる気がしますが、とりあえずRを自分なりに動かすことが大事だと思うのでこのまま突き進みます。
2. Rstudioでリストを読み込む
リスト読み込むよ。
mail.gu <- read.delim('GU_20130623-0641.csv',sep=",",stringsAsFactors=FALSE,header=TRUE,na.strings="")
はい。で、日付と時刻の列を作ってみました。
maildate <- strsplit(mail.gu$DATA," ")
maildate <- matrix(unlist(maildate),ncol=2, byrow=TRUE)
mail.gu <- transform(mail.gu,DATE=maildate[,1])
mail.gu <- transform(mail.gu,TIME=maildate[,2])
よし。ここまでで、データはこんな感じになりましたん。
3. とりあえず受信時刻をグラフ化
グラフ化します。
ggplot(mail.gu,aes(x=TIME))+geom_histogram(binwidth=1)
その結果。
むう、もうちょっと見やすくせねばね。
4. もそっと見やすいかたちに変更
何時台に受信してるかがとりあえず集計できればいいかな?ってことで、TIME列から「時」だけ取り出そうと思ったんだけど、
mailtime <- strsplit(mail.gu$TIME,":")
これだけだとエラーが出ました。
Error in strsplit(mail.gu$TIME, ":") : non-character argument
え〜。ちゃんとTIMEを文字として処理してくれないのかな?ってことで
mailtime <- strsplit(paste(mail.gu$TIME,""),":")
これでうまくいきました。
あとはこんな感じ。
mailtime <- matrix(unlist(mailtime),ncol=2, byrow=TRUE)
mail.gu <- transform(mail.gu,HOUR=mailtime[,1])
ggplot(mail.gu,aes(x=HOUR))+geom_histogram(binwidth=1)
はい。結果がこれ。
なんかまだイマイチじゃん。なんで最後に8がでてるんだろ?
って調べたら、ggplotが勝手に文字列ソートしてくれれるらしい。そこで、reorderを使うようにした。
mailhournum <- as.numeric(as.character(mail.gu$HOUR))
mail.gu <- transform(mail.gu,HOUR_NUM=mailhournum)
ggplot(mail.gu,aes(x=reorder(HOUR,HOUR_NUM)))+geom_histogram(binwidth=1)
ここのコード、もっと短くできるかも。
それで、これが結果。
できた〜!
ふー。よかった。何曜日にたくさん来るかとかも調べたい。答えわかってる気がするけど。
そういうわけで、いつも粘り強く教えてくださるオーカワさん、オーイシさんはじめみなさま、ありがとうございます。次回は清水で7/27に開催予定、楽しみです。
参考にしたサイト
http://rfunction.com/archives/1499
http://www.okada.jp.org/RWiki/?R%A4%CE%CA%B8%BB%FA%CE%F3%BD%E8%CD%FD%B4%D8%BF%F4#i846e199
http://d.hatena.ne.jp/triadsou/20110701/1309496186