-
Notifications
You must be signed in to change notification settings - Fork 0
/
premise.Rmd
282 lines (206 loc) · 15.9 KB
/
premise.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
# 前提知識 {#premise}
* ここに出てくる用語は初学者にとってなじみがないものばかりかもしれないが,Rでなるべくがんばらず(人力に頼らず)にデータ加工をできるようになるためには避けて通れない
* これ以降はここで解説した用語を説明なしに解説に使うので,分からない言葉に出くわしたらここに戻ってこよう
## RStudioの使い方{#p-howtouse-rst}
### 起動画面{#p-opening}
* RStudioを最初に起動すると大体図\@ref(fig:start)のような画面になる
```{r start, echo = FALSE, fig.cap = "RStudioの起動画面", fig.align = "center", out.width='80%'}
knitr::include_graphics("images/start.png")
```
### 見た目の変更{#p-theme}
* 好みまたは目に優しい画面にするため,RStudioの色合いを下記から変更できる
+ メニューの`Tools > Global Options > Appearance > Editor theme`から選び,OKを押す(図\@ref(fig:appearance))
+ 筆者は`Tommorow Night Bright`を使用
+ 以下の説明は変更後の画面で示す
```{r appearance, echo = FALSE, fig.cap = "テーマの設定画面", fig.align = "center", out.width='70%'}
knitr::include_graphics("images/appearance.png")
```
### コードの実行の仕方{#p-howtorun}
* コンソールに直接コードを入力し出力を確認できる(図\@ref(fig:pane))
+ ちょっとした確認には便利だが,たくさん書きたい時や,内容を保存したい時は不向き
```{r pane, echo = FALSE, fig.cap = "コンソールに直接", fig.align = "center", out.width='70%'}
knitr::include_graphics("images/pane.png")
```
* R Scriptに書くと,たくさん書けるし保存も簡単でおすすめ。色分けもされる
+ 慣れたらR Markdownを使うとhtmlレポートにまとめやすくなりもっと便利になる
* 図\@ref(fig:script)の左上の〇で囲んである緑`+`がついているアイコンから,または`File > New file > R Script`でR Scriptを開く
```{r script, echo = FALSE, fig.cap = "Rスクリプトを開く", fig.align = "center", out.width='70%'}
knitr::include_graphics("images/newfile.png")
```
* R Scriptを開くとデフォルトでは左上にウィンドウ(ペインと呼ばれる)が開き,ここにコードを記述できる(図\@ref(fig:script2))
```{r script2, echo = FALSE, fig.cap = "Rスクリプトに書く", fig.align = "center", out.width='70%'}
knitr::include_graphics("images/rscript.png")
```
### Windowsユーザーにつきものの文字化け対策{#p-utf8}
* Windowsだけの問題かもしれず,今後はもしかしたら不要になっていくかもしれないが,Windows10以前の場合,RStudio上で文字コードをUTF-8に指定しておく方が文字化けに悩まなくてすみそう
* メニューの`Tools > Global Options > Code > Saving > Default text encoding`からUTF-8選び,OKを押す(図\@ref(fig:utf8))
* 同様に`Tools > Project Options > Code Editing > Text encoding`のところもUTF-8にしておく
* 上記設定をした後で,他の環境で作られたR ScriptファイルやR Markdownファイルを開くときに文字化けする場合は,`File > Reopen with Encoding`からCP932(つまりShift-JIS)を選ぶとうまくいくかもしれない
```{r utf8, echo = FALSE, fig.cap = "文字エンコーディングの指定", fig.align = "center", out.width='70%'}
knitr::include_graphics("images/utf8.png")
```
## 本書に出てくるコード部分の見方{#p-howtoread}
* グレーの背景部分はRのコードが書いてあり,その下の`##`で始まる部分は出力結果を表す
```{r}
1 + 1
```
* ここでは`1 + 1`がコード部分で,`## [1] 2`が出力結果部分
* `[1]`というのは,その次にくる値(ここでは1つしかないが)が何番目にあるかを示している
* たとえば,1から50までの数値を出力してみる
+ コロン`:`で最初と最後の値をつなぐことで連番を表現できる
```{r}
1:50
```
* コード部分に`#`で始まる文章がある場合は,コメントを表す。ここは実行されないので説明のために書かれる
```{r}
# *(アスタリスク) は掛け算であることを示す
2 * 3 # ここにもコメントを入れられる
```
## パッケージ{#p-package}
* 様々な関数やデータなどがまとまっていて,読み込むと色々なことができる
+ 逆にいえば読み込まないと便利な作業ができないことが多い
* 例えば`library(tidyverse)`または`require(tidyverse)` のように書くことで読み込める
* パッケージを読み込まなくても,「`パッケージ名::関数名()`」でパッケージ内の関数が使える
+ どのパッケージの関数か明示するのにも便利なので,本書では多用する
+ 以下,例えば「パッケージ`dplyr`の関数`select()`」は`dplyr::select()`と表現することがある
* モダンなRのデータ加工に必須なパッケージをまとめて読み込んでくれる`tidyverse`をまず読み込んでおく
+ 以降のコードはすべて`tidyverse`を読み込んだ前提で進める
+ 本書では明示しない限り,すべてtidyverseを読み込めば使えるパッケージを用いている
```{r eval = FALSE}
library(tidyverse)
```
* インストールされているパッケージはRStudioのデフォルト画面で右下にあるウィンドウ(ペインと呼ぶ)のパッケージタブで確認可能
* 入っていないパッケージは,インターネットにつながっていれば以下の方法でインストールできる
+ パッケージタブの`install`をクリックして出てくるウィンドウでパッケージ名を入力(図\@ref(fig:pinst))
+ コマンドから`install.packages("パッケージ名をここに入れる")`
```{r pinst, echo = FALSE, fig.cap = "パッケージタブからのインストール", fig.align = "center", out.width='80%'}
knitr::include_graphics("images/package_install.png")
```
## 関数{#p-function}
* データ加工においてほとんどの人は絶対お世話になるもの
+ 適切な値や変数などを指定すれば,データの処理や計算,統計解析など様々な処理を簡単に実行してくれる
+ データ加工の技術は,**色々な便利関数をどの場面でどうやって使うか**につきる
* 例えば`mean()`などのように「`関数名()`」で出てくるので,`()`で囲まれてる所を見たらほぼ関数だと思えばよさそう
+ 本書の2章~6章はすべて基本関数の解説
* `()`の中に入る値を**引数**(ひきすう)と呼ぶ
* 引数は「`,`」でつないで追加していき,これによって実行したい処理のカスタマイズが可能
+ 関数の`()`の最初の位置に来るものを**第一引数**という
* 関数の`()`内でtabキーを押せば,欲しいものが大体出てくる
+ 例:`select()`での候補変数,`mean()`での引数`na.rm =`など
### 関数の例{#p-function-ex}
#### 複数のものを1つにする: c(){#p-function-ex-c}
* **ベクトル**を作る(複数のものを1つにする)ための関数
+ ベクトルと聞くと数学苦手だった人はいやな記憶を思い出すかもしれないが,Rではとにかく「**複数のものを1つにしたもの**」と理解しておけば何となると思う
* `c()`は慣れてる人は当たり前に使っているので,あまり解説されない気がするが,初学者にとってまず理解すべき最重要関数と思われる
* ベクトルは,後に解説するデータフレームでの列単位のデータを扱う際にも有用
```{r}
c(1,2,3)
c("a", "b", "c") # " "で囲まれる値は文字を表す
# 複数あるように見えるが実は1つのベクトルになっている例
1:10
```
#### 平均値:mean(){#p-function-ex-m}
* 引数にベクトルを入れることで平均値を計算する
* 1つのベクトルはデータフレームの1つの列(変数)の単位と同じなので,ここでは横に並んでいるがデータフレーム的にイメージしたら縦に並んでるとみなすと分かりやすいかも
```{r vectorimage, echo = FALSE, fig.cap = "ベクトルのイメージ", fig.align = "center", out.width='80%'}
knitr::include_graphics("images/vector_image.png")
```
```{r}
mean(c(1,2,3))
# 欠損値(NA)があると結果がNA
mean(c(1, NA, 3))
# 引数にna.rm = TRUEを追加すると結果が出る
# 基本的に実務上は常につけておいたほうがよい
mean(c(1, NA, 3), na.rm = TRUE)
```
## オブジェクト{#p-object}
* Pythonなどの他言語では**変数**^[データフレームの列を変数と呼ぶものとは異なる]と呼ばれるものに該当
* 計算の結果や,複数の数値や文字など(他にも色々)を1つの文字列に格納することができ,その後のコードで活用できる
* `<-`の矢印の先にあるのがオブジェクト。RStudioではショートカット`alt + -`で出せる(Macは`Option + -`)
* この後説明するデータフレームもオブジェクトに入れられる
+ データの少ないミニデータを作る時や,計算結果を格納するときに多用
### 例{#p-object-ex}
```{r}
res <- 1 + 1
res
res2 <- c(1, 2:4, 5)
res2
res3 <- c("a", "b")
res3
# この後は不要なので削除
rm(res, res2, res3)
```
## データフレーム{#p-df}
* **行**(別名:ケース;オブザベーション;レコード)と**列**(別名:変数;カラム)^[オブジェクトに該当するものとは異なる。本書ではこちらの意味で「変数」を使用する]が碁盤の目のようになった集まりの形のデータ
+ Excelで表現するのであれば通常1行目に列名が入り、2行目以降が個別のケース(データ)を表す形(図\@ref(fig:dfxl))。Rのデータフレームでは列名は別途与えられ,1行目からケースが表される(図\@ref(fig:dfr))
* データ解析において便利で分かりやすいため、本書ではデータフレームの形で説明していく
+ Rのモダンな方法では,データの加工や統計処理のプロセスをデータフレームの形で返すことが多い
* 解析すべきデータがデータフレーム上に整えられているような状態を**tidy**(読み:タイディー,意味:整然)と呼び,データ解析において理想的な形とされている
```{r dfxl, echo = FALSE, fig.cap = "Excel画面風なイメージ", fig.align = "center", out.width='80%'}
knitr::include_graphics("images/df_xl.png")
```
```{r dfr, echo = FALSE, fig.cap = "Rのデータフレーム(tibble形式)", fig.align = "center", out.width='80%'}
knitr::include_graphics("images/dfr.png")
```
* オブジェクトに格納することで,別のデータフレームを作れる
* 列単位で取り出すとベクトルになる
+ 例:bill_length_mmは次のようなベクトルで表現できる c(39.1, 39.5, 40.3, NA ...)
* 本書では,データフレームの中でも表示に便利な**tibble**形式を使う
+ デフォルトでは最初の10行が表示されるが,本書では紙面の都合上,表示行数をしぼっている
### 本書で使う主なデータ例{#p-df-main}
#### ペンギンデータ{#p-df-main-p}
![](images/penguins_logo.png)
* `palmerpenguins`パッケージのpenguinsデータ(CC0)
+ 最初からtibble形式になっている
* データフレーム名を打ち込めばそのまま表示できる
+ tibble形式でないデータフレームで大きなものに対して実行すると,Consoleの出力がうまって大変になることもある
```{r}
# パッケージが入ってなければ下記実行
# install.packages("palmerpenguins")
palmerpenguins::penguins
```
* tibble形式のデータフレームの出力の見方
+ 出力の最上段にある`A tibble: 344 x 8`で,tibble形式のデータフレーム,344行 × 8列という情報が分かる
+ `flipper_length_~` のように,長い変数名は`~`で省略して表示される
+ 変数名の下の行にある`<fct>`, `<dbl>`, `<int>`は変数の型を示し,それぞれ因子型,数値型,整数型であることを示している。詳しくは\@ref(mu-kata)で説明する
+ 下から2行目にある
`... with 341 more rows, and 3 more variables:`
で,さらに341行と3列が非表示であることが分かる
+ 非表示になった変数名は
`body_mass_g <int>, sex <fct>, year <int>`
のように最下部に表示される
* 本書では最初の3行の表示のみに絞っているが,**任意の行数を表示させたい場合**は,`print()`関数を使う
* 例:最初の15行のみ表示させる
```{r}
palmerpenguins::penguins |>
print(n = 15)
```
## |>または%>%(パイプ演算子){#p-pipe}
* 名前は**パイプ**で発音は"*and then*" ([参照](https://adv-r.hadley.nz/functions.html#function-composition))
* コードを読みやすくするための便利な機能を持つ演算子。初めてみた人は全然わからないと思うが,この本を読んでコードを書きはじめてみたらこれなしではいられなくなるくらいお世話になると思う
+ 主に使用が想定される場面でざっくりいうと,「このデータフレームに対して`|>`の後にある関数を適用する」という機能
+ 具体的な使用法は\@ref(select-standard-pipe)で解説
+ 最近は特にパッケージを読み込まなくても使える`|>`(base pipe, native pipe)を使う説明が多くなった。
- `%>%`(magrittr pipe)は`tidyverse`パッケージを読み込めば使えて,こちらが必要になる特殊なケースもある
* RStudioのショートカットは`Ctrl + Shift + M`(Macは`Cmd + Shift + M`)。たぶん,RStudio以外でもこのショートカット押してしまうぐらい中毒性がある
+ 現時点ではRStudioのデフォルトのショートカットで出るのは`%>%`だが,`|>`に切り替えたい場合は,RStudioの`Tools > Global Options > Code > Editing > use native pipe operator`にチェックを入れる
## プロジェクト{#p-project}
* 本書の内容では使わなくても問題ないが,自身のデータを読み書きする際には非常に便利なので,解説しておく
* データを加工して解析する際に、1つのフォルダ(サブフォルダも含む)の中に関連するデータやコードなどをまとめておき、そのフォルダを**プロジェクト**と設定する
+ これにより、ファイルの読み書きの際の場所指定をいちいち意識しないで作業できるようになる
* RStudio画面の右上にProject設定のメニューがある(図\@ref(fig:project))
+ `Project (None) > New Project > Existing Directory`と選び,プロジェクトにしたいフォルダを設定する
```{r project, echo = FALSE, fig.cap = "プロジェクトの設定", fig.align = "center"}
knitr::include_graphics("images/project.png")
```
## 困ったときは{#p-help}
* 関数の使い方,引数の入れ方は大抵忘れるので,ヘルプのexampleを見て思い出す場合が多い
+ コンソールに「`?関数名`」のように入れて実行する(例:?rename)と右下ペインのHelpタブに情報が出てくる
+ 右下ペインのHelpタブで検索する(図\@ref(fig:help))
* チートシートを見る
+ メニューの`Help > Cheat Sheets > Browse Cheat Sheets`から掲載サイトに行ける
* エラーメッセージを`" "`で囲んでググる(フレーズ検索)
* [r-wakalang](https://github.com/tokyor/r-wakalang)の`#r_beginners`チャンネルで質問する
```{r help, echo = FALSE, fig.cap = "ヘルプの確認", fig.align = "center", out.width='80%'}
knitr::include_graphics("images/help.png")
```