医療統計学・医療情報学・遠隔医療 · 03
データの可視化
Data Visualization
🧠 図は数字の飾りではない。要約統計量summary statistics 要約統計量(summary statistics)summary statistics(要約統計量) は分布の形を隠すので、「圧縮compaction 圧縮(compaction)compaction(圧縮) する前に形を見る」ための唯一の手段が図である。だから作図は解析の最後ではなく、解析の最初にある。図を描かずに得た p値は、どんなに小さくても信用してはいけない。
図の選び方
必要な図は、変数variables 変数(variables)variables(変数) の個数と尺度でほぼ決まる。
flowchart TD
A["<span class='jp-term jp-term-diagram' title='variables'>変数</span>はいくつか"] --> B["1<span class='jp-term jp-term-diagram' title='variables'>変数</span>"]
A --> C["2<span class='jp-term jp-term-diagram' title='variables'>変数</span>"]
B --> D["カテゴリカル<br>→ 棒グラフ<br>(度数 or <span class='jp-term jp-term-diagram' title='relative frequency'>相対度数</span>)"]
B --> E["数値<br>→ ヒストグラム<br>→ 箱ひげ図"]
C --> F["カテゴリカル × カテゴリカル<br>→ 分割表<br>→ 積み上げ棒・<span class='jp-term jp-term-diagram' title='mosaic plot'>モザイク図</span>"]
C --> G["カテゴリカル × 数値<br>→ 群別の箱ひげ図"]
C --> H["数値 × 数値<br>→ 散布図"]
💡 分析には解析的analytical解析的(analytical)analytical(解析的) な記述と図的graphical図的(graphical)graphical(図的) な記述の2通りがあり、前者は表と数字、後者は図である。両方を作るのが原則で、片方だけでは足りない。表は正確だが形が読めず、図は形が読めるが値が読めない。
カテゴリカル変数:棒グラフ
名義・順序変数 variables 変数(variables) variables(変数) の度数分布 frequency distribution 度数分布(frequency distribution) frequency distribution(度数分布) は棒グラフで示す。度数分布frequency distribution 度数分布(frequency distribution)frequency distribution(度数分布) そのもの——つまりばらつきの姿——を最もよく表す図である。
- 縦軸は絶対度数 absolute frequency 絶対度数(absolute frequency) absolute frequency(絶対度数) でも相対度数 relative frequency 相対度数(relative frequency) relative frequency(相対度数) (%)でもよい。群の大きさが違う複数群を比べるなら相対度数 relative frequency 相対度数(relative frequency) relative frequency(相対度数) にする
- 順序変数 variables 変数(variables) variables(変数) なら、横軸はその自然な順序で並べる。名義変数 variables 変数(variables) variables(変数) なら度数の大きい順か、慣行の順に並べる
- 図から最頻値 mode 最頻値(mode) mode(最頻値) がひと目で読め、さらに 最頻値mode 最頻値(mode)mode(最頻値) がどれくらい「代表として妥当か」も読める。A型42%・O型40%のように上位 upper 上位(upper) upper(上位) 2つが拮抗していれば、最頻値mode 最頻値(mode)mode(最頻値) だけを報告するのは誤解を招く
⚠️ 円グラフ、とくに立体(3D)の円グラフは避ける。 人間は角度の比較が苦手であり、立体化すると手前の扇形が遠近法で拡大されて、面積の比が実際の比と一致しなくなる。カテゴリの大小を伝えたいなら棒グラフのほうが確実である。
2つのカテゴリカル変数
| 表現 | 内容 |
|---|---|
| 分割表contingency table分割表(contingency table)contingency table(分割表) | 行と列にカテゴリを取り、セルに度数を入れる。解析的な記述の基本形 |
| 積み上げ棒グラフ | 一方の変数 variables 変数(variables) variables(変数) を棒に、他方を棒の内訳に取る。割合の比較に向く |
| モザイク図mosaic plotモザイク図(mosaic plot)mosaic plot(モザイク図) | 積み上げ棒の棒の幅も度数に比例させたもの。面積がセル度数を表すので、周辺度数marginal frequency 周辺度数(marginal frequency)marginal frequency(周辺度数) と条件付き割合が同時に読める |
💡 モザイク図mosaic plot モザイク図(mosaic plot)mosaic plot(モザイク図) の利点は、行の合計人数 number of people 人数(number of people) number of people(人数) がまったく違う群を並べても誤解が生じない点にある。積み上げ棒(幅が一定)では「n = 20 の群」と「n = 2000 の群」が同じ大きさに描かれてしまう。分割表の解析は 比率の比較 で扱う。
数値変数:ヒストグラム
数値変数 variables 変数(variables) variables(変数) では値の種類が多すぎて、値ごとの度数を数えても 0 か 1 にしかならない。そこで階級bin階級(bin)bin(階級) を人工的に作って度数を数える。この図がヒストグラムである。
⚠️ 階級rank 階級(rank)rank(階級) を作った時点で情報は失われる。それでもヒストグラムを描くのは、分布の形(対称か、歪んでいるか、峰はいくつか、外れ値があるか) が他のどの手段よりも早く分かるからである。
階級幅をどう決めるか
| 観点 | 内容 |
|---|---|
| 統計的な基準 | データ数とばらつきから幅を決める公式 official 公式(official) official(公式) がある(Sturges の公式 official公式(official) official(公式)、Freedman–Diaconis の規則など)。統計ソフトの既定値はこれを使っており、通常は変更しないほうがよい |
| 見た目の基準 | 人間は 5・10・15… のような丸い数を好む |
| 物理的な下限 | 測定できる最小の差より細かい階級 rank 階級(rank) rank(階級) を作っても意味がない |
⚠️ 階級幅bin width 階級幅(bin width)bin width(階級幅) を変えるとヒストグラムの見え方は劇的に変わる。 幅を狭くしすぎると凸凹だらけになって形が読めず、広くしすぎると峰が1つに潰れて二峰性を見落とす。「思ったような形にならないから幅を変える」のは、無意識unconscious 無意識(unconscious)unconscious(無意識) のデータの細工である。幅を変えたなら、その旨と理由を書く。
💡 情報を失わずに数値変数 variables 変数(variables) variables(変数) の分布を描く方法もある——各値の累積度数 cumulative frequency 累積度数(cumulative frequency) cumulative frequency(累積度数) をそのまま描けばよい(経験累積分布関数empirical cumulative distribution function経験累積分布関数(empirical cumulative distribution function)empirical cumulative distribution function(経験累積分布関数))。ただし読み取りに慣れが要るため、入門段階ではヒストグラムを使う。
数値データに棒グラフを使わない
連続変数continuous variable 連続変数(continuous variable)continuous variable(連続変数) について「群ごとの平均を棒の高さにし、エラーバーを付ける」図は生物医学論文で非常に多いが、使うべきではない1。
| 問題 | 内容 |
|---|---|
| 分布の形が完全に消える | 平均と1つのばらつき指標しか描いていないので、正規分布Gaussian/normal distribution正規分布(Gaussian/normal distribution)Gaussian/normal distribution(正規分布)・二峰性分布・外れ値1個に引っ張られた分布が、すべて同じ棒になる1 |
| 棒が「0から連続している」と誤読 misreading 誤読(misreading) misreading(誤読) させる | 棒の面積は量を表す記号なので、原点から始まらない量(体温、pH、心拍数)に使うと意味が壊れる |
| エラーバーの正体が不明 | SD・SE・95% CI のどれかで幅が数倍違う。図の説明に書かれないことが多い |
| n が見えない | 3例の平均も300例の平均も同じ高さの棒になる |
⭐ 代わりに使うのは、個々のデータ点を描く図(ドットプロットdot plotドットプロット(dot plot)dot plot(ドットプロット)、ジッターjitter (single-fiber EMG) ジッター(jitter (single-fiber EMG))jitter (single-fiber EMG)(ジッター) 付き散布図) か、n が多ければ箱ひげ図である1。
⚠️ 軸の細工も同じ系統の問題である。y軸を0からではなく途中から始めれば、わずかな差を巨大な差に見せられる(「新薬でIQが上がった」という類の図がこれである)。軸の範囲・目盛り・エラーバーの定義の3つは、図を見たら必ず確認する。
箱ひげ図
数値変数 variables 変数(variables) variables(変数) の分布を、分位数quantile 分位数(quantile)quantile(分位数) だけで描く図である。
| 部分 | 表すもの |
|---|---|
| 箱の中の線(「目」) | 中央値(まれに平均のことがある。その場合は明記される) |
| 箱(「胴体」) | Q1 から Q3、つまり IQR。ここに中央の50%が入る |
| ひげ | 「Q1 − 1.5×IQR」以上・「Q3 + 1.5×IQR」以下に収まる実データの最小値と最大値 |
| ひげの外の点 | 外れ値として個別に描かれる |
⚠️ ひげの端は「最小値・最大値」ではなく「1.5×IQR の範囲内にある実データの最小・最大」である。ここを取り違えると範囲を読み違える。
外れ値の定義と扱い
外れ値(outlier)の作図上の定義は、次の2本の境界の外側に出た値である。
⚠️ これは「その値が誤りである」という意味ではない。 は慣習的な閾値にすぎず、正規分布Gaussian/normal distribution 正規分布(Gaussian/normal distribution)Gaussian/normal distribution(正規分布) からのデータでも約0.7%の点がこの外に出る。したがって n が大きければ外れ値が出るのは当然である。
⭐ 外れ値を見つけたときの正しい手順:
- その点の識別子(行番号) を確認する。図に表示される番号は値ではなく行番号なので、元のデータ表を引ける
- 元データに戻り、入力ミス・単位の間違い・記録の異常でないかを確かめる
- 誤りなら訂正する。誤りでないなら残す
- どうしても除外するなら、除外した事実と理由を報告し、除外した場合としない場合の両方の結果を示す
「外れ値だから消す」は、結論conclusion 結論(conclusion)conclusion(結論) を都合よく変える最も簡単な手段である。理由を書かない除外は改竄と区別がつかない。
💡 片側にだけ外れ値が並ぶのは、外れ値ではなく歪みの表れである。総コレステロールtotal cholesterol 総コレステロール(total cholesterol)total cholesterol(総コレステロール) や中性脂肪 triglyceride 中性脂肪(triglyceride) triglyceride(中性脂肪) のように右に長い裾をもつ変数 variables 変数(variables) variables(変数) では、上側に多数の点が出る。この場合に必要なのは点の除外ではなく、対数変換logarithmic transformation 対数変換(logarithmic transformation)logarithmic transformation(対数変換) か中央値・IQR での要約である(→ 確率と分布)。
群別の箱ひげ図
横軸に因子(カテゴリカル変数 variables変数(variables) variables(変数))、縦軸に数値変数 variables 変数(variables) variables(変数) を取ると、群間の分布を並べて比較できる。この図で見えるのは「差がありそうか」までで、差が偶然 chance 偶然(chance) chance(偶然) の範囲かどうかは別問題である(→ 仮説検定の論理)。
散布図
2つの数値変数 variables 変数(variables) variables(変数) の関係を見る基本の図である。横軸に説明変数 variables 変数(variables) variables(変数) (独立変数 variables変数(variables) variables(変数))、縦軸に目的変数 variables 変数(variables) variables(変数) (従属変数 variables変数(variables) variables(変数))を取る。
| 拡張 | 何が分かるか |
|---|---|
| 群分け(点の色・形を因子で変える) | 群ごとに関係が違うかどうか。群を混ぜると見かけの関係が逆転することがある(→ 交絡confounding 交絡(confounding)confounding(交絡) と重回帰 multiple regression重回帰(multiple regression) multiple regression(重回帰)) |
| 周辺箱ひげ図(軸の外側に置く) | 各変数 variables 変数(variables) variables(変数) の単独の分布。散布図だけでは各軸の歪みが見えない |
| 対数軸 | 右に歪んだ変数 variables 変数(variables) variables(変数) (コレステロール、中性脂肪triglyceride中性脂肪(triglyceride)triglyceride(中性脂肪)、酵素活性など)で有効。片側に偏っていた外れ値が対称に散らばるようになれば、その変数 variables 変数(variables) variables(変数) は対数正規分布 Gaussian/normal distribution 正規分布(Gaussian/normal distribution) Gaussian/normal distribution(正規分布) に近い |
💡 散布図で見るべきなのは相関係数 correlation coefficient 相関係数(correlation coefficient) correlation coefficient(相関係数) ではなく、関係の形である。直線的か、曲がっているか、群に分かれていないか、1点だけ極端に離れていないか——相関係数 correlation coefficient 相関係数(correlation coefficient) correlation coefficient(相関係数) はこれらをすべて1つの数に潰してしまう(→ 相関と線形回帰 linear regression線形回帰(linear regression) linear regression(線形回帰))。
パーセンタイル曲線
小児科で日常的 routine 日常的(routine) routine(日常的) に使う図で、年齢を横軸に、測定値を縦軸に取り、各年齢での分位数 quantile 分位数(quantile) quantile(分位数) を線で結んだものである2。身長・体重・頭囲head circumference頭囲(head circumference)head circumference(頭囲)・BMI で用いる。
読み方は分位数 quantile 分位数(quantile) quantile(分位数) の定義そのままである。「13歳女児の身長の25パーセンタイル曲線 percentile curve パーセンタイル曲線(percentile curve) percentile curve(パーセンタイル曲線) が151 cm を通る」とは、13歳女児の25%が身長151 cm未満という意味である。
💡 パーセンタイル曲線percentile curve パーセンタイル曲線(percentile curve)percentile curve(パーセンタイル曲線) は、実質的には「年齢ごとの IQR や 90%範囲」を連続的に描いたものである。平均 ± SD ではなく分位数 quantile 分位数(quantile) quantile(分位数) を使うのは、分布の形を仮定せずに済むからであり、成長データのように年齢とともに分布の広がりも歪みも変わる対象に適している。
⚠️ 個々の測定値が何パーセンタイル percentile パーセンタイル(percentile) percentile(パーセンタイル) かより、同じ子の推移がパーセンタイル曲線 percentile curve パーセンタイル曲線(percentile curve) percentile curve(パーセンタイル曲線) を横切って動くかのほうが臨床的に重要である。3パーセンタイル percentile パーセンタイル(percentile) percentile(パーセンタイル) の子がずっと3パーセンタイル percentile パーセンタイル(percentile) percentile(パーセンタイル) に沿って伸びていれば正常でありうるが、50から3へ落ちていれば異常である。1点だけを見る図ではない。
図を仕上げる
書き出し形式
| 形式 | 性質 |
|---|---|
| ビットマップ(.png、.jpg など) | 画素pixel 画素(pixel)pixel(画素) の集合。拡大すると劣化する。劣化は保存した時点で起きるので、後から .pdf に変換しても画質 image quality 画質(image quality) image quality(画質) は戻らない |
| ベクター(.pdf、.svg、.eps など) | 図形の記述。どこまで拡大しても劣化しない |
⭐ ベクター形式だけが無損失なので、多くの医学雑誌はこちらを要求する。例外は写真・顕微鏡像で、これは本質的にビットマップなので高解像度で提出する。
色
- ⚠️ 色だけで情報を伝えない。 男性の約8%・女性の約0.5%が色覚多様性 color vision diversity 色覚多様性(color vision diversity) color vision diversity(色覚多様性) をもつため、赤と緑の対比は一部の読者に区別できない。形・線種・ラベルを併用する
- 色覚多様性color vision diversity 色覚多様性(color vision diversity)color vision diversity(色覚多様性) に配慮した配色(カラーユニバーサルデザインのパレット)を使う3
- 白黒印刷でも読めるかを確認する
- 順序のある量には連続的な明度の変化を、順序のないカテゴリには色相hue 色相(hue)hue(色相) の違いを割り当てる
実際の作図
import pandas as pd, matplotlib.pyplot as plt
df = pd.read_csv("frmgham2.csv", na_values=["NA"])
df["TOTCHOL"].plot.hist(bins=30) # ヒストグラム
df.boxplot(column="AGE", by="CURSMOKE") # 群別の箱ひげ図
df.plot.scatter(x="DIABP", y="SYSBP", alpha=0.3) # 散布図(重なりは透明度で処理)
plt.show()
⚠️ n が大きい散布図では点が重なって密度が見えなくなる。透明度(alpha)を下げるか、六角ビン(hexbin)にする。
💡 図を読む順序
- 軸 — 何が横軸で何が縦軸か、単位は何か、0から始まっているか、対数軸ではないか
- n — 何個の観測から描かれた図か。エラーバー付きの図では特に確認する
- エラーバーの定義 — SD か SE か 95% CI か。書かれていなければその図からは何も読めない
- 分布の形 — 対称か、歪んでいるか、峰は1つか、離れた点はあるか
- 最後に群間の差 — ここまで確認して初めて、群の違いを見る意味が出る
まとめ
- 図は解析の最後ではなく最初にある。要約統計量summary statistics 要約統計量(summary statistics)summary statistics(要約統計量) は分布の形を隠すので、圧縮compaction 圧縮(compaction)compaction(圧縮) する前に形を見る
- 図の選択は変数variables 変数(variables)variables(変数) の個数 × 尺度でほぼ決まる
- カテゴリカル:棒グラフ。円グラフ(特に3D)は角度と遠近法で比が歪む
- 2つのカテゴリカル変数 variables 変数(variables) variables(変数) :分割表+積み上げ棒/モザイク図mosaic plotモザイク図(mosaic plot)mosaic plot(モザイク図)。モザイク図mosaic plot モザイク図(mosaic plot)mosaic plot(モザイク図) は群の大きさの違いも面積で表せる
- ヒストグラムは階級幅 bin width 階級幅(bin width) bin width(階級幅) で見え方が変わる。ソフトの既定値を根拠なく変えない
- 連続変数continuous variable 連続変数(continuous variable)continuous variable(連続変数) に「平均+エラーバー」の棒グラフを使わない。異なる分布が同じ図になる。個々の点か箱ひげ図を使う
- 箱ひげ図:中央値・IQR・1.5×IQR内の最大最小・外れ値。ひげの端は最大最小値ではない
- 外れ値の定義(1.5×IQR)は「誤りである」という意味ではない。行番号から元データに戻って確認し、除外するなら理由と両方の結果を示す
- 片側に偏った外れ値は歪みの表れ。対数軸・対数変換logarithmic transformation 対数変換(logarithmic transformation)logarithmic transformation(対数変換) で対称になるなら対数正規分布 Gaussian/normal distribution 正規分布(Gaussian/normal distribution) Gaussian/normal distribution(正規分布) を疑う
- 散布図では相関係数 correlation coefficient 相関係数(correlation coefficient) correlation coefficient(相関係数) ではなく関係の形を見る。群分け・周辺箱ひげ図・対数軸で情報が増える
- パーセンタイル曲線percentile curve パーセンタイル曲線(percentile curve)percentile curve(パーセンタイル曲線) は「年齢ごとの分位数 quantile分位数(quantile) quantile(分位数)」。1点の値より曲線を横切る推移が重要
- 図はベクター形式で書き出す。色だけで情報を伝えない
出典
- 1.Beyond Bar and Line Graphs: Time for a New Data Presentation Paradigm(PLOS Biology(著者 Tracey L. Weissgerber, Natasa M. Milic, Stacey J. Winham, Vesna D. Garovic)・2015)連続変数に棒グラフ(平均+エラーバー)を用いると、まったく異なる分布が同一の図になってしまうため、個々のデータ点を示す図に置き換えるべきであること閲覧 2026-08-17
- 2.WHO Child Growth Standards(World Health Organization・2006)小児の身長・体重・BMI のパーセンタイル曲線(成長基準)の国際標準閲覧 2026-08-17
- 3.Fundamentals of Data Visualization(O'Reilly Media(著者 Claus O. Wilke)・2019)不確実性の可視化と、色覚多様性に配慮した配色の選び方についての指針閲覧 2026-08-17