タグ:R

第1章ではRの基本的な操作について紹介しています。

Rではデータフレームを作ると以下のような形になっています。

スクリーンショット 2019-07-16 23.23.30

「身長」の列には男性も女性も含まれています。

このとき男性だけのデータ、女性だけのデータを取り出したいときもあります。

今回は特定の条件にあう要素を抜き出す方法を紹介します。


1.データの準備

以下のコードを全てコピー
→Rstudioのスクリプト画面に貼り付け
→全て選択してRun(cntrもしくはcommand + Enter)


url <- "https://github.com/mitti1210/myblog/blob/master/data01.csv?raw=true"
dat <- read.csv(url)
head(dat)

datという変数名で上記のデータフレームが完成します。
(全て架空のデータです)


2. [ ]を使う

今回は特定の条件にあう要素を抜き出すには[ ]を使います。
【1-9】医療統計をRで使うために必要な「データフレーム」にの考え方ついてでは$の代わりに[[ ]]を使うと解説しましたが、今回は[[ ]]ではなく[ ]です。



男性の氏名を抜き出すのは下のコードになります。

データフレーム$表示したい列[条件]

dat$氏名[性別 == "男性"]

スクリーンショット 2019-07-16 23.36.30



ここで新たな ==  が出てきました。

条件に関しては基本的には以下の条件式を使います。

スクリーンショット 2019-02-11 2.04.40
A == Bと A %in% Bは似ていますが、Bにあたる部分で==であれば1つしか入りません。
%in%は1つでも複数でも大丈夫です。その際はdat$氏名[性別 %in% c("男性","女性")]のようにc関数を使います。


条件は複数でも可能です。

身長175cmの男性であれば以下のようになります
dat$氏名[性別 == "男性" & 身長 >= 175]
スクリーンショット 2019-07-16 23.52.17



3. filter関数を使う

Rにはデータフレームを扱うのに非常に便利なtidyverse(タイディーバース)パッケージというものがあります。今からRを勉強するのであればtidyverseから勉強したほうがわかりやすく実用的です。

このサイトでも2章・3章でtidyverseパッケージを使ったデータ処理・グラフ作成を紹介しています。
データフレームから特定の行だけを抜き出す関数がfilter関数になりますが、【2-4】Rで指定した列や行だけを取り出すselect関数、slice関数、filter関数を紹介しますで詳しく説明しています。





4.まとめ

今回は特定の条件にあう要素を抜き出す方法について紹介しました。
Rを使っていくとtidyverseパッケージで完結することが多いですが、[ ]は検定や機械学習で訓練モデルとテストモデルに分けるときなどにも使いますので両方使えると便利です。

第3章ではggplot2を使ったグラフの作り方を紹介しています。


【3-1】ExcelにはないRでグラフを作るメリットと特徴

【3-2】ggplot2でグラフを作る流れを説明します

【3-3】Rのggplot2で散布図を作るgeom_point関数

【3-4】Rのggplot2でヒストグラムを作るgeom_histogram関数

今回は密度曲線を紹介します。

密度曲線は馴染みがないヒストグラムと同じくデータの分布を知るのに有効です。
自分は分布の見やすさや相手の提示のしやすさでいうとヒストグラムより好きです。

1.データの読み込み

今回もggplotパッケージが含まれているtidyverseパッケージを読み込みます。
#tidyverseパッケージを読み込みます。

if(!require(tidyverse)) install.packages("tidyverse", repos = "http://cran.us.r-project.org")

#既にtidyverseパッケージをインストールしている方は以下でもOK

library(tidyverse)

#データ取り込みます。今回はdatという変数にデータを入れます

url <- "https://github.com/mitti1210/myblog/blob/master/heights.csv?raw=true"
dat <- read.csv(url)

このデータはヒストグラムを作る時に作ったデータと同じものを使用しています。



2.密度曲線とは?


山(モード)を知るのに便利


下のグラフは正規分布のような形ではなく山が2個あります。

この山のことを「モード」といい、もしかしたら2つ以上の別の集団が潜んでいるのでは?と考えるヒントをくれます。

スクリーンショット 2019-07-14 22.21.16


ちなみにこの密度曲線を男女で色分けすると下のようになります。

