第24回 Fundamentals of Data Visualization 読書会 要約 (28章)

# 本記事の位置付け

下記読書会のための要約です。

https://gaisaba.connpass.com/event/329272/


## 課題図書

https://clauswilke.com/dataviz/directory-of-visualizations.html

この記事に出てくる図は、特に断りのない限り上記ページより引用したものです。


::: note
この書式での注記は、このブログの筆者（さの）の感想です。
:::

::: note warn
この書式での注記は、このブログの筆者（さの）の感想のうち、わからなかった部分や、ちょっと気をつけたほうがいいなと思った点です。
:::

## 今回の範囲

28 Choosing the right visualization software

28章 - 適切な可視化ツールの選択

# 要約

本書の中では、ある重要な質問をあえて避けてきた。それは、「どのようなツールを使って、どのようにグラフをつけるべきか？」というものだ。

多くの人は、自分が慣れているツールに感情的な愛着を強く持っているため、この問いは熱い議論を引き起こす。
客観的には新しいアプローチにメリットがあるのに、それを学ぶのに時間を投資することなく、好きなツールを擁護しまくる人を見てきたが、それも全く理にかなっていないわけではない。

新しいアプローチを学ぶのには痛みを伴うし、その痛みに価値があるかどうかは後知恵でしかわからないからだ。

そしてつまるところ、自分の作りたいグラフが過大な苦労なく作れるのであれば、それでいいのだ。

とはいえ、ツールを評価する一般的な原則はあると考える。
観点は以下の３つ。

- 再現可能性
- データの探索の容易性
- アウトプットがどの程度修正できるか

## 28.1 再現性と反復性

### 言葉の定義

#### 再現性とは

ある頭痛薬が、さしたる副作用なしに知覚される頭痛を大いに減らせることを、科学者グループAが、患者グループAに対する実験で発見した。

別の科学者グループBが、別の患者グループBに対して同じ実験を行って、同じ結果が出た。

これを、再現性があるという。

#### 反復性とは

犬を体重計に乗せたら41ポンドあった。
同じ犬を同じ体重計に乗せたら、やっぱり41ポンドだった。

これを、反復性があるという。

### データ可視化に当てはめると

#### データ可視化において再現性があるとは

可視化に使ったデータが利用可能で、どのような加工がされたかが正確に特定されている場合、可視化は再現性がある。

例：Aさんが作ったグラフがあり、Aさんがそれに使ったデータをBさんに渡し、かつ、どうやって可視化したかを正確に伝え、Bさんが同じ手順でグラフを作る

→ AさんのグラフとBさんのグラフは完璧に同じではなく、細かいフォントの違いなどがあるかもしれないが、同じメッセージを伝えることができる。

