Sankeyチャートを作成する方法

Sankeyチャートとは、あるカテゴリーから別のカテゴリーへの「流れ(フロー)」を帯の幅で表現したチャートです。帯の幅が大きいほど、その経路での量や割合が多いことを示します。

サイトの流入経路から離脱までのユーザーの行動など、複数のステップを経て値がどのように変化・分配されていくかを直感的に把握したいときに特に有効です。

たとえば上の図は、とあるECサイトに流入したユーザーの移動経路を表すSankeyチャートです。左側の流入経路から、離脱・購入に至るまでの経路を確認でき、帯の幅が広いほど、その経路でのユーザー(セッション)数が多いことを示しています。

Sankeyチャートに必要なデータ

今回は、以下のような1行が1人のユーザーのWebサイトにおけるイベントログのデータを使います。

なお、このノートで使用するサンプルデータは、こちらからダウンロードできます。

networkD3パッケージをインストールする

Sankeyチャートの作成には、Rパッケージ networkD3 を使用します。まだインストールされていない場合は、以下の手順でインストールします。

プロジェクトメニューから、「Rパッケージの管理」を選択します。

すると、「Rパッケージの管理」のダイアログが開くので、「パッケージをインストール」を選択し、テキストボックスにnetworkD3と入力してインストールボタンをクリックします。

「networkD3のインストールに成功しました。」というメッセージが表示されたら、インストールは完了です。

データを加工する

Sankeyチャートを作成するには、networkD3パッケージが要求する形式にデータを整える必要があります。

具体的には、「どの要素(今回の例で言うとイベント)からどの要素へ何件遷移したか」を表すデータと、すべてのイベント名を列挙した「ノードデータ」の2つを用意します。

そこで、今回はAIプロンプトを使って、この加工処理を行います。

1. 遷移ペアを集計する

まず、ログデータを開き、画面の上部にある「AIプロンプト」ボタンをクリックします。

AIプロンプトの入力欄が表示されたら、全ての遷移の組み合わせを集計するために以下のプロンプトを入力して実行します。

遷移元と遷移先の組み合わせ件数を集計する。遷移先が欠損値になるデータは除外する。

内容を確認して「ステップとして実行」をクリックします。

これにより、遷移元・遷移先・件数の3列からなるデータフレームが作成されます。

2. ノードリストをブランチで作成する

次に、すべてのイベント名を一覧化した「ノード」データフレームを作成します。

ノードには遷移元と遷移先の両方に現れるイベント名の重複のないリストが必要なため、ここではブランチ機能を使って別のデータフレームとして分岐させます。

「ブランチを作る」ボタンをクリックします。

ダイアログが開いたら、ブランチ名として「ノード」と入力して作成します。

「ノード」のブランチが作成されたら、再度、AIプロンプトを起動し、以下のプロンプトを入力します。

遷移元列と遷移先列の項目を1つの列にまとめて、重複を削った「要素」のリストを作成する。

生成されたコードを確認し、「ステップとして実行」をクリックします。

要素列1列のみからなるノードのデータが完成します。

3. 遷移ペアをインデックスに変換する

ブランチを作成した元のデータフレーム(ログデータ)に戻り、ブランチポイントの続きに新しいステップを追加します。

networkD3パッケージは遷移元・遷移先の値として列名ではなく行番号(0始まりのインデックス)を要求するため、ここでインデックスへの変換を行います。

再びAIプロンプトを開き、以下のプロンプトを入力し、実行します。

遷移元の列と遷移先の列をノード の要素列と照合して、その行番号(0から始まるインデックス)に変換してください。

このとき、ノードのデータフレームは、AI プロンプトのデータフレームの記法にのっとり指定することを忘れないでください。

Rスクリプトが生成されたら、「ステップとして実行」をクリックします。

すると、遷移元と遷移先がそれぞれ整数のインデックスに変換されたデータフレームが完成します。

これがSankeyチャートのリンクデータとして使用する最終形です。

Sankeyチャートを作成する

レポートメニューから「新規ノート」を選択します。

新しいノートが作成されたら、コンテンツの追加ボタンをクリックして、「Rスクリプト」を選択します。

Rスクリプトの入力ダイアログが表示されたら、以下のコードを貼り付けます。(#が付いている箇所はご自身のデータに合わせてご変更ください。)

library(networkD3)

sankeyNetwork(
  Links  = ログデータ,      # インデックスに変換された遷移ペアを集計する
  Nodes  = ノード,      # ノードを指定
  Source = "遷移元",    # 「リンク」の中にある列名(" " で囲む)
  Target = "遷移先",    # 「リンク」の中にある列名(" " で囲む)
  Value  = "件数",     # 「リンク」の中にある列名(" " で囲む)
  NodeID = "要素",      # 「ノード」の中にある列名(" " で囲む)
  units  = "人",
  fontSize  = 12,       # ★ ラベルのフォントサイズを変更
  nodeWidth = 25,      # ★ ノードブロックの幅(ピクセル)を変更
)

コードを貼り付けたら、ノートの左上にある「プレビュー」ボタンをクリックします。

すると、上記のようにSankeyチャートが表示され、各ノードをドラッグして位置を調整することができます。

なお、チャートが描画範囲におさまらない場合、heightの引数の値を変更してください。

ダッシュボードにSankeyチャートを追加する

Sankeyチャートは、ダッシュボードにも同様に表示させることができます。

ダッシュボードを開いたら、編集画面から「テキストを追加」ボタンをクリックします。

テキストパネルが追加されたら、テキストの編集アイコンをクリックします。

テキストエディタが開いたら、コンテンツの追加ボタンから「Rスクリプト」を選択します。

Rスクリプトの入力ダイアログが表示されたら、先ほどノートで使用した以下のコードを貼り付けます。

library(networkD3)

sankeyNetwork(
  Links  = ログデータ,      # インデックスに変換された遷移ペアを集計する
  Nodes  = ノード,      # ノードを指定
  Source = "遷移元",    # 「リンク」の中にある列名(" " で囲む)
  Target = "遷移先",    # 「リンク」の中にある列名(" " で囲む)
  Value  = "件数",     # 「リンク」の中にある列名(" " で囲む)
  NodeID = "要素",      # 「ノード」の中にある列名(" " で囲む)
  units  = "人",
  fontSize  = 12,       # ★ ラベルのフォントサイズを変更
  nodeWidth = 25       # ★ ノードブロックの幅(ピクセル)を変更
)

コードを貼り付けたら、適用して、ダッシュボードを実行します。

これでダッシュボード上にSankeyチャートを表示できました。

Export Chart Image
Output Format
PNG SVG
Background
Set background transparent
Size
Width (Pixel)
Height (Pixel)
Pixel Ratio