0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GA4のページパス別のユーザー数をRで箱ひげ図とジッターとして可視化する

Last updated at Posted at 2024-10-15

はじめに

実務でGA4から取得したページパス別のユーザー数をRで箱ひげ図とジッターとして可視化する機会があったため、メモ書きとして残しておくことにします。

アウトプット

最終的に、GA4から取得したページパス別のユーザー数(サンプルデータ)を以下のような形でRで箱ひげ図とジッターとして可視化することができました。

boxplot_ga4.png

作業手順

  1. GA4またはBigQueryでページパス別のユーザー数を取得する
  2. 1で取得したデータをRで箱ひげ図とジッターとして可視化する

ページパス別のユーザー数を取得する

前提

本工程で取得した結果は、ツールごとにそれぞれ以下の形式でエクスポートします。

GA4テーブルとしてBigQueryエクスポートしている方は、BigQueryを利用しても問題ございません。

  • GA4
    • Google スプレッドシート(CSVも可)
  • BigQuery
    • BigQuery テーブル(RからBigQueryに、bigrqueryというライブラリで接続するため)

参考:https://dev.classmethod.jp/articles/bigrquery/

なお、エクスポートしたデータの中身ついて、以下のようなTidyなデータ形式に前処理しておく必要があります。

date page_path uu
20241001 hoge 100
20241001 fuga 200
20241001 foo 300
20241002 hoge 450
20241002 fuga 300
20241002 foo 600

GA4

まずは、添付画像のような形でGA4の探索レポートでページパス別のユーザー数を取得します。その後、Google スプレッドシートにエクスポートします。

image.png

Google スプレッドシートにエクスポートされた結果を確認すると、すでにTidyなデータ形式となっています。(今回は、サンプルデータを使用しています。)

image.png

GA4を利用した場合の前処理は以上です。

BigQuery

BigQueryの場合、事前にエクスポートされたGA4テーブルに対して以下のクエリを実行すれば想定した結果が取得できます。

SELECT
 event_date AS date,
 IFNULL(bqutil.fn_asia_northeast1.url_parse(bqutil.fn_asia_northeast1.get_value("page_location", event_params).string_value, 'PATH'), "/") AS page_path,
 COUNT(DISTINCT user_pseudo_id) AS uu
FROM
 `projectId.datasetId.events_*`
WHERE
  _TABLE_SUFFIX BETWEEN "yyyymmdd" AND "yyyymmdd"
GROUP BY
  event_date,
  page_path
ORDER BY
  date ASC

なお、BigQuery Utilsのリージョン部分についてはご自身のGA4テーブルのリージョンに合わせてご利用ください。

添付画像のような形で取得した結果を、BigQuery テーブルとして任意のデータセット配下に保存しておきます。

image.png

BigQueryの場合の前処理は以上です。

Rで箱ひげ図とジッターとして可視化する

GA4

以下のようなRスクリプトを実行すれば、先ほどのGoogle スプレッドシートのデータを読み込み、Rで箱ひげ図とジッターとして可視化することができます。

install.packages('googlesheets4')
install.packages("tidyverse")
install.packages("ggplot2")

library(googlesheets4)
library(tidyverse)
library(ggplot2)

raw_data <- read_sheet("${url}")

box_plot <- ggplot(raw_data) +
  geom_boxplot(aes(x = page_path, y = uu)) +
  geom_jitter(aes(x = page_path, y = uu, color = page_path), width = 0.2)

plot(box_plot)

簡単にコードの説明書きを残しておきます。

library(googlesheets4)で、Google スプレッドシートの読み込みが可能です。初回のスクリプト実行時は、APIの認証を許可する必要があります。

raw_data <- read_sheet("${url}")

各関数の記述の内容は次の通りです。

  • geom_boxplot
    • 箱ひげ図を生成して、引数でx軸、y軸に描画する内容を指定する
  • geom_jitter
    • データポイントを分散させて表示する
    • widthで横方向の分散を設定し、データポイントが重ならないようにする
box_plot <- ggplot(raw_data) +
  geom_boxplot(aes(x = page_path, y = uu)) +
  geom_jitter(aes(x = page_path, y = uu, color = page_path), width = 0.2)

plot(box_plot)

最終的に、plotした結果は以下の通りです。

boxplot_ga4.png

BigQuery

Rのbigrqueryというライブラリを利用すれば、RからBigQueryに直接接続し、BQテーブルとして保存されたデータを取得することが可能です。

Rスクリプトは、以下のような形になります。

install.packages('bigrquery')
install.packages("tidyverse")
install.packages("ggplot2")

library(bigrquery)
library(tidyverse)
library(ggplot2)

bq_auth()
billing <- "projectId"

sql <- "select * from `projectId.datasetName.tableName`"

tb <- bq_project_query(billing, sql)
raw_data <- bq_table_download(tb)

box_plot <- ggplot(raw_data) +
  geom_boxplot(aes(x = page_path, y = uu)) +
  geom_jitter(aes(x = page_path, y = uu, color = page_path), width = 0.2)

plot(box_plot)

前半部分のRからBigQueryに対してクエリを実行する記述の内容は以下の通りです。

  • bq_auth()
    • 認証を行う
  • tb <- bq_project_query(billing, sql)
    • 引数に請求先のプロジェクトとSQLを持たせて、SQLを実行する
  • bq_table_download(tb)
    • SQLの実行結果をテーブルとして変数に格納する

最後に、plotすれば先ほどと同じような箱ひげ図とジッターの完成です。

おわりに

今回は、サンプルデータを利用したため、あまり面白い箱ひげ図になりませんでした。

ただ、実際のWebサイトのアクセスログを利用すれば、ひげが長いページがあったり、外れ値があったりと新たな発見があるのではないでしょうか。

ジッターのようなLooker Studioにはない可視化の表現が、Rにはあったりするので面白いですね。

どなたかの参考になれば、幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?