More Related Content
Similar to データ解析技術入門(R編) (20)
データ解析技術入門(R編)
- 2. 自己紹介
浅井 拓海(26歳)
– 職歴:
– H21~H23 NTT Communications 先端IPアークテクチャセンタ
– H23~現在 NTTレゾナント サーチ事業部ビジネス推進部門
– twitter:@p_i_o4545
– blog:http://pioneerinocean.hatenablog.com/
• 移行した時に記事を全部消したので、今はほとんど内容がありません。
• これからしっかりしたRとかHadoopの記事を書きたい(震え声)
– 趣味:ピアノ、ギター、シミュゲをやる事、歴史・軍事オタ
• どれも「下手の横好き」レベルです。
- 17. Rの特徴
良い点
– 解析・行列系の言語にしては動作が速い。
– Win,Mac,linuxどれでも利用できる。
– 処理が簡単なので、プログラミング初心者でも親しみや
すい。
– エクセルより大きなデータを扱える。
– 高機能な解析環境を「タダ」で使える!(重要)
ネックな点
– とはいえ、Hadoop等で扱えるレベルのデータは使えない
•メモリがあふれて死にます。
– 行列、ベクトル単位で処理をするという事を常に念頭に
置いてコードを書く必要がある。
– 「R」でググってもヒットしづらい・・。
- 18. R vs Excel
比較内容
直感的な使いやすさ △ ○
価格 無料 1万円ちょっと
データ量 △ ×
処理速度 △ ×
利用用途 統計関連 様々
拡張 ○ △
問:何故エクセルと比較したのか?
答:Rはコーダーだけの道具ではないから。(多分)
- 22. まずはいじってみましょう。
Rの基本
– 行列はこんな感じで作れます。
•matrix(1:12,3,4)
•行列計算も普通にできます。
– 行列の一部を取り出すには添え字を使います
•a <- matrix(1:12,3,4)
•a #-> 1,2,3
4,5,6
7,8,9
10,11,12
•a[1,] #-> 1 4 7 10
•a[,1] #-> 1 2 3
•a[1,1] #-> 1
- 23. データを扱ってみる
irisを使ったRの基本的利用方法
– irisと打ってみてください。
– 出てきたデータは「アヤメの萼片と花びら」に関するデ
ータです。
•正直なところかなりどうでもいいデータですが、これを使ってR
の基本関数を試してみようと思います。
•ただ、R入門は必ずと言っていいほどこのデータを使います。私
もアヤメの萼片と花びらの関係自体はどうでもいいのですが、使
い勝手がいいのでこれを使います。
– まずは基本統計量を出してみましょう。
•summary(iris)
- 24. データを扱ってみる
基本的な処理関数
処理内容 関数 例
合計 sum() sum(iris[,1])
平均 mean() mean(iris[,1])
標準偏差 sd() sd(iris[,1])
最大 max() max(iris[,1])
最少 min() min(iris[,1])
データの作成・結合 c() c(1,2,3,4,5)
データの基本統計量 summary() summry(iris)
データに関する情報 str() str(iris)
- 25. データを扱ってみる
図形描画
– 最も簡単な図形描画である散布図を作ります
•plot(iris[,1],iris[,3])
•irisの一列目と三列目をそれぞれx軸y軸にした散布図ができます
– 下記の書き方でも大丈夫です。
•plot(Petal.Length ~ Sepal.Length, data=iris)
•plot(iris$Sepal.Length,iris$Petal.Length)
•この2つだと、x,y軸それぞれに名前が付けられます。
•『データ名$行・列名』でその行を出すこともできます。
– 全変数に対する散布図
•plot(iris)で全変数をクロスした散布図表が出てきます。
•pairs(iris[1:5])でも同じです。
– 色づけ
•pairs(iris[1:4], pch = 21, bg = c("red", "green3",
"blue")[unclass(iris$Species)])
- 26. データを扱ってみる
続き2
– 相関を見てみましょう。
•cor(iris[,1:4])
– 単回帰分析をしてみましょう。
•kaiki <- lm(iris$Petal.Length ~ iris$Sepal.Length)
– lmは線形モデルによる回帰を出します。
– lm(目的変数~説明変数)で使います
»kaiki #->
»(Intercept) iris$Sepal.Length
-7.101 1.858
– これは単回帰直線がy=1.858x-7.101という事です。
•plot(iris$Sepal.Length, iris$Petal.Length)
•abline(kaiki)
- 30. Rの掟
Rを使う上での掟
– for なるべく使わないでください。
– if なるべく使わないでください。
– while やめてください。
– repeat やめてください。
– 添字操作 絶対にやめてください。
•こういうの
test[]={1,2,3,4,5}
for(i=0,i<=4,i++){
if(test[i]<=3){
count++
}
print(count)
- 31. Rの掟(例1)
逐次処理(足し算)
start <- proc.time()
rep <- 1000 # 足し算の回数
n <- 1000 # 変数の数(配列の要素数)
x <- rep(0, n) # 一万個の変数(配列)の初期化
for (j in (1:rep) ) { # rep 回の繰り返し
for (i in (1:n)) { # 一万個の変数それぞれに値を加える
x[i] <- x[i] + i # 数値計算ライブラリのテストでは、x[i] <- x[i] + log(i + 1)
}
}
print(proc.time() - start) #->経過6.42秒
上記をやると処理コストが大きい。
- 32. Rの掟(例1)
ベクトル処理
start <- proc.time()
rep <- 1000 # 足し算の回数
n <- 1000 # 変数の数(配列の要素数)
x <- rep(0, n) # 一万個の変数(配列)の初期化
for (j in (1:rep) ) { # rep 回の繰り返し
# 一万個の変数に、一度に値を加える
x <- x + (1:n) # 数値計算ライブラリのテストでは、x <- x + log(1:n)
}
print(proc.time() - start) #->経過1.27秒
足し算を「一気に」行うのが正解。
- 33. Rの掟(例2)
添字操作による論理判断
start <- proc.time()
count=0 #結果を入れる変数
i=0 #カウンタ
rep=1000 #繰り返し数
for(j in 1:rep){
for(i in 1:150){
if(iris[i,5]=="virginica"){
count = count+iris[i,1]
}
}
}
print(proc.time() - start) #->経過26.05秒
- 35. 1手詰め
下記の処理を早くして下さい。
ヒント
– Rは関数に「集合を突っ込む」のが基本です。
– exp()の処理自体は重要ではありません。
•対数でも三角関数でも同じです。
x <- runif(1000000) #runifは乱数を発生させています。ここは変えないでください。
test1 <- function () {
res <- numeric(1000000) #numericは0が入った数値オブジェクトを生成します。
for (i in 1:1000000) res[i] <- exp(x[i]) #expはeのべき乗をとります。
return(res)}
system.time(test1())
- 36. 正解
これだけ。
解説
– Rは「集合を突っ込む」のが基本です。
– 今までの例でもそうでしたが、Rは極力「コードを書かな
い」でください。
– 大体の関数はベクトル化されていて、「一気に操作」が
可能です。
x <- runif(1000000)
system.time(res <- exp(x))