<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" >

<channel>
	<title>google analyticsについて</title>
	<atom:link href="https://abc-analytics.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://abc-analytics.com</link>
	<description></description>
	<lastBuildDate>Sun, 18 Oct 2015 06:47:27 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.9.8</generator>
	<item>
		<title>RGAでページビュー数 VS 滞在時間 の散布図を描く</title>
		<link>https://abc-analytics.com/scatterplot-pagedepth-visitlength-in-google-analytics/</link>
		<pubDate>Tue, 16 Apr 2013 07:57:32 +0000</pubDate>
		<dc:creator><![CDATA[shirai kimiyuki]]></dc:creator>
				<category><![CDATA[ANALYTICS]]></category>
		<category><![CDATA[ggplot]]></category>
		<category><![CDATA[R]]></category>

		<guid isPermaLink="false">http://abc-analytics.com/?p=1738</guid>
		<description><![CDATA[<p>RGAというRのgoogle analytics用ライブラリがあります。 このライブラリを使って、google analyticsのデータを出力してみます。題材としては、GAのウェブUIで見られる平均の指標である滞在時間 &#8230; <a href="https://abc-analytics.com/scatterplot-pagedepth-visitlength-in-google-analytics/" class="more-link">続きを読む <span class="screen-reader-text">RGAでページビュー数 VS 滞在時間 の散布図を描く</span></a></p>
<p><a rel="nofollow" href="https://abc-analytics.com/scatterplot-pagedepth-visitlength-in-google-analytics/">RGAでページビュー数 VS 滞在時間 の散布図を描く</a>は<a rel="nofollow" href="https://abc-analytics.com">google analyticsについて</a>で公開された投稿です。</p>
]]></description>
				<content:encoded><![CDATA[<p><a href="https://github.com/skardhamar/rga">RGAというRのgoogle analytics用ライブラリ</a>があります。<br />
このライブラリを使って、google analyticsのデータを出力してみます。題材としては、<strong>GAのウェブUIで見られる平均の指標である滞在時間とページビューではなく</strong>、滞在時間とページビューそのまののデータを出力し、plotします。</p>
<h3>データの取得</h3>
<p>具体的な取得項目名は、ディメンジョン側にvisitLengthとpageDepathを使います。 指標側のtimeOnSiteやpageviewsではありません。個別に分類して見たい場合はディメンジョンを指定して、欲しい指標を取ります。今回の欲しい指標は訪問数(visits)になります。<br />
また、新規・リターンユーザー別のvisitorTypeでのデータの違いを見るために、ディメンジョンにvisitorTypeを指定します。<br />
これで、データとして、滞在時間(秒数), ページビュー数, 新規・非新規別の訪問数がでます。</p>
<h3>データの加工</h3>
<p>今回は散布図にしたいので、訪問数分だけ、データの行を複製します。<br />
(*そのままでも、バブルチャート表示用のデータになります)<br />
今回は、粒度の細かいデータに変換します。<br />
その後、グラフで出力します。</p>
<p>以下が、その出力したグラフになります。</p>
<div><a href="https://i1.wp.com/abc-analytics.com/wp-content/uploads/2013/04/pageDepth_visitLength_in_googleAnalaytics1.png?ssl=1"><img data-attachment-id="1748" data-permalink="https://abc-analytics.com/scatterplot-pagedepth-visitlength-in-google-analytics/pagedepth_visitlength_in_googleanalaytics1/" data-orig-file="https://i1.wp.com/abc-analytics.com/wp-content/uploads/2013/04/pageDepth_visitLength_in_googleAnalaytics1.png?fit=480%2C480&amp;ssl=1" data-orig-size="480,480" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="pageDepth_visitLength_in_googleAnalaytics1" data-image-description="" data-medium-file="https://i1.wp.com/abc-analytics.com/wp-content/uploads/2013/04/pageDepth_visitLength_in_googleAnalaytics1.png?fit=300%2C300&amp;ssl=1" data-large-file="https://i1.wp.com/abc-analytics.com/wp-content/uploads/2013/04/pageDepth_visitLength_in_googleAnalaytics1.png?fit=480%2C480&amp;ssl=1" class="size-medium wp-image-1748 " alt="pageDepth_visitLength_in_googleAnalaytics1" src="https://i2.wp.com/abc-analytics.com/wp-content/uploads/2013/04/pageDepth_visitLength_in_googleAnalaytics1-300x300.png?resize=300%2C300&#038;ssl=1" width="300" height="300" srcset="https://i1.wp.com/abc-analytics.com/wp-content/uploads/2013/04/pageDepth_visitLength_in_googleAnalaytics1.png?resize=300%2C300&amp;ssl=1 300w, https://i1.wp.com/abc-analytics.com/wp-content/uploads/2013/04/pageDepth_visitLength_in_googleAnalaytics1.png?resize=150%2C150&amp;ssl=1 150w, https://i1.wp.com/abc-analytics.com/wp-content/uploads/2013/04/pageDepth_visitLength_in_googleAnalaytics1.png?w=480&amp;ssl=1 480w" sizes="(max-width: 300px) 100vw, 300px" data-recalc-dims="1" /></a></div>
<div></div>
<div>まずは、普通にplotです。↑ y軸対数表示log10でした。マイナスは一分以下</div>
<div></div>
<div></div>
<div></div>
<div></div>
<div><a href="https://i2.wp.com/abc-analytics.com/wp-content/uploads/2013/04/pageDepth_visitLength_in_googleAnalaytics2.png?ssl=1"><img data-attachment-id="1747" data-permalink="https://abc-analytics.com/scatterplot-pagedepth-visitlength-in-google-analytics/pagedepth_visitlength_in_googleanalaytics2/" data-orig-file="https://i2.wp.com/abc-analytics.com/wp-content/uploads/2013/04/pageDepth_visitLength_in_googleAnalaytics2.png?fit=480%2C480&amp;ssl=1" data-orig-size="480,480" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="pageDepth_visitLength_in_googleAnalaytics2" data-image-description="" data-medium-file="https://i2.wp.com/abc-analytics.com/wp-content/uploads/2013/04/pageDepth_visitLength_in_googleAnalaytics2.png?fit=300%2C300&amp;ssl=1" data-large-file="https://i2.wp.com/abc-analytics.com/wp-content/uploads/2013/04/pageDepth_visitLength_in_googleAnalaytics2.png?fit=480%2C480&amp;ssl=1" class="size-medium wp-image-1747 " alt="pageDepth_visitLength_in_googleAnalaytics2" src="https://i2.wp.com/abc-analytics.com/wp-content/uploads/2013/04/pageDepth_visitLength_in_googleAnalaytics2-300x300.png?resize=300%2C300&#038;ssl=1" width="300" height="300" srcset="https://i2.wp.com/abc-analytics.com/wp-content/uploads/2013/04/pageDepth_visitLength_in_googleAnalaytics2.png?resize=300%2C300&amp;ssl=1 300w, https://i2.wp.com/abc-analytics.com/wp-content/uploads/2013/04/pageDepth_visitLength_in_googleAnalaytics2.png?resize=150%2C150&amp;ssl=1 150w, https://i2.wp.com/abc-analytics.com/wp-content/uploads/2013/04/pageDepth_visitLength_in_googleAnalaytics2.png?w=480&amp;ssl=1 480w" sizes="(max-width: 300px) 100vw, 300px" data-recalc-dims="1" /></a></div>
<div>次にggplotです。↑</div>
<div></div>
<div></div>
<div></div>
<div></div>
<div><a href="https://i2.wp.com/abc-analytics.com/wp-content/uploads/2013/04/pageDepth_visitLength_in_googleAnalaytics31.png?ssl=1"><img data-attachment-id="1746" data-permalink="https://abc-analytics.com/scatterplot-pagedepth-visitlength-in-google-analytics/pagedepth_visitlength_in_googleanalaytics3-2/" data-orig-file="https://i2.wp.com/abc-analytics.com/wp-content/uploads/2013/04/pageDepth_visitLength_in_googleAnalaytics31.png?fit=480%2C480&amp;ssl=1" data-orig-size="480,480" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="pageDepth_visitLength_in_googleAnalaytics3" data-image-description="" data-medium-file="https://i2.wp.com/abc-analytics.com/wp-content/uploads/2013/04/pageDepth_visitLength_in_googleAnalaytics31.png?fit=300%2C300&amp;ssl=1" data-large-file="https://i2.wp.com/abc-analytics.com/wp-content/uploads/2013/04/pageDepth_visitLength_in_googleAnalaytics31.png?fit=480%2C480&amp;ssl=1" class="size-medium wp-image-1746 " title="ページビュー数と平均滞在時間の推移" alt="pageDepth_visitLength_in_googleAnalaytics3" src="https://i1.wp.com/abc-analytics.com/wp-content/uploads/2013/04/pageDepth_visitLength_in_googleAnalaytics31-300x300.png?resize=300%2C300&#038;ssl=1" width="300" height="300" srcset="https://i2.wp.com/abc-analytics.com/wp-content/uploads/2013/04/pageDepth_visitLength_in_googleAnalaytics31.png?resize=300%2C300&amp;ssl=1 300w, https://i2.wp.com/abc-analytics.com/wp-content/uploads/2013/04/pageDepth_visitLength_in_googleAnalaytics31.png?resize=150%2C150&amp;ssl=1 150w, https://i2.wp.com/abc-analytics.com/wp-content/uploads/2013/04/pageDepth_visitLength_in_googleAnalaytics31.png?w=480&amp;ssl=1 480w" sizes="(max-width: 300px) 100vw, 300px" data-recalc-dims="1" /></a></div>
<div>次に平均をラインで。↑</div>
<div>(前のグラフに重ね書きする方法がわからなかった)</div>
<p>以下は、コードです。<br />
認証部分 + プロファイルID は各自で埋めて下さい。</p>
<pre>
library(rga)
rga.open(instance = "ga",
         where = "/home/shirai/rga/shirai/.ga",
         client.id = "指定してください", 
         client.secret = "指定してください")
start.date = "2011-03-30"
end.date = "2013-04-14"
ID <- "ga:指定してください"
dt <- ga$getData(ID, start.date, end.date,
                 dimensions="ga:visitLength,ga:pageDepth,ga:visitorType",
                 metrics = "ga:visits,ga:timeOnSite,ga:pageviews",batch=TRUE)

##散布図用にデータを拡張？する
ret <- dt[unlist(lapply(1:nrow(dt), function(i)rep(i, dt[i,4]))),]
dt0 <- dt[,c("visitLength","pageDepth","visits")]
ret0 <- dt0[unlist(lapply(1:nrow(dt0), function(i)rep(i,dt0[i,3]))),]
for(i in 1:2)ret[,i] <- as.numeric(ret[,i])

##通常のplot表示
png(file="~/tmp/pageDepth_visitLength_in_googleAnalaytics1.png")
plot(ret$pageDepth, log(ret$visitLength/60,10),xlab="ページビューー数",ylab="滞在時間(分)")
dev.off()
##アウトプットがイマイチ
## alphaを入れて、jitterを入れる
p <- ggplot(ret[ret$visitLength!=0 &#038; ret$visitLength<1200 &#038; ret$pageDepth<16,],
            aes(pageDepth,visitLength/60, colour=visitorType))
png(file="~/tmp/pageDepth_visitLength_in_googleAnalaytics2.png")
p + geom_point(alpha=1/10,position="jitter") + xlab("ページビュー数") + ylab("滞在時間(分)")
dev.off()

## 平均で見る。前のグラフにimposeする方法わからず、、、
avgSOT <- ddply(dt, .(as.numeric(pageDepth),visitorType), summarise, ats= sum(as.numeric(timeOnSite)/sum(as.numeric(visits))))
names(avgSOT) <- c("pageDepth","visitorType","AvgTimeOnSite")
png(file="~/tmp/pageDepth_visitLength_in_googleAnalaytics3.png")
ggplot(avgSOT[avgSOT$pageDepth<16,], aes(pageDepth, AvgTimeOnSite/60, color=visitorType))+geom_line() + xlab("ページビュー数") + ylab("滞在時間(分)")
dev.off()
</pre>
<p><a rel="nofollow" href="https://abc-analytics.com/scatterplot-pagedepth-visitlength-in-google-analytics/">RGAでページビュー数 VS 滞在時間 の散布図を描く</a>は<a rel="nofollow" href="https://abc-analytics.com">google analyticsについて</a>で公開された投稿です。</p>
]]></content:encoded>
			</item>
		<item>
		<title>ページ遷移データをグルーピング化する</title>
		<link>https://abc-analytics.com/view-pageveiws-in-various-conditions/</link>
		<pubDate>Tue, 16 Apr 2013 02:34:40 +0000</pubDate>
		<dc:creator><![CDATA[shirai kimiyuki]]></dc:creator>
				<category><![CDATA[解説]]></category>

		<guid isPermaLink="false">http://abc-analytics.com/?p=1730</guid>
		<description><![CDATA[<p>フォーラムで質問を見かけました。 パラメータが付いたURLで、パラメータを除いた合計での遷移数 GAのウェブUI上でページグループの遷移のセッション数を出す方法も回答してありますので、上記のリンク先をご覧下さい。 ページ &#8230; <a href="https://abc-analytics.com/view-pageveiws-in-various-conditions/" class="more-link">続きを読む <span class="screen-reader-text">ページ遷移データをグルーピング化する</span></a></p>
<p><a rel="nofollow" href="https://abc-analytics.com/view-pageveiws-in-various-conditions/">ページ遷移データをグルーピング化する</a>は<a rel="nofollow" href="https://abc-analytics.com">google analyticsについて</a>で公開された投稿です。</p>
]]></description>
				<content:encoded><![CDATA[<p>フォーラムで質問を見かけました。<br />
<a title="パラメータが付いたURLで、パラメータを除いた合計での遷移数" href="https://productforums.google.com/forum/#!msg/analytics-ja/KqMTYo6c12k/J1q3t_S5KxMJ" target="_blank">パラメータが付いたURLで、パラメータを除いた合計での遷移数</a><br />
<strong>GAのウェブUI上でページグループの遷移のセッション数を出す方法</strong>も回答してありますので、上記のリンク先をご覧下さい。</p>
<p>ページ間の遷移データ(pageviewが指標となる)をいろいろな条件でグルーピング化するという命題だと思います。</p>
<p><a title="自作ツールの紹介" href="//abc-analytics.com/tools/">この間作った自作のツール</a>を使うと便利にできます。<br />
データ項目は、指標: pageviews ディメンジョン:previousPagePath, nextPagePath<br />
(*nextPagePathはpagePathでも同じ)<br />
PV数ベースではなく、セッション数ベースの値が欲しい時は、指標をuniquePageviewsにして下さい。<br />
その後、expression filterというところで、LIKE演算子を使って絞り込みをします。</p>
<div class="jetpack-video-wrapper"><iframe class='youtube-player' type='text/html' width='660' height='372' src='https://www.youtube.com/embed/3xAaZCOaukI?version=3&#038;rel=1&#038;fs=1&#038;autohide=2&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;wmode=transparent' allowfullscreen='true' style='border:0;'></iframe></div>
<p><a rel="nofollow" href="https://abc-analytics.com/view-pageveiws-in-various-conditions/">ページ遷移データをグルーピング化する</a>は<a rel="nofollow" href="https://abc-analytics.com">google analyticsについて</a>で公開された投稿です。</p>
]]></content:encoded>
			</item>
		<item>
		<title>CARTで結論を絞る</title>
		<link>https://abc-analytics.com/cart%e3%81%a7%e7%b5%90%e8%ab%96%e3%82%92%e7%b5%9e%e3%82%8b/</link>
		<comments>https://abc-analytics.com/cart%e3%81%a7%e7%b5%90%e8%ab%96%e3%82%92%e7%b5%9e%e3%82%8b/#respond</comments>
		<pubDate>Sun, 18 Dec 2011 04:44:15 +0000</pubDate>
		<dc:creator><![CDATA[shirai kimiyuki]]></dc:creator>
				<category><![CDATA[ANALYTICS]]></category>
		<category><![CDATA[実施例]]></category>

		<guid isPermaLink="false">http://abc-analytics.com/cart%e3%81%a7%e7%b5%90%e8%ab%96%e3%82%92%e7%b5%9e%e3%82%8b</guid>
		<description><![CDATA[<p>Google Analyticsでエクセルなどでデータをいじる場合、　僕がよくやったのは、ディメンジョンを多めにセットしておいて(データ行は一万行を超えないようにする、indexするのが面倒な場合)、データを得た後、エク &#8230; <a href="https://abc-analytics.com/cart%e3%81%a7%e7%b5%90%e8%ab%96%e3%82%92%e7%b5%9e%e3%82%8b/" class="more-link">続きを読む <span class="screen-reader-text">CARTで結論を絞る</span></a></p>
<p><a rel="nofollow" href="https://abc-analytics.com/cart%e3%81%a7%e7%b5%90%e8%ab%96%e3%82%92%e7%b5%9e%e3%82%8b/">CARTで結論を絞る</a>は<a rel="nofollow" href="https://abc-analytics.com">google analyticsについて</a>で公開された投稿です。</p>
]]></description>
				<content:encoded><![CDATA[<p><a href="https://i2.wp.com/abc-analytics.com/wp-content/uploads/85c11d16257f_A818/cart.png?ssl=1"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="cart" src="https://i0.wp.com/abc-analytics.com/wp-content/uploads/85c11d16257f_A818/cart_thumb.png?resize=484%2C364&#038;ssl=1" alt="cart" width="484" height="364" border="0" data-recalc-dims="1" /></a></p>
<p>Google Analyticsでエクセルなどでデータをいじる場合、　僕がよくやったのは、ディメンジョンを多めにセットしておいて(データ行は一万行を超えないようにする、indexするのが面倒な場合)、データを得た後、エクセルのピボットで軸を入れ替えながら、突出したポイントを探すことでした。エクセル2010でスライサー使えば、アドバンスセグメント＋カスタムレポートという形が簡単かつ柔軟に実現できる。</p>
<p>それで、データに浸かっていじってれば、そのうち、イメージができることはできるけど、時間かかります。　そういう場合に、よく言われるのは、予め仮説を持って、その検証のみに時間を使う。サイトに対する今までの見識を持って仮説を出し、データでの裏付けを探す。見識がなければ、世間で一般的に使われる指標を一般的なディメンジョンで分類するという形になると思います。または、テストできる環境を整え、指標を対比する。。。などだったと思います。</p>
<p>で、それとは違うアプローチとして、データマイニングがあります。仮説なしで、結論みたい？なものをだしてもらう。ほとんどは凡庸な結論だけど、時々、宝ものが出てくるかもしれない。。。冒頭の本は、そのアプローチ、データマイニングのやり方を説明してくれてます。この本は、数式抜きでやり方を丁寧に説明してくれてるし、書き方からも読者に理解させようとする気が伝わってきます。とても良いです。</p>
<p><a href="http://www.amazon.co.jp/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%9E%E3%82%A4%E3%83%8B%E3%83%B3%E3%82%B0%E5%85%A5%E9%96%80-%E8%B1%8A%E7%94%B0-%E7%A7%80%E6%A8%B9/dp/4489020457/" title="データマイニング入門" target="_blank"></a><br />
で、その中の分析木をやってみました。ただ、分析木は、マイニングというより、シンプルな結論の提示という気がします。なので、この本にあるように、mvpartというライブラリを使います。コードは最後に提示します。</p>
<p>冒頭のグラフが図で、結果そのものが下記。<br />
split:分岐基準、n:その基準での観察数(セッション数), loss: n回は間違え分類した。(分類名が続いてる。今回なら、bounce, nobounces)</p>
<p>========================================================</p>
<p>n= 226</p>
<p>node), split, n, loss, yval, (yprob)<br />
* denotes terminal node</p>
<p>1) root 226 79 bounce (0.65044 0.34956)<br />
2) visitCount&gt;=6.5 22  1 bounce (0.95455 0.04545) *<br />
3) visitCount&lt; 6.5 204 78 bounce (0.61765 0.38235)<br />
6) landingPagePath=/cookie/utma,2010-03-11-16-53,igation_analysis,ng-apis/gaq-push 132 41 bounce (0.68939 0.31061)<br />
12) visitCount&lt; 3.5 130 39 bounce (0.70000 0.30000) *<br />
13) visitCount&gt;=3.5 2  0 nobounce (0.00000 1.00000) *<br />
7) landingPagePath=/ 72 35 nobounce (0.48611 0.51389)<br />
14) medium=(none),organic 48 22 bounce (0.54167 0.45833)<br />
28) visitCount&lt; 4.5 44 19 bounce (0.56818 0.43182) *<br />
29) visitCount&gt;=4.5 4  1 nobounce (0.25000 0.75000) *<br />
15) medium=referral 24  9 nobounce (0.37500 0.62500)<br />
30) visitCount&gt;=2.5 2  0 bounce (1.00000 0.00000) *<br />
31) visitCount&lt; 2.5 22  7 nobounce (0.31818 0.68182) *</p>
<p>=========================================================</p>
<p>２２６セッションで79が直帰と間違え分類で、<br />
訪問回数で6,5で分かれて(22(間違え1) – 204(間違え78))<br />
ランディングページで分かれて、(トップページと、それ以外, 132 &#8211; 72)<br />
その子供たちは、また訪問回数やら、メディアやらで分岐される。</p>
<p>数字自体は、まあそうだろうなあ、、というもので、それで終わりだけど、ガイドラインにはなると思う。</p>
<p>分類項目の設定は、こちらで決めたり、訪問回を連続変数にしたりしてるのは、予断があるわけだし、最大の問題点として、分析単位がセッションになっていて、ユーザー単位になってない点があります。同一のユーザーが複数回記録されているデータというのは留保しないといかん。</p>
<p>ただ、それでも、ある一定の基準に沿って、ディメンジョンの項目を整理して、差異の大きい部分だけを抽出しているので、データから結論を得るプロセスとしていいのではないかなと思います。</p>
<p>あと、枝分かれの基準のジニ係数の計算をちょこっとだけやってみる。<br />
(詳しく（正しく？)は、上記の本、データマイニング入門の本を読んでください)</p>
<p>最初の枝分かれは、訪問回数の6.5 ト表示なので、1-6, 7以上と分かれてる。</p>
<p>そのジニ係数は、</p>
<p>7回以上で  1 – ((22/23)^2 + (1/23)^2) =&gt; 0.087</p>
<p>６回以下で  1- ( (78/204)^2 + (126/204)^2) =&gt; 0.472</p>
<p>これを加重して、(23/226) * 0.087 + (204/226) * 0.472 =&gt;  0.435</p>
<p>元々のルートのジニ係数は、1 – ((79/226)^2 + (147/226)^2) =&gt; 0.455</p>
<p>なので、分岐基準は、0.02となる。他の切れ目でやって、分岐基準が小さくなることを確認したいけど、パスします。。。</p>
<p>以下コード。<br />
RGoogleAnalyticsは、cranにはないので、<a href="http://code.google.com/p/r-google-analytics/">ダウンロード</a>してinstallする。<br />
あとは、email, password, tableidを、各自でセットするれば、同じように動くと思う。画像ファイルの保存場所と。</p>
<div id="codeSnippetWrapper">
<pre id="codeSnippet" class="csharpcode">library(RGoogleAnalytics)
library(mvpart)