スクリーンショット 2019-07-14 22.21.25
なにもかも「正規分布かどうか!?」だけではなく、純粋にどんな分布になっているかをみることも大切だと思います。


面積が1になる

密度曲線は基本面積が1になります。

スクリーンショット 2019-07-14 22.20.21



棒グラフ・ヒストグラム・密度曲線

棒グラフは棒の長さが平均を示す以外情報を持っていません。
ヒストグラムや密度曲線は棒グラフよりも男性と女性の傾向が把握できます。
個人的には密度曲線の方が見やすく感じます。

スクリーンショット 2019-07-14 22.30.45

3.密度曲線の基本的な作り方

ggplot2でヒストグラムを作る時にはgeom_density関数を使います。
ggplot()+
  theme_gray(base_family = "HiraKakuPro-W3")+
  geom_density(aes(x = 身長), data = dat)
スクリーンショット 2019-07-14 22.22.56
スクリーンショット 2019-07-14 22.20.10


ヒストグラムを作るgeom_histogram関数はbinの幅を決めるbins(binwidth)がありますが、geom_densityにもbw = ○○で先の滑らかさを設定する項目があります。bwの数値が増えるとなめらかになるのがわかります。

スクリーンショット 2019-07-14 22.21.47

このbw=○○はgeom_histogramのbinwidth=○○に対応しています。

スクリーンショット 2019-07-14 22.21.53

設定を変えながらちょうどいい数値を見つけてみてください。


4.先の色を変える

線の色を変えるにはcolor = "○○"を使います。

ggplot()+
  theme_gray(base_family = "HiraKakuPro-W3")+
  geom_density(aes(x = 身長), color = "red", data = dat)

スクリーンショット 2019-07-14 22.20.30



5.線の中の入りを塗る

色を塗るにはfill = "○○"を使います。
ggplot()+
  theme_gray(base_family = "HiraKakuPro-W3")+
  geom_density(aes(x = 身長), fill = "red", data = dat)
スクリーンショット 2019-07-14 22.20.39

色を透過させるにはalpha = 0~1の数値をつかいます。
ggplot()+
  theme_gray(base_family = "HiraKakuPro-W3")+
  geom_density(aes(x = 身長), fill = "red", alpha = 0.5, data = dat)
スクリーンショット 2019-07-14 22.20.46

6.グループ毎に色を変える

グループ毎に色を変える場合はaes関数の中にfill = グループを入れます。
上のグラフとfill = ○○の位置が違うことに注目してください。
ggplot()+
  theme_gray(base_family = "HiraKakuPro-W3")+
  geom_density(aes(x = 身長, fill = 性別), alpha = 0.5,  data = dat)
スクリーンショット 2019-07-14 22.20.54


そしてgeom_density関数の特徴なのですが、グループを分けるとそれぞれの面積が1となります。このグラフは女性70人、男性130人で女性の方が少ないのですが、面積はどちらも1なので面積比が人数比と一致していません。

分布をみるにはこれで問題ないのですが、もし面積=人数比にしたい場合はもう1つ処理を加えます。

aes関数の中に y = ..count.. を入れます。そうすることで集計方法が変わります。countの前後に2個ピリオドを入れます。

ggplot()+
  theme_gray(base_family = "HiraKakuPro-W3")+
  geom_density(aes(x = 身長, y = ..count..,  fill = 性別), alpha = 0.5,  data = dat)
スクリーンショット 2019-07-14 22.21.01

縦軸がcount(個数)となりヒストグラムと同じ集計方法になります。


8.応用(密度曲線とヒストグラムを重ねる)

密度曲線とヒストグラムを重ねることができます。
以下のサイトを参考にさせていただきました。

データのhistogramと確率密度関数を同時に描きたい


ポイントは2つあります

①ヒストグラムにy = ..density.. を使う
②geom_histgramのbinwidthとgeom_densityのbwを同じ数字にする

ggplot()+
  theme_gray(base_family = "HiraKakuPro-W3")+
  geom_histogram(aes(x = 身長, y = ..density.., fill = 性別), position = "nudge", alpha = 0.5, binwidth = 2, data = dat)+
  geom_density(aes(x = 身長, fill = 性別), alpha = 0.5, bw = 2 , data = dat)

スクリーンショット 2019-07-15 0.37.32


