memorandums

日々の生活で問題解決したこと、知ってよかったことなどを自分が思い出すために記録しています。

Rメモ

久しぶりの更新。


あんまり役に立たないことを書いても意味ないし。。。もうこれやめようかな。。。と思っていたのですが。性分なんでしょうね。。。もう少し続けます。


受託研究の計算処理のためOSSの統計処理パッケージRで遊んでいます。遊んでいるという表現は不謹慎かもしれませんが。。。ホンモノの人からすると遊びのレベルです。win, mac, linuxで使えるようです。私はmac用を使っています。

Link: R HomePage


書籍もいろいろ出ていまして本屋に行っても迷ってばかりの子猫ちゃん。。。です。先日、このブログでも購入履歴として書きましたが、以下の本を読みながら自習しています。もともと本書は講義用の教科書として作成したものとのことで読みやすいと思います。

Rによる統計解析

Rによる統計解析


Rの使い方はいろいろなページに書かれているので(それと面倒なので)書きません。とりあえず私がやったことをメモ代わりに書きます。こんなふうに使えるなら私も勉強してみよかな?と思ってくれる人がいればここにかく意義もありますわね。


あるシステムから抜き取ったExcel形式の操業実績データが元データです。Excelでもグラフ機能や統計処理機能がついていることはついていますが専門家の方がいうには計算結果はかなり怪しいらしい。。。何より大きなデータを扱うとExcelが黙り込んでしまうことも。


Excelいじめをしても仕方がないので。とにかくExcelでは扱いにくかったので他の方法がないものか他の先生に相談したり本屋を探したりしました。それで見つけたのがRだったわけでう。前職でS-PLUSやSPSSを使っていた人を横目で見ていたので親近感があったのかもしれません。ただそれだけです。


ExcelデータをRに読み込ませます。ただし、Rを普通にインストールした後、gdataパッケージをインストールする必要があります。またR起動後にlibrary(gdata)と入力しないと機能が使えません。要注意です。library(gdata)と入力して以下のように表示されれば正常に機能が使える状態になったと思います。

library(gdata)

Attaching package: 'gdata'


The following object(s) are masked from package:utils :

object.size

Warning message:
package 'gdata' was built under R version 2.9.2


次にディレクトリを移動します。恐らく、起動直後はユーザのホームディレクトリにいるでしょう。私はその直下の「操業データ」というディレクトリにExcelデータを入れておきましたので、そこに移動します。

setwd("操業データ")


ちなみに以下のコマンドで現在のディレクトリのパス名を表示できます。

getwd()


やっとExcelデータを読み込むことになります。

df <- read.xls("091003.xls")


なお、Excelシートの1行目にはデータ列名を2行目からデータが羅列したシートにしておきます。ここで1つ注意が。列名を日本語にしているとエラーになるようです。1バイト文字(英字数字記号)などにしておきましょう。私はここで数時間無駄にしました。データ欠落(空セル)があっても構いません。シートが複数あるExcelブックの場合、シート番号を指定して読み込ませることもできるようです。が、私は変なところでひっかからないために1ブック1シートにしました。結構、データを読み込む処理に時間がかかるため、絶対この項目は使わないよ。。。というデータはExcelの段階で列を削除しておいた方が無難です。ちなみに私が読み込ませた091003.xlsは5列5000行のデータです。macbook air(初代)で読み込ませるのに5秒くらいだったと思います。


dfはRで扱うデータの基礎であるデータフレームと呼ばれるものです。データの集合で列名や列番号でアクセスすることが可能です。ちなみにdfは変数名(オブジェクト名)なのでdf2だろうがfdだろうが何でもいいです。ちなみに日本語もいけちゃうようです。例えば、データフレーム <- read.xls("091003.xls") という感じ。


まず、単に以下のように入力すると上記でExcelファイルから読み込んだデータ全体を表示することができます。

df


1列名だけ表示したければ以下のような感じ。

df[,1]


3〜6列名を表示したければ以下のような感じ。

df[,3:6]


1行1列のデータだけ表示したければ

df[1,1]


列名で指定することも可能。例えばIDという列があったとすると。。。

df$ID


で、余談として。。。Rはプログラミングもできて、SCILABなんかもそうですが、スクリプト言語のような柔軟性をもっています。例えば、Excelからデータを読んできてその2〜3列目を表示して欲しい。。。という場合は以下のようにも書けるようです。行列などのデータ集合を柔軟に扱えるところはSCILABといいRといい、いいですね。

read.xls("091003.xls")[,2:3]


次に簡単にdfの内容を分析してみます。特に、欠値(Excelの空セル)は省く必要があるので、まず以下のコマンドで状況を見てみます。各列毎に度数分布が表示され最後に<NA>の個数が表示されます。ああ、このデータ項目には欠値が10個含まれているんだな。。。といったことが知る事ができます。

sapply(df,table,exclude=NULL)


もし、その場でデータを修正したければ(元のExcelデータを修正せずに)以下のコマンドが使えます。

fix(df)


欠値は邪魔なのでとりあえず除外します。以下のコマンドでdfのデータから欠値を含む行を除いたデータフレームを作ります。上記のsubset関数はいろいろな使い方ができると思います。それは後ほど書きます。以下の例ではdf2というデータの入れ物を新たに作りました。

df2 <- subset(df,complete.cases(df))


で、次にやることと言えば、平均値や分散などを表示したくなりますね。Excelなら1つずつワークシート関数を使って。。。とやるところですがRでは、そんなん面倒だからまとめちゃえ!というコマンドがあるようです。以下です。

summary(df2)


実行結果のサンプルを以下に示します。AとBというデータ列があったとします。データ列それぞれについて基本統計量を表示してくれます。地味に便利ですね。。。

A B
Min. : -49.90 Min. : 1.000
1st Qu.: 16.08 1st Qu.: 8.000
Median : 22.98 Median : 9.000
Mean : 46.29 Mean : 8.394
3rd Qu.: 39.38 3rd Qu.: 9.000
Max. :18735.83 Max. :11.000


で、df2からある条件を満たしたデータを取り出してdf3とします。ある条件を満たすデータを取り出すために、subsetくんを使います。例えば、以下の例。Bという列が1であるデータだけを取り出してdf3に入れた例です。

df3 <- subset(df2,B == 1)


最後に散布図を描かせます。xlabやylabで軸ラベル名を指定することができます。日本語ラベルは表示できませんでした。何か指定すると表示できるかもしれません。

plot(df3[,3], df3[,4],xlab="A",ylab="B")


とりあえずこれでおしまい。相関分析などこの先もどんどん楽して分析が進められます。ここに書いた手順もコレから先の話も上記の本にわかりやすく書かれていますので、オススメです。


scilabもそうですし、今回のRもそうですが、OSSでこれだけ有用なエンジニアリング支援ツールが世の中に存在するわけですから利用しない手はないですね。。。ちょっとした応用ならこれで十分だと思います。