本書の中での例は、[25章](https://clauswilke.com/dataviz/avoid-line-drawings.html#avoid-line-drawings)に出てきた少し見た目の違うグラフや、グラフ[9.7](https://clauswilke.com/dataviz/boxplots-violins.html#fig:lincoln-temp-jittered)に対する [28.1 b](https://clauswilke.com/dataviz/choosing-visualization-software.html#fig:lincoln-repro) などが該当。

#### データ可視化において反復性があるとは

可視化の結果が1ピクセルたりともずれずに同じグラフを再現できること。
jitter のようなランダムな揺れや、ランダムな数を可視化する場合であっても、シードを揃えるなどの手法で同じ結果が再現できるようにすること。

本書の中での例は、グラフ[9.7](https://clauswilke.com/dataviz/boxplots-violins.html#fig:lincoln-temp-jittered)に対するグラフ[28.1 a](https://clauswilke.com/dataviz/choosing-visualization-software.html#fig:lincoln-repro)は完全な反復となっている。

### 再現性・反復性を持たせるためには

対話型のプロットソフトウエアを使っていると、再現性と反復性はともに難しくなる。
→ 変更の形跡を残せないから

筆者はポスドク時代にこのアプローチでグラフを作っていたが、もとのデータに変更が出ると再現のしかたがわからなくなるということを繰り返した結果、このアプローチから離れることになった。

:::note warn
対話型（interactive plotting tool） は、おそらく illustrator や Excel のグラフのような、GUIツールのことを言っていると思われる。
R studio や Jupyter などのノートブックも、PyCharm などの IDE で作るプログラムに比べたら「対話的」だが、ここでは programmatically にグラフを作ることが interactive plotting approach の対になっている
:::

プログラムのコードで可視化をすれば、同じツールを使っている限り再現性・反復性を持たせられる。

:::note warn
理想論はそうだけど、加工に使ったコードをうっかり消しちゃうことがあるんだよなぁ（みつを）
:::

## データの探索 vs データの表現

### 探索フェーズ

分析者自身がさまざまな角度からデータを眺め、特徴を理解するためのフェーズ。
ここではスピードと効率性が鍵。
早く、効率的にデータを異なる方法で眺めることができるほど、そうでなければ見逃していたであろうようなデータの特徴に気づける可能性が高くなる。

ここではグラフがきれいかどうかは二の次で、軸ラベルが欠けていても、凡例がぐちゃぐちゃでも、図形が小さすぎても、分析をしている人自身がデータの特徴を理解できさえすればいい。

ただし、散布図だったものを密度分布にしたり、箱ひげ図やヒートマップにしてみたりといった変更を素早くできる方がいい。

#### 探索フェーズに適したツール

よくできたデータ探索ツールは、可視化対象のどの変数を、ビジュアルのどの項目に渡すかを簡単に変更できて、ひとつの一貫したフレームワークの中で異なる複数の可視化の選択肢が使えるようになっている。

だが、著者の経験上は、多くの可視化ツール（や特定のプログラムにおけるグラフ作成のライブラリ）はそういうふうにできていない。

多くのツールは、（クラスが）プロットタイプごとに整理されていて、プロットタイプごとに特異なインターフェースによる入力を求められる場合が多い。

そういうのは効率的なデータ探索の邪魔になる。

なので、「素早くデータ探索ができるか」という観点でツールを比較してみるといいよ。

:::note warn
個人的には、プログラムによるデータ可視化の二台巨頭である ggplot と seaborn はともに、この観点でけっこう優秀だと思うのですがそんなことない？？
:::


### 表現フェーズ

分析者自身がデータを理解し終えて、読み手に向けてメッセージを伝えるフェーズ。
ここでは、本、記事、プレゼン、ネット記事などに適した形で出版できるレベルの、高品質なグラフが求められる。

#### 表現フェーズに適したツール

ここではいくつかの選択肢があり、それぞれに合理性がある。

1. データ探索に使ったツールをそのまま使ってグラフを仕上げる
1. データ探索には適さないツールでもいいので、より細かいレベルで調整ができるツールに切り替える
1. Photoshop や Illustrator のようなツールで、手作業の後処理をする
1. イラストレーションプログラムで、グラフを最初から描き直す

ただし、手作業での仕上げをデータパイプラインのルーティンや科学的出版物のために使うことに対しては警鐘を鳴らしたい。

-> 再現や反復が難しくなるから。
-> 自然科学の世界では、グラフを一度しか使わないということはめったにない。条件を少しずつ変えて、また実験をやり直すこともよくある。

グラフを仕上げたあとにもとの数字に修正が入ると、仕上げ作業を一からやり直す羽目になる場合もある。

また、そういう手間を避けるために（またはその手間をかける人がいなくなってしまうために）グラフを作り直さないという決断に至る場合もある。

いずれにしても、よりよい科学のありかたを妨げる。

#### とは言ったものの

著者的には、手描きのグラフは否定しないんだぜ！
デジタルグラフでは出せないメッセージを伝えられるからね。

![こういうやつ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/4c92693a-1827-0d8e-e119-8a5cf44f3db7.png)
⬆️こういうやつ

:::note
ちょっとびっくり。
:::

## 28.3 コンテンツ（中身）とデザインの分離

良い可視化のツールは、コンテンツ（グラフの中身）とデザインを分けて考えさせてくれます。

- コンテンツ（グラフの中身）とは
    - 可視化のもととなるデータ
    - プロットのしかた
    - グラフの種類
    - スケール
    - 軸の範囲
- デザインとは
    - 線や背景の色
    - フォントの種類やサイズ
    - シンボルの形やサイズ
    - 凡例、軸ラベル、タイトルの位置
    - 背景のグリッドをつけるか否か

著者の手順では、まず最初にグラフのコンテンツを作り、あとからデザインを作るか、定義済みのデザインを当てはめる。

本書で利用している可視化ツールである ggplot2 では、テーマによってコンテンツとデザインの分離ができる。

:::note
ついにツール名が出た！
ずっと Seaborn だと思っていたけど、そうか、おめー ggplot2 だったのか…
:::


テーマはグラフの見た目を定義するもので、既存のグラフのテーマを他のグラフに当てはめることが簡単にできる。
Rのパッケージとして配布されている、サードパーティーが作ったテーマを活用することもできる。

ggplot2 ではそういったテーマが充実しているので、既存のテーマを探せばだいたい自分の需要を満たすものが見つかる。

### デザイナーと分析者の役割分担

コンテンツとデザインの分離により、コンテンツとデザインを作る人がそれぞれの仕事に専念できる。
分析者はデザイナーではないので、基本的にはコンテンツに集中したい。

紙の出版の世界では、デザイナーと本の著者の役割分担は一般的に行われていて、本の著者は本文中のグラフの中身は作るが、デザインを作るわけではない。

コンテンツ作者とデザイナーの役割分担は、理にかなっているし役に立つけれども、データ可視化の世界ではまだそんなに広がっていない。

:::note
そうなのか。時間の問題ではないのかな。
:::

## 著者による要約

可視化ソフトを選ぶときは、以下を考慮するとよいです。

- 更新・変更されたデータを使って、グラフの再作成がどのくらい簡単にできるか
- グラフの中身とは別に、どの程度デザインを自分で調整したいか

スキルレベルや、プログラミングの習熟度によっては、探索フェーズと表現フェーズで違うツールを選ぶのがよい場合もあるでしょう。

操作を追跡できない対話型のツールを使うときは、どうやってグラフを作ったかを慎重に記録しておき、あとから再現できるようにしておくとよいでしょう。

:::note warn
それをやりたくないからコードで可視化してるんじゃないかー！
:::

# さいごに

要約は以上です。

これを読んで、読書会に参加したくなった方はこちら👇まで！

https://gaisaba.connpass.com/event/