Rでコマンド:Google Analyticsデータをネットワークでプロットするコマンド


「RGA」、「visNetwork」、「scales」パッケージを利用してGoogle Analyticsのデータをインタラクティブなネットワーク図でプロットするコマンドの紹介です。

実行コマンドはGoogle Analyticsで取得できる「ランディングページパスからの直帰または次に訪れたページパス[secondPagePath]」、「secondPagePathから離脱ページパス」のセッション数をノードサイズ及びノードをつなぐ線(エッジ)の色(多い:青、少ない:茶色)。直帰数を「Bounces:直帰数」、secondPagePathへの移動を「Second」、secondPagePathから離脱ページパスにpageviewsPerSessionを「Exit:PV/Session:pageviewsPerSession」としてエッジラベルにプロットする内容です。

なお、コマンドを実行するにはGoogle Analyticsの設定が必要です。Google Analyticsの設定は他サイトを参照ください。また、データ数が多くなるとネットワーク図が表示されるまで時間がかかります。

各パッケージの紹介記事です。

・Rでウェブ解析:Google Analyticsからデータを取得「RGA」パッケージの紹介
 https://www.karada-good.net/analyticsr/r-141/

・Rで解析:インタラクティブな編集!ネットワーク図をぐりぐり動かせ!「visNetwork」パッケージの紹介
 https://www.karada-good.net/analyticsr/r-144/

・Rで解析:カラーパレット作成や連続・離散スケールの操作が簡単「scales」パッケージの紹介
 https://www.karada-good.net/analyticsr/r-109/

パッケージのバージョンはRGA:0.4.1、visNetwork:0.2.1、scales:0.4.0。実行コマンドはwindows 7およびOS X 10.11.2のR version 3.2.3で確認しています。


実行コマンド

詳細はコメント、コマンドのヘルプを確認してください。実行コマンドは効率化・改良があると思いますがとりあえず動作します。

#パッケージのインストール
install.packages("RGA")
install.packages("visNetwork")
install.packages("scales")

#パッケージの読み込み
library("RGA")
library("visNetwork")
library("scales")

###Google Analyticsからデータを取得#####
#リクエストの許可を申請:authorizeコマンド
authorize()

#データを読み込むidを確認:list_profilesコマンド
list_profiles()
#使用するのはidです
#idは仮想の値です
     id accountId webPropertyId internalWebPropertyId 省略
1  19999993  99999999  UA-9999999-1              99999999

#データの取得:get_gaコマンド
#実行日の前日から1週間のユーザー数,セッション数,ページビュー数を取得
#start.date,end.dateオプションはYYYY-MM-DD(例:2015-09-01)やtoday,yesterday,XdaysAgoで指定が可能です
GetData <- get_ga(profileId = "ga:19999993",
                  start.date = "7daysAgo",
                  end.date = "yesterday",
                  metrics = "ga:sessions, ga:pageviewsPerSession",
                  dimensions = "ga:landingPagePath, ga:secondPagePath,
                  ga:exitPagePath")

#/,?を半角スペースに変換
#/のみをTopDomainに変換
GetData[, 1] <- gsub("\\?|\\/", "_", GetData[, 1])
GetData[, 1] <- gsub("^_$", "TopDomain", GetData[, 1])
GetData[, 2] <- gsub("\\?|\\/", "_", GetData[, 2])
GetData[, 2] <- gsub("^_$", "TopDomain", GetData[, 2])
GetData[, 3] <- gsub("\\?|\\/", "_", GetData[, 3])
GetData[, 3] <- gsub("^_$", "TopDomain", GetData[, 3])

###直帰データ:BouncesDataを作成#####
#secondPagePathで(not set)のデータを抽出
BouncesData <- subset(GetData, GetData[, 2] == "(not set)")
#(not set)をlandingPagePathで置換
BouncesData[, 2] <- BouncesData[, 1]
#exitPagePathを削除
BouncesData <- BouncesData[, -3]
#labelデータを付与
BouncesData <- cbind(BouncesData, label = paste0("Bounces:", BouncesData[, 3]), arrows = "to")
#各データの名前を付与
colnames(BouncesData) <- c(1:6)
########

####直帰を除いたデータ:DelNotSetDataを作成#####
DelNotSetData <- subset(GetData, GetData[, 2] != "(not set)")
########

###ランディングから2ページ訪問データ:LanSecDataを作成#####
LanSecData <- DelNotSetData[, -3]
#labelデータを付与
LanSecData <- cbind(LanSecData, label = "Second", arrows = "to")
#各データの名前を付与
colnames(LanSecData) <- c(1:6)
########

###2ページ訪問から離脱ページデータ:SecExitDataを作成#####
SecExitData <- DelNotSetData[, -1]
#labelデータを付与
SecExitData <- cbind(SecExitData, label = paste0("Exit:PV/Session:", round(SecExitData[, 4], 3)),
                     arrows = "to")
#各データの名前を付与
colnames(SecExitData) <- c(1:6)
########

#作成データを結合してネットワーク描写データを準備
ResultData <- rbind(BouncesData, LanSecData, SecExitData)

###nodeデータの作成####
#各パスの総セッション数を計算
nodes <- aggregate(ResultData[, 3], list(ResultData[, 1]), sum)
#IDを付与してdata.frame化
nodes <- data.frame(1:nrow(nodes), nodes)
#色ベクトルの作成準備
x <- seq(0, 1, length.out = nrow(nodes))
#セッション数降順で色を付与
nodes <- nodes[order(nodes[, 3], decreasing = TRUE),]
nodes <- data.frame(nodes, seq_gradient_pal("#4b61ba", "#a87963")(x))
#PVperSession数降順で色を付与
#GetData <- GetData[order(GetData[, 5], decreasing = TRUE),]
#GetData <- cbind(GetData, PVPSColor = seq_gradient_pal("#4b61ba", "#a87963")(x))
#データ名を付与
names(nodes) <- c("id", "label", "value", "color")
#nodesデータの完成
nodes[, 4] <- as.character(nodes[, 4])
########

###edgeデータの作成#####
#アドレスをidで置換するための準備
from <- ResultData[, 1]
to <- ResultData[, 2]
#アドレスをidで置換
for (i in seq(nrow(nodes))){
  from <- gsub(as.character(nodes[i, 2]), nodes[i, 1], from)
  to <- gsub(as.character(nodes[i, 2]), nodes[i, 1], to)}
#edgeデータの作成
edges <- data.frame(from, to, label = ResultData[, 5], arrows = ResultData[, 6])
########

#ネートワークデータのプロット
visNetwork(nodes, edges, width = "100%", height = "500px")

出力結果

インタラクティブな図は実行コマンドを実行してください。意外な発見があると思います。

インタラクティブなファイルリンクは下記です。ファイルサイズが大きいので表示までに間があります。
RGANET

・全体図
ALLRGAvisNetwork

・一部拡大
RGAvisNetwork


少しでも、あなたのウェブや実験の解析が楽になりますように!!

スポンサードリンク

おすすめコンテンツ


スポンサードリンク