More Related Content More from Takashi Minoda (13) Tokyo r21 修正版1. 続
はじめての
TOKYO.R #21
簑田 高志
<#>
3. 自己紹介
• 名前 :簑田 高志
• Twitter :aad34210
• ブログ :http://pracmper.blogspot.com/
• 出身地 :熊本県
• 出身学部 :法学部
• 仕事 :インターネット広告のアナリスト
4. 前回までのあらすじ
• はじめてRをさわる方、Rを触り初めて数カ月の方に向
けて、Rの基礎的な部分をお話ししました。
• どんな内容だったかというと…
1. インストール
2. 起動と終了
3. demo()の利用
4. データへのアクセス方法
5. データ集計方法
6. 関数
7. 自作関数(Function)
8. パッケージ
• 前回の資料はSlideshareに公開しています。
http://www.slideshare.net/aad34210/tokyo-r18
5. 今回の話
• 今回の話は前回の続き。
• Rの基礎編です。
i. 条件分岐
ii. ループ
iii.グラフ作成
iv.統計解析
• 資料中は、コードと例文を以下のようにハイライト
しています。
• 基本コード:Sample
• 例文: Sample
9. 条件分岐
• 条件分岐とは?
• ある条件で場合分けをしたい場合はIf文、Else文を使う。
• if (条件文){処理内容}
• 例えば…
• 売上金額が10万以上であれば、A-Class、それ以外はOther。
x <- 100000
if (x >= 100000)
{print ("A-Class")} else {print("Other")}
10. 条件分岐
• IFELSE文
• IFELSE文で一つのコードでIF文ができる。
• ifelse(条件,データが真の場合,偽の場合)
• 例えば…
• 売上金額が10万以上であれば、Aクラス、それ以外はOther。
x <- 100000
ifelse(x >= 100000 , "A-Class" , "B-Class")
11. 条件分岐
• SWITCH文
• 複数の条件で分岐させたい場合
• switch(データ,ケース1 , ケース2 , 一致する場合がないケース)
• 例えば…
• Tokyoから売上が上がっている場合は、Japanを。それ以外はOther
city <- "Tokyo”
switch(city ,"Tokyo" = print("Japan") , print("Other"))
14. FOR文
• For文
• ある処理を繰り返し行いたい場合に利用する。
• for (ループ変数 in リスト) {処理}
• 例えば…
• 1〜5までを合計する。
x <- 0
for (i in 1:5) {x <- x +1}
x
• ベクトルを表示させる。
x <- c(10000 , 20000 , 30000)
for (i in 1:length(x)){print(x[i])}
15. WHILE文
• While文
• ある条件が成り立っている場合にずっとループ処理をし続ける。
• 注意:ずっと条件が成り立っている場合は、無限ループしてしまう
ので、気をつけること。
• while (条件式) {処理}
• 例えば…
• 5以下を足し続ける。
x <- 0
while (x <= 4) {x <- x +1}
x
16. 例題(1)
• IF文(条件分岐)、For文(繰り返し)、Function(自作関数(前回説
明))を組み合わせると、処理がまとまり、関数化することができる。
• → 処理の自動化が可能。
• 問題
• 1〜100までの数字の中で、2の倍数であれば、“Fiz”、それ以外は数を
表示するプログラムを作成しなさい。
• 回答
• For文で1:100までをベクトル生成
• 2の倍数:“%%”で余りを計算
• 2の倍数の余りをIFELSE文で判定。
• Print文で表示
for (i in 1:100) {print(ifelse( i%%2 == 0 , "Fizz" , i ))}
17. 例題(2)
• 前のページの問題は意外とすぐにとける
• では、 世界のナベアツでやってみよう。
• 問題
• 1〜100までの数字の中で、
• 3の倍数 :“Aho” と表示
• 5 の倍数 :“アホ” と表示
• 回答
• For文で1:100までをベクトル生成
• 3の倍数:“%%”で余りを計算し割り切れる数を判定
• 5の倍数:“%%”で余りを計算し割り切れる数を判定
• それぞれIF文で“Aho”か“アホ”か判定
• Print文で表示
18. 例題(3)
for( i in 1:100) {
if (i%%3 == 0 ) {print("Aho")}
else if (i%%5 == 0) {print("アホ")}
else {print(i)}
}
関数化(Function)にしてみよう。
利用する変数
・ベクトル数 :n
・Ahoと表示する倍数 :baisuu1
・アホと表示する倍数 :baisuu2
nabeatsu <- function(n , baisuu1 , baisuu2) {
for( i in 1:n) {
if (i%%baisuu1 == 0 ) {print("Aho")}
else if (i%%baisuu2 == 0) {print("アホ")}
else {print(i)}
}
}
19. 例題(3)本当の世界のナベアツを実装してみた
• 問題で使ったナベアツ問題
• 1〜100までの数字の中で、
• 3の倍数 :“Aho” と表示
• 5 の倍数 :“アホ” と表示
• 本当のナベアツは…
• 1〜100までの数字の中で、
• 3の倍数 :“Aho” と表示 3のつく倍数をアホに
• 3のつく倍数 :“アホ” と表示 しなきゃいけない
• 数字のベクトルであれば「%%」を利用することで、判定が可能。
• でも「3がつく数」ってどう判定するのか?
• → grepを利用して判定すれば良いかも。
20. 例題(3)本当の世界のナベアツを実装してみた
• 問題
• 1〜100までの数字の中で、
• 3の倍数 :“Aho” と表示
• 3がつく数 :“アホ” と表示
# 3の倍数はアホ、3の着く数字はAho
true_nabeatsu <- function(n , baisuu1 , baisuu2) {
for( i in 1:n) {
if (i%%baisuu1 == 0 ) {print("Aho")}
else if (!i%%baisuu2|grepl(baisuu2,i) == TRUE) {print("アホ")}
else {print(i)}
}
}
true_nabeatsu(100 , 5 , 3)
22. グラフ作成
• データを解析する前に、変数がどのような分布になっているかをビジュ
アルで確認して、データの分布等を確かめる。
• 結果をレポートとしてまとめ、レビュアー(報告者)への理解を深める
ためにグラフを作成する。
• グラフ作成は「奥が深い」ため、今回は代表的なグラフのみ紹介して、
残りのパッケージ等はAppendixとして紹介します。
Edgar Anderson's Iris Data
2.0 2.5 3.0 3.5 4.0 0.5 1.0 1.5 2.0 2.5
7.5
6.5
Sepal.Length
5.5
4.5
Given : depth
100 200 300 400 500 600
2.0 2.5 3.0 3.5 4.0
Sepal.Width
データ
7
6
1,2,3,
5
Petal.Length 165 170 175 180 185 165 170 175 180 185
4
Notched Boxplots
-10
3
2
-15
4,5,6,
1
-20
0.5 1.0 1.5 2.0 2.5
-25
6
7,8,9
-30
Petal.Width
-35
lat
…
-10
4.5 5.5 6.5 7.5 1 2 3 4 5 6 7
4
-15
-20
-25
-30
2
-35
165 170 175 180 185
long
0
1 2 3 4 5 6 7 8 9 10
Group
23. 散布図
• データがどのような散らばり具合をしているのかを調査したい場合、散
布図を描きます。
• plot(x , y)
#ベクトルの表示
data <- c(1:100)
plot(data)
#irisのSepal.lengthとSepal.Widthの散布図
plot(iris[,1] , iris[,2])
#ベクトルの表示 #irisのSepal.lengthと
Sepal.Widthの散布図
100
4.0
80
3.5
60
data
iris[, 2]
3.0
40
2.5
20
2.0
0
0 20 40 60 80 100
4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0
Index
iris[, 1]
24. 散布図
• 変数が多くある場合、変数の1つずつの組み合わせだと手間がかかるの
で、一気に組み合わせてみてみたい場合。
• plot(dataframe)
• pars(dataframe)
#複数変数の散布図組合せ(対散布図)
plot(iris[-5])
#複数変数の対散布図(種類による色分け)
pairs(iris[1:4], pch = 21,bg = c("red" , "green3" ,
"blue")[unclass(iris$Species)])
25. 散布図
#複数変数の散布図組合せ(対散布図) #複数変数の対散布図(種類による色分け)
2.0 2.5 3.0 3.5 4.0 0.5 1.0 1.5 2.0 2.5 2.0 2.5 3.0 3.5 4.0 0.5 1.0 1.5 2.0 2.5
7.5
7.5
6.5
6.5
Sepal.Length Sepal.Length
5.5
5.5
4.5
4.5
2.0 2.5 3.0 3.5 4.0
2.0 2.5 3.0 3.5 4.0
Sepal.Width Sepal.Width
7
7
6
6
5
5
Petal.Length
4
Petal.Length
4
3
3
2
2
1
1
0.5 1.0 1.5 2.0 2.5
0.5 1.0 1.5 2.0 2.5
Petal.Width
Petal.Width
4.5 5.5 6.5 7.5 1 2 3 4 5 6 7
4.5 5.5 6.5 7.5 1 2 3 4 5 6 7
28. 棒グラフ(2)
• データがどの因子でどのぐらいボリュームになっているかを一目で分か
る。
• barplot(データ)
#種類ごとでの棒グラフ
barplot(table(iris[,5]))
#色を付けたい場合
barplot(table(iris[,5]),col = c("red" , "green" ,"yellow"))
#単純な棒グラフ #色つき棒グラフ
50
50
40
40
30
30
20
20
10
10
0
0
setosa versicolor virginica setosa versicolor virginica
29. 棒グラフ(3)
• 先ほどの“Aho”、“アホ”をそれぞれカウントして棒グラフを作ってみま
しょう。
#データフレームの作成
aho_data <- data.frame(1:100)
#グラフ用データの作成
aho_data$hantei <- ifelse(aho_data[,1]%%3 == 0,"aho",ifelse(aho_data[,1]%%5 == 0 ,"アホ","天才
"))
#Barplotの作成
barplot(table(aho_data[,2]) , col = c("green" , "blue" , "red"))
50
40
30
20
10
0
aho
31. 参考(2):demo()
• demo()という関数を利用することで、パッケージの参照デモをみること
ができます。
#demo()のgraphicsを見てみる
demo(graphics)
Given : depth
Edgar Anderson's Iris Data 100 200 300 400 500 600
Notched Boxplots
2.0 2.5 3.0 3.5 4.0 0.5 1.0 1.5 2.0 2.5
7.5
6
6.5
Sepal.Length
5.5
4.5
165 170 175 180 185 165 170 175 180 185
4
-10
2.0 2.5 3.0 3.5 4.0
-15
Sepal.Width
-20
-25
2
-30
7
6
-35
5
lat
Petal.Length
4
-10
3
-15
2
0
1
-20
0.5 1.0 1.5 2.0 2.5
-25
-30
Petal.Width
-35
1 2 3 4 5 6 7 8 9 10
165 170 175 180 185
4.5 5.5 6.5 7.5 1 2 3 4 5 6 7 Group
long
36. まとめ
• IF文
• 条件分岐をさせたい時に利用する。ifelse も使えるよ
• For文
• 繰り返し処理を行いたい場合に利用する。
• 条件が正の場合に繰り返し処理をするWhileもある。
• FizzBuzz
• IF文とFor文を使って、FizzBuzz問題を解く。
• 世界のナベアツもできるよ!
• グラフ作成
• 奥の深い世界…
• demo(graphics)で試してみよう。
• plot,barplot
• ggplot2など様々なパッケージがある。
• 統計解析
• 簡単な関数で、統計量を計算することができる。
• max,min,range,quantile,summary
37. 参考文献・資料
R-Tipe :http://cse.naro.affrc.go.jp/takezawa/r-tips/r.html
The R tips :http://ow.ly/9yFPs
ggplot2 :http://had.co.nz/ggplot/