##GAのデータを取得する
ga <span class="kwrd">&lt;</span>- RGoogleAnalytics()
ga$SetCredentials(mailaddress, password)
query <span class="kwrd">&lt;</span>- QueryBuilder()
query$Init(start.date = "2011-01-01",
           end.date   = "2011-12-15",
           dimensions = "ga:medium,ga:region,ga:date,ga:hour,ga:visitCount,ga:landingPagePath",
           metrics    = "ga:entrances,ga:bounces",
           sort       = "ga:date",
           table.id   = "ga:xxxxxxxxx")
data <span class="kwrd">&lt;</span>- ga$GetReportData(query)$data

##データの整理
if(!is.null(data$visitCount)) data$visitCount <span class="kwrd">&lt;</span>- as.numeric(data$visitCount)
data$date <span class="kwrd">&lt;</span>- as.Date(data$date, "%Y%m%d")
data$wday <span class="kwrd">&lt;</span>- weekdays(data$date)
data$wnum <span class="kwrd">&lt;</span>- format(data$date, "%w")

##Langind Pageを上位(entrance数)５つに絞る
top5.lp <span class="kwrd">&lt;</span>- arrange(
                   ddply(data, .(landingPagePath), summarise, sum=sum(entrances)),
                   -sum
                   )[1:5,"landingPagePath"]
dt0 <span class="kwrd">&lt;</span>- subset(data, landingPagePath %in% top5.lp)
##URLが長いのがあるので、後ろから15文字だけにする
dt0$landingPagePath <span class="kwrd">&lt;</span>- sapply(dt0$landingPagePath, function(x){ l <span class="kwrd">&lt;</span>- nchar(x); substr(x, l-15, l)})

##top5.reg <span class="kwrd">&lt;</span>- arrange(ddply(data, .(region), summarise, sum=sum(entrances)), -sum)[1:5, "region"]
##dt1 <span class="kwrd">&lt;</span>- subset(dt0, region %in% c("Tokyo","Osaka","Aichi","Fukuoka","Kanagawa"))

##１セッションで１レコードの形にする
dt0 <span class="kwrd">&lt;</span>- within(dt0, nobounces <span class="kwrd">&lt;</span>- entrances-bounces)
a0 <span class="kwrd">&lt;</span>- adply(dt0, 1, function(x)data.frame(engage=rep("bounce",x$bounces)))
a1 <span class="kwrd">&lt;</span>- adply(dt0, 1, function(x)data.frame(engage=rep("nobounce",x$nobounces)))
dt0 <span class="kwrd">&lt;</span>- rbind(a0,a1)

##いらないディメンジョン、指標を外しておく。以下の書式？なら元から無い項目でもOK
dt0 <span class="kwrd">&lt;</span>- dt0[, !names(dt0) %in%
           c("visits","bounces","nobounces","date","region","hour","wday","wnum","entrances")]

