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

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

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

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

スポンサーリンク
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.