でデータハンドリング ~ データフレーム 30 分クッキング ~
本日のメニュー データフレームとは データフレームの作成 データハンドリングの方法と例 2
データフレームとは 統計解析を行うデータの形式は様々 ( R 上で ) データを手で入力して テキストファイル,EXCEL,ACCESS,SAS などの形式 R でデータ解析を行う際は, データフレームという形式にデータを変換することが多い ( 見た目は行列 ) EXCEL: シート ACCESS: テーブル SAS: データセット 3
データフレームとは 数値ベクトルや文字ベクトル, 因子ベクトルなどの異なる型のデータをまとめてもつ変数 外見は行列と同じ 各列の要素の型はバラバラでも構わない データフレームの各行 各列は ラベルを必ず持ち, ラベルに よる操作が可能 4
本日のメニュー データフレームとは データフレームの作成 データハンドリングの方法と例 5
データフレームの作成 R でベクトルデータを作成した後, データフレームを作成 ( いわゆる手入力 ) 性別 身長 体重 データをベクトルで用意した後, 関数 data.frame() で1つのデータフレームに変換する ファイルからデータを読み込んで, データフレームを作成 関数 read.table() などでファイルからデータを読込 パッケージ RODBC の関数 odbcconnectxxxxx() でデータファイルにアクセスした後, 関数 sql.query() でファイルからデータを読込 6
データフレームの作成 ( 手入力 ) data.frame() 7
データフレームの閲覧 データフレームの中身を確認したいときは R のコンソール画面で R 標準のデータエディタで ( データを見ながらの作業不可) relimp パッケージのテキストウインドウで コンソール上 データエディタ テキストウインドウ 8
データフレームを作成すると 9
データフレームの作成 (.txt ) 関数 read.table などでテキストファイルからデータを読み込むことが出来る data04.txt 10
データフレームの作成 (RODBC) パッケージ RODBC の中の関数 odbcconnectxxxxx でデータファイルにアクセスした後, 関数 sql.query でファイルからデータを読み込むことが出来る 他にも ORACLE のデータベースや, その他のデータ形式ファイル (DBASE,MySQL,PostgreSQL) からデータフレームを作成することもできる 11
データフレームの作成 (foreign) パッケージ foreign の中には, 外部データを読み込むための関数が多数用意されている data.restore read.dbf read.dta read.epiinfo read.mtp read.octave read.spss read.ssd read.systat read.xport 12
データフレームの作成 (foreign) SPSS データを R に読み込む例 SAS データを R に読み込む例 13
本日のメニュー データフレームとは データフレームの作成 データハンドリングの方法と例 14
データハンドリング例 ( 導入 ) Aさん~D 女史 ( 変数はNAME) の 4 人に, やせ薬 (GROUP==Active) か偽薬 (GROUP==Placebo) を投薬する 投薬してから1 日目 (DAY==1)~3 日目 (DAY==3) に体重を測定する 体重は, 午前 (KG_AM) と午後 (KG_PM) の1 日 2 回測定する 15
データハンドリング例 ( 導入 ) データの形式は EXCEL 体重に関するデータとグループに関するデータの 2 つ まずは 2 つのデータセットを R に読み込ませる data1.xls データフレーム x1 に data2.xls x2 に 16
データハンドリング例 (1) 読み込み 17
18 データハンドリング例 (2)
19 データハンドリング例 (3)
20 データハンドリング例 (4)
データハンドリング例 ( 目的は ) 3 日目の体重の平均 と 1 日目の体重の平均 の変化量が -2kg 未満の人 を抽出する 21
22 データハンドリング例 (5)
データハンドリング例 (6) 23
データハンドリング例 (7) 24
データハンドリング例 (8) 25
データハンドリング例 (9) 26
データハンドリング例 (10) 27
本日のメニュー データフレームとは 統計解析を行うためのデータの形式 見た目は行列 でも使い勝手が良い データフレームの作成 手入力でもデータの読み込み可だけど 外部データ ( テキストファイル, EXCEL,ACCESS, SAS, ) からでも読み込み可 データハンドリングの方法と例 RODBC を使ったデータ読み込みの例を紹介 データのマージ, ソート, 変数追加, 変数削除, データの横展開, 条件抽出の例を紹介 28
おまけ 実務で R にデータを読み込む際 1 EXCEL RODBC でデータフレームにする 2 EXCEL CSV に変換 関数 read.table() でデータフレームにする 2' 他のアプリ テキストデータ 関数 read.table() でデータフレームにする 3 SAS xpt に変換 read.xport() でデータフレームにする (SAS でできないことを R にさせるという意図 ) 4 SQL でデータベースにも直接アクセスできるはず 5 XML でデータを入力, 出力させることもできるはず データがちゃんと入力されているかを確認する方法は? データフレームから抜き取り とか 要約統計量 とか 次元の数 と 一番右下のセルに値が正しく入っているか を確認 欠測の数を数える EXCEL に出力して比較 ( コンペア ) する R から折り返しはきだし,SAS 上で比較 ( コンペア ) する 29
参考文献 & 謝辞 参考文献 THE R BOOK 4 章 ( 岡田昌史他 ; 九天社 ) データ解析環境 R 5 章 ( 舟尾, 高浪 ; 工学社 ) パッケージ RODBC foreign のヘルプ 発表資料作成の際にお世話になった人 北西由武さん ( 塩野義製薬 ) 高浪洋平さん ( 武田薬品工業 ) 30
でデータハンドリング ~ データフレーム 30 分クッキング ~ 終
でデータハンドリング ~ ここからはおまけ ~
作業ディレクトリの変更 ファイルからデータを読み込むには まず, データがあるディレクトリ ( フォルダ ) に作業ディレクトリを変更する 次に, 関数 read.table() などでファイルからデータを読み込む ファイルからデータやプログラムを読み込んだり, ファイルにデータを書き出したりする場所を作業ディレクトリという 指定したディレクトリに指定した作業ディレクトリにデータがセーブされたり,R 用エディタなどが保存されるようになる 33
作業ディレクトリの変更 (Windows) [ ファイル ] の [ ディレクトリの変更 ] を選択 [Browse] をクリックして, 変更先のディレクトリを選択 34
作業ディレクトリの変更 (Mac OS X) [ その他 ] の作業 [ ディレクトリの変更 ] を選択 変更先のディレクトリを選択 35
テキストファイル データフレーム (1) 列名がなく, データ間がスペースで区切られている場合 R が勝手に列名を決めている data01.txt 36
テキストファイル データフレーム (2) 列名があり, データ間がスペースで区切られている場合 data02.txt 37
テキストファイル データフレーム (3)1 行目にコメント,2 行目に列名があり, データ間がスペースで区切られている場合 data03.txt 38
テキストファイル データフレーム (4) 列名があり, データ間がコンマで区切られている場合 data04.txt 39
テキストファイル EXCEL 目的は関数 read.csv() で読み込める形式にすること ( 前節の data04.txt の状態 ) まず,EXCEL ファイルを開き, メニューの [ ファイル ] の [ 開く ] から,[ 名前をつけて保存 ] を選択する 保存する名前をつけた後, 次に [ ファイルの種類 ] から [CSV カンマ区切り ] を選択して保存する 40
テキストファイル EXCEL Windows 版 R の場合 別名で保存 CSV( カンマ区切り ) で保存 41
テキストファイル EXCEL Mac OS X 版 R の場合 別名で保存 CSV( カンマ区切り ) で保存 42
テキストファイル EXCEL (4 ) 列名があり, データ間がコンマで区切られている場合 data04.csv 43
テキストファイル EXCEL (5) 列名がなく, データ間がコンマで区切られている場合 data05.csv 44
データフレームの作成 EXCEL のセルをコピー & ペースト Windows 版の場合は, 列名をコピーしてもしなくてもよい 45
データフレームの作成 EXCEL のセルをコピー & ペースト Mac OS X 版の場合は, 列名をコピーしてはいけない 46
SAS XML R(1) パッケージ XML と SASXML を使用する ( 作者 :Duncan Temple Lang 氏 <duncan@research.bell-labs.com>) まず,SAS データセット XML に変換する 47
SAS XML R(2) 次に XML R へ読み込む パッケージ SASXML の中に入っているソース eventsas.s,sas.s,sasdataset.r を実行する その後, 以下を実行する 48
< 寄り道 > R XML R 49
< 寄り道 > R から SAS を操作する 関数 system() を用いる + SAS の出力 50
< 寄り道 > SAS から R を操作する x コマンドを用いて DOS を起動し,R を実行する + R の出力 51
データへのアクセス方法 (1) x[2], x[[2]] x[c(1, 2)] x[c(3, 4), ] x[,c(t,f,t)] x[sex=="f", ] コマンド x$ 列名,x[ 列名 ], x[[" 列名 "]] x[3, 2], x[[3, 2]] x[[3," 列名 "]], x[[3," 列名 "]] x[,sex=="f" & WEIGHT>50 ] 機能 指定した列データを表示 2 番目の列データを表示 3 行 2 列目のデータを表示 指定した列の 3 行目のデータを表示 1 列目と 2 列目のデータを表示 3 行目と 4 行目のデータを表示 論理ベクトル c(t,f,t) が TRUE となっている列を表示 性別が F( 女性 ) である行を表示 性別が F( 女性 ) かつ体重が 50kg より大きい行を表示 52
データへのアクセス方法 (2) データフレーム [ 行番号, 列番号 ] で指定する データフレーム x 53
データへのアクセス方法 (3) データフレーム $ 列名で指定する データフレーム x 54
データの加工 抽出 (1) コマンド ncolx nrowx namesx rbindxy cbindxy data.framexy mergexy 機能 x の列数 ( 変数の数 ) を求める x の行数 ( データ数 ) を求める x の列名を表示する x と y を縦に並べて結合する x と y を横に並べて結合する x と y を横に並べて結合する x と y を併合 ( マージ ) する. 通常は引数に all=t を指定し, データを全て残す.all=T を指定しなければデータの共通 部分が結果として返される. 55
データの加工 抽出 (2) コマンド head(xn=a) tail(xn=b) na.omit(x) transform(xy= ベクトル ) subset(x 条件式 ) subset(x 条件式 ベクトル ) 機能 先頭から a 行だけ抽出する 末尾から b 行だけ抽出する NA を含む行を削除する データフレーム x に新たな列 y を追加する 条件式に合う行のみを抽出する ベクトルで指定した列に対し, 条件式に合う行のみを抽出する 56
57 データのマージ + +
データのソート (2 変数のソート ) 58
欠損の扱い (1) 手入力でデータフレームを作成する場合で欠損が含まれているデータを読み込む場合は, ベクトル中の欠損部分を NA としておけば, 該当部分に欠損値 (NA) が入る. 59
欠損の扱い (2) ファイルからデータを読み込む場合で欠損が含まれているデータを読み込む場合は, データ間がコンマで区切られている方が処理しやすい. この場合, 単に欠損部分を空白にしておけば, 該当部分に欠損値 (NA) が入る. data06.txt 60
でデータハンドリング 終