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

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

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 #&#21462;&#24471;&#12375;&#12383;&#12356;&#24180;&#12434;&#35373;&#23450;
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&#12408;&#12398;&#12450;&#12463;&#12475;&#12473;&#35373;&#23450;#####
#&#12463;&#12521;&#12452;&#12450;&#12531;&#12488;ID&#12434;&#35373;&#23450;
client.id <- "XXXXXX"

#&#12463;&#12521;&#12452;&#12450;&#12531;&#12488;&#12471;&#12540;&#12463;&#12524;&#12483;&#12488;&#12434;&#35373;&#23450;
client.secret <- "XXXXXX"

#&#12463;&#12521;&#12452;&#12450;&#12531;&#12488;ID&#12362;&#12424;&#12403;&#12471;&#12540;&#12463;&#12524;&#12483;&#12488;&#12398;&#12488;&#12540;&#12463;&#12531;&#12434;&#21462;&#24471;
oauth_token <- Auth(client.id, client.secret)

#&#12488;&#12540;&#12463;&#12531;&#12501;&#12449;&#12452;&#12523;&#12434;&#20445;&#23384;&#12375;&#12390;&#12356;&#12427;&#22580;&#21512;&#12399;&#12289;&#12487;&#12451;&#12524;&#12463;&#12488;&#12522;&#12434;&#19979;&#35352;&#12434;&#23455;&#34892;&#12290;&#20445;&#23384;&#26041;&#27861;&#12399;&#36942;&#21435;&#35352;&#20107;&#12434;&#21442;&#32771;&#12395;&#12375;&#12390;&#12367;&#12384;&#12373;&#12356;&#12290;
load(paste(as.character(tkgetOpenFile(title = "&#12488;&#12540;&#12463;&#12531;&#12501;&#12449;&#12452;&#12523;&#12434;&#36984;&#25246;",
                                      filetypes = '{"&#12488;&#12540;&#12463;&#12531;&#12501;&#12449;&#12452;&#12523;" {"*"}}',
                                      initialfile = "*")), sep = "", collapse =" "))
########

#&#12503;&#12525;&#12501;&#12449;&#12452;&#12523;&#12398;&#21462;&#24471;&#12290;
GetProfiles(oauth_token)

###&#12450;&#12463;&#12475;&#12473;&#12487;&#12540;&#12479;&#21462;&#24471;&#12398;&#28310;&#20633;#####
#&#12487;&#12540;&#12479;&#12434;&#21462;&#24471;&#12377;&#12427;&#12503;&#12525;&#12501;&#12449;&#12452;&#12523;id&#12434;&#35373;&#23450;
TableID <- "ga:XXXXXX"

#&#27598;&#26085;&#12398;&#12487;&#12540;&#12479;&#12290;
Dimensions <- "ga:date"

#&#12450;&#12463;&#12475;&#12473;&#12487;&#12540;&#12479;&#12398;&#21462;&#24471;&#12289;&#26085;&#12398;&#35373;&#23450;&#12290;
AnaData <- data.frame(1:31)

#12&#12534;&#26376;&#20998;&#12398;&#20966;&#29702;
for(n in 1:12){
  
  #&#21462;&#24471;&#12497;&#12521;&#12513;&#12540;&#12479;&#12398;&#35373;&#23450;
  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)
  
  #&#21462;&#24471;&#12497;&#12521;&#12513;&#12540;&#12479;&#12540;&#12434;&#20966;&#29702;
  query <- QueryBuilder(query.list)
  
  #&#12487;&#12540;&#12479;&#12398;&#21462;&#24471;&#12290;
  AnalyticsData <- GetReportData(query, oauth_token)[, 2]
  
  #31&#26085;&#12395;&#38263;&#12373;&#12434;&#35519;&#25972;
  length(AnalyticsData) <- 31
  
  #Data&#12398;&#32080;&#21512;
  AnaData <- cbind(AnaData, AnalyticsData)
}