##RPARTの部分
ret <span class="kwrd">&lt;</span>- rpart(engage ~ ., data=dt0, method="class",cp=0.01)
png("~/Dropbox/cart.png",width=800,height=600)
rpart:::plot.rpart(ret, uniform=T, branch=1, margin=0.15)
rpart:::text.rpart(ret, all=T,pretty=0,fancy=T,digits=3,use.n=T)
dev.off()
plotcp(ret)</pre>
</div>
<p><a rel="nofollow" href="https://abc-analytics.com/cart%e3%81%a7%e7%b5%90%e8%ab%96%e3%82%92%e7%b5%9e%e3%82%8b/">CARTで結論を絞る</a>は<a rel="nofollow" href="https://abc-analytics.com">google analyticsについて</a>で公開された投稿です。</p>
]]></content:encoded>
			<wfw:commentRss>https://abc-analytics.com/cart%e3%81%a7%e7%b5%90%e8%ab%96%e3%82%92%e7%b5%9e%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>リスティング広告運用についての雑感</title>
		<link>https://abc-analytics.com/%e3%83%aa%e3%82%b9%e3%83%86%e3%82%a3%e3%83%b3%e3%82%b0%e5%ba%83%e5%91%8a%e9%81%8b%e7%94%a8%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6%e3%81%ae%e9%9b%91%e6%84%9f/</link>
		<comments>https://abc-analytics.com/%e3%83%aa%e3%82%b9%e3%83%86%e3%82%a3%e3%83%b3%e3%82%b0%e5%ba%83%e5%91%8a%e9%81%8b%e7%94%a8%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6%e3%81%ae%e9%9b%91%e6%84%9f/#respond</comments>
		<pubDate>Wed, 27 Jul 2011 08:39:17 +0000</pubDate>
		<dc:creator><![CDATA[shirai kimiyuki]]></dc:creator>
				<category><![CDATA[実施例]]></category>

		<guid isPermaLink="false">http://abc-analytics.com/%e3%83%aa%e3%82%b9%e3%83%86%e3%82%a3%e3%83%b3%e3%82%b0%e5%ba%83%e5%91%8a%e9%81%8b%e7%94%a8%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6%e3%81%ae%e9%9b%91%e6%84%9f</guid>
		<description><![CDATA[<p>チョット前に、ちょっとだけ、リスティング管理を経験しました。それで、知識の棚卸しをする意味で、私が思っていることを書きます。 google analyticsのデータの利用についても、織りまぜて書きます。記憶の掃き出しを &#8230; <a href="https://abc-analytics.com/%e3%83%aa%e3%82%b9%e3%83%86%e3%82%a3%e3%83%b3%e3%82%b0%e5%ba%83%e5%91%8a%e9%81%8b%e7%94%a8%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6%e3%81%ae%e9%9b%91%e6%84%9f/" class="more-link">続きを読む <span class="screen-reader-text">リスティング広告運用についての雑感</span></a></p>
<p><a rel="nofollow" href="https://abc-analytics.com/%e3%83%aa%e3%82%b9%e3%83%86%e3%82%a3%e3%83%b3%e3%82%b0%e5%ba%83%e5%91%8a%e9%81%8b%e7%94%a8%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6%e3%81%ae%e9%9b%91%e6%84%9f/">リスティング広告運用についての雑感</a>は<a rel="nofollow" href="https://abc-analytics.com">google analyticsについて</a>で公開された投稿です。</p>
]]></description>
				<content:encoded><![CDATA[<p>チョット前に、ちょっとだけ、リスティング管理を経験しました。それで、知識の棚卸しをする意味で、私が思っていることを書きます。 google analyticsのデータの利用についても、織りまぜて書きます。記憶の掃き出しをしておきます。あいまいな部分や誤認識もあると思いますので、そういう前提で読んでください。(GAも、ここ数ヶ月は触ってないので、知識が古ぼけてきてます。サイトも更新してないですね。。。)</p>
<h3>リスティング広告（サーチ)の流れ</h3>
<p>出稿する側は、キーワードとそれにヒモ付た広告を出す。（管理上、いろんなグルーピング機能があって、それらの上位グループ(広告グループ、キャンペーン)で制御が色々入れられる)。</p>
<p>ユーザーが検索する。　と、検索語にマッチしたキーワードに紐づいた広告が表示される。　ユーザーから見ると、検索語を打ち込む =&gt; 広告文を見る =&gt; ランディングページ訪問という流れ。</p>
<p>ここで大事だと思った点の一つは、ユーザーは出稿側がシステムに出す出稿キーワードは見ないし知らないという点。(完全一致はそのままなので、広告を出す側のキーワード設定とユーザーの検索語が一致するが、) 。</p>
<p>というのは、リスティング広告の管理をしてると、キーワード単位(マッチタイプ、テスト機能で分化管理、グループ、キャンペーンで統合管理されるが)で考えがちだと思われるのだけど、ユーザーサイドの行動である実際のクエリーを出発点に組み立てる事は大事だと。ユーザーは自分のクエリーをだして、広告文をクリックして、サイトに行く。ユーザーの頭に出稿する側のキーワードは入ってない。部分一致の場合。</p>
<p>ユーザーの行動プロセスを起点に考えると、上記のような流れ。で、その前提でデータを見えるようにしないとイカン。</p>
<p>もちろん、google, yahooの入札システムサイドでも上手く立ちまわる事は大切(CPC, 順位などの管理)だ。 そして、こちらも巨大なブラックボックスで、仮説、検証サイクルが廻る事にはなる。</p>
<p>で、</p>
<h3>クエリーデータを得る、マッチタイプで分ける</h3>
<p>上記の点を念頭にしたとき、僕としては、以下の２点、A,Bを抑えたときに、作業が楽になった。</p>
<p>A .クエリーデータの取得(Google Analyticsで)<br />
B. adwords側でのクエリーデータのマッチタイプ別の分別管理。(yahooは楽にならなかった、、、)</p>
<h3>A. クエリーデータの取得(Google Analyticsで)</h3>
<p>1.yahooリスティング</p>
<p>これは、独自に取らないと行けない。また取れてもadwordsのようにリスティング側のデータを教えてくれないので、クエリーデータを取るだけになるが、それでもやる必要がある。</p>
<p>方法としては、一般にはutm_source, utm_medium, utm_camapignを付けてということになっているが、あんまり有効な方法には見えない。この方法だと、クエリーデータはリファラーから取って、cookieのutmzのutmctrに入るはずだけど、utmパラメータを設定すると、リファラー内のキーワード情報は、日本語のまま入ってしまう。で、エンコードしてcookieに入らないと、最終的なデータで文字化けやデータ不取得となることがあるのだ。通常の場合(utmパラメータを使わない)と違う仕様にした理由は分からない。マルチバイトの人が声を上げてないだけかもしれないし、他に理由があるのかもしれないし、僕の勘違いかもしれない。　でも、この辺りのデータ不備で悩んでる人は多いと思う。</p>
<p>で、utm_xxxx を使わないとすると、、、ヤフーリスティング側の仕様を利用する方法が良い。</p>
<p>yahooリスティングからクリックされた時には、ヤフーがパラメータを付けてくれる。それを使う。</p>
<p>クエリー情報、キーワード情報、マッチタイプ情報、キャンペーンID情報、広告グループID情報、広告ID情報　をURLパラメータとして付加してくれてる。これを素直にGAに入れれば良い。</p>
<p>その方法としては２つ。サイト内検索を使う。 or   トラッキングAPIを使う。</p>
<p>サイト内検索は、２つのパラメータ情報を取得できる(独立した？ディメンジョンで） ので、キーワード+クエリー、クエリー＋マッチタイプとい形で取得しておく。サイト内検索の設定に、ovraw, ovkey, ovmtcとかを設定すれば良い。サイト内検索でのディメンジョン情報は、ゴール指標と結びついているので、コンバージョン測定もやり易い。問題はcookieに情報が入るわけではないので、再訪問データとのかけ合わせが出来ないけど、これは通常のデータ分析でも難しいので、要らない（僕は)。</p>
<p>トラッキングAPIは、<a href="http://code.google.com/apis/analytics/docs/gaJS/gaJSApiCampaignTracking.html">このへんだけど</a>、やったことない。その上、問題があって、URLパラメータの情報は、ヤフーが日本語にして(エンコードせずに)付加してくれてるので、上で書いたデコード問題が発生しそう。ただ、クエリー情報以外の情報（キャンペーンID,広告グループID、広告IDとか)を収納できそうなので、これと、後で、ヤフーリスティング側からのIDの情報とJOINすれば、かっちりとしたデータが取れるとは思う。　集計してそのデータが活かせるかは、分からないけど。</p>
<p>と書いたように、サイト内検索の機能を使うのが手軽で良い。正統的な方法のutm系のパラメータとも共存して測定できるし。 ただ、APIを使う人は、ランディングページのパラメータを取り出して、エクセルなどで処理すれば、こんな方法は要らないかもしれない。</p>
<p>サイト内検索はパラメータによるデータの振り分け機能と考えると、GAの応用の幅が広がる。</p>
<p>あと、GAで実際に集計するプロファイルからは、yahooリスティングのパラメータを除去しておかないと、ランディングページの種類が大量になり、コンテンツ単位の集計は破綻すると思うので、プロファイル設定はキチンと手を入れておく必要。生データ用は、別のプロファイルで残しておく。</p>
<p>ヤフーはこれくらいはさっと思いついてやった。GAに詳しかった？人の立場としては…  ただ、応急処置的だし、javascriptでもっとやりたいとも思ったけど、、、全部自分で管理できないので、それは無理だし、それ以上のデータを持っても、サイトのパフォーマンス上げられる自信もなかった。リスティングの運営は手間暇かかるし、ビジネス的にはリスティングの運営のがお金に響くので、リスティング運用に時間をかけるのが本筋。また、リスティングの情報は質が高い(解釈しやすいし、相場情報になってる)</p>
<p>ヤフーリスティングは、情報が国内に限られるので、adwordsよりノウハウをネットで探すのが難しかしい。ただ、サポートは手厚いので、キチンとサポートを利用できる体制だと運用が楽かも。そういう意味ではある程度、組織だって運営できる所に利点があるのかな。代理店制度とかそのへんはよく分からない。</p>
<p>2. adwords</p>
<p>クエリーデータを起点にデータを取得するの続き。</p>
<p>アドワーズに関しては、自動設定にしておけば、クエリーデータは、アドワーズ側のレポートで見られるし、GAにも送ってくれる。なので、上記のヤフーの計測レベルは既に達成されている。</p>
<p>ただ、GA側のadwordsデータを使うと、もっといろいろ利点があるので書く。</p>
<p>まず、アドワーズのクエリーレポートはデータが来るのが遅い。一緒に提示されるデータで遅い物があるのか、クエリーデータがでるのに、２，３日掛かったような気がする、、、</p>
<p>一方、GAの方は、通常のクリックデータと同じなので、通常？、一時間以内にはデータが乗る。</p>
<p>なので、アカウントのスタート時とか、大規模の修正を掛けたときはGA側でクエリーのデータを追うべきだ。キーワードの除外設定は早ければ早いほど予算を残せるし、有効なクエリーを見つけて、キーワード登録するのが早ければ早いほどコンバージョンが実績で残る。</p>
<p>また、APIを使うのが前提になるけど、adwordsのクエリーディメンジョンに、他のディメンジョンも追加できるし、通常のメトリックスやゴール指標もデータとして乗っかるので、かなり細かく追っていこうと思えば、できる。追っかけて成果を出す解析スキルはないけど、、、、</p>
<p>あと、アドワーズレポートとの違いはまだある。クリック単位ででデータ（ディメンジョン、指標)が見られるけど（正確にはGAのディメンジョンで細分化出来る範囲で）、順位ディメンジョンの他にトップポジション、右ポジションという、広告配置位置のディメンジョンでも指標がだせるので、パフォーマンスの違いが測定できるし、adwordsで順位が一位だが、RHSになってるものもチェックできる。（必要なら広告ランクを増して、TOPに持っていかないとイカン)</p>
<p>* 先週あたり、アドワーズ側でもデータが出るようになったらしい。ただ、それでも、GAの方がデータの粒度を細かくできる。多くのディメンジョンのあるデータキューブ(アナリティクのデータはそう考えると良いはず。多次元データベース)みたいなのに組み込まれるわけだし。だと。 サイト内データ指標ともある程度ひもづくし。できない組み合わせもあったけど。</p>
<p>と、GA側のデータなら、adwordsのデータはかなり細かく、そして迅速に分かるので、有効に使うえる。</p>
<p>あと、GAとは関係ないけど、adwordsの管理の話を少し。</p>
<h3>B 部分一致と完全一致は、分別して管理するのが良いはず</h3>
<p>リスティングを経験する中で、最初に戸惑ったウチの一つは、部分一致と完全一致の所だったような気がする、、、他にもあっただろうけど、、、</p>
<p>メイン？なキーワードは、完全一致と部分一致の両方で出稿していくことになると思うけど、除外設定の知識も最初はなかったので、設定に悩んだ記憶がある。除外設定をしったあとは、完全一致と部分一致を区別するには、（部分一致+ 完全除外一致) で部分一致の出稿すれば、完全と部分の分離ができると分かって楽になった。</p>
<p>基本的に複数の広告グループで、完全グループと部分グループを別々に作るのが良いと思う。他の人の現場の方法は知らないけど、ここもそう言っててる。<a href="http://certifiedknowledge.org/blog/3-strategies-for-organizing-your-match-types/">http://certifiedknowledge.org/blog/3-strategies-for-organizing-your-match-types/</a>　(キャンペーン単位で分けるのもありかもしれない。　(このサイトは有用な情報が多い。他にも良い記事がある。)</p>
<p>この辺りは、adwordsの話。　ヤフーリスティングは除外設定が、フレーズ一致的な除外に固定されているの、上記のことはできず、入札単価の調整などになる。でも、単価調整方式だとCTRの履歴がどうしても歪みがちで、広告ランクが部分一致側に高く出て、マッチタイプの分別コントロールが非常に難しくなることがあると思う。　いい対策はないかと、ネットで探しても、この辺りで良い情報は見つからなかった。除外もキレイに出来ないし。この辺りの秋に改正されるらしい。</p>
<p>しかし、ヤフーリスティングとadwordsを同時に利用すると、adwordsすごいなあと思う。全体のシステムもすごいのだろうけど、adwordsのような数字でいっぱいなものが、ウェブのインターフェースで運用できるのにも驚いた。ウェブ上で情報をブラウズして操作するシステムで、自分が知る限り最高のモノの一つだと思う。salesforceとかを使うともっとすごいシステム(UI)ってあるのだろうか？　うーん、証券システムかなあ、、こっちもすごいかもしれない。バックエンドは知らない。</p>
<p>まとめ</p>
<p>リスティングについて、ほぼゼロベースの知識で望んだ時の経験の記憶の棚卸です。GAのついての知識はあったので、それを活かす形でやった記憶の掃き出しです。 新しいGAのことについて(新しいUIとか間接効果とか)は知らないので、聞かないでください。</p>
<p>そういえば、アドワーズのサーチファネルも、クエリーパスを時々見ると、ある種の感覚的なヒントがつかめると思う。定量的な分析はスキルが不足してる。僕には。</p>
<p>あと、リスティング広告の運用については、無駄なクリックの削減が大きなテーマだと思う。で、その最初の一歩は、出稿キーワードと検索クエリの対応関係をつかむとやりやすいかなと。出稿キーワードの感覚も掴めるし。　GAを使うと、ヤフーリスティングの管理画面よりその辺りが明確に見えてきます。そして、adwordsも、adwordsのレポートデータより、GAのレポートのが便利な点が多いです。</p>
<p>あと、ヤフーリスティングに関しては、要らないサイトを除外できる機能は必須機能だと思う。全体のクリックの２割がヘン？なサイトにクリックされてたとしたら、25%余分な贅肉がついたCPAで、競合と勝負してることになる。それで、運用がジリ貧な循環になり、本来できた運用ができなくなって撤退となる可能性すらあるわけで、単純な知識の差で永続的な差が付きかねない。</p>
<p>また、全然クリックされなくても、品質インデックスに悪影響を与えない可能性も無くもないので、クリックされない外部サイトも早めに除外する方が良いかも(yahooは外部サイトのクリック履歴を組み入れないと宣言してない。adwordsは除外設定自体が無いけど、QSにはカウントしないと宣言してる)</p>
<p>以上です。</p>
<p>あと、アドワーズの全般に向こうのフォーラムに出たベストプラクティスを、メモ書きしたものがあった。リンクを張っておきます。<a href="https://sites.google.com/a/abc-analytics.com/adwords/forumno-besutopurakutisuno-matome">https://sites.google.com/a/abc-analytics.com/adwords/forumno-besutopurakutisuno-matome</a></p>
<p>リスティング広告は、データがスグに出るし、競合との勝負という点があるので独善的になりにくいし、adwordsに関してはテスト機能＋レポート機能も強化されて、思いつきレベルでもいろいろ試せるし(テストでなくても試せるけど、比較はしにくい)。サイトの継続的な改善にはまずはリスティングというのは良い方法だと思った。その後もニーズを探るのもリスティングが良さそうでもある。ヤフーリスティングもGAとうまい具合に統合できるといいなあと思った。</p>
<p><a rel="nofollow" href="https://abc-analytics.com/%e3%83%aa%e3%82%b9%e3%83%86%e3%82%a3%e3%83%b3%e3%82%b0%e5%ba%83%e5%91%8a%e9%81%8b%e7%94%a8%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6%e3%81%ae%e9%9b%91%e6%84%9f/">リスティング広告運用についての雑感</a>は<a rel="nofollow" href="https://abc-analytics.com">google analyticsについて</a>で公開された投稿です。</p>
]]></content:encoded>
			<wfw:commentRss>https://abc-analytics.com/%e3%83%aa%e3%82%b9%e3%83%86%e3%82%a3%e3%83%b3%e3%82%b0%e5%ba%83%e5%91%8a%e9%81%8b%e7%94%a8%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6%e3%81%ae%e9%9b%91%e6%84%9f/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ggplot2でお手軽ヒートマップ</title>
		<link>https://abc-analytics.com/heatmaps_with_ggfluctuation_or_ggplotgeom_point/</link>
		<comments>https://abc-analytics.com/heatmaps_with_ggfluctuation_or_ggplotgeom_point/#respond</comments>
		<pubDate>Sun, 01 May 2011 04:18:34 +0000</pubDate>
		<dc:creator><![CDATA[shirai kimiyuki]]></dc:creator>
				<category><![CDATA[ANALYTICS]]></category>
		<category><![CDATA[解説]]></category>
		<category><![CDATA[ggplot2]]></category>

		<guid isPermaLink="false">http://abc-analytics.com/ggplot2%e3%81%a7%e3%81%8a%e6%89%8b%e8%bb%bd%e3%83%92%e3%83%bc%e3%83%88%e3%83%9e%e3%83%83%e3%83%97</guid>
		<description><![CDATA[<p>式とグラフの備忘録です。 時間系列の記憶は、人間の記憶の中でも頼りになる方。超整理法のアドバンテージは、ここにあったはず。　で、月間レポートを書く場合に、時間系列のヒートマップだと、人間の記憶とレポートの記録が、上手くつ &#8230; <a href="https://abc-analytics.com/heatmaps_with_ggfluctuation_or_ggplotgeom_point/" class="more-link">続きを読む <span class="screen-reader-text">ggplot2でお手軽ヒートマップ</span></a></p>
<p><a rel="nofollow" href="https://abc-analytics.com/heatmaps_with_ggfluctuation_or_ggplotgeom_point/">ggplot2でお手軽ヒートマップ</a>は<a rel="nofollow" href="https://abc-analytics.com">google analyticsについて</a>で公開された投稿です。</p>
]]></description>
				<content:encoded><![CDATA[<p>式とグラフの備忘録です。</p>
<p>時間系列の記憶は、人間の記憶の中でも頼りになる方。超整理法のアドバンテージは、ここにあったはず。　で、月間レポートを書く場合に、時間系列のヒートマップだと、人間の記憶とレポートの記録が、上手くつながる気がする。なので、ヒートマップ(時系列)が好き。</p>
<p>ggplot2は、簡単にヒートマップが出せる。</p>
<p>例として、このブログのGoogle Analyticsの４月のデータ。<br />時間、日付け、訪問数、平均PVの４つが入ったデータフレーム。</p>
<blockquote>
<p>R&gt; str(abc)<br />&#8216;data.frame&#8217;:&nbsp;&nbsp;&nbsp; 720 obs. of&nbsp; 4 variables:<br /> $ hour&nbsp; : int&nbsp; 0 1 2 3 4 5 6 7 8 9 &#8230;<br /> $ date&nbsp; : Date, format: &#8220;2011-04-01&#8221; &#8220;2011-04-01&#8221; &#8220;2011-04-01&#8221; &#8220;2011-04-01&#8221; &#8230;<br /> $ visits: int&nbsp; 1 1 0 0 1 0 1 0 2 3 &#8230;<br /> $ apv&nbsp;&nbsp; : num&nbsp; 1 1 0 0 1 0 1 0 1 1 &#8230;</p>
</blockquote>
<p>ggplot2を読んで、ggfluctuation。データ型は、テーブル型でもいいし、３カラムのデータフレームでもいい。今回は、まずはapv(average-page-views)を抜いて、３カラムデータフレーム。</p>
<blockquote>
<p>library(ggplot2)<br />ggfluctuation(abc[,-4], type=&#8221;colour&#8221;)</p>
</blockquote>
<p><a href="https://i0.wp.com/abc-analytics.com/wp-content/uploads/ggplot_B511/color-heat-map-google-analytics-data.png?ssl=1"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="color-heat-map-google-analytics-data" border="0" alt="color-heat-map-google-analytics-data" src="https://i2.wp.com/abc-analytics.com/wp-content/uploads/ggplot_B511/color-heat-map-google-analytics-data_thumb.png?resize=484%2C484&#038;ssl=1" width="484" height="484"  data-recalc-dims="1"></a></p>
<p>でも、ggfluctuationのヘルプを見ると、type=colourは traditionalの形だそうだ。</p>
<p>今は、大きさそのものを出す方が良いという認識？</p>
<blockquote>
<p>ggfluctuation(abc[,-4])</p>
</blockquote>
<p><a href="https://i2.wp.com/abc-analytics.com/wp-content/uploads/ggplot_B511/size-heatmap-google-analytics-data.png?ssl=1"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="size-heatmap-google-analytics-data" border="0" alt="size-heatmap-google-analytics-data" src="https://i2.wp.com/abc-analytics.com/wp-content/uploads/ggplot_B511/size-heatmap-google-analytics-data_thumb.png?resize=484%2C484&#038;ssl=1" width="484" height="484"  data-recalc-dims="1"></a></p>
<p>&nbsp;</p>
<p>ただ、ggfluctuationは、拡張性？に乏しいような気がする。<br />geom_pointでcolor, sizeを指定して、４種類のデータ(時間帯、日付、訪問数、平均PV)を示す。</p>
<blockquote>
<p>ggplot(abc, aes(hour, date, colour=apv, size=visits) + geom_point()</p>
</blockquote>
<p>赤みが付くと、平均PVが高い。大きさは訪問数。<br />セッションの量と質と、時間帯＋日付を示す。</p>
<p>今回は、セッションの質を、平均PVにしたけど、<br />ECサイトなら売上(セッション辺り)とか、CVRとかを使えば良い。直帰率でもいい。</p>
<p><a href="https://i1.wp.com/abc-analytics.com/wp-content/uploads/ggplot_B511/size-color-heatmap-google-analytics-data.png?ssl=1"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="size-color-heatmap-google-analytics-data" border="0" alt="size-color-heatmap-google-analytics-data" src="https://i1.wp.com/abc-analytics.com/wp-content/uploads/ggplot_B511/size-color-heatmap-google-analytics-data_thumb.png?resize=484%2C484&#038;ssl=1" width="484" height="484"  data-recalc-dims="1"></a></p>
<p><a rel="nofollow" href="https://abc-analytics.com/heatmaps_with_ggfluctuation_or_ggplotgeom_point/">ggplot2でお手軽ヒートマップ</a>は<a rel="nofollow" href="https://abc-analytics.com">google analyticsについて</a>で公開された投稿です。</p>
]]></content:encoded>
			<wfw:commentRss>https://abc-analytics.com/heatmaps_with_ggfluctuation_or_ggplotgeom_point/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>アドバンスセグメントで擬似加重ソート(Excel のTable機能)</title>
		<link>https://abc-analytics.com/weighted_sort_on_advanced_segment_by_excel_table_function/</link>
		<comments>https://abc-analytics.com/weighted_sort_on_advanced_segment_by_excel_table_function/#respond</comments>
		<pubDate>Mon, 28 Mar 2011 16:25:00 +0000</pubDate>
		<dc:creator><![CDATA[shirai kimiyuki]]></dc:creator>
				<category><![CDATA[ANALYTICS]]></category>
		<category><![CDATA[解説]]></category>
		<category><![CDATA[アドバンスセグメント]]></category>
		<category><![CDATA[加重並び替え]]></category>

		<guid isPermaLink="false">http://abc-analytics.com/weighted_sort_on_advanced_segment_by_excel_table_function</guid>
		<description><![CDATA[<p>Google Analyticsだけに限らないTIPSですが、簡単でそれなりに実用的に使える方法だとおもうので、紹介します。 2010年の秋にGoogle Analyticsの加重並び替えが導入されました。Wikiの方の &#8230; <a href="https://abc-analytics.com/weighted_sort_on_advanced_segment_by_excel_table_function/" class="more-link">続きを読む <span class="screen-reader-text">アドバンスセグメントで擬似加重ソート(Excel のTable機能)</span></a></p>
<p><a rel="nofollow" href="https://abc-analytics.com/weighted_sort_on_advanced_segment_by_excel_table_function/">アドバンスセグメントで擬似加重ソート(Excel のTable機能)</a>は<a rel="nofollow" href="https://abc-analytics.com">google analyticsについて</a>で公開された投稿です。</p>
]]></description>
				<content:encoded><![CDATA[<p>Google Analyticsだけに限らないTIPSですが、簡単でそれなりに実用的に使える方法だとおもうので、紹介します。</p>
<p>2010年の秋にGoogle Analyticsの加重並び替えが導入されました。<a href="http://wiki.abc-analytics.com/top/weighted-sort">Wikiの方の紹介</a>。新機能として紹介されたに似た感じのものを、<strong>アドバンスセグメントでやろう</strong>とするものです。</p>
<p>ちょっとズルですが、APIでデータを取得するのが前提です。</p>
<p>APIでのデータの取得は、実は簡単で、</p>
<ol>
<li>
<ol>
<li><a href="http://code.google.com/apis/analytics/docs/gdata/gdataExplorer.html">Date Feed Explorerを使う</a>(日本語だと止まるので、IDを直接入れる必要がある。)</li>
<li><a href="http://excellentanalytics.com/">http://excellentanalytics.com/</a> を使う。</li>
<li><a href="//abc-analytics.com/data-feeds-query-explorer-in-windows-application">//abc-analytics.com/data-feeds-query-explorer-in-windows-application</a>を使う。</li>
</ol>
</li>
</ol>
<p>で出来ます。他にも、色々なツールがあります。</p>
<p>今回は、Cの自作ツールを使ってデータを取得しておきます。</p>
<p>閲覧開始ページ、キーワード、開始数、直帰数を取ります。</p>
<p><a href="https://i0.wp.com/abc-analytics.com/wp-content/uploads/53da1337793a_12F82/WS000033.jpg?ssl=1"><img src="https://i2.wp.com/abc-analytics.com/wp-content/uploads/53da1337793a_12F82/WS000033_thumb.jpg?resize=219%2C244&#038;ssl=1" border="0" alt="WS000033" title="WS000033" width="219" height="244" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" data-recalc-dims="1" /></a></p>
<p>で、タイトルの話のエクセルの貼り付けます。ここから、本題です。</p>
<p>コピペしたあとは、テーブルにします。</p>
<ul>
<li>テーブル名を英語にします。大事です。</li>
<li>一行目に数字を入れるので、空けておきます。</li>
</ul>
<p><a href="https://i2.wp.com/abc-analytics.com/wp-content/uploads/53da1337793a_12F82/WS000034.jpg?ssl=1"><img src="https://i2.wp.com/abc-analytics.com/wp-content/uploads/53da1337793a_12F82/WS000034_thumb.jpg?resize=644%2C446&#038;ssl=1" border="0" alt="WS000034" title="WS000034" width="644" height="446" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" data-recalc-dims="1" /></a></p>
<p>もう少し、下ごしらえが続きます。</p>
<ul>
<li>直帰数になっているので、直帰率をいれます。</li>
<li>一行目に集計値を出すようにします。
<ul>
<li>ここで、テーブル機能が行きます。</li>
</ul>
</li>
</ul>
<p>entrancesの集計値は、下図のようにススメます。</p>
<p>(<strong>テーブル名が英語だと補完が効いて、マウス無しで＾＾です</strong>)</p>
<table border="0" cellspacing="0" cellpadding="2" width="600">
<tbody>
<tr>
<td width="200" valign="top"><a href="https://i1.wp.com/abc-analytics.com/wp-content/uploads/53da1337793a_12F82/WS000035.jpg?ssl=1"><img src="https://i0.wp.com/abc-analytics.com/wp-content/uploads/53da1337793a_12F82/WS000035_thumb.jpg?resize=136%2C145&#038;ssl=1" border="0" alt="WS000035" title="WS000035" width="136" height="145" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" data-recalc-dims="1" /></a></td>
<td width="200" valign="top"><a href="https://i2.wp.com/abc-analytics.com/wp-content/uploads/53da1337793a_12F82/WS000036.jpg?ssl=1"><img src="https://i1.wp.com/abc-analytics.com/wp-content/uploads/53da1337793a_12F82/WS000036_thumb.jpg?resize=184%2C143&#038;ssl=1" border="0" alt="WS000036" title="WS000036" width="184" height="143" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" data-recalc-dims="1" /></a></td>
<td width="200" valign="top"><a href="https://i1.wp.com/abc-analytics.com/wp-content/uploads/53da1337793a_12F82/WS000037.jpg?ssl=1"><img src="https://i0.wp.com/abc-analytics.com/wp-content/uploads/53da1337793a_12F82/WS000037_thumb.jpg?resize=184%2C173&#038;ssl=1" border="0" alt="WS000037" title="WS000037" width="184" height="173" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" data-recalc-dims="1" /></a></td>
</tr>
</tbody>
</table>
<p>式は、=SUBTOTAL(9,table1[entrances])　になります。</p>
<p>同じようにbounces(直帰数)も計算します。=subtotal(9,table1[bounces]) ですね。</p>
<p>bounceRate(直帰率)は、この２つを割り算します。</p>
<p>ここで、もう一回、画像。</p>
<p><a href="https://i2.wp.com/abc-analytics.com/wp-content/uploads/53da1337793a_12F82/WS000038.jpg?ssl=1"><img src="https://i1.wp.com/abc-analytics.com/wp-content/uploads/53da1337793a_12F82/WS000038_thumb.jpg?resize=644%2C241&#038;ssl=1" border="0" alt="WS000038" title="WS000038" width="644" height="241" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" data-recalc-dims="1" /></a></p>
<p>ここから、本当の本題であった、加重ソートを入れます。</p>
<p>前提として、100回以上セッションがあった、キーワード＋ページは、そのまま。ソレ以下のものを、全体の平均値と按分する方針です。</p>
<p>B1に 分かれ目の数字、100を入れておいて、TrueBounceRateの列を作りましょう。</p>
<p><a href="https://i2.wp.com/abc-analytics.com/wp-content/uploads/53da1337793a_12F82/WS000039.jpg?ssl=1"><img src="https://i1.wp.com/abc-analytics.com/wp-content/uploads/53da1337793a_12F82/WS000039_thumb.jpg?resize=644%2C175&#038;ssl=1" border="0" alt="WS000039" title="WS000039" width="644" height="175" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" data-recalc-dims="1" /></a></p>
<p>上の数式を説明します。</p>
<p>entrancesが１００以上なら、その列のBounceRateのまま。なので [@BounceRate]</p>
<p>以下なら、全体の平均値(E1)と[@BounceRate]を　全体のEntrances(C1)と列のentrances([@enttances])で按分する。</p>
<blockquote><p>([@bounces]/$B$1 * [@BounceRate] )   +   (1 – ([@bounces]/$B$1)) * $E$1</p></blockquote>
<p>Googleの加重ソートは、たぶん似たような感じだと思う。</p>
<p>加重ソートはいろいろ本を読んだけど、理論的背景はよく理解できなかった。</p>
<p>２次元の正規分布の場合に、なんやからすると、上記のような単純な式でもOKという話だったと思うけど、よく理解できなかったので、公開レクチャーしれくれる人がいたらお願いします。<a href="twitter.com/phar">@phar</a></p>
<p>で、ここまでは単に計算しただけど、ここからエクセルのテーブル機能が生きて来る。</p>
<p>ランディングページ単位のキーワードでの加重ソート、ある単語が含まれるキーワードデータの加重ソートとかが簡単にできる。</p>
<p>最初の画面で、</p>
<p><a href="https://i1.wp.com/abc-analytics.com/wp-content/uploads/53da1337793a_12F82/WS000040.jpg?ssl=1"><img src="https://i0.wp.com/abc-analytics.com/wp-content/uploads/53da1337793a_12F82/WS000040_thumb.jpg?resize=644%2C390&#038;ssl=1" border="0" alt="WS000040" title="WS000040" width="644" height="390" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" data-recalc-dims="1" /></a></p>
<p>landingを/api ディレクトリ以下のものに絞る。</p>
<p><a href="https://i0.wp.com/abc-analytics.com/wp-content/uploads/53da1337793a_12F82/WS000041.jpg?ssl=1"><img src="https://i2.wp.com/abc-analytics.com/wp-content/uploads/53da1337793a_12F82/WS000041_thumb.jpg?resize=644%2C341&#038;ssl=1" border="0" alt="WS000041" title="WS000041" width="644" height="341" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" data-recalc-dims="1" /></a></p>
<p>その後、TrueBouncecRateを昇順に。(自動で順列にならない、、、フィルターするたびに、並べ替えの必要がある。ここは、イケテナイ。)</p>
<p><a href="https://i1.wp.com/abc-analytics.com/wp-content/uploads/53da1337793a_12F82/WS000042.jpg?ssl=1"><img src="https://i0.wp.com/abc-analytics.com/wp-content/uploads/53da1337793a_12F82/WS000042_thumb.jpg?resize=644%2C285&#038;ssl=1" border="0" alt="WS000042" title="WS000042" width="644" height="285" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" data-recalc-dims="1" /></a></p>
<p>まあ、それでもそれっぽいソートが出来上がる。landingページを絞った上での、加重ソート。</p>
<p>今回は、ディメンジョンがキーワード、閲覧開始ページという組み合わせだけど、ソレは自分でデータを持ってくるときに好きに選べばいい。</p>
<p>また、加重平均の按分の中心になる平均値(直帰率)も、テーブルでフィルタリングすると、subtotalでそのフィルタリングされたデータの平均値で計算し直されるので、都合が良い。</p>
<p>あまり、データ数が少なくなるとだめだけど、そのデータ全体での平均値を適用して計算しなすのは、フィルタリング前のデータの平均値を持ち出すより適切なはずだ。</p>
<h3>まとめ</h3>
<p>google analyticsには、加重ソート機能がありますが、似たような事をエクセルでしました。</p>
<p>エクセルのテーブル機能を使うことにより、簡単に特定ディメンジョンの加重並び替え(条件は複数でもOK =&gt; アドバンスセグメント)ができることを図示しました。　これは、たぶん、今のレポート画面ではできないことだと思います。　ただし、並び替えのアルゴリズムは違うのでしょう。</p>
<p>冒頭のリンクにも 今回のようなことをやった記録があって（加重ソートが出始めたころに書いたやつ) 、実際の　<a href="http://wiki.abc-analytics.com/top/weighted-sort/graphs">GAでの順番と比較したグラフ</a>がありますが、そんなにズレはないと思います。</p>
<p>そんなにってどんだけ？　主観です＾＾。前やったとき、順位相関とか計算してみたけど、それを用いるのが正しいのかさっぱり分からなかったし、数値も直感的に理解できなかったので、、、単純な加重ソートもGAのソートも、結果としてはそんなに変わらないと思いました。</p>
<p>確か、加重ソートをアドバンスセグメントでという話は、結構要望であったと思うので、擬似ですが、それなりに役に立つ作業工程の紹介だと思います。試してみてください。</p>
<p><a rel="nofollow" href="https://abc-analytics.com/weighted_sort_on_advanced_segment_by_excel_table_function/">アドバンスセグメントで擬似加重ソート(Excel のTable機能)</a>は<a rel="nofollow" href="https://abc-analytics.com">google analyticsについて</a>で公開された投稿です。</p>
]]></content:encoded>
			<wfw:commentRss>https://abc-analytics.com/weighted_sort_on_advanced_segment_by_excel_table_function/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>plyrで集計 ggplot2でグラフ化</title>
		<link>https://abc-analytics.com/plyr_ggplot2/</link>
		<comments>https://abc-analytics.com/plyr_ggplot2/#respond</comments>
		<pubDate>Mon, 10 Jan 2011 17:47:20 +0000</pubDate>
		<dc:creator><![CDATA[shirai kimiyuki]]></dc:creator>
				<category><![CDATA[ANALYTICS]]></category>
		<category><![CDATA[ggplot2]]></category>
		<category><![CDATA[plyr]]></category>

		<guid isPermaLink="false">http://abc-analytics.com/?p=1505</guid>
		<description><![CDATA[<p>Table of Contents 複数の指標を時系列で並べる コード(認証) コード(クエリー、集計、グラフ化) 結果 ページ別セッション数の累計表示 期間効果(曜日)を考慮する 考え方 まずはセッション数。 平均滞在 &#8230; <a href="https://abc-analytics.com/plyr_ggplot2/" class="more-link">続きを読む <span class="screen-reader-text">plyrで集計 ggplot2でグラフ化</span></a></p>
<p><a rel="nofollow" href="https://abc-analytics.com/plyr_ggplot2/">plyrで集計 ggplot2でグラフ化</a>は<a rel="nofollow" href="https://abc-analytics.com">google analyticsについて</a>で公開された投稿です。</p>
]]></description>
				<content:encoded><![CDATA[<div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<li><a href="#sec-2_1">複数の指標を時系列で並べる </a>
<ul>
<li><a href="#sec-2_1_1">コード(認証) </a>
<li><a href="#sec-2_1_2">コード(クエリー、集計、グラフ化) </a>
<li><a href="#sec-2_1_3">結果 </a>
<li><a href="#sec-2_1_4">ページ別セッション数の累計表示 </a></li>
</ul>
<li><a href="#sec-2_2">期間効果(曜日)を考慮する </a>
<ul>
<li><a href="#sec-2_2_1">考え方 </a>
<li><a href="#sec-2_2_2">まずはセッション数。 </a>
<li><a href="#sec-2_2_3">平均滞在時間も曜日効果を見る </a></li>
</ul>
<li><a href="#sec-2_3">分布を見る。滞在時間分布(セグメントデータとして)を見る </a>
<ul>
<li><a href="#sec-2_3_1">考え方 </a>
<li><a href="#sec-2_3_2">月間別 </a>
<li><a href="#sec-2_3_3">メディア別 </a>
<li><a href="#sec-2_3_4">月とメディア別でクロス </a></li>
</ul>
<li><a href="#sec-2_4">キーワード + ランディングページ別のセッション滞在時間 </a>
<ul>
<li><a href="#sec-2_4_1">ドット表示 + ファセット(ランディングページ) </a>
<li><a href="#sec-2_4_2">キーワードグループ別滞在時間</a> </li>
</ul>
</li>
</div>
</div>
<div id="outline-container-1" class="outline-2">
<div id="text-1" class="outline-text-2">
<p>Rを使ったアクセスデータの集計(1)</p>
<p>plyrとggplotを使ってます。<br />(*)Rを勉強し始めたら、早めにplyrとggplot2を覚えるのが吉。<br />見通しがよくなると思います。アクセス数値の集計というより、Rの勉強エントリ。</p>
</div>
</div>
<div id="outline-container-2" class="outline-2">
<h2 id="sec-2"><span style="line-height: 27px; font-size: 18px">複数の指標を時系列で並べる</span></h2>
<div id="outline-container-2_1" class="outline-3">
<div id="text-2_1" class="outline-text-3">
<p>アクセスの基本的な数値を集計して、同じ時間軸で並べます。<br />以下のものを図示します。まず下準備。認証まで</p>
<p><span style="line-height: 23px; color: #000000">コード(認証)</span></p>
</div>
<div id="outline-container-2_1_1" class="outline-4">
<div id="text-2_1_1" class="outline-text-4">
<pre class="example">#RGoogleAnalyticsをファイル内にダウンロードしておいて使う。
source("/home/shirai/ga/r/RGoogleAnalytics/R/RGoogleAnalytics.R")
source("/home/shirai/ga/r/RGoogleAnalytics/R/QueryBuilder.R")

#今回の目的のggplot2、同時に plyrとreshapeもloadされる。
library(ggplot2)

#オブジェクト的な使い方? dataframeの要素に関数がある
ga &lt;- RGoogleAnalytics()
#mail, pwを自分の設定ファイルから取得する
ac &lt;- read.csv("/home/shirai/.gacc.csv",header=T,stringsAsFactors = F)[1,]
#認証を通す
ga$SetCredential(ac$mail,ac$pw)</pre>
<p><span style="line-height: 23px; color: #000000">コード(クエリー、集計、グラフ化)</span></p>
</div>
</div>
<div id="outline-container-2_1_2" class="outline-4">
<div id="text-2_1_2" class="outline-text-4">
<p>クエリーを組み立てて、データ集計、グラフ化まで</p>
<pre class="example">#queryオブジェクトを作ってリクエストを作る。ビルドパターンって奴?
query &lt;- QueryBuilder()
id &lt;- "ga:21600568"
start.date = "2010-01-01"; end.date = "2010-12-30"
query$Init(start.date=start.date, end.date = end.date, table.id = id,
          dimensions = c("ga:date"),
          metrics = c("ga:visits,ga:pageviews,ga:timeOnSite"))

#データ取得 $dataにデータが、それ以外にはレコード数とかもある
output &lt;- ga$GetReportData(query)
data.b &lt;- output$data

#使い易いように、カラム名を加工、日付データは日付型に
names(data.b) &lt;- sub("ga:","",names(data.b))
data.b$date &lt;- as.Date(data.b$date, "%Y%m%d")

#滞在時間は平均滞在時間に、pageviewは平均PVへ、いるものだけ残す
data.b &lt;- transform(data.b, avStay = (timeOnSite/visits))
data.b &lt;- transform(data.b, avPV = (pageviews/visits))
data.b &lt;- data.b[, c("date","visits","avStay","avPV")]

#ずるして、avPVは3000(5分)以上はNAに。　異常値なので
data.b$avStay &lt;- ifelse(data.b$avStay &gt; 1800, NA, data.b$avStay)

#パッケージのreshape機能。いわゆる？行持ちのデータ(日付 x データ種類 x 数値)に
data.b.molten &lt;- melt(data.b, id="date")
head(data.b.molten) #ちょっと出力
#|       date | variable | value |
#| 2010-01-01 | visits   |     9 |
#| 2010-01-02 | visits   |     7 |
#| 2010-01-03 | visits   |     9 |
#| 2010-01-04 | visits   |    20 |
#| 2010-01-05 | visits   |    32 |
#| 2010-01-06 | visits   |    18 |
#
#ggplotで出力(x軸にdate,y軸にvalue:数値,
p &lt;- qplot(date, value, data=data.b.molten, geom="line", main = "基本数値")

#ここで、グループ別に図示する機能 facet_gridを使う, 縦軸スケールは個別で
p &lt;- p + facet_grid(variable ~ ., scale="free_y")

#見た目を調整して、ファイルに出力
p &lt;- p + opts(axis.text.x = theme_text(size=5))
p &lt;- p + opts(strip.text.x = theme_text(size=5))
p &lt;- p + scale_x_date(major="1 month", format="%m月")
ggsave("basic.png", height=6, width=6, dpi=96)</pre>
</div>
</div>
<div id="outline-container-2_1_3" class="outline-4">
<h4 id="sec-2_1_3">結果</h4>
<div id="text-2_1_3" class="outline-text-4">
<p>ぎざぎざ。データの把握がしにくいですね。</p>
<p><img alt="https://i1.wp.com/abc-analytics.com/wp-content/uploads/2011/01/wpid-basic.png?w=660&#038;ssl=1" src="https://i1.wp.com/abc-analytics.com/wp-content/uploads/2011/01/wpid-basic.png?w=660&#038;ssl=1" data-recalc-dims="1"></p>
<p>対策としては、週別のデータにすればいいけど、それだと一日の変動の様子が消えてしまう。下で移動平均を考えることによって、曜日変動の除去を考えるけど、ページ別のセッション数も見ておく。</p>
</div>
</div>
<div id="outline-container-2_1_4" class="outline-4">
<h4 id="sec-2_1_4">ページ別セッション数の累計表示</h4>
<div id="text-2_1_4" class="outline-text-4">
<ul>
<li id="sec-2_1_4_1">全ソースでのページ別
<pre class="example">query$Init(start.date=start.date, end.date = end.date, table.id = id,
           dimensions = c("ga:date,ga:pagePath"),
           metrics = c("ga:uniquePageviews"),
           max.results = 10000,
           start.index = 1
           )
ret &lt;- ga$GetReportData(query,max.rows=50000)
pv.data &lt;- ret$data
names(pv.data) &lt;- sub("ga:","",names(pv.data))
pv.data$date &lt;- as.Date(pv.data$date, "%Y%m%d")
ret &lt;- ddply(pv.data, .(pagePath), summarise, pagesum = sum(uniquePageviews))
top5.urls &lt;- ret[rev(order(ret[,"pagesum"]))[1:5],1]
pv.data.top5 &lt;- subset(pv.data, pagePath %in% top5.urls)</pre>
<p>上位５ページを表示</p>
<pre class="example">p &lt;- qplot(date, uniquePageviews, data=pv.data.top5, geom="line", log="y")
p &lt;- p + facet_grid(pagePath~., labeller = function(l,x)substr(x,0,30),scales='free_y')
p + opts(strip.text.y = theme_text(angle=0)) + scale_x_date(major="1 month", format="%m")
ggsave("visits.png", height=5, width=6,dpi=96)</pre>
<p><img alt="https://i2.wp.com/abc-analytics.com/wp-content/uploads/2011/01/wpid-visits.png?w=660&#038;ssl=1" src="https://i2.wp.com/abc-analytics.com/wp-content/uploads/2011/01/wpid-visits.png?w=660&#038;ssl=1" data-recalc-dims="1"></p>
<p>累計で表示してみる</p>
<pre class="example">pv.data.top5.cumsum &lt;- ddply(pv.data.top5, .(pagePath), transform, cumsum = cumsum(uniquePageviews))
p2 &lt;- ggplot(data=pv.data.top5.cumsum, aes(date,cumsum,color=pagePath)) + geom<sub>line</sub>()
p2 + opts(legend.position="bottom") + scale<sub>x</sub><sub>date</sub>(major="1 month", format="%m")
p2 + opts(legend.position="bottom", legend.box="vertical")
ggsave("cumsum<sub>visits</sub>.png", height=5, width=6, dpi=96)
</pre>
<p><img alt="https://i0.wp.com/abc-analytics.com/wp-content/uploads/2011/01/wpid-cumsum_visits.png?w=660&#038;ssl=1" src="https://i0.wp.com/abc-analytics.com/wp-content/uploads/2011/01/wpid-cumsum_visits.png?w=660&#038;ssl=1" data-recalc-dims="1"></p>
<p>積み上げのが比較しやすいのかも<br />10月過ぎから勢いがついたページがある。</p>
</li>
</ul>
<ul>
<li id="sec-2_1_4_2">ソース別(yahoo,google)で見てみる。yahooとgoogleのセッション数を見てみる
<pre class="example">query$start.index(1)
query$dimensions("ga:data,ga:pagePath,ga:source")
ret &lt;- ga$GetReportData(query,max.rows=50000)
pv.data &lt;- ret$data
names(pv.data) &lt;- sub("ga:","",names(pv.data))
pv.data$date &lt;- as.Date(pv.data$date, "%Y%m%d")
pv.data.top5 &lt;- subset(pv.data, pagePath %in% top5.urls)
pv.data.top5.yg &lt;- subset(pv.data.top5, source %in% c("yahoo","google"))
pv.data.top5.yg.cumsum &lt;- ddply(pv.data.top5.yg, .(pagePath), transform, cumsum = cumsum(uniquePageviews))
p2 &lt;- ggplot(data=pv.data.top5.cumsum, aes(date,cumsum,color=source)) + geom_line()
p2 + facet_grid(pagePath~.,scale="free_y",labeller=function(l,x)substr(x,1,20)) + opts(strip.text.y = theme_text(angle=0))
ggsave("upv_yg.png", width=5,height=5,dpi=96)</pre>
<p><img alt="https://i0.wp.com/abc-analytics.com/wp-content/uploads/2011/01/wpid-upv_yg.png?w=660&#038;ssl=1" src="https://i0.wp.com/abc-analytics.com/wp-content/uploads/2011/01/wpid-upv_yg.png?w=660&#038;ssl=1" data-recalc-dims="1"></p>
<p>あんまり関係なさそう。あとyahooから来るのは一ヶ月遅い(かった)。</p>
</li>
</ul>
</div>
</div>
</div>
<div id="outline-container-2_2" class="outline-3">
<h3 id="sec-2_2">期間効果(曜日)を考慮する</h3>
<div id="outline-container-2_2_1" class="outline-4">
<h4 id="sec-2_2_1">考え方</h4>
<div id="text-2_2_1" class="outline-text-4">
<p>曜日効果を考慮することによって、日別の変動を捉えつつ、ギザギザ問題の解消を目指します。Rのdocompose関数を使って、曜日効果とトレンドを分離します。</p>
<p>基本のアイデアは、観測値を (季節分+トレンド+誤差) と考えて、7日間の移動平均をとれば、曜日効果はキャンセルアウトされる。<br />んで、誤差もキャンセルアウトとまずは考える。なので、移動平均はトレンドの値と考えられる。曜日効果分は、曜日ごとの平均を出して、全体の平均から引いて出す。<br />で、実測値から、トレンドと曜日分を引いたのが誤差分。</p>
<p>こんな考えらしい。細かくは曜日分や誤差分にトレンドを入れたりするみたいだけど、decompose関数は普通にそのまんまみたい。で、decompose関数でいきます。</p>
</div>
</div>
<div id="outline-container-2_2_2" class="outline-4">
<h4 id="sec-2_2_2">まずはセッション数。</h4>
<div id="text-2_2_2" class="outline-text-4">
<ul>
<li id="sec-2_2_2_1">コード
<pre class="example">#前のデータをそのままで visitsのdecomposeする。tsオブジェクトにする
#曜日効果なので、7日間を指定,日付に関しては無視
visits.c &lt;- ts(data.b$visits, freq=7)
#decompose関数はそのまんま、入れるだけ
visits.d &lt;- decompose(visits.c)
#ggplotで出力するので、data.frameに戻す
visits.d1 &lt;- as.data.frame(visits.d[c(2,1,3)])
#NAが初めと終わりに3日づつでるので、除去
visits.d2 &lt;- visits.d1[c(-1,-2,-3,-362,-363,-364),]
#日付を再代入
visits.d2$date &lt;- seq(as.Date("2010-01-04"),as.Date("2010-12-27"),by=1)
#元データと合体して、列順を入れ替え
visits.d2$observe &lt;- data.b$visits[c(-1,-2,-3,-362,-363,-364)]
visits.d2 &lt;- visits.d2[, c(5,1,2,3,4)]
#meltさせて行持ちにして、グラフ
p &lt;- qplot(date,value, data = melt.data.frame(visits.d2, id.vars="date"), geom="line")
p + facet_grid(variable~., scales='free_y')
ggsave("decompose.png", width=6, height=6, dpi=96)</pre>
</li>
</ul>
<ul>
<li id="sec-2_2_2_2">結果上から　実測値、トレンド、曜日効果分、誤差分<img alt="https://i0.wp.com/abc-analytics.com/wp-content/uploads/2011/01/wpid-decompose.png?w=660&#038;ssl=1" src="https://i0.wp.com/abc-analytics.com/wp-content/uploads/2011/01/wpid-decompose.png?w=660&#038;ssl=1" data-recalc-dims="1">セッション数の曜日別差異(合計は 0 )<br />
<table border="2" rules="groups" cellspacing="0" cellpadding="6" frame="hsides">
<caption></caption>
<colgroup>
<col class="left"></col>
<col class="left"></col>
<col class="left"></col>
<col class="left"></col>
<col class="left"></col>
<col class="left"></col>
<col class="left"></col>
<col class="left"></col>
</colgroup>
<tbody>
<tr>
<td class="left">月</td>
<td class="left">火</td>
<td class="left">水</td>
<td class="left">木</td>
<td class="left">金</td>
<td class="left">土</td>
<td class="left">日</td>
<td class="left">計</td>
</tr>
<tr>
<td class="left">9.7</td>
<td class="left">14.3</td>
<td class="left">16.7</td>
<td class="left">15.4</td>
<td class="left">11.9</td>
<td class="left">-32.8</td>
<td class="left">-35.2</td>
<td class="left">0.</td>
</tr>
</tbody>
</table>
<p>とりあえず、トレンドは見える感じです。<br />週刊平均値をプロットするよりは、ダイナミック。日別よりは見やすい。</p>
</li>
</ul>
</div>
</div>
<div id="outline-container-2_2_3" class="outline-4">
<h4 id="sec-2_2_3">平均滞在時間も曜日効果を見る</h4>
<div id="text-2_2_3" class="outline-text-4">
<p>エンゲージメントの測定として、滞在時間を対象にします</p>
<ul>
<li id="sec-2_2_3_1">注意GAはeventTrackの値も滞在時間のログとしてみてます。<br />なので、eventTrackを細かく発行してると、通常よりは細かく滞在時間がでます。<br />ただ、それでもこのサイトのeventTrackeの発行タイミングも等時間隔で出てるわけではないし、<br />非常に怪しいデータではあります。 </li>
</ul>
<ul>
<li id="sec-2_2_3_2">コード
<pre class="example">library(stringr)
query$Init(start.date=start.date, end.date = end.date, table.id = id,
dimensions = c("ga:date"),
metrics = c("ga:visits,ga:pageviews,ga:timeOnSite"))
d1 &lt;- ga$GetReportData(query)
d2 &lt;- d1$data
names(d2) &lt;- str_replace(names(d2), "ga:", "")
d2$date &lt;- as.Date(d2$date,"%Y%m%d")
d2 &lt;- transform(d2, avTime = timeOnSite/visits)
#4月以降のデータにする(１−３月は計測方法が違うので)
d3 &lt;- subset(d2, date &gt;= as.Date("2010-04-01"))
dc.avtime &lt;- decompose(ts(d3$avTime, f=7))
dc.visits &lt;- decompose(ts(d3$visits, f=7))
#曜日別の滞在時間(結果画面で)
print(dc.visits$figure)
print(dc.avtime$figure)
#trendDataだけ持ってくる
d.bind &lt;- data.frame(
visits = dc.visits$trend,
avTime = dc.avtime$trend,
date = seq(as.Date("2010-04-01"),as.Date("2010-12-30"),by=1))
#平均化によるデータのない部分を除去
d.bind2 &lt;- d.bind[c(-1,-2,-3, -272,-273,-274),]
#グラフ化
p &lt;- qplot(date,value, data=melt(d.bind2, id.var="date"),geom="line")
p &lt;- p + facet_grid(variable~.,scale="free_y")
p &lt;- p + scale_x_date(major="1 month", format="%m")
p +  opts(ylab="上：セッション数 下:平均滞在時間(秒)
ggsave("trend_visits_timeonsite.png",height=6,width=6,dpi=96)</pre>
</li>
</ul>
<ul>
<li id="sec-2_2_3_3">結果曜日別差異を見る<br />セッション数(上にだしたと同じもの)<br />
<table border="2" rules="groups" cellspacing="0" cellpadding="6" frame="hsides">
<caption></caption>
<colgroup>
<col class="left"></col>
<col class="left"></col>
<col class="left"></col>
<col class="left"></col>
<col class="left"></col>
<col class="left"></col>
<col class="left"></col>
</colgroup>
<tbody>
<tr>
<td class="left">月</td>
<td class="left">火</td>
<td class="left">水</td>
<td class="left">木</td>
<td class="left">金</td>
<td class="left">土</td>
<td class="left">日</td>
</tr>
<tr>
<td class="left">9.7</td>
<td class="left">14.3</td>
<td class="left">16.7</td>
<td class="left">15.4</td>
<td class="left">11.9</td>
<td class="left">-32.8</td>
<td class="left">-35.2</td>
</tr>
</tbody>
</table>
<p>滞在時間(単位は秒数)</p>
<table border="2" rules="groups" cellspacing="0" cellpadding="6" frame="hsides">
<caption></caption>
<colgroup>
<col class="left"></col>
<col class="left"></col>
<col class="left"></col>
<col class="left"></col>
<col class="left"></col>
<col class="left"></col>
<col class="left"></col>
</colgroup>
<tbody>
<tr>
<td class="left">月曜</td>
<td class="left">火曜</td>
<td class="left">水曜</td>
<td class="left">木曜</td>
<td class="left">金曜</td>
<td class="left">土曜</td>
<td class="left">日曜</td>
</tr>
<tr>
<td class="left">45.8</td>
<td class="left">4.9</td>
<td class="left">53.9</td>
<td class="left">20.3</td>
<td class="left">20.3</td>
<td class="left">(-)46.0</td>
<td class="left">(-)99.2</td>
</tr>
</tbody>
</table>
<p>トレンドデータ(曜日効果除去後のもの)</p>
<p><img alt="https://i2.wp.com/abc-analytics.com/wp-content/uploads/2011/01/wpid-trend_visits_timeonsite.png?w=660&#038;ssl=1" src="https://i2.wp.com/abc-analytics.com/wp-content/uploads/2011/01/wpid-trend_visits_timeonsite.png?w=660&#038;ssl=1" data-recalc-dims="1">なんかこれだけでは、よくわからんかも。 曜日別というより、他のセグメントを当たる必要がある。</p>
</li>
</ul>
</div>
</div>
</div>
<div id="outline-container-2_3" class="outline-3">
<h3 id="sec-2_3">分布を見る。滞在時間分布(セグメントデータとして)を見る</h3>
<div id="outline-container-2_3_1" class="outline-4">
<h4 id="sec-2_3_1">考え方</h4>
<div id="text-2_3_1" class="outline-text-4">
<p>日別の集計値としての、平均滞在時間ではなんとも言いがたい。<br />実は、GAはセッション滞在時間もセグメント情報として持ってる。<br />なので、他のセグメント情報と掛け合わせで、滞在時間によるセッションの分布がだせる。<br />指標側では平均しか見えないけど、こちらは分布まで見える。<br />ここでは、月別とメディア別とランディングページ別を見てみる<br />ただ、上でも書きましたが、滞在時間データそのものの信頼性には疑問はあります。<br />僕自身のRの演習が主目的になっちゃってます。</p>
</div>
</div>
<div id="outline-container-2_3_2" class="outline-4">
<h4 id="sec-2_3_2">月間別</h4>
<div id="text-2_3_2" class="outline-text-4">
<p>月別のセグメントも入れて、データを取得。滞在時間は ga:visitLength</p>
<ul>
<li id="sec-2_3_2_1">単純にバー表示
<pre class="example">#クエリーを組み立てる。その前は、前のコードから続いてるものがある
query$dimensions("ga:visitLength,ga:month")
query$metrics("ga:visits")

#前と同じくmax.rowsは10000に増やす
output &lt;- ga$GetReportData(query,max.rows=10000)
output$total.result #=&gt;5708
d1 &lt;- output$data
names(d1) &lt;- sub("ga:","",names(d1))

#バープロットは、通常はcountデータをとるけど、weight指定で合計もいける
p &lt;- qplot(visitLength, data=d1, geom="bar", weight=visits, log="y")
p + facet_grid(month~.)</pre>
<p>なんかみずらい、、、右側に月の表示。左側にセッション数、x軸は滞在時間だけど、、謎グラフになった。<br />あと滞在時間が、飛び飛びになってるが怪しいし、０秒がどこだか不明だし、、<br />全然だめ、、</p>
<p><img alt="https://i1.wp.com/abc-analytics.com/wp-content/uploads/2011/01/wpid-bar_month_visits.png?w=660&#038;ssl=1" src="https://i1.wp.com/abc-analytics.com/wp-content/uploads/2011/01/wpid-bar_month_visits.png?w=660&#038;ssl=1" data-recalc-dims="1"></p>
<p>横軸を詰める。facet_wrapで表示。</p>
<pre class="example">p &lt;- qplot(visitLength, data=d1, geom="bar", weight=visits, log="xy")
p + facet_wrap(~month)</pre>
<p>こちらのがみやすい。</p>
<p><img alt="https://i2.wp.com/abc-analytics.com/wp-content/uploads/2011/01/wpid-month_stay_dst.png?w=660&#038;ssl=1" src="https://i2.wp.com/abc-analytics.com/wp-content/uploads/2011/01/wpid-month_stay_dst.png?w=660&#038;ssl=1" data-recalc-dims="1"></p>
</li>
</ul>
<ul>
<li id="sec-2_3_2_2">density表示にするR(ggplot2)は、近似曲線も計算して引いてくれる。<br />月別の分布を密度で近似線表示
<pre class="example">#http://tolstoy.newcastle.edu.au/R/e2/help/06/10/2836.html
d2 &lt;- data.frame(lapply(d1, rep, d1$visits)[1:2])
d2$visitLength &lt;- as.numeric(d2$visitLength)
qplot(x=d2$visitLength, data=d2, geom="density",binwidth=10) + facet_grid(month ~ .)
ggsave(dpi=96,width=6,height=6,file="hist_month_visits.png")</pre>
<p><img alt="https://i0.wp.com/abc-analytics.com/wp-content/uploads/2011/01/wpid-hist_month_visits.png?w=660&#038;ssl=1" src="https://i0.wp.com/abc-analytics.com/wp-content/uploads/2011/01/wpid-hist_month_visits.png?w=660&#038;ssl=1" data-recalc-dims="1"></p>
<p>なんか形は違ってきましたね、、、くらいか。</p>
</li>
</ul>
<ul>
<li id="sec-2_3_2_3">平均値と中央値の表示<br />これでも意味不明なので、平均値と中央値と引く<br />近似線と実数(密度だけど)のバーを合わせて表示もする。
<pre class="example">#中央値と平均値を求める
stt &lt;- ddply(d2, .(month), function(x) data.frame(median=median(x$visitLength),
                                                   mean=mean(x$visitLength)))
#以下、グラフ出力今回は、barplotとdensityを合わせる
p &lt;- ggplot(d2, aes(visitLength)) + geom_histogram(aes(y=..density..)) + geom_density()
p &lt;- p + facet_grid(month ~ ., labeller=function(l,x)paste(x,"月",sep=""))
p &lt;- p + opts(strip.text.y = theme_text(hjust=1, angle=0))
p &lt;- p + geom_vline(data=stt, aes(xintercept=stt$median), color=I("red"))
p &lt;- p + geom_vline(data=stt, aes(xintercept=stt$mean), color=I("green"))
ggsave("hist_month_visits2.png",width=6,height=10,dpi=96)</pre>
<p>レジェンドが引けなかった、、、緑が平均値。赤が中央値。</p>
<p>複数のgeomがある場合のlegendの対象指定はどうなのだろう？</p>
<p><img alt="https://i1.wp.com/abc-analytics.com/wp-content/uploads/2011/01/wpid-hist_month_visits2.png?w=660&#038;ssl=1" src="https://i1.wp.com/abc-analytics.com/wp-content/uploads/2011/01/wpid-hist_month_visits2.png?w=660&#038;ssl=1" data-recalc-dims="1"></p>
</li>
</ul>
</div>
</div>
<div id="outline-container-2_3_3" class="outline-4">
<h4 id="sec-2_3_3">メディア別</h4>
<div id="text-2_3_3" class="outline-text-4">
<p>時間変化とは別にメディア別もやってみる。</p>
<ul>
<li id="sec-2_3_3_1">バープロット
<pre class="example">query$dimensions("ga:visitLength,ga:medium")
query$metrics("ga:visits")
output.m &lt;- ga$GetReportData(query,max.rows=10000)
d.m &lt;- output.m$data
colnames(d.m) &lt;- sub("ga:","", colnames(d.m))
#organic, referral, (none) に絞る
d.m1 &lt;- subset(d.m, medium %in% c("organic","referral","(none)"))
#visits単位のレコードに
d.m2 &lt;- data.frame(lapply(d.m1[1:2], rep, d.m1$visits))
d.m2$visitLength &lt;- as.numeric(d.m2$visitLength)
p &lt;- ggplot(d.m2, aes(x=medium, y=visitLength)) + stat_boxplot()
p &lt;- p + coord_flip() + ylab("滞在時間(秒)")
ggsave("boxplot_medium_visits.png",width=6,height=6,dpi=96)</pre>
<p><img alt="https://i2.wp.com/abc-analytics.com/wp-content/uploads/2011/01/wpid-boxplot_medium_visits.png?w=660&#038;ssl=1" src="https://i2.wp.com/abc-analytics.com/wp-content/uploads/2011/01/wpid-boxplot_medium_visits.png?w=660&#038;ssl=1" data-recalc-dims="1"></p>
<p>分類が大まかすぎる。下でキーワード別をやる</p>
</li>
</ul>
<ul>
<li id="sec-2_3_3_2">四分表示<br />数値を出しておく<br />今度は分表示にしておく。
<pre class="example">ddply(d.m2, .(medium), function(x) round(quantile(x$visitLength/60)))</pre>
<p>メディア別滞在時間分布(分)</p>
<table border="2" rules="groups" cellspacing="0" cellpadding="6" frame="hsides">
<caption></caption>
<colgroup>
<col class="left"></col>
<col class="right"></col>
<col class="right"></col>
<col class="right"></col>
<col class="right"></col>
<col class="right"></col>
</colgroup>
<thead>
<tr>
<th class="left" scope="col">medium</th>
<th class="right" scope="col">0%</th>
<th class="right" scope="col">25%</th>
<th class="right" scope="col">50%</th>
<th class="right" scope="col">75%</th>
<th class="right" scope="col">100%</th>
</tr>
</thead>
<tbody>
<tr>
<td class="left">(none)</td>
<td class="right">0</td>
<td class="right">2</td>
<td class="right">12</td>
<td class="right">22</td>
<td class="right">33</td>
</tr>
<tr>
<td class="left">organic</td>
<td class="right">0</td>
<td class="right">6</td>
<td class="right">16</td>
<td class="right">24</td>
<td class="right">33</td>
</tr>
<tr>
<td class="left">referral</td>
<td class="right">0</td>
<td class="right">4</td>
<td class="right">14</td>
<td class="right">23</td>
<td class="right">33</td>
</tr>
</tbody>
</table>
</li>
</ul>
</div>
</div>
<div id="outline-container-2_3_4" class="outline-4">
<h4 id="sec-2_3_4">月とメディア別でクロス</h4>
<div id="text-2_3_4" class="outline-text-4">
<p>上で月別、メディア別をやったけど、両者を合わせる。</p>
<pre class="example">#組み合わせ
    query$dimensions("ga:visitLength,ga:medium,ga:month")
    query$metrics("ga:visits")
    output.mm &lt;- ga$GetReportData(query,max.rows=100000)
    d.mm &lt;- output.mm$data
    colnames(d.mm) &lt;- sub("ga:","", colnames(d.mm))
    #organic, referral, (none) に絞る
    d.mm1 &lt;- subset(d.mm, medium %in% c("organic","referral","(none)"))
    #visits単位のレコードに
    d.mm2 &lt;- data.frame(lapply(d.mm1[1:3], rep, d.mm1$visits))
    d.mm2$visitLength &lt;- as.numeric(d.mm2$visitLength)
    p &lt;- ggplot(d.mm2, aes(x=medium, y=visitLength, color=medium)) + stat_boxplot()
    p &lt;- p + facet_grid(.~month) + ylab("滞在時間(秒)")
    p &lt;- p + opts(axis.text.x = theme_text(angle=90,hjust=0, vjust=0))
    ggsave("boxplot_medium_month_visits.png",width=8,height=5,dpi=96)</pre>
<p>結果</p>
<p><img alt="https://i1.wp.com/abc-analytics.com/wp-content/uploads/2011/01/wpid-boxplot_medium_month_visits.png?w=660&#038;ssl=1" src="https://i1.wp.com/abc-analytics.com/wp-content/uploads/2011/01/wpid-boxplot_medium_month_visits.png?w=660&#038;ssl=1" data-recalc-dims="1"></p>
<p>数字も出しておく</p>
<p>母数(セッション数)</p>
<pre class="example">cast(d.mm2, medium~month,  length)</pre>
<table border="2" rules="groups" cellspacing="0" cellpadding="6" frame="hsides">
<caption></caption>
<colgroup>
<col class="left"></col>
<col class="right"></col>
<col class="right"></col>
<col class="right"></col>
<col class="right"></col>
<col class="right"></col>
<col class="right"></col>
<col class="right"></col>
<col class="right"></col>
<col class="right"></col>
</colgroup>
<thead>
<tr>
<th class="left" scope="col">medium</th>
<th class="right" scope="col">04</th>
<th class="right" scope="col">05</th>
<th class="right" scope="col">06</th>
<th class="right" scope="col">07</th>
<th class="right" scope="col">08</th>
<th class="right" scope="col">09</th>
<th class="right" scope="col">10</th>
<th class="right" scope="col">11</th>
<th class="right" scope="col">11</th>
</tr>
</thead>
<tbody>
<tr>
<td class="left">(none)</td>
<td class="right">139</td>
<td class="right">117</td>
<td class="right">337</td>
<td class="right">199</td>
<td class="right">217</td>
<td class="right">309</td>
<td class="right">256</td>
<td class="right">229</td>
<td class="right">161</td>
</tr>
<tr>
<td class="left">organic</td>
<td class="right">842</td>
<td class="right">1007</td>
<td class="right">1194</td>
<td class="right">1541</td>
<td class="right">1477</td>
<td class="right">1453</td>
<td class="right">1586</td>
<td class="right">1713</td>
<td class="right">1392</td>
</tr>
<tr>
<td class="left">referral</td>
<td class="right">124</td>
<td class="right">79</td>
<td class="right">506</td>
<td class="right">182</td>
<td class="right">354</td>
<td class="right">392</td>
<td class="right">231</td>
<td class="right">218</td>
<td class="right">172</td>
</tr>
</tbody>
</table>
<p>滞在時間平均値</p>
<pre class="example">cast(d.mm2, medium~month,  function(x)round(mean))</pre>
<table border="2" rules="groups" cellspacing="0" cellpadding="6" frame="hsides">
<caption></caption>
<colgroup>
<col class="left"></col>
<col class="right"></col>
<col class="right"></col>
<col class="right"></col>
<col class="right"></col>
<col class="right"></col>
<col class="right"></col>
<col class="right"></col>
<col class="right"></col>
<col class="right"></col>
</colgroup>
<thead>
<tr>
<th class="left" scope="col">medium</th>
<th class="right" scope="col">04</th>
<th class="right" scope="col">05</th>
<th class="right" scope="col">06</th>
<th class="right" scope="col">07</th>
<th class="right" scope="col">08</th>
<th class="right" scope="col">09</th>
<th class="right" scope="col">10</th>
<th class="right" scope="col">11</th>
<th class="right" scope="col">12</th>
</tr>
</thead>
<tbody>
<tr>
<td class="left">(none)</td>
<td class="right">671</td>
<td class="right">723</td>
<td class="right">722</td>
<td class="right">903</td>
<td class="right">741</td>
<td class="right">702</td>
<td class="right">822</td>
<td class="right">813</td>
<td class="right">962</td>
</tr>
<tr>
<td class="left">organic</td>
<td class="right">682</td>
<td class="right">794</td>
<td class="right">912</td>
<td class="right">942</td>
<td class="right">909</td>
<td class="right">914</td>
<td class="right">956</td>
<td class="right">952</td>
<td class="right">967</td>
</tr>
<tr>
<td class="left">referral</td>
<td class="right">590</td>
<td class="right">780</td>
<td class="right">800</td>
<td class="right">892</td>
<td class="right">860</td>
<td class="right">832</td>
<td class="right">867</td>
<td class="right">973</td>
<td class="right">1009</td>
</tr>
</tbody>
</table>
<p>滞在時間中央値</p>
<pre class="example">cast(d.mm2, medium~month,  function(x)round(median))</pre>
<table border="2" rules="groups" cellspacing="0" cellpadding="6" frame="hsides">
<caption></caption>
<colgroup>
<col class="left"></col>
<col class="right"></col>
<col class="right"></col>
<col class="right"></col>
<col class="right"></col>
<col class="right"></col>
<col class="right"></col>
<col class="right"></col>
<col class="right"></col>
<col class="right"></col>
</colgroup>
<thead>
<tr>
<th class="left" scope="col">medium</th>
<th class="right" scope="col">04</th>
<th class="right" scope="col">05</th>
<th class="right" scope="col">06</th>
<th class="right" scope="col">07</th>
<th class="right" scope="col">08</th>
<th class="right" scope="col">09</th>
<th class="right" scope="col">10</th>
<th class="right" scope="col">11</th>
<th class="right" scope="col">12</th>
</tr>
</thead>
<tbody>
<tr>
<td class="left">(none)</td>
<td class="right">552</td>
<td class="right">686</td>
<td class="right">704</td>
<td class="right">960</td>
<td class="right">703</td>
<td class="right">661</td>
<td class="right">772</td>
<td class="right">778</td>
<td class="right">1022</td>
</tr>
<tr>
<td class="left">organic</td>
<td class="right">609</td>
<td class="right">745</td>
<td class="right">1002</td>
<td class="right">1022</td>
<td class="right">948</td>
<td class="right">975</td>
<td class="right">1016</td>
<td class="right">1002</td>
<td class="right">1002</td>
</tr>
<tr>
<td class="left">referral</td>
<td class="right">183</td>
<td class="right">882</td>
<td class="right">826</td>
<td class="right">917</td>
<td class="right">874</td>
<td class="right">833</td>
<td class="right">778</td>
<td class="right">1002</td>
<td class="right">1056</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div id="outline-container-2_4" class="outline-3">
<h3 id="sec-2_4">キーワード + ランディングページ別のセッション滞在時間</h3>
<div id="text-2_4" class="outline-text-3">
<p>ここからは、キーワードを見ていく。指標はそのまま滞在時間。</p>
</div>
<div id="outline-container-2_4_1" class="outline-4">
<h4 id="sec-2_4_1">ドット表示 + ファセット(ランディングページ)</h4>
<div id="text-2_4_1" class="outline-text-4">
<p>ランディングページもセグメントに加えてみる。</p>
<pre class="example">##dimensionとmetricsを設定して取得。他の項目はそのまま
query$dimensions("ga:landingPagePath,ga:visitLength,ga:keyword")
guery$metrics("ga:entrances")
#前回のindexがclearされないみたい。1に戻しておく。
query$start.index(1)
out.k &lt;- ga$GetReportData(query,max.rows=100000)
str(out.k)</pre>
<p>得られるデータはこんな感じ<br />閲覧開始は15379回あった。レコード?数は13061</p>
<pre class="example">List of 3
 $ data         :'data.frame':  13061 obs. of  4 variables:
  ..$ ga:landingPagePath: chr [1:13061] "/" "/" "/" "/" ...
  ..$ ga:visitLength    : chr [1:13061] "0" "0" "0" "0" ...
  ..$ ga:keyword        : chr [1:13061] "(not set)" "abc-analytics.com" "analytcs.com" "analytics tracking code input" ...
  ..$ ga:entrances      : num [1:13061] 96 1 1 1 1 3 1 1 2 1 ...
 $ aggr.totals  :'data.frame':  1 obs. of  1 variable:
  ..$ aggregate.totals: num 15379
 $ total.results: num 13061</pre>
<p>&nbsp;</p>
<pre class="example">d.k &lt;- out.k$data
names(d.k) &lt;- sub("ga:","",names(d.k))
d.k1 &lt;- data.frame(lapply(d.k[1:3], rep, d.k$entrances))
str(d.k1)</pre>
<p>こんな形のデータになる。閲覧開始数は消えて１セッション=1レコードの形に。(本当は開始数=セッションではないが)</p>
<p>data.frame&#8217;: 15379 obs. of 3 variables:<br />$ landingPagePath: Factor w/ 525 levels &#8220;/&#8221;,&#8221;<em>%EE3%81%97%E3%81%9F&#8221;,..: 1 1 1 1 1 1 1 1 1 1 … $ visitLength : Factor w</em> 1893 levels &#8220;0&#8221;,&#8221;1&#8243;,&#8221;10&#8243;,&#8221;100&#8243;,..: 1 1 1 1 1 1 1 1 1 1 …<br />$ keyword : Factor w/ 6904 levels &#8220;&#8221;/nan&#8221; アナリティクス&#8221;,..: 57 57 57 57 57 57 57 57 57 57 …</p>
<p>とりあえず、閲覧開始上位５ページに対象を絞る</p>
<pre class="example">top5.pages &lt;- names(rev(sort(d.k1$landingPagePath))[1:5])
d.k2 &lt;- subset(d.k1, landingPagePath %in% top5.pages)
#使わないファクターをdrop
d.k2 &lt;- droplevels(d.k2)</pre>
<p>上位30キーワードにデータをさらに絞る</p>
<pre class="example">top30.kw &lt;- names(rev(sort(table(d.k2$keyword)))[1:30])
d.k3 &lt;- subset(d.k2, keyword %in% top30.kw)
d.k3$visitLength &lt;- as.numeric(d.k3$visitLength)
d.k3 &lt;- droplevels(d.k3)
str(d.k3)</pre>
<p>こんな感じのデータソースになる 3347セッション,5ページの30キーワードについて,811通りの滞在時間</p>
<p>&#8216;data.frame&#8217;: 3347 obs. of 3 variables:<br />$ landingPagePath: Factor w/ 5 levels &#8220;/&#8221;,&#8221;/measure<sub>how</sub><sub>much</sub><sub>viewed</sub><sub>in</sub><sub>google</sub><sub>analytics</sub>&#8220;,..: 1 1 1 1 1 1 1 1 1 1 …<br />$ visitLength : num 1 1 1 1 1 1 1 1 1 1 …<br />$ keyword : Factor w/ 30 levels &#8220;(not set)&#8221;,&#8221;analytics tracking code input&#8221;,..: 1 1 1 1 1 1 1 1 1 1 …</p>
<p>グラフ化。透明度を半分にして、重なり表示</p>
<pre class="example">p &lt;- qplot(data=d.k1, x=visitLength,y=KW1, alpha=I(1/2))
p &lt;- p + facet_grid(LP1 ~ ., scales="free_y", space="free",labeller=function(l,x){substr(x,1,20)})
p &lt;- p + coord_trans(x="log10")
p &lt;- p + opts(strip.text.y = theme_text(angle=0))
p
ggsave(filename="landing_keyword_length.png", width=10, height=10, dpi=96)</pre>
<p><img alt="https://i1.wp.com/abc-analytics.com/wp-content/uploads/2011/01/wpid-landing_keyword_length.png?w=660&#038;ssl=1" src="https://i1.wp.com/abc-analytics.com/wp-content/uploads/2011/01/wpid-landing_keyword_length.png?w=660&#038;ssl=1" data-recalc-dims="1"></p>
<p>似たようなキーワードを統合して扱わないとキーワード別にしても意味なさそう<br />なので、キーワードグルーピングをやる</p>
</div>
</div>
<div id="outline-container-2_4_2" class="outline-4">
<h4 id="sec-2_4_2">キーワードグループ別滞在時間</h4>
<div id="text-2_4_2" class="outline-text-4">
<p>さて、キーワードはバラバラになりすぎてて、全体の把握が難しい。<br />キーワードでは検索フレーズ単位で管理されているので、同じ意味でもたくさんの項目になってるせい。統合しないといけないのだが、やり方不明、、、</p>
<ul>
<li id="sec-2_4_2_1">キーワードに分解して整理する空白のものを単語に分解して整理してみる。<br />上で、1セッション1レコードの形でキーワードが含まれる形を作ったので、それを使う。
<pre class="example">#(not set)を除く
d.k2 &lt;- subset(d.k1, keyword != "(not set)")
#キーワードを" "区切りで文字ベクトルにする
k1 &lt;- sapply(as.character(d.k2$keyword), function(x) str_split(x," "))
length(k1)
[1] 11406
#検索キーワードア辺り、平均2.7くらいの語数か
R&gt; sum(sapply(k1, length))
[1] 28921
#2,3語くらいが多い
table(sapply(k1, length))</pre>
<p>検索フレーズでの単語数</p>
<table border="2" rules="groups" cellspacing="0" cellpadding="6" frame="hsides">
<caption></caption>
<colgroup>
<col class="left"></col>
<col class="left"></col>
<col class="left"></col>
<col class="left"></col>
<col class="left"></col>
<col class="left"></col>
<col class="left"></col>
<col class="left"></col>
<col class="left"></col>
<col class="left"></col>
</colgroup>
<tbody>
<tr>
<td class="left">1語</td>
<td class="left">2語</td>
<td class="left">3語</td>
<td class="left">4語</td>
<td class="left">5語</td>
<td class="left">6語</td>
<td class="left">7語</td>
<td class="left">8語</td>
<td class="left">9語</td>
<td class="left">10語</td>
</tr>
<tr>
<td class="left">2138</td>
<td class="left">3646</td>
<td class="left">3603</td>
<td class="left">1568</td>
<td class="left">333</td>
<td class="left">98</td>
<td class="left">10</td>
<td class="left">5</td>
<td class="left">3</td>
<td class="left">2</td>
</tr>
</tbody>
</table>
<p>単語単位で見る</p>
<pre class="example">#これをベクトルにする loop以外に思いつかない、、、
ret &lt;- ""
for(i in 1:length(k1)) ret &lt;- c(ret,k1[[i]])
#よくわかってないけど、この形が便利そう
k.table &lt;- adply(rev(sort(table(ret))), 1, function(x)x)
names(k.table) &lt;- c("kw","cumsum")
#上位１０単語を出力
k.table[1:10,]</pre>
<p>単語単位で見るキーワード登場回数（単語別での累計セッション数)のベスト１０</p>
<table border="2" rules="groups" cellspacing="0" cellpadding="6" frame="hsides">
<caption></caption>
<colgroup>
<col class="right"></col>
<col class="left"></col>
<col class="right"></col>
</colgroup>
<tbody>
<tr>
<td class="right">1</td>
<td class="left">google</td>
<td class="right">3876</td>
</tr>
<tr>
<td class="right">2</td>
<td class="left">analytics</td>
<td class="right">3748</td>
</tr>
<tr>
<td class="right">3</td>
<td class="left">アナリティクス</td>
<td class="right">482</td>
</tr>
<tr>
<td class="right">4</td>
<td class="left">アクセス解析</td>
<td class="right">482</td>
</tr>
<tr>
<td class="right">5</td>
<td class="left">googleanalytics</td>
<td class="right">463</td>
</tr>
<tr>
<td class="right">6</td>
<td class="left">ユニークユーザー</td>
<td class="right">413</td>
</tr>
<tr>
<td class="right">7</td>
<td class="left">ページ別セッション数</td>
<td class="right">347</td>
</tr>
<tr>
<td class="right">8</td>
<td class="left">cookie</td>
<td class="right">297</td>
</tr>
<tr>
<td class="right">9</td>
<td class="left">セッション</td>
<td class="right">277</td>
</tr>
<tr>
<td class="right">10</td>
<td class="left">api</td>
<td class="right">270</td>
</tr>
</tbody>
</table>
<p>とりあえず、整理しやすい単位に分解はできた。</p>
</li>
</ul>
<ul>
<li id="sec-2_4_2_2">同時出現表を作る分解したあとは、どういう組み合わせになっていたかを表示する。<br />同時に使われていた単語を集計する<br />先頭の１０単語について、同時に使われた単語の出現回数を数える
<pre class="example">library(string r)
#整理
d.k1 &lt;- d.k1[, c(-4,-5)]
#googleといっしょに検索された言葉
d.k.google &lt;- d.k1[grep("google", d.k1$keyword),"keyword"]
d.k.google2 &lt;- Reduce(c, str_split(d.k.google, " "), ac=F)</pre>
<p>google という単語と一緒に検索された単語</p>
<table border="2" rules="groups" cellspacing="0" cellpadding="6" frame="hsides">
<caption></caption>
<colgroup>
<col class="left"></col>
<col class="right"></col>
</colgroup>
<tbody>
<tr>
<td class="left">google</td>
<td class="right">325</td>
</tr>
<tr>
<td class="left">analytics</td>
<td class="right">262</td>
</tr>
<tr>
<td class="left">ユニークユーザー</td>
<td class="right">99</td>
</tr>
<tr>
<td class="left">閲覧開始ページ</td>
<td class="right">60</td>
</tr>
<tr>
<td class="left">アクセス解析</td>
<td class="right">38</td>
</tr>
<tr>
<td class="left">ユニークユーザー数</td>
<td class="right">32</td>
</tr>
<tr>
<td class="left">an</td>
<td class="right">25</td>
</tr>
<tr>
<td class="left">ページ別セッション数</td>
<td class="right">21</td>
</tr>
<tr>
<td class="left">ユニークユーザ</td>
<td class="right">21</td>
</tr>
<tr>
<td class="left">アナリティクス</td>
<td class="right">17</td>
</tr>
<tr>
<td class="left">googleanalytics</td>
<td class="right">16</td>
</tr>
<tr>
<td class="left">sql</td>
<td class="right">16</td>
</tr>
<tr>
<td class="left">使う</td>
<td class="right">16</td>
</tr>
<tr>
<td class="left">見方</td>
<td class="right">15</td>
</tr>
<tr>
<td class="left">閲覧開始</td>
<td class="right">14</td>
</tr>
</tbody>
</table>
<p>他の単語にも適用する 上位8単語にする</p>
<pre class="example">ret &lt;- sapply(top10, function(word, df){
                        kws &lt;- df[grep(word, df$keyword),"keyword"]
                        Reduce(c, str_split(kws," "), ac=F)
                     }
              , d.k1)
ret.top8 &lt;- ldply(ret, function(x){
                         d &lt;- sort(table(x),d=T)[1:8]
                         mapply(paste,sep=":", d, names(d))
                        })
#各単語ごとに、同時出現単語を上位８個抽出
out &lt;- ldply(ret, function(x) sort(table(x),d=F)
#タテヨコ逆転
t(out)</pre>
<p>検索フレーズに含まれたもの(冒頭の数字が出現回数)*最初は同じ単語なので、その単語のキーワード回数</p>
<table border="2" rules="groups" cellspacing="0" cellpadding="6" frame="hsides">
<caption></caption>
<colgroup>
<col class="left"></col>
<col class="left"></col>
<col class="left"></col>
<col class="left"></col>
<col class="left"></col>
</colgroup>
<thead>
<tr>
<th class="left" scope="col">&#8220;google&#8221;</th>
<th class="left" scope="col">&#8220;analytics&#8221;</th>
<th class="left" scope="col">&#8220;アナリティクス&#8221;</th>
<th class="left" scope="col">&#8220;アクセス解析&#8221;</th>
<th class="left" scope="col">&#8220;googleanalytics&#8221;</th>
</tr>
</thead>
<tbody>
<tr>
<td class="left">&#8220;3876:google&#8221;</td>
<td class="left">&#8220;3748:analytics&#8221;</td>
<td class="left">&#8220;482:アナリティクス&#8221;</td>
<td class="left">&#8220;482:アクセス解析&#8221;</td>
<td class="left">&#8220;463:googleanalytics&#8221;</td>
</tr>
<tr>
<td class="left">&#8220;2549:analytics&#8221;</td>
<td class="left">&#8220;2577:google&#8221;</td>
<td class="left">&#8220;235:google&#8221;</td>
<td class="left">&#8220;148:google&#8221;</td>
<td class="left">&#8220;26:閲覧開始ページ&#8221;</td>
</tr>
<tr>
<td class="left">&#8220;463:googleanalytics&#8221;</td>
<td class="left">&#8220;463:googleanalytics&#8221;</td>
<td class="left">&#8220;74:googleアナリティクス&#8221;</td>
<td class="left">&#8220;53:analytics&#8221;</td>
<td class="left">&#8220;21:ユニークユーザー&#8221;</td>
</tr>
<tr>
<td class="left">&#8220;236:アナリティクス&#8221;</td>
<td class="left">&#8220;191:ユニークユーザー&#8221;</td>
<td class="left">&#8220;51:ユニークユーザー&#8221;</td>
<td class="left">&#8220;33:セッション&#8221;</td>
<td class="left">&#8220;15:ページ別&#8221;</td>
</tr>
<tr>
<td class="left">&#8220;218:ユニークユーザー&#8221;</td>
<td class="left">&#8220;168:api&#8221;</td>
<td class="left">&#8220;43:グーグルアナリティクス&#8221;</td>
<td class="left">&#8220;17:api&#8221;</td>
<td class="left">&#8220;15:目標到達プロセス&#8221;</td>
</tr>
<tr>
<td class="left">&#8220;202:api&#8221;</td>
<td class="left">&#8220;121:閲覧開始ページ&#8221;</td>
<td class="left">&#8220;24:閲覧開始ページ&#8221;</td>
<td class="left">&#8220;16:ユニークユーザー&#8221;</td>
<td class="left">&#8220;14:複数ドメイン&#8221;</td>
</tr>
<tr>
<td class="left">&#8220;153:アクセス解析&#8221;</td>
<td class="left">&#8220;107:セッション数&#8221;</td>
<td class="left">&#8220;21:ページ別セッション&#8221;</td>
<td class="left">&#8220;12:グーグル&#8221;</td>
<td class="left">&#8220;13:カスタム変数&#8221;</td>
</tr>
<tr>
<td class="left">&#8220;117:apps&#8221;</td>
<td class="left">&#8220;95:セッション&#8221;</td>
<td class="left">&#8220;18:ページ別&#8221;</td>
<td class="left">&#8220;12:外部リンク&#8221;</td>
<td class="left">&#8220;12:セッション&#8221;</td>
</tr>
</tbody>
</table>
<p>内訳はこんな感じ。眺めるだけ、、middle wordでやればと想うけど、、、</p>
</li>
</ul>
<ul>
<li id="sec-2_4_2_3">グループ化してグラフにこの１０単語でグルーピングする<br />重複所属は、どちらにもカウントするようにする
<pre class="example">#ごちゃごちゃしてきたけど、、、グループ名カラムを追加して、dataframeを作り直し
d.g &lt;-  do.call("rbind",lapply(top10, function(group) cbind(d.k1[grep(group,d.k1$keyword),],group)))
ddply(d.g, .(group), function(df)each(median,mean,length)(df$visitLength))</pre>
<p>キーワードグループごとの、中央値、平均値、lengthはセッション数</p>
<table border="2" rules="groups" cellspacing="0" cellpadding="6" frame="hsides">
<caption></caption>
<colgroup>
<col class="left"></col>
<col class="right"></col>
<col class="right"></col>
<col class="right"></col>
</colgroup>
<tbody>
<tr>
<td class="left">group</td>
<td class="right">median</td>
<td class="right">mean</td>
<td class="right">length</td>
</tr>
<tr>
<td class="left">google</td>
<td class="right">905.0</td>
<td class="right">871.9</td>
<td class="right">4668</td>
</tr>
<tr>
<td class="left">analytics</td>
<td class="right">904.0</td>
<td class="right">867.8</td>
<td class="right">4487</td>
</tr>
<tr>
<td class="left">アナリティクス</td>
<td class="right">904.5</td>
<td class="right">874.3</td>
<td class="right">614</td>
</tr>
<tr>
<td class="left">アクセス解析</td>
<td class="right">904.0</td>
<td class="right">869.9</td>
<td class="right">545</td>
</tr>
<tr>
<td class="left">googleanalytics</td>
<td class="right">953.0</td>
<td class="right">903.5</td>
<td class="right">474</td>
</tr>
<tr>
<td class="left">ユニークユーザー</td>
<td class="right">928.0</td>
<td class="right">903.5</td>
<td class="right">632</td>
</tr>
<tr>
<td class="left">ページ別セッション数</td>
<td class="right">928.0</td>
<td class="right">923.1</td>
<td class="right">405</td>
</tr>
<tr>
<td class="left">cookie</td>
<td class="right">977.0</td>
<td class="right">919.7</td>
<td class="right">326</td>
</tr>
<tr>
<td class="left">セッション</td>
<td class="right">964.0</td>
<td class="right">911.6</td>
<td class="right">1369</td>
</tr>
<tr>
<td class="left">api</td>
<td class="right">973.0</td>
<td class="right">915.8</td>
<td class="right">285</td>
</tr>
</tbody>
</table>
<p>滞在が10秒で、Yes or No</p>
<pre class="example">ddply(d.g, .(group), function(df)table(df$visitLength&lt;10))</pre>
<p>FALSEが１０秒以上滞在セッション数</p>
<table border="2" rules="groups" cellspacing="0" cellpadding="6" frame="hsides">
<caption></caption>
<colgroup>
<col class="left"></col>
<col class="right"></col>
<col class="right"></col>
</colgroup>
<tbody>
<tr>
<td class="left">group</td>
<td class="right">FALSE</td>
<td class="right">TRUE</td>
</tr>
<tr>
<td class="left">google</td>
<td class="right">4182</td>
<td class="right">486</td>
</tr>
<tr>
<td class="left">analytics</td>
<td class="right">4018</td>
<td class="right">469</td>
</tr>
<tr>
<td class="left">アナリティクス</td>
<td class="right">541</td>
<td class="right">73</td>
</tr>
<tr>
<td class="left">アクセス解析</td>
<td class="right">483</td>
<td class="right">62</td>
</tr>
<tr>
<td class="left">googleanalytics</td>
<td class="right">425</td>
<td class="right">49</td>
</tr>
<tr>
<td class="left">ユニークユーザー</td>
<td class="right">591</td>
<td class="right">41</td>
</tr>
<tr>
<td class="left">ページ別セッション数</td>
<td class="right">390</td>
<td class="right">15</td>
</tr>
<tr>
<td class="left">cookie</td>
<td class="right">296</td>
<td class="right">30</td>
</tr>
<tr>
<td class="left">セッション</td>
<td class="right">1271</td>
<td class="right">98</td>
</tr>
<tr>
<td class="left">api</td>
<td class="right">252</td>
<td class="right">33</td>
</tr>
</tbody>
</table>
<p>グラフ描画(分布点と四分点表示プロットを合わせる)</p>
<pre class="example">p &lt;- qplot(data=d.g, y=visitLength,x=group,alpha=I(1/10)) + geom_jitter()
p +  geom_boxplot(alpha=I(1/3), color=I("red"))+ ylab("滞在時間(秒)") + xlab("キーワードグループ")
p +  coord_flip()
ggsave(filename="landing_grouped_keyword_length.png", width=6, height=6, dpi=96)</pre>
<p>結果<br /><img alt="https://i0.wp.com/abc-analytics.com/wp-content/uploads/2011/01/wpid-landing_grouped_keyword_length.png?w=660&#038;ssl=1" src="https://i0.wp.com/abc-analytics.com/wp-content/uploads/2011/01/wpid-landing_grouped_keyword_length.png?w=660&#038;ssl=1" data-recalc-dims="1"></p>
</li>
</ul>
</div>
</div>
</div>
</div>
<p><a rel="nofollow" href="https://abc-analytics.com/plyr_ggplot2/">plyrで集計 ggplot2でグラフ化</a>は<a rel="nofollow" href="https://abc-analytics.com">google analyticsについて</a>で公開された投稿です。</p>
]]></content:encoded>
			<wfw:commentRss>https://abc-analytics.com/plyr_ggplot2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RでGoogle Analtyics: 時間帯別グラフ</title>
		<link>https://abc-analytics.com/gnur-with-google-analytics/</link>
		<comments>https://abc-analytics.com/gnur-with-google-analytics/#respond</comments>
		<pubDate>Mon, 04 Oct 2010 17:51:41 +0000</pubDate>
		<dc:creator><![CDATA[shirai kimiyuki]]></dc:creator>
				<category><![CDATA[ANALYTICS]]></category>
		<category><![CDATA[分析]]></category>
		<category><![CDATA[gnuR]]></category>
		<category><![CDATA[r]]></category>
		<category><![CDATA[グラフ]]></category>
		<category><![CDATA[時間帯別]]></category>

		<guid isPermaLink="false">http://abc-analytics.com/r%e3%81%a7google-analtyics-%e6%99%82%e9%96%93%e5%b8%af%e5%88%a5%e3%82%b0%e3%83%a9%e3%83%95</guid>
		<description><![CDATA[<p>Rという統計用？言語でData Export Apiを使うscriptを書きました(コードはこちら) (2010/12/10 追記 )どうやら googleの中の人も R用のライブラリーを出したみたいです。テストもついて &#8230; <a href="https://abc-analytics.com/gnur-with-google-analytics/" class="more-link">続きを読む <span class="screen-reader-text">RでGoogle Analtyics: 時間帯別グラフ</span></a></p>
<p><a rel="nofollow" href="https://abc-analytics.com/gnur-with-google-analytics/">RでGoogle Analtyics: 時間帯別グラフ</a>は<a rel="nofollow" href="https://abc-analytics.com">google analyticsについて</a>で公開された投稿です。</p>
]]></description>
				<content:encoded><![CDATA[<p>Rという統計用？言語でData Export Apiを使うscriptを書きました(<a href="http://wiki.abc-analytics.com/api/data_export_apis/r_scripts">コードはこちら</a>)</p>
<div>
<strong> (2010/12/10 追記 )どうやら <a href="http://code.google.com/p/r-google-analytics/">googleの中の人も R用のライブラリーを出したみたいです</a>。テストもついてるし、サンプル誤差もついてくるので、僕自身もあっちを使うつもり。account系のデータ、ゴールとかも取れるといいなと思う</strong>
</div>
<p>統計用言語なのですが、グラフ出力も充実しており、latticeというパッケージを使うと分類した上でのグラフ表示が一行でだせます（マニュアル見る時間がかかるけど)。なので、グラフを図示していきます。</p>
<p>下のような感じでデータを取得します。</p>
<pre class="csharpcode">#認証tokenを取得
auth &lt;- getAuth(email, password)</pre>
<pre class="csharpcode">#アカウント＋プロファイル情報を取得
acs &lt;- getAccounts(auth)
&gt;str(acs)
str(ac) <span class="str">'data.frame'</span>: 45 obs. of 4 variables:
$ ac.ids : chr <span class="str">"xxxx"</span>;,<span class="str">"xxxx"</span> ...
$ ac.names: chr <span class="str">"名前1"</span> ,<span class="str">"名前2"</span> ...
$ pr.ids : chr <span class="str">"1111111"</span>,<span class="str">"222222"</span> ...
$ pr.names: chr <span class="str">"xxxx"</span>,<span class="str">"xxxx"</span>, 

#プロファイル名で検索
&gt; ac[grep(<span class="str">"abc.*wiki"</span>,ac$pr.names),]
ac.ids ac.names pr.ids pr.names
10 188512 abc-analyticsさん 25.... abc-only-wiki-except-me
12 188512 abc-analyticsさん 255xxx... 

#キーワードを取得（デファルトで過去一ヶ月)
data &lt;- getData(auth,id=2551xxxxx,metrics=c(<span class="str">"visits"</span>),dimensions=c(<span class="str">"keyword"</span>))
[1] <span class="str">"https://www.google.com/analytics/feeds/data?ids=ga:25513728&amp;dimensions=ga:keyword&amp;metrics=ga:visits&amp;start-date=2010-09-03&amp;end-date=2010-10-03"</span>
[1] <span class="str">"visits"</span>
[1] <span class="str">"(1-874)/874"</span>
[1] 2
                                         keyword visits
14                                     (not set)    341
573 googleanalytics タイトル別のコンテンツ index     29
651                                         utma     17
851                        目標到達プロセス 画面     16
36                                     _gaq.push     15
221                         funnel visualization     14
662                                         utmz     11
853                     目標到達プロセスの放棄数      8
316                        google analytics wiki      8
30                                          _gaq      8
&gt; str(data)
<span class="str">'data.frame'</span>:    874 obs. of  2 variables:
 $ keyword: chr  <span class="str">"(not set)"</span> <span class="str">"googleanalytics タイトル別のコンテンD
[1] "</span>visits" num 341 29 17 16</pre>
<p>それで、時間帯別の表示をlevelplotという機能を使って表示していきたいと思います。</p>
<p>セッション数を時間帯と地域別で取得</p>
<pre class="csharpcode"><span class="kwrd">data</span> &lt;- getData(auth,id=25513728,
+ metrics=c("visits","goal3Completions"),
+ dimensions=c("<span class="kwrd">date</span>","<span class="kwrd">hour</span>","region"),
+ <span class="kwrd">start</span>.<span class="kwrd">date</span>="2010-08-30",<span class="kwrd">end</span>.<span class="kwrd">date</span>="2010-10-03",
+ <span class="kwrd">max</span>.results=10000)
[1] "https://www.google.com/analytics/feeds/<span class="kwrd">data</span>?ids=ga:25513728&amp;dimensions=ga:<span class="kwrd">date</span>,ga:<span class="kwrd">hour</span>,ga:region&amp;metrics=ga:visits,ga:goal3Completions&amp;<span class="kwrd">start</span>-<span class="kwrd">date</span>=2010-08-30&amp;<span class="kwrd">end</span>-<span class="kwrd">date</span>=2010-10-03&amp;<span class="kwrd">max</span>-results=10000"
[1] "visits"           "goal3Completions"
[1] "(1-10000)/1060"
[1] 5
          <span class="kwrd">date</span> <span class="kwrd">hour</span> region visits goal3Completions
702 2010-09-21   15  Tokyo     11                3
92  2010-09-01   09  Tokyo     11                2
607 2010-09-16   18  Tokyo      9                1
920 2010-09-29   15  Tokyo      8                0
608 2010-09-16   19  Tokyo      8                2
178 2010-09-03   12  Tokyo      8                0
105 2010-09-01   14  Tokyo      8                0
923 2010-09-29   16  Tokyo      7                0
520 2010-09-14   19  Tokyo      7                0
474 2010-09-13   17  Tokyo      7                2</pre>
<pre class="csharpcode">グラフにする。</pre>
<pre class="csharpcode">levelplot(tapply(data$visits,list(data$hour,data$date),sum),  col.regions=colorRampPalette(c(<span class="str">"white"</span>,  <span class="str">"red"</span>))(256),layout=esuln</pre>
<p><!-- .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } --></p>
<p><a href="https://i1.wp.com/abc-analytics.com/wp-content/uploads/RGoogleAnaltyics_131FC/2.png?ssl=1"><img src="https://i2.wp.com/abc-analytics.com/wp-content/uploads/RGoogleAnaltyics_131FC/2_thumb.png?resize=534%2C461&#038;ssl=1" border="0" alt="2" title="2" width="534" height="461" style="display: inline; border-width: 0px;" data-recalc-dims="1" /></a></p>
<p>週末と夜間は空白に近い。</p>
<p>曜日別に傾向があるかもしれない。見てみる。</p>
<pre class="csharpcode">wdays &lt;- c(<span class="str">"a日"</span>,<span class="str">"b月"</span>,<span class="str">"c火"</span>,<span class="str">"d水"</span>,<span class="str">"e木"</span>,<span class="str">"g土”) #表示順を揃えるため

levelplot(tapply(data$visits,list(data$hour,wdays[as.numeric(strftime(data$date, "</span>%w<span class="str">"))+1]),sum),  col.regions=colorRampPalette(c("</span>white<span class="str">",  "</span>red"))(256))</pre>
<p><!-- .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } --></p>
<p><a href="https://i1.wp.com/abc-analytics.com/wp-content/uploads/RGoogleAnaltyics_131FC/3.png?ssl=1"><img src="https://i1.wp.com/abc-analytics.com/wp-content/uploads/RGoogleAnaltyics_131FC/3_thumb.png?resize=534%2C272&#038;ssl=1" border="0" alt="3" title="3" width="534" height="272" style="display: inline; border-width: 0px;" data-recalc-dims="1" /></a></p>
<p>まあ、なにもない。深夜に起きる人は、木曜くらいから出始めるのか？というか、祝日補正してないせいだろう。</p>
<p>また、サイトによっては、キャンペーンやコンテンツ投入のタイミングが見えるかもしれない。</p>
<p>んじゃ、とりあえず、メディア別にして、期間を長くして平均を見てみる。</p>
<pre class="csharpcode">d.m &lt;- getData(auth,21600568,metrics=c(<span class="str">"visits"</span>),dimensions=c(<span class="str">"hour"</span>,<span class="str">"date"</span>,<span class="str">"medium"</span>),start.date=<span class="str">"2010-01-01"</span>,max.results=10000)

d.m.a &lt;- d.m[d.m$medium %<span class="kwrd">in</span>% c(<span class="str">"organic"</span>,<span class="str">"referral"</span>,<span class="str">"(none)"</span>),]
&gt; levelplot(tapply(d.m.a$visits,list(d.m.a$hour,wdays[<span class="kwrd">as</span>.numeric(strftime(d.m.a$date, <span class="str">"%w"</span>))+1],d.m.a$medium),mean), col.regions=colorRampPalette(c(<span class="str">"white"</span>,  <span class="str">"red"</span>))(256),sub="曜日別|メディア別”)</pre>
<p><!-- .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } --></p>
<p><a href="https://i2.wp.com/abc-analytics.com/wp-content/uploads/RGoogleAnaltyics_131FC/4.png?ssl=1"><img src="https://i1.wp.com/abc-analytics.com/wp-content/uploads/RGoogleAnaltyics_131FC/4_thumb.png?resize=462%2C484&#038;ssl=1" border="0" alt="4" title="4" width="462" height="484" style="display: inline; border-width: 0px;" data-recalc-dims="1" /></a></p>
<p>検索活動は集中するくらいしかわからない。今年の平均だけど、、</p>
<p>これでも、具体的なユーザー像にはならない。</p>
<p>そこで、ある特定のキャンペーンを行った場合の波及効果みたいなのをみたいが、出せるデータがないので、このブログの公開記事の閲覧数の減衰具合みたいなのを見てみる。</p>
<pre class="csharpcode">d.m &lt;- getData(auth,21600568,metrics=c(<span class="str">"entrances"</span>),dimensions=c(<span class="str">"hour"</span>,<span class="str">"date"</span>,<span class="str">"landingPagePath"</span>,”medium”),start.date=<span class="str">"2010-08-01"</span>,max.results=10000)

rev(sort(tapply(d.m$entrances,d.m$landingPagePath,sum)))[1]
 /multi-cookie-tracking                                                                  338</pre>
<p><!-- .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } --></p>
<p>と一番多い、multi-cookie-tracingを見てみる。メディアタイプを、オーガニックと参照リンクに絞って表示</p>
<pre class="csharpcode">d.m &lt;- getData(auth,21600568,metrics=c(<span class="str">"entrances"</span>,”newVisits”),dimensions=c(<span class="str">"hour"</span>,<span class="str">"date"</span>,<span class="str">"medium"</span>),start.date=<span class="str">"2010-01-01"</span>,max.results=10000) 

d.m.a &lt;- d.m[d.m$medium %<span class="kwrd">in</span>% c(<span class="str">"organic"</span>,<span class="str">"referral")</span>,]
&gt; levelplot(tapply(d.m.a$entrances,list(d.m.a$hour,d.m.a$date, d.m.a$medium),mean), col.regions=colorRampPalette(c(<span class="str">"white"</span>,  <span class="str">"red"</span>))(256),sub="特定ページメディア別”)</pre>
<p><!-- .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } --></p>
<p><a href="https://i2.wp.com/abc-analytics.com/wp-content/uploads/RGoogleAnaltyics_131FC/5.png?ssl=1"><img src="https://i0.wp.com/abc-analytics.com/wp-content/uploads/RGoogleAnaltyics_131FC/5_thumb.png?resize=534%2C372&#038;ssl=1" border="0" alt="5" title="5" width="534" height="372" style="display: inline; border-width: 0px;" data-recalc-dims="1" /></a></p>
<p>９月１日の深夜に出して、リンク中心にアクセスが上がって、その後は検索にかかるようになる。しかし、検索に乗るのも早いものだ。</p>
<p>次のものは、新規に絞ってみたもの。本当に新規でないのもあるだろうけど。検索による継続的な流入はある。</p>
<pre class="csharpcode">d.m &lt;- getData(auth,21600568,metrics=c(<span class="str">"entrances"</span>,”newVisits”),dimensions=c(<span class="str">"hour"</span>,<span class="str">"date"</span>,<span class="str">"medium"</span>),start.date=<span class="str">"2010-01-01"</span>,max.results=10000) 

d.m.a &lt;- d.m[d.m$medium %<span class="kwrd">in</span>% c(<span class="str">"organic"</span>,<span class="str">"referral")</span>,]
&gt; levelplot(tapply(d.m.a$newVisits,list(d.m.a$hour,d.m.a$date, d.m.a$medium),mean), col.regions=colorRampPalette(c(<span class="str">"white"</span>,  <span class="str">"red"</span>))(256),sub="特定ページメディア別”)</pre>
<p><!-- .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } --></p>
<p><a href="https://i2.wp.com/abc-analytics.com/wp-content/uploads/RGoogleAnaltyics_131FC/6.png?ssl=1"><img src="https://i2.wp.com/abc-analytics.com/wp-content/uploads/RGoogleAnaltyics_131FC/6_thumb.png?resize=534%2C372&#038;ssl=1" border="0" alt="6" title="6" width="534" height="372" style="display: inline; border-width: 0px;" data-recalc-dims="1" /></a></p>
<p>あとは、、、、</p>
<p><del datetime="2010-11-15T19:19:03+00:00">会員情報などとマッチングしてるサイト</del>(外部ソースとの照合は規約違反かも)なら、ユーザー属性別のアクセス状況などは、比較表示しやすいと思います。</p>
<p>検索ワードで属性を分けたり、地域と時間情報と天候情報(外部から引っ張る)で属性を仮定したりと思ったのですが、余裕ができたらやってみたいと思います。</p>
<p>とりたてて何か発見ができたわけではないですが、Rを使うと、こんな感じで手短にグラフ出力ができます。ただ当然ながら、学習曲線はキツイ。ここまで来るのに相当な学習時間がかかりました。データ分析ではなく、データ表示だけなのに、、、</p>
<p>以下コードです。RCURLとXMLが必要です。</p>
<p><a href="http://wiki.abc-analytics.com/api/data_export_apis/r_scripts">こちらに移動しました。</a></p>
<p><a rel="nofollow" href="https://abc-analytics.com/gnur-with-google-analytics/">RでGoogle Analtyics: 時間帯別グラフ</a>は<a rel="nofollow" href="https://abc-analytics.com">google analyticsについて</a>で公開された投稿です。</p>
]]></content:encoded>
			<wfw:commentRss>https://abc-analytics.com/gnur-with-google-analytics/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>マルチトラッキング(複数cookie)について考える</title>
		<link>https://abc-analytics.com/multi-cookie-tracking/</link>
		<comments>https://abc-analytics.com/multi-cookie-tracking/#respond</comments>
		<pubDate>Tue, 31 Aug 2010 14:53:38 +0000</pubDate>
		<dc:creator><![CDATA[shirai kimiyuki]]></dc:creator>
				<category><![CDATA[ANALYTICS]]></category>
		<category><![CDATA[解説]]></category>
		<category><![CDATA[cookie]]></category>
		<category><![CDATA[multitracking]]></category>
		<category><![CDATA[setcookiepath]]></category>
		<category><![CDATA[setDomainName]]></category>

		<guid isPermaLink="false">http://abc-analytics.com/%e3%83%9e%e3%83%ab%e3%83%81%e3%83%88%e3%83%a9%e3%83%83%e3%82%ad%e3%83%b3%e3%82%b0%e8%a4%87%e6%95%b0cookie%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6%e8%80%83%e3%81%88%e3%82%8b</guid>
		<description><![CDATA[<p>*2010/09/10 追記を入れました。 *2010/09/14 _linkでアドレスバーからcookieにデータを取り込む際、日本語データがある（検索ワードなど)と、うまくデータの引継ぎができないと思います。（フォー &#8230; <a href="https://abc-analytics.com/multi-cookie-tracking/" class="more-link">続きを読む <span class="screen-reader-text">マルチトラッキング(複数cookie)について考える</span></a></p>
<p><a rel="nofollow" href="https://abc-analytics.com/multi-cookie-tracking/">マルチトラッキング(複数cookie)について考える</a>は<a rel="nofollow" href="https://abc-analytics.com">google analyticsについて</a>で公開された投稿です。</p>
]]></description>
				<content:encoded><![CDATA[<p><font color="#ff0000"><a href="#tsuiki">*2010/09/10 追記を入れました。</a></font></p>
<p>
*2010/09/14 _linkでアドレスバーからcookieにデータを取り込む際、日本語データがある（検索ワードなど)と、<del datetime="2010-09-14T09:23:35+00:00">うまくデータの引継ぎができないと思います。（<a href="http://bit.ly/9LLMqd">フォーラムに質問した</a>)。使う方は気をつけて(?)ください。chrome, firefoxの場合。IEはOK。</del><strong>　エンコードしてればよかった。</strong></p>
<p>僕自身はあまりマルチトラッキングについて馴染みがないのですが、時々、マルチトラッキング絡みの質問を、フォームから受けるようになってきたので、いろいろと頭の中を整理しました。読んでください。</p>
<p>また、マルチトラッキングがニーズとなるのは、ドメインやディレクトリで分けてデータを収集したいということなので、具体例も画像付きで書きました。下の方。</p>
<h3>全体の仕組み</h3>
<p>大まかな前提を。 google analyticsはビーコン型のアクセス解析ツールです。gifリクエストをサーバーに飛ばして、データを収集してレポートしてくれます。モバイル計測の場合を除き、javascriptで操作します。トラッカーオブジェクトを作り、データ置き場としてのcookieを操作しつつ、gifリクエストを発行します。</p>
<h3>同じ情報を複数アカウントに</h3>
<p>ですので、同一情報を複数のアカウントに送りたい場合は、トラッカーオブジェクトを複数発行して、このオブジェクトにアカウント情報をそれぞれいれてやって、送信すればいいだけです。</p>
<p>公式サイトには英語のものしかないですが、用例があります。<a href="http://code.google.com/intl/ja/apis/analytics/docs/tracking/asyncUsageGuide.html#MultipleCommands">http://code.google.com/intl/ja/apis/analytics/docs/tracking/asyncUsageGuide.html#MultipleCommands</a></p>
<p>ただ、ドメイン別・ディレクトリ別に情報を取って、専用のプロファイルに送りたいですよね。</p>
<p>３つのパターン。サブドメイン、クロスドメイン、サブディレクトリの場合を見ていきます。</p>
<p>ただ、もう少し、講釈を続けます。 </p>
<h3>複数cookieを実現する設定</h3>
<p>＊これは、僕自身の考えに基づいて書いています。計測がうまく行かないかもしれないので、うまく行かない場合は、ダメじゃないか！と怒るか、もしくは、<a href="http://twitter.com/phar">ぜひ連絡ください</a>。</p>
<p>ケース: aaa.xxx.comというサイトと、bbb.xxx.comというサイトを管理していて、この二つの横断的な情報を収集しつつ、aaa, bbb個別の情報を得たい場合です。</p>
<p>通常の方法としては、</p>
<pre class="csharpcode">_gaq.push([“_setAccount”,”UA-xxxxxx-yy”]); 
_gaq.push([“_setDomainName”,”.xxx.com”]); 
_gaq.push([“_trackPageview”]) </pre>
<style type="text/css">
<p>.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<p>
  <br />という形を、aaa, bbbの両方に同じようにおけば、これで計測できるわけで何も問題ないですし、フィルターで切り分ければ情報を分けることも可能です。aaa, bbb別にアクセス情報を見られます。<strong>ただ、cookieをaaa,bbbで共有するために、サブドメイン独自でのセッション情報の管理(ユニークユーザ、新規・既存・リファラーなど)ができません。</strong></p>
