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

Rの解析に役に立つ記事
スポンサーリンク

「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。実行コマンドは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")

#/,?&#12434;&#21322;&#35282;&#12473;&#12506;&#12540;&#12473;&#12395;&#22793;&#25563;
#/&#12398;&#12415;&#12434;TopDomain&#12395;&#22793;&#25563;
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])

###&#30452;&#24112;&#12487;&#12540;&#12479;:BouncesData&#12434;&#20316;&#25104;#####
#secondPagePath&#12391;(not set)&#12398;&#12487;&#12540;&#12479;&#12434;&#25277;&#20986;
BouncesData <- subset(GetData, GetData[, 2] == "(not set)")
#(not set)&#12434;landingPagePath&#12391;&#32622;&#25563;
BouncesData[, 2] <- BouncesData[, 1]
#exitPagePath&#12434;&#21066;&#38500;
BouncesData <- BouncesData[, -3]
#label&#12487;&#12540;&#12479;&#12434;&#20184;&#19982;
BouncesData <- cbind(BouncesData, label = paste0("Bounces:", BouncesData[, 3]), arrows = "to")
#&#21508;&#12487;&#12540;&#12479;&#12398;&#21517;&#21069;&#12434;&#20184;&#19982;
colnames(BouncesData) <- c(1:6)
########

####&#30452;&#24112;&#12434;&#38500;&#12356;&#12383;&#12487;&#12540;&#12479;:DelNotSetData&#12434;&#20316;&#25104;#####
DelNotSetData <- subset(GetData, GetData[, 2] != "(not set)")
########

###&#12521;&#12531;&#12487;&#12451;&#12531;&#12464;&#12363;&#12425;2&#12506;&#12540;&#12472;&#35370;&#21839;&#12487;&#12540;&#12479;:LanSecData&#12434;&#20316;&#25104;#####
LanSecData <- DelNotSetData[, -3]
#label&#12487;&#12540;&#12479;&#12434;&#20184;&#19982;
LanSecData <- cbind(LanSecData, label = "Second", arrows = "to")
#&#21508;&#12487;&#12540;&#12479;&#12398;&#21517;&#21069;&#12434;&#20184;&#19982;
colnames(LanSecData) <- c(1:6)
########

###2&#12506;&#12540;&#12472;&#35370;&#21839;&#12363;&#12425;&#38626;&#33073;&#12506;&#12540;&#12472;&#12487;&#12540;&#12479;:SecExitData&#12434;&#20316;&#25104;#####
SecExitData <- DelNotSetData[, -1]
#label&#12487;&#12540;&#12479;&#12434;&#20184;&#19982;
SecExitData <- cbind(SecExitData, label = paste0("Exit:PV/Session:", round(SecExitData[, 4], 3)),
                     arrows = "to")
#&#21508;&#12487;&#12540;&#12479;&#12398;&#21517;&#21069;&#12434;&#20184;&#19982;
colnames(SecExitData) <- c(1:6)
########

#&#20316;&#25104;&#12487;&#12540;&#12479;&#12434;&#32080;&#21512;&#12375;&#12390;&#12493;&#12483;&#12488;&#12527;&#12540;&#12463;&#25551;&#20889;&#12487;&#12540;&#12479;&#12434;&#28310;&#20633;
ResultData <- rbind(BouncesData, LanSecData, SecExitData)

###node&#12487;&#12540;&#12479;&#12398;&#20316;&#25104;####
#&#21508;&#12497;&#12473;&#12398;&#32207;&#12475;&#12483;&#12471;&#12519;&#12531;&#25968;&#12434;&#35336;&#31639;
nodes <- aggregate(ResultData[, 3], list(ResultData[, 1]), sum)
#ID&#12434;&#20184;&#19982;&#12375;&#12390;data.frame&#21270;
nodes <- data.frame(1:nrow(nodes), nodes)
#&#33394;&#12505;&#12463;&#12488;&#12523;&#12398;&#20316;&#25104;&#28310;&#20633;
x <- seq(0, 1, length.out = nrow(nodes))
#&#12475;&#12483;&#12471;&#12519;&#12531;&#25968;&#38477;&#38918;&#12391;&#33394;&#12434;&#20184;&#19982;
nodes <- nodes[order(nodes[, 3], decreasing = TRUE),]
nodes <- data.frame(nodes, seq_gradient_pal("#4b61ba", "#a87963")(x))
#PVperSession&#25968;&#38477;&#38918;&#12391;&#33394;&#12434;&#20184;&#19982;
#GetData <- GetData[order(GetData[, 5], decreasing = TRUE),]
#GetData <- cbind(GetData, PVPSColor = seq_gradient_pal("#4b61ba", "#a87963")(x))
#&#12487;&#12540;&#12479;&#21517;&#12434;&#20184;&#19982;
names(nodes) <- c("id", "label", "value", "color")
#nodes&#12487;&#12540;&#12479;&#12398;&#23436;&#25104;
nodes[, 4] <- as.character(nodes[, 4])
########

###edge&#12487;&#12540;&#12479;&#12398;&#20316;&#25104;#####
#&#12450;&#12489;&#12524;&#12473;&#12434;id&#12391;&#32622;&#25563;&#12377;&#12427;&#12383;&#12417;&#12398;&#28310;&#20633;
from <- ResultData[, 1]
to <- ResultData[, 2]
#&#12450;&#12489;&#12524;&#12473;&#12434;id&#12391;&#32622;&#25563;
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&#12487;&#12540;&#12479;&#12398;&#20316;&#25104;
edges <- data.frame(from, to, label = ResultData[, 5], arrows = ResultData[, 6])
########

#&#12493;&#12540;&#12488;&#12527;&#12540;&#12463;&#12487;&#12540;&#12479;&#12398;&#12503;&#12525;&#12483;&#12488;
visNetwork(nodes, edges, width = "100%", height = "500px")

出力結果

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

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

・全体図

ALLRGAvisNetwork

・一部拡大

RGAvisNetwork

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

タイトルとURLをコピーしました