9.応用編(グループ毎に別のグラフにする)


facet_gridを使うことでグループ毎にグラフを作ることができます。
facet_grid(縦 ~ 横)という表記をします。

facet_gridについて詳しく知りたい時は【3-4】Rのggplot2でヒストグラムを作るgeom_histogram関数もご参照ください。

ggplot()+
theme_gray(base_family = "HiraKakuPro-W3")+ geom_density(aes(x = 身長, y = ..count.., fill = 性別), alpha = 0.5, data = dat)+
facet_grid(性別 ~ .)

スクリーンショット 2019-07-15 0.57.03



10.まとめ

今回は密度曲線について紹介しました。
密度曲線は棒グラフや箱ひげ図ではわからない分布を見ることができますので、いきなり平均や標準偏差の数値だけで判断するのではなく分布をみる習慣をつけてみてください。


11.参考

Introduction to Data Science

データのhistogramと確率密度関数を同時に描きたい





第3章ではggplot2を使ったグラフの作り方を紹介しています。


【3-1】ExcelにはないRでグラフを作るメリットと特徴

【3-2】ggplot2でグラフを作る流れを説明します

【3-3】Rのggplot2で散布図を作るgeom_point関数


今回はヒストグラムを紹介します。


1.データの読み込み

今回もggplotパッケージが含まれているtidyverseパッケージを読み込みます。
#tidyverseパッケージを読み込みます。

if(!require(tidyverse)) install.packages("tidyverse", repos = "http://cran.us.r-project.org")

#既にtidyverseパッケージをインストールしている方は以下でもOK

library(tidyverse)

#データ取り込みます。今回はdatという変数にデータを入れます

url <- "https://github.com/mitti1210/myblog/blob/master/heights.csv?raw=true"
dat <- read.csv(url)




2.ヒストグラムとは?

ヒストグラムはデータの分布を確認することができます。

スクリーンショット 2019-07-12 15.00.10
まず1本1本の縦棒のことを"bin"といいます。
これをみると身長140台〜190台の分布で、170cm付近が一番多そうです。
ただ170cmを中心にすると左右対称ではない印象を受けます。



ヒストグラムを見ることでわかることの例

分布がどうなっているか?

分布には正規分布やポワソン分布など様々な分布があります
正規分布かどうかを確認するときにはヒストグラムで直接データを確認することが必要です。
他にも対数正規分布やポワソン分布など色々な分布があります。


外れ値がないか?

とんでもないところにデータがあれば、それが偶然飛び抜けたデータなのか入力ミスなのか確認することをおすすめします。

カテゴリーごとの分布がわかる

もし山が2つある分布だったとします。
その場合、もしかしたら2つ以上の別のグループが潜んでいるかもしれません。
各グループに分けるとそれぞれのグループで正規分布になっているかもしれません。

また各グループごとの比較をするときにも使えます。
下は同じデータですが棒グラフとヒストグラム、どちらが見やすいでしょうか?

スクリーンショット 2019-07-12 15.57.34




2.ヒストグラムの基本的な作り方

ggplot2でヒストグラムを作る時にはgeom_histogram関数を使います。
ggplot()+
theme_gray(base_family = "HiraKakuPro-W3")+
geom_histogram(aes(x = 身長), bins = 30, data = dat)


スクリーンショット 2019-07-12 17.55.09

ヒストグラムのy軸は個数なので指定の必要がありません。

3.bins, binwidthについて

ヒストグラムはbin1つの幅を指定する必要があります。
幅を変えると見え方が変わります。

bins = binの数を指定する
binwidth = binの幅を指定する

何も指定しないと自動的にbins = 30としてグラフを作ります。


スクリーンショット 2019-07-12 14.58.43
binsの数を減らすと1つの幅が広くなることがわかります。


スクリーンショット 2019-07-12 14.58.48
binwidthを増やすと1本の幅が広くなっているのがわかります。

どのbins(またはbinwidth)がいいかは数字を変えグラフをみて傾向を探りながら見つけてみてください。


4.線の色を赤にする

ggplot()+
theme_gray(base_family = "HiraKakuPro-W3")+
geom_histogram(aes(x = 身長), color = "red", bins = 30, data = dat)

