GoogleAnalyticsの年間のデータをエクセルへ出力:その1「GoogleAnalyticsからデータの取得編」

RでGoogle Analytics
スポンサーリンク

GoogleAnalyticsの年間のデータをエクセルへ出力するコマンドを作成しました。

無題

出力されるエクセルは下記のイメージ画像となります。

なお、コマンドが大変長いため、記事をその1「GoogleAnalyticsからデータの取得編」とその2「エクセルデータの作成編」の2分割し紹介します。

本記事はその1「GoogleAnalyticsからデータを取得編」です。

なお、データを取得するサイトのidとトークンファイルは取得・保存している前提でコマンドを紹介します。

サイトのidとトークンファイルの取得と保存方法は「RでGoogle Analyticsの目次」から「RGoogleAnalyticsパッケージ基本的な利用方法」を確認してください。

また、解析環境が整っていない場合は「解析の準備」の項目を確認してください。初心者でも実行できるようにまとめています。

解析コマンドなどのまとめはこちらから:RでGoogle Analyticsの目次

その2「GoogleAnalyticsからデータを取得編」はこちらから。
GoogleAnalyticsの年間のデータをエクセルへ出力:その2「エクセルデータの作成編」


スポンサーリンク

GoogleAnalyticsのデータを取得するための事前準備

取得するデータ毎にコマンドを紹介します。

・まずはデータを取得する年の設定

紹介するコマンドで2014年のデータが取得できます。なお、各データを取得するコマンド末尾にエクセルでデータを出力するコマンドをコメントアウトして紹介しています。

###取得年を設定#####
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

・月毎の毎日の訪問者数のデータを取得するコマンド

未計測の期間は1日から0が2連続以上した場合と定義しています。コマンド内のコメントを確認してください。

#Dimensions&#12398;&#35373;&#23450;
Dimensions <- "ga:date"

#&#12450;&#12463;&#12475;&#12473;&#12487;&#12540;&#12479;&#12398;&#21462;&#24471;&#12289;&#26085;&#12398;&#35373;&#23450;&#12290;
MonthAnaData <- 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:users",
                     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]
  
  #&#26410;&#35336;&#28204;&#12289;1&#26085;&#12363;&#12425;0&#12364;&#32154;&#12367;&#22238;&#25968;&#12434;&#28204;&#23450;
  RleN <- rle(AnalyticsData)[[1]][1]
  
  #&#26410;&#35336;&#28204;&#12289;0&#12364;2&#36899;&#32154;&#20197;&#19978;&#12391;NA&#12395;&#32622;&#25563;
  ifelse(RleN &gt; 2,
         #&#26410;&#35336;&#28204;&#12434;NA&#12395;&#32622;&#25563;
         AnalyticsData[1:RleN] <- NA, "")
  
  #31&#26085;&#12395;&#38263;&#12373;&#12434;&#35519;&#25972;
  length(AnalyticsData) <- 31
  
  #Data&#12398;&#32080;&#21512;
  MonthAnaData <- cbind(MonthAnaData, AnalyticsData)
}

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

#&#34892;&#21644;
RSums <- apply(MonthAnaData[, 2:13], 1, function(x) sum(x, na.rm = TRUE))

#&#34892;&#24179;&#22343;
RMeans <- apply(MonthAnaData[, 2:13], 1, function(x) mean(x, na.rm = TRUE))

#&#34892;&#21644;&#12289;&#34892;&#24179;&#22343;&#12398;&#32080;&#21512;
MonthAnaData <- cbind(MonthAnaData, "&#21512;&#35336;" = RSums, "&#24179;&#22343;" = round(RMeans, 0))

#&#21015;&#21644;&#12289;&#26410;&#35336;&#28204;&#12434;NA&#12395;&#32622;&#25563;
CSums <- apply(MonthAnaData[, 2:14], 2, function(x) sum(x, na.rm = TRUE))
CSums[CSums == 0] <- NA
CSums <- c("&#21512;&#35336;", CSums)

