📊

「箱ひげ図」に「ひと味」加えて可視化する(boxen / swarm / violin)

2021/03/11に公開

概要

  • kaggleのtitanicのデータ可視化で思ったことのメモです。
    • 「乗船した港」毎に「乗客の年齢」分布をうまく可視化したい。
    • そういったときに、箱ひげ(seabornで言えばboxplot)を使うのがよくある手段
    • 一方で、他の 可視化手段を使うと「ひと味」加える事ができるので、まとめてみました。
  • 今回は、seaborn箱ひげ図(boxplot)の代替として下記あたりを検討してみたいと思います。

https://github.com/seaborn

  • 誰かの役に立つと嬉しいですが、あくまでも作業メモ&私見です。

モチベーション

箱ひげ

  • タイタニックで、乗船港毎の乗客の年齢はこんな感じ。(まずは、箱ひげ)
  • 一応、下記程度は読み取れます。
  • どの港から乗ったとしても、年齢の中央値は25~30歳くらい
  • 中央値や第1、3分位値にも大きく差はない。(Queenstownがちょっと若め?)
  • Southamptonから乗った乗客に、外れ値(高齢の方のデータ)が目立つdownload.png

Swarmplotにしてみると

  • これをSwarmplotにしてみると、四分位値は見づらくなる代わりに、「ひと味」加わり良い感じ。
    • 系列毎のデータの個数を意識できるようになる。(実は、Queenstownは少数
    • 箱やひげの意味を知らない人にも読みやすい
    • データの密な部分、疎な部分を読み取りやすい   download.png

箱ひげに「ひと味」加える

関数やオプションを変えてみる

等々やると、「ひと味」加える事ができます

まとめてみると(チートシート)

  • boxenplotには、splitオプションがない
  • swarmplotとviolinplotでは、splitオプションの意味が、ちょっと違うので注意
オプション boxenplot swarmplot violinplot
指定無し download.png download.png download.png
hue="Sex" download.png download.png download.png
hue="Sex"
split=True
なし download.png download.png

「どれ」を「いつ」使うべきか?

  • 「この用途では、これ!」と言い切るのは難しいのですが、、
  • それぞれ比較してみると特性が見えてきます。

箱ひげ(boxplot) vs boxenplot

  • アルファベット的にも2文字(en)しか変わらないのでそこまで差はありません
  • 四分位で見せたいか、もっと細かい分位値で見せたいか? 外れ値 を意識させたいか?がポイント
箱ひげ(boxplot) boxenplot
表示 download.png download.png
特徴 四分位、最大、最小が分かる
外れ値の状況も見える
より細かい分位値が見える
外れ値として見えづらい

箱ひげ(boxplot) vs swarmplot

  • 箱ひげに比べて、データの個々を意識し、連続的に捉えるswarmplot
  • データの個数、密度、差も見えるようになるが、プロットコストが高く、大量データだと厳しい。
箱ひげ(boxplot) swarmplot
表示 download.png download.png
特徴 区間(分位値)として捉える
プロット
コストが低い
個々を意識し連続的にデータを捉える
データ個数や系列毎の差も理解可
しかし、プロットコストが高い

swarmplot vs violinplot

  • swarmplotのように、連続的にデータを扱い、プロットコストも抑えられるのがviolinplot
  • その代わり、データの個数や系列毎の差は意識できなくなる。
swarmplot violinplot
表示 download.png download.png
特徴 個々を意識し連続的にデータを捉える
データ個数や系列毎の差も理解可
しかし、プロットコストが高い
個々を意識せず、データの個数が見えないが、
全体傾向を連続的に理解可能
プロットコストも抑える事ができる。

まとめ

  • 一長一短あり、用途に応じて選択すべきですが、まとめると下記といったところでしょうか。
区間 vs 連続 「ひと味」の加え方 選ぶべき可視化手法は?
データを**区間
(分位)**で扱い、
外れ値も意識させたければ、 箱ひげ(boxplot) download.png
四分位より細かい表示では、 boxenplotdownload.png
データを連続的に扱い、 その個数や密度を見せたければ、 swarmplotdownload.png
プロットコストを抑えて
全体傾向を見せたければ、
violinplotdownload.png

Discussion