binの周りの線の色を変えるにはcolor="○○"で指定します。
代表的な色なら"red"などが使えますが、color = "#FFFFFF"のような指定もできます。


スクリーンショット 2019-07-12 14.58.26


5.binの色を赤にする

binの中の色を変えるにはfillを使います。

ggplot()+
theme_gray(base_family = "HiraKakuPro-W3")+
geom_histogram(aes(x = 身長), fill = "red", bins = 30, data = dat)
スクリーンショット 2019-07-12 14.58.30

6.alpha = ○○でfillの色を薄くする

ここで周りの線の色を黒にした上で、fillの色を薄くします。
色を薄くするときはalpha = ○○で色を薄くすることができます。
alphaは0〜1の値を入力します。

ggplot()+
theme_gray(base_family = "HiraKakuPro-W3")+
geom_histogram(aes(x = 身長), color = "black", fill = "red", alpha = 0.5, bins = 30, data = dat)

スクリーンショット 2019-07-12 14.59.10



7.グループごとで色分けする

グループごとに色分けするときはaes()の中にfill = グループの列名を入れます。

aes関数に関しては前回の記事のでも説明していますので気になる方はをご参照ください。

fillでグループ分けするときはpositionを指定する必要があります。

①position = "stack" 重ねずに積み上げる
ggplot()+
  theme_gray(base_family = "HiraKakuPro-W3")+
  geom_histogram(aes(x = 身長, fill = 性別), bins = 30, position = "stack", alpha = 0.7,  data = dat)

②position = "nudge" 色を重ねる
色を重ねるときはalpha = で透過率を上げる必要があります。
ggplot()+
  theme_gray(base_family = "HiraKakuPro-W3")+
  geom_histogram(aes(x = 身長, fill = 性別), bins = 30, position = "nudge", alpha = 0.7,  data = dat)

スクリーンショット 2019-07-12 20.40.41

スクリーンショット 2019-07-12 14.59.28


8.応用編(グループ毎に別のグラフにする)

スクリーンショット 2019-07-13 7.53.20

最後にこのグラフのようにグループ毎にグラフを作る方法を紹介します。

グループ毎にグラフを作るときは主に①facet_grid、②facet_wrapの2つがありますが今回はfacet_gridを紹介します。

facet_grid(縦 ~ 横)という表記をします。

ggplot()+
  theme_gray(base_family = "HiraKakuPro-W3")+
  geom_histogram(aes(x = 身長, fill = 性別), bins = 30, position = "nudge", alpha = 1,  data = dat)+
  facet_grid(性別 ~ .)

スクリーンショット 2019-07-13 18.59.42

縦に並べるか横に並べるかですが、次の考え方が参考になります。

水平方向の変化を見るグラフは垂直方向、垂直方向の変化を見るグラフは水平方向

今回のヒストグラムは水平方向の変化なので縦に並べる方が比較しやすいことがわかります。


9.まとめ

今回はヒストグラムの基本的な作り方を紹介しました。

最初に「左右対称ではない?」と書きましたが、男性と女性の2つの分布が重なっていることが原因だとわかります。ちなみにこのデータは男性が173±10cm(130人)、女性が157cm±5cm(70人)を組み合わせたデータでした。

統計になれないとExcelで表を作り平均と標準偏差だけ計算して比較したくなりますが、分析する前に分布を確認する習慣のきっかけになれば幸いです。

前回、Rのggplot2を使ってグラフを作成する基本を紹介しました。

今回は散布図を作り方を紹介します。
併せてggplot2を使うのに必要なaes関数にも慣れていきたいと思います。

1.データの読み込み

今回もggplotパッケージが含まれているtidyverseパッケージを読み込みます。
#tidyverseパッケージを読み込みます。
if(!require(tidyverse)) install.packages("tidyverse", repos = "http://cran.us.r-project.org")

#既にtidyverseパッケージをインストールしている方は以下でもOK
library(tidyverse)

#データ取り込みます。今回はdatという変数にデータを入れます
url <- "https://github.com/mitti1210/myblog/blob/master/data01.csv?raw=true"
dat <- read.csv(url)


データを確認します。最初の数行を確認するのはhead関数を使います
head(dat)

歩行(0:非自立、1:自立)と氏名、性別、年齢、身長、体重、SIAS(脳卒中の評価)、BBS(バランスの評価)、MMSE(認知機能の評価)が入っています(架空のデータです)。




