目次へ

R でデータを処理する

下準備

ディレクトリを確認

ここではデータファイルを読み込んで分析することを学ぶ.そのためには,まずディレクトリをきちんと意識しておくことが必要だ.その状況を下のように設定しなさい.

データファイルを用意する

以下のファイルをダウンロードして,上記の DATA ディレクトリの中に置く.

Squid データをいじってみる

squid.txt に収容されているデータの冒頭は次のようになっている(エディタやページャで見てみるとわかる).

Sample	Year	Month	Location	Sex	GSI
1	1	1	1	2	10.4432
2	1	1	3	2	9.8331
3	1	1	1	2	9.7356
4	1	1	1	2	9.3107
5	1	1	1	2	8.9926
6	1	1	1	2	8.7707
7	1	1	1	2	8.2576
8	1	1	3	2	7.4045
9	1	1	3	2	7.2156
10	1	2	1	2	6.8372
...
(全部で2644行のデータがある)
      

このデータは,4年間にわたって4箇所の漁場で通年漁獲されたイカの生殖器(雌なら卵巣,雄なら精巣)の重量を測ったものである.データのカラムは,左からサンプル番号,採取年(1-4),月(1-12),場所(1-4,性別(1-雄, 2-雌),生殖器の重量となっている.

それでは次のように操作を進めてみよう.

ワーキングディレクトリを設定

データフレームとしてファイルを読み込んで内容を確認

上で確認できたこと

str(SQ) の出力は次のようになっているはずだ.上の他の操作も SQ に関する情報を与えてくれる.

	'data.frame':	2644 obs. of  6 variables:
	$ Sample  : int  1 2 3 4 5 6 7 8 9 10 ...
	$ Year    : int  1 1 1 1 1 1 1 1 1 1 ...
	$ Month   : int  1 1 1 1 1 1 1 1 1 2 ...
	$ Location: int  1 3 1 1 1 1 1 3 3 1 ...
	$ Sex     : int  2 2 2 2 2 2 2 2 2 2 ...
	$ GSI     : num  10.44 9.83 9.74 9.31 8.99 ...
      

names(SQ) について次のようなことを行なってみると,これも何か使えそうだ.

NAMES <- names(SQ)
length(NAMES)  # NAMES が6個の要素をもつベクトルであることがわかる(length は Ruby にもあるぞ).
class(NAMES)   # 要素は文字列(キャラクター)型
str(NAMES)     # str でまとめて情報が得られる
      

データファイルのフォーマットの違いに注意!

上では,str(SQ)によるデータフレームの各変数の型は,数字であれば整数(int)か数値(num)になっている.しかし読み込むファイルがカンマ区切りであった場合には,すべて因子(factor) として読み込まれることがある(どのような条件でそうなるかは不明).その場合には,次のようにして数値型に変換する必要がある.サンプルとなるファイルを sample.csv とする.このファイルはヘッダを持たない.

	DT <- read.table("sample.csv",header=FALSE)
	str(DT) ## この操作で,次のことが分かったとする.
	## 読み込まれたDT がデータフレームである
        ## DT は V1 という名前のついたfactor型のデータを含む
        ## 数値が "0.12345..." のようにダブルクオートに挟まれていることに注意
	CHR <- as.character(DT$V1)  ## データを一旦文字列型に変換しておく
	x  <- as.numeric(CHR)    ## さらに数値型として変換して,そのデータが x に代入される
	str(x)     ## データが数値型になっていることを確認    
      

データフレーム内の各変数にアクセスする

Sample, Year, ... , GSI のそれぞれがどうなっているかを知るには,$記号を使うことができる(重要!). これらについても上で SQ について行った方法が使える.他の組み合わせについても試してみよう.

集計してみよう

GSI はヤリイカの生殖器の重量のデータで,量的な意味をもつ(他のデータは番号付けや分類に使われている).GSI については量的統計量を知る意味がある.次の関数が何の情報を引き出しているのかを調べよう.検索すれば分かるはず.

分類を集計する

Year, Month, Location(場所), Sex は整数型だが,量的な意味を持たない単なる分類である. このような変数は,因子(ファクター),カテゴリカル変数,名義変数などと呼ばれることがある(ちょっとあいまいだが).これらについても集計が役に立つことは多い.Year の他の変数についても試してみよう.

可視化してみよう

2次元のグラフでデータを表現するときには,横軸の変数(独立変数)について縦軸の変数(従属変数)をプロットする.R ではチルダ '~' を使って, 縦軸の変数 ~ 横軸の変数 とする. 変数の表現には, $ 記号を使う他, data = SQ のようなやり方も可能だ. データのプロットのための基本的な関数は plot だが,この関数は多機能で,引数として取られたデータによっていろいろな振る舞いをする。

因子(ファクター)を活用する

上で得られたグラフは,整数による分類ごとにデータ点をプロットしている。これは散布図で,どちらの軸にも数値目盛が出力される(オプションの引数で他のタイプのプロットもできる)。このとき,Month を独立変数にとった上の例では違和感は出ないが,Location, Year, Sex を独立変数にとるとおかしなことになる。試してみよう。

可視化したデータを画像ファイルに保存する

出力先と画像のフォーマットを指定して描画

上のようにして得られるグラフを画像ファイルに落とせば,文書への貼りこみなどに活用できることになる。R は当然その機能を持っていて,画像ファイルのフォーマットも postscript, pdf, png, jpeg, svg など他種類のものを出力できる。 画像を出力するには,plot 関数の前で,フォーマットと出力先を指定する。次の例を見てみよう。