ここではデータファイルを読み込んで分析することを学ぶ.そのためには,まずディレクトリをきちんと意識しておくことが必要だ.その状況を下のように設定しなさい.
以下のファイルをダウンロードして,上記の DATA ディレクトリの中に置く.
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 を独立変数にとるとおかしなことになる。試してみよう。
1 をオスに 2 をメスに対応させているわけだが,目盛には中間の値が現れる。たぶん漁業にとってはトランスジェンダーなイカに関心はないだろうから,これは無意味だ。つまり,Sex や Location や Year は数としてではなく,分類として意味があるわけだ。そこでこれらは因子として, factor(SQ$Sex) のように使うと異なったグラフが現れる。 Sex 以外の変数についても試してみよう。
上のようにして得られるグラフを画像ファイルに落とせば,文書への貼りこみなどに活用できることになる。R は当然その機能を持っていて,画像ファイルのフォーマットも postscript, pdf, png, jpeg, svg など他種類のものを出力できる。 画像を出力するには,plot 関数の前で,フォーマットと出力先を指定する。次の例を見てみよう。
カレントディレクトリを指定するところが setwd("../Images") となっているところに注意。その前のカレントディレクトリは ./DATA にあったので,そこから一度上に上がって Images に入るというイメージだ。
上のままの画像では,他に人には意味のないデータフレームや変数の名前がグラフのラベルに使われていて,これは面白くない。グラフのメインタイトルもほしい。そのためには次のようにする。見てわかるように,行をわけても構わない。
plot(SQ$GSI ~ SQ$Month, xlab="月",
ylab="重量/g",main="イカの生殖器重量の月別分布")