[連載]フリーソフトによるデータ解析・マイニング...

6
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 のショート カットメニュー

Upload: others

Post on 27-Jun-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: [連載]フリーソフトによるデータ解析・マイニング 第87回mjin/R/AIZAKI/REXCEL3.pdf · 機能を使うことで、Excelのセルに入力した R関数やデータをRに転送し、計算結果をR

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 のショートカットメニュー

Page 2: [連載]フリーソフトによるデータ解析・マイニング 第87回mjin/R/AIZAKI/REXCEL3.pdf · 機能を使うことで、Excelのセルに入力した R関数やデータをRに転送し、計算結果をR

⑵ 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)

Page 3: [連載]フリーソフトによるデータ解析・マイニング 第87回mjin/R/AIZAKI/REXCEL3.pdf · 機能を使うことで、Excelのセルに入力した R関数やデータをRに転送し、計算結果をR

順で、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)

Page 4: [連載]フリーソフトによるデータ解析・マイニング 第87回mjin/R/AIZAKI/REXCEL3.pdf · 機能を使うことで、Excelのセルに入力した R関数やデータをRに転送し、計算結果をR

のダブルクォーテーションで囲み、「引数」は

数値を直接入力します。たとえば、セル 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)

Page 5: [連載]フリーソフトによるデータ解析・マイニング 第87回mjin/R/AIZAKI/REXCEL3.pdf · 機能を使うことで、Excelのセルに入力した R関数やデータをRに転送し、計算結果をR

セル 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 セルの名前の定義

Page 6: [連載]フリーソフトによるデータ解析・マイニング 第87回mjin/R/AIZAKI/REXCEL3.pdf · 機能を使うことで、Excelのセルに入力した R関数やデータをRに転送し、計算結果をR

⑸ 統計モデル分析

 最後の例として、統計モデル分析を取り上げ

ます。ここでは、セル 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)