[連載]フリーソフトによるデータ解析・マイニング...
TRANSCRIPT
1. はじめに RExcel シリーズ第 3 回では、Excel のシート
上で R の関数(以下、R 関数)を利用する方法
について紹介します。
RExcel を導入することで、Excel に標準で設
定されているワークシート関数(以下、Excel
関数)と同様に、R 関数を Excel で利用する
ことが可能となります。第 1 の方法は、Excel
のセルに R 関数を記述し、ショートカットメ
ニューを使って R に転送・実行させたり、計
算結果をセルに転送させたりするというもの
です。第 2 の方法は、関数 RApply 等を使って
Excel 関数のように R 関数を利用するというも
のです。
今回は R コマンダーを立ち上げない状態で
Excel を利用しています。R コマンダーを起動
している場合、後述のショートカットメニュー
に現れる機能が少し多くなります。
2. ショートカットメニューによるR関数の利用
⑴ 基本操作
ショートカットメニューに現れる RExcel の
機能を使うことで、Excel のセルに入力した
R 関数やデータを R に転送し、計算結果を R
から Excel のセルに転送させることができま
す。ショートカットメニューは、任意のセルを
選択して右クリックすることで現れます(図
1)。R のコードを実行するには「Run code」、
数値や行列など(データフレーム)を Excel
か ら R へ 転 送 す る に は「Put R Var」(「Put R
DataFrame」)、 逆
に そ れ ら を R か
ら Excel へ 転 送
す る に は「Get R
Value」(「Get R
DataFrame」)を
利用します。
44 ● ESTRELA 2010年10月(No.199)
(独)農業・食品産業技術総合研究機構農村工学研究所農村計画部主任研究員
合崎 英男(Aizaki Hideo)
■2000 年 3 月北海道大学大学院農学研究科博士後期課程修了。博士(農学)。農林水産省農業研究センター研究員、農業工学研究所研究員、同主任研究官を経て、06 年 4 月より現職。専門分野は農業経済学(主に環境配慮や食品安全性に関する意思決定分析)。
[連載]フリーソフトによるデータ解析・マイニング 第87回
図1 RExcel のショートカットメニュー
⑵ Rのコードの実行
√2 の値を R で計算させ(関数 sqrt が該当)、
その結果を R から Excel に転送させてみましょ
う(図 2)。R での計算結果を変数 v1 に保存す
るとして、セル A1 に「v1<-sqrt(2)」と入
力して[Enter]キーを押します(以下、「[Enter]
キーを押す」は省略)。次に、そのセルを選択
して右クリックし、表示されたメニューから
「Run code」を選択します。これで指定した
コードが R で実行されます。そして、別のセ
ル A2 を選択して右クリックし、「Get R Value」
を実行します。別画面が開くので(図 3)、計
算結果を保存している変数 v1 の値をコピーす
るように指示すると(R expression のボックス
に「v1」を入力し、[OK]ボタンを押します)、
セル A2 に計算結果が返されます(セルの幅等
によって、表示される桁数は異なります)。
上記の例では、実行した R のコードは 1 セ
ル(1 行)分でしたが、複数のセルに入力した
コードを一度に実行することも可能です(図
2)。たとえば、乱数の種を「123」に設定し
(関数 set.seed が該当)、一様乱数を 1 つ生成
させてみましょう(関数 runif が該当)。セル
A4 に「set.seed(123)」、セル A5 に「v2<-
runif(1)」とそれぞれ入力します。次に、セ
ル A4 から A5 の範囲を選択して右クリックし、
「Run code」を実行します。そして、セル A6
を選択して右クリックから「Get R Value」を
実行して変数 v2 を指定すると、保存されてい
た結果がセル A6 に返されます。
⑶ Rへのデータの転送
R 関数を含んだコードの実行方法と同様な手
2010年10月(No.199) ESTRELA ● 45
図2 ショートカットメニューによるR関数の利用
図3 �Rから Excel へのデータの転送(Get�R�Value)
順で、Excel のセルに入力したデータを、R に
転送できます。データの種類によって「Put R
Var」か「Put R DataFrame」を用います。デー
タフレームの転送方法は、RExcel シリーズ第
1 回(2010 年 8 月号)で紹介済みですので、今
回は数値と行列の転送方法を紹介します。
たとえば、セル A8 から C10 の範囲のセルに、
図 2 の通りに数値を入力したとします。ここで、
1 つの数値のみを選択して右クリックし、「Put
R Var」を選択すれば、その値を R に転送でき
ます。仮に、セル A8 を選択して「Put R Var」
を実行すると、別画面(図 4)が開きますので、
Array name in R のボックスに「v3」と入力し、
[OK]ボタンを押します。これでセル A8 に入
力されていた「2」という数値を R に転送(「v3」
に保存)することができました。データの転送
を確認するため、セル A12 を選択して右クリッ
クから「Get R Value」を実行して「v3」を指
定すると、先ほど保存した値がそのセルに返さ
れます。
次に、図 2 のセル A8 から C10 の範囲すべて
を選択して右クリックから「Put R Var」を実
行し、R に行列として転送します(行列名は
「m1」とします)。転送後、試しにセル A14 に
その行列を使った行列積を求めるコード「m2<-
m1%*%m1」を入力し、「Run code」を実行して
みます。そして、セル A15 を選択して右クリッ
クから「Get R Value」を実行し、「m2」を指定
して[OK]ボタンを押せば、そのセルを左上
端とした範囲に計算結果(行列)が転送されま
す。
3. 関数RApplyによるR関数の利用⑴ 基本書式
R 関数を Excel のシート上で利用する 2 つめ
の方法は、RExcel をインストールすることで
新たに導入された関数 RApply を利用する方法
です。関数 RApply の書式は、
=RApply(R 関数 , 引数 )
です。Excel 関数と同様に、関数名の前に半角
のイコールを入れ、関数名のあとの半角の両括
弧内に引数を指定します。関数 RApply の引数
は「R 関数」と「引数」の 2 種類です。「R 関
数」部分には、使用したい R 関数を指定します。
「引数」部分には、指定した R 関数で用いる引
数を指定します。
関数 RApply と同じ機能を持ちますが、R か
らの計算結果が Excel のシートに返されない点
が異なる関数 RCall もあります。この関数の書
式も関数 RApply と同じです。
⑵ 数式の計算
R 関数を使って、先ほどと同じ√2 の値を求
めてみます(図 5)。セル A19 に「sqrt」、セ
ル A20 に「2」をそれぞれ入力します。そして、
セル A21 に「=RApply(A19, A20)」と入力
して[Enter]キーを押すと、結果が返されます。
「R 関数」と「引数」を関数 RApply の中で直
接指定することもできます。「R 関数」は半角
46 ● ESTRELA 2010年10月(No.199)
図4 Excel から Rへのデータの転送(Put�R�Var)
のダブルクォーテーションで囲み、「引数」は
数値を直接入力します。たとえば、セル A22
に「=RApply(“sqrt”, 2)」と入力すれば、先
ほどと同じ結果が返されます。
関数 RApply の「R 関数」部分には、利用者
が独自に設定した関数を指定することもできま
す。たとえば、「引数」で与えられた値の 2 乗
を求める関数は、
あるいは
と表現できます。前者の 1 行で関数を表現した
ものをセル A24 に入力します。後者の 3 行で
function(x)x*x
function(x){x*x}
関数を表現したものについては、1 行目部分を
セル A25、2 行目部分をセル A26、3 行目部分
をセル A27 にそれぞれ入力します。これらの
関数で 3 2 の値を求めるとします。セル A28 に
「3」を入力します。次に、前者の 1 行表示の
関数を利用するときには、その関数を記述して
いるセルを関数 RApply の「R 関数」部分で指
定します。ここではセルA29に「=RApply(A24,
A28)」と入力すれば、3 2 の値である「9」が
返されます。他方、後者の複数行表示の関数を
利用するときには、該当するセル範囲を関数
RApply の「R 関数」部分で指定します。セル
A30 に「=RApply(A25:A27, A28)」 と 入 力
すれば、同じ計算結果が返されます。
セル範囲に名前を付けて、その名前を「R 関
数」部分で指定することもできます。たとえば、
2010年10月(No.199) ESTRELA ● 47
フリーソフトによるデータ解析・マイニング
図5 関数RApply によるR関数の利用 (1)
セル A25 から A27 の範囲を選択して右クリッ
クから「Name range」を選びます。別画面(図 6)
が開きますので、選択した範囲の名前を「myf1」
と入力して[OK]ボタンを押します。そして、
セル A31 に「=RApply(myf1, A28)」と入力
すれば、計算結果が返されます(「引数」にも
名前の設定を活用できます)。
関数 RApply の「引数」では、関数 AsRExpr
と関数 AsSimpleDF が使えます。関数 AsRExpr
は、関数 RApply の「引数」に R 表現式を用い
るときに使います。たとえば、log2 の値を 10
倍する計算を考えてみます。値を 10 倍するコー
ド(function(x)x*10) を 図 5 の セ ル A33
に、log2 を計算するコード(log(2))をセル
A34 にそれぞれ入力します。そして、セル A35
に「=RApply(A33, AsRExpr(A34))」と入
力すると、計算結果が返されます。
関数 AsSimpleDF は、指定された範囲をデー
タフレームとして、関数 RApply の「引数」に
用いることができます。複数の変数を含んだ
データセットを準備し、「R 関数」で変数名を
利用することができます。たとえば、変数 x と
y を、変数名を含めてセル A37 から B43 の範
囲に入力します(図 5)。ここで変数 x と y の
相関を R 関数(関数 cor が該当)で求めてみま
す。セル A45 に次のように入力すると、
両変数の相関係数が返されます。
⑶ 行列の計算
R 関数を用いた行列計算の一例として、ある
行列の転置行列を作成してみましょう(関数 t
が該当)。転置行列のもととなる行列には、変
数 x と y として入力した各 6 つの数値全体を
6 行 2 列の行列と見なして利用します(変数名
部分は除外)。6 行 2 列の行列の転置行列は 2
行 6 列となりますので、ここではセル A47 か
ら F48 の範囲を選択します(図 7)。そして、
「=RApply(“t”, A38:B43)」を入力して[Ctrl]
+[Shift]+[Enter]キーを押すと(Excel で
いうところの配列数式として入力)、もとの行
列の転置行列が出力されます。
⑷ 作図
R 関数の作図機能の一例として、変数 x と y
の散布図を描いてみましょう(関数 plot が該当)。
RExcel に含まれる関数 RCall を使って、セル A50
に「=RCall(“plot”, AsSimpleDF(A37:B43))」
と入力すると(図 7)、別画面に変数 x と y の散布
図が表示されます(出力は省略)。関数 RCall を利
用していますので、関数を入力したセルには関数
plot を実行したことが表示されます。
ちなみに、出力した図は、Excel の任意のセ
ル上で右クリックして「Insert Current R Plot」
(関数 plot を実行したときにメニューに現れま
す)を選択することで、Excel のシート上にコ
ピーできます。
=RApply(“function(mydf)with (mydf, cor(x, y))”, AsSimpleDF(A37:B43))
48 ● ESTRELA 2010年10月(No.199)
図6 セルの名前の定義
⑸ 統計モデル分析
最後の例として、統計モデル分析を取り上げ
ます。ここでは、セル A37 から B43 の範囲に
入力した変数 x と y を使って、回帰分析を行う
とします(関数 lm が該当)。変数 y を目的変数、
変数 x を説明変数として、切片も含めたモデル
を想定します。回帰分析をはじめとした統計モ
デル分析の結果にはさまざまな情報が含まれま
すが、ここでは変数名、係数推定値(Estimate)、
標準誤差(Std. Error)、t 値(t value)、そして
p 値(Pr(>│t│))を R から Excel のシート上に
転送させます(図 7)。
関数 lm の実行結果から係数推定値等の値を
Excel に転送させるには、セル B53 から E54 の
範囲を選択した上で、
を入力、[Ctrl]+[Shift]+[Enter]キーを
押します。係数推定値等の項目名を Excel に転
送させるには、セル B52 から E52 の範囲を選
択した上で、
=RApply(“function(mydf) coef(summary(lm(y~x, data=mydf)))”, AsSimpleDF(A37:B43))
を入力、[Ctrl]+[Shift]+[Enter]キーを
押します。切片と説明変数(x)を Excel に転
送させるには、セル A53 から A54 の範囲を選
択した上で、
を入力、[Ctrl]+[Shift]+[Enter]キーを
押します。
4. おわりに Excel のツールバーの「RExcel」→「Demo
Worksheets」へ進むと、デモ用シートが準備さ
れています。今回は紹介できなかった関数や機
能も含まれています。また、開発者ら(statconn)
の Web サイト(http://rcom.univie.ac.at/)にも
情報があります。関心のある方は必要に応じて、
これらも参照してください。
=RApply(“function(mydf) t(colnames(coef(summary (lm(y~x, data=mydf)))))”, AsSimpleDF(A37:B43))
=RApply(“function (mydf) rownames(coef(summary (lm(y~x, data=mydf))))”, AsSimpleDF(A37:B43))
2010年10月(No.199) ESTRELA ● 49
フリーソフトによるデータ解析・マイニング
図7 関数RApply によるR関数の利用 (2)