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.

統計環境R_データ入出力編2016

143 views

Published on

2016年度用に作成した研修テキストです。2015年度版を微修正しており、基本的に同じ内容です。演習用コードとあわせてご利用ください。

Published in: Education
  • Be the first to comment

統計環境R_データ入出力編2016

  1. 1. 2016/09/29 統計解析ソフト「R」の基礎
  2. 2. 目 次 I. データの入力方法 A) コンソールでの直接入力 B) データエディタの利用 C) csvファイル [その1、その2] D) 固定長テキストファイル E) 複数のcsvファイルをまとめて II. 基本的な出力方法 A) ワークスペース全体の保存 B) コードの履歴の保存 C) バイナリファイル D) csvファイル 2 III. 関連知識  作業領域の掃除方法  ディレクトリやファイル の操作  ダブルクォーテーション  円記号  プログラミングの留意点  繰り返し処理  条件分岐  比較演算子  論理演算子  欠損値NAとその対処方法  NaN, Null, Inf演習用コードファイル: Rデモ02_入出力編.r
  3. 3. Ⅰ. データの入力方法
  4. 4. • 変数は、車のスピードと制動距離の二つ • それぞれspeedとdistという変数名を設定し、 「c()」の中に要素をカンマ区切りで並べて付置 することにより、ベクトルデータを作成し、次に dat1にそれぞれのベクトルをcbindで横に並べて 行列データを作成している A) コンソールでの直接入力 speed <- c(4, 4, 7, 7, …, 25) dist <- c(2, 10, 4, 22, …, 85) dat1 <- cbind(speed, dist) 4 例1. 車の制動距離データ [50×2] ※ 上のコマンドではデータを途中省略しているため、このスライドに対応している デモコードファイル「Rデモ02_入出力編.r」を参照してください
  5. 5. ちょっと脱線: Rがお勧めな理由 plot(dat1) # 散布図描画 summary(dat1) # データの基本統計量表示 lm1 <- lm(dist~speed) # 回帰分析 summary(lm1) # 回帰分析結果表示 abline(lm1, col= "red") # 回帰線描画 データを入力すれば、散布図 を描き、回帰分析を行い、回 帰線を散布図に表示させる作 業がコマンド数行で終わる。 ※ lm関数の戻り値はリスト 5
  6. 6. • まずは空のデータフレーム dat2 を作成 • コンソールのメニューバーから「編集」 => 「データエ ディタ」を選ぶとデータエディタが起動するので、必要 なデータを入力する • メニューバー操作の代わりに fix 関数でも同じことがで きる • fix関数の代わりにedit 関数を使用する場合は付値が必要 B) データエディタの利用 dat2 <- data.frame() # 空のデータフレーム作成 fix(dat2) # データエディタの起動 6 ※ 行列の要素は全て同じ型のデータという制約があるが、 データフレームは列毎に型の違うデータを保持できる
  7. 7. • read.csv 関数は、表形式のcsvを読み込むための関数 • File.choose 関数を使用することにより、ファイル選 択のダイアログボックスが開き、任意のファイルを指 定することができる • データは、cars.csv を使用する (cars.csvは、Rの組込みデータcarsをcsvファイルにしたもの) C) CSVファイル、その1 data1 <- read.csv(file.choose()) head(data1) # データの冒頭だけ表示 tail(data1) # データの末尾だけ表示 7 ※ データを読み込んだ後、内容確認をしておく。特に末尾は空レ コードなどが入る場合があるので、必ずチェックする。
  8. 8. • 大量データ処理にはダイアログボックスよりも、ファイ ル名を指定してcsvファイルを読む方が効率が良い • データは、cars2.csvを使用する C) CSVファイル、その2 setwd("c:/Rdemo/") # ファイルを置いたディレクトリを指定 dat3 <- read.csv("cars2.csv", header=TRUE) # データにヘッダがない場合はheader=FALSEを指定 head(dat3) # データの冒頭だけ表示 tail(dat3) # データの末尾だけ表示 8  cars.csvとcars2.csvのファイルの中身を、EXCEL で確認してみよう!  cars.csvとcars2.csvのファイルの中身を、テキス トエディタで確認してみよう!  csvデータの内容確認は、EXCELではなくテキスト エディタで!
  9. 9. • read.fwf 関数は、区切り文字のない固定長データを 読み込むための関数 • データは、cars.txt を使用する • ヘッダはない • 一行18桁で、10桁がスピード、8桁が距離で左詰め D) 固定長テキストファイル wt1 <- c(10, 8) # 桁数 cn1 <- c("speed", "dist") # 項目名 dat4 <- read.fwf("cars.txt", widths=wt1, col.names=cn1) head(dat4) # データの冒頭だけ表示 tail(dat4) # データの末尾だけ表示 9
  10. 10. E) 複数のCSVファイルをまとめて より複雑な読込み処理に挑戦! E-1. 擬似ミクロデータについて E-2. ファイル一覧 E-3. レイアウトと符号表 E-4. まず1ファイル読んでみる E-5. 変数名の付与 E-6. さらに楽をしよう! 10
  11. 11. E-1. 擬似ミクロデータについて • 統計調査の集計表をもとに、乱数を用いて再現し た擬似的な個別データ • (独)統計センターが平成16年全国消費実態調査に ついて作成し、平成27年度までHP上で提供(現在 は提供終了) • 利用要件 申出者及び利用者以外の者に利用させないこと 集計表から擬似的に作成したデータなので、 分析結果は実証研究の結果と見なすことができないこと を理解すること 利用者アンケートの提出 11
  12. 12. 平成16年全国消費実態調査 総務省統計局が5年毎に実施。 世帯を対象に、家計の収入・支出及び貯蓄・負 債、耐久消費財、住宅・宅地などの家計資産を 総合的に調査。 標本の大きさ 二人以上の世帯 約5万5千、単身世帯 約4千 疑似ミクロデータは二人以上の勤労者世帯 データ約3万2千件を収録。 調査の詳細は、 http://www.stat.go.jp/data/zensho/2004/index.htm 12
  13. 13. 13 データファイル(7分割のCSVファイル) E-2. ファイル一覧
  14. 14. データファイルをエディタで表示すると 14 内容を理解するためには、 「データレイアウト」や 「符号表」が必要
  15. 15. 解凍した擬似ミクロデータファイル一覧 データレイアウトと符号表(Excelファイル) 15 データファイル(7分割のCSVファイル) E-3. レイアウトと符号表
  16. 16. • read.csv関数 GIJI_2004zensho_dataset(00001~05000).csv E-4. まず1ファイル読んでみる setwd("c:/Rdemo/giji") giji1 <- read.csv("GIJI_2004zensho_dataset(00001 ~05000).csv", header=FALSE) head(giji1) tail(giji1) 変数名はV1, V2, … として自動で設定される 16
  17. 17. hd1 <- read.csv("GIJI_2004zensho_vname.csv", header=FALSE) # hd1はデータフレームになる colnames(giji1) <- as.vector(hd1[,1]) E-5. 変数名を付与するには 変数名ファイルGIJI_2004zensho_vname.csvが容易 されているので、それを使ってgiji1に変数名を付与 任意の変数名を予めデータファイルの一行目にセッ トしておき、ヘッダつきファイルとして再読み込み giji1 <- read.csv("GIJI_2004zensho_dataset(00001 ~05000).csv", header=TRUE) 17
  18. 18. i. コンスタント作成(Excel作業) データレイアウト付属の符号表(Excelファイル)を加 工して、 擬似ミクロデータを R に変数名を付加させな がら読み込ませるための情報ファイル(コンスタント) を作成 ii. コンスタント読込み ( R 作業) iii. データファイル読込み( R 作業) 作業フォルダから複数あるデータファイルの名前を取 得し、データファイルを連結させながら読み込むと同時 に、コンスタントを用いて変数名や属性を指定する。 E-6. さらに楽をしよう! • 変数名、漢字の項目名と、データが因子か数量かを区別 できる情報を持つ符号表を活用 • 複数のデータファイルの読み込みを自動化 18
  19. 19. カンマ区切りの固定長データ => Rへの読み込みに必要なのは「変数名」と、各変 数が数量データであるかカテゴリデータであるかを示す「型」だけ 後で役に立つかもしれないので、ここでは参照用に「行番号」と「階層」、表示用 に「項目名」も残しているが、必須ではない 紫色で囲んだ行 (「変数名」のある行) を利用 19 符号表をExcelで表示すると
  20. 20. - EXCELでの作業手順 - 1. ヘッダより上の行を削除 2. 「変数名」で並べ替え、ブランク行削除 3. 「型」で並べ替え、ブランクを2に書き換え 4. 「行番号」順に並べ替え 5. 必要のない列を削除 6. ヘッダを半角文字に 7. CSVファイルとして保存[ここでは code.csv] 20 i. コンスタント作成 1 : 数量データ ブランク: カテゴリデータ Rに読み込むとブランクはNA に化けるので2に書き換える 型 ヘッダ
  21. 21. ii. コンスタント読込み ~ EXCELで作ったCSVファイルの最後にはよくゴミが残る~ 21 rm(list=ls(all=TRUE)) # 作業領域のお掃除 setwd("c:/Rdemo/giji/") # ファイルを置いたディレクトリの指定 cd1 <- read.csv("code.csv", header=TRUE) tail(cd1) a1 <- which(!is.na(cd1$ren)) # コンスタントファイル末尾の cd1 <- cd1[a1,] # ブランク行削除 tail(cd1) # cd1の末尾確認 no koumoku lvl type namae 192 517 土地家屋借金返済 4 1 Youto178 193 519 他の借金返済 4 1 Youto179 194 521 分割払・一括払購入借入金返済 4 1 Youto180 195 523 財産購入 4 1 Youto181 196 525 その他 4 1 Youto182 197 527 繰越金 3 1 Youto183 # 因子属性への変換抑制フラグ作成 ft1 <- rep(TRUE, dim(cd1)[1]) ft1[which(cd1$type == 2)] <- FALSE
  22. 22. iii. データファイル読込み ~ 分割ファイルがたくさんあっても怖くない~ 22 # 命名規則を指定してデータファイル名の一覧を取得 (f.list <- list.files(path=getwd(), pattern="*).csv")) [1] "GIJI_2004zensho_dataset(00001~05000).csv" [2] "GIJI_2004zensho_dataset(05001~10000).csv" [3] "GIJI_2004zensho_dataset(10001~15000).csv" [4] "GIJI_2004zensho_dataset(15001~20000).csv" [5] "GIJI_2004zensho_dataset(20001~25000).csv" [6] "GIJI_2004zensho_dataset(25001~30000).csv" [7] "GIJI_2004zensho_dataset(30001~32027).csv" dt1 <- do.call("rbind", lapply(f.list, read.csv, col.names=cd1$namae, as.is=ft1, header=FALSE)) dim(dt1) [1] 32027 197
  23. 23. Ⅱ. 基本的な出力方法
  24. 24. A. 作業領域全体の保存 save.image()で作業領域にある全ての変数や関数を保存 することができる [拡張子は「.rdata」] setwd("c:/Rdemo/") # ファイルを作る場所を指定 save.image("Kensyuu1") メニューバーから「ファイル」⇒ 「作業スペースの保 存」 ⇒ ファイル名を指定する 24 ※ このとき保存されるものはls()で一覧表示される R終了時にダイアログボックス「作業スペースを保存しま すか?」が表示されるので「Yes」を選ぶ
  25. 25. 方法2 25
  26. 26. B. コード履歴の保存 26 • メニューバーか ら「ファイル」⇒ 「履歴の保存」で ファイル名選択の ダイアログが表示 される • 保存する履歴 コードファイルの 拡張子は「.r」
  27. 27. C. バイナリファイル • Aの方法で保存すると、バイナリファイルとなり 保存効率が高いが、作業領域全てを保存する場合、 わざわざ消去しない限り必ずしも必要がない一時 的なデータも含まれてしまい、ファイルのサイズ が大きくなりがち • 必要なデータだけを選んで保存することも可能 • 次のコマンドは、擬似ミクロデータのデータレ イアウト情報 cd1 とデータ dt1 を giji.rdata と いうファイル名で保存する 27 save(cd1, dt1, file="giji.rdata") ファイルgiji.rdataは後の演習で使用します!
  28. 28. D. CSVファイル 28 • 次のコマンドは、Rに組込データとして収録さ れているあやめ(iris)の花のサイズに関する データを呼び出し、csvファイルに書き出す • irisデータは、蕚(がく)片の長さと幅、花弁の 長さと幅、あやめの品種の5変数を持つ data(iris) # 5変数150レコードのあやめデータ write.csv(iris, file="iris.csv")
  29. 29. Ⅲ. 関連知識
  30. 30. ■ 作業領域の掃除方法 • 作業領域にある全オブジェクト一覧 ls() • 全オブジェクトを消去 rm(list=ls()) • オブジェクト x1, x2 を消去 rm(x1, x2) • 関数オブジェクト以外の全てのオブジェクトを消 去 rm(list=ls()[!sapply(ls(), FUN=exists, mode="function")]) 30
  31. 31. ■ ファイルやディレクトリの操作 • 現在のディレクトリを取得 getwd() • ファイル一覧取得 list.files() • ディレクトリ変更 setwd("mydirectory") • ディレクトリを作成 dir.create("mydirectory") • ファイルの削除 file.remove ("myfile") 31
  32. 32.  ダブルクォーテーション ファイル名や色名、文字列などの指定はダブ ルクォーテーションで囲んで指定するが、その ダブルクォーテーションは半角でなければなら ない plot(dat1) # 散布図描画 abline(lm1, col= “red”) # 全角 abline(lm1, col= "red") # 半角 Wordやパワーポイントは勝手に半角のダブルクォー テーションを全角に変えてしまうので、Rのコードが うまく動かないときはここをチェック! 32
  33. 33.  円記号[] Windowsでディレクトリのパス指定に使 われる円記号は、二重[]にするか、ある いはスラッシュ[/]に置き換える setwd("e:/R研修") setwd("c:") Windowsでの問題 33
  34. 34.  Rプログラミングの留意点 • 思考をそのままコードに落とせる自由度の高い プログラミング言語だが、それを逆に考えれば人 のコードは読み難い。メンテも困難。 • コーディング後一ヶ月も経過すれば、自分の コードも何だかわからなくなることもある。 • 他人に読ませたりメンテを引継ぐ必要のある コードは、特に可読性を意識して書く。 • 一ヵ月後の自分のために、きめ細かく#を頭につ けてコメントを書き込む習慣をつける。 • Rではコード中の空白や改行は無視される • 一連の処理を複数行に改行し、それぞれの行にコ メントを付けることも可能 34
  35. 35. i <- 5 while (i > 0){ print("Hello!") i <- i - 1 } 繰り返し処理 • for • while 35 for (i in 1:5) print("Hello") nm1 <- c("Mio", "Ryo", "John", “Yuki", "Taro") for (i in 1:5) { print(paste("Hello, ", nm1[i], "!", sep="") ) }
  36. 36. 条件分岐 • if() else{} • ifelse 36 b <- c <- 0 if (a > 0) { b <- b + 1; print("a > 0") } else { c <- c + 1; print ("a <= 0") } outcome <- ifelse (score > 0.5, print("Passed"), print("Failed"))
  37. 37. 比較演算子 比較演算子 記号 意味 == 等しい != 等しくない >= 以上(≥) > より大きい <= 以下(≤) < より小さい 37
  38. 38. 論理演算子 記号 意味 要素の種類 ! NOT(ではない) 値、ベクトル && AND(かつ) 値 || OR(または) 値 & AND(かつ) ベクトル | OR(または) ベクトル 38
  39. 39. 欠損値 NA(1) > 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 > x1 == 5 [1] FALSE NA TRUE FALSE FALSE > which(x1 == 5) # x1の値が5であるデータ番号 [1] 3 > 39
  40. 40. 欠損値 NA(2) 40 > which(x1 == NA) # x1の値がNAであるデータ番号 integer(0) # ????? > x1 == NA [1] NA NA NA NA NA NAに対する演算結果は全てNAで比較演算子 ==も使えない 代わりに、is.na という特別な関数が用意されているみち
  41. 41. 関数 is.na() 41 > which(x1 == NA) #x1の値がNAであるデータ番号 integer(0) # 1つもない > x1 == NA [1] NA NA NA NA NA > sum(x1) [1] NA NAに対する演算結果は全てNAで比較演算子 ==も使えず、そのままでは合計も計算できない 代わりに、is.na という特別な関数が用意されているみち
  42. 42. NAへの対応方法 42 > x1[!is.na(x1)]# NAを単に除去 [1] 1 5 2 4 > sum(x1[!is.na(x1)]) # 除去後合計を計算 [1] 12 > x2 <- ifelse(is.na(x1), 0, x1) # 0に置き換 え > sum(x2) [1] 12 > x2 [1] 1 0 5 2 4
  43. 43. NaN, Null, Inf • NaN: 非数。例えば0を0で割ると得られる。 • Null: なにもないことを示す。NAが欠測を示す のに対し、Nullはなにもないことを示し、ベクト ルや行列といった構造を持つことはできない。 • Inf, -Inf: 無限大。例えば5を0で割ると得られる。 43 検査のための関数 機能 is.nan() 非数かどうか is.null() NULLかどうか is.finite() 有限かどうか is.infinite() 無限大かどうか

×