gepuro.net
gepulog

データ分析エンジニアによる備忘録的ブログ

ABテストを実装&実施してみる

このブログでABテストを実施するにあたって、悩んだ事をつらつらと書きます。

既にあるwebビーコンを活かしたい

webビーコンを作った にあるように、このブログには自作ビーコンが埋め込まれています。google analyticsでは拾いきれないログを取得する動機で作ったのですが、これを活かしきれていませんでした。

今回はABテストを実装する上で、このログを有効活用しようと思います。

悩んだ実装方法

  • アプリ側でwebビーコンが持つIDを使いたい
    • 新規ユーザの場合、htmlのレンダリングが先なので、IDを特定できない
  • webビーコンにABテストを仕込む
    • アプリとwebビーコンが密結合になってしまう
    • 独立したサービスとして動かしたい
  • ABテスト用のアプリを新たにつくる
    • dom操作で書き換えれば出来そうだが、重くなりそう

最終的な実装方法

  • アプリ側でアクセス元のipアドレスを取得
  • 偶数ならA、奇数ならBを出す

検証方法

webビーコンにABというカラムを追加して、偶数か奇数かを記録しておけば、後から確認が簡単になる。

ワンライナーで、こんな感じで現状を確認出来るようにした。

cat data/* |
jq -r '
select(.site=="blog.gepuro.net") |
select(.ab==1 or .ab==0) |
select(.ymd >= 20151221) |
[.sid, .ab] | @csv' |
header -a '"sid","ab"' |
csvsql --query "select sid,ab,count(1) as view from stdin group by sid, ab" |
csvsql --query "
select
ab,
1.0*sum(view)/count(1) as pps,
sum(view) as view_cnt,
count(1) as session_cnt
from stdin
group by ab"

慣れているという理由でhttp://datascienceatthecommandline.com/に紹介されているcsvsqlを利用したけど、最近の流行りはq - Text as Dataだと思うので、試したいな。

ABテストの内容は、後日報告します!

dockerコンテナの稼働状況を一覧する

コンテナの稼働状況は下のようにして確認出来る。

docker stats [OPTIONS] CONTAINER [CONTAINER...]

しかしながら、コンテナ名orIDを入力するのは面倒ってわけで、一発で表示できるコマンドを作った。

#!/bin/sh
docker inspect --format='{{.Name}}' $(docker ps -q) | sed -e "s/\///g" | xargs docker stats

また、コンテナのipアドレスを調べたい時は、

#!/bin/sh
docker inspect --format '{{.Name}},{{.NetworkSettings.IPAddress}}' $(docker ps -q) | sed -e "s/\///g"

とすれば良い。

これをpathの通る場所に置いておけば、dockerライフがより素敵になる!!!

Japan.R 2015を開催しました

R advent Calendarの12月6日担当です。更新日が12月7日になってしまいました。(寝落ちしてた)

12月5日にJapan.R 2015を開催しました。ATNDでの登録数は197人と昨年同様の盛り上がりでした。 スタッフの皆さん、参加者のみなさん、ありがとうございます。

懇親会の参加者は約70人で、二次会の参加者は約40人でした。眠かったので帰りましたが、三次会もあったようです。

また、会場提供をして頂いた株式会社リクルートコミュニケーションズさん、ありがとうございます。

当日の様子はtogetterにまとめています。

http://www.ustream.tv/channel/kbWLTTuAtLhに当日の録画もあります。

また、僕自身もLT大会に参加しました!

gepuro task views from Atsushi Hayakawa

今年もR言語にお世話になりました。来年以降もR言語コミュニティに貢献していけたらと思います。来年もJapan.Rを開催しますので、よろしくお願いします。

Enjoy R!

ioslidesにおけるロゴのサイズを変える

スライドをRmdで書くgepuroです。

デフォルトのままでは、ロゴのサイズがピクセル単位で固定されているので、画像によっては歪んで表示されてしまう。 それでは困るので、 CSSを弄りました。

また、 タイトル以外のページに現れるロゴは邪魔なので、 background-size: 0px 0px;として、消しています。

slide.Rmd

title: "タイトル"
author: "@gepuro"
output_format:
  ioslides_presentation:
    css: logo.css
    logo: logo.png

mystyle.css

/* トップのロゴの大きさを変える */
aside.gdbar img {
width: 180px;
height: 47.2px;
position: absolute;
right: -5px;
top: 15px;
margin: 8px 15px;
}

