ヘッダーをスキップ
Oracle® R Enterpriseユーザーズ・ガイド
リリース1.2 for Linux, Solaris, AIX, and Windows
B71357-01
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

3 Oracle R Enterpriseの使用方法

この章では、Oracle R Enterpriseを使用して、Oracle Databaseの表またはビューに格納されたデータを分析する方法を説明します。表のデータを分析する前に、「Oracle Databaseの表」の説明に従って、データベースに接続する必要があります。

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

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

これらの例はすべて、オープン・ソースRのデフォルト・グラフィカル・ユーザー・インタフェースであるR Consoleを使用して作成されました。

ore.connectore.attachore.syncおよびore.lsの詳細は、「Microsoft Windows上でのOracle R Enterpriseクライアントの起動」「Linux、SolarisまたはAIX上でのOracle R Enterpriseクライアントの起動」および「Oracleデータベースへの接続」を参照してください。

Oracle R Enterpriseには、第5章で説明するOracle R Enterprise統計関数も組み込まれています。

Oracle Databaseの表

Oracle R Enterpriseを使用してデータベース表に格納されているデータを分析するための最初のステップは、Microsoft Windows上でOracle R Enterpriseクライアントを起動することまたはLinux、SolarisまたはAIX上でOracle R Enterpriseクライアントを起動することです。

Oracle R Enterpriseによって作成されたオブジェクトは、ore接頭辞で識別されます。ore.ls()から返された任意のオブジェクトを選択し、class(OBJECTNAME)またはclass(OBJECTNAME$COLUMN_NAME)と入力します。

次に例を示します。

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

接頭辞oreが、そのクラス名に適用されます。これは、そのオブジェクトが、Oracle Database 12cリリース1 (12.1)内の対応するオブジェクトのメタデータ(コメントではなく)を保持するOracle R Enterpriseによって作成されたオブジェクトであることを示しています。

2つの重要なメタデータ・オブジェクトは次のとおりです。

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

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

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

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

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

R> OREShowDoc()

Oracle R Enterpriseのデータ

Oracle R Enterpriseをインストールするときに、次のようにNARROWとONTIME_Sの2つの表がrquserスキーマにロードされます。

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

Oracle R Enterpriseには、次の関数が組み込まれています。

データベースのデータのロード

次の手順に従って、システムのファイルから、Oracle Database 12cリリース1 (12.1)へデータをロードします。

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

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

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

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

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

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" "NARROW"   "ONTIME_S"
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> 

Rデータの実体化

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

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

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.drop(table="NAMEOFTABLE")

たとえば、このコマンドは、DF_TABLEを削除します。

ore.drop(table="DF_TABLE")

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

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


注意:

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

たとえば、次のように、ore.pull()を使用して、表NARROWからデータ・フレームdf_narrowを作成し、df_narrowがデータ・フレームであることを確認します。

R> df_narrow <- ore.pull(NARROW)
R> class(df_narrow)
[1] "data.frame"

Oracle R Enterpriseの透過層

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

R言語構文は、Oracle Database 12cリリース1 (12.1)オブジェクトにマップされているオブジェクトに対してサポートされています。次のRデータ型が、オーバーロードされており、データベース・オブジェクトにマップされ、データベース内での実行が可能になっています。

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

  • ファクタ

  • データ・フレーム

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

    • 線形代数クロス積

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

class(object)は、そのようなマップされたオブジェクトのデータ型をレポートします。次に例を示します。

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

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

  • 数学的変換: abs、sign、sqrt、ceiling、floor、trunc、cummax、cummin、cumprod、cumsum、log、log10、log2、log1p、acos、acosh、asin、asinh、atan、atanh、exp、expm1、cos、cosh、sin、sinh、tan、tanh、gamma、lgamma、digamma、trigamma、round、signif、pmin、pmax、zapsmall

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

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

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

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

  • 集合演算子: unique、%in%

  • 代入: <-、=、->

  • 文字列演算: tolower、toupper、casefold、toString、chatr、sub、gsub、substr、substring、paste、nchar

  • データ・フレームの結合: 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

  • 回帰: ore.lm() - lm()のバリアント

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

  • メタデータ関数: attributes、nrow、NROW、ncol、NCOL、nlevels、names、row、col、dimnames、dim、length、row.names、col.names、levels、reorder

  • グラフィック: hist、boxplot、plot、smoothScatter

  • ガベージ・コレクション: gc(エラー後に暗黙的に作成された一時表および明示的に作成された一時表の削除)

  • 変換関数: as.ore.{character, factor, integer, logical, numeric, vector}

  • テスト関数: is.ore.{character, factor, integer, logical, numeric, vector}

  • 保存: ore.push(表は、Rメモリー内で自動的にリフレッシュされます)

