Ym研究室の院生の備忘録　Rではじめるデータサイエンス編（１）

研究室に当然のことながら、後輩がやってきました。。。そうなると、R暦1年半の私でも後輩に指導しなくてはいけません。そこでRのお勉強として、[『Rではじめるデータサイエンス』](https://www.amazon.co.jp/R%E3%81%A7%E3%81%AF%E3%81%98%E3%82%81%E3%82%8B%E3%83%87%E3%83%BC%E3%82%BF%E3%82%B5%E3%82%A4%E3%82%A8%E3%83%B3%E3%82%B9-Hadley-Wickham/dp/487311814X)を読みましょうということになりました。
プログラミングに精通する方々が使っているQiitaを利用して、情報共有をしていこうと思います。この記事に関連する情報やコードの改善点など、コメント頂けると幸いです:smiley:
# 第一回
## 1. ggplot2によるデータ可視化
### 1.1. 練習問題(p.6)
```r:exercises_ch1.R
### p.6 練習問題 ###

# パッケージの読み込み
library(tidyverse)

### 1 ###
ggplot(data = mpg)
# geom_functionを指定していないため、描画デバイスが表示されるだけ

### 2 ###
dim(mtcars) # dim関数で行数と列数の確認
# >[1] 32 11

### 3 ###
?mpg
# drv  f = front-wheel drive, r = rear wheel drive, 4 = 4wd
# fは前輪駆動、rは後輪駆動、4は四輪駆動車を示す

### 4 ###
ggplot(data = mpg) +
  geom_point(mapping = aes(x=cyl, y=hwy))
# シリンダーの個数に対するガロンあたりのマイルの散布図

### 5 ###
ggplot(data = mpg) +
  geom_point(mapping = aes(x=class, y=drv))
# 2種類とも非定量変数であるので、相関関係が分からない
```
####1. ggplot(data=mpg)を実行しなさい。どうなるか。

geom_function()を指定していないので、描画デバイスだけが表示されます。
![exercise_1.png](https://qiita-image-store.s3.amazonaws.com/0/234290/6b47cf3c-9fc3-35fb-b1ba-ce13203e0dba.png)
####2. mtcarsには何行あるか。何列あるか。

dim関数を使えば、行数と列数が一度に得られます。上記のコードから、行数が32,列数が11ということが分かりました。
####3. drv変数は何を記述するか。?mpgのヘルプを読んで見つけなさい。

せっかくなので、全ての変数の情報を確認しておきます。

|変数名|英文|日本語訳|
|:--|:--|:--|
|manufacturer|manufacturer|生産メーカー|
|model|model name|車名|
|displ|engine displacement, in litres|エンジン排気量、リットル|
|year|year of manufacture|生産年|
|cyl|number of cylinders|シリンダー数|
|trans|type of transmission|トランスミッションタイプ|
|drv|f = front-wheel drive, r = rear wheel drive, 4 = 4wd|fが前輪、rが後輪、4が四駆|
|cty|city miles per gallon|1ガロンあたりのシティマイル|
|hwy|highway miles per gallon|1ガロンあたりのハイウェイマイル|
|fl|fuel type|燃料タイプ|
|class|"type" of car|車種|

####4. hwyとcylの散布図を作りなさい。
![excecise_4.png](https://qiita-image-store.s3.amazonaws.com/0/234290/56a5f15b-f4cc-1137-de11-d307712d8cfd.png)
####5. class対drvの散布図はどうなるか。なぜプロットが役に立たないのか。
![exercise_5.png](https://qiita-image-store.s3.amazonaws.com/0/234290/c34d6960-0016-663d-1011-d794e5e6c489.png)
対になる変数が両者ともカテゴリ変数なので、相関が意味を持ちません。

### 1.2 練習問題(p.11)
```r:exercises_ch1.R
### p.11 練習問題 ###

### 1 ###
# 修正前
ggplot(data = mpg) +
  geom_point(
    mapping = aes(x=displ, y=hwy, color="blue")
  )
# 修正後
ggplot(data = mpg) +
  geom_point(
    mapping = aes(x=displ, y=hwy, shape=class), color="blue"
  )
### 2 ###
# manufacturer カテゴリ変数
# model カテゴリ変数
# displ 連続変数
# year カテゴリ変数
# cyl カテゴリ変数
# trans カテゴリ変数
# drv カテゴリ変数
# cty 連続変数
# hwy 連続変数
# fl カテゴリ変数
# class カテゴリ変数

mpg
'# A tibble: 234 x 11
manufacturer model      displ  year   cyl trans      drv     cty   hwy fl    class  
<chr>        <chr>      <dbl> <int> <int> <chr>      <chr> <int> <int> <chr> <chr>  
  1 audi         a4          1.80  1999     4 auto(l5)   f        18    29 p     compact
2 audi         a4          1.80  1999     4 manual(m5) f        21    29 p     compact
3 audi         a4          2.00  2008     4 manual(m6) f        20    31 p     compact
4 audi         a4          2.00  2008     4 auto(av)   f        21    30 p     compact
5 audi         a4          2.80  1999     6 auto(l5)   f        16    26 p     compact
6 audi         a4          2.80  1999     6 manual(m5) f        18    26 p     compact
7 audi         a4          3.10  2008     6 auto(av)   f        18    27 p     compact
8 audi         a4 quattro  1.80  1999     4 manual(m5) 4        18    26 p     compact
9 audi         a4 quattro  1.80  1999     4 auto(l5)   4        16    25 p     compact
10 audi         a4 quattro  2.00  2008     4 manual(m6) 4        20    28 p     compact
# ... with 224 more rows'

### 3 ###
# color
ggplot(data = mpg) +
  geom_point(
    mapping = aes(x=displ, y=hwy, color=hwy)
  )
# > 色がグラデーションで表される

# size
ggplot(data = mpg) +
  geom_point(
    mapping = aes(x=displ, y=hwy, size=hwy)
  )
# > sizeが段階で変化する 

# shape
ggplot(data = mpg) +
  geom_point(
    mapping = aes(x=displ, y=hwy, shape=hwy)
  )
# > Error: A continuous variable can not be mapped to shape

### 4 ###
ggplot(data = mpg) +
  geom_point(mapping = aes(x=displ, y=displ))
# 相関係数が1となるので、直線上に点が散布される

### 5 ###
# stroke=1
ggplot(data = mpg) +
  geom_point(
    mapping = aes(x=displ, y=hwy), shape=1, stroke=1
  )

# stroke=5
ggplot(data = mpg) +
  geom_point(
    mapping = aes(x=displ, y=hwy), shape=1, stroke=5
  )

### 6 ###
ggplot(data = mpg) +
  geom_point(
    mapping = aes(x=displ, y=hwy, color=displ<5)
  )
# TrueとFalseの領域で色が分けられる
```
####1. 次のコードはどこがおかしいか。なぜ点が青になっていないのだろうか。

**修正前**
![exercise2_1_before.png](https://qiita-image-store.s3.amazonaws.com/0/234290/be6d7aae-3c67-5e6e-b562-a8e2079194ed.png)
**修正後**
![exercise2_1_after.png](https://qiita-image-store.s3.amazonaws.com/0/234290/bc75ed48-055f-7f21-d8d6-1c6d1d796443.png)
color="blue"はaes()の外に出さなければなりません。
####2. mpgのどれがカテゴリ変数か。どれが連続変数か（ヒント：?mpgと入力してデータセットのドキュメントを読む）。mpgを実行したとき、この情報がどのようにして得られるか。
カテゴリ変数と連続変数については[こちら](https://support.minitab.com/ja-jp/minitab/18/help-and-how-to/modeling-statistics/regression/supporting-topics/basics/what-are-categorical-discrete-and-continuous-variables/)をどうぞ。これから、連続変数がdispl,cty,hwyと分かります。
####3. 連続変数をcolor,size,shapeにマップしてみる。カテゴリ変数と連続変数とでこれらのエステティック属性がどう振る舞いを変えるか。
**color**
![exercize2_3_color.png](https://qiita-image-store.s3.amazonaws.com/0/234290/aab7da17-6b85-48a2-c01a-311210135daa.png)
凡例がグラデーションで表されます。
**size**
![exercize2_3_size.png](https://qiita-image-store.s3.amazonaws.com/0/234290/8b65e799-6a09-18ca-7f04-065300878220.png)
hwyの値が大きいほど、点が大きくなります。
**shape**
> Error: A continuous variable can not be mapped to shape

のようにエラーが吐き出されます。
####4. 1つの変数に複数のエステティック属性をマップするとどうなるか。
![exercize2_4.png](https://qiita-image-store.s3.amazonaws.com/0/234290/6eeec95a-8479-f85d-ed0f-b2ee69de6351.png)
問題文の意味がピンとこなかったのですが、こういうことではないかと思われます。
####5. エステティック属性strokeは何をするか。どんな形に作用するか。（ヒント：?geom_pointを使う）。
**stroke=1**
![exercise2_5_stroke1.png](https://qiita-image-store.s3.amazonaws.com/0/234290/898f2257-daa9-9f4f-71b5-a50f232cdf7a.png)
**stroke=5**
![exercise2_5_stroke5.png](https://qiita-image-store.s3.amazonaws.com/0/234290/0462d7b8-7dca-519d-3caf-7f606170cf5d.png)
sizeとの挙動の違いがはっきりとしませんが、描画点の範囲に影響を及ぼします。
####6. エステティック属性を、aes(color=displ<5)のように変数名以外にマップするとどうなるか。
![exercise2_6.png](https://qiita-image-store.s3.amazonaws.com/0/234290/1a9954bc-a1b9-0df2-5f26-3db38abbd9e1.png)
このように、displ=5を境目にして、色分けされます。

第一回はここまでとして、続きを少しずつ書いていこうと思います。