RでKaggleに参加する

私は最近Kaggleを始めた初心者です。
KaggleにはRでも参加できるということで、RでKaggleに参加しました。

# ノートブックの作成
有名なチュートリアルコンペであるTitanic（タイタニック）に参加しました。
https://www.kaggle.com/competitions/titanic
![スクリーンショット 2023-11-24 1.43.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569835/eb7695cf-473c-2aa5-4827-be7125d288bf.png)
CodeタブからNew Notebookボタンをクリックし、新しいノートブックを作成しました。
ノートブックを開いたら、FileタブからLanguage、Rをクリックします。
これにより、プログラミング言語をRに設定することができます。

# コード
コードを記載していきます。
## ライブラリの読み込み
[ggplot2](https://ggplot2.tidyverse.org)と[dplyr](https://dplyr.tidyverse.org)を読み込みます。
```R
library(ggplot2)
library(dplyr)
```

## データの読み込み
read.csv()を用いて学習データ、テストデータ、提出データを読み込みます。
```R
train = read.csv("/kaggle/input/titanic/train.csv", header = TRUE)
test = read.csv("/kaggle/input/titanic/test.csv", header = TRUE)
gender_submission = read.csv("/kaggle/input/titanic/gender_submission.csv", header = TRUE)
```

## データの可視化
ggplot2を用いてデータを可視化します。
### Survivedの可視化
Survivedのカウントを可視化します。
```R
ggplot(train, aes(x = factor(Survived), fill = factor(Survived))) + geom_bar()
```
![Unknown-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569835/dbe1f08f-978d-2e6b-5861-e66d74546ba9.png)

### SurvivedとPclassの可視化
Pclassごとの生存率を可視化します。
```R
survival_rate = aggregate(Survived ~ Pclass, train[c("Pclass", "Survived")], mean)
survival_rate$Pclass = factor(survival_rate$Pclass, levels = c("1", "2", "3"))
ggplot(survival_rate, aes(x = Pclass, y = Survived, fill = Pclass)) + geom_col()
```
![Unknown-7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569835/19925c29-0baa-27a1-d777-63e9ff30c060.png)

PclassごとのSurvivedのカウントを可視化します。
```R
ggplot(train, aes(x = Pclass, fill = factor(Survived))) + geom_bar(position = "dodge")
```
![Unknown-8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569835/3d6a161f-9f09-33bd-b521-617f7efa7d37.png)

### SurvivedとSexの可視化
Sexごとの生存率を可視化します。
```R
survival_rate = aggregate(Survived ~ Sex, train[c("Sex", "Survived")], mean)
survival_rate$Sex = factor(survival_rate$Sex, levels = c("male", "female"))
ggplot(survival_rate, aes(x = Sex, y = Survived, fill = Sex)) + geom_col()
```
![Unknown-6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569835/04abd012-1f79-c9db-8f2c-84f93133955d.png)

SexごとのSurvivedのカウントを可視化します。
```R
ggplot(train, aes(x = Sex, fill = factor(Survived))) + geom_bar(position = "dodge")
```
![Unknown-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569835/6c72573c-72b1-6ce8-bffd-be928f94604d.png)

### SurvivedとAgeの可視化
Survivedごとのヒストグラムを作成します。
```R
ggplot(train, aes(x = Age, fill = factor(Survived))) + geom_histogram(position = "identity", alpha = 0.5)
```
![Unknown-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569835/d730ec5f-a38d-b352-2d0a-30ea5958d5b3.png)

### SurvivedとFareの可視化
Survivedごとのヒストグラムを作成します。
```R
ggplot(train, aes(x = Fare, fill = factor(Survived))) + geom_histogram(position = "identity", alpha = 0.5)
```
![Unknown-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569835/d95a07db-a87d-5d2e-ecef-086aef6ec458.png)

## データ前処理
### trainとtestの連結
```R
data = bind_rows(train, test)
```

### 欠損値の確認
```R
colSums(is.na(data))
```
```
PassengerId: 0 Survived: 418 Pclass: 0 Name: 0 Sex: 0 Age: 263 SibSp: 0 Parch: 0 Ticket: 0 Fare: 1 Cabin: 0 Embarked: 0
```

### Sex
```R
data$Sex = as.numeric(factor(data$Sex, levels = c('male', 'female')))
```

### Age
```R
data$Age[is.na(data$Age)] = median(data$Age, na.rm = TRUE)
```

### Embarked
```R
data = data %>%
  mutate(Embarked = ifelse(is.na(Embarked), 'S', Embarked))

data$Embarked = as.numeric(factor(data$Embarked, levels = c('S', 'C', 'Q')))
```

### Fare
```R
data$Fare[is.na(data$Fare)] = mean(data$Fare, na.rm = TRUE)
```

### Name、PassengerId、Ticket、Cabinの削除
```R
delete_columns = c('Name', 'PassengerId', 'Ticket', 'Cabin')
data = data %>% select(-one_of(delete_columns))
```

### 学習データとテストデータの抽出
```R
train = data[1:nrow(train), ]
test = data[(nrow(train) + 1):nrow(data), ]
```
```R
X_train = train %>% select(-Survived)
y_train = train$Survived
X_test = test %>% select(-Survived)
```

## 学習
```R
model = glm(y_train ~ ., data = data.frame(cbind(y_train, X_train)))
```
```R
y_pred = predict(model, newdata = data.frame(X_test), type = "response")
y_pred = as.numeric(y_pred >= 0.5)
```

## データの出力
```R
gender_submission$Survived = as.integer(y_pred)
write.csv(gender_submission, file = "submission.csv", row.names = FALSE)
```
Public Scoreは0.76794でした。
RでもKaggleに参加できることがわかりました。
Rでコンペに参加することにより、Rのスキルを高めていきたいです。

# 参考文献
https://www.kaggle.com/learn-guide/r
https://www.kaggle.com/code/sishihara/upura-kaggle-tutorial-01-first-submission
https://ct-innovation01.xyz/DL-Freetime/kaggle-003/