次の追加の関数のカテゴリは、Oracle R Enterpriseデータ型との間の変換およびそのデータ型に対するチェックを提供します。

  • 仮説検定: wilcox.test、ks.test、var.test、binom.test、chisq.test、t.test、bartlett.test

  • ベッセル関数: Bessel(I,J,K,Y)

  • ガンマ関数: gamma、lgamma、digamma、trigamma(算術関数グループの一部)

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

  • マトリクス演算: %*%(マトリクスの乗算)、crossprod(マトリクスのクロス積)、tcrossprod(BをA回転置したマトリクスのクロス積)

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

Oracle R Enterpriseでは、すべてのデータの準備および分析をデータベース内で直接実行できるように、データの事前処理機能を広範囲にわたってサポートすることを原則としています。Oracle R Enterpriseで使用できない統計手法を使用する必要がある場合は、Oracle R Enterpriseを使用してデータを事前処理およびフィルタ処理すると、Rにプルするデータ量を大幅に削減できます。

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

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

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

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

    # Push built-in R data set iris to database
    ore.create(iris, table="IRIS")
    head(iris)
    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のデータベース埋込みRエンジン

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

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

回帰モデルの構築

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

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計算の実行

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

mod <- ore.doEval(
   function() {
      library(biglm)
      dat <- ore.pull(ONTIME_S)
      mod <- biglm(ARRDELAY ~ DISTANCE + DEPDELAY, dat)
      mod
    });
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, param) {
     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のサンプル・ライブラリを参照してください。これらの関数は、すべてOracle R Enterpriseのデータ・フレームに対して処理を実行します。

  • ore.summary: 強力な列の複数集計を可能にします。

  • ore.rank: 複数列にわたる柔軟なランキングを可能にします。

  • ore.sort: 1つ以上の列に沿った柔軟なソートを可能にします。

  • ore.corr: 数値列の相関分析を可能にします。

  • ore.crosstab: 列間の分析を可能にします。

  • ore.freq: 数値列のクロス集計の分析を可能にします。

  • Rモデルのore.predictにより、データベースに格納されているデータとRモデルを使用して予測を実行できます。

Oracle R EnterpriseのSQL関数

SQL問合せを介してRコードを実行できるOracle R Enterpriseユーザーには、RQROLEロールを付与する必要があります。

データベースでのRスクリプトの実行(完全自動処理)を可能にするため、Oracle R Enterpriseは、SQLでore.doEval()ore.groupApply()およびore.indexApply()のバリアントを提供しています。(ore.doEval()ore.groupApply()およびore.indexApply()は、「Oracle R Enterpriseのデータベース埋込みRエンジン」で説明します。)

SQL関数は、次のとおりです。

  • rqTableEval()

  • rqEval()

  • rqRowEval()

rqGroupEval()関数もコーディングできます。

rq*:Eval()関数の構文は同じです。

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>,
      'function(x,param) {
        registered-R-code
     ] ')

説明:

  • 最初のカーソルは入力カーソルです。入力は、4番目のパラメータに記述されているR閉包に、表全体、グループまたは1つの行として一度に渡されます。

  • 2番目のカーソルは、パラメータ・カーソルです。1つの値を渡せます(つまり、実装するモデルの集まり)。

  • 問合せによって、出力表の定義が指定されます。このパラメータがNULLである場合、出力はBLOBです。出力はXMLにすることもできます。

  • grouping col-nameは、オプションです。これはグループ化列の名前を提供します。

  • num_rowsは、オプションです。これは関数に一度に提供する行の数を提供します。

  • registeredR-codeは、実行するR関数の登録済バージョンです。詳細は、「Rスクリプトの登録」を参照してください。

