第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と確率密度関数を同時に描きたい





このサイトはRどころかプログラミング自体わからない状態からRの基本的な使い方がわかり、集計やグラフ作成、基本的な医療統計(もしかしたら機械学習の基礎)が使えることを目指しています。

自分はプログラミングの専門家でもありませんし、データサイエンティストとして生計を立てているわけでもありません。

病院に勤務している一理学療法士です。

ただ、日々業務をしながらデータ分析とかしてみたいんだけど、そもそも何からしたらいいのかわからない学会で統計が必要なんだけど全然わからないと感じている方は自分も含めいると思います。

そういった分析の専門家でない方に少しでも参考になる部分があり、もし興味が出てきたらこのサイトを卒業して、然るべき書籍や講義などステップアップしていただければ幸いです。



自分は2018年夏にRや統計を独学しようと思い、Edxで「HarvardX  Professional Certificate inData Science」を受講し修了しました。


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


このサイトはそこで学んだことの自分への備忘録にもなります。

MITTI1210 on Twitter

Edxで「ハーバードX データサイエンスプロフェッショナルコース」受講中 ①Rの基礎 ②グラフの作り方 ③確率 ④推論とモデリング ⑤生産性ツール ⑥ラングリング(データ整理) ⑦線形回帰 ⑧機械学習 ⑨応用 全9回の講義。全て合格目指します。 https://t.co/SkfjzAH64w






サイトの内容はプログラム経験者や独学が得意な方にはくどく、必要な情報が全て載っていないとお叱りを受けると思います。ただ、プログラム未経験者だった自分が「このぐらい噛み砕いて説明してほしかった!」「まずはこんな順で教えてほしかった!」と感じたことを記事にしています


まずはイメージがしやすいこと、とりあえず動くことを念頭において記事を作成しています。情報を網羅するというより必要最低限の情報だけ伝え、必要になった場面で追加の情報が出てくるようにしたいと考えています。もしかしたら辞書的な使い方には向いていないかもしれません。多くの素晴らしいサイトや書籍がありますので、そちらもご参照ください。


そのため第1章から順に読むと徐々に知識が追加され、途中で復習できるよう構成しています。

途中で読んでわからないところは基本的に以前の記事に情報があるようにしているので、困った時は前の記事を確認してみてください!



第1章:Rの基本の「き」


Rって何?

【1-1】統計ソフトRで何ができるか説明してみる


Rのソフトについて

【1-2】RコマンダーやRStudioなどRのソフトにも色々あるので解説してみる

【1-3】Rのソフトはどれを使えばいいか?目的別チャートを作りました

【1-4】はじめてのRStudio。基本的な画面の説明をします

【1-5】Rコマンダーの基本的な画面の説明を行います

【1-6】Rstudioのプロジェクトについて解説します

【1-7】Rで使うパッケージのインストールについて紹介します。



Rの基本的な使い方について

【1-8】R の「変数」について説明します。

【1-9】医療統計をRで使うために必要な「データフレーム」にの考え方ついて

【1-11】Rで医療統計で必要なtable1を作るtableoneパッケージについて紹介します

【演習1】R初心者が統計をかけるための前準備の流れを復習します


第2章:データを扱う

【2-1】Rのfor関数、apply関数を使ってまとめて標準偏差などの統計量を求める方法

【2-2】Rのmutate関数を使って列の追加や修正を行う

【演習2】データハンドリングの基礎を復習します



第3章:グラフを作る

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

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

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

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

【3-5】Rのggplot2で密度曲線を作るgeom_density関数



その他


自己紹介

昨年の振り返りと今年の目標


Qiita

ROC曲線とPR曲線の違いを混合行列と有病率から考えてみる

ggplot2で100%積み重ね棒グラフの真ん中に値を表示させたい

↑このページのトップヘ