
データの可視化に使えるD3.jsでユーザーのページ遷移を表現してみた
Posted on
こんにちは、プレイドの@wikrshです。
弊社のKARTE では属性データやサイト上での行動情報など様々なデータを元に来訪したユーザーの状況をリアルタイムに可視化しており、どのような情報の見せ方をすればよりユーザーへの理解を深められるのか、社内では日々議論・改良を重ねています。
今回は現在KARTEで行っているものとは異なる表現を実験してみたい + アニメーションを作るのが面白そうという動機で、「各ユーザーがサイト内の各ページを遷移している様子」の可視化に取り組んでみましたので紹介いたします。
作成するアニメーションのイメージ
各ページをノードとして表し、ユーザーを表すノードが各ページのノードを移っていく形で表現することを考えました。
/page1
を見ていたあるユーザーが/page2
にアクセスした場合は、/page1
を表すノードから/page2
を表すノードへユーザーを表すノードが移動するイメージです。
このノードを各ページ・各ユーザーについて表示して、時刻を変化させる(再生する)ことで、各時刻でユーザーがどのように移動しているかを可視化することが今回の目標です。
実装にはチュートリアルや例が豊富でありアニメーションも容易な D3.js を使用し、ブラウザ上にSVGで表示を行うことにしました。
ページの表現
サイト内の各ページの配置方法は様々考えられますが、今回はサイト間のページ構造に依らずに適用でき、かつ実装も容易であるため環状に配置することを考えました。
各ページ間の遷移についてはこれらのノード間を移動させることで表現できますが、セッションの初回アクセスは表現できません。
そのため、中心にノードを一つ配置し初回アクセス時は中心のノードからアクセスページへ移動するものとします。
また、各ページを閲覧しているユーザー数はページのノードの大きさで表現することにしました。
SVGのcircle
の大きさは半径で指定しますが、面積をユーザー数に比例させたいので半径はユーザー数の平方根に比例させるようにします。
閲覧中のユーザーの取得
今回は一般的なアクセスログを想定し、一つのレコードが、
- アクセス日時
- ユーザーID
- アクセスしたページ
の情報からなるデータを使用します。
このデータに従ってある時刻t
で発生したページアクセスを表示すれば良いのですが、このデータからはユーザーがいつページの閲覧を止めたか(離脱したか)は分かりません。
ページアクセス以外のデータを組み合わせればより正確な離脱の計測も可能ですが、今回は簡単のためページアクセスから一定時間T
経ったら閲覧を止めたとみなすことにします。
この条件の元である時刻t
でサイトを閲覧中のユーザーを考えると、ページアクセスの時系列データの内、時刻t-T
〜t
でページアクセスをしたユーザーになります。
アニメーションの再生時は、この時刻t
を進める→閲覧中のユーザーを更新という流れを繰り返して表示を行います。
ユーザーのページ遷移アニメーション
ユーザーがページ間を遷移するアニメーションはD3.jsの transitionで実装します。
詳細については多くのチュートリアルや例があるので割愛しますが、D3.jsを使用するとシンプルにアニメーションを実装できます。
注意点としては、ユーザーとノードを対応させるためにユーザーIDをキーとして渡す必要があります。
これを行わないと、異なるユーザーのノードが使われてしまう可能性があります。
キー指定無し:
キー指定有り:
上の例ではデータ上は2人のユーザーがページを遷移していますが、キー指定無しの場合はノードとユーザーの紐付けが行われないため、遷移が起こっていないように見えてしまいます。
作成したアニメーション
弊社の運営するShopping Tribeへのある日のアクセスデータをサンプリングした上で抽出してアニメーションを作成してみました。
ノード数を抑えるためにアクセス数の上位49ページをそれぞれ一つのノードで表し、残りのページへのアクセスは一つのノード(others
)にまとめて表現しました。
作成したアニメーションを眺めていると、
- 各ページへのアクセスのほとんどはサイト外からの流入で行われており、トップページ等サイト内での遷移からのアクセスの割合は多くない
- アクセスの集中しているページとその他のページ間の遷移が多いわけではなく、決まった遷移の流れにはなっていない
- アクセス数が上位49ページに入っていないページへのアクセス割合が比較的大きく、幅広くアクセスが発生している
といった大まかな傾向は見てとれますが、新しい知見を得るためにはまだまだ改良が必要そうです。
最後に
今回行ってみたユーザー行動の可視化では、大まかなユーザーの動きの傾向や時間帯ごとの動きの違い程度の傾向はつかめるように思いますが、データから新しい知見を得るという点までは達しておらず、サイトに来訪したユーザーについての理解を深めるためには改良が必要そうです。
ここから意義のある知見を得られるレベルまで改良するには、
- 個々のユーザーをどのように表現するか
- 各ページのノードをどのように配置するのが良いか
が主なポイントになるかと思います。
特に、個々のユーザーの表現方法については、KARTEに取り込まれたユーザー情報やセグメント情報と合わせればより多くの知見を得られるのではなかと思いますので、より良い表現を考えたいところです。
また、今回は閲覧データのみを使用しましたが、KARTE上には購入や会員登録を含む様々な行動データが存在するため、閲覧よりもより細かい行動の遷移を見るのも面白そうです。
ウェブ接客プラットフォーム「KARTE」を運営するプレイドでは、KARTEを使ってこんなアプリケーションが作りたい! KARTE自体の開発に興味がある!というエンジニア(インターンも!)を募集しています。
詳しくは弊社採用ページ
またはWantedly
をご覧ください。 もしくはお気軽に、下記の「話を聞きに行きたい」ボタンを押してください!