ページの先頭行へ戻る
Symfoware Analytics ServerV12.2.0 利用ガイド
FUJITSU Software

6.3.2 R言語による統計解析

Symfoware Analytics Serverでは、データベース内でR言語による統計解析を行うための基本ライブラリ(Rパッケージ)を実行する基盤を提供しています。

R言語による統計解析機能は、これまでクライアントで行っていた分析処理をファンクション(手続き言語)としてDWHサーバ上に登録します。登録したファンクションをDWHサーバ上のデータベースで処理することにより、クライアントへのデータ転送のオーバーヘッドを削減して、サーバのマシン性能を活用した高速なデータ分析を行えます。また、PL/R手続き言語の利用によりR言語でさまざまな分析を行えます。

クライアントマシンにR言語を導入している環境に対して、Symfoware Analytics Server Client(Data Analytics Library)パッケージをインストールすることでR言語からSymfoware Analytics Serverのデータベースに接続して、データを参照しながらPL/R手続き言語を利用してファンクションを開発できます。

6.3.2.1 ファンクションの運用

R言語による統計解析で扱うファンクションの運用内容について説明します。

6.3.2.1.1 ファンクションの作成

ファンクションとは、各手続き言語で作成した関数のことであり、各手続き言語の開発環境で作成します。R言語の開発環境として、サーバ上のRコンソールを使用できます。

すでにR言語で開発済みのスクリプトがある場合は、PL/R手続き言語のインターフェースに合わせて修正することで流用できます。

参照

Rコンソールの詳細は、“2.5 Symfoware Analytics Serverで利用するオープンソース・ソフトウェアマニュアル”のRマニュアルの“R入門”およびその他のRマニュアルを参照してください。

また、クライアントシステムでPL/R手続き言語を使用する場合は、データ分析クライアント機能をインストールすることでデータベースに接続しながらR関数を開発できます。

6.3.2.1.2 ファンクションの登録

作成したファンクションを、SQLコマンド“CREATE FUNCTION”を使用して登録します。また、登録済みのファンクションを再登録する場合は、“CREATE OR REPLACE FUNCTION”を使用して登録します。

参照

  • SQLコマンドの詳細は、 “PostgreSQL文書”の“SQLコマンド”を参照してください。

  • 各手続き言語によって、引数および戻り値に指定できる型が異なる場合があります。各手続き言語での引数および戻り値などの詳細は、以下を参照してください。

    • PL/R手続き言語の場合

      6.3.2.2.2 データ型”を参照してください。

    • PL/R手続き言語以外の場合

      “PostgreSQL文書”の“手続き言語”を参照してください。

PL/R手続き言語を使用してファンクションを登録した例を以下に示します。

例)
#postgres=# CREATE OR REPLACE FUNCTION r_max (integer, integer) RETURNS integer AS '
    if ( arg1 > arg2 )
         return(arg1)
    else
         return(arg2)
'  LANGUAGE 'plr';
6.3.2.1.3 ファンクションの実行

ファンクションは、SELECT文に登録したファンクションを指定することで実行します。

なお、関数の引数型、戻り値、および実行時に渡されるデータ型に不整合があった場合は、SQL実行時にエラーとなります。

ファンクションを実行した例を以下に示します。

例)
postgres=# select r_max(1,5);
r_max
-------
     5
(1 row)
6.3.2.1.4 ファンクションの削除

ファンクションは、SQLコマンド“DROP FUNCTION”を使用して削除します。

参照

SQLコマンドの詳細は、 “PostgreSQL文書”の“SQLコマンド”を参照してください。

ファンクションを削除した例を以下に示します。

例)
postgres=# DROP FUNCTION r_max(integer,integer);
6.3.2.1.5 異常時の対処

ファンクションの実行時にエラーが発生した場合は、SQLのエラーメッセージの内容を確認して対処してください。

6.3.2.2 PL/R手続き言語での実行方法

PL/R手続き言語では、R関数をSQLのファンクションとして実行します。他のファンクションおよび手続き言語(PL/pgSQL、PL/Pythonなど)と同様にSQLから関数呼び出しが可能となり、サーバ上のデータベースで高速な分析処理を行えます。

参照

ここでは、ファンクションを登録するうえで必要となるところについて説明します。

詳細は、“2.5 Symfoware Analytics Serverで利用するオープンソース・ソフトウェアマニュアル”の“PL/R User’s Guide - RProcedural Language”を参照してください。

6.3.2.2.1 R関数

PL/R手続き言語で作成した関数は、SQLコマンド“CREATE OR REPLACE FUNCTION”を使用して定義します。

指定形式
CREATE OR REPLACE FUNCTION funcname(arg1,arg2,・・・,argN) RETURNS rettype AS '
  # R function body
' LANGUAGE lang_name;
パラメーター

パラメーター

説明

function

