ここではデータファイルを読み込んで分析することを学ぶ.そのためには,まずディレクトリをきちんと意識しておくことが必要だ.その状況を下のように設定しなさい.
以下のファイルをダウンロードして,上記の 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="イカの生殖器重量の月別分布")