アップセットプロット(Upset Plot)の紹介と実装
2022年05月12日
Takahira です。複雑な集合データを表すのに使えるアップセットプロット(Upset Plot)を紹介したいと思います。
アップセットプロットとは
アップセットプロットは、2014 年に発表されたかなり新しいグラフ(参考)です。
まずこんな感じのグラフのことをいいます。
アップセットプロットは、グループ(集合)ごとに含まれる要素数を可視化するためのグラフです。
以下アップセットプロットの各要素について説明します。
左側の棒グラフには、各グループ(A、B、C、D)ごとに含まれる要素数が表現されています。
下段のグラフには、各グループ間の組み合わせ(「A かつ B であり、C や D でない」 や、「A であり他のグループ(B、C、D)でない」など)が表現されています。
そして、上段の棒グラフには、下のグラフで示された各グループ間の組み合わせごとに含まれる要素数が記載されています。
例えば、上段の 1 番左の棒は、集合 C に(だけ)入る要素が 180 個あり、1番右の棒は、集合 A と B に入るが、C や D ではない要素が 3 つあることをしめしています。
アップセットプロットの使い所
複雑なグループ(集合)関係を上手く可視化するということがこのグラフの意図になります。
グループ(集合)の可視化とはどういうことかというと、例えば以下のようなデータを可視化したい場合のことです。
このように、あるデータが複数のグループに入っているようなデータを扱う場合ですね。
こういったデータを可視化するにはベン図と呼ばれるものが一般的です。
ベン図とは次のようなものです。円と数字でできています。
各グループごとに円を書いて、それらを組み合わせて集合の重なりを表します。
重なってできる図形の各部分にその集合に属している人数を表示します。
しかし、このようなベン図ですが、集合関係が複雑(例えば、1 つの要素が 4 個や 5 個の集合に属しているときなど)は、ベン図で上手く可視化することができません。
例えば、このような映画のデータセットを考えたいと思います。
一つ一つの映画に Title があって、いくつかのジャンル(genre)「Action や Comedy など」に当てはまるならば、True 、当てはまらないなら False と格納されています。
ある映画はいくつかのジャンルにまたがることがあるというのがポイントです。(アクション(action)映画でもあり、コメディ(comedy) 映画でもあるなど。)
ためしに、上記のデータをベン図で書けるかトライしてみました。
各集合ごとに映画の数を数えて可視化しています。
大変見にくいですし、一部の集合がベン図では記述できなくなっています。
例えば、Animation でもあり Action でもあるが、Comedy でなく Documentary でない映画のスペースが無いかと思います。
しかし、こういったものでも、アップセットプロットを使えば、わかりやすく可視化することができます。
次のような感じです。
このようにアップセットプロットを使えば、複雑な集合(例えば、A であり、B であり、C でありなど)に対しても上手く要素数を表現することができます。
アップセットプロットの実装
アップセットプロットは Python と R でライブラリが出ています。
Python : upsetplot
R : ComplexUpset
あたりが使いやすそうです。
R の ComplexUpset は Python で動かすときのチュートリアルも丁寧にかかれているのでわかりやすいです。
チュートリアルはこちら。
アップセットプロットとその使い所について紹介しました。
デメリットとしてはプログラミングが少し必要なことですね。エクセルとかでできればいいのですが。
投稿一覧