Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Ⅲ. 資料編 2017

69 views

Published on

Rの初心者向け一日講座テキストの第三分冊(全四冊)

Published in: Education
  • Be the first to comment

  • Be the first to like this

Ⅲ. 資料編 2017

  1. 1. 統計解析ソフト R による 「ミクロデータ分析の基礎」 平成 29 年度(2017 年) Ⅲ. 資料編 作成: 和田かず美・河野真理子 協力: 床裕佳子・坂下佳一郎・田中隆・飯島信也
  2. 2. 目次 1.プログラミングのために...........................................................................1 1.1 基本的な演算子 .............................................................................1 1.2 基本的な構文 ................................................................................1 1.3 ワークスペース(作業領域)についての基本的な操作..............................2 1.4 ファイルやディレクトリの操作..........................................................2 1.5 ダブルクォーテーション["] ..............................................................3 1.6 円記号[¥] ....................................................................................4 1.7 欠損値とその仲間たち.....................................................................4 1.8 日本語対応...................................................................................5 1.9 注意事項......................................................................................6 2.データの入力方法...................................................................................6 2.1 コンソールでの直接入力 ..................................................................6 2.2 データエディタの利用.....................................................................7 2.3 CSV など、区切り文字によりデータが区分されているファイル..................7 2.4 固定長のテキストファイル ...............................................................8 3.データの出力方法...................................................................................8 3.1 作業領域(Workspace)全体の保存: バイナリファイル..........................8 3.2 特定のデータの保存とロード: バイナリファイル ...................................9 3.3 特定のデータの保存とロード: バイナリファイル ...................................9 3.4 コード履歴の保存: テキストファイル ...............................................10 4. グラフィック関係................................................................................10 4.1 色指定の方法 ..............................................................................10 4.2 カラーパレットについて ................................................................10 4.3 拡張メタファイルの利用方法...........................................................11 5. 今後さらに学ぶために ..........................................................................12 5.1 ヘルプの使い方 ...........................................................................12 5.2 検索方法....................................................................................12 5.3 お勧めの参考書 ...........................................................................13 5.4 各地での勉強会 ...........................................................................13
  3. 3. III-1 1.プログラミングのために 1.1 基本的な演算子 よく使う演算子には、以下のようなものがある。比較演算子や論理演算子は、次の節で 紹介する条件分岐などで使用する。 1.2 基本的な構文 (1) 繰り返しの処理  for: ある処理を繰り返し行いたい場合、あらかじめ繰り返し回数を与え、以後に記述 する処理を繰り返す。繰り返す処理は、{}内に書くか、処理が短い場合は{}なしで、 繰り返し回数の後ろに記述することが可能。 # 例 1 for (i in 1:5) print("Hello") # 例 2 nm1 <-c("Mio", "Ryo", "John", "Yuki", "Taro") for (i in 1:5) { print(paste("Hello, ", nm1[i], "!", sep="") ) } 演算子 意味 + 加算 - 減算 * 乗算 / 除算 ^ べき乗 比較演算子 意味 == 等しい != 等しくない >= 以上(≥) > より大きい <= 以下(≤) < より小さい 論理演算子 意味 ! NOT && AND(数値) || OR(数値) & AND (ベクトル) | OR (ベクトル) ~資料編について~ ここでは、基礎編、分析編で網羅しきれなかった、プログラムの構文や、データ の入出力方法について、最低限必要と思われる内容を収録した。また、今後職場に 戻って R を使って仕事をする際に必要になる、ヘルプの使い方や情報検索の方法や、 地域で行われている勉強会等についても紹介する。
  4. 4. III-2  while: 特定の条件が満たされるまで、while 文内の{}で囲んだ処理を繰り返す。 i<-5 while (i> 0){ print("Hello!") i<-i-1 } (2) 条件分岐  if () {} else {}: if()の括弧の中の条件(論理値)により、TRUE の場合は else 前の {}内の処理、FALSE の場合は else 後の{}内の処理を行う a <- rnorm(1) #aに平均値 0、標準偏差1の正規乱数を付与 if (a > 0) { print("a > 0") #a が 0 より大きい場合「a>0」表示 } else { print ("a <= 0") #a が 0 以下の場合「a<=0」表示 } a # a の表示  ifelse: ifelse 直後の括弧内の条件を満たす場合の処理と満たさない場合の処理を並べ て記述する #if() {}else{}を 1 行で記述可能 答えは上記と同じ result <-ifelse(a > 0, print("a > 0"), print("a <= 0")) 1.3 ワークスペース(作業領域)についての基本的な操作 1.4 ファイルやディレクトリの操作 #現在のディレクトリを取得 getwd() #ファイル一覧取得 A1 <- A2 <- 0 ls() # 作業領域にあるものを全て表示 rm(list=ls()) # 作業領域にあるものを全て消去 B1 <- 1; B2 <- 2; B3 <- 3 rm(B1, B3) # B1 と B3 を削除
  5. 5. III-3 list.files() #ディレクトリ変更 setwd("mydirectory") #ディレクトリを作成 dir.create("mydirectory") #ファイルの削除 file.remove("myfile") 1.5 ダブルクォーテーション["] ファイル名や色名、文字列などの指定はダブルクォーテーションで囲んで指定するが、そ のダブルクォーテーションは半角でなければならない data(cars) # cars データをロード plot(cars, pch=21, bg="gray") # 散布図作成 半角 lm1 <- lm(cars$dist~cars$speed) # dist を speed で説明する回帰分析 summary(lm1) # 結果表示 #Call: lm(formula = cars$dist ~ cars$speed) # Residuals: Min 1Q Median 3Q Max # 残差 -29.069 -9.525 -2.272 9.215 43.201 # Coefficients: 回帰係数 # Estimate Std. Error t value Pr(>|t|) #(Intercept) -17.5791 6.7584 -2.601 0.0123 * #cars$speed 3.9324 0.4155 9.464 1.49e-12 *** #--- #Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 # #Residual standard error: 15.38 on 48 degrees of freedom #Multiple R-squared: 0.6511, Adjusted R-squared: 0.6438 #F-statistic: 89.57 on 1 and 48 DF, p-value: 1.49e-12 # # 回帰係数の推定結果は # dist(距離) = 3.9324 × speed(速さ) -17.5791 # 散布図に回帰直線を描き足す abline(lm1, col= “red”, lwd=2) # 全角 エラーも出ない abline(lm1, col= "red", lwd=2) # 半角, lwd=2 で線の太さを倍に
  6. 6. III-4 1.6 円記号[¥] Windows でディレクトリのパス指定に使われる円記号¥は、二重「¥¥」にするか、ある いはスラッシュ「/」に置き換える必要がある setwd("e:/R 研修") setwd("c:¥¥") 1.7 欠損値とその仲間たち 外部ファイルを R に読み込む際に、ブランクデータは自動的に欠損値を表す NA に変換 される。NA に対する演算結果は全て NA になる。ある値が NA かどうかの確認を行うため に、比較演算子の「==」では TRUE/FALSE の結果が得られないことに留意する必要があ る。NA かどうかを判定するためには、「is.na」という特別な関数が用意されている。 NA の他にも、NAN、Null、Inf といった特別なデータがあり、プログラムエラーの原因 になることが多い。  欠損値 NA x1 <-c(1,,5,2,4) #->「以下にエラーc(1, , 5, 2, 4) : 引数 2 が空です」 x1 #->「エラー: オブジェクト'x1' がありません」 x1 <-c(1,NA,5,2,4) x1 #->「[1] 1 NA 5 2 4」引数 2 が NA x1 == 5 #->「[1] FALSE NA TRUE FALSE FALSE」 which(x1 == 5) # x1 の値が 5 であるデータ番号 #->「[1] 3」 which(x1 == NA) # x1 の値が NA のデータ番号 #->「integer(0)」# 1 つもない x1 == NA #->「[1] NA NA NA NA NA」 sum(x1) #「[1] NA」  NA への対応方法 x1[!is.na(x1)] # NA を単に除去 #->[1] 1 5 2 4 sum(x1[!is.na(x1)]) # 除去後合計を計算 #->[1] 12 x2 <-ifelse(is.na(x1), 0, x1) # NA を 0 に置き換え sum(x2) #->[1] 12 x2 #->[1] 1 0 5 2 4 ☆ Word やパワーポイント上にコードを書くと、自動的に半角のダブルクォーテー ションが全角に変換され、R のコードがうまく動かない原因になる
  7. 7. III-5  NA 以外の NAN、Null、Inf ・NaN: 非数。例えば 0 を 0 で割ると得られる。 ・Null: なにもないことを示す。NA が欠測を示すのに対し、Null はなにもないことを示 し、ベクトルや行列といった構造を持つことはできない。 ・Inf, -Inf: 無限大。例えば 5 を 0 で割ると得られる。 検査のための関数 機能 is.nan() 非数かどうか is.null() NULL かどうか is.finite() 有限かどうか is.infinite() 無限大かどうか 1.8 日本語対応 R では、変数名に英数字以外に日本語も対応している。しかし、R のコンソールに入力す ると、デフォルトのフォントの設定ではカーソルの表示位置と実際の位置がずれてしまう。 次のように、GUI 設定で日本語フォントを指定することにより、その問題を回避すること ができる。 ① ツールメニューの「編集」-「GUI プリファレンス」 ② Rgui 設定エディターの「Font」に「MS Gothic」を選択し「OK」を押す 図 1.1 Rgui 設定エディター
  8. 8. III-6 1.9 注意事項 R は、同じ処理をするのに何通りもの書き方ができるため、思考の筋道がそのままコード に反映される自由度の高いプログラミング言語だが、その利点を別の側面から見れば、人 のコードは読み難い。 コーディングに慣れれば短いコードが書けるようになり、一般には短いコードほど管理 が楽になるが、一定限度以上に短さを追求すればコードが非常にわかりにくくなる。また、 自分のコードであっても、書いてから時間が経過すると、それが何の処理をしているのか がわからなくなることはよくある。このため、普段から特に可読性を意識し、きめ細かく コメントを加える習慣が必要となる。 コードを書く人が周囲に複数いる場合、外部から読み込んだデータは上書きしない等、 日頃の定型処理の標準化をしたり、新しいパッケージの利用法などの情報共有をしたりす ることにより、開発効率とお互いのコードの可読性が向上する。 2.データの入力方法 2.1 コンソールでの直接入力 例)cars データの車の制動距離データ[50×2]  変数は、車のスピードと制動距離の二つ  それぞれ speed と dist という変数名を設定し、「c()」の中に要素をカンマ区切りで並 べて付置することにより、ベクトルデータを作成し、次に dat1 にそれぞれのベクトル を cbind で横に並べて行列データを作成している # スピード speed <- c(4, 4, 7, 7, 8, 9, 10, 10, 10, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 16, 16, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 20, 20, 20, 20, 20, 22, 23, 24, 24, 24, 24, 25) # 制動距離 dist <- c(2, 10, 4, 22, 16, 10, 18, 26, 34, 17, 28, 14, 20, 24, 28, 26, 34, 34, 46, 26, 36, 60, 80, 20, 26, 54, 32, 40, 32, 40, 50, 42, 56, 76, 84, 36, 46, 68, 32, 48, 52, 56, 64, 66, 54, 70, 92, 93, 120, 85) # 二つのベクトルの結合(データの構造を行列に) dat1 <- cbind(speed,dist)
  9. 9. III-7 2.2 データエディタの利用 ① まずは空のデータフレーム dat2 を作成する ② コンソールのメニューバーから「編集」⇒ 「データエディタ」を選ぶとデータエデ ィタが起動するので、必要なデータを入力する ③ メニューバー操作の代わりに fix 関数でも同じことができる ④ fix 関数の代わりに edit 関数を使用する場合は付値が必要 dat2 = data.frame() # まず空のデータフレーム dat2 を作成 # コンソールのメニューを操作する場合は「編集」 => 「データエディタ」 # 同じ操作を以下のコマンドでもできる fix(dat2) 2.3 CSV など、区切り文字によりデータが区分されているファイル 例) 一般用ミクロデータ(平成 21 年全国消費実態調査)詳細版 上から 8 行目まではコメント等が含まれており、9 行目が項目名、10 行目からデータ という構造になっているので、8 行目まで読み飛ばし、9 行目をヘッダ(項目名の文字列 をそれぞれ R 上の変数名とみなす)として使用する。 ☆ 行列の要素は全て同じ型のデータという制約があるが、データフレームは列毎 に型の違うデータを保持することができる
  10. 10. III-8 dat <-read.table("ippan.csv", header=TRUE, sep=",", skip=8) #ヘッダを表示するため、header=TRUE を指定 # sep は区切り文字 # 読み飛ばす行数を skip で指定 head(dat) # データの冒頭を、指定しなければ 6 レコード表示 tail(dat, n=5) # データの末尾を、n=で指定した数だけ表示 読み込み時に、各変数のデータ型を明示的に指定することもできる。このデータは、 全ての項目に数字データ以外は入っていないため、上の例で作成されるデータフレーム 内の変数は全て numeric 型となる。 カテゴリデータが入っているレコードの先頭から 7 変数について、因子属性にしたい 場合は、読み込む際に次のように指定すれば良い。 dat5 <- read.table("ippan_2009zensho_z_datasetE410R.csv", header=T RUE, sep=",", skip=8, colClasses=c(rep("factor",7), rep("numeric ",423))) # factor 型が 7 列、numeric 型が 423 列 2.4 固定長のテキストファイル read.fwf 関数は、区切り文字のない固定長データを読み込むための関数 ・ データは、cars.txt を使用する ・ ヘッダはない ・ 一行 18 桁で、10 桁がスピード、8 桁が距離で左詰め wt1 <-c(10, 8) # 桁数 cn1 <-c("speed", "dist") # 項目名 dat4 <-read.fwf("cars.txt", widths=wt1, col.names=cn1) head(dat4) tail(dat4) # 空白が入ることもあるので特にデータの末尾は確認する 3.データの出力方法 3.1 作業領域(Workspace)全体の保存: バイナリファイル 作業領域は、R のコンソール上で表示させることのできる変数や関数の定義など、関数 ls()により一覧表示される、これまでに行った作業内容が保存されている場所を指し、R を終了すれば消えてしまう。これらをすべて保存するためには、次のような三つの方法
  11. 11. III-9 がある。  関数 save.image()により、作業領域を保存する。保存されたファイルの拡張子は 「.rdata」。 ls() # 保存されるものの一覧 setwd("c:/Rdemo/") # ファイルを作る場所を指定する save.image("Kensyuu1.rdata") # 指定フォルダに、Kensyuu1.rdata が保存される  メニューバーから「ファイル」⇒ 「作業スペースの保存」 ⇒ ファイル名を指定  R 終了時にダイアログボックス「作業スペースを保存しますか?」が表示されるので 「Yes」を選ぶ 3.2 特定のデータの保存とロード: バイナリファイル 3.1で紹介したように作業領域全体を保存する場合、必ずしも必要のない一時的な変 数やデータも保存され、ファイルのサイズが大きくなり、ハードディスク内の容量を圧迫 する結果となることが多い。必要なデータフレームなどの変数を指定してそれだけを保存 することもできる。 setwd("c:/Rdemo/") # ファイルを作る場所を指定する data(iris) # あやめのデータを呼び出す save(iris, file="iris.rdata") # 指定フォルダに、iris.csv が保存される data(cars) # 組み込みの cars データも呼び出す save(iris, cars, file="iris_cars.rdata") # 二つのデータをまとめて保存 # ----------------------------------------- # R を終了し、作成した iris_cars.rdata を呼び出してみる setwd("c:/Rdemo/") # ファイルがある場所を指定する load(iris_cars.rdata) ls() # cars と iris のデータが作業領域にロードされる 3.3 特定のデータの保存とロード: バイナリファイル データの出力には様々な方法があるが、ここでは write.csv 関数を用いてカンマ区切り のテキストデータを出力する方法を紹介する。以下は、組み込みのあやめのデータを csv ファイルとして指定場所に出力する。
  12. 12. III-10 setwd("c:/Rdemo/") # ファイルを作る場所を指定する data(iris) # あやめのデータを呼び出す write.csv(iris, file="iris.csv") # 指定フォルダに、iris.csv が保存される write.csv(iris, file="iris1.csv", quote=FALSE, row.names=FALSE) # iris1.csv は行ラベルなしで、文字データにクォーテーションをつけない 3.4 コード履歴の保存: テキストファイル R のコンソールで実行したコマンド類の履歴の保存は、メニューバーから「ファイル」⇒ 「履歴の保存」でファイル名選択のダイアログが表示される。保存される履歴コードファ イルの拡張子は、「. Rhistory」になり、テキストエディタで開くことができる。 4. グラフィック関係 4.1 色指定の方法  番号による指定: plot 関数のオプションで、「col=2」という形で指定する 1 黒、2 赤、3 緑、4 青、5 水色、6 紫、7 黄、8 灰、9 黒、10 赤…  色名による指定: plot 関数のオプションで、「col="red"」という形で指定する colors() で色名の一覧が表示される  16 進数のカラーコードによる指定も可能 http://research.stowers.org/mcm/efg/R/Color/Chart/ColorChart.pdf 4.2 カラーパレットについて カラーパレットとは、グラフィックを作成するときに使用する色の組合のセットを指す。 既存のカラーパレットの一覧は、パッケージ RColorBrewer の関数 display.brewer.all()に より確認することができる。代表的なものは、以下のとおり。 # R の色名の表示 colors() #色名が表示される # [1] "white" "aliceblue" "antiquewhite" # [4] "antiquewhite1" "antiquewhite2" "antiquewhite3" # [7] "antiquewhite4" "aquamarine " "aquamarine1" # [10] "aquamarine2" "aquamarine3" "aquamarine4" # [13] "azure" "azure1" "azure2" #色の表示(赤,青,緑)
  13. 13. III-11 barplot(rep(1,3), col=c("red", "blue", "green"), axes=FALSE) n <-16 # 色数指定 16 進 8 桁または 6 桁で表示される # 虹色 rainbow(n) pie(rep(1,n), col=rainbow(n)) #色の表示(円グラフ) # 薄い水色の cyan から薄いマゼンタまでのグラデーション(16 進表示) cm.colors(n) cols <- cm.colors(10) #グラデーションのうち、10 色を表示 par(mar=c(0,0,0,0)) plot(NULL, xlim=c(0,10), ylim=c(0,1), axes=FALSE, xlab="", ylab="") rect(0:9, 0, 1:10, 1, col=cols) # グラデーションの表示 topo.colors(n) # 青-> 緑-> 黄-> オレンジ(地質/地形/地勢など) terrain.colors(n) # 緑->黄->オレンジ->ピンク- >白(地形など) heat.colors(n) # 赤->オレンジ->黄色->白(熱など) gray.colors(n=10) # 白黒の濃淡 gray(1:10/10) # 白黒の濃淡 blues9 # 青系のグラデーションで引数はない #色の使い方 cols <- c("red", "blue", "green") #使用する色を名前で指定する par(mfrow=c(1,length(cols))) #表示する数 for (i in 1:length(cols)){ #cols で指定した色のバーが表示される barplot(1,col=cols[i],axes=FALSE)} #使えるカラーパレット一覧と名前は display.brewer.all()で確認できる require(RColorBrewer) display.brewer.all() 4.3 拡張メタファイルの利用方法 拡張メタファイルとは、Windows のドロー形式ファイルの一種で、線分や矩形等の描画 が行える office のクリップアートの形式。 • 拡張メタファイルの拡張子は emf • ドロー形式では、プロットは図形の集合で表され、次の手順で要素を分解して編集す ることができる
  14. 14. III-12 ① R のプロット図を emf ファイルとして保存 ② 例えばパワーポイントで、「挿入」⇒ 「図」⇒ ファイル選択 ⇒ 「OK」 ③「描画ツール」⇒ 「配置」タブの中にあるグループ化アイコンをクリック ④ グループ化解除 5. 今後さらに学ぶために 5.1 ヘルプの使い方  ヘルプ関数 help(関数名, package = パッケージ名) ?summary # ?+関数名でもヘルプを呼び出せる #ライブラリの収録関数は、そのライブラリをロードする必要がある  関連関数とそのパッケージをリストアップ help.search("obs")  パッケージの概要と関数一覧等 library( help = MASS )  キーワードサーチ apropos("norm") # キーワードでオブジェクト名から検索 help.search("LATEX") # キーワードでヘルプファイルから検索 5.2 検索方法 R は一文字の言語なので、普通に Google 検索などで探しても、求める情報が得られに くい。このため、R のための検索エンジン SeekR が作られている。この他、日本語の R についての wiki サイト Rjpwiki 内で単語検査をすることができる。  R のための検索エンジン SeekR http://seekr.jp/  Rjpwiki [http://www.okadajp.org/RWiki/] で単語検索 http://www.okadajp.org/RWiki/?cmd=search
  15. 15. III-13 その他のお勧めサイトは、以下のとおり。  三重大 奥村先生の「統計・データ解析」 https://oku.edu.mie-u.ac.jp/~okumura/stat/  元群馬大 青木先生の「R による統計処理」 http://aoki2.si.gunma-u.ac.jp/R/index.html  東工大 間瀬先生の「R 基本統計関数マニュアル」 https://cran.r-project.org/doc/contrib/manuals-jp/Mase-Rstatman.pdf 5.3 お勧めの参考書 Rjpwiki に「R 本リスト」というページがあり、国内で刊行されているほとんどの参考書 が網羅されている。 http://www.okadajp.org/RWiki/?R%E6%9C%AC%E3%83%AA%E3%82%B9 %E3%83%88 辞書的に使用する参考書には、以下のものをお勧めする。教科書的な参考書については、 各自の目的やレベルに合わせて、書店で内容を確認して選ぶと良い。 「The R Tips 第 3 版: データ解析環境 R の基本技・グラフィックス活用集」 5.4 各地での勉強会 国内外の各地で、R の勉強会が行われており、日本では、そのような勉強会の関係者が年に 一度集まる Japan.R というイベントが、例年 11 月下旬から 12 月上旬に開催されている。 今年度の開催情報はまだ掲載されていないが、Japan.R のサイトは、http://japanr.net/。 このサイトで紹介されていた地域別の勉強会は以下のとおり。 Fukuoka.R https://www.facebook.com/fukuoka.stat.R HiRoshima.R https://atnd.org/events/66463 HijiyamaR https://atnd.org/events/87953 Kashiwa.R https://www14.atwiki.jp/kashiwar/ Kobe.R https://kobexr.doorkeeper.jp/ Nagoya.R https://atnd.org/events/83111 Okinawa.R https://www.facebook.com/okinawa.r/ Osaka.R https://sites.google.com/site/osakarwiki/ SappoRo.R http://kokucheese.com/event/index/423714/ Shiga.R https://atnd.org/events/5939 Tokyo.R https://atnd.org/events/88767
  16. 16. III-14 Tsukuba.R http://seesaawiki.jp/w/syou6162/ Yamadai.R https://atnd.org/events/37336 Yokohama.R https://github.com/YokohamaR/yokohama.r [参考] 国内の R 関係のハッシュタグ #rstatsj (国内の R 統計関係) #TokyoR #HiRoshimaR #HijiyamaR #SappoRoR #NagoyaR #OsakaR [余談] R とも連携可能なフリーの地図ソフト QGIS 等について、既存の情報交換の場が近場に ないので自分で作ったお話 https://www.slideshare.net/jyuntanaka/ss-63877775

×