rで学ぶデータマイニングi 第8章〜第13章

60
Rで学ぶデータマイニング 8章~第132014/3/29() TokyoR #37 @Prunus1350

Upload: prunus-1350

Post on 04-Jul-2015

2.031 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Rで学ぶデータマイニングI 第8章〜第13章

Rで学ぶデータマイニング第8章~第13章

2014/3/29(土) TokyoR #37

@Prunus1350

Page 2: Rで学ぶデータマイニングI 第8章〜第13章

自己紹介

• ぷるうぬす• 職業:SASエンジニア

• 確率・統計、機械学習、数学とか勉強中• 「はじめてのパターン認識」読書会を主催• Twitter : @Prunus1350

• prunusはラテン語で「桜」という意味

• 気軽に「ぷるさん」って呼ぶといいですよ。

Page 3: Rで学ぶデータマイニングI 第8章〜第13章

新しいテキスト

• Rで学ぶデータマイニングⅠデータ解析編

http://www.amazon.co.jp/dp/4274067467

Page 4: Rで学ぶデータマイニングI 第8章〜第13章

Rで学ぶデータマイニング

• 第1章 Rのインストール

• 第2章 Rの起動

• 第3章 Rの終了

• 第4章 簡単な計算方法

• 第5章 R用エディタと本文の記載方法について

• 第6章 パッケージの呼び出しとインストール

• 第7章 関数の使用方法と定義方法

Page 5: Rで学ぶデータマイニングI 第8章〜第13章

Rで学ぶデータマイニング

• 第1章 Rのインストール

• 第2章 Rの起動

• 第3章 Rの終了

• 第4章 簡単な計算方法

• 第5章 R用エディタと本文の記載方法について

• 第6章 パッケージの呼び出しとインストール

• 第7章 関数の使用方法と定義方法

飛ばします!!@doradora09 さんの資料を見よう!

Page 6: Rで学ぶデータマイニングI 第8章〜第13章

第8章演算子・条件分岐・繰り返し

Page 7: Rで学ぶデータマイニングI 第8章〜第13章

8.1比較演算子・論理演算子

Page 8: Rで学ぶデータマイニングI 第8章〜第13章

8.1 比較演算子・論理演算子• Rには値どうしの大小比較や論理演算を行うための演算子が用意されています。

演算子 意味

<= ≦

< <

>= ≧

> >

== 等しい

!= 等しくない

& かつ

| または

Page 9: Rで学ぶデータマイニングI 第8章〜第13章

8.1 比較演算子・論理演算子• 使用例

> x <- 2

> x <= 3 # 「xが3以下」か

[1] TRUE

> (0 < x) & (x < 1) # 「xが0より大きい」かつ「xが1より小さい」か

[1] FALSE

Page 10: Rで学ぶデータマイニングI 第8章〜第13章

8.1 比較演算子・論理演算子• 値どうしを比較する場合(ベクトルのような複数の値が入った変数どうしではない場合)は、& や | の代わりに&& や || を使うことができる。

> x <- 2

> (0 < x) && (x < 1) # 「xが0より大きい」かつ「xが1より小さい」か

[1] FALSE

> (0 < x) || (x < 1) # 「xが0より大きい」または「xが1より小さい」か

[1] TRUE

Page 11: Rで学ぶデータマイニングI 第8章〜第13章

8.1 比較演算子・論理演算子• ベクトルのような複数の値が入った変数を比較するときに && や || を使うと、先頭の値のみを比較した結果しか返ってこないので要注意。

> x <- c(T, F, T); y <- c(F, T, T) ; z <- c(T, T, T)

> x && y # 先頭の値しか比較されない

[1] FALSE

> x && z # 先頭の値しか比較されない

[1] TRUE

> x & y # 要素同士が比較される

[1] FALSE FALSE FALSE

Page 12: Rで学ぶデータマイニングI 第8章〜第13章

8.2条件分岐:if

Page 13: Rで学ぶデータマイニングI 第8章〜第13章

8.2 条件分岐:if• ある条件で場合分けをして処理を行いたいときには、if文を使います。

• 使用例

> x <- -1

> if (x > 0) {x <- -x} # 関数abs()と同じ処理

> x # xの値を確認

[1] 1

> if (条件式) {条件式が Ture ならば実行する式}

Page 14: Rで学ぶデータマイニングI 第8章〜第13章

8.2 条件分岐:if• if文を使った関数の例

> f <- function(x){

+ if (x < 0) {x <- -x} # 関数abs()と同じ処理

+ return(x) # xの値を返す

+ }

