ggplot2 を使ったデータの視覚化
これまでに、データ処理の流れを一通り解説しましたので、続いて、データの視覚化について解説したいと思います。
データを解析する際に必須となるのが、「データの視覚化」です。特に、大きなデータの場合、数値データとして読み込んだだけでは、データの概略も分かりませんし、その先の解析をイメージすることが難しいです。場合によっては、正常に読み込まれたかどうかさえ、確認できないかもしれません。そのためにも、散布図やボックスプロットなどを作成して、データを確認する必要があります。
R では tidyverse パッケージに含まれている ggplot2 を用いて、散布図や、ボックスプロット、グラフの作成など、データを視覚化することができます。(機械学習などで人気の python にも、やはり、matplotlib という視覚化をサポートする強力なライブラリがあります。)
まず、 ggplot2 の基本的な使い方について解説します。
ggplot2 でヒストグラムを作成
ヒストグラムの作成を例に、実際に ggplot2 を使ったコードを紹介します。とりあえず、データは、Sample1 として、R の関数でランダムな数値を100個生成して使用します。rnorm(100) とすると、0を中心に正規分布した数値を発生させることができます。(引数を変更すると、1000個でも、1,000,000個でも生成できます。)
> # 適当なデータを100個生成
> input_data <- tibble("Sample1" = rnorm(100))
>
> input_data
# A tibble: 100 × 1
Sample1
<dbl>
1 -0.0289
2 -0.103
3 0.490
4 -0.722
5 1.97
6 -0.814
7 -0.615
8 0.854
9 1.56
10 -1.06
# … with 90 more rows
# ℹ Use `print(n = ...)` to see more rows
ggplot2 でヒストグラムを作成するには、下記のように書きます。大きく2つのパートから構成されています。1つめの ggplot() は、「どのデータを使用するか」を定義します。2つめの geom_histogram() が、「どのように視覚化するか」です。
> ggplot(input_data, aes(Sample1)) + geom_histogram(bins = 20)
ggplot()に使用するデータを指定
まず、 ggplot() 関数に「使用するデータ全体」と、「どの列を使用するか」を引数として渡します。この場合(= ggplot(input_data, aes(Sample1)))、
「使用するデータ全体」は、 input_data です。使用しない列が含まれていても問題ありません。
「どの列を使用するか」は、Sample1 です。これを aes() で囲んで渡します。少々、この aes の部分が難しいのですが、使っていくうちに慣れてくるかと思います。(aes は、 aesthetic mappings という意味だそうです。美しくマップ するということらしいのですが。)
geom_histogram() でヒストグラムを作成
ggplot() 関数に + で続ける形で、 geom_histogram() 関数を指定します。この geom_*関数は、視覚化の方法によって異なります。今回は、ヒストグラムなので、 geom_histogram() ですが、ほかにも存在します。
散布図など、単純なプロット図には、 geom_point() を使います。ドットプロットには、 geom_dotplot() がありますし、ボックスプロットには、 geom_boxplot() 、バイオリンプロットには、 geom_violin() を使います。その他の関数は、チートシートを参照してください。
geom_histogram() の引数 bins = 20 は、20個のビンに分けるという意味です。実行すると、新たにウィンドウが開いて、下記のようなヒストグラムが表示されます。
ggsave() で画像を保存(dev.offはもう要らない)
表示させたヒストグラムは、 ggsave() 関数で保存できます。引数には、ファイル名を指定します。
ggsave("histogram_sample1.png")
出力形式は、ファイル名の拡張子から自動で判別されます。上記は、".png" としているので、 PNG 形式で保存されます。PDF形式で保存したい場合は、 ggsave("histogram_sample1.pdf") と拡張子を ".pdf" にするだけでよいです。
クラシックな書き方だと、png() 関数でデバイスを指定して、プロットして、dev.off() で閉じるなど面倒でしたが、 ggplot2 では、 ggsave() だけでOKです。
この記事が気に入ったらサポートをしてみませんか?