#&#38263;&#12373;&#12434;&#35519;&#25972;
length(CSums) <- 15

#&#21015;&#24179;&#22343;
CMeans <- c("&#24179;&#22343;", round(apply(MonthAnaData[, 2:13], 2, function(x) mean(x, na.rm = TRUE)), 0),
            NA, round(mean(MonthAnaData[, 15], na.rm = TRUE), 0))

#&#21015;&#21644;&#12289;&#21015;&#24179;&#22343;&#12398;&#32080;&#21512;
MonthAnaData <- rbind(MonthAnaData, "&#21512;&#35336;" = CSums, "&#24179;&#22343;" = CMeans)

#&#25991;&#23383;&#34892;&#12434;&#22240;&#23376;&#12289;&#25968;&#23383;&#34892;&#12434;&#25968;&#23383;&#12395;&#22793;&#25563;
for(i in 1:ncol(MonthAnaData)){
  
  ifelse(is.character(MonthAnaData[, i]) == TRUE,
         MonthAnaData[, i] <- type.convert(MonthAnaData[, i]),
         NA)
  
}

#&#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("&#26376;&#21029;&#12398;&#26085;&#12450;&#12463;&#12475;&#12473;&#12487;&#12540;&#12479;.xlsx", sep = ""), data = MonthAnaData, sheet = "&#12450;&#12463;&#12475;&#12473;&#12487;&#12540;&#12479;")

・月の曜日毎の訪問者数のデータを取得するコマンド

未計測の期間は月の合計が0と定義しています。コマンド内のコメントを確認してください。

#Dimensions&#12398;&#35373;&#23450;
Dimensions <- "ga:dayOfWeekName, ga:date"

#&#26332;&#26085;&#12398;&#20006;&#12403;&#38918;&#12399;&#12371;&#12371;&#12391;&#35373;&#23450;
WeekDayAnaData <- data.frame(c("Sunday", "Monday", "Tuesday", "Wednesday",
                               "Thursday", "Friday", "Saturday"))

#&#26332;&#26085;&#25968;&#12398;&#26684;&#32013;
CountDayOfWeekName <- NULL

#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:users",
                     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)
  
  #&#26332;&#26085;&#12398;&#22240;&#23376;&#21270;
  AnalyticsData[, 1] <- factor(AnalyticsData[, 1],
                               levels = WeekDayAnaData[, 1])
  
  #&#26410;&#35336;&#28204;&#12289;&#21512;&#35336;&#12364;0&#12391;NA&#12395;&#32622;&#25563;
  ifelse(sum(AnalyticsData[, 3]) != 0,
         #&#26332;&#26085;&#25968;&#12398;&#21462;&#24471;
         CountDayOfWeekName <- rbind(CountDayOfWeekName, tapply(AnalyticsData[, 1], AnalyticsData[, 1], length)),
         CountDayOfWeekName <- rbind(CountDayOfWeekName, rep(0, 7)))
  
  #&#26332;&#26085;&#27598;&#12395;&#38598;&#35336;&#12290;&#12487;&#12540;&#12479;&#12501;&#12524;&#12540;&#12512;&#21270;
  AnalyticsData <- as.data.frame(aggregate(AnalyticsData[, 3], list(AnalyticsData[, 1]), sum))
  
  #&#26410;&#35336;&#28204;&#12289;&#21512;&#35336;&#12364;0&#12391;NA&#12395;&#32622;&#25563;
  ifelse(sum(AnalyticsData[, 2]) == 0,
         #&#26410;&#35336;&#28204;&#12434;NA&#12395;&#32622;&#25563;
         AnalyticsData[, 2] <- NA, "")
  
  #&#26332;&#26085;&#12398;&#20006;&#12403;&#26367;&#12360;
  AnalyticsData <- AnalyticsData[order(AnalyticsData[, 1]), ]
  
  #Data&#12398;&#32080;&#21512;
  WeekDayAnaData <- cbind(WeekDayAnaData, AnalyticsData[, 2])
  
}

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

