K_DM Book
用語集
対象者 標準
対象者別の入口 →

対象者の設定はこのブラウザの中にだけ保存されます。

言語 JA

散布図の基本形

入門

06.5.1

散布図の基本形

最終更新 2020-01-29 読了時間 2 分
まとめ
散布図は、1 件のデータが持つ 2 つの量を横軸と縦軸の座標にして 1 つの点で表し、点の集まりの形から「2 つの量は一緒に動くか」を読む図です。右上がりの細い帯なら強い正の相関、丸い雲なら相関なし、帯から離れた点が外れ値で、帯の細さが相関係数 \(r\) の大きさに対応します。この章では身長の平均 167 cm・標準偏差 8 の 120 人を乱数で作り、体重を「0.6 × 身長 + ノイズ」で与えて sns.scatterplot で描き、相関係数およそ 0.7 の帯がどう見えるかを確かめます。読み終えると、alpha で点の重なりに対処する方法と、軸の範囲で相関の見え方が変わる理由を説明できるようになります。

直感 #

クラス 40 人の「1 日の勉強時間」と「テストの点」を表にしても、関係はつかめません。横軸に勉強時間、縦軸に点数をとって 40 個の点を打つと、「右上がりに並んでいる」「1 人だけ勉強時間が長いのに点が低い」といった形が浮かび上がります。散布図がやっているのはこれだけで、表の 1 行を図の 1 点に置き換える操作です。点の帯が細く右上がりなら相関係数 \(r\) は 0.9 に近く、丸く広がるなら 0.2 程度、右下がりなら負になります。帯の向きが \(r\) の符号、帯の細さが \(r\) の絶対値として図に現れます。

何が起きているか(ステップで見る) #

コードを読む前に、この手法が図の上で何をしているかを追ってみましょう。「再生」を押すか、スライダーを動かすと 1 手順ずつ進みます。

見るポイント:r は「直線に沿う強さ」。曲線的な関係や外れ値があると、r だけでは関係を見誤る。

Python で描く #

次のコードは、身長 120 人分を平均 167・標準偏差 8 の正規乱数で作り、体重を身長の 0.6 倍にノイズと定数 30 を足して作ります。答えを知っているデータで sns.scatterplot を描き、右上がりの帯が出ることを確かめる構成です。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

rng = np.random.default_rng(42)
height = rng.normal(167, 8, size=120)
weight = 0.6 * height + rng.normal(0, 5, size=120) + 30

fig, ax = plt.subplots(figsize=(5.5, 4))
sns.scatterplot(x=height, y=weight, ax=ax, color="#2563eb", edgecolor="white")

ax.set_xlabel("身長(cm)")
ax.set_ylabel("体重(kg)")
ax.set_title("身長と体重の関係")
ax.grid(alpha=0.2)

fig.tight_layout()

plt.show()

seaborn.scatterplot を使うとスタイルを統一できますの図

実行結果の読み方 #

120 個の点は左下から右上へ伸びる帯になり、「身長が高い人ほど体重も重い」傾向が形として見えます。帯には幅があり、同じ身長 170 cm でも体重は 10 kg 以上の範囲に散らばります。これが相関係数およそ 0.7 の見え方で、1 本の直線にぴったり乗る 0.9 以上の帯とも、丸い雲になる 0.2 以下とも違います。帯の真ん中を目で追えば「身長が 10 cm 高いと体重はおよそ 6 kg 重い」というコードの 0.6 という係数が読み取れ、そこから離れた点があれば外れ値の候補です。

使いどころと落とし穴 #

基本の散布図が向くのは、2 つの連続変数の関係を分析の最初に素早く概観し、直線的か曲がっているか、外れ値があるかを目で確かめる場面です。点が 1 万を超えると重なって一面が塗りつぶされるので、alpha を 0.1〜0.3 に下げるか、hexbin や 2 次元 KDE のように密度を描く図へ切り替えます。落とし穴の 1 つ目は過密で、数千点を同じ透過率で描くと帯の中心の濃淡が消えて「どこに点が集中しているか」が読めません。2 つ目は軸スケールで、縦軸の範囲を極端に広げると帯は平たく見えて相関が弱く見え、狭めると急な帯に見えるため、見た目ではなく np.corrcoef(height, weight) の数値で相関の強さを確かめます。第 3 の変数も載せたいなら バブルチャート、傾きを直線として引きたいなら 回帰直線付き散布図 に進みます。