読者です 読者をやめる 読者になる 読者になる

廿TT

譬如水怙牛過窓櫺 頭角四蹄都過了 因甚麼尾巴過不得

ブランド指名系検索キーワードの構成比を図示(R + Google アナリティクス)

R Google アナリティクス

はじめに

以前にこんなの、
マーケットバスケット分析による検索キーワードのグルーピングと視覚化 - 廿TT
やったけど、検索キーワードの可視化に関しては、形態素解析とか〇〇分析とかよりも地道に文字列マッチングで処理したほうが有益な気がしなくもない。

検索キーワードはもともと短い文だし、表記ゆれもあるし。

検索流入における指名系ブランドワードの視覚化

例えば、
検索流入における指名系ブランドワードの扱いとカスタマージャーニー分析|コラム アユダンテ株式会社
では、(アユダンテ|ayudante|あゆだんて)と自社名を指名して検索して来たセッションを切り分けて見ている。

Web担当者であれば、

  • 自社ブランドが認知されているか
  • またその認知が最終的な成果につながっているか

は気になるところだろう。

そこでこんな図を書いてみた。

f:id:abrahamcow:20150109001319p:plain

検索経由のセッションについて、左側にセッション数、右側にコンバージョン数を積み上げ棒グラフで示した。

また「ブランド指名系ワード」とそれ以外のワード(「一般」)を色分けした。

(not provide) は検索キーワード不明(Google が隠している)という意味なので、それも分けてある。

これをみると、
「うーん、まだまだブランド指名が少ないですな」
「ブランド指名で検索して訪れたセッションも、コンバージョンには結びついていませんね」
みたいなことがわかるだろう。

作図用のコード

このブログのタイトル「廿TT」で検索してる人なんていないので、とりあえず、「グラフ」「図」を含む検索キーワードを「ブランド指名」としておいた。

library("RGoogleAnalytics")
query <- QueryBuilder()
access_token <- query$authorize()

ここでアクセストークンをコピペ。

ga <- RGoogleAnalytics()
ga.profiles <- ga$GetProfileData(access_token)

query$Init(start.date = "2014-11-01", #データ取得期間
           end.date = "2014-11-30",
           dimensions = "ga:keyword,ga:source",
           metrics = "ga:sessions,ga:goal2Completions", #セッション数と目標2コンバージョン
           sort = "-ga:sessions", #降順
           #filters="",
           segment="gaid::-5", #自然検索トラフィック
           #segment="gaid::-4" にすると有料検索トラフィック
           max.results = 10000,
           table.id = paste("ga:",ga.profiles$id[1],sep="",collapse=","),
           access_token=access_token)

KW <- ga$GetReportData(query)
head(KW)
#agg1 <- apply(KW[3:4],2,sum)
np <- KW[KW$keyword == "(not provided)",]
#np

gKW <- KW[KW$source == "google",]
ngKW <- KW[KW$source != "google",]

aggG <- apply(gKW[3:4],2,sum)
aggNG <- apply(ngKW[3:4],2,sum)

brand <- c("グラフ|図") #正規表現が使える
#検索キーワードの表記ゆれはこんな感じで地道に網羅していくしかない気がする

head(gKW)
library(stringr)
GB <- apply(gKW[str_detect(gKW$keyword, brand),3:4],2,sum)
GNB <- aggG - GB - np[3:4]
#GNB

NGB <- apply(ngKW[str_detect(ngKW$keyword, brand),3:4],2,sum)
NGNB <- aggNG - NGB
#NGNB

tmp <- data.frame( "検索エンジン" = c("google","google","google","Yahoo!他","Yahoo!他" ),
            "category" = c("(not provided)","ブランド指名","一般","ブランド指名","一般")
  )

tmp2<-rbind(
rbind(np[3:4],GB,GNB),
rbind(NGB,NGNB)
)
rownames(tmp2) <-NULL 

dat1 <- cbind(tmp,tmp2)
#dat1

library(ggplot2)
library(scales)
library(RColorBrewer)

theme_set(theme_bw(15,"HiraKakuPro-W3"))

p1 <- ggplot(dat1,aes(x=検索エンジン,y=sessions, fill=category)) +
  geom_bar(stat="identity")+
  scale_y_continuous(labels = comma)+
  labs(y="セッション数", title="セッション")+
  scale_fill_manual(values = c("grey80","tomato","cornflowerblue"),name="") +
  theme(legend.position="top")
#p1
p2 <- ggplot(dat1,aes(x=検索エンジン,y=goal2Completions, fill=category)) +
  geom_bar(stat="identity")+
  scale_y_continuous(labels = comma)+
  labs(y="コンバージョン数",title="コンバージョン")+
  scale_fill_manual(values = c("grey80","tomato","cornflowerblue"),name="")+
  theme(legend.position="top")
p2
#png(file="~/Desktop/p1.png")
library(grid)
grid.newpage()
pushViewport(viewport(layout = grid.layout(1, 2)))
print(p1,  vp=viewport(layout.pos.row = 1, layout.pos.col = 1))
print(p2,  vp=viewport(layout.pos.row = 1, layout.pos.col = 2))
#dev.off()

RGoogleAnalytics の使い方は、

を参照。

文字列処理には、

を参照した。

R、最初はハードル高いかもしれないけど、とりあえずぼくのコードコピペすればそのまま動くと思うので、一回つかってみてはいかがでしょうか。

上のコードの "brand" のところと「#データ取得期間」のところだけ変えれば使い回しがきく。

定期的にやるような作業ならスクリプト化してしまったほうが楽だし、いいと思う。

コードを流して、グラフをパワーポイントとかに貼り付ければ、それでもう報告書ほぼ完成。

動画の中でぼくが触っているのは Rstudio というソフトです。

関連エントリ


ロングテールSEOのためのパレート図の紹介と RGoogleAnalytics による実践 - 廿TT