#&#26332;&#26085;&#25968;&#12398;&#21512;&#35336;&#21462;&#24471;
CountDayOfWeekName <- as.data.frame(colSums(CountDayOfWeekName))

#&#26332;&#26085;&#34892;&#12364;&#22240;&#23376;&#12395;&#12394;&#12387;&#12390;&#12356;&#12427;&#12398;&#12391;&#25991;&#23383;&#21015;&#21270;
WeekDayAnaData[ ,1] <- as.character(WeekDayAnaData[ ,1])

#&#34892;&#21644;
RSums <- apply(WeekDayAnaData[, 2:13], 1, function(x) sum(x, na.rm = TRUE))

#&#34892;&#24179;&#22343;
RMeans <- as.numeric(unlist(RSums / CountDayOfWeekName))

#&#34892;&#21644;&#12289;&#34892;&#24179;&#22343;&#12398;&#32080;&#21512;
WeekDayAnaData <- cbind(WeekDayAnaData, "&#21512;&#35336;" = RSums, "&#26332;&#26085;&#24179;&#22343;" = round(RMeans, 0))

#&#21015;&#21644;&#12289;&#26410;&#28204;&#23450;&#26376;&#12399;NA&#12395;&#32622;&#25563;
CSums <- apply(WeekDayAnaData[, 2:14], 2, function(x) sum(x, na.rm = TRUE))
CSums[CSums == 0] <- NA
CSums <- c("&#21512;&#35336;", CSums)

#&#38263;&#12373;&#12434;&#35519;&#25972;
length(CSums) <- 15

#&#21015;&#24179;&#22343;
CMeans <- c("&#24179;&#22343;", round(apply(WeekDayAnaData[, 2:13], 2, function(x) mean(x, na.rm = TRUE)), 0),
            NA, round(mean(WeekDayAnaData[, 15], na.rm = TRUE), 0))

#&#21015;&#21644;&#12289;&#21015;&#24179;&#22343;&#12398;&#32080;&#21512;
WeekDayAnaData <- rbind(WeekDayAnaData, "&#21512;&#35336;" = CSums, "&#24179;&#22343;" = CMeans)

#&#25991;&#23383;&#34892;&#12434;&#22240;&#23376;&#12289;&#25968;&#23383;&#34892;&#12434;&#25968;&#23383;&#12395;&#22793;&#25563;
for(i in 1:ncol(WeekDayAnaData)){
  
  ifelse(is.character(WeekDayAnaData[, i]) == TRUE,
         WeekDayAnaData[, i] <- type.convert(WeekDayAnaData[, i]),
         NA)
  
}

#&#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("&#26376;&#21029;&#12398;&#26332;&#26085;&#12450;&#12463;&#12475;&#12473;&#12487;&#12540;&#12479;.xlsx", sep = ""), data = WeekDayAnaData, sheet = "&#12450;&#12463;&#12475;&#12473;&#12487;&#12540;&#12479;")

・曜日毎の時間別訪問者数のデータを取得するコマンド

紹介するコマンドでは曜日の並び順を日曜日から土曜日となっています。並び順の変更はコマンド内のコメントを確認してください。

#&#26332;&#26085;&#12398;&#20006;&#12403;&#38918;&#12399;&#12371;&#12371;&#12391;&#35373;&#23450;
WeekDayName <- c("Sunday", "Monday", "Tuesday", "Wednesday",
                 "Thursday", "Friday", "Saturday")

#Dimensions&#12398;&#35373;&#23450;
Dimensions <- "ga:dayOfWeekName, ga:hour"