<p>そこで、cookieを３つ、aaa専用 bbb専用 aaa-bbb共用という形で用意して、専用の３つのプロファイルという形を用意します。</p>
<table border="2" cellspacing="0" cellpadding="2" width="509">
<tbody>
<tr>
<td valign="top" width="253">aaa.xxx.com</td>
<td valign="top" width="252">bbb.xxx.coom</td>
</tr>
<tr>
<td valign="top" width="253">_gaq.push([“ab._setAccount”,”UA-for-aaabbb”]);<br />
        <br />_gaq.push([“ab._setDomainName”,”.xxx.com”]); </p>
<p>_gaq.push([“ab.trackPageview”]); </p>
<p>_gaq.push([“a._setAccount”,”UA-for-aaa”]); </p>
<p>_gaq.push([“a._trackPageview”]);</td>
<td valign="top" width="252">_gaq.push([“ab._setAccount”,”UA-for-aaabbb”]);<br />
        <br />_gaq.push([“ab._setDomainName”,”.xxx.com”]); </p>
<p>_gaq.push([“ab.trackPageview”]); </p>
<p>_gaq.push([“b._setAccount”,”UA-for-aaa”]); </p>
<p>_gaq.push([“b._trackPageview”]);</td>
</tr>
</tbody>
</table>
<p>これで、３つのcookie(utm(a,b,c,v,z))セットができます。</p>
<p>このコードの説明をこれからします。</p>
<h3>_setDomainNameの二つの機能</h3>
<p>このsetDomainNameは、内部的に二つの働きをします。</p>
<p>cookieの所属ドメインの決定と、cookieの値にドメイン情報を持たせることです。</p>
<p>cookieの基本的な仕様は、ドメイン、パス別に指定して作成することができますが、javascriptからはドメインとパスはみえません、<strong>読む場合は見えないのです</strong>。ですので、<strong>cookieの値にドメイン情報を持たせる</strong>ことは意味を持ちます。（ドメインハッシュ値は他にもセキュリティ用途もあるみたいですが、よくわかりません)</p>
<p>s1-test-analytics.com</p>
<p><a href="https://i0.wp.com/abc-analytics.com/wp-content/uploads/b98a8f1f6da9_E675/googleanalyticscookie.jpg?ssl=1"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="google-analytics-cookie" border="0" alt="google-analytics-cookie" src="https://i2.wp.com/abc-analytics.com/wp-content/uploads/b98a8f1f6da9_E675/googleanalyticscookie_thumb.jpg?resize=532%2C126&#038;ssl=1" width="532" height="126" data-recalc-dims="1" /></a> </p>
<p>s2.test-analytics.com</p>
<p><a href="https://i2.wp.com/abc-analytics.com/wp-content/uploads/b98a8f1f6da9_E675/WS000005.jpg?ssl=1"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="WS000005" border="0" alt="WS000005" src="https://i1.wp.com/abc-analytics.com/wp-content/uploads/b98a8f1f6da9_E675/WS000005_thumb.jpg?resize=532%2C132&#038;ssl=1" width="532" height="132" data-recalc-dims="1" /></a> </p>
<p>画像の文字が細かいですが、.test-analytics.com(両方に存在)と、s1.test-analytics.com, s2.etst-analytics.comの３つがあります。</p>
<p>左側の赤四角が、ドメイン情報を現してます。.test-analytics.comなら 113074331。s1.test-analytics.com:154559162, s2.test-analtics.com: 155607801。</p>
<p>と、setDomainNameは、cookieのドメインと、cookieの値の最初の１０桁数字（ドメインハッシュ値)を決めています。cookieの最初の値が、ドメイン固有(ハッシュ衝突がないとして)の値ですので、この値を見て、複数cookie時に、該当cookieを判断しています。ネームスペース的な機能とでも言えばいいでしょうか？</p>
<h3>サブドメイン＋メインドメインの個別管理の実際を見てみる。</h3>
<p>では、cookieが３つできてることは確認できたので、今度はドメイン別に機能しているかをみてみましょう。</p>
<p>次のようなケースを想定します。</p>
<p>セッション1: s1に訪問後、s2を訪問。</p>
<p>セッション2: s1のみ訪問</p>
<p>セッション3: 再度、s1のみ訪問</p>
<p>セッション4: s2のみ訪問(外部リンク経由(phar.awe.jp)</p>
<p>セッション5: s1を訪問</p>
<p>この場合、全体をカバーする情報は、5セッション。s1では4セッション。s2では2セッションと記録される形になって欲しいです。参照情報は、全体では(phar.awe.jp) s1はDirect, s2は(phar.awe.jp)となって欲しいです。</p>
<p>実際に図を見ていきます。</p>
<p>セッション１ s1を訪問。</p>
<p><a href="https://i1.wp.com/abc-analytics.com/wp-content/uploads/b98a8f1f6da9_E675/WS000010.jpg?ssl=1"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="WS000010" border="0" alt="WS000010" src="https://i1.wp.com/abc-analytics.com/wp-content/uploads/b98a8f1f6da9_E675/WS000010_thumb.jpg?resize=532%2C159&#038;ssl=1" width="532" height="159" data-recalc-dims="1" /></a> </p>
<p>同一セッション内で、s2を訪問。 s2の参照情報は、s1.test-analytics.comに。</p>
<p><a href="https://i2.wp.com/abc-analytics.com/wp-content/uploads/b98a8f1f6da9_E675/WS000011.jpg?ssl=1"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="WS000011" border="0" alt="WS000011" src="https://i0.wp.com/abc-analytics.com/wp-content/uploads/b98a8f1f6da9_E675/WS000011_thumb.jpg?resize=532%2C150&#038;ssl=1" width="532" height="150" data-recalc-dims="1" /></a> </p>
<p>セッション２に。(セッションの更新は、utmcのcookieを削除で行う) 両方のutmaのカウンタ(Valueの最後)は２に。</p>
<p><a href="https://i0.wp.com/abc-analytics.com/wp-content/uploads/b98a8f1f6da9_E675/WS000012.jpg?ssl=1"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="WS000012" border="0" alt="WS000012" src="https://i1.wp.com/abc-analytics.com/wp-content/uploads/b98a8f1f6da9_E675/WS000012_thumb.jpg?resize=532%2C151&#038;ssl=1" width="532" height="151" data-recalc-dims="1" /></a> </p>
<p>セッション3 同じようにカウンタがインクリメントされ、３に。</p>
<p><a href="https://i1.wp.com/abc-analytics.com/wp-content/uploads/b98a8f1f6da9_E675/WS000013.jpg?ssl=1"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="WS000013" border="0" alt="WS000013" src="https://i1.wp.com/abc-analytics.com/wp-content/uploads/b98a8f1f6da9_E675/WS000013_thumb.jpg?resize=532%2C146&#038;ssl=1" width="532" height="146" data-recalc-dims="1" /></a> </p>
<p>セッション4 phar.awe.jpから <strong>s2</strong>に遷移。全体のもの、<strong>s2のcookieが更新される（カウンタ(utma)、参照情報(utmz))</strong></p>
<p><a href="https://i2.wp.com/abc-analytics.com/wp-content/uploads/b98a8f1f6da9_E675/WS000014.jpg?ssl=1"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="WS000014" border="0" alt="WS000014" src="https://i0.wp.com/abc-analytics.com/wp-content/uploads/b98a8f1f6da9_E675/WS000014_thumb.jpg?resize=532%2C153&#038;ssl=1" width="532" height="153" data-recalc-dims="1" /></a>&#160;</p>
<p>セッション５ s1を訪問(セッション４で、s2を訪問した情報は、test-analytcs.comの方のみ反映されている。</p>
<p><a href="https://i1.wp.com/abc-analytics.com/wp-content/uploads/b98a8f1f6da9_E675/WS000015.jpg?ssl=1"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="WS000015" border="0" alt="WS000015" src="https://i0.wp.com/abc-analytics.com/wp-content/uploads/b98a8f1f6da9_E675/WS000015_thumb.jpg?resize=532%2C153&#038;ssl=1" width="532" height="153" data-recalc-dims="1" /></a> </p>
<p>と、想定通りになりました。 .test-analytics.comで全体のセッション管理を。s1,s2は個別でセッション管理されてます。s1からs2の移動も外部参照元となりますし、訪問回数は、s1,s2は個別に管理されてます。</p>
<p>サブドメインは、これで問題ないですね。では、クロスドメインの例を見てみましょう。少し複雑で、問題含みです。</p>
<h3>クロスドメイン計測での、全体計測と個別ドメイン管理の実現</h3>
<p>どこまでニーズがあるのかわかりませんが、これもみていきましょう。<a href="http://blog.livedoor.jp/ld_directors/archives/51492466.html">livedoorでは、この形で運用してるみたいですね。</a> あと、<a href="http://code.google.com/intl/ja/apis/analytics/docs/tracking/gaTrackingSite.html#multipleDomains">公式サイトのクロスドメイン計測の形</a>です。シングルトラッキングで、前提が多少入りますが、ここらの情報は検索すればあちこちにあるのでいいと思います。</p>
<p>それで先程、クロスドメインがサブドメインより、少し複雑と書いたのは、cookieは他のドメインの値は読めないので、特殊なことをしてるし、サブドメイン計測とは同等の機能とはならないからです。</p>
<p>とりあえず、設定を考えましょう。二つのドメイン計測で、全体計測と、個別計測を実現する。</p>
<table border="2" cellspacing="0" cellpadding="2" width="512">
<tbody>
<tr>
<td valign="top" width="247">test.analytics.com</td>
<td valign="top" width="261">phar.awe.jp</td>
</tr>
<tr>
<td valign="top" width="247">_gaq.push(“a._setAccount”,”UA-for-any”]);<br />
        <br />_gaq.push(“a._setDomainName”,”none”]); </p>
