Your SlideShare is downloading. ×
Osaka.R#6 初心者講習会資料                            2011/07/02                             林真広インストール インストーラのダウンロードhttp://www.r-...
※ Windows の場合※ インストーラの実行時の注意点(windows) 「インストール中に利用する言語」として Japanese が選択されているが,文字化けが発生する  ので,English を選択しておく あくまで「インストール中...
スクリプトの実行     スクリプト(コマンド,プログラム,命令ともいう)をコンソール,またはエディタに書き込む     エディタは,メニューバーから「ファイル>新しいスクリプト」とたどって起動する                     ...
コンソールの状態    左は何でも入力できる状態。左端に「>」が表示されている    右は続きの入力を待っている待機状態。左端に「+」が表示されている                 TIPS & CAUTIONS!    ☆ 待機状態の場...
       関数に入力する値を引数(ひきすう)またはオプション,関数が返す値を返り値または戻り            値と呼ぶ                mean の例の場合,x という変数が引数,3 という数値が返り値      ...
TIPS & CAUTIONS!☆ 引数に初期値が設定されている場合,引数を省略できる☆ 引数の名前は省略可能だが,省略できない場合もあるので省略しないほうが無難         例えば 3 つ引数がある関数で第 2 引数を省略する場合,第 ...
理論編――――――――――――――――――――数値(numeric)クラス1 + 2x <- 10 – 5y <- x + 9is.numeric(y) # 引数が数値クラスならば TRUE,そうでなければ FALSE を返す4 * 5 / 1...
文字列(character)クラス"文字列"              # ダブルコーテーションで文字を囲むと,文字列オブジェクトとして扱われるv1 <- c("名前", "性別", "年齢")is.character(v1)      # 引...
データフレーム(data.frame)クラス     表形式のデータを扱うためのクラス     一列が一つの変数sex <- c("男性", "男性", "男性", "女性", "女性", "女性")age <- c(20, 35, 50,...
リスト(list)クラス    各種クラスのオブジェクトをひとまとめにするためのオブジェクト    データフレームは実はリストの拡張なので,操作方法は似ているl1 <- list(num=1:5,         char=c("a", "...
実践編――――――――――――――――――――作業ディレクトリの設定   作業ディレクトリ(ディレクトリはフォルダとだいたい同じ意味)とは,データの入出力の際に基    準となるディレクトリ   作業の前にまず設定しておく# 現在の作業ディ...
パッケージのインストール,読み込み   パッケージの追加により機能を増やせる(最初から入っているパッケージもある)       メニューバーから”パッケージ>パッケージのインストール”       どのミラーからダウンロードするかを選ぶ。...
テキストデータの読み込みread.csv(file.choose(), header=TRUE)# 対話的にデータを読み込みread.csv("sample.csv", header=TRUE)# 作業ディレクトリから sample.csv を...
データの操作summary(d1)     # 全データの要約統計量head(d1)        # データの先頭数行を表示。末尾は tail(...)colnames(d1)    # データに含まれる変数の名前を取得d1$SEX     ...
変数のリコード   リコードの方法はたくさんあるが,memisc パッケージの recode 関数が最も汎用的   Hmisc,car パッケージにも recode 関数がある。先に読み込んだものが上書きされるので,    memisc を...
ドキュメント編――――――――――――――――――help 等のドキュメントの使い方   関数を初めて使うとき,使い方がよくわからないとき,エラーが出るとき,必ず help を読む!   特に初めて使う関数の help は,流し読みでもいい...
Upcoming SlideShare
Loading in...5
×

初心者講習会資料(Osaka.r#6)

3,433

Published on

Published in: Technology, Business
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,433
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
15
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Transcript of "初心者講習会資料(Osaka.r#6)"

  1. 1. Osaka.R#6 初心者講習会資料 2011/07/02 林真広インストール インストーラのダウンロードhttp://www.r-project.org/ どちらかを選ぶ (どちらでも同じ) 1
  2. 2. ※ Windows の場合※ インストーラの実行時の注意点(windows) 「インストール中に利用する言語」として Japanese が選択されているが,文字化けが発生する ので,English を選択しておく あくまで「インストール中に利用する言語」なので,インストール後は日本語化された R を使える 2
  3. 3. スクリプトの実行  スクリプト(コマンド,プログラム,命令ともいう)をコンソール,またはエディタに書き込む  エディタは,メニューバーから「ファイル>新しいスクリプト」とたどって起動する エディタ コンソール  エディタに書いたスクリプトは,保存しておけば,一度 R を閉じても,「ファイル>スクリプト を開く」で読み込める  コンソールにスクリプトを書き込んだ場合は,エンターキーを押せば実行される  エディタに書き込んだ場合は,Ctrl+R でカーソルのある行のスクリプトが実行される  範囲を選択して Ctrl+R を押せば,選択した範囲すべてが実行される  「編集>カーソル行または選択中の R コードを実行」またはツールバーのボタンでも 同じ TIPS & CAUTIONS!☆ 大文字小文字,全角半角の区別あり(全角は基本的に使わないほうがいい!)  特に記号の全角半角に注意が必要  "”$$!!++--==(()) 見分けがつきますか…?  変換ではなく IM を On/Off したほうが確実(日本語を使う機会は少ない) 3
  4. 4. コンソールの状態 左は何でも入力できる状態。左端に「>」が表示されている 右は続きの入力を待っている待機状態。左端に「+」が表示されている TIPS & CAUTIONS! ☆ 待機状態の場合,「正しく」続きを入力しなければエラーになる  「STOP」ボタン,「その他>現在の計算を中断」,Esc キーで待機状態をキャンセ ルできる最初のスクリプト# print という関数(機能)に"Hello, world!"という文字列を渡すprint("Hello, world!")# コンソールに"Hello, world!"と表示される# [1, 2, 5, 4]というベクトルを x という変数に保存x <- c(1, 2, 5, 4)# mean という関数に x を入力,出力を y という変数に保存y <- mean(x) # 平均値が計算される# y の中身を表示y  R の操作には関数を使う  基本的な操作は,「関数(値)」と命令するだけ。数学の f(x)と同じ  さらに f(x)と同様に,入力に対して関数は必ず値を返す(値は数値とは限らない) 4
  5. 5.  関数に入力する値を引数(ひきすう)またはオプション,関数が返す値を返り値または戻り 値と呼ぶ  mean の例の場合,x という変数が引数,3 という数値が返り値  複数の引数を関数に入力する場合,区切り文字として「,」を使う  例えば「mean(x, na.rm=TRUE)」,na.rm は欠損値(NA)を省くか否か TIPS & CAUTIONS!☆ 「#」を書くと,それ以降はコメントとして扱われる(処理の上で無視される)☆ 半角のスペースは見やすさのために記号や関数名の前後などに挿入できる  「1 + 1」「print( "Hello, world!" )」「mean (x)」など  「x< -y」「me an(x)」などはだめ☆ 改行も適宜挿入できるが,挿入できる場所はコンマや記号の後ろにかぎられる☆ スペースの使い方などは自分ルールでもいいが,Googles R Style Guide や R Coding Conventions などの既存のルールに従うと,読みやすいスクリプトが書け る(以下は例)  一行は 80 文字程度(横スクロールバーが出ない程度の長さ)  一行が長くなる場合は,コンマの後ろで適宜改行  2 項演算子(=,+,-,<-など)の前後に半角スペース(「x <- y」や「1 + 1」)  コンマの後ろに半角スペース(「c(1, 2, 3)」)関数の使い方 関数は,関数(引数 1, 引数 2, 引数 3, ...)というふうに使う 引数は名前を持っていて,関数(名前=引数)という書き方をする 初期値 引数の名前 5
  6. 6. TIPS & CAUTIONS!☆ 引数に初期値が設定されている場合,引数を省略できる☆ 引数の名前は省略可能だが,省略できない場合もあるので省略しないほうが無難  例えば 3 つ引数がある関数で第 2 引数を省略する場合,第 3 引数は名前を省 略できない  省略すると第 3 引数ではなく第 2 引数とみなされる変数 変数は入れ物のようなもの 変数に入れる実体をオブジェクトと呼ぶ 新たな変数を作るときは,「新たな変数 <- オブジェクト(または変数)」というふうに書く すべての関数は値(オブジェクト)を返すので,これも変数に入れられる  「新たな変数 <- 関数(引数 1, 引数 2, 引数 3, ...)」とすればいいオブジェクト オブジェクトにはクラス(種類)がある もっとも基本的なクラスは数値(numeric),文字列(character),論理(logical)クラス 他 に 重 要 な ク ラ ス は 因 子 ( factor ) , 行 列 ( matrix ) , リ ス ト ( list ) , デ ー タ フ レ ー ム (data.frame)クラス  ここでいう因子は因子分析の因子とは関係がなく,カテゴリ変数のこと  行列は二次元の行列  データフレームは,ケース(行)×変数(列)という形の,分析に用いるデータセット  R を使う用途によってクラスの重要度は異なるので最初からすべて理解する必要はない オブジェクトのクラスによって扱いが異なるので,どのクラスのオブジェクトを操作しているのか を常に意識しよう 6
  7. 7. 理論編――――――――――――――――――――数値(numeric)クラス1 + 2x <- 10 – 5y <- x + 9is.numeric(y) # 引数が数値クラスならば TRUE,そうでなければ FALSE を返す4 * 5 / 10 # 「*」はかけ算,「/」は割り算(3 + 6) * 2^3 # 「^」は累乗(この場合 2 の 3 乗)。演算の順番は数学と同じで,括弧も使えるc(1, 3) + 2 # [1, 3]というベクトルを作り,1 を足すz <- 1:5 # [1, 2, 3, 4, 5]というベクトルを作るz[2] + z[3] # z の 2 番目の要素と 3 番目の要素を足しあわせる R ではほとんどのクラスのオブジェクトがベクトル 一つの数字でも,長さ 1 のベクトル 数学のベクトルのように難しく考えるのではなく,複数のオブジェクトをひとまとめにして便利に 扱える機能と考えよう 変数[数字]と書けば,その変数の中の,与えた数字の位置にある要素を取り出せる  この数字を,添字またはインデックスと呼ぶ行列(matrix)クラス 2 次元の行列を扱うためのクラス 行列演算する人は必須 しない人は要素へのアクセスの仕方だけ覚えておけばだいたい大丈夫  関数の返り値が行列のことがよくあるmat <- matrix(1:15, nrow=3, ncol=5, byrow=TRUE)# nrow で行数,ncol で列数を指定(普通はどちらか一方でいい)# byrow=TRUE にすると,ベクトルを行方向に並べて行列を作る(デフォルトは byrow=FALSE)matmat <- matrix(1:15, nrow=3, ncol=5, byrow=FALSE)matdim(mat) # 行数,列数を取得dimnames(mat) <- list(c("r1", "r2", "r3"), c("c1", "c2", "c3", "c4", "c5")) # 行名,列名を設定mat[2, 3] # mat[行, 列]の要素を取り出すmat[2,] # 2 行目全体を取り出すmat[, 3] # 3 列目全体を取り出すmat[2, 1:3] # 2 行目の 1~3 列目の要素を取り出す 7
  8. 8. 文字列(character)クラス"文字列" # ダブルコーテーションで文字を囲むと,文字列オブジェクトとして扱われるv1 <- c("名前", "性別", "年齢")is.character(v1) # 引数が文字列クラスならば TRUE,そうでなければ FALSE を返すis.numeric(v1)v2 <- c("1", "2", "3") # 数値もダブルコーテーションで囲めば文字列オブジェクトis.numeric(v2) ダブルコーテーションを全角にしないよう注意!  日本語の文字列オブジェクトを作ろうとするときに失敗しやすい シングルコーテーションでもいい(「文字列」)  文字列にダブルコーテーションを含めたい場合はシングルコーテーションを使う  「文字列の中に"を入れる」 文字列オブジェクトもベクトル論理(logical)クラス 条件判断や関数のオプションの ON,OFF に使われる TRUE,FALSE の 2 種類だけ TRUE は「真」,FALSE は「偽」TRUE“TRUE” # 表示の違いに注目TRUE <- “真” # TRUE,FALSE は変数名にはできないx <- 4x == 5x < 5y <- x >= 4 # 変数にも入れられるy # 論理ベクトルis.logical(y)x <- 1:4x[c(TRUE, TRUE, FALSE, FALSE)] # 添字の代わりに論理ベクトルで要素を選択x <= 2x[x <= 2] # 応用的な要素の選択方法。条件によって要素を選択print(“R”, quote=TRUE) # 関数の引数として論理オブジェクトを使うprint(“R”, quote=F) # 引数の場合,TRUE は T,FALSE は F と省略できる 省略記法は間違いの元なので最初のうちはあまり使わない方がいい 8
  9. 9. データフレーム(data.frame)クラス 表形式のデータを扱うためのクラス 一列が一つの変数sex <- c("男性", "男性", "男性", "女性", "女性", "女性")age <- c(20, 35, 50, 42, 31, 22)df <- data.frame(sex, age)dfdf$sex # データフレーム内の変数にアクセスdf[["age"]] # 変数にアクセスするもう一つの方法colnames(df) # 変数名の取得colnames(df)[1] <- "性別" # 変数名の変更df$job <- c(1, 0, 1, 0, 1, 0) # 新しい変数の作成attach(df) # データフレーム内の変数を大局的環境に展開mean(age) # データフレーム内の変数を直接扱える,が…age <- c(10, 10, 10, 10, 10, 10)detach(df) # attach の解除df$age # attach 中の変数の編集は反映されない 同じ長さのベクトルを引数に取る 引数は主に数値オブジェクトか文字列オブジェクト  ただし,文字列オブジェクトはデフォルトでは因子(factor)オブジェクトに変換される attach は便利だが,エラーのもとになりやすいので推奨しない因子(factor)クラス 文字列オブジェクトに,カテゴリの概念を加えたものと考えればいい 各種カテゴリカルデータ分析に必要sex # 文字列オブジェクトdf$sex # 因子オブジェクト。表示の違いに注目summary(df$sex) # カテゴリの概念があるので,カテゴリごとに集計できる 9
  10. 10. リスト(list)クラス 各種クラスのオブジェクトをひとまとめにするためのオブジェクト データフレームは実はリストの拡張なので,操作方法は似ているl1 <- list(num=1:5, char=c("a", "b", "c", "d"), mat=matrix(1:9, ncol=3)) # 「名前=オブジェクト(または変数)」で要素を設定# リストにはなんでも入る!# なんらかの統計解析をおこなう関数は,たいてい返り値がリストl1l1[["num"]]li$num # 要素へのアクセスの仕方はデータフレームと同じ実際の分析data(iris) # R に組み込まれているデータの読み込みis.data.frame(iris) # データフレームオブジェクトsummary(iris) # データフレームの概要cor(iris$Sepal.Length, iris$Sepal.Width) # 相関係数の計算median(iris$Sepal.Length) # 中央値iris$cat1 <- "high" # 新しい変数iris$cat1[iris$Sepal.Length < 5.8] <- "low"# Sepal.Length が 5.8 以下ならば"low"というカテゴリにtable(iris$Species, iris$cat1) # クロス表作成 10
  11. 11. 実践編――――――――――――――――――――作業ディレクトリの設定 作業ディレクトリ(ディレクトリはフォルダとだいたい同じ意味)とは,データの入出力の際に基 準となるディレクトリ 作業の前にまず設定しておく# 現在の作業ディレクトリを返す(Get Working Directory)getwd()# 作業ディレクトリの設定(Set Working Directory)setwd("c:/Users/UserName/Documents")# R でのディレクトリの区切り文字は"/"もしくは Windows の場合は"¥¥"も可# ダイアログで対話的にディレクトリを選択し,ディレクトリのパスを返す(Windows 限定?)choose.dir()# choose.dir()のファイル版(Mac にもある)file.choose()# 対話的にディレクトリを選択し,作業ディレクトリに設定するsetwd(choose.dir()) TIPS & CAUTIONS! ☆ 作業ディレクトリは GUI からも設定できる  ただし,スクリプトに setwd(…)を書いて保存しておけば,繰り返し作業する場 合に設定が楽 11
  12. 12. パッケージのインストール,読み込み パッケージの追加により機能を増やせる(最初から入っているパッケージもある)  メニューバーから”パッケージ>パッケージのインストール”  どのミラーからダウンロードするかを選ぶ。ダウンロードできるものはどこでも同じなので, Japan の中から好きなものを選ぶ 関数を使ってインストールすることもできるinstall.packages("Hmisc")# 一覧から探す必要がないのでおすすめinstall.packages(c("memisc", "car"))# 複数まとめてインストールすることもできるlibrary(memisc) # パッケージの読み込み分析例 サンプルデータは http://www.spss.co.jp/support/sample.html からダウンロード 作業ディレクトリに保存しておくlibrary(foreign)d1 <- read.spss("bank.sav", to.data.frame=TRUE, reencode="shift-jis")t.test(SALNOW ~ SEX, data=d1) # t 検定(ウェルチ)t.test(d1$SALNOW, d1$SALBEG, paired=TRUE) # 対応のある t 検定aov1 <- aov(SALNOW ~ SEXRACE, data=d1) # 分散分析summary(aov1) # 結果の概要lm1 <- lm(SALNOW ~ AGE + SEX*MINORITY + JOBCAT, data=d1) # 重回帰分析summary(lm1) # 結果の概要 12
  13. 13. テキストデータの読み込みread.csv(file.choose(), header=TRUE)# 対話的にデータを読み込みread.csv("sample.csv", header=TRUE)# 作業ディレクトリから sample.csv を読み込み# header オプションは一行目を列の名前(変数名)として読み込むかどうかread.delim("sample.txt", header=TRUE) # tab 区切りの場合# data.frame 形式で読み込まれる TIPS & CAUTIONS! ☆ データがうまく読み込めない場合  文字化け…文字コードが合っていない。fileEncoding オプションに文字コー ドを指定する。日本語の場合,文字コードは shift-jis か UTF-8  read.csv("sample.csv", fileEncoding="UTF-8")  欠 損 値 の 処 理 … 欠損 値が 含 まれ る 場 合 は,欠 損値 に あ ててい る 文 字 を na.strings オプションに設定する  read.csv("sample.csv", na.strings="NA")  変数がおかしい…変数が数値の場合,変数の中に全角数字がないか,文字が 含まれていないかを確認する他のソフトウェアのデータの読み込み R は様々な形式のデータを読み込むことができるlibrary(foreign) # 他形式のデータの入出力用パッケージd1 <- read.spss("bank.sav", to.data.frame=TRUE, reencode="shift-jis")# reencode は文字コードの指定。Windows の場合はたいていなくても大丈夫# 他にも read.xport,read.dta などがあるデータの書き込みwrite.csv(d1, "sample.csv", row.names=FALSE)# 作業ディレクトリに d1 を csv で保存write.table(d1, "sample.dat", row.names=FALSE, sep="¥t")# 作業ディレクトリに d1 を tab 区切りテキストで保存 13
  14. 14. データの操作summary(d1) # 全データの要約統計量head(d1) # データの先頭数行を表示。末尾は tail(...)colnames(d1) # データに含まれる変数の名前を取得d1$SEX # 変数へのアクセスd1$SEX[5] # 変数の 5 番目のケースデータの閲覧(単純集計表)# カテゴリ変数の場合table(d1$JOBCAT)summary(d1$JOBCAT)# 連続変数の場合table(d1$AGE) # 実用的ではないstem(d1$AGE) # 幹葉図boxplot(d1$AGE) # 箱ひげ図hist(d1$AGE, breaks="FD") # ヒストグラム# breaks は区切り方の指定。デフォルトの方法は古典的すぎるので変更データの閲覧(記述統計)summary(d1$SALNOW)mean(d1$SALNOW, na.rm=TRUE)# na.rm オプションは欠損値を省くかどうか# このデータには欠損値がないのでどちらでも結果は変わらないsd(d1$SALNOW, na.rm=TRUE) # 不偏標準偏差# 他にも var(),max(),min(),range()などがある# na.rm はこれら記述統計の関数では大概使えるが,常に使えるわけではないデータの閲覧(クロス集計表)table(d1$MINORITY, d1$JOBCAT) # 行,列の順番library(memisc) # memisc は社会科学系で便利な機能がまとめられているaggregate(JOBCAT ~ MINORITY, data=d1) # 返り値は data.frameaggregate(percent(JOBCAT) ~ MINORITY, data=d1) # パーセントで表示 14
  15. 15. 変数のリコード リコードの方法はたくさんあるが,memisc パッケージの recode 関数が最も汎用的 Hmisc,car パッケージにも recode 関数がある。先に読み込んだものが上書きされるので, memisc を最後に読み込むように!d1$AGE3 <- recode(d1$AGE, "低" <- range(min , 40), "中" <- range(40.01, 60), "高" <- range(60.01, max))# 「d1$新しい変数名 <- 新しい変数」でデータフレームに変数を追加d1$JOB3 <- recode(d1$JOBCAT, "事務" <- c("事務職", "事務研修員"), "マニュアル" <- "警備員", "専門・管理" <- c("専門職研修員", "管理職", "MBA 研修員", "技術職")) R ではカテゴリ変数と連続変数が明確に区別されることに注意! TIPS & CAUTIONS! ☆ recode 関数のバグ  memisc の現在のバージョンでは,recode 関数にバグがある  欠損値の含まれている量的変数(数値ベクトル)をリコードしようとすると,エラー が出る  その場合は一時的に欠損値を別の値に置き換えてリコードするとよい  d1$AGE[is.na(d1$AGE)] <- 999 # 欠損値を 999 に置き換え  詳細は http://d.hatena.ne.jp/phosphor_m/20110629/1309339215 15
  16. 16. ドキュメント編――――――――――――――――――help 等のドキュメントの使い方 関数を初めて使うとき,使い方がよくわからないとき,エラーが出るとき,必ず help を読む! 特に初めて使う関数の help は,流し読みでもいいから絶対に目を通す!help(var)?var # help(var)と同じ。利便性のための省略形。help の読み方 すべて理解する必要はない Usage には関数の使い方が書いてある  引数のクラスによって使い方がちがう関数の場合,クラス別の使い方が書いてある(ことも ある) 最も重要なのは Arguments  引数の説明が書いてある  最も多いエラーは Type Error(数値が必要なところに因子を渡す等,クラスの間違い)  エラーなら実害はないが,期待とはちがう処理が行われていることも…  どの引数にどのクラスのオブジェクトを渡さなければならないかを確認する! Value には返り値の詳細が書いてあるのでこれも重要 References には参考になる論文や web ページが書いてある See Also には似た機能を持つ関数や関連する関数が書いてある Example は二番目に重要  文章を読んで分からなくても,実際に動かしてみたら分かることがよくある  example 関数は,help 内の example をまとめて実行してくれるexample(lm)新しいパッケージを使うとき(demo,vignette,パッケージの help) 使ってみたいパッケージの情報がウェブや書籍で見つからない場合がある  そうでなくとも新しいパッケージは使い方がよくわからないもの デモ,ビネット(vignette),パッケージの help を見れば多くの情報を得ることができる ただし,デモとビニエットは必ずあるわけではないdemo(package="graphics") # graphics パッケージが持っているデモの一覧demo("graphics")vignette(package="memisc") # memisc パッケージが持っているビニエットの一覧vignette("anes48")help(package="Hmisc") # Hmisc パッケージのヘルプ 16

×