2.散布図の基本的な作り方

散布図を作るにはgeom_point関数を使います。

スクリーンショット 2019-05-23 0.07.49


今回はp1という変数名に横軸に身長、縦軸に体重の散布図を作成します。
またtheme〜というのはMacで日本語が□□と文字化けしないようにフォントを指定しています。
Windowsではなくて大丈夫(なはず)です。

p1 <- 
  dat %>%
  ggplot()+
    theme_gray(base_family = "HiraKakuPro-W3")+
    geom_point(aes(x = 身長, y = 体重))
p1
もしくは
p1 <- 
  ggplot()+
    theme_gray(base_family = "HiraKakuPro-W3")+
    geom_point(aes(x = 身長, y = 体重), data = dat)
p1

スクリーンショット 2019-05-23 0.30.30


基本はこれで完成です。ただもっと形を変えてみます。

点の色を赤にしてみる

色を変えるにはcolor =○○を使います。
主要な色であれば"red"や"blue"など色名を""で囲みます。
"#00BFC4"などRGBで指定することもできます。

p2 <- 
  ggplot() +
  theme_gray(base_family = "HiraKakuPro-W3")+ 
  geom_point(aes(x = 身長, y = 体重), color = "red",  data = dat)
p2

スクリーンショット 2019-05-23 0.32.14


点の色を性別で分けてみる

男女別に色分けもできます。
p3 <-
  ggplot() +
  theme_gray(base_family = "HiraKakuPro-W3")+ 
  geom_point(aes(x = 身長, y = 体重, color = 性別), data = dat)
p3

スクリーンショット 2019-05-23 0.33.39


p2とp3の違いがわかるでしょうか?

スクリーンショット 2019-05-23 0.43.27


ここでaes関数に関してもう少し詳しく説明します。


aes関数について

aes関数はデータフレームの変数名グラフに指定する場合に使います
x軸やy軸はイメージしやすいですが色・形・サイズなどに関しては①変数名の値を使いたければaes関数に入れる②変数名を使わず自分で値を指定したい場合はaes関数に入れないとなります。

スクリーンショット 2019-05-23 0.53.37


これを応用するともっとグラフを変えることができます。


点の大きさを変える。形も変える。

点の大きさはsizeで、形はshapeで指定します。

shapeは番号によって形が選べます。

スクリーンショット 2019-05-22 20.29.48


p4 <-
  ggplot() +
  theme_gray(base_family = "HiraKakuPro-W3")+ 
  geom_point(aes(x = 身長, y = 体重, color = 性別), size = 3, shape = 3, data = dat)
p4

スクリーンショット 2019-05-23 0.57.45


形を歩行の値で変更する

shapeをaes関数に入れてみます。

p5 <-
  ggplot() +
  theme_gray(base_family = "HiraKakuPro-W3")+ 
  geom_point(aes(x = 身長, y = 体重, color = 性別, shape = 歩行), size = 3, data = dat)
p5

エラー: A continuous variable can not be mapped to shape

あれっ?エラーが出ました。連続変数はshapeには使えませんよと怒られました

これは歩行が0,1で今のところ連続変数だからです。
確かに上のshapeの番号で1.5といった番号はエラーが出そうです。
なのでこのグラフの中だけ歩行をカテゴリー変数に変えます。factor関数を使います。

p5 <-
  ggplot() +
  theme_gray(base_family = "HiraKakuPro-W3")+ 
  geom_point(aes(x = 身長, y = 体重, color = 性別, shape = factor(歩行)), size = 3, data = dat)
p5

スクリーンショット 2019-05-23 0.59.20


これでエラーが消えました。ただ凡例がfactor(歩行)なんてなってしまいました。

凡例の名前だけでなく、軸やタイトルの名前を変えてみます。
名前を変えるのはlabs関数です。

p6 <-
  ggplot() +
  theme_gray(base_family = "HiraKakuPro-W3")+ 
  geom_point(aes(x = 身長, y = 体重, color = 性別, shape = factor(歩行)), size = 3, data = dat)+
  labs(x = "身長", y = "体重", color = "性別", shape = "歩行", title = "散布図", caption = "これは仮想のデータです")