#&#21462;&#24471;&#12497;&#12521;&#12513;&#12540;&#12479;&#12398;&#35373;&#23450;
query.list <- Init(start.date = as.character(StartDate[1]),
                   end.date = as.character(EndDate[12]),
                   dimensions = Dimensions,
                   metrics = "ga:users",
                   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;
WeekDayHourAnaData <- GetReportData(query, oauth_token)

#&#26332;&#26085;&#12398;&#22240;&#23376;&#21270;
WeekDayHourAnaData[, 1] <- factor(WeekDayHourAnaData[, 1],
                                  levels = WeekDayName)

#&#26332;&#26085;&#12398;&#20006;&#12403;&#26367;&#12360;
WeekDayHourAnaData <- WeekDayHourAnaData[order(WeekDayHourAnaData[, 1]), ]

#&#12487;&#12540;&#12479;&#12398;&#25972;&#24418;
WeekDayHourAnaData <- reshape(WeekDayHourAnaData, timevar = "dayOfWeekName",
                              idvar = "hour", direction = "wide")

#&#34892;&#21517;&#12398;&#20184;&#19982;
colnames(WeekDayHourAnaData) <- c("&#26178;&#38291;", WeekDayName)

#&#34892;&#21644;
RSums <- apply(WeekDayHourAnaData[, 2:8], 1, function(x) sum(x, na.rm = TRUE))

#&#34892;&#24179;&#22343;
RMeans <- apply(WeekDayHourAnaData[, 2:8], 1, function(x) mean(x, na.rm = TRUE))

#&#34892;&#21644;&#12289;&#34892;&#24179;&#22343;&#12398;&#32080;&#21512;
WeekDayHourAnaData <- cbind(WeekDayHourAnaData, "&#21512;&#35336;" = RSums, "&#24179;&#22343;" = round(RMeans, 0))

#&#21015;&#21644;
CSums <- c("&#21512;&#35336;", apply(WeekDayHourAnaData[, 2:9], 2, function(x) sum(x, na.rm = TRUE)), NA)

#&#21015;&#24179;&#22343;
CMeans <- c("&#24179;&#22343;", round(apply(WeekDayHourAnaData[, 2:8], 2, function(x) mean(x, na.rm = TRUE)), 0),
            NA, round(mean(WeekDayHourAnaData[, 9], na.rm = TRUE), 0))

#&#21015;&#21644;&#12289;&#21015;&#24179;&#22343;&#12398;&#32080;&#21512;
WeekDayHourAnaData <- rbind(WeekDayHourAnaData, "&#21512;&#35336;" = CSums, "&#24179;&#22343;" = CMeans)

#&#25991;&#23383;&#34892;&#12434;&#22240;&#23376;&#12289;&#25968;&#23383;&#34892;&#12434;&#25968;&#23383;&#12395;&#22793;&#25563;
for(i in 1:ncol(WeekDayHourAnaData)){
  
  ifelse(is.character(WeekDayHourAnaData[, i]) == TRUE,
         WeekDayHourAnaData[, i] <- type.convert(WeekDayHourAnaData[, i]),
         NA)
  
}

#&#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("&#26332;&#26085;&#21029;&#26178;&#38291;&#12450;&#12463;&#12475;&#12473;&#12487;&#12540;&#12479;.xlsx", sep = ""), data = WeekDayHourAnaData, sheet = "&#12450;&#12463;&#12475;&#12473;&#12487;&#12540;&#12479;")

・ページ閲覧数のデータを取得するコマンド

年間のページ閲覧数を取得しページタイトルのリストを作成しています。コマンド内のコメントを確認してください。

#Dimensions&#12398;&#35373;&#23450;
Dimensions <- "ga:pageTitle"

#&#26399;&#38291;&#20869;&#12391;&#12450;&#12463;&#12475;&#12473;&#12398;&#12354;&#12387;&#12383;&#12506;&#12540;&#12472;&#12479;&#12452;&#12488;&#12523;&#12434;&#21462;&#24471;
query.list <- Init(start.date = as.character(StartDate[1]),
                   end.date = as.character(EndDate[12]),
                   dimensions = Dimensions,
                   metrics = "ga:users",
                   max.results = 1000,
                   table.id = TableID)

#&#21462;&#24471;&#12497;&#12521;&#12513;&#12540;&#12479;&#12540;&#12434;&#20966;&#29702;
query <- QueryBuilder(query.list)

#&#20445;&#23384;&#12487;&#12540;&#12479;&#12501;&#12524;&#12540;&#12512;&#12398;&#20316;&#25104;&#12392;&#12506;&#12540;&#12472;&#12479;&#12452;&#12488;&#12523;&#12522;&#12473;&#12488;&#12398;&#21462;&#24471;
MTopTenAnaData <- as.data.frame(GetReportData(query, oauth_token)[, 1])
MTopTenAnaData <- as.data.frame(unique(gsub("(^ +)|( +$)", "", sapply(MTopTenAnaData[, 1], function (x) unlist(strsplit(as.vector(x), "\\|"))[1]))))

#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:users",
                     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;&#12456;&#12521;&#12540;&#22238;&#36991;
  try(tryCatch(AnalyticsData <- GetReportData(query, oauth_token), error = AnalyticsData <- NULL),
      TRUE)
  
  #&#12487;&#12540;&#12479;&#19968;&#26178;&#20445;&#23384;&#29992;&#12398;&#12505;&#12463;&#12488;&#12523;&#12434;&#20316;&#25104;
  mTopTen <- NULL
  
  #&#20966;&#29702;
  if(is.null(AnalyticsData) == TRUE){ 
    
    mTopTen <- rep(NA, length = nrow(MTopTenAnaData))
    
  }else{
    
    AnalyticsData[, 1] <- gsub("(^ +)|( +$)", "",
                               sapply(AnalyticsData[, 1],
                                      function (x) unlist(strsplit(as.vector(x), "\\|"))[1]))
    
    for(i in 1:nrow(MTopTenAnaData)){
      
      GetData <- subset(AnalyticsData[, 2], AnalyticsData[, 1] == MTopTenAnaData[i, 1])
      
      if(sum(GetData) != 0){
        
        mTopTen <- c(mTopTen, sum(GetData))
        
      }else{
        
        mTopTen <- c(mTopTen, NA)
        
      }
    }
  }
  
  MTopTenAnaData <- cbind(MTopTenAnaData, mTopTen)
  
}

