Osaka.R#5 初心者講習会資料                           2011/04/23                             林真広スクリプトの実行   スクリプト(コマンド,プログラム,命令ともいう...
コンソールの状態   左は何でも入力できる状態。左端に「>」が表示されている   右は続きの入力を待っている状態。左端に「+」が表示されている       この状態の場合,「正しく」続きを入力しなければエラーになる       Esc ...
理論編――――――――――――――――――――関数の使い方   関数は,関数(引数 1, 引数 2, 引数 3, ...)というふうに使う   引数は名前を持っていて,関数(名前=引数)という書き方をする   名前は省略可能だが,省略でき...
数値(numeric)クラス1 + 2x <- 10 – 5y <- x + 9is.numeric(y) # 引数が数値クラスならば TRUE,そうでなければ FALSE を返す4 * 5 / 10    # 「*」はかけ算,「/」は割り算(...
文字列(character)クラス"文字列"              # ダブルコーテーションで文字を囲むと,文字列オブジェクトとして扱われるv1 <- c("名前", "性別", "年齢")is.character(v1)      # 引...
データフレーム(data.frame)クラス     表形式のデータを扱うためのクラス     一列が一つの変数sex <- c("男性", "男性", "男性", "女性", "女性", "女性")age <- c(20, 35, 50,...
# リストにはなんでも入る!# なんらかの統計解析をおこなう関数は,たいてい返り値がリストl1l1[["num"]]li$num       # 要素へのアクセスの仕方はデータフレームと同じ実際の分析data(iris)      # R に組...
実践編――――――――――――――――――――作業ディレクトリの設定   作業ディレクトリ(ディレクトリはフォルダとだいたい同じ意味)とは,データの入出力の際に基    準となるディレクトリ   作業の前にまず設定しておく# 現在の作業ディ...
read.table("sample.txt")# より柔軟にテキストファイルを読み込む。詳細は help(read.table)# data.frame という形式で読み込まれる他のソフトウェアのデータの読み込み   R は様々な形式のデー...
データの閲覧(記述統計)summary(d1$SALNOW)describe(d1$SALNOW)mean(d1$SALNOW, na.rm=TRUE)# na.rm は欠損値を省くかどうか# このデータには欠損値がないのでどちらでも結果は変わ...
ドキュメント編――――――――――――――――――help 等のドキュメントの使い方   関数を初めて使うとき,使い方がよくわからないとき,エラーが出るとき,必ず help を読む!   特に初めて使う関数の help は,流し読みでもいい...
Upcoming SlideShare
Loading in …5
×

初心者講習会資料(Osaka.R#5)

3,828 views

Published on

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

No Downloads
Views
Total views
3,828
On SlideShare
0
From Embeds
0
Number of Embeds
11
Actions
Shares
0
Downloads
14
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

初心者講習会資料(Osaka.R#5)

  1. 1. Osaka.R#5 初心者講習会資料 2011/04/23 林真広スクリプトの実行 スクリプト(コマンド,プログラム,命令ともいう)をコンソール,またはエディタに書き込む エディタは,メニューバーから「ファイル>新しいスクリプト」とたどって起動する エディタ コンソール エディタに書いたスクリプトは,保存しておけば,一度 R を閉じても,「ファイル>スクリプトを開 く」で読み込める コンソールにスクリプトを書き込んだ場合は,エンターキーを押せば実行される エディタに書き込んだ場合は,Ctrl+R でカーソルのある行が実行される  範囲を選択して Ctrl+R を押せば,選択した範囲すべてが実行される  「編集>カーソル行または選択中の R コードを実行」またはツールバーのボタンでも同じ 大文字小文字,全角半角の区別あり(全角は基本的に使わないほうがいい!)  特に記号の全角半角に注意が必要  "”$$!!++--==(()) 見分けがつきますか…?  変換ではなく IM を On/Off したほうが確実 1
  2. 2. コンソールの状態 左は何でも入力できる状態。左端に「>」が表示されている 右は続きの入力を待っている状態。左端に「+」が表示されている  この状態の場合,「正しく」続きを入力しなければエラーになる  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 「#」を書くと,それ以降はコメントとして扱われる(処理の上で無視される) 半角のスペースは見やすさのために記号や関数名の前後などに挿入できる  「1 + 1」「print( "Hello, world!" )」「mean (x)」など  「x< -y」「me an(x)」などはだめ  記号の前後(「x <- y」や「1 + 1」),コンマの後ろ(「c(1, 2, 3)」)に入れると読みやす くなる  改行も適宜挿入できるが,挿入できる場所はコンマや記号の後ろにかぎられる  スペースの使い方などは自分ルールでもいいが,Googles R Style Guide や R Coding Conventions などの既存のルールに従うと,読みやすいスクリプトが書ける R の操作には関数を使う  基本的な操作は,「関数(値)」と命令するだけ。数学の f(x)と同じ  さらに f(x)と同様に,入力に対して関数は必ず値を返す(値は数値とは限らない) 関数に入力する値を引数(ひきすう),関数が返す値を返り値または戻り値と呼ぶ  mean の例の場合,x という変数が引数,3 という数値が返り値 複数の引数を関数に入力する場合,区切り文字として「,」を使う  例えば「mean(x, na.rm=TRUE)」,na.rm は欠損値(NA)を省くか否か 2
  3. 3. 理論編――――――――――――――――――――関数の使い方 関数は,関数(引数 1, 引数 2, 引数 3, ...)というふうに使う 引数は名前を持っていて,関数(名前=引数)という書き方をする 名前は省略可能だが,省略できない場合もあるので省略しないほうが無難 引数に初期値が設定されている場合,引数を省略できる  ただし,例えば 3 つ引数がある関数で第 2 引数を省略する場合,第 3 引数は名前を省 略できない  でないと,第 2 引数が省略されたのか第 3 引数が省略されたのか R には判断できない 初期値 引数の名前変数 変数は入れ物のようなもの 変数に入れる実体をオブジェクトと呼ぶ 新たな変数を作るときは,「新たな変数 <- オブジェクト(または変数)」というふうに書く すべての関数は値(オブジェクト)を返すので,これも変数に入れられる  「新たな変数 <- 関数(引数 1, 引数 2, 引数 3, ...)」とすればいいオブジェクト オブジェクトにはクラス(種類)がある もっとも基本的なクラスは数値(numeric),文字列(character),論理(logical)クラス 他 に 重 要 な ク ラ ス は 因 子 ( factor ) , 行 列 ( matrix ) , リ ス ト ( list ) , デ ー タ フ レ ー ム (data.frame)クラス  ここでいう因子は因子分析の因子とは関係がなく,カテゴリ変数のこと  行列は二次元の行列  データフレームは,ケース(行)×変数(列)という形の,分析に用いるデータセット  R を使う用途によってクラスの重要度は異なるので最初からすべて理解する必要はない オブジェクトのクラスによって扱いが異なるので,どのクラスのオブジェクトを操作しているのか を常に意識しよう 3
  4. 4. 数値(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 列目の要素を取り出す 4
  5. 5. 文字列(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 と省略できる 省略記法は間違いの元なので最初のうちはあまり使わない方がいい 5
  6. 6. データフレーム(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) # カテゴリの概念があるので,カテゴリごとに集計できるリスト(list)クラス 各種クラスのオブジェクトをひとまとめにするためのオブジェクト データフレームは実はリストの拡張なので,操作方法は似ているl1 <- list(num=1:5, char=c("a", "b", "c", "d"), mat=matrix(1:9, ncol=3)) # 「名前=オブジェクト(または変数)」で要素を設定 6
  7. 7. # リストにはなんでも入る!# なんらかの統計解析をおこなう関数は,たいてい返り値がリスト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) # クロス表作成 7
  8. 8. 実践編――――――――――――――――――――作業ディレクトリの設定 作業ディレクトリ(ディレクトリはフォルダとだいたい同じ意味)とは,データの入出力の際に基 準となるディレクトリ 作業の前にまず設定しておく# 現在の作業ディレクトリを返す(Get Working Directory)getwd()# 作業ディレクトリの設定(Set Working Directory)setwd("c:/Users/UserName/Documents")# R でのディレクトリの区切り文字は"/"もしくは Windows の場合は"¥¥"も可# ダイアログで対話的にディレクトリを選択し,ディレクトリのパスを返すchoose.dir()# choose.dir()のファイル版choose.files()# 対話的にディレクトリを選択し,作業ディレクトリに設定するsetwd(choose.dir()) パッケージのインストール,読み込み パッケージの追加により機能を増やせる  メニューバーから”パッケージ>パッケージのインストール”  どこからダウンロードするかを選ぶ。ダウンロードできるものはどこでも同じなので,Japan の中から好きなものを選ぶ 関数を使ってインストールすることもできるinstall.packages("Hmisc")# 一覧から探す必要がないのでおすすめinstall.packages(c("memisc", "car"))# 複数まとめてインストールすることもできるlibrary(Hmisc) # パッケージの読み込みテキストデータの読み込みread.csv("sample.csv", header=TRUE)# 作業ディレクトリから sample.csv を読み込み# header は一行目を列の名前として読み込むかどうかread.delim("sample.txt", header=TRUE) # tab 区切りの場合 8
  9. 9. read.table("sample.txt")# より柔軟にテキストファイルを読み込む。詳細は help(read.table)# data.frame という形式で読み込まれる他のソフトウェアのデータの読み込み 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")write.table(d1, "sample.txt")データの操作summary(d1) # 全データの要約統計量describe(d1) # Hmisc パッケージの関数(summary より詳しい)head(d1) # データの先頭数行を表示。末尾は tail(...)colnames(d1) # データに含まれる変数の名前を取得d1$SEX # 変数へのアクセスd1$SEX[5] # 変数の 5 番目のケースd1[5,3] # [行番号, 列番号]という形式でもアクセスできるデータの閲覧(単純集計表)# カテゴリ変数の場合table(d1$JOBCAT)summary(d1$JOBCAT)describe(d1$JOBCAT)# 連続変数の場合table(d1$AGE) # 実用的ではないstem(d1$AGE) # 幹葉図hist(d1$AGE, breaks="FD") # ヒストグラム# breaks は区切り方の指定。デフォルトの方法は古典的すぎるので変更 9
  10. 10. データの閲覧(記述統計)summary(d1$SALNOW)describe(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.frame# 「従属変数 ~ 独立変数」という書き方は頻繁に出てくるので要チェックaggregate(percent(JOBCAT) ~ MINORITY, data=d1) # パーセントで表示genTable (percent(JOBCAT) ~ MINORITY, data=d1) # 返り値は table変数のリコード リコードの方法はたくさんあるが,memisc の recode()が最も汎用的 Hmisc,car パッケージにも recode()がある。先に読み込んだものが上書きされるので, memisc を一番最後に読み込むように!d1$AGE3 <- recode(d1$AGE, "低" <- range(min , 40), "中" <- range(40.01, 60), "高" <- range(60.01, max))d1$JOB3 <- recode(d1$JOBCAT, "事務" <- c("事務職", "事務研修員"), "マニュアル" <- "警備員", "専門・管理" <- c("専門職研修員", "管理職", "MBA 研修員", "技術職")) R ではカテゴリ変数と連続変数が明確に区別されることに注意! 10
  11. 11. ドキュメント編――――――――――――――――――help 等のドキュメントの使い方 関数を初めて使うとき,使い方がよくわからないとき,エラーが出るとき,必ず help を読む! 特に初めて使う関数の help は,流し読みでもいいから絶対に目を通す!help(describe)?describe # help(describe)と同じ。利便性のための省略形。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 パッケージのヘルプ 11

×