> f(-1)

[1] 1

Page 15: Rで学ぶデータマイニングI 第8章〜第13章

8.3繰り返し:for

Page 16: Rで学ぶデータマイニングI 第8章〜第13章

8.3 繰り返し:for• 同じような処理を繰り返し行いたいときには、for文を使うことができます。(処理が遅いので、使いどころには要注意)

> x <- 0

> for (i in 1:5) {x <- x + 1} # xに5回だけ1を足す

> x

[1]5

Page 17: Rで学ぶデータマイニングI 第8章〜第13章

8.3 繰り返し:for• for文を使った関数の例

> f <- function(x){

+ for (i in 1:5) {x <- x + 1} # xに5回だけ1を足す

+ return(x) # xの値を返す

+ }

> f(0)

[1] 5

Page 18: Rで学ぶデータマイニングI 第8章〜第13章

第9章ベクトル

Page 19: Rで学ぶデータマイニングI 第8章〜第13章

9.1ベクトルの作成

Page 20: Rで学ぶデータマイニングI 第8章〜第13章

9.1 ベクトルの作成• 複数の値を一つの変数に代入するときには、関数 c( ) を使います。

> (x <- c(4, 5, 6))

[1] 4 5 6

> (y <- c(4:6)) # 演算子「:」を使って等差数列を得る

[1] 4 5 6

Page 21: Rで学ぶデータマイニングI 第8章〜第13章

9.2ベクトル用の関数

Page 22: Rで学ぶデータマイニングI 第8章〜第13章

9.2 ベクトル用の関数• 関数をベクトルに適用すれば、各要素ごとに関数が適用されて結果が得られます。

> x <- c(4, 5, 6)

> sqrt(x)

[1] 2.000000 2.236068 2.449490

Page 23: Rで学ぶデータマイニングI 第8章〜第13章

9.2 ベクトル用の関数• ベクトルに対する関数も用意されています。

> length(x) # ベクトルの要素の個数を調べる関数

[1] 3

Page 24: Rで学ぶデータマイニングI 第8章〜第13章

9.2 ベクトル用の関数• Rには値どうしの大小比較や論理演算を行うための演算子が用意されています。

関数 意味

sum() 総和

mean() 平均

var() 不偏分散

median() 中央値

cor() 相関係数

max() 最大値

min() 最小値

prod() 総積

cumsum() 累積和

sd() 標準偏差

関数 意味

sort() 昇順整列

rev() 要素を逆順

pmax() 並列最大値

pmin() 並列最小値

range() 範囲

match() 引数のマッチング

diff() 前進差分

rank() 整列した各要素の順位

order() 整列した各要素の元の位置

Page 25: Rで学ぶデータマイニングI 第8章〜第13章

9.2 ベクトル用の関数• 標準誤差を求める関数の作成例

> se <- function(x){

+ return(sd(x) / sqrt(length(x))) # 標準誤差を求める

+ }

> se(c(1, 3, 3, 3, 3, 5, 5, 5))

[1] 0.5

Page 26: Rで学ぶデータマイニングI 第8章〜第13章

9.3ベクトル要素の取り出し

Page 27: Rで学ぶデータマイニングI 第8章〜第13章

9.3 ベクトル要素の取り出し• ベクトルの要素には頭から順に 1 , 2, 3 … と番号が振られており、その番号を指定することで、特定の要素を取り出すことができます。

> x <- c(4, 5, 6)

> x[3] # ベクトルxの3番目の要素を取り出す

[1] 6

> x[x>=5] # ベクトルxの要素のうち、値が5以上の要素を取り出す

[1] 5 6

Page 28: Rで学ぶデータマイニングI 第8章〜第13章

9.3 ベクトル要素の取り出し• ベクトルの要素の取り出し方法

コマンド 機能

x[k] k番目の要素を取り出す

x[k] <- a k番目の要素をaに変更する

x[正整数ベクトル] いくつかの要素をまとめて取り出す

x[条件式] 条件に合致した要素を取り出す

c(x, y) ベクトルxの後ろにベクトルyを結合する

Page 29: Rで学ぶデータマイニングI 第8章〜第13章

9.3 ベクトル要素の取り出し• 2つのベクトルを結合する例

> x <- c(1, 2)

> y <- c(4, 8)

> c(x, y) # 関数append(x, y)でも可

[1] 1 2 4 8

Page 30: Rで学ぶデータマイニングI 第8章〜第13章