/* 他のページのロゴの大きさを変える */
slides > slide:not(.nobackground):before {
font-size: 12pt;
content: "";
position: absolute;
bottom: 20px;
left: 60px;
background: url(logo.png) no-repeat 0 50%;
-webkit-background-size: 30px 30px;
-moz-background-size: 30px 30px;
-o-background-size: 30px 30px;
background-size: 0px 0px;
padding-left: 40px;
height: 30px;
line-height: 1.9;
}

Rmarkdownのioslidesで右下に画像を配置する方法

もう少し綺麗な方法があると思うけど、下で出来た。

<style>
.bottom_right img {
    position: relative;
    left: 500px;
    top: 180px;
}</style>
<div class="bottom_right" markdown="1">
<img src="logo.png", width="300px">
</div>

kazutanさんに教えてもらった方法

<aside class="gdbar right bottom"><img src="hoge.png"></aside>

ありがとうございます!

implyでアクセスログの分析

webビーコンを作った という記事を投稿してから、暫く経ちました。

データも集まり初めてきたところで、分析を始めたいと思います。

最近、僕の中で話題のdruidという時系列なデータが得意なデータベースがあります。 このデータベースは、秒間300万イベントでも捌けるらしいです。(関係者談)

これを利用したpivotというUIツールがあります。開発している会社は、implyというサンフランシスコにあるベンチャー企業です。

この企業がduirdやpivotをパッケージにしたimplyというソフトウェアを提供しています。 今回は、これを使ってデータを分析してみます。

http://imply.gepuro.netにアクセスすると、当ブログで収集しているデータを見れます。(ただし、10月28日の分しか登録していません。早く全部入れたい・・・)

使い方については、少しずつ書いていきたいと思います。

サーバの引越

当ブログのサーバを引っ越しました。運用開始時期にはdockerが流行っておらずLXCを直接弄っていましたが、時代の流れに乗ってdockerに変えました。

また、さくらVPSを利用しているのですが大阪リージョンから石狩リージョンに変更したのでpingが遅くなっています。

今後ともよろしくお願いします。

2つの画像を比較

Pythonで2つの画像の比較をしたい。

シェル上で実行するなら、

diff img1.png img2.png

で良い。

Pythonでは、

img1.tostring() == img2.tostring()

で比較出来る。

もっと綺麗な方法がある気がする。その時は加筆する。

sparkの開発環境はspark-notebookが良さげ

spark-notebookです。 何でもnotebookの時代ですね。

RStudio好きとしては、ブラウザで使えるIDEもあると嬉しい。

現時点での最新版は下で使える模様

docker pull andypetrella/spark-notebook:0.6.2-SNAPSHOT-scala-2.10.4-spark-1.5.0-hadoop-2.7.1-with-hive-with-parquet
docker run -p 9000:9000 -p 4040-4045:4040-4045 andypetrella/spark-notebook:0.6.2-SNAPSHOT-scala-2.10.4-spark-1.5.0-hadoop-2.7.1-with-hive-with-parquet 

scalaもsparkもスタート地点に立っていないレベルだけど、出来ることから少しずつ学ぶ。

新しいdockerをubuntuに入れる

ubuntu14.04でapt-getから入るのは古めなので、動かないことが多い。

Ubuntuに最新のDockerをインストールするに書いてあるし、何番煎じか分からないけど、すぐに忘れるのでメモ

curl -sSL https://get.docker.com/ubuntu/ | sh