本文へスキップ
からだにいいもの

Rのトピックスを中心に『まだ、まだ、知らない、役に立つ情報?』を発信します。

ウェブ解析:検索キーワードとページの閲覧傾向

検索キーワードとページの閲覧傾向をRを使ってまとめる方法を紹介します。googleアナリティクスの管理画面だけでは捉えることが難しい情報です。ぜひ、試していただければと思います。

解析の前準備

  • googleアナリティクスの登録
  • ページのカテゴリ定義
  • Rのインストール 参考記事はこちら
  • Rとgoogleアナリティクスの連携準備 参考記事はこちら
スポンサーリンク

ページのカテゴリ定義

キーワードに対するホームページ内の細かい動きは頑張ればわかりますが、経験上あまり役に立つことはありません。大きく3つのカテゴリを定義し、その定義に対しページを所属させて解析を行っています。私は「コト(商品・サービス以外の情報)」、「モノ(商品・サービス等の情報)」、「ウゴク(ECサイト・サンプルや資料請求)」と定義し各ページを分類しています。画像はクリックすると大きく表示されます。14.05.28 朝礼資料 GoogleAnalyticsデータ収集

ページへのカテゴリ定義はURLに対して行うようにしています。こちらの記事で紹介したScreaming Frog SEO Spiderで全ページを取得しエクセルで管理しています。下記に参考の図をお示ししますが、1列目は行名とし左から”Adress”,”Title”,”セグメント”にしています。セグメントへ対応する分類を入力してください。分類の記号としてKoto_X,Mono_X,Do_Xとしています。上の例だと、コトに所属する「商品やサービス以外の情報」はKoto_1、「会社概要や問い合わせ先等」はKoto_2となります。なお、作成したエクセルは解析で使用しますのでわかりやすいところへ保存してください。ウゴクをコンバージョンで取得する場合はDo_Xに分類されるURLを削除してください。画像はクリックすると大きく表示されます。

名称未設定 1

解析コード

ウゴクはコンバージョンとするのか、ページへのアクセス数とするのかで解析コードが変わってきます。今回、ご紹介するコードはコンバージョンで取得しています。この記事を参考にしながら、googleアナリティクスとRを連携してください。下記のコードを実行する連携ができます。



###ライブラリーの読み込み#####
library(XLConnect)
library(tcltk)
library(RGoogleAnalytics)
########

###アクセス解析の準備、ブラウザを立ち上げながら#####
query <- QueryBuilder() #クエリの格納
access_token <- query$authorize() #ログイン情報の取得、ブラウザーからトークンを取得

これで、googleアナリティクスとRが連携できました。



###トークンの入力が終了したら下記を入力#####
###解析範囲の設定#####
StartDate <- "2014-01-01" #取得開始日、入力形式 YYYY-MM-DD
EndData <- "2014-05-27" #取得終了日、入力形式 YYYY-MM-DD
hostname <- "http://www.chlorellaclub.com" #ホストURLの入力
########

###HPページ分類基準の読み込み#####
###xlxsデータ#####
sheetSelect <- 1 #読み込むシート番号を入力
selectABook <- paste(as.character(tkgetOpenFile(title = "試験結果xlsxファイルを選択",filetypes = '{"xlsxファイル" {".xlsx"}}',initialfile = "*.xlsx")), sep = "", collapse =" ")
MasterAnaData <- loadWorkbook(selectABook)
AnaData <- readWorksheet(MasterAnaData, sheet = sheetSelect)
########

###解析準備#####
conf <- Configuration() #設定情報の取得
ga <- RGoogleAnalytics() #APIオブジェクトの取得
########

###解析対象のデータを取得#####
ga.profiles <- ga$GetProfileData(access_token)
########

1つのgoogleアカウントで複数のサイトを管理している場合は、次のコードを実行して対象とするサイトが何番目に表示されるか記録してください。



###アカウント情報の取得#####
ga.account <- conf$GetAccounts()
ga.account #情報表示
########

いよいよ、データの取得とエクセルへの出力となります。



###データの取得#####
###検索ワードと各ページPV率#####
query$Init(start.date = StartDate,
end.date = EndData,
dimensions = "ga:month, ga:keyword, ga:exitPagePath",
metrics = "ga:visits, ga:newVisits, ga:pageviews, ga:pageviewsPerSession",
#sort = sort,
#filters="",
#segment=segment,
max.results = 10000,
table.id = paste("ga:", ga.profiles$id[1], sep="", collapse=","),
access_token=access_token)
ga.data <- ga$GetReportData(query)
ga.data <- cbind(ga.data[, 1:2], paste(hostname, ga.data[, 3], sep = ""), ga.data[, 4:7])
########