第10章種々のベクトル

Page 31: Rで学ぶデータマイニングI 第8章〜第13章

10.1論理型ベクトル

Page 32: Rで学ぶデータマイニングI 第8章〜第13章

10.1 論理型ベクトル• 論理値(TRUE, FALSE)を要素とするベクトルを論理型ベクトルと呼びます。

> c(T, F, T)

[1] TRUE FALSE TRUE

> c(T, F, T) | c(T, F, F) # or

[1] TRUE FALSE TRUE

> !c(T, F, T) # not

[1] FALSE TRUE FALSE

> xor(c(T, F, T), c(T, F, F)) # xor(排他的論理和)

[1] FALSE FALSE TRUE

Page 33: Rで学ぶデータマイニングI 第8章〜第13章

10.2文字型ベクトル

Page 34: Rで学ぶデータマイニングI 第8章〜第13章

10.2 文字型ベクトル• 文字列を要素とするベクトルを文字型ベクトルと呼びます。

> (x <- c(“A”, “B”, “C”))

[1] “A” “B” “C”

> x > “b” # 辞書式順序による大小関係の比較

[1] FALSE TRUE TRUE

Page 35: Rで学ぶデータマイニングI 第8章〜第13章

10.2 文字型ベクトル• 関数 paste( ) で文字どうしを結合することができます。

> paste(“May I”, “help you ?”)

[1] “May I help you ?”

Page 36: Rで学ぶデータマイニングI 第8章〜第13章

10.3因子型ベクトル

Page 37: Rで学ぶデータマイニングI 第8章〜第13章

10.3 因子型ベクトル• 関数 factor( ) を使用することで、カテゴリーを要素とした因子型ベクトルを作成することができます。

> x <- rep(c(“S”, “M”, “L”), 3)

> (fc <- factor(x)) # 要素をグループ化

[1] S M L S M L S M L

Levels: L M S

> levels(fc) # グループ化されているか確認

[1] “L” “M” “S”

Page 38: Rで学ぶデータマイニングI 第8章〜第13章

10.3 因子型ベクトル• 明示的に要素の順序を指定するときには、関数 factor( ) の引数levelsに順序を指定します。

> x <- rep(c(“S”, “M”, “L”), 3)

> (fc <- factor(x, levels = c(“S”, “M”, “L”)))

[1] S M L S M L S M L

Levels: S M L

Page 39: Rで学ぶデータマイニングI 第8章〜第13章

10.3 因子型ベクトル• 説明文

> x <- rep(c(“S”, “M”, “L”), 3)

> fc <- orderd(x, levels = c(“S”, “M”, “L”))

> str(fc) # オブジェクトの要約値を表示

Ord.factor w/ 3 levels: “S” < “M” < “L” : 1 2 3 1 2 3 1 2 3

Page 40: Rで学ぶデータマイニングI 第8章〜第13章

10.4型の検査・型の変換

Page 41: Rで学ぶデータマイニングI 第8章〜第13章

10.4 型の検査・型の変換• データの型を調べたり変換したりするときには、下記の関数を使います。

型 検査関数 変換関数

実数 is.numeric() as.numeric()

整数 is.integer() as.integer()

複素数 is.complex() as.complex()

文字列 is.character() as.character()

論理値 is.logical() as.logical()

Page 42: Rで学ぶデータマイニングI 第8章〜第13章

第11章行列

Page 43: Rで学ぶデータマイニングI 第8章〜第13章

11.1行列の作成

Page 44: Rで学ぶデータマイニングI 第8章〜第13章

11.1 行列の作成• Rでは下記の手順で行列を作成します。

• 行列作成の例

> matrix(1:4, nrow = 2, ncol = 2)

[,1] [,2]

[1,] 1 3

[2,] 2 4

1. 行列の要素をベクトルで用意する2. 関数 matrix(ベクトル, 行数, 列数) でベクトルから行列に変換する

Page 45: Rで学ぶデータマイニングI 第8章〜第13章

11.1 行列の作成• 関数matrix( ) の引数byrowをTrueにした方が、入力と作成される行列の見た目が同じになるのでお勧めです。

> matrix(c(1, 2,

3, 4), nrow = 2, byrow = T)

[,1] [,2]

[1,] 1 2

[2,] 3 4

Page 46: Rで学ぶデータマイニングI 第8章〜第13章

11.2行列の計算

Page 47: Rで学ぶデータマイニングI 第8章〜第13章

11.2 行列の計算• 行列どうしの演算を行うことができます。