<p>_gaq.push(“a._setAllowLinker”,true]); </p>
<p>_gaq.push(“a._trackPageview”]); </p>
<p>_gaq.push(“b._setAccount”,”UA-test-analytics”]); </p>
<p>_gaq.push(“b._trackPageview”]);</td>
<td valign="top" width="261">_gaq.push(“a._setAccount”,”UA-for-any”]);<br />
        <br />_gaq.push(“a._setDomainName”,”none”]); </p>
<p>_gaq.push(“a._setAllowLinker”,true]); </p>
<p>_gaq.push(“a._trackPageview”]); </p>
<p>_gaq.push(“b._setAccount”,”UA-phar-awe”]); </p>
<p>_gaq.push(“b._trackPageview”]);</td>
</tr>
</tbody>
</table>
<p>これで、この両者のドメイン間に onlick=’_gaq.push([“a._link”,this.href]);return false;’という形。</p>
<p><a name="tsuiki"></a></p>
<p><strong>*2010/09/10 どうも、setDomainが”none”のものと、通常のものの実行順番が、上記のものと反対になると”none”で設定した方が上手く動かないように見える。バグなのかそういう仕様なのかは謎だけど、”none”を先にして、setDomainName無しをあとにした方が良いよう。もともと、クロスドメインで値を受け渡しするのは、ポリシーに反する部分もあるだろうから、異なるドメインの計測はやらない方が良いんだろう。</strong></p>
<p>サブドメインでの計測では、cookieがメインドメインの元で共有され、変更が反映されてました。でも、クロスドメインはそれができません。urlのパラメータを読み込む形での受け渡しです。ですので、この受け渡しがないと、値の変更を反映できません。</p>
<p>とにかく、実際の図をみていきましょう。セッションを全体で３回行います。test-analyticsに２回。phar.aweに２回。またぐセッションがそのうち一回です。</p>
<p>最初のセッション。 参照元(utmz)は、s2.tes-analyticsからリンクを張りました。</p>
<p><a href="https://i1.wp.com/abc-analytics.com/wp-content/uploads/b98a8f1f6da9_E675/WS000016.jpg?ssl=1"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="WS000016" border="0" alt="WS000016" src="https://i1.wp.com/abc-analytics.com/wp-content/uploads/b98a8f1f6da9_E675/WS000016_thumb.jpg?resize=532%2C150&#038;ssl=1" width="532" height="150" data-recalc-dims="1" /></a> </p>
<p>_gaq.push([“a._link”,this.href])でクロスドメイン遷移。細かいですが、参照元は全体では s2。個別では test-analytics.comからと別れてます。</p>
<p><a href="https://i2.wp.com/abc-analytics.com/wp-content/uploads/b98a8f1f6da9_E675/WS000017.jpg?ssl=1"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="WS000017" border="0" alt="WS000017" src="https://i2.wp.com/abc-analytics.com/wp-content/uploads/b98a8f1f6da9_E675/WS000017_thumb.jpg?resize=532%2C160&#038;ssl=1" width="532" height="160" data-recalc-dims="1" /></a> </p>
<p>セッション2。test-analytics.comを訪問。カウンタ(utma)が増えただけ。</p>
<p><a href="https://i1.wp.com/abc-analytics.com/wp-content/uploads/b98a8f1f6da9_E675/WS000018.jpg?ssl=1"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="WS000018" border="0" alt="WS000018" src="https://i2.wp.com/abc-analytics.com/wp-content/uploads/b98a8f1f6da9_E675/WS000018_thumb.jpg?resize=532%2C155&#038;ssl=1" width="532" height="155" data-recalc-dims="1" /></a> </p>
<p>セッション3 phar.awe.jpを訪問。サブドメイン計測ではcookieが共有されていたので、カウンタが上がっていたのだが、クロスドメインはそれがないので、全体計測の方のカウンタ(umta)が3にならず。２のまま。</p>
<p><a href="https://i1.wp.com/abc-analytics.com/wp-content/uploads/b98a8f1f6da9_E675/WS000019.jpg?ssl=1"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="WS000019" border="0" alt="WS000019" src="https://i2.wp.com/abc-analytics.com/wp-content/uploads/b98a8f1f6da9_E675/WS000019_thumb.jpg?resize=532%2C161&#038;ssl=1" width="532" height="161" data-recalc-dims="1" /></a> </p>
<p>と、全体で３セッションあったのだが、全体を計測する utma(ドメインハッシュ Valueが1の方) では、</p>
<p><strong>２回目の訪問が二回あって、３回目の訪問がない結果となる</strong>。また参照情報の変更も、url上のパラメータ渡しがないと、cookie値を共有する機会がないので、不整合な結果を作りやすい。</p>
<p><strong>ショッピングカートのように、必ず特定のドメインからの遷移であれば問題はないでしょうが</strong>、結論としては、</p>
<p><strong>クロスドメインでの全体・個別の分別管理は問題が多そう</strong>と、僕は思います。</p>
<p>さて、最後にもう一つトピックを取り上げます。ディレクトリでの全体・個別をマルチトラッキングで管理するです。ディレクトリの分別管理はニーズが多そうですが、固有の問題があります。</p>
<h3>サイト全体・特定ディレクトリでの全体計測・個別計測のマルチトラッキング</h3>
<p>実は、僕が手伝ってるサイトでも、先日これをやろうとしたのですが、うまく行かなくて悩んだのです。</p>
<p>cookieの値がヘンだなあと、、</p>
<p>実は、ドメインの違いに関しては、google analyticsのcookieがドメイン情報を持っていたので、区別できたのですが、パスの情報は入れてくれてないのです。なので、<strong>複数cookieはできません</strong>。作る事はできても、カウンタのインクリメントは、どっちをするか不定です。参照情報のutmzは一個しかできません、最初に設定したパスで出るのみです。何も指定してなけば、”/” 。これは、最初にsetCookiePathで”/DDD/”としたのでこうなりました。</p>
<p><a href="https://i2.wp.com/abc-analytics.com/wp-content/uploads/b98a8f1f6da9_E675/WS000020.jpg?ssl=1"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="WS000020" border="0" alt="WS000020" src="https://i2.wp.com/abc-analytics.com/wp-content/uploads/b98a8f1f6da9_E675/WS000020_thumb.jpg?resize=532%2C120&#038;ssl=1" width="532" height="120" data-recalc-dims="1" /></a> </p>
<p>utmaは、二つ作ってはいますが、判別手段がないため、次回の更新はどちらかの値を取得して、二つとも、同じ値に更新です。実質的に、サイト全体での管理しか、しないことと同じになります。utmzを”/”で指定すればです全体ですし、utmzが”/DDD/”のみになれば、全体のセッション管理が狂います。</p>
<p><strong>で、手段がないのかというと、ドメインを分けてやれば、個別管理できます。</strong></p>
<p><a href="http://www.lunametrics.com/blog/2009/03/06/cookies-tracking-multiple-accounts-ga/">http://www.lunametrics.com/blog/2009/03/06/cookies-tracking-multiple-accounts-ga/</a></p>
<p><a href="http://twitter.com/t32k">@t32k</a> さんの<a href="http://warikiru.blogspot.com/2009/06/google-analytic-tracker-code.html">昔のエントリーも発見</a>。</p>
<p>なので、ここで細かく書いてもしょうがないので、コードだけ書いておわりにします、、、、</p>
<p><strong>と思ったのですが</strong>、<em>lunameticsのコードだと、ドメイン名が同じなのでcookieが独立して動かない</em>(<strong>ga.js側が</strong>)と思います。ドメインを分けるには、サブドメイン表記を使うか、クロスドメインの”none”を使うかだと思います。ここでは、noneを使う形の載せます、、、、</p>
<p><strong>と思ったのですが</strong>、setDomainName(“none”)を使うと、セッションの更新がうまく行かない気が、、上のクロスドメイン時では問題なかったので、<strong>setCookiePathといっしょに使うと、動きがヘンになる？？？？</strong></p>
<p>なので、setDomainName(“.test-analytics.com”)とsetCookiePath(“/DDD/”)を一緒に使う形にします。</p>
<table border="2" cellspacing="0" cellpadding="2" width="486">
<tbody>
<tr>
<td valign="top" width="230">通常の場所</td>
<td valign="top" width="252">特定ディレクトリ(今回は/DDD/)</td>
</tr>
<tr>
<td valign="top" width="230">_gaq.push([“a._setAccount”, “UA-all”]);<br />
        <br />_gaq.push([“a._trackPageview”]);</td>
