Oracle® R Enterprise ユーザーズ・ガイド

リリース1.3 for Windows, Linux, Solaris, and AIX

E48232-01(原本部品番号:E36761-08)

目次

タイトルおよび著作権情報

はじめに

- 対象読者

- ドキュメントのアクセシビリティについて

- 関連ドキュメント

- 表記規則

Oracle R Enterprise 1.3の新機能

- リリース1.3での新機能

- リリース1.1での新機能

1 Oracle R Enterpriseの概要

- Oracle R Enterpriseのアーキテクチャ

- Oracle R Enterpriseのサポートされる構成

- RのGUIおよびIDE

- Oracle R Enterpriseのトレーニング

- Oracle R Enterpriseの役立つリンク

2 Oracle R Enterpriseの透過層

- サポートされるデータ型

- 日時データ型

- Oracleでの日時データ型

- Oracle R Enterpriseでの日付と時刻のサポート

- サポートされる演算子および関数

3 Oracle R Enterpriseの使用方法

- Oracle Databaseの表

- Oracle R Enterpriseドキュメントの表示

- Oracle R Enterpriseのデータ

- 詳細名

- Rデータ・フレームのデータベースへのロード

- 例: データのロード

- Rデータの実体化

- ore.frameの存在の確認

- データベース表の削除

- Rフレームへのデータベース表のプル

- 表の順序

- サンプリングとパーティショニング

- 索引の作成

- サンプリング

- ランダム・パーティショニング

- データベース内でのRオブジェクトの保持および管理

- ore.save()

- ore.load()

- ore.delete()

- ore.datastore()

- ore.datastoreSummary()

- Oracle R Enterpriseのデータ型でのRの使用方法

- Oracle R Enterpriseでの派生列

- Oracle R EnterpriseでのCRANパッケージの使用

- 回帰モデルの構築および使用

- Oracle R Enterpriseのデータベース埋込みRエンジン

- Oracle DatabaseでのR計算の実行

- データの並列性を使用した一連の回帰モデルの構築

- Oracle R Enterpriseの例

- 表へのデータ・フレームのロード

- 空気質を使用したNULL値の処理

- Oracle R Enterpriseのデモ

4 Oracle R Enterpriseの統計関数

- 例のデータ

- ore.corr

- ore.corrのパラメータ

- ore.corrの例

- 基本的な相関計算

- 部分相関

- いくつかの相関マトリクスの作成

- 相関の視覚化

- ore.crosstab

- ore.crosstabのパラメータ

- ore.crosstabの例

- 単一列頻度表

- 2つの列の分析

- 行の重み付け

- クロス集計表の行の順序付け

- 3つ以上の列の分析

- 列の範囲の指定

- 別の列の値ごとに1つのクロス表の作成

- 階層化によるクロス集計の拡張

- カスタム・ビニングとその後のクロス集計

- ore.extend

- ore.freq

- ore.freqのパラメータ

- ore.freqの例

- ore.rank

- ore.rankのパラメータ

- ore.rankの例

- 2つの列のランキング

- 同順位の処理

- グループ内のランキング

- 十分位数へのパーティショニング

- 累積分布関数の見積り

- ランクのスコアリング

- ore.sort

- ore.sortのパラメータ

- ore.sortの例

- 降順での列のソート

- 列ごとに異なる順序でソート

- ソートして一意の値ごとに1つの行を返す

- 重複列の削除

- 重複列を削除し、一意の値ごとに1つの行を返す

- 出力内での相対順序の保持

- ONTIME_Sを使用した例

- ore.summary

- ore.summaryのパラメータ

- ore.summaryの例

- デフォルトの統計の計算

- 歪度およびt検定

- 重み付け合計

- 2つの別々のGroup By列

- すべての適用可能なGroup By

- ore.univariate

- ore.univariateのパラメータ

- ore.univariateの例

- デフォルト単変量統計

- 位置統計

- 完全な分位統計

5 Rモデルでの予測

- Rモデルのore.predict

- 例

6 Oracle R EnterpriseのRモデルのバージョン

- ore.lm()

- ore.lm()およびore.stepwise()のメリット

- 線形回帰の例

- ore.stepwise()

- ステップワイズ回帰の例

- ore.neural()

- ニューラル・ネットワークの例

7 Oracle R Enterpriseでのデータベース内予測モデル

- OREdmの要件

- OREdmモデルおよびOracle Data Miningモデル

- OREdmモデル

- データ・マイニングの用語

- 式

- オーバーロードされた関数

- 属性評価

- 属性評価の例

- ディシジョン・ツリー

- ディシジョン・ツリーの例

- 一般化線形モデル

- GLMの例

- k-Means

- k-Meansの例

- Naive Bayes

- Naive Bayesの例

- サポート・ベクター・マシン

- サポート・ベクター・マシンの例

8 Oracle R Enterpriseでの埋込みの実行

- スクリプトのセキュリティに関する考慮事項

- RQADMINロール

- データベースの並列性のサポート

- 埋込みOracle R EnterpriseスクリプトのためのRインタフェース

- 埋込みRスクリプトのセキュリティ問題

- ore.*Apply()およびore.doEval()の入力

- ore.doEval()

- ore.tableApply()

- ore.groupApply()

- ore.rowApply()

- ore.indexApply()

- ore.scriptCreate()

- ore.scriptCreate()の例

- ore.scriptDrop()

- 埋込みRスクリプトでの自動データベース接続

- 埋込みRスクリプトの例

- Oracle R Enterpriseの埋込みSQLスクリプト

- SQLスクリプトの登録および管理

- Oracle R EnterpriseのSQL関数

- rqGroupEval()関数

- rq*Eval()とデータストア内のオブジェクト

- SQLでのデータストア管理

A Oracle R EnterpriseおよびOracle R Distributionのパッケージ

- Oracle R Distributionに関連するパッケージ

- Oracle R Enterpriseに関連するパッケージ

索引

Oracle® R Enterprise

ユーザーズ・ガイド

リリース1.3 for Windows, Linux, Solaris, and AIX

E48232-01(原本部品番号:E36761-08)

2013年4月

Oracle R Enterpriseユーザーズ・ガイド, リリース1.3 for Windows, Linux, Solaris, and AIX

E48232-01

Copyright © 2012, 2013, Oracle and/or its affiliates.All rights reserved.

原本主著者: David McDermid

原本協力者:  Margaret Taft

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

このソフトウェアまたは関連ドキュメントが、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供される場合は、次のNoticeが適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs. No other rights are granted to the U.S. Government.

このソフトウェアまたはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアまたはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用する際、このソフトウェアまたはハードウェアを安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

OracleおよびJavaはOracle およびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXはThe Open Groupの登録商標です。

このソフトウェアまたはハードウェアおよびドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても、一切の責任を負いかねます。

はじめに

このマニュアルでは、Oracle R Enterpriseリリース1.3の使用方法について説明します。

対象読者

このドキュメントは、Oracle R Enterpriseの全ユーザーを対象としています。Oracle R Enterpriseを使用するには、RとOracle Databaseの知識が必要です。

ドキュメントのアクセシビリティについて

オラクル社のアクセシビリティへの取組みの詳細は、Oracle Accessibility ProgramのWebサイトhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=docaccを参照してください。

Oracleサポートへのアクセス

Oracleのお客様は、My Oracle Supportにアクセスして電子サポートを受けることができます。詳細は、http://www.oracle.com/pls/topic/lookup?ctx=acc&id=infoまたはhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs (聴覚障害者向け)を参照してください。

関連ドキュメント

次のマニュアルでは、Oracle R Enterpriseについて説明しています。

- 『Oracle R Enterpriseインストレーションおよび管理ガイド』

- 『Oracle R Enterpriseユーザーズ・ガイド』(このマニュアル)

- 『Oracle R Enterpriseリリース・ノート』