#&#12487;&#12540;&#12479;&#34892;&#21517;&#12395;&#26085;&#12392;&#26376;&#21517;&#12434;&#20184;&#19982;
colnames(AnaData) <- c("Day", month.name)

#&#12487;&#12540;&#12479;&#12398;&#26360;&#12365;&#20986;&#12375;&#12289;&#20445;&#23384;&#12501;&#12457;&#12523;&#12480;&#12434;&#36984;&#25246;&#12375;&#12390;&#26360;&#12365;&#20986;&#12375;&#12290;
setwd(paste(as.character(tkchooseDirectory(title = "&#20445;&#23384;&#12487;&#12451;&#12524;&#12463;&#12488;&#12522;&#12434;&#36984;&#25246;"), sep = "", collapse ="")))
writeWorksheetToFile(paste("&#12450;&#12463;&#12475;&#12473;&#12487;&#12540;&#12479;.xlsx", sep = ""), data = AnaData, sheet = "&#12450;&#12463;&#12475;&#12473;&#12487;&#12540;&#12479;")
########

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

#&#12521;&#12452;&#12502;&#12521;&#12522;&#12398;&#35501;&#12415;&#36796;&#12415;
library("plotly")
library("XLConnect")
library("tcltk")

###&#12487;&#12540;&#12479;&#12398;&#35501;&#12415;&#36796;&#12415;#####
MasterAnaData <- loadWorkbook(paste(as.character(tkgetOpenFile(title = "GoogleAnalytics&#12487;&#12540;&#12479;&#12434;&#36984;&#25246;",
                                                               filetypes = '{"xlsx&#12501;&#12449;&#12452;&#12523;" {".xlsx"}}',
                                                               initialfile = "*.xlsx")), sep = "", collapse =" "))
AnaData <- readWorksheet(MasterAnaData, sheet = 1)
########

#plotly&#12408;&#12398;&#12450;&#12463;&#12475;&#12473;&#35373;&#23450;&#12290;plotly&#12398;&#12469;&#12452;&#12488;&#12391;&#21462;&#24471;&#12375;&#12383;username&#12392;key&#12434;&#20837;&#21147;&#12375;&#12390;&#12367;&#12384;&#12373;&#12356;&#12290;
py <- plotly(username = "XXXXXXX", key = "XXXXXXX")

#&#12503;&#12525;&#12483;&#12488;&#12487;&#12540;&#12479;&#12398;&#28310;&#20633;
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&#12408;&#12487;&#12540;&#12479;&#12434;&#36865;&#20449;
r <- py$plotly(data)

#&#12503;&#12525;&#12483;&#12488;&#12434;&#12502;&#12521;&#12454;&#12470;&#12391;&#34920;&#31034;
browseURL(r$url)
########

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

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

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

#&#12521;&#12452;&#12502;&#12521;&#12522;&#12398;&#35501;&#12415;&#36796;&#12415;
library("gapmap")
library("reshape")
library("XLConnect")
library("tcltk")

###&#12487;&#12540;&#12479;&#12398;&#35501;&#12415;&#36796;&#12415;#####
MasterAnaData <- loadWorkbook(paste(as.character(tkgetOpenFile(title = "GoogleAnalytics&#12487;&#12540;&#12479;&#12434;&#36984;&#25246;",
                                                               filetypes = '{"xlsx&#12501;&#12449;&#12452;&#12523;" {".xlsx"}}',
                                                               initialfile = "*.xlsx")), sep = "", collapse =" "))
AnaData <- readWorksheet(MasterAnaData, sheet = 1)
########

PlotData <- melt(AnaData, id.var = "Day")
#&#12498;&#12540;&#12488;&#12510;&#12483;&#12503;&#12398;&#20316;&#25104;&#12290;&#33394;&#12399;scale_fill_gradient&#12391;&#35373;&#23450;&#12290;
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でヒートマップ


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

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