p6
スクリーンショット 2019-05-23 1.01.39
これで変わりました。


横軸がカテゴリー変数の場合

横軸がカテゴリー変数でも散布図は使えます。

p7 <- 
  ggplot()+
  theme_gray(base_family = "HiraKakuPro-W3")+ 
  geom_point(aes(x = 性別, y = 身長), data = dat)
p7

スクリーンショット 2019-05-23 1.08.50


ただ重なってよくわかりません。このように縦軸や横軸にカテゴリー変数を使う場合は点の位置をずらすとわかりやすくなります。

点を重ならないようにずらすのは2つの方法があります。

①geom_point関数の中でposition = "jitter"を追加する

p8 <- 
  ggplot()+
  theme_gray(base_family = "HiraKakuPro-W3")+ 
  geom_point(aes(x = 性別, y = 身長), position = "jitter", data = dat)
p8

スクリーンショット 2019-05-23 1.09.56


②geom_jitter関数を使う
p9 <- 
  ggplot()+
  theme_gray(base_family = "HiraKakuPro-W3")+ 
  geom_jitter(aes(x = 性別, y = 身長, color = 性別), data = dat)
p9

スクリーンショット 2019-05-23 1.10.04

これで男女の分布の違いが見やすくなりました。



まとめ

今回は散布図について紹介しました。
Rを使った散布図はxとyの値を変えるだけで作れますし、colorやshapeを使うことで更に情報を付け加えることができます。

今回のデータセットは他にも変数があるのでぜひ他の散布図も作成してみてください。

前回の記事ではRでグラフを作るときの特徴やメリットについて紹介しました。


今回はggplot2でグラフ実際に作りながら、基本的な考え方について紹介します。



1.準備

ggplot2パッケージを使うためにはtidyverseパッケージを事前に読み込む必要があります。

library(tidyverse)

今回使うデータは以下のデータを使います。
見慣れない関数もありますが、無視して全て実行していただいて構いません。

set.seed(3) 
性別 <- as.integer(runif(200, 0, 2)) 
年齢 <- as.integer(rnorm(200, 65 , 10) + 性別*10)
身長 <- as.integer(rnorm(200, 165, 10) - 性別*10)
体重 <- as.integer(rnorm(200, 65, 10) - 年齢*0.05)
SIAS <- as.integer(rnorm(200, 45, 5))
SIAS <- ifelse(SIAS<=72,SIAS,72)
SIAS <- ifelse(SIAS<0,0,SIAS)
MMSE <- rnorm(200, 30, 5) -年齢*0.1
MMSE <- as.integer(ifelse(MMSE<=30,MMSE,30))
MMSE <- ifelse(MMSE<0,0,MMSE)
BBS <- rnorm(200, 42,5) -0.05*年齢 +0.15*SIAS -0.04*MMSE 
BBS <- as.integer(ifelse(BBS<=56,BBS,56))
BBS <- ifelse(BBS<0,0,BBS)
lin.pred <- 1 - 1.1*年齢 + 0.6*SIAS + 2.5*BBS - 2.5*MMSE
theta <- exp(lin.pred) / (1 + exp(lin.pred))
歩行 <- rbinom(200, 1, theta)
df <- data.frame(性別,年齢,身長,体重,SIAS,BBS,MMSE,歩行)
df <- df %>% 
  mutate(性別 = factor(.$性別, labels = c("男性","女性")),
         歩行 = factor(.$歩行, labels = c("非自立", "自立")))
head(df)


このデータは【演習1】R初心者が統計をかけるための前準備の流れを復習しますで使ったデータと同じですので、以前ダウンロードされた方はこのデータを使っても構いません。

data01.xlsx 
library(tidyverse)
library(readxl)
df <- read_excel("data01.xlsx", sheet = "日本語")
df <- df %>% 
  mutate(性別 = factor(.$性別, levels = c("男性","女性")),
         歩行 = factor(.$歩行, labels = c("非自立", "自立")))
head(df)




2.Rでグラフを作るときの基本的な流れ

前回の復習ですが、グラフを作る基本的な流れは以下の通りです。

Rのグラフの作り方

①基本情報を先に指定する
  • x軸はこれです、y軸はこれです
  • この群で色分け(グループ分け)します。