<td valign="top" width="252">_gaq.push([“a._setAccount”, “UA-all”];<br />
        <br />_gaq.push([“a._trackPageview”]); </p>
<p>_gaq.push([“b.setAccount”, “UA-DDD”]); </p>
<p>_gaq.push([“b.setDomainName”,”.test-analytics.com”]); </p>
<p>_gaq.push([“b.setCookiePath”, “/DDD/”]); </p>
<p>_gaq.push([“b.trackPageview”]);</td>
</tr>
</tbody>
</table>
<p>setDomainName(“none”)で作ったcookieは、FQDN所属(leading period ‘.’なし)のcookieになるので、ほかの場面でクロスドメイン用に、”none”を使う場合は使えません。サブドメンの設定を使うしかないと思う。</p>
<p>実際の例</p>
<p>セッション３回。/DDD/index.htmlを二回。/index.htmlを一回。</p>
<p>セッション1: /DDD/index.htmlを訪問。</p>
<p><a href="https://i2.wp.com/abc-analytics.com/wp-content/uploads/b98a8f1f6da9_E675/WS000024.jpg?ssl=1"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="WS000024" border="0" alt="WS000024" src="https://i2.wp.com/abc-analytics.com/wp-content/uploads/b98a8f1f6da9_E675/WS000024_thumb.jpg?resize=532%2C131&#038;ssl=1" width="532" height="131" data-recalc-dims="1" /></a> </p>
<p><font color="#ff0000">注意: </font><font color="#000000">所属Domainは双方同じ .test-analytics.comになってますが、ドメインハッシュ値は113… と115…と違います。これはデフォルトsetDomainNameなしを使うと、内部としては “test-analytcs.com”と “.”なしでドメインハッシュを計算するため。 .を付けとけば違うハッシュ値をとれる。で、今回は所属ドメインンが同じだが、パスが違うためcookieは存在できる。 </font></p>
<p>セッション2: index.htmlを訪問</p>
<p><a href="https://i2.wp.com/abc-analytics.com/wp-content/uploads/b98a8f1f6da9_E675/WS000025.jpg?ssl=1"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="WS000025" border="0" alt="WS000025" src="https://i0.wp.com/abc-analytics.com/wp-content/uploads/b98a8f1f6da9_E675/WS000025_thumb.jpg?resize=532%2C74&#038;ssl=1" width="532" height="74" data-recalc-dims="1" /></a> </p>
<p>セッション3 /DDD/index.htmlを訪問</p>
<p><a href="https://i2.wp.com/abc-analytics.com/wp-content/uploads/b98a8f1f6da9_E675/WS000026.jpg?ssl=1"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="WS000026" border="0" alt="WS000026" src="https://i1.wp.com/abc-analytics.com/wp-content/uploads/b98a8f1f6da9_E675/WS000026_thumb.jpg?resize=532%2C130&#038;ssl=1" width="532" height="130" data-recalc-dims="1" /></a> </p>
<p>全体で３回訪問した。全体を把握する方の,115001218は、カウンタ(utma)が３になってる。個別ディレクトリ管理の113074331は、2回と想定通り。めでたし、めでたし。</p>
</p>
<h3>まとめ</h3>
<p>ここまで、読んでくれる人がいるか疑問です（僕なら飛ばし読みだ)が、まとめです。感想の箇条書き。</p>
<ul>
<li>複数cookieを使えば、セッション管理を独立して行えるので、ドメイン別、ディレクトリ別に具体例をcookieの値を見ながら検証しました。レポート側では検証していません。なので、落とし穴がまだあるかもしれません。 </li>
<li>サブドメインの全体・個別の独立管理は、たぶん実用に応すると思います。 </li>
<li>クロスドメインでの全体・個別の独立管理は、セッション単位で分析するのには問題含みな気がします。 </li>
<li>ディレクトリでの全体・個別の独立管理は、トリッキーながらも、そのトリッキが使える状況の下では、きちんと数字が取れそうだと思います。 </li>
<li>google analyicsの先頭のドメインハッシュ値は、ネームスペース的役割を果たします。キー（名前)が一緒でも、こちらで同一名cookieの判別を可能にします。 </li>
<li>ディレクトリ情報は、ドメインハッシュ値に含まれてないので、別ドメインのcookieを用意して、cookieの分別管理を可能にできます。 </li>
<li>setDomainNameの役割、cookieの所属ドメイン、ドメインハッシュ値の作成の二つの機能を頭にいれておく。参考に、<a href="http://wiki.abc-analytics.com/api/tracking-api/tracking-apis/domain-directory-methods/-_setdomainname">前にwikiに書いたものへのリンク</a> </li>
</ul>
<p><a rel="nofollow" href="https://abc-analytics.com/multi-cookie-tracking/">マルチトラッキング(複数cookie)について考える</a>は<a rel="nofollow" href="https://abc-analytics.com">google analyticsについて</a>で公開された投稿です。</p>
]]></content:encoded>
			<wfw:commentRss>https://abc-analytics.com/multi-cookie-tracking/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>訪問回数別セッション数(vs 参照元)の残存率を見る</title>
		<link>https://abc-analytics.com/find_suvival_rate_par_visitscount_against_referrer/</link>
		<comments>https://abc-analytics.com/find_suvival_rate_par_visitscount_against_referrer/#respond</comments>
		<pubDate>Wed, 07 Jul 2010 16:31:01 +0000</pubDate>
		<dc:creator><![CDATA[shirai kimiyuki]]></dc:creator>
				<category><![CDATA[分析]]></category>
		<category><![CDATA[google analytics]]></category>
		<category><![CDATA[参照元]]></category>
		<category><![CDATA[残存率]]></category>
		<category><![CDATA[訪問回数]]></category>

		<guid isPermaLink="false">http://abc-analytics.com/%e8%a8%aa%e5%95%8f%e5%9b%9e%e6%95%b0%e5%88%a5%e3%82%bb%e3%83%83%e3%82%b7%e3%83%a7%e3%83%b3%e6%95%b0vs-%e5%8f%82%e7%85%a7%e5%85%83%e3%81%ae%e6%ae%8b%e5%ad%98%e7%8e%87%e3%82%92%e8%a6%8b%e3%82%8b</guid>
		<description><![CDATA[<p>リファラー情報の扱いは、他のアクセス解析ツールと違う仕様 Google Analyticsの、他のサービスと違う有名な仕様として、外部リファラーが無い場合のリピーターのリファラー情報は、前回のリファラー情報とするというの &#8230; <a href="https://abc-analytics.com/find_suvival_rate_par_visitscount_against_referrer/" class="more-link">続きを読む <span class="screen-reader-text">訪問回数別セッション数(vs 参照元)の残存率を見る</span></a></p>
<p><a rel="nofollow" href="https://abc-analytics.com/find_suvival_rate_par_visitscount_against_referrer/">訪問回数別セッション数(vs 参照元)の残存率を見る</a>は<a rel="nofollow" href="https://abc-analytics.com">google analyticsについて</a>で公開された投稿です。</p>
]]></description>
				<content:encoded><![CDATA[<h3>リファラー情報の扱いは、他のアクセス解析ツールと違う仕様</h3>
<p>Google Analyticsの、他のサービスと違う有名な仕様として、外部リファラーが無い場合のリピーターのリファラー情報は、前回のリファラー情報とするというのがあります。</p>
<p>直接訪問は前回のリファラー情報でレポートとして上がるという事です。最初からノーリファラーなら、ノーリファラーですが。</p>
<p>僕は、他のアクセス解析サービスはよく知らないので、どちらが有用なデータ表示方法かは分からないのですが、GAの仕様を決定した人は、こっちが良いと思ってそうしたんだと思います。</p>
<h3>この方法で良いなと思える点</h3>
<p>本当は、ユーザー単位で、トラフィック情報の変遷を見ることが出来れば、万事解決なのですが、GAは大きな会社のサービスなので、いろんな事に配慮しなければならず、ユーザー単位のトラフィック情報を見ることはできません。ユーザーグループを作って、カスタム変数に記録すれば、グループ単位では見られるようになりますが、それは置いておきます。</p>
<p>それで良い点はというと、直接訪問を必ず、どこかの参照元の情報に帰属させてる点です。アクセス解析の目的は、コンバージョンの向上にあるわけで、その要因となる流入元情報の寄与を割り振ってるわけです。２，３回目は、bookmarkから来たんだろうけど、一回目は、、、というデータ処理を省くことができるわけです。</p>
<p>もちろん、リピーターは、複数の外部サイトからやってることも多いわけで、その場合は上書きされていくので、きちんとした？データにはならないわけですが。</p>
<h3>参照元別の残存率 = コア化するユーザー率を見る</h3>
<p>訪問回数と参照元情報をディメンジョンに、セッション数を指標にします。</p>
<p>&#160; <a href="https://i0.wp.com/abc-analytics.com/wp-content/uploads/34974c12e344_3AE/visits_against_visit_count.jpg?ssl=1"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="visits_against_visit_count" border="0" alt="visits_against_visit_count" src="https://i0.wp.com/abc-analytics.com/wp-content/uploads/34974c12e344_3AE/visits_against_visit_count_thumb.jpg?resize=368%2C344&#038;ssl=1" width="368" height="344" data-recalc-dims="1" /></a> </p>
<p>データは、仮想の数字です。サイトの数字を参考にして、乱数を降った擬似的なデータです。 縦軸（Y軸)は、<strong>１０の対数です</strong>。４なら１万。2なら100。 ２，３回目までくるのは、1%とかの世界ですね。１以下で10以下です。</p>
<p>あと、データ集計期間の長さによってデータが偏るので、そこも注意した方が良いです。その集計期間の訪問回数というのは、Google Analyticsでは出せないです。出る数字は、全ての測定期間で、何回目の訪問だったかです。</p>
<p>参照元別で残存率が違う場合、主要な参照元の５回目残存率なんかは、気にしても良いかもしれません。この場合だと、Eなんかは2.8(630くらい)から1.8(63くらい)くらいと、１０％くらいは残ってくれてます。ほかは、Dなんかは、５回目で、3(1000以上)から１以下(10)になります。</p>
<p>最終的には、コンバージョン率と絡めて、数字を吟味する必要はあるのですが、参照元によって残存率が違う、訪問回数が進むにつれ、1/10, 1/100になっていくけど、参照元に依っては生き残る率が高いのがあるのを気にするのもいいかもしれません。</p>
<p>Google Analyticsのノーリファラーを前回のリファーラー情報に割り振る仕様も、こういう見方をする場合は、データ処理が楽だと思います。</p>
<p>もちろん、あるユーザーの二回目セッションは参照元がAで、三回目はBという事もあるので、訪問回数の残存＝ ユーザーの残存率 とはならないですが、ある程度は類似するはずです。また、このデータ集計期間に、一回目が入らずに二回目から登場のパターンもありえます。GAは、ある期間内で、何回目の訪問だったかは教えてくれません。</p>
<p>ということで、参照元別に訪問回数別のセッション数を見て、この参照元はコアのユーザーに成ってくれやすい。 裏を言えばリピートしない、というのを把握する話でした。</p>
<p>実はどこかのサイトのデータ整理をしてて、対数グラフにしたら、それなりに見えたので、blogを書きました。 底を求める方法が分からず、何回か検索した。中学生の僕が見たら、僕を殴りに来たかも、、、630 =&gt; 10^2.8 は、頭に出なかった、、、</p>
<p><a rel="nofollow" href="https://abc-analytics.com/find_suvival_rate_par_visitscount_against_referrer/">訪問回数別セッション数(vs 参照元)の残存率を見る</a>は<a rel="nofollow" href="https://abc-analytics.com">google analyticsについて</a>で公開された投稿です。</p>
]]></content:encoded>
			<wfw:commentRss>https://abc-analytics.com/find_suvival_rate_par_visitscount_against_referrer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
