導入
セグメント分析など、2つ以上の属性や条件の組み合わせを分析、可視化したことはありますか?
例えば「xx歳~yy歳」「サービスAを使用したことがある」などの属性や条件により顧客を区分し、それぞれの組み合わせに含まれる顧客数を分析する、などです。
このような場合には慣れ親しんだベン図を使い、条件を整理したり可視化をするかもしれません。クロス集計表も良いかもしれません。
ただしベン図もクロス集計表も、考慮する対象が3つ以上になると複雑になってきます。
ちなみにベン図は4つ以上の集合を扱うと幾何的に複雑になるようです。
参考:Wikipedia – ベン図
このような状況で有効な、UpSet Plotという可視化手法があります。
このグラフは縦と横の棒グラフおよび中心の(Connected) Dot Plotの3要素で構成されています。
参考:Wikipedia – UpSet Plot
Upset Plotについての日本語の説明は、以下の記事が参考になります。
参考:アップセットプロット(Upset Plot)の紹介と実装
この問題では架空のフライト履歴ダミーデータを使用して、UpSet Plotを使用したセグメント分析を行います。
ロイヤル顧客かどうか、フライトはビジネス目的だったかどうか、フライトに満足したかの3条件でデータ区切り、どの組み合わせに最も多くの顧客が現れたかを可視化してみましょう。
問題Workbook

(クリックしてTableau Publicに移動)
解答要件
Basic (やさしめ)
- ダッシュボードサイズ: 800 x 800 px
- シート数: 3
- Q19 Data.xlsxを使用する。
- 以下3条件の組み合わせで2^3 = 8通りのセグメントを作成し、その中に含まれる顧客ID数を可視化した棒グラフを作成する。
- ロイヤル顧客かどうか(Is Loyal列)
- ビジネス目的か(Is Business Travel列)
- フライトに満足したか(Is Satisfied列)
- ロイヤル顧客数、ビジネス目的の顧客数、フライトに満足した顧客数をそれぞれ可視化した棒グラフを作成する。
- 中央のConnecte Dot Plotを作成する。
- 含まれる顧客ID数の降順で、8通りのセグメントを並び替える。
- Vizの見た目とツールヒントを極力一致させる。ただし任意の色を使用して良い。
Hint (クリックして展開)
- もしConnected Dot Plotの線が一部つながらない場合、以下が役立つかもしれません。
NULL値の書式設定
Advanced (むずかしめ)
Basic要件では3つの条件についてのUpSet Plotを作成しました。
もし使用する条件を変えながらセグメント分析をしたい場合はどうでしょうか?
この要求に応えるため、ここではBoolean列を縦持ちにしたデータを用意しました。
このデータを使い、使用する条件を変更しながらセグメント分析が出来るUpSet Plotを作成しましょう。

(クリックしてTableau Publicに移動)
- Q19 Data (Pivoted).csvを使用する。
- 使用する条件を選べるようにする。
- 使用するよう選択された条件について、色の凡例を表示する。
- 使用するよう選択された条件について、以下を作成する。
- 選ばれた条件の組み合わせでセグメントを作成し、その中に含まれる顧客ID数を可視化した棒グラフを作成する。
- 各条件を満たした顧客ID数を棒グラフで可視化する。
- 中央のConnecte Dot Plotを作成する。
- 含まれる顧客ID数の降順で、各セグメントを並び替える。
- 条件を満たした顧客ID数で、各条件を並び替える。
- Vizの見た目とツールヒントを極力一致させる。ただし任意の色を使用して良い。
Hint (クリックして展開)
- 縦持ちにした各ブーリアン列について、セグメントを作成するために、各顧客IDごとに各条件を満たした/満たしていないかを判定する必要があります。
つまり顧客IDごとの集計をして、縦持ちから疑似的に横持ちに戻す必要があります。ということは…?
データセット
KaggleにあるAirline Passenger Satisfactionのtrain.csvを元に作成しました。
データはこちらから
参考/インスピレーション
- 2023 Week 44: Can you build an UpSet Plot with just One Calculated Field?
- 【Tableau Tips】ベン図の代わりに使える!UpSet Plots
メモ
この問題ではBasic要件で横持ちのデータから、Advanced要件で縦持ちのデータからUpSet Plotを作りました。
横持ちのデータから作る方が作りやすいと思いますが、セグメントに使用する条件を変更する余地を残すなどのインタラクティブ性が少し落ちます。
(横持ちのデータを使う場合でも、例えばパラメータ等でセグメント作成に使用する条件に含めるかを制御することは可能だと思いますが、ちょっと複雑になりそうですね)
縦持ちのデータから作る場合はインタラクティブ性を持たせられ、また一般的に縦持ちデータの方がTableau始めBI製品には相性が良い印象ですが、Advanced要件に取り組んだ方は分かるように、少し設計難易度が上がります。
また縦持ちのデータはセグメント作成の候補になる条件を事前定義し、Pivotなどで縦持ちにする必要があるので、例えばTableau上で年齢から別途条件を作りアドホックな分析をする際には、セグメント作成の条件一覧に含めにくくなります。
UpSet Plotに使用するデータは横持ちと縦持ちどちらが適切か、要件に合わせて検討すると良いかもしれません。
提出について
こちらから提出ください。
またXにハッシュタグ#TableauChallengeで回答を投稿ください。