R を使って統計分析を勉強する会
第 1 回
2014 年 4 月 23 日(水)
日直:井ノ口
Introduction
R のいいところ
統計分析を手早く書くのに最適
● 統計分析が得意
– 関数が豊富(重回帰分析が 1 行)
– 表形式のデータが扱いやすい
●
分析手順を再現できます
– 実行履歴が残ります
– スクリプトとして残せます
Excel でダメなの?
もちろんケースバイケース。こんな時は
Excel でもいいんじゃないでしょうか。
● 難しい統計分析はしない。実際、重回帰分析
くらいなら Excel でもできる。
● 分析手順を再利用しない。
● データは更新されない。
R にしろ Excel にしろ
道具です。 R が使えるからと言って、統計分
析ができるというわけでは、残念ながらあり
ません。
というわけで、この勉強会では、 R の使い方
に加えて、統計分析の考え方についてもちょ
くちょく触れていきたいと思います。
Hello woRld!
何はともあれ
動かしてみましょう。
RStudio を起動して、左下の Console で
> print("Hello World!")
[1] "Hello World!"
基本のキ
作業ディレクトリ。
RStudio を起動して、左下の Console で確認し
たり変更したりしてみる。
作業状態はここに保存されます。
> getwd()
> setwd("~/workingdirectory")
> setwd("~workingdirectory")
Start Statistics
こんな流れで進めます
「データ可視化の 7 ステップ」
( 出典『ビジュアライジング・データ』 )
1.Acquire : データをゲットします
2.Parse : 整形します
3.Filter : 必要なサブセットを抜き出します
4.Mine : 分析します
5.Represent : 分析結果を出力します
6.Refine : 省略
7.Interaction : 省略
もう少し具体的に
こんな感じで行ってみようと思います
1.Acquire : Excel を読み込みます
2.Parse : 文字列を因子に変換します
3.Filter : 必要な行・列を取り出します
4.Mine : 代表値(平均値とか)を出します
5.Represent : ヒストグラムや箱ひげ図
6.Refine : 省略
7.Interaction : 省略
Acquire
XLConnect
結局出回っているデータの多くが Excel なの
で、それを読み込みます。
XLConnect というパッケージを使います。
> install.packages("XLConnect")
> library(XLConnect)
> data <- readWorksheetFromFile("test.xlsx", 1)
> data
# 1 シート目のデータが表示される
R のデータ構造
一体何を読み込んだのか?
R には大きく 5 つのデータ構造があります
1.vector :基本。 1 次元配列。
2.matrix :行列。 2 次元配列。
3.array :配列。 n 次元配列。
4.data frame :重要。表。さっき読み込んだ
5.list :柔軟で便利。
vector
これが基本。単一の値はあまり扱いません。
四則演算できます。 for 文不要です。
> v1 <- c(1, 2, 3, 4)
> v1[1] # 添え字は 1 から
> v1[c(1, 2)] # 添え字にも vector 使えます
> v2 <- c(3, 3, 2, 4)
> v1 + v2
> v1 + c(1, 2) # 要素数が違うと繰り返して補います
matrix, array
matrix はあまり使いません
array はもっと使いません(経験上)
> m1 <- matrix(v1, nrow=2)
> m1[1, 2] # 行 , 列の順で指定
> m1[, 2] # 省略すると全指定
> a1 <- array(v1, dim=c(2, 1, 2)
> a1
> a1[1, 1, 1]
data frame
最もよく使います。なじみ深い表形式のデー
タ構造です。
さっき読み込んだデータで色々試してみてく
ださい
# 列名を付けられます
> df <- data.frame(col1=c(1, 2), col2=c("a", "b"))
> df
> df[1, 2] # 配列と同じようにアクセスできます
> df[, "col1"] # 列名でアクセスできます
> df$col1 # こんな風にも
# 1 次元に落ちたときに vector になるのを防ぐには
# 地味に重要(忘れてバグの温床に)
> df[, "col1", drop=FALSE]
list
柔軟なので便利。各要素の要素数が異なって
いても大丈夫( data fame はダメ)
私は色々な分析結果を 1 オブジェクトにまと
めるときに使ったりします
# data frmae 同様列名を付けられます
> li <- list(elem1=c(1, 2), elem2=c("a", "b", "c"))
> li
> li[[1]] # 要素へのアクセスには癖があります
> li$elem1 # 要素名でのアクセスは同じ
ライブラリを使っていて困ること
どうやって渡すの? どれが返ってきたん
だ? と悩みます。
class(), is.xxx(), as.xxx() が便利
# matrix から data frame への変換の例
> class(m1) # 当然 matrix
> is.data.frame(m1) # FALSE
> as.data.frame(m1) # 列名がついた !?
> class(as.data.frame(m1)) # data frame に !!
> is.data.frame(as.data.frame(m1)) # TRUE
Parse
文字列を因子に
文字列 "A" と選択肢 "A, B, AB, O" の "A" と
選択肢 "A, B, C" の "A" を正しく扱おう、と
いう話です。
> sample <- c("A", "B")
> blood <- factor(sample,
levels=C("A", "B", "AB", "O"))
> choice <- factor(sample,
levels=c("A", "B", "C"))
# == はクラスを意識しないので、 identical で比較
# Java の == と equlas のようなものです
> identical(sample[1], blood[1])
> identical(sample[1], choice[1])
> identical(blood[1], choice[1])
その他の型 (1/2)
代表的な Parse 先
● numeric: 数値 (1, -2, 0.1)
● character: 文字列 ("Hello World")
●
logical: 論理値 (TRUE, FALSE)
> c(1, -2, 0.1)
> c("Andy", "Bob", "Chris")
> c(TRUE, FALSE, TRUE)
その他の型 (2/2)
代表的な Parse 先
● factor: 因子
● Date: 日付
●
NA: 欠損値
> as.factor(c("A", "B"), levels=c("A", "B", "AB",
"O"))
> as.Date(c("2014/4/24", "2014/4/25"))
> c(1, 5, NA, 6)
型と尺度水準
型と尺度水準について
尺度水準には 4 種類ある。それぞれ意味があ
る代表値や演算が異なる。
1.名義尺度→ 最頻値。演算意味ない。
2.順序尺度→ 中央値。+ー意味ない。
3.間隔尺度→ 平均値。 ×÷ 意味ない。
4.比例尺度→ 平均値。演算に意味がある。
名義尺度
カテゴリ。背番号とか。 R では factor に相
当。
● 演算する意味ない
例)アンケートだとこんな設問
設問 1 あなたの役割を教えて下さい。
1. 開発
2. 営業
3. スタッフ
4. その他
順序尺度
よくみる 5 段階評価とか。Rでは order=TRUE
オプション付の factor に相当。
● 意味があるのは順序だけ。足し引き意味ない
例)アンケートだとこんな設問
設問 2 この勉強会には満足していますか?
1. 満足している
2. やや満足している
3. ふつう
4. やや不満である
5. 不満である
間隔尺度
差が等しくて零点が任意の数値。日付とか温
度(摂氏、華氏)とか。Rでは numeric に相
当。
● 足し引きできる。 ×÷ 意味ない
例) 20℃ は 40℃ の 2 倍熱いわけではない。
華氏だと 68°F と 104°F (約 1.5 倍 ) 。
比率尺度
差が等しくて零点が絶対的な数値。長さとか
温度(絶対温度)とか。 R では numeric に相
当。型の上では間隔尺度と区別されない。
● 足し引きできる。 ×÷ もできる。比率にも意
味がある。
例) 100m は 10m の 10 倍の長さ。
Appendix
Enterprise での利用
Google は R でプロトタイピングして C で実装
Oracle のデータも R で分析できる(らしい)
● Companies Using R | Revolution Analytics
●
Oracle R Enterprise

第1回Rを使って統計分析を勉強する会