> A <- matrix(1:4, 2, 2)

> B <- matrix(0:3, 2, 2)

> AA <- A + B – A %*% B # 行列の和・差・積

> BB <- A * B # 要素ごとの掛け算

Page 48: Rで学ぶデータマイニングI 第8章〜第13章

11.2 行列の計算• Rには行列操作を行う関数が多数用意されています。

コマンド 機能

chol(X) 正値対称行列Xのコレスキー分解を行う

det(X) 行列Xの行列式を求める

diag(3) 3×3の単位行列を作成する

eigen(X) 行列Xの固有値と固有ベクトルを求める

ginv(X) 行列Xのムーア・ペンローズ型一般化逆行列を求める(library(MASS)を読み込む必要あり)

matrix(0,nrow=2,ncol=3) 2行3列のゼロ行列を作成する

qr(X) 行列XのQR分解を行う

solve(X) 行列Xの逆行列を求める

svd(X) 行列Xの特異値分解を行う

t(X) 行列Xを転置する

Page 49: Rで学ぶデータマイニングI 第8章〜第13章

11.2 行列の計算• 関数 t( ) を使った行列転置の例

> (A <- matrix(1:4, 2, 2))

[,1] [,2]

[1,] 1 3

[2,] 2 4

> t(A)

[,1] [,2]

[1,] 1 2

[2,] 3 4

Page 50: Rで学ぶデータマイニングI 第8章〜第13章

11.3行列要素の取り出し

Page 51: Rで学ぶデータマイニングI 第8章〜第13章

11.3 行列要素の取り出し• 行は上から順に1, 2, 3… と、列は左から順に1, 2, 3… と番号が振られて

おり、その番号を指定することで特定の要素を取り出すことができます。

> (A <- matrix(5:8, 2, 2))

[,1] [,2]

[1,] 5 7

[2,] 6 8

> A[1, 2] # 行列A の 1行 2列目 の要素を取り出す

[1] 7

> A[1, ] # 行列A の 1行目 の要素を取り出す

[1] 5 7

Page 52: Rで学ぶデータマイニングI 第8章〜第13章

第12章欠損値NA

Page 53: Rで学ぶデータマイニングI 第8章〜第13章

12 欠損値NA• Rには「欠測・何もない」ということを表すNA が用意されています。

> (x <- c(1, 2, NA, 4, 5))

[1] 1 2 NA 4 5

> x == NA # これではどの要素が NA であるか調べることができない

[1] NA NA NA NA NA

Page 54: Rで学ぶデータマイニングI 第8章〜第13章

12 欠損値NA• NA値の検査を行う関数として、関数 is.na( ) があります。

> x <- c(1, 2, NA, 4, 5)

> is.na(x)

[1] FALSE FALSE TRUE FALSE FALSE

Page 55: Rで学ぶデータマイニングI 第8章〜第13章

12 欠損値NA• 例えば関数 sum などでは、引数ベクトルの中に1つでもNA が含まれると結果がうまく返ってきません。

> x <- c(1, 2, NA, 4, 5)

> sum(x)

[1] NA

> (y <- x[!is.na(x)]) # NA 以外のものを y に代入

[1] 1 2 4 5

> sum(y)

[1] 12

Page 56: Rで学ぶデータマイニングI 第8章〜第13章

第13章作業ディレクトリの変更

Page 57: Rで学ぶデータマイニングI 第8章〜第13章

13 作業ディレクトリの変更• ファイルからデータやプログラムを読み込んだり、ファイルにデータを書き出したりする場所を作業ディレクトリと呼びます。

• 作業ディレクトリを変更したり、場所を確認するには下記のようにします。

> setwd(“c:/usr”) # 作業ディレクトリを変更する

> getwd() # 現在の作業ディレクトリを確認する

[1] “c:/usr”

Page 58: Rで学ぶデータマイニングI 第8章〜第13章

Rで分からないことが出てきたら…• 説明文

> help(sin) # 関数sin()に関するヘルプを見る(方法1)

> ?sin # 関数sin()に関するヘルプを見る(方法2)

> help.start() # html形式のヘルプ画面を表示

Page 59: Rで学ぶデータマイニングI 第8章〜第13章

Rで分からないことが出てきたら…• 説明文

> help.search(“solve”) # “solve”という機能を持った関数

> apropos(“solve”) # “solve”という文字を持った関数

Page 60: Rで学ぶデータマイニングI 第8章〜第13章

ご清聴ありがとうございました。