#&#12487;&#12540;&#12479;&#12398;&#25972;&#24418;
colnames(MTopTenAnaData) <- c("&#12506;&#12540;&#12472;&#12479;&#12452;&#12488;&#12523;", month.name)

#&#34892;&#21644;
RSums <- apply(MTopTenAnaData[, 2:13], 1, function(x) sum(x, na.rm = TRUE))

#&#34892;&#24179;&#22343;
RMeans <- apply(MTopTenAnaData[, 2:13], 1, function(x) mean(x, na.rm = TRUE))

#&#38322;&#35239;&#21106;&#21512;
Rratio <- round(RSums / sum(RSums, na.rm = TRUE) * 100, 3)

#&#34892;&#21644;&#12289;&#34892;&#24179;&#22343;&#12398;&#32080;&#21512;
MTopTenAnaData <- cbind(MTopTenAnaData, "&#21512;&#35336;" = RSums, "&#24179;&#22343;" = round(RMeans, 0), "&#21106;&#21512;" = Rratio)

#&#38322;&#35239;&#21106;&#21512;&#12391;&#38477;&#38918;
MTopTenAnaData <- MTopTenAnaData[order(MTopTenAnaData[, 16], decreasing = TRUE),]

#&#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("&#12506;&#12540;&#12472;&#12450;&#12463;&#12475;&#12473;&#12487;&#12540;&#12479;.xlsx", sep = ""), data = MTopTenAnaData, sheet = "&#12450;&#12463;&#12475;&#12473;&#12487;&#12540;&#12479;")

解析コマンドなどのまとめはこちらから:RでGoogle Analyticsの目次

その2「エクセルデータ作成編」はこちらから
GoogleAnalyticsの年間のデータをエクセルへ出力:その2「エクセルデータの作成編」

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

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