# ###エクセルで出力#####
# wb <- loadWorkbook("GoogleAnalyticsデータ収集.xlsx", create = TRUE) #エクセルデータの作成
# createSheet(wb, name = "データ")
# writeWorksheet(wb, ga.data, sheet = "データ") #データの書き込み
# setColumnWidth(wb, sheet = "データ", column = 6:ncol(ga.data), width = 5000)
# setAutoFilter(wb, sheet = 1, paste("A1:", LETTERS[ncol(ga.data)], "1", sep = ""))
# saveWorkbook(wb)
# ########

###検索ワードとコンバージョン数#####
query$Init(start.date = StartDate,
end.date = EndData,
dimensions = "ga:month, ga:keyword",
metrics = "ga:goal4Completions, ga:goal11Completions",
#sort = sort,
#filters="",
#segment=segment,
max.results = 10000,
table.id = paste("ga:", ga.profiles$id[1], sep="", collapse=","),
access_token=access_token)
goalCompletions <- ga$GetReportData(query)
########

# ###確認用エクセルで出力#####
# wb <- loadWorkbook("GoogleAnalyticsgoalCompletions.xlsx", create = TRUE) #エクセルデータの作成
# createSheet(wb, name = "データ")
# writeWorksheet(wb, goalCompletions, sheet = "データ") #データの書き込み
# setColumnWidth(wb, sheet = "データ", column = 6:ncol(goalCompletions), width = 5000)
# setAutoFilter(wb, sheet = 1, paste("A1:", LETTERS[ncol(goalCompletions)], "1", sep = ""))
# saveWorkbook(wb)
# ########
########

###データの整形#####
###ページの分類#####
classvector <- NULL
for(n in seq(nrow(ga.data))){

matchNO <- match(ga.data[n, 3], AnaData[, 1]) #分類の取得
classvector <- c(classvector, AnaData[matchNO, 3])

}

GaData <- cbind(ga.data, classvector) #データの結合
# ###確認用エクセルで出力#####
# wb <- loadWorkbook("GaData.xlsx", create = TRUE) #エクセルデータの作成
# createSheet(wb, name = "データ")
# writeWorksheet(wb, GaData, sheet = "データ") #データの書き込み
# setColumnWidth(wb, sheet = "データ", column = 6:ncol(GaData), width = 5000)
# setAutoFilter(wb, sheet = 1, paste("A1:", LETTERS[ncol(GaData)], "1", sep = ""))
# saveWorkbook(wb)
# ########

GaData <- GaData[complete.cases(GaData),] #完全なケースだけ取り出す
uniKeyword <- unique(GaData[, 2]) #キーワードの単一化
OutPutData <- NULL #最終出力データの保存

for(i in seq(uniKeyword)){

classKeyData <- subset(GaData, GaData[,2] == uniKeyword[i]) #抽出
VisitViews <- colSums(classKeyData[,4:6]) #visits, newvisit, pageviewsの集計
ClassPageViews <- tapply(classKeyData[, 6], classKeyData[, 8], sum) #classvector別のpageviews
ClassPVR <- round((ClassPageViews / VisitViews[3]) * 100, 2) #classvector別のPVR

GoalData <- subset(goalCompletions, goalCompletions[,2] == uniKeyword[i]) #抽出
OutPutData <- rbind(OutPutData, c(uniKeyword[i], VisitViews, round((VisitViews[3] / VisitViews[1]), 2), ClassPVR, colSums(GoalData[, 3:4]))) #データの結合

}
OutPutData <- as.data.frame(OutPutData) #データのデータフレーム化

#データの数値化
for(n in 2:ncol(OutPutData)){

OutPutData[,n] <- type.convert(as.character(OutPutData[,n]))

}
#

#colnames(OutPutData) <- c("検索キーワード", "訪問者", "新規訪問者",
#"総閲覧ページ数", "平均閲覧ページ数",
#"設定したKoto_X,Mono_X,Do_Xに対するラベルを入力してください。") #行名の付与

OutPutData <- OutPutData[sort.list(OutPutData[, 2], decreasing=TRUE),]

###データの出力#####

###保存Dirの設定#####
selectABook <- as.character(tkchooseDirectory(title = "データの保存先を選択")) #保存先の指定
setwd(selectABook) #初期dir設定
########

###エクセルで出力#####
wb <- loadWorkbook("GoogleAnalyticsデータ収集.xlsx", create = TRUE) #エクセルデータの作成
createSheet(wb, name = "データ")
writeWorksheet(wb, OutPutData, sheet = "データ") #データの書き込み
setColumnWidth(wb, sheet = "データ", column = 6:ncol(OutPutData), width = 5000)
setAutoFilter(wb, sheet = 1, paste("A1:", LETTERS[ncol(OutPutData)], "1", sep = ""))
saveWorkbook(wb)
########

出力される結果は下記のようになります。画像はクリックすると大きく表示されます。

出力結果

疑問点、改良点がありましたらご連絡ください。お願いします。

スポンサーリンク
Prices and shipping availability may change. Please refer to the product page at time of purchase.
Content displayed on this site is provided by Amazon and may be updated or removed.
Amazon Associate, karada-good earns income through qualifying sales.