②作りたいグラフを指定する
  • (上記で指定した情報を元に)
  • ◯◯図を作ります(散布図、棒グラフ、箱ひげ図など)
  • そのグラフの細かい指定をします(マーカーの大きさなど)
③軸、タイトル、ラベルの指定をする
  • x軸のタイトルはこれ、y軸のタイトルはこれ
  • 凡例はこれ
  • タイトルはこれ
  • フォントはこれ
④その他
  • グループごとにグラフを並べるなど
大切なのは事前にxとyなど事前情報を指定することです。
スクリーンショット 2019-02-26 7.52.58

今回は主に①と②の話を中心にします。



3.目標

今回の記事では身長と体重の散布図を作ります。
横軸が身長で縦軸が体重、性別で色分けします。
併せて回帰直線も引いてみます。

完成図
スクリーンショット 2019-02-26 22.23.35



4.ggplot関数


ggplot2パッケージでグラフを作る関数はggplot関数です
ggplot()
スクリーンショット 2019-02-26 20.51.53


右下のplotビューを見ると灰色で何も書かれていませんがこれであっています。

ggplot関数はグラフの土台を作る関数です。この上に1つずつ情報を付け加えていきます。




5.使うデータの指定

ggplotでグラフを作るのにまず必要な情報はどのデータを使うか?です。


データを指定するのは主に2つの方法があります。

①data=を使う
ggplot(data = df)


②%>%を使う
df %>%
ggplot()
第2章で%>%を使ってデータ集計を行った後にそのままggplotでグラフを作る時は便利です。


6.aes関数

基本情報を指定するのがaes関数です。

基本情報とはx軸やy軸の指定など、グラフを作るのに必要な要素になります。

スクリーンショット 2019-02-26 21.55.53

dfというデータでx軸を身長、y軸を体重、性別で色分けするには以下のようにします。
 ggplot(data = df, aes(x = 身長, y = 体重, color = 性別))
スクリーンショット 2019-02-26 22.19.25

右下に目盛が出てきました。まだ実際のグラフを作っていないので中身はありません。



7.geom_関数

土台の準備ができました。次は土台の上にグラフを重ねていきます。

グラフを作るのはgeom_関数です
スクリーンショット 2019-02-26 22.57.27

グラフにはいくつか特徴があります
  • 統計量(平均・標準偏差・中央値など)がどうなってるか知りたい(差を知りたい)
  • AとBの関係性を知りたい(相関を知りたい)
  • データの分布を知りたい(正規分布、それ以外の分布)
それぞれのグラフにどんな特徴があるかは1つずつ説明していく予定です。


今回は散布図と回帰直線を引きます


散布図はgeom_point関数を使います。
ggplot関数は + で繋ぎます。

ggplot(data = df, aes(x = 身長, y = 体重, color = 性別))+
geom_point()
スクリーンショット 2019-02-26 23.32.46

geom_point関数の中は何も入っていませんが、本来aes関数を指定する必要あります。
ggplot関数で既にaesを指定していると、それ以降に続くgeom_関数はggplot関数で指定したaesの情報を引き継ぎます。


次に回帰直線を + で重ねます。
回帰直線はgeom_smooth関数で、回帰直線を引くにはmethod = lmを指定します。
ggplot(data = df, aes(x = 身長, y = 体重, color = 性別))+
geom_point() +
geom_smooth(method = lm)
スクリーンショット 2019-02-26 23.47.32

グラフが追加されました。細かい設定はそれぞれのグラフの説明で行う予定です。



8.theme_関数(macで文字化けを防ぐ)

macで日本語のデータを使うと□□のように文字化けします。
文字化けしないためにはtheme_関数のbase_family=でフォントを指定します。
今回は游ゴシック(Medium)を使います。windowsだと指定は必要ないかもしれません(未確認)。

ggplot(data = df, aes(x = 身長, y = 体重, color = 性別)) +
geom_point() +
geom_smooth(method = lm) +
theme_gray(base_family = "YuGo-Medium")
スクリーンショット 2019-02-26 22.23.35


これで最初の見本と同じになりました。



まとめ

今回はggplotでグラフを作る基本的な流れを説明しました。

他にも色々なところを変更することができますが徐々に説明していきます。。



↑このページのトップヘ