サイト内をどのように遷移するセッションが多いのか知ることは、サイトのUI改善に役立つ可能性があります。
今回は、GoogleがBigQueryで提供している、GoogleのECサイトの公開サンプルデータを使って、
ページ遷移パターンセッション数ランキングを作って見たいと思います。
要件としては、
ランディング→次→その次の3ページ分の遷移パターンを調べます。
ランキングには、3ページ未満のセッションも含めます。(直帰もランキングに入れます。)
リロードすると、同一ページが続いてしまいますが、データとして面白くないので、リロード分は1回の閲覧として集計します。
クエリの実行結果は、こちらのスプレッドシートでご覧いただくことができます。
https://docs.google.com/spreadsheets/d/1Ny9_whHwM1fbJTJ1-faWrYUzw2yTOGR9Uc4Tsjv2KJ8/edit?usp=sharing
直帰も含めたランキングになっております。
下記にご紹介するクエリは、BigQueryサンドボックス + GoogleがBigQueryで提供している、GoogleのECサイトの公開サンプルデータを使って、無料でお試しいただくことができます。
BigQueryサンドボックス + GoogleがBigQueryで提供している、GoogleのECサイトの公開サンプルデータを使う方法は、こちらにまとめてあります。
GitHubにも同じクエリを置きました。
https://github.com/nakata1967/ga4sql/blob/main/sequence.sql
WITH
Sequenced AS (
SELECT
user_pseudo_id,
ARRAY_AGG(page_location
ORDER BY
event_timestamp) AS pages
FROM (
SELECT
event_timestamp,
user_pseudo_id,
event_param.value.string_value AS page_location
FROM
`bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`,
UNNEST(event_params) AS event_param
WHERE
_TABLE_SUFFIX BETWEEN '20201101'
AND '20221110'
AND event_name = 'page_view'
AND event_param.key = 'page_location' )
GROUP BY
user_pseudo_id ),
DistinctSequenced AS (
SELECT
user_pseudo_id,
ARRAY(
SELECT
DISTINCT page
FROM (
SELECT
pages[
OFFSET
(n)] AS page,
IF
(n=0, NULL, pages[
OFFSET
(n-1)]) AS previous_page
FROM
UNNEST(GENERATE_ARRAY(0, ARRAY_LENGTH(pages) - 1)) AS n
WHERE
pages[
OFFSET
(n)] !=
IF
(n=0, NULL, pages[
OFFSET
(n-1)]) ) ) AS filtered_pages
FROM
Sequenced
WHERE
ARRAY_LENGTH(pages) > 0 ) -- 統合したランキングの生成
SELECT
filtered_pages[SAFE_OFFSET(0)] AS landing,
IF
(ARRAY_LENGTH(filtered_pages) > 1, filtered_pages[SAFE_OFFSET(1)], NULL) AS next_page,
IF
(ARRAY_LENGTH(filtered_pages) > 2, filtered_pages[SAFE_OFFSET(2)], NULL) AS next_next_page,
COUNT(user_pseudo_id) AS sessions
FROM
DistinctSequenced
WHERE
ARRAY_LENGTH(filtered_pages) > 0
GROUP BY
landing,
next_page,
next_next_page
ORDER BY
sessions DESC
LIMIT
100;
Webサイトのユーザー動向を解析するための一般的な方法として、どのページを訪れ、次にどのページに遷移したかという情報を取得することが考えられます。今回、BigQueryでこのような解析を行うSQLクエリの解説を行います。
BigQueryのWITH
句は、サブクエリの結果セットに名前を付けて、後続のクエリでその名前を使って参照できるようにするものです。これを使用することで、複雑なクエリを段階的に組み立てることができます。
2-1. Sequenced
という名前のサブクエリ
この部分では、各ユーザーごとに、ユーザーが訪れたページの順序のリストを作成しています。そのため、ARRAY_AGG
関数を使用して、event_timestamp
の順にpage_location
を集約しています。
2-2. DistinctSequenced
という名前のサブクエリ
この部分での主な目的は、連続して同じページをリロードした場合、それを1つのページビューとしてカウントすることです。UNNEST
とGENERATE_ARRAY
を使い、各ユーザーのページ遷移を行ごとに展開しています。
3. 最終的なランキングの取得
ここで、上記の2つのサブクエリの結果を元に、ランディングページ、次のページ、次の次のページの組み合わせごとのセッション数をカウントしています。
SAFE_OFFSET
は、配列のインデックスが存在しない場合にエラーを回避するための関数です。これにより、2ページまたは1ページだけのセッションでもクエリが正しく動作します。
4. まとめ
このクエリを使用することで、ユーザーのページ遷移の動向をランキング形式で取得できます。リロードによる同じページの連続的なアクセスはカウントされませんので、実際のページ遷移のみが考慮される点が特徴です。
最後まで読んで頂き、ありがとうございました。