2 チュートリアル
2.1 早速手を動かす
まず、データ可視化用のパッケージであるggplot2を読み込んでみよう。パッケージはlibrary(パッケージ名)
で読み込むことができる。
library(ggplot2)
# ※シャープ記号より後ろに書かれている内容はただのコメントアウト(=注釈)
# コメントアウトなので何を書いても怒られない
# ハッシュタグではない
# 自分でコードを書くときはメモとして使うようにしよう
チュートリアル用のデータとして、Rにデフォルトで入っているmtcars
を使うことにする。mtcars
は自動車の燃費などに関するデータである(コンソールに?mtcars
と入力すると詳細なヘルプをみることができる)。では、str(データ)
で中身を確認してみよう。
str(mtcars) # 中身を確認
## 'data.frame': 32 obs. of 11 variables:
## $ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
## $ cyl : num 6 6 4 6 8 6 8 4 4 6 ...
## $ disp: num 160 160 108 258 360 ...
## $ hp : num 110 110 93 110 175 105 245 62 95 123 ...
## $ drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
## $ wt : num 2.62 2.88 2.32 3.21 3.44 ...
## $ qsec: num 16.5 17 18.6 19.4 17 ...
## $ vs : num 0 0 1 1 0 1 0 1 1 1 ...
## $ am : num 1 1 1 0 0 0 0 0 0 0 ...
## $ gear: num 4 4 4 3 3 3 3 4 4 4 ...
## $ carb: num 4 4 1 1 2 1 4 2 2 4 ...
11の変数(variable)と32の観測値(observation)が記録されている。32行×11列のスプレッドシートがあるのと同じ状態だと考えてほしい。head(データ)
で先頭6行のデータを確認してみよう。
head(mtcars) # 先頭6行を確認
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
変数は全部で11個あるが、まずは2つの変数に注目してみよう。その変数は、
disp
:エンジンの排気量(立方インチ)mpg
:燃費(マイル/ガロン)
である。
素朴に思いつくのは、「排気量と燃費の相関関係はどうなっているか?」というものだろう。排気量と燃費はそれぞれ連続変数(continuous variable:量的変数、quantitative variableとも言う)なので、ここは散布図を描くのが妥当そうである。
では、ggplot2における可視化を、手順を追って見ていこう。
1. x軸とy軸にどの変数を対応づけたいかを考える
ggplot2でデータを可視化する際、最初に書かなければいけない基本のコードはggplot(data = データ, aes(x = x軸の変数, y = y軸の変数))
である。
ggplot(data = mtcars, aes(x = disp, y = mpg))
しかし、灰色の背景があるだけでデータはプロットされない。なぜなら、どのようなデザイン2でデータをプロットするかを指示していないからである。つまり、これだけではまだ足りない。
2. どのようなデザインでプロットしたいかを指示する
データをどのようなデザイン(geometry)でプロットしたいかを、geom_xxxx()
で指定しなければならない。今回は散布図(データを点としてプロット)なので、geom_point()
というコードを使う。
先程のコードに「+」でコードをつなげていくことでプロットできるようになる。
ggplot(data = mtcars, aes(x = disp, y = mpg)) + # コードを読みやすくするため、「+」のところで改行すると良い
geom_point() # データを点(point)としてデザインするためのコードを追加
完成。基本はこれだけである。
なお、ほとんどのグラフはx軸とy軸から構成されるので、実はコードの中に一々x = disp
やy = mpg
と書く必要はない。また、データについても自明なので、data = mtcars
と書く必要もない。つまり、上のコードは下のように書くこともできる(これ以降、data, x, yは省略する)。
ggplot(mtcars, aes(disp, mpg)) +
geom_point()
3. 変数を色(や形状)に対応づける
もちろん上の図ができた時点でOKだが、これだけではどうも味気ない。では、ここで一歩進んで、もう1つ変数を加えてみよう。その変数とは、
cyl
:シリンダーの個数(4, 6, or 8)
である。このとき「シリンダーの個数によって、排気量と燃費の関係は違うのではないか?」ということが思いつく。
それでは、cyl
によって点の色を変えてみよう。以下のコードを書けばOKである。
ggplot(mtcars, aes(disp, mpg, color = cyl)) + # color = cyl を追加
geom_point()
aes()
にcolor = cyl
を追加することで、cyl
を色に対応づけることができた。
しかし、このグラフは厳密には間違っている。どこが間違っているのだろうか? 少し考えてみてほしい。
答え
図の右側の青いバー(凡例;legend)を見ると、その横にシリンダーの個数が連続変数として1刻みで描かれれている(4,5,6,7,8)。しかし、実際のデータには4,6,8という3種類の値しかない。もちろん個数は連続的なものだが、この場合は離散変数(discrete variable;質的変数、qualitative/categorical/factor variableとも言う)として扱ったほうがデータの表現として妥当だし、見やすくなるだろう3。
この場合、cyl
をfactor()
でくくると解決する。
ggplot(mtcars, aes(disp, mpg, color = factor(cyl))) + # factor(cyl)に変更
geom_point()
Rでは、factor(変数)
とすることで、その変数を離散変数として扱うことができるようになる。その結果、凡例の表示も妥当なものとなった。
2.2 まとめ
このように、ggplot2を使うと、数行のコードでそれなりに見栄えの良い図が描けるようになる。
手順をもう一度おさらいしよう。
1. x軸とy軸にどの変数を対応づけたいかを考える
何(y軸)を何(x軸)に応じてプロットしたいかを考えるのが可視化の第一歩である。
これが思いつけば可視化は大体うまくいったようなものである。
2. どのようなデザインでプロットしたいかを指示する
データの性質(特に離散変数か連続変数か)に応じてデザインを決める。
たとえば「x軸が連続変数でy軸が連続変数なら散布図」というように決める。こういうのは大体コンセンサスが取れている4ので、以降の章でそれを学んでいってほしい。
今回は散布図しか描かなかったが、たとえば散布図の上に回帰直線を重ね書きする、というように、複数の表現を組み合わせてプロットすることも可能である。これは追々見ていくことにする。
3. 変数を色(や形状)に対応づける
x軸、y軸以外に追加したい変数がある場合は、色などに対応づける。
まずは基本のプロットができるようになることを目指すので、細かい色の調整方法などは後の方で少しだけ解説する。
下に載せているのはあくまでごく一部だが、ggplot2では以下のデザイン(geom_xxxx()
)を使うことが多い。
geom | デザイン |
---|---|
geom_bar() | 棒グラフ |
geom_line() | 折れ線グラフ |
geom_point() | 散布図、点 |
geom_errorbar() | エラーバー |
geom_pointrange() | 点+線 |
geom_histogram() | ヒストグラム |
geom_density() | 密度曲線 |
geom_boxplot() | 箱ひげ図 |
geom_violin() | バイオリンプロット |
geom_area() | 面グラフ |
geom_smooth() | 関数のフィッティング |
geom_text() | テキスト |
これもまたごく一部だが、変数はx
、y
、color
だけでなく、以下の要素(aes()
)にも対応づけることができる。
aes() | 要素 |
---|---|
x | x軸 |
y | y軸 |
color | 枠の色 |
fill | 塗りつぶしの色 |
linetype | 線の形 |
size | 線の太さ、点の大きさ |
shape | 点の形 |
以降の章では、よく用いる可視化のパターンについて見ていくことにする。