Rとウェブ解析:GoogleAnalyticsのデータでインタラクティブなヒートマップを作成


RGoogleAnalyticsパッケージで取得した「月毎の毎日のpageviews」をplotlyパッケージでインタラクティブなヒートマップを作成するコードを紹介します。おまけで、ggplotでヒートマップを作成するコードを紹介します。RGoogleAnalyticsとplotlyパッケージのインストールについては過去の記事を参考にしてください。なお、RStudioではRGoogleAnalyticsパッケージでデータを取得後にplotlyパッケージを実行するとデータ送信時にエラーが起きるようです。なので、RGoogleAnalyticsパッケージでデータを取得後に一度RStudioを終了し、plotlyパッケージを実行しています。最下部に出力例があります。

RGoogleAnalytics
Rとウェブ解析:新GoogleAnalyticsパッケージの使い方

plotly
Rでインタラクティブなグラフ:便利なPlotlyライブラリのご紹介


RGoogleAnalyticsパッケージでデータを取得

下記のコマンドは月ごとに毎日のpageviewsを取得し、エクセルファイルを出力します。

#パッケージの読み込み
library("RGoogleAnalytics")
library("XLConnect")
library("tcltk")

###取得年を設定#####
year <- 2014 #取得したい年を設定
StartDate <- seq.Date(as.Date(paste(year, "-01-01", sep = "")),
              as.Date(paste(year, "-12-31", sep = "")), by = "month")
EndDate <- as.Date(format(as.Date(format(StartDate,"%Y%m01"),"%Y%m%d") + 31, "%Y%m01"),
           "%Y%m%d") - 1
########

###GoogleAnalyticsへのアクセス設定#####
#クライアントIDを設定
client.id <- "XXXXXX"

#クライアントシークレットを設定
client.secret <- "XXXXXX"

#クライアントIDおよびシークレットのトークンを取得
oauth_token <- Auth(client.id, client.secret)

#トークンファイルを保存している場合は、ディレクトリを下記を実行。保存方法は過去記事を参考にしてください。
load(paste(as.character(tkgetOpenFile(title = "トークンファイルを選択",
                                      filetypes = '{"トークンファイル" {"*"}}',
                                      initialfile = "*")), sep = "", collapse =" "))
########

#プロファイルの取得。
GetProfiles(oauth_token)

###アクセスデータ取得の準備#####
#データを取得するプロファイルidを設定
TableID <- "ga:XXXXXX"

#毎日のデータ。
Dimensions <- "ga:date"

#アクセスデータの取得、日の設定。
AnaData <- data.frame(1:31)

#12ヶ月分の処理
for(n in 1:12){

#取得パラメータの設定
query.list <- Init(start.date = as.character(StartDate[n]),
                   end.date = as.character(EndDate[n]),
                   dimensions = Dimensions,
                   metrics = "ga:pageviews",
                   max.results = 1000,
                   table.id = TableID)

#取得パラメーターを処理
query <- QueryBuilder(query.list)

#データの取得。
AnalyticsData <- GetReportData(query, oauth_token)[, 2]

#31日に長さを調整
length(AnalyticsData) <- 31

#Dataの結合
AnaData <- cbind(AnaData, AnalyticsData)
}

#データ行名に日と月名を付与
colnames(AnaData) <- c("Day", month.name)

#データの書き出し、保存フォルダを選択して書き出し。
setwd(paste(as.character(tkchooseDirectory(title = "保存ディレクトリを選択"), sep = "", collapse ="")))
writeWorksheetToFile(paste("アクセスデータ.xlsx", sep = ""), data = AnaData, sheet = "アクセスデータ")
########

plotlyでインタラクティブなヒートマップを描写

#ライブラリの読み込み
library("plotly")
library("XLConnect")
library("tcltk")

###データの読み込み#####
MasterAnaData <- loadWorkbook(paste(as.character(tkgetOpenFile(title = "GoogleAnalyticsデータを選択",
                                                               filetypes = '{"xlsxファイル" {".xlsx"}}',
                                                               initialfile = "*.xlsx")), sep = "", collapse =" "))
AnaData <- readWorksheet(MasterAnaData, sheet = 1)
########

#plotlyへのアクセス設定。plotlyのサイトで取得したusernameとkeyを入力してください。
py <- plotly(username = "XXXXXXX", key = "XXXXXXX")

#プロットデータの準備
data <- list(
  list(
    z = eval(parse(text =
                     paste(paste("list(c(", paste(AnaData[1, 2:13], collapse = ","), "),", sep = ""),
                           paste("list(", apply(AnaData[-1, 2:13], 1, paste, collapse = ","), ")", sep = "", collapse = ","),
                           ")", sep = ""))),
    x = month.name,
    y = 1:31,
    colorscale = "Portland",
    reversescale = FALSE,
    type = "heatmap"
  )
)

#plotlyへデータを送信
r <- py$plotly(data)

#プロットをブラウザで表示
browseURL(r$url)
########

おまけ、ggplot2でヒートマップを描写

gapmapパッケージを導入することでggplot2でヒートマップを手軽に描写できます。gapmapのインストールは過去の記事を参照ください。

Rとウェブ解析:ggplot2でプロットするヒートマップ「gapmap」パッケージ

#ライブラリの読み込み
library("gapmap")
library("reshape")
library("XLConnect")
library("tcltk")

###データの読み込み#####
MasterAnaData <- loadWorkbook(paste(as.character(tkgetOpenFile(title = "GoogleAnalyticsデータを選択",
                                                               filetypes = '{"xlsxファイル" {".xlsx"}}',
                                                               initialfile = "*.xlsx")), sep = "", collapse =" "))
AnaData <- readWorksheet(MasterAnaData, sheet = 1)
########

PlotData <- melt(AnaData, id.var = "Day")
#ヒートマップの作成。色はscale_fill_gradientで設定。
ggplot(PlotData, aes(as.factor(PlotData[, 2]),
                     PlotData[, 1],
                     group = PlotData[, 2])) +
           scale_fill_gradient(low="white",high="red") +
           geom_tile(aes(fill = value)) +
           scale_x_discrete(expand = c(0, 0)) +
           scale_y_continuous(expand = c(0, 0)) +
           labs(x = "", y = "") +
           theme(axis.ticks = element_blank(),
                 axis.text.x = element_text(size = 8,
                                            angle = 260,
                                            hjust = 0,
                                            colour = "grey50"))
########

コード実行時の出力

plotlyでインタラクティブなヒートマップ

おまけ、ggplot2でヒートマップ
HeatMap


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

スポンサードリンク

おすすめコンテンツ


スポンサードリンク