作成する関数名を指定します。

arg1,arg2,・・・,argN

関数の引数を指定します。

rettype

関数の戻り値の型を指定します。

lang_name

関数を実装している言語の名前を指定します。
'plr'を指定してください。

6.3.2.2.2 データ型

PL/R手続き言語で扱うデータ型について説明します。

引数

引数は、“arg1, arg2,・・・, argN”という変数名でR関数に渡されます。データベースの引数データ型とR言語の引数データ型の対応は以下のとおりです。

表6.4 データベースの引数データ型とR言語の引数データ型の対応関係

データベースの引数データ型

R言語の引数データ型

boolean

logical

int2, int4

integer

int8, float4, float8, cash, numeric

numeric

bytea

object

その他のスカラー値

character

表6.5 データベースの引数データ型種別とR言語の引数データ型の対応関係

データベースの引数データ型種別

R言語の引数データ型

配列(1次元)

vector

配列(2次元)

matrix

配列(3次元)

array(3次元)

配列(4次元以上)

サポートしていません。

複合型

data.frame(※)

※セルにNULL値が与えられた場合は、NAオブジェクトに変換します。

戻り

関数の戻り値は、return()式によって返却されます。

まず、戻り値はR言語のcharacter型に変換されます。次に、データベースの文字列型からrettypeのデータ型にキャストされて返却されます。

R言語のNULLオブジェクトが返却される場合、ファンクションの戻り値はデータベースのNULL値となります。また、ファンクションの戻り値にbytea型を含む場合、R言語でシリアライズしたバイト列を戻り値にマッピングします。

データベースの戻り値とR言語のデータ型の対応は以下のとおりです。

表6.6 データベースの戻り値とR言語のデータ型の対応関係

戻り値のデータ型種別

SETOF

R言語のデータ型

データベースの返却表

スカラー

なし

array, matrix, vector

1行1列

data.frame

1番目の列のvectorを文字列で表現

例)

data.frame(c(1,2,3)) → ’c(1, 2, 3)’

あり

array(1次元、または3次元以上), vector

複数行1列

array(2次元), matrix, data.frame

複数行1列、ただし列が複数になる場合はエラー

配列

なし

array(1次元、または4次元以上)

1次元配列

array(2次元), matrix, data.frame

2次元配列

array(3次元)

3次元配列

複合型

なし

array(1次元、または3次元以上), vector

1行1列

array(2次元), matrix, data.frame

1行複数列

あり

array(1次元、または3次元以上), vector

複数行1列

array(2次元), matrix, data.frame

複数行複数列

6.3.2.2.3 データベースアクセス関数

PL/R手続き言語では、データベースアクセス関数が使用できます。

参照

データベースアクセス関数の詳細は、“2.5 Symfoware Analytics Serverで利用するオープンソース・ソフトウェアマニュアル”の“PL/R User’s Guide - R Procedural Language”の“Database Access and Support Functions”を参照してください。

6.3.2.2.4 データ分析クライアント機能によるRスクリプトの開発効率化

データ分析クライアントは、Rスクリプトの開発効率化をはかるためにRPostgreSQLと連携します。

データ分析クライアント上で、RPostgreSQLと連携してデータベースに接続しながら試作したRスクリプトをPL/R手続き言語として動作できます。

RPostgreSQLの関数のうち、サポートしている関数は以下のとおりです。

表6.7 RPostgreSQLのサポート関数

RPostgreSQLの関数と引数

dbDriver (character dvr_name)

dbConnect (DBIDriver drv, character user, character password, character host,

character dbname, character port, character tty, character options)

dbSendQuery (DBIConnection conn, character sql)

fetch (DBIResult rs, integer num_rows)

dbClearResult (DBIResult rs)

dbGetQuery (DBIConnection conn, character sql)

dbReadTable (DBIConnection conn, character name)

dbDisconnect (DBIConnection conn)

dbUnloadDriver (DBIDriver drv)

これらの関数は、Rクライアントで開発したR関数をPL/R手続き言語として実行する場合は、サーバ上のデータベースに自動で接続してR言語で動作します。

サーバ上で動作し通信する必要がないため、すべてのドライバおよび接続に関する関数は、無視されます(dbDriver,dbConnect,dbDisconnect,およびdbUnloadDriver)。

参照

関数仕様の詳細は、“2.5 Symfoware Analytics Serverで利用するオープンソース・ソフトウェアマニュアル”の“RPostgreSQLマニュアル”を参照してください。

6.3.2.2.5 ユーティリティ関数

PL/R手続き言語では、ユーティリティ関数が使用できます。

参照

ユーティリティ関数の詳細は、“2.5 Symfoware Analytics Serverで利用するオープンソース・ソフトウェアマニュアル”の“PL/R User’s Guide - R Procedural Language”の“PostgreSQL Support Functions”を参照してください。