Oracle Databaseの詳細は、Oracle Databaseドキュメント・ライブラリ11gリリース2(11.2) (http://www.oracle.com/technetwork/indexes/documentation/index.html?ssSourceSiteId=ocomen)を参照してください。

表記規則

このマニュアルでは次の表記規則を使用します。

規則

意味

太字

太字は、操作に関連するGraphical User Interface要素、または本文中で定義されている用語および用語集に記載されている用語を示します。

イタリック体

イタリックは、ユーザーが特定の値を指定するプレースホルダ変数を示します。

固定幅フォント

固定幅フォントは、段落内のコマンド、URL、サンプル内のコード、画面に表示されるテキスト、または入力するテキストを示します。

Oracle R Enterprise 1.3の新機能

この項では、Oracle R Enterpriseのリリースでの新機能について説明します。この章の内容は次のとおりです。

- リリース1.3での新機能

- リリース1.1での新機能

リリース1.3での新機能

リリース1.3には、次の新機能があります。

- データベース内データを使用したRモデルでの予測

- 「表の順序」で説明する、順序付けおよび索引付け

- Oracle R Enterpriseでのデータベース内予測モデル

- データベース内でのRオブジェクトの保持および管理

- 日時データ型

- サンプリングとパーティショニング

- 列の詳細名

- 埋込みRスクリプトでの自動データベース接続

- ore.neural()で説明する、データベース内データのRニューラル・ネットワーク

その他の変更

- インストールおよび管理情報は、このマニュアルから『Oracle R Enterpriseインストレーションおよび管理ガイド』に移動しました。インストールおよび管理に関連する新機能は、そちらのマニュアルを参照してください。

リリース1.1での新機能

リリース1.1には、次の新機能があります。

- IBM AIXのサポート: Oracle R DistributionおよびOracle R Enterpriseは、AIX 5.3以降でサポートされています。

- Solarisのサポート: Oracle R DistributionおよびOracle R Enterpriseは、64-bit SPARCおよび64-bit x386(Intel)の両方のプロセッサの10以降でサポートされています。

- Rでの向上した数学ライブラリの使用
Oracle R EnterpriseでIntel Math Kernel Library (MKL)とAMD Core Math Library (ACML)のいずれかを動的に選択するためのサポートによって向上したOracle R Distributionを使用できるようになりました。

Solarisでは、BLASおよびLAPACKの高速な操作のために、Oracle R DistributionがOracle SUNパフォーマンス・ライブラリと動的にリンクされます。

- Windows上で稼働するサーバー
Oracle R Enterpriseサーバーは、64-bitおよび32-bitのWindowsオペレーティング・システムで稼働するようになりました。

- Oracleウォレットのサポート
Rスクリプトで、クリア・テキストのデータベース認証資格証明を使用する必要がなくなりました。そのために、Oracle R EnterpriseがOracleウォレットと統合されています。

- 向上したインストール
インストール・スクリプトは、より多くの前提条件チェックおよび詳細なエラー・メッセージにより、向上しました。エラー・メッセージが、解決するためのアクションに関する具体的な説明を提供します。

1 Oracle R Enterpriseの概要

Rは、オープン・ソースの統計プログラミング言語および環境です。Rの詳細は、http://www.r-project.orgの「R Project for Statistical Computing」を参照してください。

Rは、次のような統計コンピューティング用の環境を提供します。

- 使いやすい言語

- 視覚化のための高性能なグラフィカル環境

- そのままで使用できる多数の統計手法

- Rパッケージ(Rパッケージは、関連する関数、ヘルプ・ファイルおよびデータ・ファイルのセットであり、この執筆時点で4000個を超えるRパッケージがありますが、その数は常に増加しています。)

- データをインタラクティブに分析するためのR Consoleグラフィカル・ユーザー・インタフェース

Rは、その採用が急速に拡大し、新しい統計ソフトウェアの標準としての評価を獲得しました。

Oracle R Enterpriseは、Oracle Database Enterprise EditionのOracle Advanced Analyticsオプションのコンポーネントの1つです。

ソフトウェア・ダウンロードのリンクなど、Oracle R Enterpriseの詳細は、「Oracle R Enterprise」(http://www.oracle.com/technetwork/database/options/advanced-analytics/r-enterprise/index.html)を参照してください。このサイトには、ダウンロード、ブログ、ディスカッション・フォーラムおよび最新のドキュメントへのリンクが掲載されています。ブログおよびフォーラムの詳細は、「Oracle R Enterpriseの役立つリンク」を参照してください。

Oracle R Enterpriseによって、ユーザーは、Oracle Databaseに格納されているデータに対して統計分析を実行できます。Oracle R Enterpriseには3つのコンポーネントがあります。

- Oracle R Enterprise R透過層。透過層は、Oracle DatabaseオブジェクトへのRデータ型のマッピングをサポートし、マッピングされたデータ型に対してR式に応じてSQLを透過的に生成するパッケージの集まりです。透過層によって、Rユーザーは、R言語構文を使用してデータベースに格納されているデータと直接対話できます。データベースに格納されているデータとやり取りする利点の1つは、Rユーザーがユーザーのデスクトップ・システムのメモリーに格納するには大きすぎるデータを処理できることです。

- Oracle R Enterprise統計エンジン。よく使用される統計ライブラリに対応する統計関数とプロシージャの集まり。統計エンジンのパッケージはOracle Databaseで実行されます。

- 埋込みRの実行。これを行うと、データベース・サーバーはサーバー側のRエンジンを生成することによって、Rスクリプトの実行を管理および制御できるようになります。埋込みRの実行により、Rスクリプトの操作化、つまりRスクリプトをアプリケーションの一部として完全に自動実行されるようにできます。埋込みRの実行では、Oracle Databaseからデータを移動する必要はありません。埋込みRの実行では、データおよびタスクのパラレル実行、SQL APIを介したリッチXML出力およびpngイメージ・ストリームの生成が可能であり、パラレル・シミュレーション機能が提供されます。

Oracle R Enterpriseには多数のパッケージが含まれており、そのリストについては「Oracle R EnterpriseおよびOracle R Distributionのパッケージ」を参照してください。

この章の残りの部分では、Oracle R Enterpriseのアーキテクチャと、Oracle R Enterpriseでサポートされる構成について説明します。

Oracle R Enterpriseのトレーニングは、Oracle Learning Libraryから無償で利用できます。

「Oracle R Enterpriseの役立つリンク」では、ブログおよびフォーラムについて説明します。

Oracle R Enterpriseのアーキテクチャ

Oracle R Enterpriseには、Connector for Hadoopなど次の3つのコンポーネントがあります。

図oreug_vm_001.pngの説明

1. クライアントRエンジン(クライアント内のRエンジン)は、Oracle Databaseへの接続と、そのデータベース内のデータとの対話を可能にするRパッケージの集まりです。
どのRコマンドもクライアントから使用できます。さらに、クライアントは、次の関数を提供します。

- R SQL透過層は、R関数をインターセプトし、データベース内の実行をスケーラブルにします

- 関数によって、データ変換、統計関数およびOracle R Enterprise固有関数がインターセプトされます

- オープン・ソースRと同様のインタラクティブなグラフィカル結果表示およびフロー制御

- Oracle Database内で実行するためのR閉包(関数)の送信。

2. サーバー(Oracle Database内)は、Oracle DatabaseをOracle R Enterpriseクライアントをサポートするために必要な機能で強化するPL/SQLプロシージャおよびライブラリの集まりです。Rエンジンは、埋込みRの実行をサポートするためにOracle Databaseにもインストールされます。Oracle Databaseは、Rエンジンを生成し、それによってデータの並列性を提供できます。
Oracle R Enterpriseのデータベース・エンジンは、次の機能を提供します。

- 大きなデータセットに対するスケーラビリティ

- データベース内の表、ビュー、外部表、およびデータベース・リンクを介してアクセス可能なものへのアクセス。

- SQL問合せのパラレル実行の使用

- データベース内の統計およびデータ・マイニング機能の使用

3. Oracle Databaseによって生成されるRエンジンは、データベースによって管理される並列性をサポートし、Rスクリプトのスケジュールされた完全自動実行、つまり、PL/SQLまたはSQL問合せ内にパッケージ化されたRスクリプトのスケジューリングまたは起動を提供します。Oracle R Enterpriseは、生成されたエンジンとの間の効率的な転送を提供します。埋込みRの実行を使用すると、MapReduceスタイルのプログラミングをエミュレートできます。

Oracle R Enterprise固有のデータ型がいくつかあります。詳細は、「サポートされるデータ型」を参照してください。

Oracle R Enterpriseのサポートされる構成

Oracle R Enterpriseは、クライアントとサーバーで構成されています。クライアントとサーバーはOracle Linux、Red Hat Linuxで動作します。クライアントはMicrosoft Windows 64ビットで動作します。サーバーは、Oracle Databaseにインストールされ、それにクライアントが接続します。クライアントとサーバーは、同じオペレーティング・システム上で動作している必要はありません。たとえば、サーバーがOracle Linuxにインストールされている状態で、クライアントをMicrosoft Windowsで実行することができます。

Oracle R Enterpriseは、LinuxおよびSolarisオペレーティング・システムが実行されているOracle Exadataマシンでも稼働します。詳細は、『Oracle R Enterpriseインストレーションおよび管理ガイド』を参照してください。

RのGUIおよびIDE

オープン・ソースのRは、Comprehensive R Archive Network (CRAN)から配布されています。ダウンロードできますが、出荷はされていません。

CRANディストリビューションには、Windows用のグラフィカル・ユーザー・インタフェースが含まれています。すべてのオペレーティング・システムのR用にオープン・ソースのGUIが存在していますが、別のサイトからのダウンロードおよび個別のインストールが必要です。

Rの統合開発環境(IDE)が必要な場合は、RStudio IDEを使用できます。RStudio IDEインストールの概要は、『Oracle R Enterpriseインストレーションおよび管理ガイド』を参照してください。

Oracle R Enterpriseのトレーニング

Oracle Learning Libraryで利用可能な「Oracle R Enterprise Tutorial Series」(https://apex.oracle.com/pls/apex/f?p=44785:24:17534844732288::NO::P24_CONTENT_ID,P24_PREV_PAGE:6528,1)では、オープン・ソースのRの基本およびOracle R Enterpriseの機能を説明するレッスンが用意されています。Rの基本、Rでのグラフ作成、透過層、Rスクリプト、SQLスクリプトなどのトピックがあります。また、Oracle R Connector for Hadoopに関するレッスンもあります。(Oracle Connector for Hadoopは別の製品です。)

Oracle Learning Libraryのレッスンは無償です。

関連項目:
Oracle Technology Network (http://www.oracle.com/technetwork/database/options/advanced-analytics/r-enterprise/index.html)のOracle R Enterpriseのページでは、「Learning R Series」プレゼンテーションを参照できます。

Oracle R Enterpriseの役立つリンク

次のWebサイトでは、Oracle R Enterpriseのユーザー向けに役立つ情報が提供されています。

- Oracle R Enterpriseのディスカッション・フォーラム(https://forums.oracle.com/forums/forum.jspa?forumID=1397)では、OracleのR関連の製品として、Oracle R Enterprise、Oracle R Connector for Hadoop (Big Data Connectorsの一部)およびOracle R Distributionなどのすべての側面についてサポートしています。このフォーラムを利用して、このソフトウェアに関する質問やコメントを投稿してください。

- Oracle R Enterpriseのブログ(https://blogs.oracle.com/R/)では、従来の、および新しいBig Data環境の両方でOracle R EnterpriseおよびOracle R Connector for Hadoopを適用するためのベスト・プラクティス、ヒント、およびコツについて意見を交わします。

2 Oracle R Enterpriseの透過層

Oracle R Enterprise透過層は、次の機能を持ちます。

- 実行前にすべてのRコマンドおよびスクリプトをトラップし、それらをデータベースでの実行用にOracle Databaseに送信する機会を探す。

- マップされたデータ型を使用するR式の透過的な祖父母SQLの生成を可能にする。

- RコマンドおよびスクリプトをSQL同等物に変換して、Oracle Databaseを高パフォーマンスの計算エンジンとして活用し、問合せの最適化、表索引、遅延評価およびパラレル実行を利用する。

Oracle R Enterprise透過層によって、Rユーザーは、Oracleからそのユーザーのデスクトップ上のRのメモリーにデータをプルすることなく、R構文を使用して、データベースに格納されているオブジェクトを直接操作できます。したがって、Rユーザーはデスクトップ・メモリーで許容される量よりも大きいデータを処理できます。

R言語構文は、Oracle Databaseオブジェクトにマップされているオブジェクトに対してサポートされています。

この章では、透過層で提供される機能について説明します。この章の内容は次のとおりです。

- サポートされるデータ型

- サポートされる演算子および関数

サポートされるデータ型

次のRデータ型が、オーバーロードされており、データベース・オブジェクトにマップされ、データベース内での実行が可能になっています。

- 文字、整数、数値および論理ベクトル

- 日時データ型

- ファクタ

- データ・フレーム

- マトリクスは、次の2つの状況でオーバーロードされます。

- 線形代数クロス積

- 高度な分析のための入力マトリクスの作成

class(object)は、そのようなマップされたオブジェクトのデータ型をレポートします。たとえば、表NARROWに列AGEがあり、AGEが数値の場合は、次のようになります。

R> class(NARROW$AGE)
[1] "ore.numeric"
attr(,"package")
[1] "OREbase"

日時データ型

この項では、Oracle Databaseでの日時データ型のサポート状況、およびこれらのデータ型をOracle R Enterpriseで使用する方法について説明します。

Oracleでの日時データ型

Oracle Databaseでは、次の日時データ型がサポートされています。

- DATEデータ型は、日付および時刻の情報を格納するために使用します。各DATE値に対して、OracleはフィールドYEAR、MONTH、DAY、HOUR、MINUTEおよびSECONDを格納します。
有効な日付範囲は紀元前4712年1月1日から紀元9999年12月31日です。

- TIMESTAMPデータ型は、DATEデータ型の拡張機能です。DATEデータ型の年、月および日に加えて、時、分および秒の値を格納します。オプションのfractional_seconds_precision (DATEのSECONDフィールドの小数部の桁数)がサポートされます。0から9の桁数を指定できます(デフォルトは6桁)。
TIMESTAMPには2つの拡張があります。

- TIMESTAMP WITH TIME ZONEは、TIMESTAMPと、タイムゾーンの置換え値TIMEZONE_HOURおよびTIMEZONE_MINUTEをあわせ持ちます。

- TIMESTAMP WITH LOCAL TIME ZONEは、データベースへの格納時にデータベースのタイムゾーンに対して正規化されるデータを持つTIMESTAMP WITH TIME ZONEです。データは取得時、セッションのタイムゾーンで表示されます。

- INTERVAL YEAR TO MONTHでは、YEARおよびMONTHフィールドを使用して期間が格納されます。このデータ型は、年および月の値のみが重要な場合に、2つの日時の値の違いを表す場合に有効です。

- INTERVAL DAY TO SECONDでは、期間が日、時間、分および秒単位で格納されます。このデータ型は、2つの日時の値の正確な違いを表す場合に有効です。

- INTERVAL YEAR TO MONTHは年および月で期間を格納し、オプションのyear_precisionはYEAR日時フィールドの桁数です。これはオプションです。

- INTERVAL DAY TO SECONDでは、期間が日、時間、分および秒単位で格納されます。オプションのday_precision (DAY日時フィールドの最大桁数)がサポートされており、値は0から9で、デフォルトは2です。また、オプションのfractional_seconds_precision (SECONDフィールドの小数部の桁数)がサポートされており、値は0から9で、デフォルトは6です。

Oracleデータ型の詳細は、『Oracle Database SQL言語リファレンス』のデータ型に関する説明を参照してください。

日付に関して期待されるすべての操作を実行できます。

Oracle R Enterpriseでの日付と時刻のサポート

Oracle R Enterpriseでは、日付と時刻の計算をサポートするために次のクラスが用意されています。

- ore.date (Oracle DATE)

- ore.datetime (TIMESTAMP、TIMESTAMP WITH TIME ZONE、TIMESTAMP WITH LOCAL TIME ZONE)

- ore.difftime (INTERVAL DAY TO SECOND)

ore.datetimeオブジェクトはタイム・ゾーン設定をサポートしていないため、かわりに、システム・タイム・ゾーンSys.timezone()が使用可能な場合はそれを使用し、Sys.timezone()を使用できない場合はGMTを使用します。

サポートされる演算子および関数

Oracle R Enterpriseでは、すべてのデータの準備および分析をデータベース内で直接実行できるように、データの事前処理機能を広範囲にわたってサポートしています。

このリストの関数のみを使用するように制限されているわけではありません。必要とする特定の関数がOracle R Enterpriseでサポートされていない場合は、最初にore.pull()でデータベースからRエンジン・メモリーにデータをプルして、メモリー内Rオブジェクトを作成してから、R関数を使用することができます。

次の演算子および関数がサポートされています。これらの演算子および関数の構文およびセマンティクスは、Rのドキュメントを参照してください。これらのアイテムの構文およびセマンティクスは、対応するデータベースのマップされたデータ型(Oracle R Enterpriseデータ型とも呼ぶ)に使用する場合も変わりません。

- 数学的変換: abs、sign、sqrt、ceiling、floor、trunc、cummax、cummin、cumprod、cumsum、log、loglo、log10、log2、log1p、acos、acosh、asin、asinh、atan、atanh、exp、expm1、cos、cosh、sin、sinh、tan、atan2、tanh、gamma、lgamma、digamma、trigamma、factorial、lfactorial、round、signif、pmin、pmax、zapsmall、rank、diff、besselI、besselJ、besselK、besselY

- 基本統計: mean、summary、min、max、sum、any、all、median、range、IQR、fivenum、mad、quantile、sd、var、table、tabulate、rowSums、colSums、rowMeans、colMeans、cor、cov

- 算術演算子: +、-、*、/、^、%%、%/%

- 比較演算子: ==、>、<、!=、<=、>=

- 論理演算子: &、|、xor

- 集合演算子: unique、%in%、subset

- 文字列演算: tolower、toupper、casefold、toString、chartr、sub、gsub、substr、substring、paste、nchar、grepl

- データ・フレームの結合: cbind、rbind、merge

- ベクトルの結合: append

- ベクトルの作成: ifelse

- サブセットの選択: [、[[、$、head、tail、window、subset、Filter、na.omit、na.exclude、complete.cases

- サブセットの置換: [<-、[[<-、$<-

- データの再編成: split、unlist

- データ処理: eval、with、within、transform

- applyのバリアント: tapply、aggregate、by

- 特別な値のチェック: is.na、is.finite、is.infinite、is.nan

- メタデータ関数: nrow、NROW、ncol、NCOL、nlevels、names、names<-、row、col、dimnames、dimnames<-、dim、length、row.names、row.names<-、rownames、rownames<-、colnames、levels、reorder

- グラフィック: arrows、boxplot、cdplot、co.intervals、coplot、hist、identify、lines、matlines、matplot、matpoints、pairs、plot、points、polygon、polypath、rug、segments、smoothScatter、sunflowerplot、symbols、text、xspline、xy.coords

- 変換関数: as.logical、as.integer、as.numeric、as.character、as.vector、as.factor、as.data.frame

- 型チェック関数: is.logical、is.integer、is.numeric、is.character、is.vector、is.factor、is.data.frame

- 文字の操作: nchar、tolower、toupper、casefold、chartr、sub、gsub、substr

- その他のore.frame関数: data.frame、max.col、scale

- 仮説検定: binom.test、chisq.test、ks.test、prop.test、t.test、var.test、wilcox.test

- 各種分布: 密度、累積分布、および標準分布のクォンタイル関数

- ore.matrix関数: show、is.matrix、as.matrix、%*% (マトリクスの乗算)、t、crossprod (マトリクスのクロス積)、tcrossprod (BをA回転置したマトリクスのクロス積)、solve (反転)、backsolve、forwardsolve、すべての適切な算術関数(abs、signなど)、summary (max、min、allなど)、mean

「Oracle R Enterpriseの例」で説明するOracle R Enterpriseのサンプル・プログラムには、Oracle R Enterpriseデータ型でこれらの関数の各カテゴリを使用した例がいくつか含まれています。

3 Oracle R Enterpriseの使用方法

この章では、Oracle R Enterpriseを使用して、Oracle Databaseの表またはビューに格納されたデータを分析する方法を説明します。

この章の内容は次のとおりです。

- Oracle Databaseの表

- Oracle R Enterpriseドキュメントの表示

- Oracle R Enterpriseのデータ

- Oracle R Enterpriseのデータベース埋込みRエンジン

- Oracle R Enterpriseの例

この項の残りの部分では、Rに熟知していることを前提にします。

Oracle R Enterpriseの機能を使用する他の例については、「Oracle R Enterpriseの統計関数」を参照してください。Oracle Data Miningアルゴリズムを使用して作成したモデルを含む、統計モデルを構築する例については、「Oracle R Enterpriseでのデータベース内予測モデル」を参照してください。

Oracle Databaseの表

Oracle R Enterpriseを使用してデータベース表に格納されているデータを分析する前に、『Oracle R Enterpriseインストレーションおよび管理ガイド』で説明しているように、Oracle R Enterpriseをインストールし、クライアントを起動し、データベースに接続する必要があります。

ネーミング規則により、Oracle R Enterpriseで定義されたほとんどの関数およびメソッドは接頭辞oreで始まります。これは、他のRソフトウェアと名前が衝突することを避けるためです。ただし、これらの関数およびメソッドによって作成したオブジェクトには、ユーザーが任意の名前を付けることができます。エンド・ユーザーがオブジェクトの命名を全面的に制御します。

ore.ls()から返された任意のオブジェクトを選択し、class(OBJECTNAME)またはclass(OBJECTNAME$COLUMN_NAME)と入力します。たとえば、次のコードは、DF_TABLEのクラスがore.frameであることを示しています。DF_TABLEオブジェクトは、「例: データのロード」で作成します。

R> class(DF_TABLE)
[1] "ore.frame"

接頭辞oreは、そのオブジェクトが、Oracle Database内の対応するオブジェクトのメタデータを保持するOracle R Enterpriseによって作成されたオブジェクトであることを示しています。

ore.frameは、データベース表にマップするOracle R Enterpriseメタデータ・オブジェクトです。ore.frameオブジェクトは、Rのdata.frameに対応するものです。

ore.frameは、class()関数によって返すことができます。ore.frameデータの作成の例は、「データベースへのRデータ・フレームのロード」を参照してください。

Oracle R Enterpriseドキュメントの表示

Oracle R Enterpriseドキュメント・ライブラリを表示するには次のコマンドを使用してください。

R> OREShowDoc()

Oracle R Enterpriseのデータ

Oracle R Enterpriseは、この機能をサポートします。

- 詳細名

- Rデータ・フレームのデータベースへのロード

- Rデータの実体化

- ore.frameの存在の確認

- データベース表の削除

- Rフレームへのデータベース表のプル

- 表の順序

- データベース内でのRオブジェクトの保持および管理

詳細名

Oracle R Enterpriseは、ore.frame列を、より制限の厳しいデータベース名ではなく、Rネーミング規則で処理します。ore.frame列には、30バイトを超える、二重引用符を含む名前を指定することができ、重複が許可されます。

Rデータ・フレームのデータベースへのロード

システム上のRデータ・フレームからOracleデータベースにデータをロードするには、次の手順に従います。

1. Rのオンライン・ヘルプに記載されているread.table()またはread.csv()関数を使用して、ファイルの内容をRデータ・フレームにロードします。

2. 次に、ore.create()を使用して、データ・フレームを表にロードします。

ore.create(data_frame, table="TABLE_NAME")

手順2によって、data_frameがデータベース表TABLE_NAMEにロードされます。

例は、「例: データのロード」を参照してください。

例: データのロード

この例では、数字と文字のペアで構成されるRデータ・フレームdfを作成し、そのデータ・フレームを表DF_TABLEにロードします。この例は、データ・フレームと表では、ディメンションおよび最初の数個の要素は同じであるが、クラスの値は異なることを示しています。DF_TABLEのクラスはore.frameです。この例の最後では、現行のスキーマにDF_TABLEが存在することを確認します。

R> df <- data.frame(A=1:26, B=letters[1:26])
R> dim(df)
[1] 26  2
R> class(df)
[1] "data.frame"
R> head(df)
A B
1 1 a
2 2 b
3 3 c
4 4 d
5 5 e
6 6 f
R> ore.create(df, table="DF_TABLE")
R> ore.ls()
[1] "DF_TABLE"
R> class(DF_TABLE)
[1] "ore.frame"
attr(,"package")
[1] "OREbase"
R> dim(DF_TABLE)
[1] 26  2
R> head(DF_TABLE)
A B
0 1 a
1 2 b
2 3 c
3 4 d
4 5 e
5 6 f
R> exists("DF_TABLE")[1] TRUE

SQL Developerなどのツールを使用してデータベースに接続する場合は、データベースでDF_TABLEを直接参照します。

Rデータの実体化

ore.push(data.frame)関数は、データベースに一時オブジェクトとしてRオブジェクトを格納し、そのオブジェクトのハンドルを返します。データ・フレーム、マトリクスおよびベクターのオブジェクトを表に変換し、リスト、モデルおよびその他のオブジェクトをシリアライズ・オブジェクトに変換します。

作成したオブジェクトはRセッション中は存在します。このデータを永続的に保存する方法については、「データベース内でのRオブジェクトの保持および管理」を参照してください。

この例では、Rコマンドc(1,2,3,4,5)によって作成された数値ベクトルをOracle R Enterpriseオブジェクトであるvにプッシュします。

R> v <- ore.push(c(1,2,3,4,5))
R> class(v)
[1] "ore.numeric"
attr(,"package")
[1] "OREbase"
R> head(v)
[1] 1 2 3 4 5

ore.frameの存在の確認

ore.exists()は、ore.frameオブジェクトがOREスキーマ環境内に存在するかどうかをチェックします。ore.exists()でore.frameオブジェクトを検出するには、最初にore.sync()を使用して、そのオブジェクトを同期化しておく必要があります。

ORE環境で使用できるオブジェクトが、データベース・オブジェクトと同一であるとはかぎりません。ore.exists()を使用して表の存在をチェックしないでください。

例は、「例: データのロード」を参照してください。

ore.exists(name, schema)には次の引数があります。

- name: ore.frameオブジェクトの名前を指定した文字列

- schema: チェックするデータベース・スキーマの名前を指定した文字列

ore.exists()は、オブジェクトがOREスキーマに存在する場合はTRUEを返し、存在しない場合はFALSEを返します。

データベース表の削除

データベースの表を削除するには、次のものを使用します。

ore.drop(table="NAMEOFTABLE")

たとえば、次のコマンドでは表vを削除して、存在しなくなったことを確認します。

R> ore.drop(table="v")
R> ore.exists("v")
[1] FALSE

存在しない表を削除した場合、エラー・メッセージは表示されません。

Rフレームへのデータベース表のプル

Oracle Databaseの表またはビューの内容を、メモリー内のRデータ・フレームにプルするには、ore.ls()によって返されるオブジェクトの名前のore.pull(OBJECT_NAME)を使用します。

注意:
表またはビューをRフレームにプルできるのは、データがRのメモリーに収まる場合のみです。

使用しているOracle Databaseに表NARROWがあるとします。ore.pull()で、表NARROWからデータ・フレームdf_narrowを作成します。df_narrowがデータ・フレームであることを確認します。表NARROWは索引付けされていないため、次の警告メッセージが表示されます。

R> df_narrow <- ore.pull(NARROW)
Warning message:
ORE object has no unique key - using random order
R> class(df_narrow)
[1] "data.frame"

表の順序

Rのほとんどすべてのデータは、ベクターか、ベクターに基づいています(ベクター自体、リスト、マトリクス、データ・フレームなど)。ベクターの要素には明示的な順序があります。各要素には索引があります。Rコードは、この要素の順序をアクティブに使用します。

ただし、データベースでバックアップされたリレーショナル・データ(表およびビュー)は行の順序を定義せず、そのためRデータ構造に直接マップすることはできません。ORDER BY句を使用するとデータベースの表およびビューの順序を明示的に定義できます。この順序は、通常、一意の識別子(単一または複数列のキー)を持つことで実現されます。この方法による順序付けは不十分で、一部の操作の速度を低下させて不要なソートを発生させる可能性があります。

row.names<-は順序を定義しますが、実際に表に索引付けをすることはありません。この割当てオプションは、一意の列を指定する方法を提供します。最初は少なくとも1つの列をサポートしますが、複数列の指定もサポートできます。row.names<-を順序付けされていないフレームに適用すると、エラーが返されます。

「サンプリングとパーティショニング」で説明するように、順序付けのインフラストラクチャで作成した整数による索引付けを使用して、サンプリングとパーティショニングを実行できます。

表NARROWは索引付けされていないとします。次に、row.namesを使用して索引付きの表を作成する例を示します。

R> row.names(head(NARROW))
Error: ORE object has no unique key
In addition: Warning message:
ORE object has no unique key - using random order
R>
R> row.names(NARROW) <- NARROW$ID
R>
R> row.names(head(NARROW[,1:3]))
[1] "101501" "101502" "101503" "101504" "101505" "101506"
R>
R> head(NARROW[,1:3])
ID GENDER AGE
101501 101501   <NA>  41
101502 101502   <NA>  27
101503 101503   <NA>  20
101504 101504   <NA>  45
101505 101505   <NA>  34
101506 101506   <NA>  38

サンプリングとパーティショニング

「表の順序」で説明した表の順序付け(索引の作成)は、サンプリングとパーティショニングを実行するために使用できます。

この項では、次の操作の例を示します。

- 索引の作成

- サンプリング

- ランダム・パーティショニング

索引の作成

Rは、ベクターを索引として使用した強力な構造をサポートします。Oracle R Enterpriseは類似した機能をサポートしますが、次の違いがあります。

- ore.vectorオブジェクトでは整数索引の作成はサポートされません。

- 負の整数の索引はサポートされません。

- 行の順序は保持されません。

この例では、索引の作成方法を示します。

R> tmp <- ASTHMA
R> tmp[c(1L, 2L, 1L),]
Error: ORE object has no unique key
R> rownames(tmp) <- tmp
R> tmp[c(1L, 2L, 1L),]
CITY ASTHMA COUNT
1|0|65      1      0    65
1|0|65.1    1      0    65
1|1|35      1      1    35
R> tmp[c(1L, 2L, 1L),]@dataQry

サンプリング

このコードでは、いくつかのサンプリング手法を示します。

# Generate random data
set.seed(123)
N <- 1000000
mydata <- data.frame(x = rnorm(N, mean = 20, sd = 2),
group =
sample(letters, N, replace = TRUE,
prob = (26:1)/sum(26:1)))
mydata$y <-
rbinom(N, 1,
1/(1+exp(-(.5 - 0.25 * mydata$x + .1 * as.integer(mydata$group)))))
MYDATA <- ore.push(mydata)
rm(mydata)

# Create a function that creates random row indices from large tables
mysampler <- function(n, size, replace = FALSE)
{
#' Random Whole Number Sampler
#' @param n       number of observations in sample
#' @param size    total number of observations
#' @param replace indicator for sampling with replacement
#' @return numeric vector containing the sample indices
n    <- round(n)
size <- round(size)
if    (n < 0) stop("'n' must be a non-negative number")
if (size < 1) stop("'size' must be a positive number")
if (!replace && (n > size))
stop("'n' cannot exceed 'size' when 'replace = FALSE'")
if (n == 0)
numeric()
else if (replace)
round(runif(n, min = 0.5, max = size + 0.5))
else
{
maxsamp <- seq(size + 0.5, by = -1, length.out = n)
samp <- round(runif(n, min = 0.5, max = maxsamp))
while(length(bump1 <- which(duplicated(samp))))
samp[bump1] <- samp[bump1] + 1
samp
}
}

# Data set and sample size
N <- nrow(MYDATA)
sampleSize <- 500

# 1. Simple random sampling
srs <- mysampler(sampleSize, N)
simpleRandomSample <- ore.pull(MYDATA[srs, , drop = FALSE])

# 2. Systematic sampling
systematic <- round(seq(1, N, length.out = sampleSize))
systematicSample <- ore.pull(MYDATA[systematic, , drop = FALSE])

# 3. Stratified sampling
stratifiedSample <-
do.call(rbind,
lapply(split(MYDATA, MYDATA$group),
function(y)
{
ny <- nrow(y)
y[mysampler(sampleSize * ny/N, ny), , drop = FALSE]
}))

# 4. Cluster sampling
clusterSample <- do.call(rbind, sample(split(MYDATA, MYDATA$group), 2))

# 5a. Accidental/Convenience sampling (via row order access)
convenientSample1 <- head(MYDATA, sampleSize)

# 5b. Accidental/Convenience sampling (via hashing)
maxHash <- 2^32 # maximum allowed in ore.hash
convenient2 <- (ore.hash(rownames(MYDATA), maxHash)/maxHash) <= (sampleSize/N)
convenientSample2 <- ore.pull(MYDATA[convenient2, , drop = FALSE])
Random

ランダム・パーティショニング

Oracle R Enterpriseのランダム・パーティショニングは、次に示す方法でore.frameオブジェクトにパーティション列またはグループ列を追加することによって、透過層内で生成できます。

nrowX <- nrow(x)
x$partition <- sample(rep(1:k, each = nrowX/k, length.out = nrowX), replace = TRUE)

これらのパーティションが元のデータ・セットに結合されたら、ore.groupApply関数を使用して小規模なブートストラップを実行します。

results <- ore.groupApply(x, x$partition, function(y) {...}, parallel = TRUE)

データベース内でのRオブジェクトの保持および管理

Rオブジェクトは、明示的に保存されないかぎり、現行のセッション中のみ保持されます。たとえば、特定のRセッションでモデルを構築した場合、明示的に保存していないかぎり、セッションをクローズするとそのモデルは使用できなくなります。

Oracle R Enterpriseは、データベース上でRオブジェクトの永続性をサポートします。

永続性には次のメリットがあります。

- 異なるRセッション間で、同じRオブジェクトおよびOracle R Enterpriseオブジェクト(モデルなど)にアクセスできます。

- Rでモデルを構築して、埋込みOracle R Enterpriseでの予測とスコアリングに使用できます。

Oracle R Enterpriseはデータストアを作成して、そこに保持オブジェクトを格納します。

保持オブジェクトはデータストア内にあります。Oracle R Enterpriseの次の機能によって永続性を管理できます。

- ore.save()

- ore.load()

- ore.delete()

- ore.datastore()

- ore.datastoreSummary()

ore.save()

ore.save()は、RオブジェクトまたはRオブジェクトのリストを、現行のユーザーのスキーマにある接続データベースの指定されたデータストアに保存します。

ore.save({...}, list = character(0), name, envir = parent.frame(), overwrite = FALSE, append = FALSE, description = character(0)))

ore.save()のパラメータは、次のとおりです。

- {...}は、保存するRオブジェクトのリストです。保存するオブジェクトの名前を(記号または文字列で)指定します。

- listは、保存するオブジェクトの名前を含む文字ベクターです。

- envirは、保存するオブジェクトを検索する環境です。

- overwriteは、すでに存在する場合にデータストアを上書きするかどうかを指定する論理値で、デフォルトはFALSE(上書きしない)です。

- nameはデータストアの名前です。nameの指定は必須です。

- descriptionはデータストアについて説明するコメントです。

- appendは、すでに存在する場合にデータストアにオブジェクトを追加するかどうかを指定する論理値で、デフォルトはFALSE(追加しない)です。

ore.save()の例

現行の作業領域環境にあるすべてのオブジェクトを、ユーザーの現行のスキーマにあるデータストアds_1に保存します。

ore.save(list=ls(), name="ds_1", description = "example datastore")

既存のデータストアds_2を、現行の作業領域環境にあるオブジェクトx、yおよびzで上書きします。

ore.save(x, y, z, name="ds_2", overwrite=TRUE)

現行の作業領域環境にあるオブジェクトx、yおよびzを、既存のデータストアds_3に追加します(データストアへのオブジェクトの追加)。

ore.save(x, y, z, name="ds_3", append=TRUE)

ore.load()

ore.load()は、接続データベースで現行のユーザーのスキーマにある、指定されたデータストアに保存されたすべてのRオブジェクトをRにロードします。

ore.load(name, list = character(0), envir = parent.frame())

ore.load()のパラメータは次のとおりです。

- nameは、オブジェクトのロード元になるデータストアの名前を指定する文字列です。nameの指定は必須です。

- listは、ロードするオブジェクトの名前を含む文字ベクターです。

- envirは、オブジェクトのロード先になるR環境です。

ore.load()は、データストアからロードしたオブジェクトの名前を含む文字ベクターを返します。

ore.load()の例

データストアds_1にあるすべてのオブジェクトをロードします。

ore.load("ds_1")

データストアds_1からオブジェクトx、yおよびzのみをロードします。

ore.load("ds_1", list=c("x", "Y", "z"))

ore.delete()

ore.delete()は、接続データベースで現行のユーザーのスキーマにある、指定されたデータストア(およびそこにあるすべてのRオブジェクト)を削除します。

ore.delete(name)

ore.delete()のパラメータは次のとおりです。

- nameは、削除するデータストアの名前を指定する文字列です。nameの指定は必須です。

ユーザーのOracle Databaseスキーマにあるデータストアのリストを表示するには、ore.datastore()を使用します。

ore.delete()の例

ユーザーの現行のスキーマからデータストアds_1を削除します。

ore.delete("ds_1")

ore.datastore()

ore.datastore()は、現行のスキーマにあるデータストアと各データストアの基本情報のリストを表示します。

ore.datastore(name, pattern)

ore.datastore()のパラメータは次のとおりです。

- nameは、リストを表示するデータストアの名前を指定する文字列です。

- patternは、リストを表示するデータストアの名前を指定する正規表現の文字列です。

ore.datastore()は、nameに指定した名前を持つデータストアの情報、またはpatternに指定した正規表現に一致する名前を持つデータストアの情報を表示します。

nameとpatternのいずれも指定しない場合、ore.datastore()はユーザーのスキーマにあるすべてのデータストアの情報を返します。

nameとpatternは、いずれか一方を指定できます。両方を指定することはできません。

ore.datastore()はdata.frameオブジェクトを返します。このオブジェクトには次の列があります。

- datastore.nameは、データストアの名前です。

- object.countは、datastore.nameで識別されるデータストア内のオブジェクトの数です。

- sizeは、データストアのバイト単位のサイズです。

- creation.dateは、データストアの作成日です。

- descriptionは、データストアについてのコメントです(コメントはore.saveのdescriptionパラメータで指定します)。

data.frameの各行は1つのデータストアを示します。行は、列datastore.nameによってアルファベット順にソートされます。

ore.datastore()の例

接続スキーマのすべてのデータストアを表示します。

ore.datastore()

ore.datastoreSummary()

ore.datastoreSummary()は、接続データベースのスキーマにある指定されたデータストアに保存されたRオブジェクトの名前とサマリー情報がリストされたdata.frameを返します。

ore.datastoreSummary(name)

ore.datastoreSummary()のパラメータは次のとおりです。

- nameは、サマリーを表示するデータストアの名前を指定する文字列です。nameの指定は必須です。

指定されたデータストアが存在しない場合は、エラー・メッセージが返されます。

ore.datastoreSummary()はdata.frameオブジェクトを返します。このオブジェクトには次の列があります。

- object.nameは、Rオブジェクトの名前です。

- class.nameは、Rオブジェクトのクラス名です。

- sizeは、Rオブジェクトのバイト単位のサイズです。

- lengthは、Rオブジェクトの長さです。

- row.countは、Rオブジェクトの行数です。

- col.countは、Rオブジェクトの列数です。

data.frameの各行は1つのRオブジェクトを示します。行は、列datastore.nameによってアルファベット順にソートされます。

ore.datastoreSummary()の例

データストアds_1内のすべてのRオブジェクトのサマリー情報を表示します。

ore.datastoreSummary(name = "ds_1")

Oracle R Enterpriseのデータ型でのRの使用方法

次の例では、Oracle R Enterpriseデータ型でのRの使用方法を示します。

- Rでの単純な列および行の選択:

# Push built-in R data set iris to database
R> ore.create(iris, table="IRIS")
R> head(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa
R> iris_projected = IRIS[, c("PETAL_LENGTH", "SPECIES")]
R> head (iris_projected)
PETAL_LENGTH SPECIES
0          1.4  setosa
1          1.4  setosa
2          1.3  setosa
3          1.5  setosa
4          1.4  setosa
5          1.7  setosa

- Rを使用したデータベースの結合:

df1 <- data.frame(x1=1:5, y1=letters[1:5])
df2 <- data.frame(x2=5:1, y2=letters[11:15])
merge (df1, df2, by.x="x1", by.y="x2")
x1 y1 y2
1  1  a  o
2  2  b  n
3  3  c  m
4  4  d  l
5  5  e  k
# Create database objects to correspond to in-memory R objects df1 and df2
ore.df1 <- ore.create(df1, table="DF1")
ore.df2 <- ore.create(df2, table="DF2")
# Compare results
R> merge (DF1, DF2, by.x="X1", by.y="X2")
X1 Y1 Y2
0  1  a  o
1  2  b  n
2  3  c  m
3  4  d  l
4  5  e  k

- Rを使用したデータベースの集計:

# Push built-in data set iris to database
ore.create(iris, table="IRIS")
aggdata <- aggregate(IRIS, by = list(IRIS$SPECIES), FUN = summary)
class(aggdata)
head(aggdata)

- Rでのデータのフォーマット設定および派生列の作成
派生列を追加しても、データベース表は変更されません。「Oracle R Enterpriseでの派生列」を参照してください。

diverted_fmt <- function (x) {
ifelse(x==0, 'Not Diverted',
ifelse(x==1, 'Diverted',''))
}
cancellationCode_fmt <- function(x) {
ifelse(x=='A', 'A CODE',
ifelse(x=='B', 'B CODE',
ifelse(x=='C', 'C CODE',
ifelse(x=='D', 'D CODE', 'NOT CANCELLED'))))
}
delayCategory_fmt <- function(x) {
ifelse(x>200,'LARGE',
ifelse(x>=30,'MEDIUM','SMALL'))
}
zscore <- function(x) {
(x-mean(x,na.rm=TRUE))/sd(x,na.rm=TRUE)
# ONTIME_S is a database table
ONTIME_S$DIVERTED <- diverted_fmt(DIVERTED)
ONTIME_S$CANCELLATIONCODE <- cancellationCode_fmt(CANCELLATIONCODE)
ONTIME_S$ARRDELAY <- delayCategory_fmt(ARRDELAY)
ONTIME_S$DEPDELAY <- delayCategory_fmt(DEPDELAY)
ONTIME_S$DISTANCE_ZSCORE <- zscore(DISTANCE)

Oracle R Enterpriseでの派生列

Oracle R Enterpriseを使用して派生列を追加する場合、その派生列によって、データベース内の基礎となっている表が影響を受けることはありません。選択リストに追加の派生列を持つSQL問合せが生成されますが、表は変更されません。

Oracle R EnterpriseでのCRANパッケージの使用

この例では、Oracle R EnterpriseでCRANからダウンロードした標準Rパッケージを使用する方法を示します。

- 回帰モデルの構築および使用

回帰モデルの構築および使用

この例では、CRANパッケージを使用した回帰モデルの構築方法を示します。データベース内のトレーニングに使用するデータを準備できます(不要な観測データをフィルタで除外し、属性を選択し、欠落している値を帰属させるなど)。表ONTIME_S_PREPROCESSED_SUBSETに事前処理したデータがあるとします。準備したトレーニング・セット(通常、デスクトップのRメモリーに収まる大きさ)をRクライアントにプルし、モデルの構築を実行します。

結果のモデルを使用して、Oracle Database内の多数の行を並列してスコアリング(予測)できます。データはONTIME_S_FINAL_DATA_TO_BE_SCOREDに格納されます。

1つの行を他の行から独立して、並列してスコアリングできるため、スコアリングは、簡単に並列処理できる操作です。デスクトップで構築されたモデルは、データベースに送られ、データベース内で膨大な数の行に対してスコアリングを実行します。

計算は、次のステップに分かれています。

1. デスクトップでモデルを構築します。

dat <- ore.pull(ONTIME_S_PREPROCESSED_SUBSET)
mod <- glm(ARRDELAY ~ DISTANCE + DEPDELAY, dat)
mod
summary(mod)

2. 埋込みRを使用してデータベース内で並列してスコアリングします。

prd <- predict(mod, newdata=ONTIME_S_FINAL_DATA_TO_BE_SCORED)
class(prd)
# Add predictions as a new column
res <- cbind(newdat, PRED = prd)
head(res)

Rは、これ以外にも、回帰モデルを構築する多くの方法を提供します(lm()など)。

回帰モデルを構築するその他の方法については、「Oracle R EnterpriseのRモデルのバージョン」および「Oracle R Enterpriseでのデータベース内予測モデル」を参照してください。

Oracle R Enterpriseのデータベース埋込みRエンジン

Oracle Databaseの埋込みRエンジンによって、Rユーザーは、デスクトップではより多くのリソース(Oracle Databaseで使用可能なものなど)を必要したりデータベース駆動型のデータの並列性を必要とする計算をデスクトップからオフロードできます。埋込みRエンジンは、SQLまたはPL/SQLプログラムに埋め込まれたRスクリプトも実行します(完全自動処理)。

次の例では、Oracle R Enterprise埋込みRエンジンでCRANからダウンロードした標準Rパッケージを使用する方法を示します。

- Oracle DatabaseでのR計算の実行

- データの並列性を使用した一連の回帰モデルの構築

Oracle DatabaseでのR計算の実行

この例では、R計算をオフロードし、埋込みRエンジンを実行する方法を示します。R計算をオフロードするには、Rコードを閉包(つまりfunction() {})内に含め、ore.doEval()を起動するだけです。ore.doEval()によって、そのRコードのデータベース埋込みRエンジンでの実行がスケジュールされ、結果が、その後の分析のためにデスクトップに返されます。

library(biglm)
mod <- ore.doEval(
function() {
library(biglm)
dat <- ore.pull(ore.get("ONTIME_S"))
mod <- biglm(ARRDELAY ~ DISTANCE + DEPDELAY, dat)
mod
}, ore.connect = TRUE);
print(mod)
mod=ore.pull(mod)
print(mod)

データの並列性を使用した一連の回帰モデルの構築

この例では、CRANパッケージを使用した一連の回帰モデルの構築におけるデータベース駆動型のデータの並列性を示します。ファクタの一意の値ごとに1つのモデルが構築されます。データベースによるオーケストレーションの下に、1つのファクタに1つずつのモデルが並列かつ同時に構築され、構築されたすべてのモデルのリストが、その後の分析のためにユーザーのデスクトップに送信されます。

modList <- ore.groupApply(
# Organize input to the R script – This is always an Oracle R Enterprise
# data frame
X=ONTIME_S,
# Specify the grouping column. Here we request one model per unique value of
# ONTIME_S$DEST
INDEX=ONTIME_S$DEST,
# Model building code goes inside the closure. Input and grouping
# conditions can be referenced as parameters to the function
function(x) {
library(biglm)
biglm(ARRDELAY ~ DISTANCE + DEPDELAY, x)
});

modList_local <- ore.pull(modList)
# Print the model for just one destination - BOSTON
summary(modList_local$BOS)

Oracle R Enterpriseの例

Oracle R Enterpriseには、Oracle R Enterpriseの使用方法を示す一連のデモおよび例が同梱されています。これらの例は、自己完結型Rスクリプトの集まりです。

大部分のサンプル・プログラムでは、Rディストリビューションに含まれているデータ・フレームirisが使用されます。irisは、「表へのデータ・フレームのロード」の説明に従って表にロードされます。

この項の残りの部分では、2つの例について詳しく説明し、すべての例のリストを示します。

- 表へのデータ・フレームのロード

- 空気質を使用したNULL値の処理

- Oracle R Enterpriseのデモ

表へのデータ・フレームのロード

Rを起動し、library(ORE)を使用してOREパッケージをロードし、データベースに接続します。

Rデータ・フレームをデータベース表にロードするには、次の手順に従います。

1. この例では、Rデータ・セットirisを使用します。
irisデータ・セットは、Rディストリビューションに含まれるデータセット・パッケージ内にあります。

R> find("iris")
[1] "package:datasets"

Rコマンドclassを使用してirisがRデータ・フレームであること確認します。

R> class(iris)
[1] "data.frame"

irisは、植物のアヤメの各部の測定値で構成されています。Rコマンドheadを使用して、irisのデータの少量のサンプルを表示します。

R> head(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa

2. ここで、接続しているデータベースに、データ・フレームirisをロードします。
irisのデータベース表バージョンの名前はIRIS_TABLEであるとします。IRIS_TABLEを削除し、接続しているスキーマにこの名前の表がないことを確認します。

ore.drop(table = "IRIS_TABLE")

IRIS_TABLEが存在しない場合、メッセージは表示されません。

3. ここで、irisに含まれているデータでデータベース表を作成します。

ore.create(iris, table = "IRIS_TABLE")

ore.ls()を使用して、表が作成されたことを確認します。

R> ore.ls()
[1] "IRIS_TABLE" "NARROW"     "ONTIME_S"

4. IRIS_TABLEは、データベースに格納されている表であり、R側のメタデータのみが含まれています。

R> class(IRIS_TABLE)
[1] "ore.frame"
attr(,"package")
[1] "OREbase"

5. headを使用して、IRIS_TABLE内の列名および最初の数個の値を表示します。

R> head(IRIS_TABLE)
SEPAL_LENGTH SEPAL_WIDTH PETAL_LENGTH PETAL_WIDTH SPECIES
0          5.1         3.5          1.4         0.2  setosa
1          4.9         3.0          1.4         0.2  setosa
2          4.7         3.2          1.3         0.2  setosa
3          4.6         3.1          1.5         0.2  setosa
4          5.0         3.6          1.4         0.2  setosa
5          5.4         3.9          1.7         0.4  setosa

6. classを使用して列SPECIESのデータ型を表示します。

R > class(IRIS_TABLE$SPECIES)
[1] "raw"

R関数を使用して、表のデータを分析します。次に、例basic.Rからの単純な例をいくつか示します。

- uniqueを使用して、列内の一意のエントリのリストを取得します。この例では、一意のSPECIESを見つけます。

R> unique(IRIS_TABLE$SPECIES)
[1] setosa     versicolor virginica
Levels: setosa versicolor virginica

- PETAL_LENGTHの最小値、最大値、および平均を見つけます。

R> min(IRIS_TABLE$PETAL_LENGTH)
[1] 1
R> max(IRIS_TABLE$PETAL_LENGTH)
[1] 6.9
R> mean(IRIS_TABLE$PETAL_LENGTH)
[1] 3.758

R関数の情報が必要な場合は、コマンドhelp(function-name)を使用します。

空気質を使用したNULL値の処理

Oracle Databaseには、TRUE、FALSE、NULLの論理値があります。ANDおよびORを使用した命題の真理値を定義した3x3の表があります。NULLは不明な値として扱われます。一部の演算の結果は、決定的(たとえばTRUE OR NULL)または未知(TRUE AND NULL)のいずれかになります。WHERE句で論理値を使用すると、条件がTRUEの行のみが選択されて、FALSEおよびNULLは無視されます。一方、Rでは、TRUEおよびNAが保持されます。値NAによって、NAの行が選択されます。

オプションore.na.extractは、NAが選択されるかどうかを制御します。デフォルトでは、SQLでFALSEを取り扱うのと同様にNAを取り扱います。

デモnulls.Rは、データとしてirisを使用しない唯一のサンプルです。nulls.Rは、SQLでのNULLの処理とRでのNAの処理を比較します。

Rでは、NAは、欠落値インジケータを含む長さ1の論理定数です。データベースでは、NULLは、1つの行の1つの列における1つの値の欠落を示します。NULLは、データがない、不明である、または適切でないことを示します。

デモnulls.Rを理解するには、次の手順に従ってください。

1. このデモでは、データ・フレームairqualityを使用します。データ・セットがデータ・フレームであり、そのデータ・フレームの数行を調べていることを確認します。

R> class(airquality)
[1] "data.frame"
R> head(airquality)
Ozone Solar.R Wind Temp Month Day
1    41     190  7.4   67     5   1
2    36     118  8.0   72     5   2
3    12     149 12.6   74     5   3
4    18     313 11.5   62     5   4
5    NA      NA 14.3   56     5   5
6    28      NA 14.9   66     5   6

2. airqualityをAIRQUALITYとしてデータベースにロードします。

ore.drop(table = "AIRQUALITY")
ore.create(airquality, table = "AIRQUALITY")

ore.ls()を使用して、表が作成されたことを確認します。必要であれば、class(AIRQUALITY)を使用して、AIRQUALITYが、データベースに格納されている表であり、R側のメタデータのみが含まれていることを確認します。

3. RによってNAがどのように処理されるのかを確認します。ozone < 30がTRUEである、すべての観測データを返します。

R> nrow(airquality[airquality$Ozone < 30,])[1] 92

これを、NAを明示的に除外したときの結果と比較します。

R> nrow(airquality[airquality$Ozone < 30 & !is.na(airquality$Ozone),])
[1] 55

4. SQL表のデフォルトの動作は、出力でNULLを除外することです。

nrow(AIRQUALITY[AIRQUALITY$OZONE < 30,])
[1] 55

NULLを、RでのNAの処理と同じように処理するには、その動作を明示的に要求します。

options(ore.na.extract = TRUE)
nrow(AIRQUALITY[AIRQUALITY$OZONE < 30,])
[1] 92

Oracle R Enterpriseのデモ

これらのスクリプトは、OREパッケージにデモとして追加されています。

Oracle R Enterpriseに含まれるすべてのデモを表示するには、次のように入力します。

R> demo(package = "ORE")

これらのスクリプトの1つを実行するには、demoファンクション・コールにそのデモの名前を指定します。たとえば、aggregate.Rを実行するには、次のように入力します。

R> demo("aggregate", package = "ORE")

Oracle R Enterpriseに同梱されているデモは、次のとおりです。

aggregate      Aggregation
analysis       Basic analysis & data processing operations
basic          Basic connectivity to database
binning        Binning logic
columnfns      Column functions
cor            Correlation matrix
crosstab       Frequency cross tabulations
datastore      DataStore operations
datetime       Date/Time operations
derived        Handling of derived columns
distributions  Distribution, density, and quantile functions
do_eval        Embedded R processing
freqanalysis   Frequency cross tabulations
graphics       Demonstrates visual analysis
group_apply    Embedded R processing by group
hypothesis     Hyphothesis testing functions
matrix         Matrix related operations
nulls          Handling of NULL in SQL vs. NA in R
odm_ai         Oracle Data Mining: attribute importance
odm_dt         Oracle Data Mining: decision trees
odm_glm        Oracle Data Mining: generalized linear models
odm_kmeans     Oracle Data Mining: enhanced k-means clustering
odm_nb         Oracle Data Mining: naive Bayes classification
odm_svm        Oracle Data Mining: support vector machines
push_pull      RDBMS <-> R data transfer
rank           Attributed-based ranking of observations
reg            Ordinary least squares linear regression
row_apply      Embedded R processing by row chunks
sampling       Random row sampling and partitioning of an ore.frame
sql_like       Mapping of R to SQL commands
stepwise       Stepwise OLS linear regression
summary        Summary functionality
table_apply    Embedded R processing of entire table

4 Oracle R Enterpriseの統計関数

この章では、最もよく使用される基本的な統計プロシージャを実行するOracle R Enterpriseの関数について説明します。これらの関数は、市販の製品からOracle R Enterpriseに切り替えるユーザーの助けとなるように設計されています。

Oracle R Enterpriseは、次の一連の関数を提供します。

- ore.corr

- ore.crosstab

- ore.extend

- ore.freq

- ore.rank

- ore.sort

- ore.summary

- ore.univariate

また、「Oracle R EnterpriseのRモデルのバージョン」に示すore.lm()、ore.stepwise()およびore.neural()も重要です。

これらの関数の使用法は、例で示します。大部分の例では、「例のデータ」に示す同じデータが使用されています。

例のデータ

ほとんどの例では、表NARROWを使用します。

NARROWは、次のように9つの列を持つore.frameです。

R> class(NARROW)
[1] "ore.frame"
attr(,"package")
[1] "OREbase"
R> names(NARROW)
[1] "ID"             "GENDER"         "AGE"            "MARITAL_STATUS"
[5] "COUNTRY"        "EDUCATION"      "OCCUPATION"     "YRS_RESIDENCE"
[9] "CLASS"

一部の列のみが数値です。

ore.corr

ore.corrには次の特徴があります。

- ore.frameの複数の数値列にわたる相関分析を実行します。

- 制御列との部分相関をサポートします。

- 相関の前の集計を可能にします。

- 結果の後処理およびRコード・フローへの統合を可能にします。

ore.corrの出力は、R cor()関数の出力に適合させることができます。これにより、ore.corrの出力を、R関数またはグラフィックで後処理ができます。

構文および出力については「ore.corrのパラメータ」を、例については「ore.corrの例」を参照してください。

ore.corrのパラメータ

ore.corrには、次のパラメータがあります。

- data: ore.frameとして相関係数を計算する対象となるデータ。

- var: 相関マトリクスを構築するdataの数値列

- group.by: 計算する相関マトリクスを示します。ore.corrは、group.by列の一意の値と同じ数の相関マトリクスを計算します。デフォルト値はNULLです

- weight: var列の倍数因子を提供する数値を持つdataの列。デフォルト値はNULLです。

- partial: 部分相関の制御変数として使用するdataの列。デフォルト値はNULLです。

- stats: 相関の計算方法。pearson(デフォルト)、spearman、kendallのうちの1つです

ore.corrは、group.byが使用されている場合を除く、すべての場合に出力としてore.frameを返します。group.byが使用されている場合は、Oracle R Enterprise listオブジェクトを返します。

ore.corrの例

次の例では、ore.corrの使用方法を示します。

- 基本的な相関計算

- 部分相関

- いくつかの相関マトリクスの作成

- 相関の視覚化

これらの例では、NARROWデータ・セットを使用します。詳細は、「例のデータ」を参照してください。

基本的な相関計算

ore.corrを使用する前に、数値以外のすべての値を投影しておく必要があります。

R> names(NARROW)
[1] "ID"             "GENDER"     "AGE"    "MARITAL_STATUS"
"COUNTRY"        "EDUCATION"      "OCCUPATION"
[8] "YRS_RESIDENCE"  "CLASS"          "AGEBINS"
R> NARROW=NARROW[,c(3,8,9)]

これで、次のいくつかの方法で、相関を計算します。

R> x=ore.corr(NARROW,var='AGE,YRS_RESIDENCE,CLASS')
#Calculate using Spearman
R> x=ore.corr(NARROW,var='AGE,YRS_RESIDENCE,CLASS', stats='spearman')
# Calculate using Kendall
R> x=ore.corr(NARROW,var='AGE,YRS_RESIDENCE,CLASS', stats='kendall')

部分相関

「基本的な相関計算」で作成した数値以外の値が含まれたNARROWのバージョンを使用します。

Spearmanの方法を使用した部分相関の計算:

R> x=ore.corr(NARROW,var='AGE,YRS_RESIDENCE,CLASS', stats='spearman', partial='GENDER')

いくつかの相関マトリクスの作成

「基本的な相関計算」で作成した数値以外の値が含まれたNARROWのバージョンを使用します。

いくつかの相関マトリクスを作成し、その出力をRの出力と互換性を持つように変換します。

x <- ore.corr(IRIS, var = "Sepal.Length, Sepal.Width, Petal.Length", partial = "Petal.Width", group.by = "Species")
R> class(x)
[1] "list"

相関の視覚化

いくつかのマトリクスを計算する場合、Rパッケージを使用してそれらを視覚化できます。

ore.crosstab

クロス集計は、値からなる2つの表の間の相互依存関係を見つける統計手法です。

ore.crosstabは、ore.frameのクロス列分析を可能にします。この関数は、R table()関数の高性能なバリアントです。

ore.crosstabは、ore.freqを使用して頻度分析を実行する前に、実行する必要があります。

クロス集計は、ore.extendで説明するように様々な合計によって拡張できます。

ore.crosstabは、Rで記述されています。この関数は、データベース・サーバーで実行されるSQLにマップされています。

構文および出力については「ore.crosstabのパラメータ」を、例については「ore.crosstabの例」を参照してください。

ore.extendを使用して、クロス集計を拡張できます。

ore.crosstabのパラメータ

ore.crosstabには、次のパラメータがあります。

- expr: クロス集計定義

[COLUMN_SPEC] ~ COLUMN_SPEC [*<WEIGHTING COLUMN>] [/<GROUPING COLUMN>]
[^<STRATIFICATION COLUMN>] [|ORDER_SPECIFICATION]
COLUMN_SPEC is <column-name>[+COLUMN_SET][+COLUMN_RANGE]
COLUMN_SET is <column_name>[+COLUMN_SET]
COLUMN_RANGE is <FROM COLUMN>-<TO COLUMN>

説明:

COLUMN_SPEC is <column>[+COLUMN_SET][+COLUMN_RANGE]
COLUMN_SET is <column>[+COLUMN_SET]
COLUMN_RANGE is (<from column>-<to column>)
ORDER_SPECIFICATION is one of [-]NAME, [-]DATA, [-]FREQ, or INTERNAL

階層化列は、データのクラスタ化、つまりグループ化に使用されます。使用した場合、その値は、結果のクロス集計表のORE$STRATA列に格納されます。

- data: クロス集計するデータを含むore.frame

- grouping column: グループ化列の一意の値と同じ数のクロス集計を計算します。デフォルト値はNULLです。

- order: 出力データのオプションのソートを定義します。集計列でソートするには[-]NAMEを、表における頻度カウントでソートするには[-]FREQを指定します。順序を指定しないと、最も効率的になります。オプションの「-」によって、順序が逆転します。

- weights: 対応する行の頻度を示すdataの列。デフォルト値はNULLです。

- partial: 部分相関の制御変数として使用するdataの列。デフォルト値はNULLです。

ore.crosstabは、複数の表が作成されている場合を除く、すべての場合に出力としてore.frameを返します。複数の表が作成されている場合、ore.crosstabは、Oracle R Enterprise listオブジェクトを返します。

ore.crosstabの例

次の例は、ore.crosstabの使用法を示しています。

- 単一列頻度表

- 2つの列の分析

- 行の重み付け

- クロス集計表の行の順序付け

- 3つ以上の列の分析

- 列の範囲の指定

- 別の列の値ごとに1つのクロス表の作成

- 階層化によるクロス集計の拡張

- カスタム・ビニングとその後のクロス集計

- ore.extend

これらの例では、NARROWデータ・セットを使用します。詳細は、「例のデータ」を参照してください。

単一列頻度表

最も基本的な使用例は、単一列頻度表の作成です。次のコマンドは、GENDERによってグループ化されたNARROWにフィルタを適用します。

R> ct = ore.crosstab(~AGE, data=NARROW)
R> ct

2つの列の分析

次のコマンドは、GENDERによってAGEを、CLASSによってAGEを分析します。

R> ct = ore.crosstab(AGE~GENDER+CLASS, data=NARROW)
R> head(ct)

行の重み付け

行を重み付けするには、別の列に基づいたカウントを含めます。この例では、YRS_RESIDENCEの値を使用してAGEおよびGENDERの値に重み付けします。

R> ct = ore.crosstab(AGE~GENDER*YRS_RESIDENCE, data=NARROW)
R> head(ct)

クロス集計表の行の順序付け

次のようにいくつかの方法があります。

- 分析対象の列によるデフォルトまたはNAMEの順序付け

- 頻度カウントによるFREQの順序付け

- -NAMEまたは-FREQは、順序を逆転します

- INTERNALは、順序付けをバイパスします

次に2つの例を示します。

R> ct = ore.crosstab(AGE~GENDER|FREQ, data=NARROW)
R> head(ct)
AGE GENDER ORE$FREQ ORE$STRATA ORE$GROUP

R> ct = ore.crosstab(AGE~GENDER|-FREQ, data=NARROW)
R> head(ct)

3つ以上の列の分析

これは、次のようにSQL GROUPING SETS句の実行に似ています。

R> ct = ore.crosstab(AGE+COUNTRY~GENDER, NARROW)

列の範囲の指定

この例に示すように、すべての列の名前を入力するかわりに、列の範囲を指定できます。

R> names(NARROW)
[1] "ID"             "GENDER"         "AGE"            "MARITAL_STATUS"
[5] "COUNTRY"        "EDUCATION"      "OCCUPATION"     "YRS_RESIDENCE"
[9] "CLASS"

AGE、MARITAL_STATUSおよびCOUNTRYは連続している列であるため、単純に次のように使用できます。

ct = ore.crosstab(AGE-COUNTRY~GENDER, NARROW)

同等のバージョンは次のようになります

ct = ore.crosstab(AGE+MARITAL_STATUS+COUNTRY~GENDER, NARROW)

別の列の値ごとに1つのクロス表の作成

このコマンドは、別の列COUNTRYの一意の値ごとに1つのクロス表(AGE, GENDER)を作成します。

R> ct=ore.crosstab(~AGE/COUNTRY, data=NARROW)
R> head(ct)

これを複数の列に拡張できます。たとえば、このコマンドは、(COUNTRY, GENDER)の一意の組合せごとに1つの(AGE, EDUCATION)表を作成します。

R> ct = ore.crosstab(AGE~EDUCATION/COUNTRY+GENDER, data=NARROW)

階層化によるクロス集計の拡張

前述のクロス集計は、すべて、階層化によって拡張できます。次に例を示します。

R> ct = ore.crosstab(AGE~GENDER^CLASS, data=NARROW)
R> head(ct)

この例のコマンドは、次のものと同じです。

ct = ore.crosstab(AGE~GENDER, NARROW, strata="CLASS")

カスタム・ビニングとその後のクロス集計

最初にAGEをビニングし、次にGENDERおよびそのビンのクロス集計を計算します。

R> NARROW$AGEBINS=ifelse(NARROW$AGE<20, 1, ifelse(NARROW$AGE<30,2, ifelse(NARROW$AGE<40,3,4)))
R> ore.crosstab(GENDER~AGEBINS, NARROW)

ore.extend

ore.crosstabを使用して作成されたクロス集計は、次の3つの統計でさらに拡張できます。

- 行および列の合計

crosstab = ore.extend.sum(crosstab)

- 表のセルごとの累積合計

crosstab = ore.extend.cumsum(crosstab)

- 表全体の合計

crosstab = ore.extend.total(crosstab)

次の例は、ore.extendを示しています。

R> ct <- ore.crosstab(GENDER~CLASS, NARROW)
R> ore.freq(ct)
METHOD    FREQ DF PVALUE              DESCR GROUP
1 PCHISQ 72.4241  1      0 Pearson Chi-Square     1

ore.freq

ore.crosstabは、ore.freqを使用して頻度分析を実行する前に、実行する必要があります。

ore.freqは、ore.crosstabの出力を分析し、ore.crosstabの結果に関連する手法を自動的に判別します。手法は、クロス表の種類に応じて異なります。

- 1方向のクロス表
同等の比率または指定したNULL比率に対する適合度検定、信頼度の限度と同等性のテスト。

- 2方向のクロス表

- クロス集計における列の間の関係を記述する様々な統計

- カイ二乗検定、Cochran-Mantel-Haenzsel統計、属性相関、関連の強固性、リスクの相違、オッズ比および2x2表の相対リスク、トレンドの検定

- N方向のクロス表

- N 2方向のクロス表

- 階層内または階層にわたる統計

ore.freqは、使用可能な場合はOracle Database SQL関数を使用します

構文および出力については「ore.freqのパラメータ」を、例については「ore.freqの例」を参照してください。

ore.freqのパラメータ

ore.freqでは、次のパラメータがサポートされています。

- crosstab: ore.crosstab()から出力されるore.frameオブジェクト

- stats: 必要な統計のリスト。次の統計がサポートされています。

- カイ二乗: AJCHI、LRCHI、MHCHI、PCHISQ

- カッパ: KAPPA、WTKAP

- lambda: LAMCR、LAMRC、LAMDAS

- 相関: KENTB、PCORR、SCORR

- スチュアートのタウ、ソマーズ: D|C、STUTC、SMDCR、SMDRC

- フィッシャー、コクランのQ、FISHER、COCHQ

- オッズ比: OR、MHOR、LGOR

- 相対リスク: RR、MHRR、ALRR

- その他: MCNEM、PHI、CRAMV、CONTGY、TSYM、TREND、GAMMA

デフォルト値は「NULL」です。

- Params: statsで指定される統計関数固有の制御パラメータ:

- SCORE: TABLE|RANK|RIDIT|MODRIDIT

- ALPHA: 数値

- WEIGHTS: 数値

デフォルト値は「NULL」です。

- skip.missing: クロス表内の値が欠落しているセルをスキップします(TRUEまたはFALSE)。デフォルト値はFALSEです。

- skip.failed: クロス表に対して必要な統計検定が、その表に適用不可であるために失敗した場合、ただちに返されます(TRUEまたはFALSE)。デフォルト値はFALSEです。

ore.freqは、すべての場合にore.frameを返します。

ore.freqの例

これらの例では、NARROWデータ・セットを使用します。詳細は、「例のデータ」を参照してください。

ore.freqを使用する前に、クロス集計を計算する必要があります。

次に例を示します。

R> ct = ore.crosstab(~GENDER, NARROW)
R> ore.freq(ct)
METHOD     FREQ DF PVALUE      DESCR GROUP
0   PCHI 161.9377  1      0 Chi-Square     1

ore.rank

ore.rankは、ore.frameの数値列の値の分布を分析します。

ore.rankは、次のような便利な機能をサポートします。

- グループ内のランキング

- ランク・タイルに基づいた、グループへの行のパーティショニング

- 累積パーセンテージおよびパーセンタイルの計算

- 同順位の処理

- ランクからの標準スコアの計算

ore.rank構文は、対応するSQL問合せより単純です。

構文については「ore.rankのパラメータ」を、例については「ore.rankの例」を参照してください。

ore.rankのパラメータ

ore.rankでは、次のパラメータがサポートされています。

- data: ランキングするデータを含むore.frame

- var: ランキングするdata内の数値列

- desc: desc=TRUEである場合、降順にランキングします。それ以外の場合は、昇順でランキングします。(デフォルトは、昇順のランキングです。)

- groups: ランクに基づいて行を#グループにパーティショニングします。パーセンタイルの場合はgroups=100、十分位数の場合はgroups=10、四分位数の場合はgroups=4です。
デフォルト値は「NULL」です。

- group.by: group.by列で識別される各グループを別々にランキングします。
デフォルト値は「NULL」です。

- ties: 同順位の処理方法を指定します。tiesを処理する方法は、同順位の値に、対応するランクのうちの最大、最小または中間のものを割り当てることです。
デフォルト値は「NULL」です。

- fraction: 列値のランクを欠落していない列値の数で除算したもの。デフォルト値はFALSEです。
nplus1とともに使用して、累積分布関数を見積ります

- nplus1: fractionに1を加算したもの。つまり、欠落していない列値の数で列値のランクを除算したものを1に加算したもの。デフォルト値はFALSEです。
fractionとともに使用して、累積分布関数を見積ります。

- percent: fractionをパーセント値、つまりfraction * 100に変換したもの。

ore.rankは、すべての場合にore.frameを返します。

次のRスコアリング・メソッドをore.rankとともに使用できます。

- ランクから指数スコアを計算するには、savageを使用します。

- 正規スコアを計算するには、blom、tukeyまたはvw(ファン・デル・ヴェルデン)の1つを使用します。

ore.rankの例

次の例は、ore.rankの使用方法を示しています。

- 2つの列のランキング

- 同順位の処理

- グループ内のランキング

- 十分位数へのパーティショニング

- 累積分布関数の見積り

これらの例では、NARROWデータ・セットを使用します。詳細は、「例のデータ」を参照してください。

2つの列のランキング

この例では、2つの列AGEとCLASSをランキングし、派生列としてその結果をレポートします。値は、デフォルトの順序(昇順)でランキングされます。

R> x <- ore.rank(data=NARROW, var='AGE=RankOfAge, CLASS=RankOfClass')

同順位の処理

この例では、2つの列AGEとCLASSをランキングします。同順位がある場合、同順位のすべての値に最小値が割り当てられます。

R> x <- ore.rank(data=NARROW, var='AGE=RankOfAge, CLASS=RankOfClass', ties='low')

グループ内のランキング

この例では、2つの列AGEとCLASSをランキングし、COUNTRYに従ってその値をランキングします。

R> x <- ore.rank(data=NARROW, var='AGE=RankOfAge, CLASS=RankOfClass', group.by='COUNTRY')

十分位数へのパーティショニング

この例では、2つの列AGEとCLASSをランキングし、その列を十分位数(10パーティション)にパーティショニングします。

R> x <- ore.rank(data=NARROW, var='AGE=RankOfAge, CLASS=RankOfClass',groups=10)

列を異なる数のパーティションにパーティショニングするには、groupsの値を変更します。たとえば、groups=4では、四分位数にパーティショニングされます。

累積分布関数の見積り

この例では、2つの列AGEとCLASSをランキングし、両方の列の累積分布関数を見積ります。

R> x <- ore.rank(data=NARROW, var='AGE=RankOfAge, CLASS=RankOfClass',nplus1=TRUE)

ランクのスコアリング

この例では、2つの列AGEとCLASSをランキングし、2つの異なる方法でそのランクをスコアリングします。最初のコマンドが、列をパーセンタイル(100グループ)にパーティショニングします。savageが指数スコアを計算し、blomが正規スコアを計算します。

R> x <- ore.rank(data=NARROW, var='AGE=RankOfAge,            CLASS=RankOfClass',score='savage', groups=100, group.by='COUNTRY')
R> x <- ore.rank(data=NARROW, var='AGE=RankOfAge, CLASS=RankOfClass',score='blom')

ore.sort

ore.sortは、by句で指定した1つ以上の列に沿ったデータ・フレームの柔軟なソートを可能にします。

ore.sortは、他のデータ事前処理関数とともに使用できます。ソートの結果を、Rの視覚化への入力に使用できます。

ore.sortのソートは、Oracle Database内で実行されます。ore.sortでは、データベースnls.sortオプションがサポートされます。

構文については「ore.sortのパラメータ」を、例については「ore.sortの例」を参照してください。

ore.sortのパラメータ

ore.sortでは、次のパラメータがサポートされています。

- data: ソートするデータを含むore.frame。必須。

- by: data内でデータをソートする基準となる列。必須。

- stable: 相対順序を、ソートされたグループ内で保持します(TRUEまたはFALSE)。デフォルト値はFALSEです。

- reverse: 文字変数の照合順序を逆転します(TRUEまたはFALSE)。デフォルト値はFALSEです。

- unique.keys: ソート対象の列内の重複する値を持つ観測データを削除します(TRUEまたはFALSE)。デフォルト値はFALSEです。

- unique.data: すべての列内の重複する値を持つ観測データを削除します(TRUEまたはFALSE)。デフォルト値はFALSEです。

dataおよびbyは必須パラメータです。その他のパラメータはすべてオプションです。

ore.sortは、ore.frameを返します。

ore.sortの例

次の例は、ore.sortの使用方法を示しています。

- 降順での列のソート

- 列ごとに異なる順序でソート

- ソートして一意の値ごとに1つの行を返す

- 重複列の削除

- 重複列を削除し、一意の値ごとに1つの行を返す

- 出力内での相対順序の保持

これらの例の大部分では、NARROWデータ・セットを使用します。詳細は、「例のデータ」を参照してください。また、ONTIME_Sを使用した例もあります。

降順での列のソート

列AGEおよびGENDERを降順でソートします。

R> x=ore.sort(data=NARROW, by='AGE,GENDER', reverse=TRUE)

列ごとに異なる順序でソート

AGEを降順で、GENDERを昇順でソートします。

R> x=ore.sort(data=NARROW,by='-AGE,GENDER')

ソートして一意の値ごとに1つの行を返す

AGEを基準にソートし、AGEの一意の値ごとに1つの行を保持します。

R> x=ore.sort(data=NARROW,by='AGE', unique.key=TRUE)

重複列の削除

AGEを基準にソートし、重複する行を削除します。

R> x=ore.sort(data=NARROW,by='AGE', unique.data=TRUE)

重複列を削除し、一意の値ごとに1つの行を返す

AGEを基準にソートします。また、重複する行を削除し、AGEの一意の値ごとに1つの行を返します。

R> x=ore.sort(data=NARROW,by='AGE', unique.data=TRUE, unique.key = TRUE)

出力内での相対順序の保持

ソートされた出力内で相対順序を保持します。

R> x=ore.sort(data=NARROW,by='AGE', stable=TRUE)

ONTIME_Sを使用した例

次の例では、Oracle R EnterpriseをインストールしたときにインストールされているONTIME_Sエアラインのデータを使用します。

- ONTIME_Sをエアライン名を基準に降順で、出発の遅延を昇順でソートします。

R> sortedOnTime1 <- ore.sort(data=ONTIME_S, by='-UNIQUECARRIER,DEPDELAY')

- ONTIME_Sをエアライン名および出発の遅延でソートし、各組合せの1つを選択します(つまり、一意のキーを返します)。

R> sortedOnTime1 <- ore.sort(data=ONTIME_S, by='-UNIQUECARRIER,DEPDELAY', unique.key=TRUE)

ore.summary

ore.summaryは、記述統計を計算し、柔軟な行の集計とともに、ore.frame内の列の広範な分析をサポートします。

ore.summaryでは、次の統計がサポートされています。

- 平均、最小、最大、モード、欠落値の数、合計、加重和

- 二乗の補正および未補正合計、値の範囲、stddev、stderr、分散

- 母平均が0であるという仮定をテストするためのt検定

- 尖度、歪度、変動係数

- 分位: p1、p5、p10、p25、p50、p75、p90、p95、p99、qrange

- 平均の片側および両側信頼限界: clm、rclm、lclm

- 極値のタグ付け

ore.summaryは、同じ結果について、SQL問合せと比べて単純な構文を提供します。

構文については「ore.summaryのパラメータ」を、例については「ore.summaryの例」を参照してください。

ore.summaryのパラメータ

ore.summaryでは、次のパラメータがサポートされています。

- data: ore.frameとして集計するデータ

- class: 集計するdataの列(つまり、SQL GROUP BY)。デフォルト値はNULLです

- var: 統計関数を適用するdataの列(SQL SELECTリスト)

- stats: varの列に適用する統計関数のリスト
var列に対して要求できるmean、min、max、cnt、n、nmiss、css、uss、cv、sum、sumwgt、range、stddev、stderr、var、t、kurt、skew、p1、p5、p10、p25、p50、p75、p90、p95、p99、qrange、lclm、rclm、clm、mode

デフォルト値はn、mean、min、maxです。

- weight: var列の乗数的因子を提供する数値を持つdataの列

- maxid、minid: グループごとに、dataの他の列の最大または最小値をリストします。デフォルト値はNULLです

- ways: 出力をclass変数の特定のグループ化レベルのみに制限します。デフォルト値はNULLです

- group.by: サマリー結果を階層化する対象のdataの列。デフォルト値はNULLです

- order: 出力データのオプションのソートを定義します。集計列でソートするには[-]NAMEを、表における頻度カウントでソートするには[-]FREQを指定します。順序を指定しないと、最も効率的になります。オプションの「-」によって、順序が逆転します。

- _FREQ: 頻度。1つのグループ内の観測データの数

- _TYPE: グループ化を識別します。バイナリ・コード・ベースです

- _LEVEL: グループ化で使用される変数の数を識別します

ore.summaryは、group.by句が使用されている場合を除く、すべての場合に出力としてore.frameを返します。group.by句が使用されている場合、ore.summaryは、階層ごとに1フレームずつore.frameオブジェクトのリストを返します。

ore.summaryの例

次の例は、ore.summaryの使用法を示しています。

- デフォルトの統計の計算

- 歪度およびt検定

- 重み付け合計

- 2つの別々のGroup By列

これらの例では、NARROWデータ・セットを使用します。詳細は、「例のデータ」を参照してください。

デフォルトの統計の計算

この例では、列AGEおよびCLASSの平均、最小、最大を計算し、GENDERをロールアップ(集計)します。

R> ore.summary(NARROW, class='GENDER', var ='AGE,CLASS', order='freq')

歪度およびt検定

この例では、列AとしてAGEの歪度と、列BとしてCLASSのt検定を計算します。

R> ore.summary(NARROW, class='GENDER', var='AGE,CLASS',  stats='skew(AGE)=A, probt(CLASS)=B')

重み付け合計

この例では、YRS_RESIDENCEを重みとしてGENDERによって集計されたAGEの重み付けされた合計を計算します。つまりsum(var*weight)を計算します。

R> ore.summary(NARROW, class='GENDER', var='AGE', stat='sum=X', weight='YRS_RESIDENCE')

2つの別々のGroup By列

GENDERおよびMARITAL_STATUSでCLASSをグループ化します。

R> ore.summary(NARROW, class='GENDER, MARITAL_STATUS', var='CLASS', ways=1)

すべての適用可能なGroup By

この例では、GENDERおよびMARITAL_STATUSによってすべての適用可能な方法でCLASSをグループ化します。

R> ore.summary(NARROW, class='GENDER, MARITAL_STATUS', var='CLASS', ways='nway')

ore.univariate

ore.univariateは、ore.frameの数値変数の分布分析を提供します。

ore.univariateは、次の統計を提供します。

- ore.summaryによってレポートされるすべての統計

- 符号順位検定、スチューデントのt-検定

- 極値のレポート

構文については「ore.univariateのパラメータ」を、例については「ore.univariateの例」を参照してください。

ore.univariateのパラメータ

ore.univariateでは、次のパラメータがサポートされています。

- data: ore.frameとして集計するデータ

- var: 分析するdata内の数値列

- weight: var列の倍数因子を提供する数値を持つdataの列。デフォルト値はNULLです

- stats: 計算および表示する統計のサブセットの指定(オプション)

- moments: n、sumwgt、mean、sum、stddev、var、skew、kurt.、uss.css.cv、stderr

- measures: mean、stddev、median、var、mode、range、iqr

- quantiles: p100、p99、p95、p90、p75、p50、p25、p10、p5、p1、p0

- location: studentt、studentp、signt、signp、srankt、srankp

- normality

- loccount: loc<、loc>、loc!

- extremes

デフォルト値は「NULL」です。

ore.univariateは、すべての場合に出力としてore.frameを返します。

ore.univariateの例

次の例は、ore.univariateの使用法を示しています。

- デフォルト単変量統計

- 位置統計

- 完全な分位統計

これらの例では、NARROWデータ・セットを使用します。詳細は、「例のデータ」を参照してください。

デフォルト単変量統計

この例では、AGE、YRS_RESIDENCEおよびCLASSのデフォルトの単変量統計を計算します。

R> ore.univariate(NARROW, var="AGE,YRS_RESIDENCE,CLASS")

位置統計

この例では、YRS_RESIDENCEの位置統計を計算します。

R> ore.univariate(NARROW, var="YRS_RESIDENCE",stats="location")

完全な分位統計

この例では、AGEおよびYRS_RESIDENCEの完全な分位統計を計算します。

R> ore.univariate(NARROW, var="AGE,YRS_RESIDENCE",stats="quantiles")

5 Rモデルでの予測

予測モデルにより過去の動作に基づいて将来の動作を予測できます。モデルを構築した後は、そのモデルを使用して新しいデータのスコアリング、すなわち予測を行います。

Rにより様々なモデルを構築できます。Rモデルを使用して新しい結果の予測(データのスコアリング)をするときは、そのデータはRフレームにある必要があります。Oracle R Enterpriseに含まれているore.predictパッケージにより、ore.frame内のデータ、すなわちデータベースに格納されているデータをRモデルを使用してスコアリングできます。

ore.predict()では、ore.frameオブジェクトを使用した予測のみが可能です。モデルの再構築はできません。

データベース表内のデータを使用してモデルを構築する必要がある場合は、「Oracle R Enterpriseでのデータベース内予測モデル」で説明するように、OREdmパッケージを使用してOracle Data Miningモデルを構築することを検討してください。

詳細はore.predict()に関するRのヘルプを参照してください。

Rモデルのore.predict

ore.predict()により次のRモデルのスコアリング(予測)ができます。

- lm(): 線形回帰モデル

- glm(): 一般線形モデル

- hclust(): 階層的クラスタリング・モデル

- kmeans(): (k-Meansクラスタリング)

- negbin() (glm.nb): 負2項一般2項モデル

- nnet::multinom: 多項式対数線形モデル

- nnet::nnet: ニューラル・ネットワーク・モデル

- rpart::rpart: 再帰分割モデルと回帰ツリーモデル

次に例を示します。

このコードはirisデータ上に線形回帰モデルirisModelを構築(lmを使用して作成)してIRIS (データベースにirisをプッシュして作成される表)をスコアリングします。

R> irisModel <- lm(Sepal.Length ~ ., data = iris)
R> IRIS <- ore.push(iris)
R> IRISpred <- ore.predict(irisModel, IRIS, se.fit = TRUE, interval = "prediction")
R> IRIS <- cbind(IRIS, IRISpred)
R> head(IRIS)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species     PRED    SE.PRED LOWER.PRED UPPER.PRED
1          5.1         3.5          1.4         0.2  setosa 5.004788 0.04479188   4.391895   5.617681
2          4.9         3.0          1.4         0.2  setosa 4.756844 0.05514933   4.140660   5.373027
3          4.7         3.2          1.3         0.2  setosa 4.773097 0.04690495   4.159587   5.386607
4          4.6         3.1          1.5         0.2  setosa 4.889357 0.05135928   4.274454   5.504259
5          5.0         3.6          1.4         0.2  setosa 5.054377 0.04736842   4.440727   5.668026
6          5.4         3.9          1.7         0.4  setosa 5.388886 0.05592364   4.772430   6.005342

6 Oracle R EnterpriseのRモデルのバージョン

Oracle R Enterpriseには、データベース表内のデータを使用してRモデルを作成する、いくつかの関数が含まれています。

現時点で使用できる関数は、次のとおりです。

- ore.lm()

- ore.stepwise()

- ore.neural()

この方法には、「ore.lm()およびore.stepwise()のメリット」で説明するように、いくつかのメリットがあります。

ore.lm()

ore.lm()は、ore.frameオブジェクトで表されたデータに対して最小二乗回帰を実行します。このモデルは、OREstatsパッケージからmodel.matrixメソッドを使用してモデル行列を作成します。モデル行列と応答変数はSQLで表されて、データベース内アルゴリズムに渡されます。データベース内アルゴリズムは、列のピボット演算によるブロック更新QR分解を伴うアルゴリズムを使用してモデルを推定します。データベース内アルゴリズムによって係数が推定されると、モデル水準統計の推定のためにデータの2番目の受渡しが行われます。最後に、モデルがore.lmオブジェクトとして返されます。

「ore.lm()およびore.stepwise()のメリット」で説明するように、ore.lm()およびore.stepwise()の実装にはいくつかのメリットがあります。

ore.lmは、一連の共線的な項に対する係数値を推定しません。

モデルが作成されたら、summaryを使用してモデルのサマリーを作成します。

例は、「線形回帰の例」を参照してください。

ore.lm()およびore.stepwise()のメリット

ore.lm()およびore.stepwise()を実装することには、次のような重要なメリットがあります。

- これらのアルゴリズムはいずれも、Out-of-core QR Factorizationを使用した正確な解決方法を提供します。QR Factorizationは、行列を直交行列と三角行列に分解します。
多くの場合、QRベースの推定は代替方法よりもかなり正確です。

QRは、困難とされるランクのない適合モデルに使用されるアルゴリズムです。

- マシンのメモリーに収まらないデータ、つまりOut-of-coreデータを処理できます。QRは行列を、メモリーに収める行列とディスクに保存する行列の、2つに分解します。
ore.lm()およびore.stepwise()は、10億行を超えるデータ・セットを解決できます。

- ore.lm()およびore.stepwise()によって、変数増加法(フォワード)、変数減少法(バックワード)および変数増減法(ステップワイズ)によるモデル選択の手法を高速に実装できます。

ore.neuralにも、同様のメリットがあります。

線形回帰の例

この例では、表にlongleyをプッシュして回帰モデルを構築します。

# longley consiste of employment statistics:
head(longley)
GNP.deflator     GNP Unemployed Armed.Forces Population Year Employed
1947         83.0 234.289      235.6        159.0    107.608 1947   60.323
1948         88.5 259.426      232.5        145.6    108.632 1948   61.122
1949         88.2 258.054      368.2        161.6    109.773 1949   60.171
1950         89.5 284.599      335.1        165.0    110.929 1950   61.187
1951         96.2 328.975      209.9        309.9    112.075 1951   63.221
1952         98.1 346.999      193.2        359.4    113.270 1952   63.639
#Push longley to a table
LONGLEY <- ore.push(longley)
# Fit full model
oreFit1 <- ore.lm(Employed ~ ., data = LONGLEY)
summary(oreFit1)

詳細は、help(ore.lm)で起動される、ore.lmに関するRのヘルプを参照してください。

ore.stepwise()

ore.stepwise()は、ore.frameオブジェクトで表されたデータに対してステップワイズ最小二乗回帰を実行します。このモデルは、OREstatsパッケージからmodel.matrixメソッドを使用してモデル行列を作成します。モデル行列と応答変数はSQLで表されて、データベース内アルゴリズムに渡されます。データベース内アルゴリズムは、列のピボット演算によるブロック更新QR分解を伴うアルゴリズムを使用してモデルを推定します。データベース内アルゴリズムによって係数が推定されると、モデル水準統計の推定のためにデータの2番目の受渡しが行われます。最後に、モデルがore.stepwiseオブジェクトとして返されます。

ore.stepwise()は、計算全体から共線的な項を除外します。

モデルが作成されたら、summaryを使用してモデルのサマリーを表示します。

例は、「ステップワイズ回帰の例」を参照してください。

ステップワイズ回帰の例

この例では、表にlongleyをプッシュしてステップワイズ・モデルを構築します。

LONGLEY <- ore.push(longley)

# Two stepwise alternatives
oreStep1 <-
ore.stepwise(Employed ~ .^2, data = LONGLEY, add.p = 0.1, drop.p = 0.1)
oreStep2 <-
step(ore.lm(Employed ~ 1, data = LONGLEY),
scope = terms(Employed ~ .^2, data = LONGLEY))

詳細は、help(ore.lm)で起動される、ore.lmに関するRのヘルプを参照してください。

ore.neural()

ニューラル・ネットワーク・モデルを使用すると、入力と出力との間の複雑な非リニアの関係を取得すること、つまりデータのパターンを見つけることができます。

ore.neural()は、ore.frameで単一層のフィードフォワード型ニューラル・ネットワークを構築します。

ore.neural()はBroyden–Fletcher–Goldfarb–Shanno (BFGS)メソッドを使用して、ニューラル・ネットワークに適合した結果として発生する、下層の制約なし非リニア最適化問題を解決します。

ore.neural()の出力は、タイプore.neuralのオブジェクトになります。

パラメータおよび出力の詳細は、ore.neural()に関するRのヘルプを参照してください。例は、「ニューラル・ネットワークの例」を参照してください。

ニューラル・ネットワークの例

この例では、hiddensize 1などのデフォルト値でニューラル・ネットワークを構築します。

longleyデータ・セットは、雇用に関する統計情報で構成されます。この例では、表にlongleyをプッシュします。longleyのサブセットを使用するモデルを作成し、次にlongleyの別のサブセットの結果を予測していることに注意してください。

trainData <- ore.push(longley[1:11, ])
testData <- ore.push(longley[12:16, ])

fit <- ore.neural('Employed ~ GNP + Population + Year', data = trainData)

ans <- predict(fit, newdata = testData)

7 Oracle R Enterpriseでのデータベース内予測モデル

Oracle Advanced Analyticsオプションは、Oracle Data MiningおよびOracle R Enterpriseの両方で構成されています。Oracle R Enterpriseは、Oracle Data Miningで利用可能な予測分析およびデータ・マイニング機能に、なじみのあるRインタフェースを提供します。これは、Oracle R Enterprise内のOREdmパッケージを通して公開されます。

データ・マイニングでは、高度な数学的アルゴリズムを使用してデータをセグメント化し、イベントが将来発生する確率を計算します。Oracle Data Miningでは、表、ビュー、スター・スキーマ、トランザクション・データおよび非構造化データのマイニングが可能です。

Oracle Data Miningおよびサポートされるアルゴリズムの詳細は、『Oracle Data Mining概要11gリリース2 (11.2)』(http://www.oracle.com/technetwork/database/options/advanced-analytics/odm/index.html)を参照してください。

サポートされるアルゴリズムおよびアルゴリズムの簡単な説明は、「OREdmモデル」を参照してください。

注意:
CRANパッケージRODMも多くのOracle Data Miningアルゴリズムをサポートします。RODMはOREdmとは異なります。

OREdmインタフェースは、対応する予測分析およびデータ・マイニング機能に、標準のRインタフェースを提供するように設計されています。

この項では、OREdmでサポートされているアルゴリズムの概要について説明します。特定のモデルの詳細は、特定のOREdmの機能に関するRのヘルプを参照してください。

モデルを構築するには、OREdmの要件を満たすビルド(トレーニング)・データが必要です。

Oracle Data Miningモデルは、OREdmモデルとは多少異なります(「OREdmモデルおよびOracle Data Miningモデル」を参照)。

このリリースで利用可能なモデルのリストおよび簡単な概要については、「OREdmモデル」を参照してください。

モデルを構築するためのOREdmの使用例は、各関数の説明に含まれています。たとえば、「属性評価の例」はAIモデルの構築方法を示します。

OREdmの要件

OREdmでは、モデルのトレーニング(構築)に使用するデータが、VARCHAR2、CHAR、NUMBERおよびFLOAT型の列のみを含む単一の表またはビューに存在している必要があります。

Oracle Data Miningに必要なすべての権限は、Oracle R Enterpriseのインストール中に自動的に付与されます。

Oracle Data Miningは、接続するデータベースで有効にしておく必要があります。

OREdmモデルおよびOracle Data Miningモデル

OREdm内では、Oracle Data Miningモデルに、生成した名前が付けられます。OREdm Rモデル・オブジェクトが存在している場合は、このモデル名を使用し、次のような他のインタフェースを通してOracle Data Miningモデルにアクセスできます。

- Oracle Data Miner

- SQLインタフェース(SQL*Plus、SQL Developerなど)
特に、このモデルはOracle Data MiningのSQL予測機能とともに使用できます。

Oracle Data Minerは次のような多くの方法で役立ちます。

- 利用可能なモデルのリストを表示する

- モデル・ビューアを使用してモデルの詳細を調べる

- 変換されたデータを適切にスコアリングする

注意:
Rの領域で実行される変換は、Oracle Data MinerまたはSQLスコアリングには引き継がれません。

同様に、SQLを使用して、モデルのリストを表示したり、モデルの詳細を調べたり、これらのモデルで変換されたデータを適切にスコアリングできます。

OREdmを使用して作成したモデルは、一時的なオブジェクトであり、通常、作成されたRセッションがクローズすると保持されません。一方、Data MinerまたはSQLを使用して作成したOracle Data Miningモデルは、明示的に削除されるまで存在します。

モデル・オブジェクトは、「データベース内でのRオブジェクトの保持および管理」で説明するように保存または保持できます。これにより、OREdmで生成されたモデル・オブジェクトは、Rセッションがクローズしても存在でき、ODMオブジェクトを所定の場所に保持できます。

OREdmモデルが存在する間、これをエクスポートおよびインポートでき、その後、Oracle R Enterprise Rオブジェクトの存在から切り離して使用できます。

OREdmモデル

OREdmは、次のOracle Data Miningモデルをサポートしています。

- 属性評価

- ディシジョン・ツリー

- 一般化線形モデル

- k-Means

- Naive Bayes

- サポート・ベクター・マシン

Oracle Data MiningおよびオープンソースのRは、異なる用語を使用します(「データ・マイニングの用語」を参照)。

なお、予測(スコアリング)、サマリー、サマリーの出力など、一般的な処理を実行する「オーバーロードされた関数」がいくつかあります。

データ・マイニングの用語

Oracle Data Miningと、統計モデルを作成するOracle R Enterprise OREdmパッケージは、多少異なる用語を使用します。最も重要な相違点を次に示します。

- Oracle R Enterpriseでは、モデルを適合しますが、Oracle Data Miningでは、モデルを構築またはトレーニングします。

- Oracle R Enterpriseでは、新しいデータを使用して予測しますが、Oracle Data Miningでは、新しいデータをスコアリングするか、または新しいデータにモデルを適用します。

- Oracle R Enterpriseは、APIコールの「式」で説明するように、式を使用しますが、Oracle Data Miningは式をサポートしません。

式

Rモデルの定義では、変数の関係を示す式が必要です。formulaクラスがR statsパッケージに含まれています。詳細は、?formulaに関するRのヘルプを参照してください。formulaは、適合させるモデルのシンボリックな記述を提供します。

[stats]{formula}の指定は、(response ~ terms)形式をとり、意味は次のとおりです。

- responseは、数値または文字に応答するベクトルです。

- termは一連の用語で、モデルに含める列名です。複数の用語は、列名の間に+を使用して指定します。

データのすべての列をモデル構築に使用する場合は、{response ~ .}を使用します。

関数を適用して応答したり、用語を適用して変換を認識できます。

列を除外するには、除外するそれぞれの列の名前の前に-を使用します。

このマニュアルおよびRのヘルプのモデル構築のすべての例に式の例が含まれています。Oracle Data Mining APIにはformulaに相当するものはありません。

オーバーロードされた関数

predict()、summary()およびprint()は、たとえば、「GLMの例」に示すように、すべてのOREdmアルゴリズム間で定義されます。

summary()は、生成されたディシジョン・ツリーの詳細など、作成されたモデルに関する詳細情報を返します。

属性評価

Oracle Data Miningは、最小記述長アルゴリズムを使用して属性評価を計算します。属性評価では、ターゲットの予測における重要度に従って属性がランク付けされます。

最小記述長(MDL)は、情報理論モデルの選択原理の1つです。これは、情報理論(情報の定量化の研究)および学習理論(経験的データに基づく一般化に向けた容量の研究)において、重要な概念です。

MDLでは、最も単純でコンパクトな表現が、データの説明として最適かつ最も可能性が高いとみなされます。MDL原理は、Oracle Data Miningの属性評価モデルの作成に使用されます。

Oracle Data Miningを使用して構築された属性評価モデルは、新しいデータに適用できません。

ore.odmAIは、属性のランキングおよび属性評価の値を作成します。

注意:
OREdm AIモデルは、モデル・オブジェクトが保持されない、Rモデル・オブジェクトが返されない、という点で、Oracle Data Mining AIモデルとは異なります。モデルによって作成された重要度ランキングのみが返されます。

パラメータの詳細は、ore.odmAIに関するRのヘルプを参照してください。

例は、「属性評価の例」を参照してください。

属性評価の例

次の例では、データ・フレームirisを表IRISにプッシュして表を作成してから、属性評価モデルを構築します。

IRIS <- ore.push(iris)
ore.odmAI(Species ~ ., IRIS) # Analyse the column Species

ディシジョン・ツリー

ディシジョン・ツリー・アルゴリズムは条件付き確率に基づきます。ディシジョン・ツリーはルールを生成します。ルールは、ユーザーが容易に理解でき、レコード・セットを識別するためにデータベース内で簡単に使用できる条件文です。

ディシジョン・ツリー・モデルは分類モデルです。

ディシジョン・ツリーは、一連の質問を問うことによってターゲット値を予測します。各段階で問われる質問はそれぞれ、直前の質問に対する回答によって決まります。最終的に特定のターゲット値を一意に識別できるような質問を重ねていきます。図形的には、このプロセスがツリー構造を形成します。

トレーニング処理中、ディシジョン・ツリー・アルゴリズムは、ケース(レコード)のセットを2つの子ノードに分岐する最も効率的な方法を繰り返し探す必要があります。ore.odmDTでは、この分岐の計算用に2つの同種メトリック(giniおよびentropy)を使用できます。デフォルトのメトリックはginiです。

OREdmには、ディシジョン・ツリー(DT)用の次の関数が含まれています。

- ore.odmDTは、DTモデルを作成(構築)します。

- predictは、DTモデルを使用して新しいデータの分類を予測します。

- summaryは、DTモデルのサマリーを表示します。サマリーには、モデルで生成されるツリーを説明するノードの詳細とモデルのシンボリックな記述が含まれます。summary.ore.odmDTのインスタンスを返します。

- print.ore.odmDTは、ore.odmDTモデルの選択したコンポーネントを出力します。

パラメータの詳細は、ore.odmDTに関するRのヘルプを参照してください。

例は、「ディシジョン・ツリーの例」を参照してください。

ディシジョン・ツリーの例

次の例では、入力表を作成し、モデルを構築し、予測を行い、混同マトリクスを生成します。

# Create MTCARS, the input data
m <- mtcars
m$gear <- as.factor(m$gear)
m$cyl  <- as.factor(m$cyl)
m$vs   <- as.factor(m$vs)
m$ID   <- 1:nrow(m)
MTCARS <- ore.push(m)
row.names(MTCARS) <- MTCARS
# Build the model
dt.mod  <- ore.odmDT(gear ~ ., MTCARS)
summary(dt.mod)
# Make predictions and generate a confusion matrix
dt.res  <- predict (dt.mod, MTCARS,"gear")
with(dt.res, table(gear,PREDICTION))  # generate confusion matrix

一般化線形モデル

一般化線形モデル(GLM)は、線形モデル(線形回帰)のクラスを含み、このクラスを拡張したものです。一般化線形モデルは、実際には違反されることが多い線形モデルの制限を緩和したものです。たとえば、2値(yes/noまたは0/1)応答は、クラス間で同じ分散を持ちません。

Oracle Data MiningのGLMはパラメトリックなモデリング手法です。パラメトリック・モデルでは、データの分散を仮定します。仮定が満たされている場合、パラメトリック・モデルはノンパラメトリック・モデルよりも効率的になります。このタイプのモデルの作成では、どの程度仮定が満たされるかを見極めることが課題となります。このため、良質なパラメトリック・モデルを作成するには質の診断が重要です。

古典的な、線形回帰における重み付き最小二乗推定およびロジスティック回帰における反復再重み付き最小二乗推定(いずれもコレスキー分解およびマトリクス反転を使用する解決)に加えて、Oracle Data Mining GLMでは、マトリクス反転が不要で高次元データに最適な共役勾配法に基づく最適化アルゴリズムを提供します(このアプローチは、Komarekの2004年の論文のアプローチに類似しています)。アルゴリズムの選択は内部的に処理され、ユーザーに対して透過的です。

GLMを使用し、次のような分類モデルまたは回帰モデルを作成できます。

- 分類: 2項ロジスティック回帰は、GLM分類アルゴリズムです。このアルゴリズムでは、ロジット・リンク関数および2項分散関数を使用します。
例は、「GLMの例」を参照してください。

- 回帰: 線形回帰は、GLM回帰アルゴリズムです。このアルゴリズムでは、ターゲット値の範囲に対する一定分散およびターゲット変換を想定していません。
例は、「GLMの例」を参照してください。

ore.odmGLMにより、2つの異なるタイプのモデルを構築できます。一部、分類モデルにのみ適用される引数、回帰モデルにのみ適用される引数があります。

OREdmでは、一般化線形モデル(GLM)用の次の関数が用意されています。

- ore.odmGLMはGLMモデルを作成(構築)します(一部、分類モデルにのみ適用される引数、回帰モデルにのみ適用される引数があります)。

- residualsは、3つのタイプの残差(deviance、pearsonおよびresponse)を含むore.frameです。

- fittedはfitted.values(次の適合値を含むore.vector)です。

- rank: 適合モデルの数値のランク

- type: モデル適合のタイプ

- predict.ore.odmGLMは、GLMモデルを使用して新しいデータを予測します。

- confintは、予測値の信頼区間を作成するかどうかを示す論理インジケータです。

- devianceは、最大対数尤度の2倍のマイナス値(ある定数まで)です。

- coef.ore.odmGLMは、線形カーネルを使用してGLMモデルの係数を取得します。

- extractAIC.ore.odmGLMは、GLMモデルの全体の詳細から赤池情報量基準(AIC)を抽出します。

- logLikは、OREdm GLMモデルの対数尤度を抽出します。

- nobsは、モデル適合から観測数を摘出します。nobsはBIC計算に使用されます。
BICは、AIC(object, ..., k = log(nobs(object)))として定義されます。

- summaryは、GLMモデルのサマリーを作成します。サマリーには、モデルの適合の詳細が含まれます。また、formula(モデルのシンボリックな記述)も返します。summary.ore.odmGLMタイプのオブジェクトを返します。

- printは、GLMモデルの選択したコンポーネントを出力します。

各パラメータおよび各方法の詳細は、ore.odmGLMに関するRのヘルプを参照してください。

GLMの例

次の例では、GLMを使用していくつかのモデルを構築します。入力表は、データベースにプッシュされたRデータ・セットです。

- longleyデータ・セットを使用した線形回帰:

LONGLEY <- ore.push(longley)
longfit1 <- ore.odmGLM(Employed ~ ., data = LONGLEY)
summary(longfit1)

- longleyデータ・セットを使用したリッジ回帰:

longfit2 <- ore.odmGLM(Employed ~ ., data = LONGLEY, ridge = TRUE,
ridge.vif = TRUE)
summary(longfit2)

- infertデータ・セットを使用したロジスティック回帰(分類):

INFERT <- ore.push(infert)
infit1 <- ore.odmGLM(case ~ age+parity+education+spontaneous+induced,
data = INFERT, type = "logistic")
infit1

- infit1の参照値の1への変更:

infit2 <- ore.odmGLM(case ~ age+parity+education+spontaneous+induced,
data = INFERT, type = "logistic", reference = 1)
infit2

k-Means

k-Means(KM)アルゴリズムは、指定した数のクラスタにデータを分割する、距離ベースのクラスタリング・アルゴリズムであり、次の機能を備えた拡張バージョンです。

- 複数の距離関数(ユークリッド、コサインおよび高速コサインの各距離関数)。デフォルトはユークリッドです。

- クラスタごとに、アルゴリズムによって、重心、各属性のヒストグラム、およびクラスタに割り当てられるデータの大部分を囲むハイパーボックスを記述するルールが戻されます。重心は、質的属性については最頻値を、量的属性については平均および分散を示します。

OREdmには、k-Means (KM)モデル用の次の関数が含まれています。

- ore.odmKMeansは、KMモデルを作成(構築)します。

- predictは、KMモデルを使用して新しいデータを予測します。

- rules.ore.odmKMeansは、KMモデルで生成されたルールを抽出します。

- clusterhists.ore.odmKMeansは、モデルの各クラスタと変数の組合せのヒストグラム・データを使用してdata.frameを生成します。数値変数はビニングされます。

- histograms.ore.odmKMeansは、クラスタリング・モデルからlatticeベースのヒストグラムを作成します。

- summaryは、KMモデルのサマリー(ルールを含む)を返します。また、formula(モデルのシンボリックな記述)も返します。summary.ore.KMeansタイプのオブジェクトを返します。

- printは、KMモデルの選択したコンポーネントを出力します。

パラメータの詳細は、ore.odmKMに関するRのヘルプを参照してください。

例は、「k-Meansの例」を参照してください。

k-Meansの例

次の例では、表Xを作成し、クラスタ・モデルを構築し、histogram()を介してクラスタを描画し、予測を作成します。

# Create input table X
x <- rbind(matrix(rnorm(100, sd = 0.3), ncol = 2),
matrix(rnorm(100, mean = 1, sd = 0.3), ncol = 2))
colnames(x) <- c("x", "y")
X <- ore.push (data.frame(x))
km.mod1 <- NULL
km.mod1 <- ore.odmKMeans(~., X, num.centers=2)
km.mod1
summary(km.mod1)
rules(km.mod1)
clusterhists(km.mod1)
histogram(km.mod1)
# Build clustering mode; plot results
km.res1 <- predict(km.mod1,X,type="class",supplemental.cols=c("x","y"))
head(km.res1,3)
km.res1.local <- ore.pull(km.res1)
plot(data.frame(x=km.res1.local$x, y=km.res1.local$y),
col=km.res1.local$CLUSTER_ID)
points(km.mod1$centers2, col = rownames(km.mod1$centers2), pch = 8, cex=2)
# Make predictions
head(predict(km.mod1,X))
head(predict(km.mod1,X,type=c("class","raw")),3)
head(predict(km.mod1,X,type=c("class","raw"),supplemental.cols=c("x","y")),3)
head(predict(km.mod1,X,type="class"),3)
head(predict(km.mod1,X,type="class",supplemental.cols=c("x","y")),3)
head(predict(km.mod1,X,type="raw"),3)
head(predict(km.mod1,X,type="raw",supplemental.cols=c("x","y")),3)

Naive Bayes

Naive Bayesアルゴリズムは条件付き確率に基づきます。Naive Bayesは履歴データを検索し、属性値の頻度と属性値の組合せの頻度を観測することによってターゲット値の条件付き確率を計算します。

Naive Bayesでは、各予測子は他の予測子とは条件的に独立していると想定されます。(Bayesの定理では、予測子が独立している必要があります。)

OREdmには、Naive Bayes (NB)モデル用の次の関数が含まれています。

- ore.odmNBは、NBモデルを作成(構築)します。

- predictは、NBモデルを使用して新しいデータをスコアリングします。

- summaryは、NBモデルのサマリーを表示します。また、formula(モデルのシンボリックな記述)も返します。summary.ore.odmNBのインスタンスを返します。

- printは、NBモデルの選択したコンポーネントを出力します。

パラメータの詳細は、ore.odmNBに関するRのヘルプを参照してください。

例は、「Naive Bayesの例」を参照してください。

Naive Bayesの例

次の例では、MTCARSを作成し、Naive Bayesモデルを構築し、モデルを使用して予測を行います。

# Create MTCARS
m <- mtcars
m$gear <- as.factor(m$gear)
m$cyl  <- as.factor(m$cyl)
m$vs   <- as.factor(m$vs)
m$ID   <- 1:nrow(m)
MTCARS <- ore.push(m)
row.names(MTCARS) <- MTCARS
# Build model
nb.mod  <- ore.odmNB(gear ~ ., MTCARS)
summary(nb.mod)
# Make predictions
nb.res  <- predict (nb.mod, MTCARS,"gear")
with(nb.res, table(gear,PREDICTION))  # generate confusion matrix

サポート・ベクター・マシン

サポート・ベクター・マシン(SVM)は、Vapnik-Chervonenkis理論に基づいた強固な理論的基礎を持つ最新の強力なアルゴリズムです。SVMは、強力な正則化プロパティを持ちます。正則化とは、新しいデータへのモデルの一般化を指します。

SVMモデルは、一般的なデータ・マイニング手法であるニューラル・ネットワークおよび動径基底関数に似た関数形式を持ちます。

SVMは、次のような問題の解決に使用できます。

- 分類: SVM分類は、決定境界を定義する決定面の概念に基づいています。決定面は、異なるクラスのメンバーシップを持つオブジェクト・セットを区別するものです。SVMは、クラスの最も広範な区切りを与えるセパレータを定義するベクター(サポート・ベクター)を検出します。
SVM分類では、2項および多クラスの両ターゲットがサポートされます。

例は、「SVM分類」を参照してください。

- 回帰: SVMでは、回帰問題を解決するために、イプシロン非感受性損失関数が使用されます。
SVM回帰では、データ・ポイントの最大数がイプシロン幅の非感受性チューブ内に収まるような連続関数の検出が試行されます。真のターゲット値のイプシロン距離内におさまる予測は、誤差として解釈されません。

例は、「SVM回帰」を参照してください。

- 異常検出: 異常検出は、一見同質なデータ内に存在する特異なケースを識別します。異常検出は、重大な意味を持ちながら検出することが難しい、不正行為、ネットワークへの侵入などの発生頻度の低いイベントを検出するための重要なツールです。
異常検出は、1クラスSVM分類として実装されます。異常検出モデルは、指定した分布内でデータ・ポイントが典型的かどうかを予測します。

例は、「SVM異常検出」を参照してください。

ore.odmSVM関数は、次の3つの異なるタイプのモデルを構築します。一部、分類モデルにのみ適用される引数、回帰モデルにのみ適用される引数、異常検出モデルにのみ適用される引数があります。

OREdmでは、SVMモデル用の次の関数が用意されています。

- ore.odmSVMは、SVMモデルを作成(構築)します。

- predictは、SVMモデルを使用して新しいデータを予測(スコアリング)します。

- coefは、SVMモデルの係数を取得します。
SVMには、「線形」および「ガウス」の2つのカーネルがあり、「線形カーネル」は係数を生成します。

- summaryはSVMモデルのサマリーを作成します。また、formula(モデルのシンボリックな記述)も返します。summary.ore.odmSVMタイプのオブジェクトを返します。

- printは、SVMモデルの選択したコンポーネントを出力します。

パラメータの詳細は、ore.odmSVMに関するRのヘルプを参照してください。

サポート・ベクター・マシンの例

次の例では、3つのモデルを構築します。

- SVM分類

- SVM回帰

- SVM異常検出

SVM分類

次の例では、R mtcarsデータ・セットからデータベースにmtcarsを作成し、分類モデルを構築し、予測を行い、最終的に、混同マトリクスを生成します。

m <- mtcars
m$gear <- as.factor(m$gear)
m$cyl  <- as.factor(m$cyl)
m$vs   <- as.factor(m$vs)
m$ID   <- 1:nrow(m)
MTCARS <- ore.push(m)

svm.mod  <- ore.odmSVM(gear ~ .-ID, MTCARS,"classification")
summary(svm.mod)
coef(svm.mod)
svm.res  <- predict (svm.mod, MTCARS,"gear")
with(svm.res, table(gear,PREDICTION))  # generate confusion matrix

SVM回帰

次の例では、データ・フレームを作成し、それを表にプッシュしてから、回帰モデルを構築します(ore.odmSVMでは、線形カーネルを指定します)。

x <- seq(0.1, 5, by = 0.02)
y <- log(x) + rnorm(x, sd = 0.2)
dat <-ore.push(data.frame(x=x, y=y))

# Build model with linear kernel
svm.mod <- ore.odmSVM(y~x,dat,"regression",kernel.function="linear")
summary(svm.mod)
coef(svm.mod)
svm.res <- predict(svm.mod,dat,supplemental.cols="x")
head(svm.res,6)

SVM異常検出

次の例では、分類の例で作成されたMTCARSを使用し、異常検出モデルを構築します。

svm.mod  <- ore.odmSVM(~ .-ID, MTCARS,"anomaly.detection")
summary(svm.mod)
svm.res  <- predict (svm.mod, MTCARS, "ID")
head(svm.res)
table(svm.res$PREDICTION)

8 Oracle R Enterpriseでの埋込みの実行

この章の内容は次のとおりです。

- スクリプトのセキュリティに関する考慮事項

- データベースの並列性のサポート

- 埋込みOracle R EnterpriseスクリプトのためのRインタフェース

- Oracle R Enterpriseの埋込みSQLスクリプト

スクリプトのセキュリティに関する考慮事項

RスクリプトとSQLスクリプトはいずれも、データベース・サーバーにアクセスできます。そのため、スクリプトの作成は制御する必要があります。スクリプトの作成および削除を実行するユーザーにはRQADMINロールが必要です。

RQADMINロール

Oracle R EnterpriseはRQADMINロールを作成します。

RQADMINロールは、ユーザーに明示的に付与する必要があります。

次のインスタンスには、RQADMINロールが必要です。

- ore.doEval()にFUN引数を指定したコール

- ore.scriptCreateおよびore.scriptDropによるスクリプトの作成および削除

ore.rowApply、ore.groupApply、ore.tableApply、ore.indexApplyおよびFUN.NAME引数を指定したore.doEvalのコールには、RQADMINロールは不要です。

RQUSERにRQADMINを付与するには、sysdbaとしてSQL*Plusを起動し、次を入力します。

grant rqadmin to RQUSER

注意:
RQADMINは、必要とするユーザーにのみ付与してください。

データベースの並列性のサポート

パラレル処理は、Oracle R Enterpriseの関数にかぎらず、Oracle R Enterpriseには含まれていないOpen Source Rパッケージでも有効にできます。これらのパッケージでのデータの並列性は、Oracle R Enterpriseの埋込みRの実行によって利用可能になります。

R側では、Oracle R Enterpriseは、データのパラレル処理用にore.groupApply()、ore.rowApply()およびore.indexApply()を提供します。データのパラレル処理は、データ・セットを、並列で(個別に)処理できる複数のサブセットに分割する処理で構成されます。Oracle R Enterpriseは、「Oracle R Enterpriseの埋込みSQLスクリプト」で説明するように、SQLと同等のグループ適用および行適用の関数も提供します。

オープン・ソース・パッケージ(CRANパッケージ)は、一般的に、Oracle R Enterpriseの透過層を利用できず(これらのパッケージはベースRのみを使用して記述されていないか、C関数などの機能へのコールアウトを含むため)、Rアドレス空間のデータ上で実行されます。つまり、これらのパッケージの使用は、Rのメモリーおよび並列性の制約と、CRANパッケージの記述方法の対象になることを意味しています。Oracle R Enterpriseによって、CRANパッケージの内部コードが、自動的に並列化されることはありません。

埋込みRの実行は、大規模サーバー(Oracle Exadataなどのデータベース・サーバー)のように、メモリーおよびプロセッサ数に関して、通常のRクライアントで実現できる能力の拡張を可能にします。また、埋込みRの実行によって、データベースとRエンジンとの間で(これらは同じマシン上に配備されるため)さらに効率的なデータの転送が実現されます。また、CRANパッケージを利用するユーザーのR関数のデータ並列実行も、Oracle R EnterpriseのR APIおよびSQL APIの両方で可能になります。

埋込みOracle R EnterpriseスクリプトのためのRインタフェース

ここで説明するOracle R Enterpriseの関数によって、Rベースのアプリケーションで、Oracle R Enterpriseの機能をスクリプトに埋め込むことができます。たとえば、Rスクリプトで、データベース・オブジェクトに対する操作を実行できるようになります。

1つのRスクリプトには単一の関数定義が含まれます。Rスクリプトは、Oracle R Enterpriseのデータベース内Rスクリプトのアーカイブ内に存在します。

埋込みRスクリプトには、次のようにいくつかのメリットがあります。

- データが存在するデータベース内でRスクリプトを実行できるので、データをデータベース外に移動する必要がありません。スクリプトには、カスタム手法を含めることも、CRANパッケージからの関数を含めることができます。

- Rベースのアプリケーション内および実行可能なSQLベースのアプリケーション内で、既存のRスクリプトを実行できます。

- Oracle Databaseの分散型データ・フローの並列性を活用できます。この並列性はユーザーが制御可能ですが、データベースによって管理されます。

- Oracle Databaseが提供するセキュリティ機能を使用できます。スクリプトを登録してセキュリティを保護する方法の詳細は、「埋込みRスクリプトのセキュリティ問題」を参照してください。

Oracle R Enterpriseは、データベース内でのRスクリプトの実行をサポートするために、次の関数を提供します。

- ore.doEval()

- ore.tableApply()

- ore.groupApply()

- ore.rowApply()

- ore.indexApply()

- ore.scriptCreate()

- ore.scriptDrop()

「ore.doEval()」および「ore.indexApply()」で、スクリプトの例を示します。

埋込みRスクリプトのセキュリティ問題

これらのスクリプトはすべて、引数FUNまたはFUN.NAMEを必要とします。セキュリティ上の理由により、引数FUNを使用するには、Oracle Database権限のコレクションであるRQADMINロールが必要です。引数FUN.NAMEで表されるスクリプトの作成は、RQADMIN資格証明を持つユーザーによって発行される必要があるため、この引数はOracle R Enterpriseの使用が認可されたすべてのユーザーが使用できます。

ore.*Apply()およびore.doEval()の入力

関数ore.tableApply()、ore.groupApply()、ore.rowApply()、ore.indexApply()およびore.doEval()はすべて、FUN.NAMEパラメータ(Rスクリプト・リポジトリにロード済の関数の場合)、またはR関数(閉包)であるFUNのいずれかをとります。

すべての関数は、あらゆる値を返す可能性があります。ただし、FUN.VALUE引数を指定した場合には、data.frameに一致した出力になります。

すべての関数は、オプションの引数(... arguments)として渡されるパラメータをとります。名前付きである場合も、そうでない場合もあります。

すべての関数は、FUN.NAMEパラメータで指定されたデータベースのRスクリプト・リポジトリ内にある関数の名前をとるか、またはFUNパラメータに指定された実際のR関数の名前をとります。

ore.doEval()

ore.doEval()は、入力データなしでデータベース内のスタンドアロンのRスクリプトを起動します。パラメータは指定できます。ore.frameオブジェクトまたはシリアライズRオブジェクトを返します。

内部で生成されたデータがore.doEval()への入力になります。ore.pull()を使用すると、ファイルまたは表からデータをロードできます。

入力データは次のいずれかになります。

- 内部で生成されたデータ

- ore.pull()を使用してファイルからロードしたデータまたはデータベースからプルしたデータ

- 透過層によって利用可能にしたデータ

ore.doEval()は、FUN.NAMEパラメータで指定されたデータベースのRスクリプト・リポジトリ内にある関数の名前をとるか、またはFUNパラメータに指定された実際のR関数の名前をとります。

次に示す、ore.で始まるFUNパラメータの追加の引数は、特別な制御引数です。これらは、FUNまたはFUN.NAME引数で指定された関数に渡されるのではなく、閉包の実行の前後に起こる動作を制御します。次の制御引数がサポートされます。

- ore.dropは入力データを制御します。TRUEを指定した場合、1列のdata.frameがベクターに変換されます。デフォルト値はTRUEです。

- ore.connectは、閉包内でOracle R Enterpriseに自動的に接続するかどうかを制御します。これは、クライアント・セッションと同じ資格証明を指定してore.connectをコールすることと同等です。デフォルト値は、FALSEです。

- ore.graphicsは、グラフィカル・ドライバを起動して画像を検索するかどうかを制御します。デフォルト値はTRUEです。

- ore.png.*では、ore.graphicsがTRUEの場合に、pngグラフィック・ドライバの追加パラメータを指定します。これらの引数のネーミング規則として、png関数の引数にはore.png.接頭辞を追加します。たとえば、ore.png.heightを指定すると、引数heightがpng関数に渡されます。設定しない場合は、png関数に標準のデフォルト値が使用されます。

この例では、指定した値によって、最初のn個の整数をスケールします。結果はシリアライズRオブジェクト(data.frame)になります。

Oracle R Enterpriseには、多数の事前定義済グラフィカル・スクリプトがあります。すべての事前定義済スクリプトには、RQG$で始まって、スクリプトがラップするグラフィック・パッケージの名前が続く、予約名があります。関数によって、入力されたdata.frameの最初の列、最初と2番目の列、またはすべての列のいずれかをとります。したがって、事前定義済スクリプトはore.tableApply、ore.groupApplyまたはore.rowApplyを指定した場合にのみ使用できます。各関数には...もあるので、ラップする関数に任意のパラメータを渡すことができます。

res <-
ore.doEval(function (num = 10, scale = 100) {
ID <- seq(num)
data.frame(ID = ID, RES = ID / scale)
})
class(res)
res
local_res <- ore.pull(res)
class(local_res)
local_res

追加の例は、ore.doEval()に関するRのヘルプを参照してください。

ore.tableApply()

ore.tableApply()は、入力された表(ore.frame)全体を使用してRスクリプトを起動します。入力は、すべて一度に関数に渡されます。ore.doEval()と同様に、ore.frameオブジェクトまたはシリアライズRオブジェクトを返すことができます。

入力データは、ore.frameオブジェクトです。

ore.frameオブジェクトとして、データ・フレーム署名を返します。

引数として、NULLまたは<variable>=<value>をとります。

ore.groupApply()

ore.groupApply()は、指定された列の値に従ってデータをパーティショニングし、可能であれば、各パーティションで並列にRスクリプトを起動します。戻り値は、各グループの実行結果のリストです。

入力データは、ore.frameオブジェクトです。

ore.objectとしてNULL値を返すか、またはore.frameオブジェクトとしてデータ・フレーム署名を返します。

引数として、NULLまたは<variable>=<value>をとります。

ore.groupApply()にはパーティション列を指定する必要があります。

FUN.NAMEパラメータで指定されたデータベースのRスクリプト・リポジトリ内にある関数の名前をとるか、またはFUNパラメータに指定された実際のR関数の名前をとります。

ore.rowApply()

ore.rowApply()ではチャンク・サイズ、つまり関数で処理する行数を指定します。データベース・サーバーで複数のRエンジンを起動できる場合には、すべてのデータが処理されるまで、この関数を並列に複数回起動します。戻り値は、各チャンクの実行結果のリストです。

入力データは、ore.frameオブジェクトです。

ore.objectとしてNULL値を返すか、またはore.frameオブジェクトとしてデータ・フレーム署名を返します。

引数として、NULLまたは<variable>=<value>をとります。

ore.rowApply()のチャンク・サイズは指定可能です。

FUN.NAMEパラメータで指定されたデータベースのRスクリプト・リポジトリ内にある関数の名前をとるか、またはFUNパラメータに指定された実際のR関数の名前をとります。

ore.indexApply()

ore.indexApply()は、Rスクリプトをn回起動します。ここで、nは正の整数です。戻り値は、実行ごとの結果のリストです。

入力データは次のいずれかになります。

- 内部で生成されたデータ

- ore.pull()を使用してファイルからロードしたデータまたはデータベースからプルしたデータ

- 透過層によって利用可能にしたデータ

ore.indexApply()はNULLまたは<variable>=<value>を引数としてとります。

R関数を起動する回数を示すnを指定する必要があります。

FUN.NAMEパラメータで指定されたデータベースのRスクリプト・リポジトリ内にある関数の名前をとるか、またはFUNパラメータに指定された実際のR関数の名前をとります。

たとえば、次のコードはこの関数を10回適用します。

res<-ore.indexApply(10,function (x, scale = 100) x / scale)

ore.scriptCreate()

ore.scriptCreate()は、データベース内にRスクリプトを作成します。このスクリプトは、他の埋込みRスクリプト関数の名前を指定して使用できます。

注意:
ore.scriptCreate()にはRQADMINロールが必要です。

ore.scriptCreate()の構文は次のとおりです。

ore.scriptCreate(name, FUN)

説明:

- nameは、Oracle Database内のRスクリプトの名前を指定した文字列です。

- FUNは、関数ore.doEval()、ore.groupApply()、ore.indexApply()、ore.rowApply()またはore.tableApply()で使用される関数定義です。

この関数は、成功した場合は非表示のNULL値を返し、スクリプトの作成が成功しなかった場合はエラーを返します。

ore.scriptCreate()の例

この例では、スクリプトを作成して削除します。

ore.scriptCreate("MYLM",function(data, formula, ...) lm(formula, data, ...))
IRIS <- ore.push(iris)
ore.tableApply(IRIS[1:4], FUN.NAME = "MYLM" formula = Sepal.Length ~ .)
ore.scriptDrop("MYLM")

ore.scriptDrop()

ore.scriptDrop()は、名前付きのRスクリプトをデータベース・リポジトリから削除します。RQADMINロールが必要です。

注意:
ore.scriptDrop()にはRQADMINロールが必要です。

ore.scriptDrop()の構文は次のとおりです。

ore.scriptDrop(name)

説明:

- nameは、Oracle Database内のRスクリプトの名前を指定した文字列です。

この関数は、成功した場合は非表示のNULL値を返し、スクリプトの削除が成功しなかった場合はエラーを返します。

例は、「ore.scriptCreate()の例」を参照してください。

埋込みRスクリプトでの自動データベース接続

埋込みRスクリプトは、Oracle Databaseに自動的に接続できます。

自動接続を有効にすると、次の機能が実行されます。

- 埋込みRスクリプトが自動的にデータベースに接続します。

- 自動接続は、埋込みR SQL関数を起動するセッションと同じ資格証明を持ちます。

- このスクリプトは自律型トランザクション内で実行されます。

- ROracle問合せは自動接続と連携します。

- Oracle R Enterpriseの透過層が埋込みスクリプトで使用可能になります。

- ユーザーおよびサイト全体でのRプロファイルのロードは埋込みRでは無効になっています。
プロファイルのロードは、Oracle R Enterpriseの以前のリリースでサポートされていました。自動接続は、より安全な接続を提供します。

自動接続は、デフォルトでは無効になっています。自動接続は、ore.connect制御引数を使用して有効または無効に指定できます。制御引数については、ore.doEval()に関するRヘルプに記載されています。

自動接続を可能にするため、ROracleが拡張されて、新しいドライバExtDriverとコンストラクタExtprocが追加されました。これは、extprocコンテキストをラップする外部ポインタを渡すことで初期化されます。OraDriverと同様に、ExtDriverはシングルトンです。これらのドライバは、2つの個別のシングルトンで表されるため、セッションで同時に存在することができます。この設定によって、次の例に示すように、extproc接続と明示的なOraDriver接続を、同じRスクリプトで機能させることができます。

ore.doEval(function() {
ore.disconnect()
con1 <- dbConnect(Extproc())
res1 <- dbGetQuery(con1, "select * from grade order by name")
con2 <- dbConnect(Oracle(), "scott", "tiger")
res2 <- dbGetQuery(con2, "select * from emp order by empno")
dbDisconnect(con1)
dbDisconnect(con2)
cbind(head(res1)[,1:3], head(res2)[,1:3])
}, ore.connect = TRUE)

埋込みRスクリプトの例

埋込みRスクリプトの詳細な例は、https://blogs.oracle.com/R/entry/analyzing_big_data_using_the1にあるOracle R Enterpriseブログ「Introduction to ORE Embedded R Script Execution」を参照してください。

無償の「Oracle R Enterprise Tutorial Series」に記載されている「Part 6: ORE Embedded R Scripts: R Interface」には、埋込みRスクリプトの説明と、いくつかの例があります。Tutorial Seriesの詳細は、「Oracle R Enterpriseのトレーニング」を参照してください。

Oracle R Enterpriseデモのいくつかは、埋込み実行について説明しています。

Oracle R Enterpriseの埋込みSQLスクリプト

SQLインタフェースによって、Rスクリプト実行を本番データベースのアプリケーションに埋め込むことができます。

SQLインタフェースに関連付けた関数は、データベースRリポジトリに格納し、SQL API関数の名前で参照する必要があります。リポジトリにスクリプトを追加する方法、リポジトリからスクリプトを削除する方法、およびリポジトリ内のスクリプトの一覧を表示して使用する方法については、「SQLスクリプトの登録および管理」を参照してください。

SQL関数についての説明は、「Oracle R EnterpriseのSQL関数」を参照してください。

SQLスクリプトの登録および管理

セキュリティ上の理由により、最初にシステムで一意の名前でRスクリプトを登録して、実際のスクリプトではなくこの新しい名前をrq*Eval表関数へのコールで使用する必要があります。

次のように、スクリプトを作成および削除する2つの管理関数と、スクリプトの一覧を示すビューがあります。

- sys.rqScriptCreate()

- sys.rqScriptDrop()

- 作成したスクリプトをリストして使用できるビュー

このスクリプトには、「RQADMINロール」で説明するRQADMINロールが必要です。

sys.rqScriptCreate()を使用するときは、関数文字列の対応するR閉包を指定する必要があります。

次に、スクリプトの登録と登録済スクリプトを使用する例を示します。

begin
sys.rqScriptCreate('tmrqfun2',
'function() {
ID <- 1:10
res <- data.frame(ID = ID, RES = ID / 100)
res
}');
end;
/

select *
from table(rqEval(
NULL,
'select 1 id, 1 res from dual',
'tmrqfun2'));

begin
sys.rqScriptDrop('tmrqfun2');
end;
/

Oracle R EnterpriseのSQL関数

rq*Eval関数の結果、データベースの並列性に応じて、1つ以上の新しいRエンジンがデータベースで起動されます。

データベースでのRスクリプトの実行(完全自動処理)を可能にするため、Oracle R Enterpriseは、SQLでore.doEval()、ore.tableApply()、ore.groupApply()およびore.rowApply()のバリアントを提供しています。(ore.doEval()、ore.tableApply()、ore.groupApply()およびore.rowApply()は、「埋込みOracle R EnterpriseスクリプトのためのRインタフェース」で説明します。)

SQL関数は、次のとおりです。

- rqTableEval()

- rqEval()

- rqRowEval()

- rqGroupEval()

rqGroupEval()には追加のSQL指定が必要で、ここでは、指定された列の値に従ってデータをパーティショニングし、各パーティションでRスクリプトを起動する仮想関数として提供されます。詳細は、「rqGroupEval()関数」を参照してください。

「rq*Eval()とデータストア内のオブジェクト」で説明するように、これらの関数をデータストア内のオブジェクトとともに使用できます。

rq*Eval()関数(rqEval()、rqTableEval()、rqGroupEval()およびrqRowEval())は、次の類似した構文を使用します。

rq*Eval(
cursor(select * from table-1),
cursor(select * from table-2),
'select <column list> from table-3 t',
<grouping col-name from table-1 or num_rows>,
<R closure name of registered-R-code>
)

説明:

- 最初のカーソルは入力カーソルです。入力は、4番目のパラメータに記述されているR閉包に、表全体、グループまたはN行として一度に渡されます。
rqEval()には、このカーソル引数はありません。

- 2番目のカーソルはパラメータ・カーソルです。1行のスカラー値(文字列、数値またはその両方)を渡すことができます。たとえば、モデルの名前と、モデル設定のいくつかの数値のスカラー値を渡すことができます。

- 問合せによって、出力表の定義が指定されます。出力は「SELECT文」、「XML」または「PNG」にすることができます。

- grouping col-nameはrqGroupEval()に適用され、グループ化列の名前を提供します。

- num_rowsはrqRowEval()に適用され、関数に一度に渡す行の数を提供します。

- <R closure name of registered-R-code>は、実行するR関数の登録済バージョンです。詳細は、「SQLスクリプトの登録および管理」を参照してください。

すべてのSQL関数の戻り値は、次のいずれかの値を示します。

- SELECT文に指定された表のシグネチャ。rq関数からの結果を表として返します。

- XML、1つのXML文字列で構造化イメージとグラフ・イメージの両方を返すCLOBとして返します。最初に構造化されたコンポーネントが提供され、次にbase 64でエンコードされたイメージのpng表示が続きます。

- PNG、PNG形式でグラフ・イメージを返すBLOBとして返します。

rqEval()、rqTableEval()、rqGroupEval()およびrqRowEval()は、Rスクリプト・リポジトリ内に格納された名前で、Rスクリプトを指定する必要があります。sys.rq_scriptsビューが提供する登録済スクリプトのリストの詳細は、「SQLスクリプトの登録および管理」を参照してください。

次の例は、これらの関数の使用方法を示しています。

- この例では、表fishのすべての行をR関数への入力として使用します。この関数は、他のパラメータをとらず、すべての入力データと値のROWSUMを含むoutputを生成します。
このR関数のパラメータ(param)はオプションであることに注意してください。

begin
sys.rqScriptCreate('tmrqfun2',
'function(x, param) {
dat <- data.frame(x, stringsAsFactors=F)
cbind(dat, ROWSUM = apply(dat,1,sum)+10)
}');
end;
/

select * from table(rqTableEval(
cursor(select * from fish),
NULL,
'select t.*, 1 rowsum from fish t',
'tmrqfun2' ));

begin
sys.rqScriptDrop('tmrqfun2');
end;
/

- この例は、表fishからR関数に、一度にn=1(4番目のパラメータ)行を渡す方法を示しています。この関数にパラメータは必要ありません。この関数はROWSUMを生成して、出力のfishに別の列として追加します。

begin
sys.rqScriptCreate('tmrqfun2',
'function(x, param) {
dat <- data.frame(x, stringsAsFactors=F)
cbind(dat, ROWSUM = apply(dat,1,sum)+10)
}');
end;
/

select * from table(rqRowEval(
cursor(select * from fish),
NULL,
'select t.*, 1 rowsum from fish t',
1,
'tmrqfun2' ));

begin
sys.rqScriptDrop('tmrqfun2');
end;
/

rqGroupEval()関数

rqGroupEval()は、グループ化列によってパーティショニングされたデータ上でRスクリプトを起動します。

rqGroupEval()には、次のように、パッケージとパイプライン・テーブル・ファンクションの、2つのPL/SQLオブジェクトを作成する必要があります。

1. 返される結果の型を指定する、PL/SQLパッケージを作成します。

2. パッケージの戻り値をとり、その戻り値とPIPELINED_PARALLEL_ENABLEセットを使用してデータをパーティショニングする列を示す関数を作成します。

ONTIME_Sは、飛行機の到着についての情報を格納した表であるとします。このデータ・カーソルはすべてのデータを使用しますが、PL/SQLレコードを使用して一部の列を使用するカーソルを定義することもできます。次に、特定のデータ・カーソルに対して使用する必要のあるグループ化列と同じ数のPL/SQL表関数を定義する必要があります。

CREATE PACKAGE ontimePkg AS
TYPE cur IS REF CURSOR RETURN ontime_s%ROWTYPE;
END ontimePkg;
/

CREATE FUNCTION ontimeGroupEval(
inp_cur  ontimePkg.cur,
par_cur  SYS_REFCURSOR,
out_qry  VARCHAR2,
grp_col  VARCHAR2,
exp_txt  CLOB)
RETURN SYS.AnyDataSet
PIPELINED PARALLEL_ENABLE (PARTITION inp_cur BY HASH (month))
CLUSTER inp_cur BY (month)
USING rqGroupEvalImpl;
/

この時点では、1つのグループ化列のみがサポートされています。複数の列がある場合、それらを1つの列に結合して、その新しい列をグループ化列として使用します。PARALLEL_ENABLE句はオプションですが、CLUSTER BYは違います。

rq*Eval()とデータストア内のオブジェクト

rq*Eval()と関連する関数によって、パラメータ・カーソルを使用して、データストアに格納されたシリアライズRオブジェクトを使用できます。シリアライズRオブジェクトのオブジェクト名およびデータストア名を、パラメータ・カーソル内のR関数のパラメータ名に関連付けます。

次に、この方法でrq*Eval()を使用する例を示します。ユーザーscottが、データストアontime_model内にオブジェクトlm.modとしてモデルを保存したとします。scottは、このモデルを、埋込みOracle R EnterpriseスコアリングのためのSQLで使用する必要があります。このコードは、埋込みスコアリングのためのモデルを使用する方法を示しています。ore.connect()の構成パラメータについては、「埋込みRスクリプトでの自動データベース接続」を参照してください。

begin
sys.rqScriptCreate('tmrqmodelscore',
'function(dat, in.dsname, in.objname) {
ore.load(name=in.dsname, list=in.objname)
mod <- get(in.objname)
prd <- predict(mod, newdata=dat)
prd[as.integer(rownames(prd))] <- prd
res <- cbind(dat, PRED = prd)
res
}');
end;
/ -- score model

select * from table(rqTableEval(
cursor(select ARRDELAY, DISTANCE, DEPDELAY from ontime_s
where year = 2003 and month = 5 and dayofmonth = 2),
cursor(select 'ontime_model' as "in.dsname",
'lm.mod' as "in.objname", 1 as "ore.connect" from dual),
'select ARRDELAY, DISTANCE, DEPDELAY, 1 PRED from ontime_s',
'tmrqmodelscore'))
order by 1, 2, 3;

SQLでのデータストア管理

Oracle R Enterpriseは、SQLでの基本的なデータストア管理機能を提供します。基本的なデータストア管理には、表示、検索および削除があります。次の関数およびビューを提供します。

- rqDropDataStore()はデータストアと、そのデータストア内のすべてのオブジェクトを削除します。
構文: rqDropDataStore('<ds_name>')。ここで、<ds_name>は削除するデータストアの名前です。

次の例では、現行のユーザーのスキーマからデータストアds_modelを削除します。

rqDropDataStore('ds_model')

- rquser_DataStoreListは、現行のユーザーのスキーマにあるすべてのデータストアの、データストアレベルの情報が含まれるビューです。この情報は、データストア名、オブジェクト数、サイズ、作成日および説明で構成されます。
次の例は、このビューの使用方法を示しています。

select * from rquser_DataStoreList
select dsname, nobj, size from rquser_datastorelist where dsname = 'ds_1'

- rquser_DataStoreContentsは、現行のユーザーのスキーマにあるすべてのデータストアの、オブジェクトレベルの情報が含まれるビューです。この情報は、オブジェクト名、サイズ、クラス、長さ、行および列の数で構成されます。
この例は、データストアds_1の内容をリストします。

select * from rquser_DataStoreContents where dsname = 'ds_1';

A Oracle R EnterpriseおよびOracle R Distributionのパッケージ

この付録では、Oracle R DistributionおよびOracle R EnterpriseでサポートされているRパッケージについて説明します。これらのパッケージに含まれているR関数は、Rバージョン2.13.2および2.15.1でサポートされています。

Oracle R Distributionに関連するパッケージ

Oracle R Distributionに関連する次のパッケージは、Oracle R Enterpriseでサポートされています。

KernSmooth - Functions for kernel smoothing for Wand & Jones (1995)
MASS - Support Functions and Datasets for Venables and Ripley's MASS
Matrix - Sparse and Dense Matrix Classes and Methods
base - The R Base Package
boot - Bootstrap Functions (originally by Angelo Canty for S)
class - Functions for Classification
cluster - Cluster Analysis Extended Rousseeuw et al.
codetools - Code Analysis Tools for R
compiler - The R Compiler Package
datasets - The R Datasets Package
foreign - Read Data Stored by Minitab, S, SAS, SPSS, Stata, Systat, dBase, ...
grDevices - The R Graphics Devices and Support for Colours and Fonts
graphics - The R Graphics Package
grid - The Grid Graphics Package
lattice - Lattice Graphics
methods - Formal Methods and Classes
mgcv - GAMs with GCV/AIC/REML smoothness estimation and GAMMs by PQL
nlme - Linear and Nonlinear Mixed Effects Models
nnet - Feed-forward Neural Networks and Multinomial Log-Linear Models
rpart - Recursive Partitioning
spatial - Functions for Kriging and Point Pattern Analysis
splines - Regression Spline Functions and Classes
stats - The R Stats Package
stats4 - Statistical Functions using S4 Classes
survival - Survival analysis, including penalised likelihood.
tcltk - Tcl/Tk Interface
tools - Tools for Package Development
utils - The R Utils Package

Oracle R Enterpriseに関連するパッケージ

これらのパッケージはOracle R Enterpriseインストール時にインストールされます。

次のRコマンドは、ライブラリおよび必須パッケージをロードします(まだインストールされていない場合)。

> library(ORE)

Oracle R Enterpriseに関連する次のパッケージは、Oracle R Enterpriseでサポートされています。

DBI - R Database Interface
ORE - Oracle R Enterprise
OREbase - Oracle R Enterprise - base
OREdm - Oracle R Enterprise - dm
OREeda - Oracle R Enterprise - exploratory data analysis
OREgraphics - Oracle R Enterprise - graphics
OREpredict - Oracle R Enterprise - model predictions
OREstats - Oracle R Enterprise - stats
ORExml - Oracle R Enterprise - R objects to XML
ROracle - OCI based Oracle database interface for R
XML - Tools for parsing and generating XML within R and S-Plus.
bitops - Functions for Bitwise operations
png - Read and write PNG images

索引

A  B  C  D  E  F  G  J  L  M  O  P  R  S  T  V

A

集計, 3.4

アーキテクチャ, 1.1

B

ブログ, 1.4

C

クライアントRエンジン, 1.1

列および行の選択, 3.4

D

データ, 3.3

データのフォーマット設定, 3.4

データベース表, 3.1

デモ, 3.8.3

派生列, 3.4, 3.5

表の削除, 3.3.5

E

埋込みRエンジン, 3.7

埋込みRの実行, 1

例

回帰モデルの構築, 3.6.1

表へのRフレームのロード, 3.8.1

NULL値, 3.8.2

計算のオフロード, 3.7.1

例, 3.8

F

フォーラム, 1.4

G

GLMモデル

例, 7.3.5.1

J

結合, 3.4

L

「Learning R Series」プレゼンテーション, 1.3

データのロード, 3.3.2

M

データの実体化, 3.3.3

モデル

属性評価, 7.3.3

ディシジョン・ツリー, 7.3.4

一般化線形モデル, 7.3.5

k-Means, 7.3.6

Naive Bayes, 7.3.7

サポート・ベクター・マシン, 7.3.8

O

Oracle Data Mining

モデル, 7

Oracle R Enterprise, 3.2 Oracle R Enterpriseのデータ型, 3.4 Oracle Technology NetworkのWebページ, 1 ore.corr, 4.2 ore.create, 3.3.2 ore.crosstab, 4.3 ore.drop, 3.3.5 ore.extend, 4.3.2.10 ore.frame, 3.1 ore.freq, 4.4 ore.lm, 6 ore.pull, 3.3.6 ore.push, 3.3.3 ore.rank, 4.5 OREShowDocコマンド, 3.2 ore.sort, 4.6 ore.stepwise, 6 ore.summary, 4.7 ore.univariate, 4.8 概要, 1

P

Rへの表のプル, 3.3.6

R

Rスクリプト, 8.4.1

回帰モデル

構築, 3.6.1

一連の構築, 3.7.2

スコア, 3.6.1

RQADMINロール, 8.1.1 rqGroupEval, 8.4.2.1

S

サンプル・プログラム, 3.8.3

スクリプトの例

ブログ, 8.3.11

チュートリアル, 8.3.11

セキュリティ, 8.4.1 サーバー, 1.1 生成されたRエンジン, 1.1 SQL関数, 8.4.2 統計エンジン, 1 サポートされる構成, 1.1.1, 1.1.1 サポートされる演算子および関数, 2.2 サポートされるパッケージ, A

Oracle R Distribution, A.1

Oracle R Enterprise, A.2

T

表, 3.1

透過層, 1

V

ドキュメントの表示, 3.2

Copyright © 2012, 2013, Oracle and/or its affiliates. All rights reserved.