Googleデータアナリティックスプロフェッショナルを通したR言語の学習が完了しました。今回は、学習の途上で作成したtidyverse, ggplot2を用いたデータ可視化について纏めてみることにしました。
R言語でデータ可視化
R言語ではデータの可視化には標準的にggplot2を使いますが、他にも可視化に役立つパッケージが多く配布されています。
- ggplot2
- plotly
- lattice
- RGL
- Dygraphs
- Leaflet
- Highcharter
- Patchwork
- gganimate
- ggridges
ggplot2の用例集には、公式サイトのGalleryをチェックするのが便利です。
https://exts.ggplot2.tidyverse.org/gallery/
ggplot2の機能一覧
ggplot2を使えば棒グラフ・折れ線グラフ、散布図等々のプロットを描けるほか、プロットの内容をカスタマイズしラベル・軸などを操作することができます。また、パイプ演算子を使うことでデータ操作と可視化を同時に進行することができます。
- Aesthetics - オブジェクトの視覚的特性
- Geom - データを表現するのに用いる幾何学的なオブジェクト
- Facets - データの小グループ・サブセットごとにデータを表示する
- Labels and annotations - プロットの内容を記述する
今回はデータの分析の例題として著名な、アデリーペンギンの生態を研究したデータを用います。このデータはCRANに登録されているため、install.packages()を通してインストールすることができます。
データ分析の準備
データ分析の準備として、まず分析にかけるデータ・分析に使うパッケージをインポートします。データがインポートできたら、まず以下の作業を行うようにしてます。
- データを要約(skim_without_charts)
- データのラベル名を表示(colname)
- データの要約統計量・度数を算出(summary)
- データの先頭5行を表示(head)
- データをペインに表示(view)
library(tidyverse)
library(ggplot2)
library(palmerpenguins)
library(skimr)
library(ggExtra)
library(ggdensity)
#データの要約、データの要約統計量、先頭5行、データをペインに表示
skim_without_charts(penguins)
colname(penguins)
summary(penguins)
head(penguins)
view(penguins)
注釈を表示
annotateを使うと注釈を図に表示することができます。注目するべき分布などをプレゼン時に強調したい時に使えます。
#散布図を描く
ggplot(data=penguins) +
geom_point(mapping=aes(x=flipper_length_mm, y=body_mass_g, color = species))+
annotate("text", x=220, y=3500, label="・The Gentoos are the largest.", fontface="bold", angle=25)
散布図・等高線図
散布図を描いたグラフをより視覚的にわかりやすくするには、分布の割合を表した等高線図と合わせるのが効果的です。散布図自体は、定量データと定量データの相関・関係を表したい時に使えます。
#散布図に等高線を描く(別グラフ)
ggplot(penguins, aes(x=flipper_length_mm, y=body_mass_g)) +
stat_density2d(aes(alpha=..level.., fill=..level..), size=2, bins=10, geom="polygon") +
scale_fill_gradient(low = "yellow", high = "red") +
scale_alpha(range = c(0.00, 0.8), guide = FALSE) +
geom_density2d(colour="black", bins=10) +
geom_point(aes(shape=species, color=species), alpha=0.5, size=1) +
facet_wrap(~species)
#散布図に等高線を描く(同グラフ)
ggplot(penguins, aes(x=flipper_length_mm, y=body_mass_g)) +
stat_density2d(aes(color=species, fill=species), geom="polygon", bins=10, alpha=0.1) +
geom_point(aes(shape=species, color=species), alpha=0.5, size=1)
#散布図に等高線を描く(同グラフ、分布の度数を表す割合を表示する)
install.packages("ggdensity")
library(ggdensity)
ggplot(penguins, aes(x=flipper_length_mm, y=body_mass_g, fill = species)) +
geom_hdr() +
geom_point(shape = 21)
プロットサイズを使った可視化
#x=羽の長さ、y=くちばしの長さ、プロットサイズで体重を表す
#プロットの形を変更することで3次以上のデータを表現できる
ggplot(penguins, aes(flipper_length_mm, bill_length_mm, size = body_mass_g, fill = species)) +
geom_point(shape = 21)
#グリッドごとに性別・種別ごとのデータを表示
ggplot(penguins, aes(flipper_length_mm, bill_length_mm, size = body_mass_g, fill = species)) +
geom_point(shape = 21) +
facet_grid(sex~species)
平滑化曲線・近似曲線を使った可視化
#平滑化曲線 - 平滑化・重回帰分析をした結果得られた係数をもとに近似曲線を描く。levelでは信頼水準の範囲を描写できる
#メソッド:lm-単回帰、gam-重回帰、loess-平滑化
ggplot(data=penguins, aes(flipper_length_mm, bill_length_mm)) +
geom_point(color = "red", alpha=0.5) +
geom_smooth(level=0.9, method="loess")
#ペンギンの種類ごとに異なる近似曲線を描く
ggplot(data=penguins, aes(flipper_length_mm, bill_length_mm, linetype=species)) +
geom_point(color = "red", alpha=0.5) +
geom_smooth(level=0.9, method="gam")
棒グラフを使った可視化
#棒グラフで可視化する。定性データの度数・割合を可視化するのに使う
ggplot(data=penguins) +
geom_bar(aes(x=species, fill=sex), position="dodge")
マージナルヒストグラムを使った可視化
マージナルヒストグラムを表示します。カテゴリー・軸ごとにどれ位値が分布しているかを可視化できます。分布の形状や、平均値などの値に有意差があるかを表したい時に使えます。
library(ggExtra)
library(ggdensity)
mh_penguin <- ggplot(penguins, aes(flipper_length_mm, bill_length_mm, colour=species, fill=species)) +
geom_point() +
geom_hdr_lines(xlim = c(100, 300), ylim = c(0, 100))
ggMarginal(mh_penguin, groupColour = TRUE, groupFill = TRUE)