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

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

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

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

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

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

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

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

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

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

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

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

Sankeyチャートを作成する

今回のようなWebサイトのログデータにおいてはタイムスタンプの昇順であらかじめソートされている必要があります。もしデータが昇順でソートされていない場合、データを並び替えてください。(並び替え方法の詳細はこちらをご参考ください)

networkD3のインストールが完了したら、実際のSankeyチャートを作成します。

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

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

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

library(dplyr)
library(networkD3)

# Step 1. 遷移ペアを作成
all_edges <- ログデータ %>%              # データフレーム名を指定
  group_by(ユーザーID) %>%              # ユーザーを識別する列名を指定
  mutate(遷移先 = lead(イベント)) %>%     # 遷移先の情報が保存されている列を指定
  filter(!is.na(遷移先)) %>%
  rename(遷移元 = イベント) %>%           # 遷移元の情報が保存されている列を指定
  ungroup() %>%
  group_by(遷移元, 遷移先) %>%
  summarise(ユーザー数 = n(), .groups = "drop") # 集計される情報に応じた列名を指定

# Step 2. 遷移ペアを作成ノードとリンクを作成
nodes <- data.frame(name = unique(c(all_edges$遷移元, all_edges$遷移先)))

links <- all_edges %>%
  mutate(
    source = match(遷移元, nodes$name) - 1,
    target = match(遷移先, nodes$name) - 1,
    value  = ユーザー数  # Step 1で集計される列名を変更した場合はこちらも変更する
  ) %>%
  select(source, target, value)

# Setp 3. Sankeyチャートを描画
sankeyNetwork(
  Links     = links,
  Nodes     = nodes,
  Source    = "source",
  Target    = "target",
  Value     = "value",
  NodeID    = "name",
  units     = "人",     # ツールチップに表示する単位を変更(例:"件"、"回")
  fontSize  = 12,       # ラベルのフォントサイズを変更
  nodeWidth = 25,       # ノードブロックの幅(ピクセル)を変更
  height    = 250,      # チャートの高さ(ピクセル)を変更
  width    = 700       # チャートの高さ(ピクセル)を変更
)

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

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

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

ダッシュボードでもテキストパネルのコンテンツからRのコードブロックを追加することで、同様にSankeyチャートを作成・表示させることが可能です。

ダッシュボードでテキストパネルを追加する方法の詳細はこちらをご覧ください。

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