アヤメの分類でggplot2を勉強する

[ggplot2](https://ggplot2.tidyverse.org)はRのデータ可視化パッケージです。
SIGNATEの[アヤメの分類](https://signate.jp/competitions/115)から入手したデータを用いて、ggplot2を勉強します。
実行環境：MacBook Air M1, 2020

# RとRStudioのインストール
以下のURLから、RとRStudioをインストールします。
https://posit.co/download/rstudio-desktop/
インストール方法は以下のURLの記事にわかりやすく書かれています。
https://qiita.com/azzeten/items/1031c788ed093d3b3946

# ggplot2のインストールと読み込み
ggplot2のインストールと読み込みを行います。

https://ggplot2.tidyverse.org

RStudioを起動し、以下のコードを実行します。
```R
install.packages("tidyverse")
library(ggplot2)
```
次回からは、以下のコードのみを実行します。
```R
library(ggplot2)
```
これにより、ggplot2を読み込むことができます。

# ディレクトリの移動とデータの読み込み
```R
# ディレクトリの移動
setwd("~/iris")
getwd()
```
```R
# データの読み込み
train = read.table("train.tsv", header = TRUE, sep = "\t")
test = read.table("test.tsv", header = TRUE, sep = "\t")
sample_submit = read.csv("sample_submit.csv", header = FALSE)
```

# データ可視化
### 棒グラフ
classのカウントを示す棒グラフを作成します。
```R
ggplot(train, aes(x = class)) + geom_bar()
```
![Rplot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569835/33274f8b-7229-276b-93ff-1f71fa503683.png)

グラフをわかりやすくするため、アヤメの種類ごとに棒に色をつけます。
```R
ggplot(train, aes(x = class, fill = class)) + geom_bar()
```
![Rplot01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569835/ea4e8743-ed8f-8671-2478-933e18a830f3.png)

バーが3色になり、わかりやすくなりました。

### 散布図
sepal.length.in.cmとsepal.width.in.cmの関係を示す散布図を作成します。
```R
ggplot(train, aes(x = sepal.length.in.cm, y = sepal.width.in.cm)) + geom_point()
```
![Rplot02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569835/ff9bf4dd-4f1f-3248-f6af-20146fd37f32.png)

棒グラフと同様に、アヤメの種類ごとに点に色をつけます。
```R
ggplot(train, aes(x = sepal.length.in.cm, y = sepal.width.in.cm, colour = class)) + geom_point()
```
![Rplot03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569835/8bab32bf-feb2-61b5-deae-d0fd92c54d81.png)

3種類のアヤメで、sepal.length.in.cmとsepal.width.in.cmの分布が異なることがわかります。

### ヒストグラム
sepal.length.in.cmの分布を示すヒストグラムを作成します。
```R
ggplot(train, aes(x = sepal.length.in.cm)) + geom_histogram()
```
![Rplot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569835/d64a9e35-f4d5-00fb-b28b-297026c82fa9.png)

30だったビンの数を10にします。

```R
ggplot(train, aes(x = sepal.length.in.cm)) + geom_histogram(bins = 10)
```
![Rplot01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569835/d8437907-fe72-10d5-641a-37df372beb91.png)

棒グラフと同様に、アヤメの種類ごとにヒストグラムに色をつけます。

```R
ggplot(train, aes(x = sepal.length.in.cm, fill = class)) + geom_histogram(bins = 10)
```
![Rplot02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569835/46e17cec-7567-ff69-4b91-4a82c930efef.png)

アヤメの種類ごとのヒストグラムを作成し、透過度を上げます。

```R
ggplot(train, aes(x = sepal.length.in.cm, fill = class)) + geom_histogram(position = "identity", alpha = 0.5, bins = 10)
```
![Rplot03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569835/3c90786d-b948-0ad0-e284-cfd1e4e7cc1b.png)

3種類のアヤメで、sepal.length.in.cmの分布が異なることがわかります。

### 密度曲線
sepal.length.in.cmの密度曲線を作成します。
```R
ggplot(train, aes(x = sepal.length.in.cm, fill = class)) + geom_density()
```
![Rplot04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569835/ac55f0d4-bba0-c4cd-4043-09fd2f4ab632.png)

ヒストグラムと同様に、透過度を上げます。
```R
ggplot(train, aes(x = sepal.length.in.cm, fill = class)) + geom_density(alpha = 0.5)
```
![Rplot05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569835/215c1d24-3fc7-8ab9-6442-fa29988022b8.png)

### 箱ひげ図
```R
ggplot(train, aes(x = class,y = sepal.length.in.cm)) + geom_boxplot()
```
![Rplot06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569835/5d35e731-dc47-515e-6d43-07fbd37ea57a.png)

棒グラフと同様に、アヤメの種類ごとに箱ひげ図に色をつけます。

```R
ggplot(train, aes(x = class,y = sepal.length.in.cm, fill = class)) + geom_boxplot()
```
![Rplot12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569835/c396f65d-b6d2-b8bf-f9c4-df9c3967a515.png)

箱ひげ図が3色になり、わかりやすくなりました。

### バイオリンプロット
```R
ggplot(train, aes(x = class,y = sepal.length.in.cm)) + geom_violin()
```
![Rplot08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569835/cd13c735-0f22-4532-e088-b712305c8e4b.png)

棒グラフと同様に、アヤメの種類ごとにバイオリンプロットに色をつけます。

```R
ggplot(train, aes(x = class,y = sepal.length.in.cm, fill = class)) + geom_violin()
```
![Rplot13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569835/fbee94a5-b1db-945d-5f2c-360eed7a6370.png)

バイオリンプロットが3色になり、わかりやすくなりました。

### 密度プロット
```R
ggplot(train, aes(x = sepal.length.in.cm, y = sepal.width.in.cm)) + geom_point() + stat_density2d()
```
![Rplot10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569835/ef7e3c38-e30c-a9c4-be9e-4e5766ceb9b2.png)

棒グラフと同様に、アヤメの種類ごとに密度プロットに色をつけます。

```R
ggplot(train, aes(x = sepal.length.in.cm, y = sepal.width.in.cm, colour = class)) + geom_point() + stat_density2d()
```
![Rplot11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569835/40abb65a-a513-8d32-0544-391a4a4e9c28.png)

3種類のアヤメで、sepal.length.in.cmとsepal.width.in.cmの分布が異なることがわかります。
特に、Iris-setosaが左上に分布していることがわかります。

ggplot2を用いて、様々なグラフを作成できることがわかりました。
今後は、Arguments（引数）やLayers（レイヤー）について勉強していきます。

# 参考文献
https://ggplot2.tidyverse.org/index.html
https://www.oreilly.co.jp/books/9784873118925/
https://stats.biopapyrus.jp/r/ggplot/geom_histogram.html