次の例は、これらの関数の使用方法を示しています。

  • この例では、表fishのすべての行を、他のパラメータを取らず、すべての入力データおよび値のROWSUMを含むoutputを生成するR関数への入力として使用します。

    input(x)とそのR関数のパラメータ(param)の両方がオプションであることに注意してください。

    select * from table(rqTableEval(
      cursor(select * from fish),
      NULL,
      'select t.*, 1 rowsum from fish t',
      'function(x, param) {
        dat <- data.frame(x, stringsAsFactors=F)
        cbind(dat, ROWSUM = apply(dat,1,sum))
      }'));
    
  • この例は、表fishからR関数にn=1(4番目のパラメータ)行を一度に渡す方法を示しています。この関数にパラメータは必要ありません。この関数によって、出力においてfishに別の列として追加されるROWSUMが生成されます。

    select * from table(rqRowEval(
      cursor(select * from fish),
      NULL,
     'select t.*, 1 rowsum from fish t',
      1,
      'function(x, param) {
        dat <- data.frame(x, stringsAsFactors=F)
        cbind(dat, ROWSUM = apply(dat,1,sum)+10)
      }'));
    

rqGroupEval()関数

rqGroupEval()関数に該当するものはありません。データおよびグループ化列に基づいてrqGroupEval()のプライベート・バージョンを定義する必要があります。これは、表関数インフラストラクチャの制約です。

ONTIME_Sサンプル・データに基づいた例を次に示します。データ・カーソルはすべてのデータを使用しますが、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は違います。

Rスクリプトの登録

セキュリティ上の理由により、最初にシステムで一意の名前でRスクリプトを登録し、rq*Eval表関数へのコールにおいて実際のスクリプトのかわりに新しい名前を使用する必要があります。

スクリプトおよびスクリプトをリストするビューを作成および削除する管理関数が次のように2つあります。

  • sys.rqScriptCreate

  • sys.rqScriptDrop

  • sys.rq_scriptsビューによって、作成したスクリプトをリストおよび使用できます

「スクリプトの作成および使用に必要なロール」の説明のように、スクリプトおよびビューには、権限付与が必要です。

次に、スクリプトの登録方法および登録済スクリプトの使用方法の例を示します。

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;

スクリプトの作成および使用に必要なロール

sys.rqScriptCreateおよびsys.rqScriptDropを実行するには、管理ロールRQADMINを付与されている必要があります。

RQROLEロールには、sys.rq_scriptsビューのSELECT権限が付与されています。

サーバーをインストールするときにRQADMINおよびRQROLEロールが作成されます。「管理ロール」を参照してください。

Oracle R Enterpriseの例

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

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

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

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

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

  1. Rを起動し、library(ORE)を使用してOREパッケージをロードし、データベースに接続します。Rprofileが使用可能である場合は、後半の手順は自動です。

  2. これらの例の大部分では、Rデータ・フレームirisが使用されます。irisはRに同梱されています。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
    
  3. ここで、接続しているデータベースに、データ・フレームirisをロードします。

    これらの例では、irisのデータベース表バージョンには、IRIS_TABLEという名前が付けられています。IRIS_TABLEを削除し、接続しているスキーマにこの名前の表がないことを確認します。

    ore.drop(table = "IRIS_TABLE")
    

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

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

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

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

    R> ore.ls()
    [1] "IRIS_TABLE" "NARROW"     "ONTIME_S" 
    
  5. IRIS_TABLEは、データベースに格納されている表であり、R側のメタデータのみが含まれています。

    R> class(IRIS_TABLE)
    [1] "ore.frame"
    attr(,"package")
    [1] "OREbase"
    
  6. 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
    
  7. modeを使用して、列SPECIESのデータ型を表示します。

    mode(IRIS_TABLE$SPECIES)
    [1] "raw"
    
  8. いくつかのアルゴリズムは、データはすべて数値である場合にのみ機能します。次の手順に従って、非数値列SPECIESを含まない表IRIS_TABLE_Nを作成します。

    IRIS_TABLE_N=IRIS_TABLE[,c("SEPAL_LENGTH", "SEPAL_WIDTH",  "PETAL_LENGTH", "PETAL_WIDTH")]
    

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値の処理

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

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

次の手順に従って、サンプルを実行します。

  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がどのように処理されるのかを確認します。オゾンが30未満のすべての観測データを返します。

    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
    

例のリスト

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

これらの完全なリストにアクセスするには、次のように入力します。

R> demo(package = "ORE")

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

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

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

table_apply.R   Execute R code on all rows of a table passed in at once
aggregate.R     Demonstrates aggregations. See also summary.R
analysis.R      Demonstrates basic analysis and data processing operations
basic.R         Demonstrates basic connectivity to database
binning.R       Demonstrates binning in R
columnfns.R     Demonstrates use of column functions
corr.R          Correlation matrix (Pearson's, Spearman/Kendalls)
crosstab.R      Frequency cross-tabulations. Also see freq.R
derived.R       Handling derived columns
distributions.R Distribution, Density, and Quantile Functions
doEval.R        Demonstrates support for database-enabled parallel simulations
freqanalysis.R  Frequency cross-tabulations. Also see crosstab.R
graphics.R      Demonstrates visual analysis (boxplot, histogram)
group_apply.R   Execute R code for different sets of rows, one set per group
hypothesis.R    Hypothesis Testing Functions(binomial, chi square, T test, etc.)
matrix.R        Matrix operations
nulls.R         Demonstrates handling of nulls in SQL vs. NAs in R
push_pull.R     Demonstrates collaborative processing between database and client
rank.R          Ranking of observations (ranking, handling ties, etc.)
reg.R           Multivariate Regression
row_apply.R     Execute R code on each row
sql_like.R      Demonstrates how R commands map to SQL operations
stepwise.R      Stepwise Multivariate Regression
summary.R       Demonstrates summary functionality