R と PostgreSQL
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
COLOR(red){SIZE(30){R と PostgreSQL}}
#contents
*[[PL/R:http://www.joeconway.com/plr/]] [#j58cc7f6]
PostgreSQL 用 R 手続き型言語(R Procedural Language for Po...
**PL/R とは [#wa010f01]
PostgreSQL の SQL よりRの機能を呼び出す。
**インストール(Linux) [#b90332f5]
-PL/R のソースをPostgreSQL の contrib で解凍
-make を実行してビルド
-"make install" でライブラリをインストール
-contrib/plr ディレクトリにある plr.sql で、任意のデータ...
-- psql -d mydatabase -f plr.sql
**インストール(Win32) [#s0768a42]
-[[Win32 インストーラ、ソース:http://joeconway.com/plr/]]
-[[Win32実行形式 旧版:http://www.davidgis.fr/download/plr...
-[[チュートリアル(英文):http://www.bostongis.com/Printe...
**利用方法 [#z9e41d48]
***関数の基本形 [#i1c44d2b]
以下のようにPL/R形の手続きを定義する
CREATE OR REPLACE FUNCTION 関数名 (引数タイプ)
RETURNS return-type AS '
関数本体 −− ここにRのスクリプトを書く
' LANGUAGE 'plr';
- R スクリプトのみの例~
引き数の変数名は以下のように、arg1,arg2 ...., argn とな...
CREATE OR REPLACE FUNCTION r_max (integer, integer) RETU...
if (arg1 > arg2)
return(arg1)
else
return(arg2)
' LANGUAGE 'plr' STRICT;
PostgreSQL 7.5 では、以下のように引数名が定義できる。この...
CREATE OR REPLACE FUNCTION sd(vals FLOAT8[]) RETURNS FLO...
sd(vals)
' LANGUAGE 'plr' STRICT;
上のSQL文では最後に"STRICT"を入れてNULL値対策をおこなって...
"STRICT" を使用しない場合
CREATE OR REPLACE FUNCTION r_max (INTEGER, INTEGER) RETU...
if (is.null(arg1) && is.null(arg2))
return(NULL)
if (is.null(arg1))
return(arg2)
if (is.null(arg2))
return(arg1)
if (arg1 > arg2)
return(arg1)
arg2
' LANGUAGE 'plr';
複合型の戻り値を返す例(データフレームの値を返す)。
CREATE OR REPLACE FUNCTION get_emps() RETURNS SETOF emp ...
names <- c("Joe","Jim","Jon")
ages <- c(41,25,35)
salaries <- c(250000,120000,50000)
df <- data.frame(name = names, age = ages, salary = s...
return(df)
' LANGUAGE 'plr';
SELECT * FROM get_emps();
name | age | salary
------+-----+-----------
Jim | 41 | 250000.00
Joe | 25 | 120000.00
Jon | 35 | 50000.00
(3 rows)
SQL内にRスクリプトを定義せずに、R関数と同名かつ引数の型...
CREATE OR REPLACE FUNCTION sd(_float8) RETURNS FLOAT AS ...
SELECT ROUND(sd('{1.23,1.31,1.42,1.27}'::_FLOAT8)::NUMER...
round
------------
0.08180261
(1 row)
***大域データ [#f06f12ca]
***データベースアクセスサポート関数 [#td53291f]
以下のコマンドをPL/R手続きの本体より実行するとデータベ...
-pg.spi.exec (問い合わせ文の文字列)
-pg.spi.prepare (character query, integer vector type_vec...
後で実行する問い合わせ文を準備し、保存しておく。
-pg.spi.execp (external pointer saved_plan, variable list...
pg.spi.prepare で事前に用意された問い合わせ文の実行
-pg.spi.lastoid()~
pg.spi.exec または pg.spi.execp 経由で最後の問い合わせが...
-pg.quoteliteral (character SQL_string)
-pg.quoteident (character SQL_string)
-pg.thrownotice (character message)~
PostgreSQL NOTICE メッセージの発行
-pg.throwerror (character message)~
PostgreSQL ERROR メッセージの発行。これ以降の処理が放棄...
-pg.spi.factor (data.frame data)~
R のデータフレームを入力として受け入れ、すべての非数値カ...
***PostgreSQL サポート関数 [#j8200a03]
-install_rcmd (text R_code)~
文字列で与えられた R のコードをインタープリータにインスト...
-reload_plr_modules ()~
plr_modules テーブルより、R のコードを強制的にリロード
-plr_singleton_array (float8 first_element)
-plr_array_push (float8[] array, float8 next_element)
-plr_array_accum (float8[] state_value, float8 next_eleme...
-load_r_typenames()
-r_typenames()
-plr_environ()~
Postmaster が現在動作している環境の表示
***集約関数 [#v8bb8e5c]
***起動時にRモジュールを読み込む [#rb2f7517]
PL/R はインタープリータの初期化中に R のコードを自動ロー...
以下に plr_modules の例を示す。
CREATE TABLE plr_modules (
modseq int4,
modsrc text
);
上の例でフィールド modseq はインストールの順序を制御し、...
INSERT INTO plr_modules
VALUES (0, 'pg.test.module.load <-function(msg) {print(...
PL/R は以下のように直接簡単に参照できる。
CREATE OR REPLACE FUNCTION pg_test_module_load(text) RET...
pg.test.module.load(arg1)
' LANGUAGE 'plr';
SELECT pg_test_module_load('hello world');
pg_test_module_load
---------------------
hello world
(1 row)
***R 関数名 [#l40d4bf0]
***トリガー手続き [#v08e6470]
PL/R ではトリガー手続きを書くことができる。PostgreSQL で...
-pg.tg.name~
CREATE TRIGGER ステートメントからのCREATE TRIGGER名
-pg.tg.relid~
トリガー手続きを実行したテーブルのオブジェクトID
-pg.tg.relname~
トリガー手続きを実行したテーブル名
-pg.tg.when~
トリガー呼び出し型に依存する文字列 BEFORE または AFTER
-pg.tg.level~
トリガー呼び出し型に依存する文字列 ROW または STATEMENT
-pg.tg.op~
トリガー呼び出し型に依存する文字列 INSERT、UPDATE、または...
-pg.tg.new~
-pg.tg.old~
-pg.tg.args~
CREATE TRIGGER で作成された手続きの引数ベクトル
-例
CREATE FUNCTION trigfunc_modcount() RETURNS trigger AS '
if (pg.tg.op == "INSERT")
{
retval <- pg.tg.new
retval[pg.tg.args[1]] <- 0
}
if (pg.tg.op == "UPDATE")
{
retval <- pg.tg.new
retval[pg.tg.args[1]] <- pg.tg.old[pg.tg.args[1]] + 1
}
if (pg.tg.op == "DELETE")
retval <- pg.tg.old
return(retval)
' LANGUAGE plr;
CREATE TABLE mytab (num integer, description text, modcn...
CREATE TRIGGER trig_mytab_modcount BEFORE INSERT OR UPDA...
FOR EACH ROW EXECUTE PROCEDURE trigfunc_modcount('mod...
**動作が確認されている環境 [#j31e266f]
Red Hat 7.3, 8.0, & 9. ~
[[Mingw 上:http://momjian.postgresql.org/main/writings/pg...
**利用例 [#q0c176a9]
*** テーブル内のデータをグラフ表示 [#mf409590]
*** ボロノイ図作成 [#q8669433]
http://www.varlena.com/varlena/GeneralBits/Tidbits/bern...
*** RGDAL の利用 [#zf5b442c]
[[PLR Part 3: PL/R and Geospatial Data Abstraction Librar...
*[[TSPostgreSQL:http://www.google.co.jp/url?sa=t&source=w...
Time Series Database Interface extensions for PostgreSQL
*リンク [#m0d3bf90]
-[[RとPostGIS]]
--[[PostgreSQL-embedded Statistical Analysis with PL/R:ht...
//-[[PostgreSQL-embedded Statistical Analysis with PL/R:h...
--[[Using PL/R a language and environment for statistics ...
--[[PostgreSQL-embedded Statistical Analysis with PL/R:ht...
--[[Using R with SQL Spatial Databases Course:http://www....
-[[PostgreSQLとPL/R - fousの日記:http://www.google.co.jp/...
-[[グループウェアのログデータを分析対象とした、 PL/Rを用...
-[[自分のための「PL/Rを使ってる」(1) :http://cis-jp.bl...
*参考書 [#l2b08056]
-[[PostGIS in Action:http://www.manning.com/obe/]] PLR
終了行:
COLOR(red){SIZE(30){R と PostgreSQL}}
#contents
*[[PL/R:http://www.joeconway.com/plr/]] [#j58cc7f6]
PostgreSQL 用 R 手続き型言語(R Procedural Language for Po...
**PL/R とは [#wa010f01]
PostgreSQL の SQL よりRの機能を呼び出す。
**インストール(Linux) [#b90332f5]
-PL/R のソースをPostgreSQL の contrib で解凍
-make を実行してビルド
-"make install" でライブラリをインストール
-contrib/plr ディレクトリにある plr.sql で、任意のデータ...
-- psql -d mydatabase -f plr.sql
**インストール(Win32) [#s0768a42]
-[[Win32 インストーラ、ソース:http://joeconway.com/plr/]]
-[[Win32実行形式 旧版:http://www.davidgis.fr/download/plr...
-[[チュートリアル(英文):http://www.bostongis.com/Printe...
**利用方法 [#z9e41d48]
***関数の基本形 [#i1c44d2b]
以下のようにPL/R形の手続きを定義する
CREATE OR REPLACE FUNCTION 関数名 (引数タイプ)
RETURNS return-type AS '
関数本体 −− ここにRのスクリプトを書く
' LANGUAGE 'plr';
- R スクリプトのみの例~
引き数の変数名は以下のように、arg1,arg2 ...., argn とな...
CREATE OR REPLACE FUNCTION r_max (integer, integer) RETU...
if (arg1 > arg2)
return(arg1)
else
return(arg2)
' LANGUAGE 'plr' STRICT;
PostgreSQL 7.5 では、以下のように引数名が定義できる。この...
CREATE OR REPLACE FUNCTION sd(vals FLOAT8[]) RETURNS FLO...
sd(vals)
' LANGUAGE 'plr' STRICT;
上のSQL文では最後に"STRICT"を入れてNULL値対策をおこなって...
"STRICT" を使用しない場合
CREATE OR REPLACE FUNCTION r_max (INTEGER, INTEGER) RETU...
if (is.null(arg1) && is.null(arg2))
return(NULL)
if (is.null(arg1))
return(arg2)
if (is.null(arg2))
return(arg1)
if (arg1 > arg2)
return(arg1)
arg2
' LANGUAGE 'plr';
複合型の戻り値を返す例(データフレームの値を返す)。
CREATE OR REPLACE FUNCTION get_emps() RETURNS SETOF emp ...
names <- c("Joe","Jim","Jon")
ages <- c(41,25,35)
salaries <- c(250000,120000,50000)
df <- data.frame(name = names, age = ages, salary = s...
return(df)
' LANGUAGE 'plr';
SELECT * FROM get_emps();
name | age | salary
------+-----+-----------
Jim | 41 | 250000.00
Joe | 25 | 120000.00
Jon | 35 | 50000.00
(3 rows)
SQL内にRスクリプトを定義せずに、R関数と同名かつ引数の型...
CREATE OR REPLACE FUNCTION sd(_float8) RETURNS FLOAT AS ...
SELECT ROUND(sd('{1.23,1.31,1.42,1.27}'::_FLOAT8)::NUMER...
round
------------
0.08180261
(1 row)
***大域データ [#f06f12ca]
***データベースアクセスサポート関数 [#td53291f]
以下のコマンドをPL/R手続きの本体より実行するとデータベ...
-pg.spi.exec (問い合わせ文の文字列)
-pg.spi.prepare (character query, integer vector type_vec...
後で実行する問い合わせ文を準備し、保存しておく。
-pg.spi.execp (external pointer saved_plan, variable list...
pg.spi.prepare で事前に用意された問い合わせ文の実行
-pg.spi.lastoid()~
pg.spi.exec または pg.spi.execp 経由で最後の問い合わせが...
-pg.quoteliteral (character SQL_string)
-pg.quoteident (character SQL_string)
-pg.thrownotice (character message)~
PostgreSQL NOTICE メッセージの発行
-pg.throwerror (character message)~
PostgreSQL ERROR メッセージの発行。これ以降の処理が放棄...
-pg.spi.factor (data.frame data)~
R のデータフレームを入力として受け入れ、すべての非数値カ...
***PostgreSQL サポート関数 [#j8200a03]
-install_rcmd (text R_code)~
文字列で与えられた R のコードをインタープリータにインスト...
-reload_plr_modules ()~
plr_modules テーブルより、R のコードを強制的にリロード
-plr_singleton_array (float8 first_element)
-plr_array_push (float8[] array, float8 next_element)
-plr_array_accum (float8[] state_value, float8 next_eleme...
-load_r_typenames()
-r_typenames()
-plr_environ()~
Postmaster が現在動作している環境の表示
***集約関数 [#v8bb8e5c]
***起動時にRモジュールを読み込む [#rb2f7517]
PL/R はインタープリータの初期化中に R のコードを自動ロー...
以下に plr_modules の例を示す。
CREATE TABLE plr_modules (
modseq int4,
modsrc text
);
上の例でフィールド modseq はインストールの順序を制御し、...
INSERT INTO plr_modules
VALUES (0, 'pg.test.module.load <-function(msg) {print(...
PL/R は以下のように直接簡単に参照できる。
CREATE OR REPLACE FUNCTION pg_test_module_load(text) RET...
pg.test.module.load(arg1)
' LANGUAGE 'plr';
SELECT pg_test_module_load('hello world');
pg_test_module_load
---------------------
hello world
(1 row)
***R 関数名 [#l40d4bf0]
***トリガー手続き [#v08e6470]
PL/R ではトリガー手続きを書くことができる。PostgreSQL で...
-pg.tg.name~
CREATE TRIGGER ステートメントからのCREATE TRIGGER名
-pg.tg.relid~
トリガー手続きを実行したテーブルのオブジェクトID
-pg.tg.relname~
トリガー手続きを実行したテーブル名
-pg.tg.when~
トリガー呼び出し型に依存する文字列 BEFORE または AFTER
-pg.tg.level~
トリガー呼び出し型に依存する文字列 ROW または STATEMENT
-pg.tg.op~
トリガー呼び出し型に依存する文字列 INSERT、UPDATE、または...
-pg.tg.new~
-pg.tg.old~
-pg.tg.args~
CREATE TRIGGER で作成された手続きの引数ベクトル
-例
CREATE FUNCTION trigfunc_modcount() RETURNS trigger AS '
if (pg.tg.op == "INSERT")
{
retval <- pg.tg.new
retval[pg.tg.args[1]] <- 0
}
if (pg.tg.op == "UPDATE")
{
retval <- pg.tg.new
retval[pg.tg.args[1]] <- pg.tg.old[pg.tg.args[1]] + 1
}
if (pg.tg.op == "DELETE")
retval <- pg.tg.old
return(retval)
' LANGUAGE plr;
CREATE TABLE mytab (num integer, description text, modcn...
CREATE TRIGGER trig_mytab_modcount BEFORE INSERT OR UPDA...
FOR EACH ROW EXECUTE PROCEDURE trigfunc_modcount('mod...
**動作が確認されている環境 [#j31e266f]
Red Hat 7.3, 8.0, & 9. ~
[[Mingw 上:http://momjian.postgresql.org/main/writings/pg...
**利用例 [#q0c176a9]
*** テーブル内のデータをグラフ表示 [#mf409590]
*** ボロノイ図作成 [#q8669433]
http://www.varlena.com/varlena/GeneralBits/Tidbits/bern...
*** RGDAL の利用 [#zf5b442c]
[[PLR Part 3: PL/R and Geospatial Data Abstraction Librar...
*[[TSPostgreSQL:http://www.google.co.jp/url?sa=t&source=w...
Time Series Database Interface extensions for PostgreSQL
*リンク [#m0d3bf90]
-[[RとPostGIS]]
--[[PostgreSQL-embedded Statistical Analysis with PL/R:ht...
//-[[PostgreSQL-embedded Statistical Analysis with PL/R:h...
--[[Using PL/R a language and environment for statistics ...
--[[PostgreSQL-embedded Statistical Analysis with PL/R:ht...
--[[Using R with SQL Spatial Databases Course:http://www....
-[[PostgreSQLとPL/R - fousの日記:http://www.google.co.jp/...
-[[グループウェアのログデータを分析対象とした、 PL/Rを用...
-[[自分のための「PL/Rを使ってる」(1) :http://cis-jp.bl...
*参考書 [#l2b08056]
-[[PostGIS in Action:http://www.manning.com/obe/]] PLR
ページ名: