前期にある程度やっていますので,ここは各自で復習しておいてください。
Rは一問一答式のプログラム言語です。 四則演算,関数の使い方,代入方法などについて順に説明していきます。 å ### 四則演算
2+3
## [1] 5
3-4
## [1] -1
5*6
## [1] 30
6/3
## [1] 2
sqrt(4)
## [1] 2
help(sqrt)
obj <- 2
obj
## [1] 2
obj <- 3
obj
## [1] 3
obj2 <- 2
obj3 <- 3
obj2 + obj3
## [1] 5
obj <- c(1,2,3)
obj
## [1] 1 2 3
obj <- c(1:10)
obj
## [1] 1 2 3 4 5 6 7 8 9 10
obj * 2
## [1] 2 4 6 8 10 12 14 16 18 20
obj <- matrix(c(1:10),nrow=5)
obj
## [,1] [,2]
## [1,] 1 6
## [2,] 2 7
## [3,] 3 8
## [4,] 4 9
## [5,] 5 10
obj <- matrix(c(1:10),nrow=5,byrow=T)
obj
## [,1] [,2]
## [1,] 1 2
## [2,] 3 4
## [3,] 5 6
## [4,] 7 8
## [5,] 9 10
obj *2
## [,1] [,2]
## [1,] 2 4
## [2,] 6 8
## [3,] 10 12
## [4,] 14 16
## [5,] 18 20
行列の計算や,行列用の関数については自分で調べてね。
obj <- list(name=c("kosugi","tanaka","suzuki"),
gender=c("male","female","male"),
hight=c(170,160),
weight=c(70.6,80.9,90.6,40.3)
)
obj
## $name
## [1] "kosugi" "tanaka" "suzuki"
##
## $gender
## [1] "male" "female" "male"
##
## $hight
## [1] 170 160
##
## $weight
## [1] 70.6 80.9 90.6 40.3
obj$name
## [1] "kosugi" "tanaka" "suzuki"
obj$weight
## [1] 70.6 80.9 90.6 40.3
str(obj)
## List of 4
## $ name : chr [1:3] "kosugi" "tanaka" "suzuki"
## $ gender: chr [1:3] "male" "female" "male"
## $ hight : num [1:2] 170 160
## $ weight: num [1:4] 70.6 80.9 90.6 40.3
obj <- data.frame(
list(name=c("kosugi","tanaka","suzuki"),
gender=c(1,2,1),
hight=c(170,160,170),
weight=c(70.6,80.9,90.6)
)
)
obj
## name gender hight weight
## 1 kosugi 1 170 70.6
## 2 tanaka 2 160 80.9
## 3 suzuki 1 170 90.6
str(obj)
## 'data.frame': 3 obs. of 4 variables:
## $ name : Factor w/ 3 levels "kosugi","suzuki",..: 1 3 2
## $ gender: num 1 2 1
## $ hight : num 170 160 170
## $ weight: num 70.6 80.9 90.6
obj$gender
## [1] 1 2 1
obj$gender <- factor(obj$gender,labels=c("male","female"))
obj
## name gender hight weight
## 1 kosugi male 170 70.6
## 2 tanaka female 160 80.9
## 3 suzuki male 170 90.6
str(obj)
## 'data.frame': 3 obs. of 4 variables:
## $ name : Factor w/ 3 levels "kosugi","suzuki",..: 1 3 2
## $ gender: Factor w/ 2 levels "male","female": 1 2 1
## $ hight : num 170 160 170
## $ weight: num 70.6 80.9 90.6
obj$hight
## [1] 170 160 170
obj[3,]
## name gender hight weight
## 3 suzuki male 170 90.6
obj[,2]
## [1] male female male
## Levels: male female
obj[3,2]
## [1] male
## Levels: male female
obj[3,2] <- NA
obj
## name gender hight weight
## 1 kosugi male 170 70.6
## 2 tanaka female 160 80.9
## 3 suzuki <NA> 170 90.6
summary(obj)
## name gender hight weight
## kosugi:1 male :1 Min. :160.0 Min. :70.60
## suzuki:1 female:1 1st Qu.:165.0 1st Qu.:75.75
## tanaka:1 NA's :1 Median :170.0 Median :80.90
## Mean :166.7 Mean :80.70
## 3rd Qu.:170.0 3rd Qu.:85.75
## Max. :170.0 Max. :90.60
Rが持っているサンプルデータを使ってプロットしてみましょう。
data(iris)
summary(iris)
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
## 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
## Median :5.800 Median :3.000 Median :4.350 Median :1.300
## Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
## 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
## Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
## Species
## setosa :50
## versicolor:50
## virginica :50
##
##
##
hist(iris$Sepal.Length)
plot(iris$Sepal.Length,iris$Sepal.Width)
plot(iris$Sepal.Length,iris$Sepal.Width,pch=21,bg=c(2,3,4)[iris$Species])
boxplot(iris$Sepal.Length~iris$Species)
mean(iris$Sepal.Length)
## [1] 5.843333
median(iris$Sepal.Length)
## [1] 5.8
var(iris$Sepal.Length)
## [1] 0.6856935
sd(iris$Sepal.Length)
## [1] 0.8280661
cor(iris$Sepal.Length,iris$Sepal.Width)
## [1] -0.1175698
実際に自分のデータを分析する時は,外部ファイルから読み込むことが一般的です。 配布しているデータセットのうち,「ball2017.csv」を読み込んでみましょう。
# ファイルを読み込んでbaseballという名前にする
# ファイルのコード形式は今回UTF-8
# head=Tは「1行目が変数名ですよ」という意味
baseball <- read.csv("ball2017.csv",fileEncoding = "UTF-8",head=T)
# 要約を見る
summary(baseball)
## name team league height
## T-岡田 : 1 ソフトバンク: 8 Central:36 Min. :171.0
## ウィーラー : 1 巨人 : 8 Pacific:42 1st Qu.:177.0
## エルドレッド: 1 広島 : 8 Median :180.0
## ゲレーロ : 1 日本ハム : 8 Mean :180.7
## ダフィー : 1 オリックス : 7 3rd Qu.:183.8
## デスパイネ : 1 西武 : 7 Max. :198.0
## (Other) :72 (Other) :32
## weight PA AB HR
## Min. : 66.00 Min. :156.0 Min. :137.0 Min. : 0.00
## 1st Qu.: 79.25 1st Qu.:310.2 1st Qu.:270.8 1st Qu.: 3.00
## Median : 86.00 Median :469.0 Median :402.5 Median : 9.00
## Mean : 87.95 Mean :437.6 Mean :382.9 Mean :12.67
## 3rd Qu.: 95.00 3rd Qu.:575.5 3rd Qu.:503.8 3rd Qu.:19.75
## Max. :122.00 Max. :679.0 Max. :575.0 Max. :35.00
##
## K pay
## Min. : 21.00 Min. : 4300
## 1st Qu.: 56.25 1st Qu.: 7000
## Median : 73.00 Median :11000
## Mean : 77.55 Mean :15772
## 3rd Qu.: 99.50 3rd Qu.:22375
## Max. :157.00 Max. :50000
##
# データの頭,最後だけ見る
head(baseball)
## name team league height weight PA AB HR K pay
## 1 T-岡田 オリックス Pacific 187 100 593 504 31 141 10000
## 2 ウィーラー 楽天 Pacific 178 100 605 542 31 98 10000
## 3 エルドレッド 広島 Central 196 122 405 344 27 111 11000
## 4 ゲレーロ 中日 Central 182 99 510 469 35 98 15000
## 5 ダフィー ロッテ Pacific 191 98 183 164 6 61 8200
## 6 デスパイネ ソフトバンク Pacific 175 95 545 478 35 119 40000
tail(baseball)
## name team league height weight PA AB HR K pay
## 73 明石 健志 ソフトバンク Pacific 175 66 339 290 1 57 5500
## 74 柳田 悠岐 ソフトバンク Pacific 188 93 551 448 31 123 26500
## 75 雄平 ヤクルト Central 174 83 300 281 2 42 7000
## 76 陽 岱鋼 巨人 Central 183 89 381 330 9 80 16000
## 77 鈴木 誠也 広島 Central 181 90 512 437 26 80 6000
## 78 鈴木 大地 ロッテ Pacific 175 79 588 508 11 85 10000
身長と体重のデータだけ抜き出してみましょう。
# 抜き出す関数
physical <- subset(baseball,select=c("height","weight"))
# プロットしてみる
# ヒストグラム=度数分布がわかる
hist(physical$height)
hist(physical$weight)
# 散布図=相関関係がわかる
plot(physical$height,physical$weight)
# 相関係数は数字で出せる
cor(physical)
## height weight
## height 1.0000000 0.6888977
## weight 0.6888977 1.0000000
** データは図にする。プロットする。** これが分析の基本です。まずデータがどういう特徴を持っているかを,しっかりと目で把握しましょう。 それができていないと,データにモデルを当てはめるという話が始まりませんので。
histやplotなどの基本的な描画関数でも図を書くことはできますが,この授業ではggplot2というパッケージを推奨します。 その理由は,「図版の設計図に基づく書き方をする」,という考えがしっかりと身につくからです。
ggplotでは,一枚の図を書くのに次のような手順をとります。
最初に自分がどういう絵を描くか,イメージしてください!
データは「データフレーム型」で渡す必要があります。 read.csvなどで読み込んだ場合はデータフレーム型にもうなっているので気にしなくていいです。
また,群わけなどを行う場合は,「factor型」(名義尺度水準)になっていることが重要です。 str関数などで,ファイルの形をしっかり確認しておきましょう。
str(baseball)
## 'data.frame': 78 obs. of 10 variables:
## $ name : Factor w/ 78 levels "T-岡田","ウィーラー",..: 1 2 3 4 5 6 7 8 9 10 ...
## $ team : Factor w/ 12 levels "DeNA","オリックス",..: 2 6 8 11 5 3 5 4 11 8 ...
## $ league: Factor w/ 2 levels "Central","Pacific": 2 2 1 1 2 2 2 1 1 1 ...
## $ height: int 187 178 196 182 191 175 191 185 185 180 ...
## $ weight: int 100 100 122 99 98 95 91 100 108 91 ...
## $ PA : int 593 605 405 510 183 545 289 519 367 252 ...
## $ AB : int 504 542 344 469 164 478 269 445 332 219 ...
## $ HR : int 31 31 27 35 6 35 10 32 18 15 ...
## $ K : int 141 98 111 98 61 119 97 112 52 72 ...
## $ pay : int 10000 10000 11000 15000 8200 40000 14000 33000 17000 7340 ...
持ってない人は,探索的データプロットのパッケージ,ggplot2をインストールしてください。
install.packages("ggplot2")
インストールしただけでは使えません。library関数(またはrequire関数)で装備します。
library(ggplot2)
# 次のコードはマックユーザ必須。フォントサイズとフォントの指定をしています。
# Windowsユーザは特にしなくても文字化けとかしないので気にしなくてOK
ggplot()+theme_set(theme_bw(base_size = 14,base_family="HiraKakuProN-W3"))
まずはデータと全体設定を持ったggplotオブジェクトを作ります。 aesはaesthetic(美学)の意味です。x軸,y軸の指定,色分けの指定をまずします。
# データセットをわたし,その中の変数でx軸,y軸の情報を追加。
gp <- ggplot(baseball,aes(x=height,y=K,color=team))
点を打ってみましょう。
gp_point <- gp + geom_point()
plot(gp_point)
色だけじゃなく,大きさや形状を変えてプロットすることもできます。
gp <- ggplot(baseball,aes(x=height,y=K,color=team,shape=league,size=weight))
gp_point <- gp + geom_point()
plot(gp_point)
タイトルや軸ラベルも書いておきましょう。
gp_point <- gp + geom_point()+xlab("身長")+ylab("三振の数")+ggtitle("野球選手の身長と三振の関係")
plot(gp_point)
画を複数に分けることもできます。
gp_point <- gp + geom_point()+facet_wrap(~team)
plot(gp_point)
横軸がカテゴリカルであれば,箱ひげ図や棒グラフになります。
# チームごとの年収に変えます
gp <- ggplot(baseball,aes(x=team,y=pay,fill=team))
# 箱ひげ図
gp_box <- gp + geom_boxplot()
plot(gp_box)
# 棒グラフ
gp_bar <- gp + geom_bar(stat="identity",position="dodge")
plot(gp_bar)
棒グラフは特に指定しないと「最大値の表示」になってしまうので,平均や中央値が欲しい場合は次のように関数を指定してやる必要があります。
# 平均で表示
gp_bar <- gp + stat_summary(fun.y=mean,geom="bar",position="dodge")
plot(gp_bar)
# 中央値で表示
gp_bar <- gp + stat_summary(fun.y=median,geom="bar",position="dodge")
plot(gp_bar)
エラーバーを追加する例。
gp_bar <- gp + stat_summary(fun.y=mean,geom="bar",position="dodge") +
stat_summary(fun.data=mean_se,geom="errorbar",width=0.5)
plot(gp_bar)
様々な角度からデータをプロットし,分布の形状や変数間関係をしっかり見極める癖をつけましょう。
もう一つのデータセットを読み込んでグラフを描くのが課題です。
ヒント;baseballのデータセットを使います。
ヒント;owarai1.csvのデータセットを使います。
ヒント;owarai2のデータセットを使います。