「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") #/,?を半角スペースに変換 #/のみを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
・全体図
・一部拡大
少しでも、あなたのウェブや実験の解析が楽になりますように!!