36.2 DBMS_DATA_MINING_TRANSFORM

DBMS_DATA_MINING_TRANSFORMでは、データ・マイニングで一般的に使用されている一連の変換が実装されます。

この章のトピックは、次のとおりです:

36.2.1 DBMS_DATA_MINING_TRANSFORMの使用

この項では、DBMS_DATA_MINING_TRANSFORMパッケージの使用に関連する項目について説明します。

36.2.1.1 DBMS_DATA_MINING_TRANSFORMの概要

変換とは、1つ以上の列のデータを変更するSQL式のことです。

データを使用してマイニング・モデルを作成するには、通常、事前にそれらのデータに一定の変換処理を行う必要があります。多くのデータ・マイニング・アルゴリズムに特定の変換要件が存在します。

スコアリングされるデータは、モデルの作成(トレーニング)に使用されたデータと同じ方法で変換される必要があります。

外部変換または埋込み変換

DBMS_DATA_MINING_TRANSFORMでは、変換を実装するための2つのアプローチが提供されます。指定のモデルに対して、次のいずれかを実行できます。

変換リストを作成してCREATE_MODELに渡す場合、変換式は、モデルに埋め込まれ、モデルが適用されると常に自動的に実装されます。

ビューを作成する場合、変換式は、モデルの外部に存在します。ユーザーは、モデルを適用するたびに変換を再作成する必要があります。

ノート:

埋込み変換によって、モデルの使いやすさが大幅に向上し、モデル管理のプロセスも簡単になります。

自動変換

Oracle Data Miningでは、自動データ準備(ADP)モードがサポートされます。ADPを有効にすると、アルゴリズム固有のほとんどの変換は、自動的に埋め込まれます。他の追加の変換は、埋込み変換リストまたはビューで明示的に指定する必要があります。

ADPを有効にし、変換リストを使用してモデルを作成すると、両方の変換セットが埋め込まれます。モデルは、ADPによって指定された自動変換を実行する前に、変換リストに基づいたユーザー指定の変換を実行します。

変換リスト内で、個々の属性のADPを選択的に無効化できます。

DBMS_DATA_MINING_TRANSFORMでの変換

この項では、DBMS_DATA_MINING_TRANSFORMによってサポートされる変換について要約します。

ビニング

ビニングとは、連続値または離散値をカーディナリティ(基数)の少ない離散値(ビン)に変換することを示します。

線形正規化

正規化とは、連続値を特定の範囲(通常0から1の間)に変換するプロセスのことです。正規化では、ある数(shift)を数値から差し引き、その結果を別の数(scale)で割ることによって各数値を変換します。

x_new = (x_old-shift)/scale
  • 最小値と最大値による正規化

    正規化は、次のshiftおよびscaleを使用した最小値と最大値に基づきます。

    shift = min
    scale = max-min
    

    「INSERT_NORM_LIN_MINMAXプロシージャ」を参照してください。

  • スケールによる正規化

    正規化は、次のshiftおよびscaleを使用した最小値と最大値に基づきます。

    shift = 0 
    scale = max{abs(max), abs(min)}
    

    「INSERT_NORM_LIN_SCALEプロシージャ」を参照してください。

  • Zスコアによる正規化

    正規化は、次のshiftおよびscaleを使用した平均値と標準偏差に基づきます。

    shift = mean 
    scale = standard_deviation
    

    「INSERT_NORM_LIN_ZSCOREプロシージャ」を参照してください。

外れ値処理

外れ値は、それ以外の残りのデータから大きく離れた位置にある数値です。外れ値によって、データ・マイニングの結果を人為的に非対称化することができます。

欠損値の処理

欠損データは、スパースなデータを示す場合と、複数の値がランダムに欠損していることを示す場合があります。DBMS_DATA_MINING_TRANSFORMでは、欠損値の影響を最小限に抑えるために次の変換がサポートされます。

ノート:

Oracle Data Miningには、欠損データを処理するためのデフォルトのメカニズムもあります。詳細は、Oracle Data Miningユーザーズ・ガイドを参照。

36.2.1.2 DBMS_DATA_MINING_TRANSFORMのセキュリティ・モデル

DBMS_DATA_MINING_TRANSFORMパッケージは、ユーザーSYSによって所有され、データベース・インストールの一環としてインストールされます。このパッケージの実行権限は、PUBLICに付与されます。このパッケージ内のルーチンは、実行者権限(現行のユーザーの権限)を使用して実行されます。

DBMS_DATA_MINING_TRANSFORM.INSERT_*プロシージャには、変換目的で入力データを指定できるdata_table_nameパラメータがあります。data_table_nameの値には、物理表またはビューの名前を指定できます。data_table_nameパラメータには、インライン問合せを指定することもできます。

ノート:

インライン問合せは、変換用データの指定に使用できるため、コール側ルーチンで入力文字列に対して必要なSQLインジェクション・チェックを実行することを強くお薦めします。

参照:

DBMS_DATA_MINING_TRANSFORM.INSERT_*プロシージャの詳細は、「操作上のノート」を参照してください。

36.2.1.3 DBMS_DATA_MINING_TRANSFORMのデータ型

DBMS_DATA_MINING_TRANSFORMは、次の表で説明するデータ・タイプを定義します。

表36-114 DBMS_DATA_MINING_TRANSFORMのデータ・タイプ

リスト・タイプ リスト要素 説明
COLUMN_
LIST
VARRAY(1000) OF varchar2(32)

COLUMN_LISTは、列名の引用符で囲まれた識別子および引用符で囲まれていない識別子を格納します。

COLUMN_LISTは、INSERTプロシージャのexclude_listパラメータのデータ・タイプです。例については、「INSERT_AUTOBIN_NUM_EQWIDTHプロシージャ」を参照してください。

VARRAY構造の移入の詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

DESCRIBE_
LIST
DBMS_SQL.DESC_TAB2

TYPE desc_tab2 IS TABLE OF desc_rec2 
INDEX BY BINARY_INTEGER

TYPE desc_rec2 IS RECORD (
col_type            BINARY_INTEGER := 0,
col_max_len         BINARY_INTEGER := 0,
col_name            VARCHAR2(32767):= '',
col_name_len        BINARY_INTEGER := 0,
col_schema_name     VARCHAR2(32)   := '',
col_schema_name_len BINARY_INTEGER := 0,
col_precision       BINARY_INTEGER := 0,
col_scale           BINARY_INTEGER := 0,
col_charsetid       BINARY_INTEGER := 0,
col_charsetform     BINARY_INTEGER := 0,
col_null_ok         BOOLEAN := TRUE);

DESCRIBE_LISTは、変換リスト適用後のデータ表の列を説明します。DESCRIBE_LISTは、DESCRIBE_STACKプロシージャによって戻されます。

DESC_TAB2タイプおよびDESC_REC2タイプは、DBMS_SQLパッケージで定義されています。「DESC_REC2レコード・タイプ」を参照してください。

DESC_REC2col_typeフィールドは、列のデータ・タイプを識別します。データ・タイプは、組込みのデータ・タイプを表現する数値定数として表されます。たとえば、1は可変長の文字列を示します。Oracle組込みのデータ・タイプのコードは、『Oracle Database SQL言語リファレンス』にリストされています。Oracle Data Miningのネストしたタイプのコードは、「定数」を参照してください。

DESC_REC2col_nameフィールドは、列名を識別します。このフィールドには、列名、別名または式が移入されます。列名がSELECT式の場合、非常に長くなる可能性があります。式の長さが30バイトを超えると、その式は、別名を指定しないかぎりビューで使用できません。

TRANSFORM_
LIST
TABLE OF transform_rec

TYPE transform_rec IS RECORD (
attribute_name      VARCHAR2(30),
attribute_subname   VARCHAR2(4000),
expression          EXPRESSION_REC,
reverse_expression  EXPRESSION_REC,
attribute_spec      VARCHAR2(4000));

TYPE expression_rec IS RECORD (
lstmt       DBMS_SQL.VARCHAR2A,
lb          BINARY_INTEGER DEFAULT 1,
ub          BINARY_INTEGER DEFAULT 0);

TYPE varchar2a IS TABLE OF VARCHAR2(32767)
INDEX BY BINARY_INTEGER;

TRANSFORM_LISTは、モデルに埋め込むことができる変換のリストです。TRANSFORM_LISTは、CREATE_MODELプロシージャによって引数として使用されます。

TRANSFORM_LISTの各フィールドは、単一属性の変換方法を指定するTRANSFORM_RECです。attribute_nameは列名です。attribute_subnameは、列がネストしている場合はネストした属性の名前で、それ以外の場合は、attribute_subnameはNULLです。

expressionフィールドは、属性を変換するためのSQL式を格納します。反転式の詳細は、「変換リストについて」を参照してください。

attribute_specフィールドは、モデル作成中に属性を特定の方法で処理するために使用できます。詳細は、表36-146を参照してください。

TRANSFORM_RECの式のタイプは、EXPRESSION_RECです。lstmtフィールドは、VARCHAR2(32767)の表であるVARCHAR2Aを格納します。VARCHAR2Aデータ・タイプでは、変換式をVARCHAR2Aの複数の行に分割できるため、非常に長い変換式を使用できます。VARCHAR2Aタイプは、DBMS_SQLパッケージで定義されています。「VARCHAR2A表タイプ」を参照してください。

ub (上限)フィールドおよびlb (下限)フィールドは、VARCHAR2A表に存在する行の数を示します。ub < lb (デフォルト)の場合、EXPRESSION_RECは空で、lb=ub=1の場合、1つの行が存在し、lb=1およびub=2の場合は、2つの行が存在する、というように続きます。

36.2.1.4 DBMS_DATA_MINING_TRANSFORMの定数

DBMS_DATA_MINING_TRANSFORMは、次の表で説明する定数を定義します。

表36-115 DBMS_DATA_MINING_TRANSFORMの定数

定数 説明

NEST_NUM_COL_TYPE

100001

変換リストの属性が、DM_NESTED_NUMERICALSの列にある行から取得されることを示します。

ネストした量的属性は次のように定義されます。

attribute_name       VARCHAR2(4000)
value                NUMBER

NEST_CAT_COL_TYPE

100002

変換リストの属性が、DM_NESTED_CATEGORICALSの列にある行から取得されることを示します。

ネストした質的属性は次のように定義されます。

attribute_name       VARCHAR2(4000)
value                VARCHAR2(4000)

NEST_BD_COL_TYPE

100003

変換リストの属性が、DM_NESTED_BINARY_DOUBLESの列にある行から取得されることを示します。

ネストしたバイナリdouble属性は次のように定義されます。

attribute_name       VARCHAR2(4000)
value                BINARY_DOUBLE

NEST_BF_COL_TYPE

100004

変換リストの属性が、DM_NESTED_BINARY_FLOATSの列にある行から取得されることを示します。

attribute_name       VARCHAR2(4000)
value                BINARY_FLOAT

参照:

Oracle Data Miningでのネストしたデータの詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。

36.2.2 DBMS_DATA_MINING_TRANSFORMの操作上のノート

DBMS_DATA_MINING_TRANSFORMパッケージによって、データ変換を指定するための柔軟なフレームワークが提供されます。モデルに変換を埋め込む場合(推奨される方法)、変換リスト・オブジェクトを作成してそのリストをCREATE_MODELプロシージャに渡します。埋込みなしでデータを変換する場合、ビューを作成します。

変換式は、変換リストに指定されている場合、モデルによって実行されます。変換式は、ビューに指定されている場合、ビューによって実行されます。

変換定義

変換定義は、データを変換するSQL式を生成するために使用します。たとえば、数値列を正規化するための変換定義は、そのデータのshift値とscale値です。

DBMS_DATA_MINING_TRANSFORMパッケージによって、プロシージャをコールして変換定義を計算するか、変換定義を独自に計算することができます(またはこれら両方が可能です)。

変換定義表

DBMS_DATA_MINING_TRANSFORMには、変換定義を計算してそれらを変換定義表に挿入するINSERTプロシージャが含まれます。変換定義表の値を変更することや、それらの値を独自に移入することができます。

XFORMルーチンは、移入された定義表を使用して外部ビューのデータを変換します。STACKルーチンは、移入された定義表を使用して変換リストを作成します。

定義表に基づいて変換を指定するには、次のステップを実行します。

  1. CREATEルーチンを使用して変換定義表を作成します。

    これらの表には、指定のタイプの変換に対応する変換定義を格納する列が含まれます。たとえば、CREATE_BIN_NUMプロシージャは、データ値を格納する列と、関連するビン識別子を格納する別の列を含んだ定義表を作成します。

  2. INSERTルーチンを使用して変換定義を計算し、表に挿入します。

    INSERTルーチンでは、変換定義の計算に特定の方法が使用されます。たとえば、INSERT_BIN_NUM_EQWIDTHプロシージャは、最小値と最大値を識別してビン境界を等間隔に設定することで、ビン境界を計算します。

  3. STACKルーチンまたはXFORMルーチンを使用して、次のように定義表の情報に基づいて変換式を生成します。

    • STACKルーチンを使用して変換リストに変換式を追加します。変換リストをCREATE_MODELプロシージャに渡します。変換式は、1つの長いSQL問合せに構成され、モデルに埋め込まれます。

    • XFORMルーチンを使用してビュー内の変換式を実行します。変換は、モデルの外部に存在するため、新規データにモデルを適用するたびに再作成する必要があります。

定義表を使用しない変換

STACKルーチンは、変換リストに変換式を追加するための唯一の方法ではありません。定義表を使用せずに変換リストを作成することも可能です。

定義表を使用せずに変換を指定するには、次のステップを実行します。

  1. 属性を変換するためのSQL式を記述します。

  2. 変換を元に戻すためのSQL式を記述します。(「DBMS_DATA_MINING_TRANSFORM - 変換リストについて」「逆変換とモデルの透過性」を参照)

  3. 属性のADPを無効にするかどうかを指定します。デフォルトでは、モデルに対してADPを指定した場合、属性に対してADPが有効になります。(「DBMS_DATA_MINING_TRANSFORM - 変換リストについて」「自動データ準備の無効化」を参照)

  4. 変換リストに情報を追加するSET_TRANSFORMプロシージャへのコールでSQL式およびADP命令を指定します。

  5. 変換する属性ごとにステップ1から4を繰り返します。

  6. 変換リストをCREATE_MODELプロシージャに渡します。変換式は、1つの長いSQL問合せに構成され、モデルに埋め込まれます。

    ノート:

    SET_TRANSFORMを使用して指定するSQL式は、VARCHAR2に収まる必要があります。それより長い式を指定するには、SET_EXPRESSIONプロシージャを使用します。SET_EXPRESSIONでは、VARCHAR2配列に行を追加して式を作成できます。

スタックについて

変換リストは、変換レコードをスタックすることで作成されます。変換リストは、下から上へと評価されます。各変換式は、スタック内でその下位にある変換式の結果に依存します。

36.2.2.1 DBMS_DATA_MINING_TRANSFORM - 変換リストについて

変換リストの要素は、変換レコードです。各変換レコードによって、単一属性の変換を管理するためにモデルで必要とされるすべての情報が提供されます。

各変換レコードには、次のフィールドが含まれます。

  • attribute_name: 変換されるデータの列の名前。

  • attribute_subname: attribute_nameがネストされた列の場合はネストされた属性の名前。それ以外の場合はNULL

  • expression: 属性を変換するためのSQL式。

  • reverse_expression: 変換を元に戻すためのSQL式。

  • attribute_spec: モデル作成中に、属性の特別な処理を識別します。詳細は、表36-146を参照してください。

参照:

逆変換とモデルの透過性

アルゴリズムによって、変換された属性が操作され、モデルの調整およびスコアリングが行われます。ただし、変換された属性はエンド・ユーザーには重要でない場合があります。たとえば、属性xがビン1から4に変換された場合、ビン名1、2、3および4がアルゴリズムによって操作されますが、ユーザーはビン1から4に関するモデルのディテールまたは数値1から4の予測を必要としない可能性が高いです。

モデルのディテールおよび予測で元の属性値を戻すために、属性の変換レコードに反転式を指定できます。たとえば、属性yに対して変換式'log(10, y)'を指定する場合、逆変換式'power(10, y)'を指定できます。

逆変換によって、モデルの透過性が有効になります。内部処理がユーザーに対して透過的になります。

ノート:

STACKプロシージャでは、正規化の変換が自動的に元に戻されますが、ビニング、クリッピングまたは欠損値の変換を元に戻すメカニズムは提供されません。

DBMS_DATA_MINING.ALTER_REVERSE_EXPRESSIONプロシージャを使用すると、既存のモデルに対して逆変換式の指定または更新を行うことができます。

参照:

表36-114

ALTER_REVERSE_EXPRESSIONプロシージャ

モデル・ディテール・ファンクションへのリンクは、「DBMS_DATA_MININGサブプログラムの要約」を参照してください。

自動データ準備の無効化

ADPは、モデル固有の設定(PREP_AUTO)によって制御されます。PREP_AUTO設定は、個々の属性に対して無効化しないかぎり、すべてのモデル属性に影響します。

ADPを有効化してattribute_specNOPREPに設定すると、その属性に指定した変換のみが評価されます。ADPを有効化してattribute_specNOPREPに設定しない場合、その属性に指定した変換ので自動変換が評価されます。

ADPをモデルに対して有効化しない場合、変換レコードのattribute_specフィールドは無視されます。

参照:

PREP_AUTO設定の詳細は、「自動データ準備」を参照してください。

変換リストへの変換レコードの追加

変換リストは、変換レコードのスタックです。新しい変換レコードを追加すると、そのレコードはスタックの一番上に追加されます。(詳細は、「スタックについて」を参照)

SET_TRANSFORMを使用して変換リストに変換レコードを追加する場合、変換レコードのすべてのフィールドに値を指定できます。

STACKプロシージャを使用して変換リストに変換レコードを追加する場合、変換式のフィールドのみが移入されます。正規化の変換の場合、逆変換式のフィールドも移入されます。

STACKプロシージャとSET_TRANSFORMの両方を使用して1つの変換リストを作成できます。1回のSTACKプロシージャ・コールで、指定した変換定義表にすべての属性の変換レコードが追加されます。1回のSET_TRANSFORMコールで、単一属性の変換レコードが1つ追加されます。

36.2.2.2 DBMS_DATA_MINING_TRANSFORM - スタックおよびSTACKプロシージャについて

変換リストは、変換レコードをスタックすることで作成されます。変換リストは、下から上へと評価されます。各変換式は、スタック内でその下位にある変換式の結果に依存します。

STACKプロシージャ

STACKプロシージャは、変換定義表の情報から変換レコードを作成します。たとえば、STACK_BIN_NUMは、量的ビニング用の定義表に指定された各属性の変換レコードを作成します。STACKプロシージャは、変換レコードを次のようにスタックします。

  • 属性が定義表に指定されているが、変換リストに指定されていない場合、STACKプロシージャは、変換レコードを作成し、(可能であれば)逆変換を計算し、変換レコードに変換および逆変換を挿入して、変換リストの一番上に変換レコードを追加します。

  • 属性が変換リストに指定されているが、定義表に指定されていない場合、STACKプロシージャは何の処理も行いません。

  • 属性が定義表および変換リストに指定されている場合、STACKプロシージャは、定義表の変換式を変換レコードの変換式の上位にスタックし、逆変換を更新します。表36-114および例36-6を参照してください。

例36-3 クリッピング変換のスタック

この例は、STACK_CLIPプロシージャによって変換リストに変換レコードを追加する方法を示しています。クリッピング変換は、スタック後にCOL1およびCOL2で元に戻されないことに注意してください(「DBMS_DATA_MINING_TRANSFORM - 変換リストについて」「逆変換とモデルの透過性」を参照)。

参照先:

次のように移入されたクリッピング定義表があるとします。

col att lcut lval rcut rval

COL1

null

-1.5

-1.5

4.5

4.5

COL2

null

0

0

1

1

スタック前の変換リストは次のとおりだとします。

-------------------------
transformation record #1:
-------------------------
     attribute_name       = COL1
     attribute_subname    = null
     expression           = log(10, COL1)
     reverse_expression   = power(10, COL1)
-------------------------
transformation record #2:
-------------------------
     attribute_name       = COL3
     attribute_subname    = null
     expression           = ln(COL3)
     reverse_expression   = exp(COL3)

スタック後の変換リストは次のとおりです。

-------------------------
transformation record #1:
-------------------------
     attribute_name       = COL1
     attribute_subname    = null
     expression           = CASE WHEN log(10, COL1) < -1.5 THEN -1.5
                                 WHEN log(10, COL1) > 4.5  THEN 4.5
                                 ELSE log(10, COL1)
                            END;
     reverse_expression   = power(10, COL1)
-------------------------
transformation record #2:
-------------------------
     attribute_name       = COL3
     attribute_subname    = null
     expression           = ln(COL3)
     reverse_expression   = exp(COL3)
-------------------------
transformation record #3:
-------------------------
     attribute_name       = COL2
     attribute_subname    = null
     expression           = CASE WHEN COL2 < 0 THEN 0
                                 WHEN COL2 > 1 THEN 1
                                 ELSE COL2
                            END;
     reverse_expression   = null

36.2.2.3 DBMS_DATA_MINING_TRANSFORM - ネストしたデータの変換

CREATEルーチンによって、属性を識別するための2つの列(colおよびatt)が含まれる変換定義表が作成されます。列colには、データ表の列名が格納されます。データ列がネストしていない場合、attはNULLであり、属性名はcolになります。データ列がネストしている場合、attにはネストした属性の名前が格納され、属性名はcol.attになります。

INSERTルーチンとXFORMルーチンでは、定義表のatt列は無視されます。ネストしたデータは、INSERTルーチンまたはXFORMルーチンのどちらでもサポートされません。

ネストしたデータがサポートされるのは、STACKプロシージャおよびSET_TRANSFORMのみです。ネストしたデータの変換は、常にモデルに埋め込まれます。

DMFでの機能322331-1のネイティブのdouble

Oracle Data Miningのネストした列には、次のタイプが含まれます。

DM_NESTED_NUMERICALS
DM_NESTED_CATEGORICALS
DM_NESTED_BINARY_DOUBLES
DM_NESTED_BINARY_FLOATS

参照:

定数

Oracle Data Miningでのネストした属性の詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。

変換レコードでのネストした属性の指定

変換レコード(TRANSFORM_REC)には、属性を識別するための2つのフィールド(attribute_nameおよびattribute_subname)が含まれます。フィールドattribute_nameには、データ表の列名が格納されます。データ列がネストしていない場合、attribute_subnameはNULLであり、属性名はattribute_nameになります。データ列がネストしている場合、attribute_subnameにはネストした属性の名前が格納され、属性名はattribute_name.attribute_subnameになります。

個々のネストした属性の変換

ネストした列の個々の属性に異なる変換を指定し、その列の残りの属性すべてにデフォルト変換を指定できます。ネストしたデフォルト変換を指定するには、例36-4に示すとおり、attribute_nameフィールドにNULLを指定し、attribute_subnameフィールドにネストした列の名前を指定します。VALUEというキーワードを使用して、変換式でネストした属性の値を表現していることに注意してください。

例36-4 ネストした列の変換

次の文では、COL_N1の2つのネストした属性を変換します。属性ATTR1は正規化を使用して変換され、ATTR2はNULLに設定され、属性の削除変換が行われます(ATTR2はモデルのトレーニングに使用されません)。COL_N1の残りの属性はすべて10で割られます。

DECLARE
  stk dbms_data_mining_transform.TRANSFORM_LIST;
BEGIN
  dbms_data_mining_transform.SET_TRANSFORM(
      stk,'COL_N1', 'ATTR1', '(VALUE - (-1.5))/20', 'VALUE *20 + (-1.5)');
  dbms_data_mining_transform.SET_TRANSFORM(
      stk,'COL_N1', 'ATTR2', NULL, NULL);
  dbms_data_mining_transform.SET_TRANSFORM(
      stk, NULL, 'COL_N1', 'VALUE/10', 'VALUE*10');
END;
/

この文から次のSQLが生成されます。

CAST(MULTISET(SELECT DM_NESTED_NUMERICAL(
                               "ATTRIBUTE_NAME",
                               DECODE("ATTRIBUTE_NAME",
                                 'ATTR1', ("VALUE" - (-1.5))/20,
                                 "VALUE"/10))
                        FROM TABLE("COL_N1")
                       WHERE "ATTRIBUTE_NAME" IS NOT IN ('ATTR2'))
             AS DM_NESTED_NUMERICALS)

変換をCOL_N1.ATTR1およびCOL_N1.ATTR2に指定しない場合、COL_N1のすべての属性にデフォルト変換が使用され、生成されるSQLにDECODEは含まれません。

    CAST(MULTISET(SELECT DM_NESTED_NUMERICAL(
                               "ATTRIBUTE_NAME",
                               "VALUE"/10)
                        FROM TABLE("COL_N1"))
             AS DM_NESTED_NUMERICALS)

DECODEの引数は256個に制限されているため、個々のネストした属性を任意の数だけ指定できるように複数のDECODE関数がネストされます。

ネストした列の追加

例36-5に示すとおり、ネストした列をデータに追加する変換を指定できます。

例36-5 変換リストへのネストした列の追加

DECLARE
    v_xlst dbms_data_mining_transform.TRANSFORM_LIST;
  BEGIN
    dbms_data_mining_transform.SET_TRANSFORM(v_xlst,
      'YOB_CREDLIM', NULL,
      'dm_nested_numericals(
           dm_nested_numerical(
                 ''CUST_YEAR_OF_BIRTH'', cust_year_of_birth),
           dm_nested_numerical(
                 ''CUST_CREDIT_LIMIT'', cust_credit_limit))',
        NULL);
    dbms_data_mining_transform.SET_TRANSFORM(
              v_xlst, 'CUST_YEAR_OF_BIRTH', NULL, NULL, NULL);
    dbms_data_mining_transform.SET_TRANSFORM(
              v_xlst, 'CUST_CREDIT_LIMIT', NULL, NULL, NULL);
    dbms_data_mining_transform.XFORM_STACK(
              v_xlst, 'mining_data', 'mining_data_v');
END;
/

set long 2000
SELECT text FROM user_views WHERE view_name IN 'MINING_DATA_V';
 
TEXT
---------------------------------------------------------------------------------
SELECT "CUST_ID","CUST_POSTAL_CODE",dm_nested_numericals(
        dm_nested_numerical(
           'CUST_YEAR_OF_BIRTH', cust_year_of_birth),
        dm_nested_numerical(
           'CUST_CREDIT_LIMIT', cust_credit_limit)) "YOB_CREDLIM" FROM mining_data
 
SELECT * FROM mining_data_v WHERE cust_id = 104500;
 
CUST_ID CUST_POSTAL_CODE YOB_CREDLIM(ATTRIBUTE_NAME, VALUE)
------- ---------------- ---------------------------------------------------------
 104500 68524            DM_NESTED_NUMERICALS(DM_NESTED_NUMERICAL(
                        'CUST_YEAR_OF_BIRTH', 1962),
                         DM_NESTED_NUMERICAL('CUST_CREDIT_LIMIT', 15000))

ネストした変換のスタック

例36-6は、STACK_NORM_LINプロシージャによって変換リストにネストした列COL_Nの変換レコードを追加する方法を示しています。

参照先:

例36-6 ネストした正規化変換のスタック

次のように移入された線形正規化定義表があるとします。

col att shift scale

COL_N

ATT2

0

20

null

COL_N

0

10

スタック前の変換リストは次のとおりだとします。

-------------------------
transformation record #1:
-------------------------
     attribute_name       = COL_N
     attribute_subname    = ATT1
     expression           = log(10, VALUE)
     reverse_expression   = power(10, VALUE)
-------------------------
transformation record #2:
-------------------------
     attribute_name       = null
     attribute_subname    = COL_N
     expression           = ln(VALUE)
     reverse_expression   = exp(VALUE)

スタック後の変換リストは次のとおりです。

-------------------------
transformation record #1:
-------------------------
     attribute_name       = COL_N
     attribute_subname    = ATT1
     expression           = (log(10, VALUE) - 0)/10
     reverse_expression   = power(10, VALUE*10 + 0)
-------------------------
transformation record #2:
-------------------------
     attribute_name       = NULL
     attribute_subname    = COL_N
     expression           = (ln(VALUE)- 0)/10
     reverse_expression   = exp(VALUE *10 + 0)
-------------------------
transformation record #3:
-------------------------
     attribute_name       = COL_N
     attribute_subname    = ATT2
     expression           = (ln(VALUE) - 0)/20
     reverse_expression   = exp(VALUE * 20 + 0)

36.2.3 DBMS_DATA_MINING_TRANSFORMサブプログラムの要約

この表は、DBMS_DATA_MINING_TRANSFORMサブプログラムをアルファベット順に示し、簡単に説明しています。

表36-116 DBMS_DATA_MINING_TRANSFORMパッケージのサブプログラム

サブプログラム 用途

CREATE_BIN_CATプロシージャ

質的ビニングの変換定義表を作成します。

CREATE_BIN_NUMプロシージャ

量的ビニングの変換定義表を作成します。

CREATE_CLIPプロシージャ

クリッピングの変換定義表を作成します。

CREATE_COL_REMプロシージャ

列削除の変換定義表を作成します。

CREATE_MISS_CATプロシージャ

質的欠損値処理の変換定義表を作成します。

CREATE_MISS_NUMプロシージャ

量的欠損値処理の変換定義表を作成します。

CREATE_NORM_LINプロシージャ

線形正規化の変換定義表を作成します。

DESCRIBE_STACKプロシージャ

変換リストを説明します。

GET_EXPRESSIONファンクション

変換式からVARCHAR2チャンクを戻します。

INSERT_AUTOBIN_NUM_EQWIDTHプロシージャ

変換定義表に量的自動等幅ビニング定義を挿入します。

INSERT_BIN_CAT_FREQプロシージャ

変換定義表に質的頻度ベース・ビニング定義を挿入します。

INSERT_BIN_NUM_EQWIDTHプロシージャ

変換定義表に量的等幅ビニング定義を挿入します。

INSERT_BIN_NUM_QTILEプロシージャ

変換定義表に量的クオンタイル・ビニング式を挿入します。

INSERT_BIN_SUPERプロシージャ

量的データおよび質的データの変換定義表に教師ありビニング定義を挿入します。

INSERT_CLIP_TRIM_TAILプロシージャ

変換定義表に量的トリミング定義を挿入します。

INSERT_CLIP_WINSOR_TAILプロシージャ

変換定義表に量的ウィンザライズ定義を挿入します。

INSERT_MISS_CAT_MODEプロシージャ

変換定義表に質的欠損値処理定義を挿入します。

INSERT_MISS_NUM_MEANプロシージャ

変換定義表に量的欠損値処理定義を挿入します。

INSERT_NORM_LIN_MINMAXプロシージャ

変換定義表に最小値と最大値による線形正規化定義を挿入します。

INSERT_NORM_LIN_SCALEプロシージャ

変換定義表にスケールによる線形正規化定義を挿入します。

INSERT_NORM_LIN_ZSCOREプロシージャ

変換定義表にZスコアによる線形正規化定義を挿入します。

SET_EXPRESSIONプロシージャ

式にVARCHAR2チャンクを追加します。

SET_TRANSFORMプロシージャ

変換リストに変換レコードを追加します。

STACK_BIN_CATプロシージャ

変換リストに質的ビニング式を追加します。

STACK_BIN_NUMプロシージャ

変換リストに量的ビニング式を追加します。

STACK_CLIPプロシージャ

変換リストにクリッピング式を追加します。

STACK_COL_REMプロシージャ

変換リストに列削除式を追加します。

STACK_MISS_CATプロシージャ

変換リストに質的欠損値処理式を追加します。

STACK_MISS_NUMプロシージャ

変換リストに量的欠損値処理式を追加します。

STACK_NORM_LINプロシージャ

変換リストに線形正規化式を追加します。

XFORM_BIN_CATプロシージャ

質的ビニング変換を使用してデータ表のビューを作成します。

XFORM_BIN_NUMプロシージャ

量的ビニング変換を使用してデータ表のビューを作成します。

XFORM_CLIPプロシージャ

クリッピング変換を使用してデータ表のビューを作成します。

XFORM_COL_REMプロシージャ

列削除変換を使用してデータ表のビューを作成します。

XFORM_EXPR_NUMプロシージャ

指定された量的変換を使用してデータ表のビューを作成します。

XFORM_EXPR_STRプロシージャ

指定された質的変換を使用してデータ表のビューを作成します。

XFORM_MISS_CATプロシージャ

質的欠損値処理を使用してデータ表のビューを作成します。

XFORM_MISS_NUMプロシージャ

量的欠損値処理を使用してデータ表のビューを作成します。

XFORM_NORM_LINプロシージャ

線形正規化変換を使用してデータ表のビューを作成します。

XFORM_STACKプロシージャ

変換リストのビューを作成します。

36.2.3.1 CREATE_BIN_CATプロシージャ

このプロシージャは、質的ビニングの変換定義表を作成します。

列の説明は、次の表のとおりです。

表36-117 質的ビニングの変換定義表の列

名前 データ・タイプ 説明

col

VARCHAR2(30)

質的データの列の名前。

列がネストしていない場合、列名は属性名でもあります。属性名の詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。

att

VARCHAR2(4000)

colがネストした列の場合、属性のサブ名。

colがネストしている場合、属性名はcol.attです。colがネストしていない場合、attはNULLです。

val

VARCHAR2(4000)

属性の値。

bin

VARCHAR2(4000)

値に対するビン割当て。

構文

DBMS_DATA_MINING_TRANSFORM.CREATE_BIN_CAT (
     bin_table_name     IN VARCHAR2,
     bin_schema_name    IN VARCHAR2 DEFAULT NULL );

パラメータ

表36-118 CREATE_BIN_CATプロシージャのパラメータ

パラメータ 説明

bin_table_name

作成する変換定義表の名前。

bin_schema_name

bin_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

使用上のノート

  1. 質的データの詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。

  2. 変換定義表およびネストしたデータの詳細は、「ネストしたデータの変換」を参照してください。

  3. 次のプロシージャを使用して、変換定義表にデータを移入できます。

次の文では、現行のスキーマにbin_cat_xtblという表を作成します。この表には、質的属性のビン割当てを移入できる列が含まれます。

BEGIN
   DBMS_DATA_MINING_TRANSFORM.CREATE_BIN_CAT('bin_cat_xtbl');
END;
/
DESCRIBE bin_cat_xtbl
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 COL                                                VARCHAR2(30)
 ATT                                                VARCHAR2(4000)
 VAL                                                VARCHAR2(4000)
 BIN                                                VARCHAR2(4000)

36.2.3.2 CREATE_BIN_NUMプロシージャ

このプロシージャは、量的ビニングの変換定義表を作成します。

列の説明は、次の表のとおりです。

表36-119 量的ビニングの変換定義表の列

名前 データ・タイプ 説明

col

VARCHAR2(30)

量的データの列の名前。

列がネストしていない場合、列名は属性名でもあります。属性名の詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。

att

VARCHAR2(4000)

colがネストした列の場合、属性のサブ名。

colがネストしている場合、属性名はcol.attです。colがネストしていない場合、attはNULLです。

val

NUMBER

属性の値。

bin

VARCHAR2(4000)

値に対するビン割当て。

構文

DBMS_DATA_MINING_TRANSFORM.CREATE_BIN_NUM (
     bin_table_name    IN VARCHAR2,
     bin_schema_name   IN VARCHAR2 DEFAULT NULL );

パラメータ

表36-120 CREATE_BIN_NUMプロシージャのパラメータ

パラメータ 説明

bin_table_name

作成する変換定義表の名前。

bin_schema_name

bin_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

使用上のノート

  1. 量的データの詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。

  2. 変換定義表およびネストしたデータの詳細は、「ネストしたデータの変換」を参照してください。

  3. 次のプロシージャを使用して、変換定義表にデータを移入できます。

次の文では、現行のスキーマにbin_num_xtblという表を作成します。この表には、量的属性のビン割当てを移入できる列が含まれます。

BEGIN
  DBMS_DATA_MINING_TRANSFORM.CREATE_BIN_NUM('bin_num_xtbl');
END;
/
 
DESCRIBE bin_num_xtbl
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 COL                                                VARCHAR2(30)
 ATT                                                VARCHAR2(4000)
 VAL                                                NUMBER
 BIN                                                VARCHAR2(4000)

36.2.3.3 CREATE_CLIPプロシージャ

このプロシージャは、外れ値の影響を最小限に抑えるためにクリッピングまたはウィンザライズの変換定義表を作成します。

列の説明は、次の表のとおりです。

表36-121 クリッピングまたはウィンザライズの変換定義表の列

名前 データ・タイプ 説明

col

VARCHAR2(30)

量的データの列の名前。

列がネストしていない場合、列名は属性名でもあります。属性名の詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。

att

VARCHAR2(4000)

colDM_NESTED_NUMERICALSのネストした列の場合、属性のサブ名。colがネストしている場合、属性名はcol.attです。

colがネストしていない場合、attはNULLです。

lcut

NUMBER

属性の最小の標準値。

属性値がxy軸にプロットされている場合、lcutは、この属性の標準値とみなされる値の範囲の左端境界です。

lcutの左側に存在するすべての値は、外れ値です。

lval

NUMBER

lcutの左側の外れ値に割り当てられた値。

rcut

NUMBER

属性の最大の標準値。

属性値がxy軸にプロットされている場合、rcutは、この属性の標準値とみなされる値の範囲の右端境界です。

rcutの右側に存在するすべての値は、外れ値です。

rval

NUMBER

rcutの右側の外れ値に割り当てられた値。

構文

DBMS_DATA_MINING_TRANSFORM.CREATE_CLIP (
     clip_table_name    IN VARCHAR2,
     clip_schema_name   IN VARCHAR2 DEFAULT NULL );

パラメータ

表36-122 CREATE_CLIPプロシージャのパラメータ

パラメータ 説明

clip_table_name

作成する変換定義表の名前。

clip_schema_name

clip_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

使用上のノート

  1. 量的データの詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。

  2. 変換定義表およびネストしたデータの詳細は、「ネストしたデータの変換」を参照してください。

  3. 次のプロシージャを使用して、変換定義表にデータを移入できます。

次の文では、現行のスキーマにclip_xtblという表を作成します。この表には、量的属性のクリッピング命令を移入できる列が含まれます。

BEGIN
  DBMS_DATA_MINING_TRANSFORM.CREATE_CLIP('clip_xtbl');
END;
/
 
DESCRIBE clip_xtbl
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 COL                                                VARCHAR2(30)
 ATT                                                VARCHAR2(4000)
 LCUT                                               NUMBER
 LVAL                                               NUMBER
 RCUT                                               NUMBER
 RVAL                                               NUMBER

36.2.3.4 CREATE_COL_REMプロシージャ

このプロシージャは、データ表から列を削除するための変換定義表を作成します。

列の説明は、次の表のとおりです。

表36-123 列削除の変換定義表の列

名前 データ・タイプ 説明

col

VARCHAR2(30)

データの列の名前。

列がネストしていない場合、列名は属性名でもあります。属性名の詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。

att

VARCHAR2(4000)

colがネストしている場合(DM_NESTED_NUMERICALSまたはDM_NESTED_CATEGORICALS)、属性のサブ名。colがネストしている場合、属性名はcol.attです。

colがネストしていない場合、attはNULLです。

構文

DBMS_DATA_MINING_TRANSFORM.CREATE_COL_REM (
      rem_table_name           VARCHAR2,
      rem_schema_name          VARCHAR2 DEFAULT NULL );

パラメータ

表36-124 CREATE_COL_REMプロシージャのパラメータ

パラメータ 説明

rem_table_name

作成する変換定義表の名前。

rem_schema_name

rem_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

使用上のノート

  1. 変換定義表およびネストしたデータの詳細は、「ネストしたデータの変換」を参照してください。

  2. 「操作上のノート」を参照してください。

次の文では、現行のスキーマにrem_att_xtblという表を作成します。この表には、マイニングされるデータから除外する属性の名前を移入できる列が含まれます。

BEGIN
    DBMS_DATA_MINING_TRANSFORM.CREATE_COL_REM ('rem_att_xtbl');
END;
 /
DESCRIBE rem_att_xtbl
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 COL                                                VARCHAR2(30)
 ATT                                                VARCHAR2(4000)

36.2.3.5 CREATE_MISS_CATプロシージャ

このプロシージャは、質的欠損値を置換するための変換定義表を作成します。

列の説明は、次の表のとおりです。

表36-125 質的欠損値処理の変換定義表の列

名前 データ・タイプ 説明

col

VARCHAR2(30)

質的データの列の名前。

列がネストしていない場合、列名は属性名でもあります。属性名の詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。

att

VARCHAR2(4000)

colDM_NESTED_CATEGORICALSのネストした列の場合、属性のサブ名。colがネストしている場合、属性名はcol.attです。

colがネストしていない場合、attはNULLです。

val

VARCHAR2(4000)

属性の欠損値の置換値。

構文

DBMS_DATA_MINING_TRANSFORM.CREATE_MISS_CAT (
     miss_table_name       IN VARCHAR2,
     miss_schema_name      IN VARCHAR2 DEFAULT NULL );

パラメータ

表36-126 CREATE_MISS_CATプロシージャのパラメータ

パラメータ 説明

miss_table_name

作成する変換定義表の名前。

miss_schema_name

miss_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

使用上のノート

  1. 質的データの詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。

  2. 変換定義表およびネストしたデータの詳細は、「ネストしたデータの変換」を参照してください。

  3. INSERT_MISS_CAT_MODEプロシージャを使用して、変換定義表にデータを移入できます。

次の文では、現行のスキーマにmiss_cat_xtblという表を作成します。この表には、質的属性の欠損データに対する値を移入できる列が含まれます。

BEGIN
  DBMS_DATA_MINING_TRANSFORM.CREATE_MISS_CAT('miss_cat_xtbl');
END;
/
 
DESCRIBE miss_cat_xtbl
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 COL                                                VARCHAR2(30)
 ATT                                                VARCHAR2(4000)
 VAL                                                VARCHAR2(4000)

36.2.3.6 CREATE_MISS_NUMプロシージャ

このプロシージャは、量的欠損値を置換するための変換定義表を作成します。

表36-127に、列の説明を示します。

表36-127 量的欠損値処理の変換定義表の列

名前 データ・タイプ 説明

col

VARCHAR2(30)

量的データの列の名前。

列がネストしていない場合、列名は属性名でもあります。属性名の詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。

att

VARCHAR2(4000)

colDM_NESTED_NUMERICALSのネストした列の場合、属性のサブ名。colがネストしている場合、属性名はcol.attです。

colがネストしていない場合、attはNULLです。

val

NUMBER

属性の欠損値の置換値。

構文

DBMS_DATA_MINING_TRANSFORM.CREATE_MISS_NUM (
     miss_table_name       IN VARCHAR2,
     miss_schema_name      IN VARCHAR2 DEFAULT NULL );

パラメータ

表36-128 CREATE_MISS_NUMプロシージャのパラメータ

パラメータ 説明

miss_table_name

作成する変換定義表の名前。

miss_schema_name

miss_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

使用上のノート

  1. 量的データの詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。

  2. 変換定義表およびネストしたデータの詳細は、「ネストしたデータの変換」を参照してください。

  3. INSERT_MISS_NUM_MEANプロシージャを使用して、変換定義表にデータを移入できます。

次の文では、現行のスキーマにmiss_num_xtblという表を作成します。この表には、量的属性の欠損データに対する値を移入できる列が含まれます。

BEGIN
    DBMS_DATA_MINING_TRANSFORM.CREATE_MISS_NUM('miss_num_xtbl');
END;
/
 
DESCRIBE miss_num_xtbl
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 COL                                                VARCHAR2(30)
 ATT                                                VARCHAR2(4000)
 VAL                                                NUMBER

36.2.3.7 CREATE_NORM_LINプロシージャ

このプロシージャは、線形正規化の変換定義表を作成します。

表36-129に、列の説明を示します。

表36-129 線形正規化の変換定義表の列

名前 データ・タイプ 説明

col

VARCHAR2(30)

量的データの列の名前。

列がネストしていない場合、列名は属性名でもあります。属性名の詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。

att

VARCHAR2(4000)

colDM_NESTED_NUMERICALSのネストした列の場合、属性のサブ名。colがネストしている場合、属性名はcol.attです。

colがネストしていない場合、attはNULLです。

shift

NUMBER

属性値から差し引かれる定数。

scale

NUMBER

差引き後の値を割るための定数。

構文

DBMS_DATA_MINING_TRANSFORM.CREATE_NORM_LIN (
     norm_table_name       IN VARCHAR2,
     norm_schema_name      IN VARCHAR2 DEFAULT NULL );

パラメータ

表36-130 CREATE_NORM_LINプロシージャのパラメータ

パラメータ 説明

norm_table_name

作成する変換定義表の名前。

norm_schema_name

norm_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

使用上のノート

  1. 量的データの詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。

  2. 変換定義表およびネストしたデータの詳細は、「ネストしたデータの変換」を参照してください。

  3. 次のプロシージャを使用して、変換定義表にデータを移入できます。

次の文では、現行のスキーマにnorm_xtblという表を作成します。この表には、量的属性を正規化するためのshift値とscale値を移入できる列が含まれます。

BEGIN
     DBMS_DATA_MINING_TRANSFORM.CREATE_NORM_LIN('norm_xtbl');
END;
/
 
DESCRIBE norm_xtbl
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 COL                                                VARCHAR2(30)
 ATT                                                VARCHAR2(4000)
 SHIFT                                              NUMBER
 SCALE                                              NUMBER

36.2.3.8 DESCRIBE_STACKプロシージャ

このプロシージャは、変換リストを適用した後のデータ表の列の情報を表示します。

変換リストで指定された列のみが変換されます。データ表の残りの列は、変更なしで出力に含められます。

変換の適用後にデータ表のビューを作成するには、XFORM_STACKプロシージャを使用します。

構文

DBMS_DATA_MINING_TRANSFORM.DESCRIBE_STACK (
     xform_list           IN  TRANSFORM_LIST,
     data_table_name      IN  VARCHAR2,
     describe_list        OUT DESCRIBE_LIST,
     data_schema_name     IN  VARCHAR2 DEFAULT NULL);

パラメータ

表36-131 DESCRIBE_STACKプロシージャのパラメータ

パラメータ 説明

xform_list

変換のリスト。TRANSFORM_LISTオブジェクト・タイプの詳細は、表36-114 を参照してください。

data_table_name

変換対象のデータが保存される表の名前。

describe_list

xform_listに指定された変換が適用された後のデータ表の列の説明。DESCRIBE_LISTオブジェクト・タイプの詳細は、表36-114を参照してください。

data_schema_name

data_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

使用上のノート

変換リストおよび埋込み変換の詳細は、「操作上のノート」を参照してください。

この例は、変換リストが適用された後のdmuser.cust_infoビューの列名とデータ・タイプ、列名の長さおよび列の最大の長さを示しています。変換はすべてユーザー指定です。SET_TRANSFORMプロシージャによって元の表の列の1つがNULLに設定されるため、DESCRIBE_STACKの結果にはその列は含まれません。

CREATE OR REPLACE VIEW cust_info AS
         SELECT a.cust_id, c.country_id, c.cust_year_of_birth,
         CAST(COLLECT(DM_Nested_Numerical(
                  b.prod_name, 1))
                AS DM_Nested_Numericals) custprods
                 FROM sh.sales a, sh.products b, sh.customers c
                  WHERE a.prod_id = b.prod_id AND
                        a.cust_id=c.cust_id and
                        a.cust_id between 100001 AND 105000
         GROUP BY a.cust_id, country_id, cust_year_of_birth;
 
describe cust_info
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 CUST_ID                                   NOT NULL NUMBER
 COUNTRY_ID                                NOT NULL NUMBER
 CUST_YEAR_OF_BIRTH                        NOT NULL NUMBER(4)
 CUSTPRODS                                          SYS.DM_NESTED_NUMERICALS
 
DECLARE
  cust_stack   dbms_data_mining_transform.TRANSFORM_LIST;
  cust_cols    dbms_data_mining_transform.DESCRIBE_LIST;
BEGIN
  dbms_data_mining_transform.SET_TRANSFORM (cust_stack,
     'country_id', NULL, 'country_id/10', 'country_id*10');
  dbms_data_mining_transform.SET_TRANSFORM (cust_stack,
      'cust_year_of_birth', NULL, NULL, NULL);
  dbms_data_mining_transform.SET_TRANSFORM (cust_stack,
      'custprods', 'Mouse Pad', 'value*100', 'value/100');
  dbms_data_mining_transform.DESCRIBE_STACK(
       xform_list => cust_stack,
       data_table_name => 'cust_info',
       describe_list => cust_cols);
  dbms_output.put_line('====');
  for i in 1..cust_cols.COUNT loop
    dbms_output.put_line('COLUMN_NAME:     '||cust_cols(i).col_name);
    dbms_output.put_line('COLUMN_TYPE:     '||cust_cols(i).col_type);
    dbms_output.put_line('COLUMN_NAME_LEN: '||cust_cols(i).col_name_len);
    dbms_output.put_line('COLUMN_MAX_LEN:  '||cust_cols(i).col_max_len);
    dbms_output.put_line('====');
  END loop;
END;
/
====
COLUMN_NAME:     CUST_ID
COLUMN_TYPE:     2
COLUMN_NAME_LEN: 7
COLUMN_MAX_LEN:  22
====
COLUMN_NAME:     COUNTRY_ID
COLUMN_TYPE:     2
COLUMN_NAME_LEN: 10
COLUMN_MAX_LEN:  22
====
COLUMN_NAME:     CUSTPRODS
COLUMN_TYPE:     100001
COLUMN_NAME_LEN: 9
COLUMN_MAX_LEN:  40
====

36.2.3.9 GET_EXPRESSIONファンクション

このファンクションは、変換式を格納するVARCHAR2配列から行を戻します。この配列は、SET_EXPRESSIONプロシージャへのコールによって作成されます。

この配列を使用すると、長すぎてSET_TRANSFORMプロシージャで使用できないSQL式を指定できます。

構文

DBMS_DATA_MINING_TRANSFORM.GET_EXPRESSION (
     expression           IN EXPRESSION_REC,
     chunk_num            IN PLS_INTEGER DEFAULT NULL);
 RETURN VARCHAR2;

パラメータ

表36-132 GET_EXPRESSIONファンクションのパラメータ

パラメータ 説明

expression

属性の変換式または逆変換式を指定する式レコード(EXPRESSION_REC)。各式レコードには、VARCHAR2配列と、その配列内の上限境界と下限境界を指定する索引フィールドが含まれます。

変換レコード(TRANSFORM_REC)内には、2つのEXPRESSION_RECフィールドがあります。1つのフィールドは変換式用で、もう1つのフィールドは逆変換式用です。

EXPRESSION_RECタイプの詳細は、表36-114を参照してください。

chunk

expressionに追加するVARCHAR2チャンク(行)。

使用上のノート

  1. チャンクの番号は1から始まります。範囲外のチャンクの場合、戻り値はNULLになります。チャンク番号がNULLの場合は、式全体が文字列として戻されます。式が大きすぎる場合は、VALUE_ERRORが発生します。

  2. 「変換リストについて」を参照してください。

  3. 「操作上のノート」を参照してください。

SET_EXPRESSIONプロシージャの例を参照してください。

36.2.3.10 INSERT_AUTOBIN_NUM_EQWIDTHプロシージャ

このプロシージャは、量的ビニングを実行して、変換定義表に変換定義を挿入します。このプロシージャは、最小値と最大値を識別して等間隔のビン境界を計算します。

INSERT_AUTOBIN_NUM_EQWIDTHは、列ごとに個別にビンの数を計算します。各列に同じ数のビンが含まれる等幅ビニングを使用する場合、INSERT_BIN_NUM_EQWIDTHプロシージャを使用します。

INSERT_AUTOBIN_NUM_EQWIDTHは、ユーザーが無視する列のリストを指定しないかぎり、データ・ソースのすべてのNUMBER列およびFLOAT列をビンに区分します。

構文

DBMS_DATA_MINING_TRANSFORM.INSERT_AUTOBIN_NUM_EQWIDTH (
     bin_table_name        IN VARCHAR2,
     data_table_name       IN VARCHAR2,
     bin_num               IN PLS_INTEGER DEFAULT 3,
     max_bin_num           IN PLS_INTEGER DEFAULT 100,
     exclude_list          IN COLUMN_LIST DEFAULT NULL,
     round_num             IN PLS_INTEGER DEFAULT 6,
     sample_size           IN PLS_INTEGER DEFAULT 50000,
     bin_schema_name       IN VARCHAR2 DEFAULT NULL,
     data_schema_name      IN VARCHAR2 DEFAULT NULL,
     rem_table_name        IN VARCHAR2 DEFAULT NULL,
     rem_schema_name       IN VARCHAR2 DEFAULT NULL));

パラメータ

表36-133 INSERT_AUTOBIN_NUM_EQWIDTHプロシージャのパラメータ

パラメータ 説明

bin_table_name

量的ビニングの変換定義表の名前。CREATE_BIN_NUMプロシージャを使用して、定義表を作成できます。次の列は必須です。

COL       VARCHAR2(30)
VAL       NUMBER
BIN       VARCHAR2(4000)

CREATE_BIN_NUMは、追加列のATTを作成しますが、この列は、ネストした属性を指定する場合に使用できます。この列は、INSERT_AUTOBIN_NUM_EQWIDTHでは使用されません。

data_table_name

変換対象のデータが保存される表の名前。

bin_num

ビンの最小数。bin_numは、0またはNULLの場合は無視されます。

bin_numのデフォルト値は3です。

max_bin_num

ビンの最大数。max_bin_numは、0またはNULLの場合は無視されます。

max_bin_numのデフォルト値は100です。

exclude_list

ビニング・プロセスから除外する数値列のリスト。exclude_listを指定しない場合、データ・ソースのすべての数値列がビンに区分されます。

exclude_listの書式は次のとおりです。

dbms_data_mining_transform.COLUMN_LIST('col1','col2',
                                              ...'coln')

round_num

変換定義表のVAL列の数値を丸める方法を指定します。

round_numが正の値の場合は、保存する最大の有効桁数が指定されます。round_numが負の値の場合は、削除する最小の有効桁数が指定されます。いずれの場合も、結果は、指定した桁数に丸められます。例については、「使用上のノート」を参照してください。

round_numのデフォルト値は6です。

sample_size

データ・サンプルのサイズ。sample_sizeが列のNULL以外の値の合計数未満の場合、ビン数の計算にはSQL COUNTファンクションのかわりにsample_sizeが使用されます。sample_sizeは、0またはNULLの場合は無視されます。詳細は、「使用上のノート」を参照してください。

sample_sizeのデフォルト値は50,000です。

bin_schema_name

bin_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

data_schema_name

data_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

rem_table_name

列削除の変換定義表の名前。この表には、「CREATE_COL_REMプロシージャ」で説明されている列が含まれる必要があります。

INSERT_AUTOBIN_NUM_EQWIDTHでは、すべてがNULLの列または一意の値が1つのみ含まれる列は無視されます。rem_table_nameの値を指定する場合、これらの列はマイニング・データから削除されます。rem_table_nameの値を指定しない場合、これらの列は、ビンに区分されないままデータに残されます。

rem_schema_name

rem_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

使用上のノート

  1. 量的データの詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。

  2. INSERT_AUTOBIN_NUM_EQWIDTHは、次のようにNULL以外の値の数(COUNT)、最大値(MAX)、最小値(MIN)、標準偏差(STDDEV)および定数C=3.49/0.9に基づいて列のビン数を計算します。

    N=floor(power(COUNT,1/3)*(max-min)/(c*dev))
    

    sample_sizeパラメータが指定されている場合は、COUNTのかわりに使用されます。

    COUNTMAXMINSTDDEVFLOORおよびPOWER関数の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

  3. INSERT_AUTOBIN_NUM_EQWIDTHは、絶対値を使用してビン数を計算します。パラメータbin_nummax_bin_numおよびsample_sizeの符号は、結果に影響を与えません。

  4. ビン数を計算する場合、INSERT_AUTOBIN_NUM_EQWIDTHは、次の基準を次の順序で評価します。

    1. ビンの最小数(bin_num)

    2. ビンの最大数(max_bin_num)

    3. 整数列のビンの最大数(max-min+1の範囲に存在する個別値の数として計算されます)

  5. round_numパラメータは、変換定義表の列値の丸めを次のように制御します。

    For a value of 308.162:
    when round_num =  1       result is 300
    when round_num =  2       result is 310
    when round_num =  3       result is 308
    when round_num =  0       result is 308.162
    when round_num = -1       result is 308.16
    when round_num = -2       result is 308.2

この例で、INSERT_AUTOBIN_NUM_EQWIDTHは、sh.customerscust_year_of_birth列のビン境界を計算し、変換定義表に変換を挿入します。STACK_BIN_NUMプロシージャは、定義表の内容から変換リストを作成します。CREATE_MODELプロシージャは、nb_modelという新規モデルに変換リストを埋め込みます。

nb_modelに埋め込まれた変換式と逆変換式は、GET_MODEL_TRANSFORMATIONSファンクションによって戻されます。

CREATE OR REPLACE VIEW mining_data AS
       SELECT cust_id, cust_year_of_birth, cust_postal_code
       FROM sh.customers;
 
DESCRIBE mining_data
 Name                          Null?    Type
 ----------------------------- -------- ----------------------------
 CUST_ID                       NOT NULL NUMBER
 CUST_YEAR_OF_BIRTH            NOT NULL NUMBER(4)
 CUST_POSTAL_CODE              NOT NULL VARCHAR2(10)
 
BEGIN
  dbms_data_mining_transform.CREATE_BIN_NUM(
     bin_table_name   => 'bin_tbl');
  dbms_data_mining_transform.INSERT_AUTOBIN_NUM_EQWIDTH (
     bin_table_name   => 'bin_tbl',
     data_table_name  => 'mining_data',
     bin_num          => 3,
     max_bin_num      => 5,
     exclude_list     => dbms_data_mining_transform.COLUMN_LIST('cust_id'));
END;
/

set numwidth 4
column val off
SELECT col, val, bin FROM bin_tbl
      ORDER BY val ASC;
 
COL                        VAL BIN
------------------------- ---- -----
CUST_YEAR_OF_BIRTH        1913
CUST_YEAR_OF_BIRTH        1928 1
CUST_YEAR_OF_BIRTH        1944 2
CUST_YEAR_OF_BIRTH        1959 3
CUST_YEAR_OF_BIRTH        1975 4
CUST_YEAR_OF_BIRTH        1990 5

DECLARE
     year_birth_xform   dbms_data_mining_transform.TRANSFORM_LIST;
BEGIN
     dbms_data_mining_transform.STACK_BIN_NUM (
         bin_table_name           => 'bin_tbl',
         xform_list               =>  year_birth_xform);
     dbms_data_mining.CREATE_MODEL(
         model_name              => 'nb_model',
         mining_function         => dbms_data_mining.classification,
         data_table_name         => 'mining_data',
         case_id_column_name     => 'cust_id',
         target_column_name      => 'cust_postal_code',
         settings_table_name     => null,
         data_schema_name        => null,
         settings_schema_name    => null,
         xform_list              => year_birth_xform);
END;
/
 
SELECT attribute_name 
       FROM TABLE(dbms_data_mining.GET_MODEL_TRANSFORMATIONS('nb_model'));
 
ATTRIBUTE_NAME
------------------------
CUST_YEAR_OF_BIRTH
 
SELECT expression 
       FROM TABLE(dbms_data_mining.GET_MODEL_TRANSFORMATIONS('nb_model'));
 
EXPRESSION
--------------------------------------------------------------------------------
CASE WHEN "CUST_YEAR_OF_BIRTH"<1913 THEN NULL WHEN "CUST_YEAR_OF_BIRTH"<=1928.4
 THEN '1' WHEN "CUST_YEAR_OF_BIRTH"<=1943.8 THEN '2' WHEN "CUST_YEAR_OF_BIRTH"
<=1959.2 THEN '3' WHEN "CUST_YEAR_OF_BIRTH"<=1974.6 THEN '4' WHEN
"CUST_YEAR_OF_BIRTH" <=1990 THEN '5' END
 
SELECT reverse_expression 
       FROM TABLE(dbms_data_mining.GET_MODEL_TRANSFORMATIONS('nb_model'));
 
REVERSE_EXPRESSION
--------------------------------------------------------------------------------
DECODE("CUST_YEAR_OF_BIRTH",'5','(1974.6; 1990]','1','[1913; 1928.4]','2','(1928
.4; 1943.8]','3','(1943.8; 1959.2]','4','(1959.2; 1974.6]',NULL,'( ; 1913), (199
0;  ), NULL')

36.2.3.11 INSERT_BIN_CAT_FREQプロシージャ

このプロシージャは、質的ビニングを実行して、変換定義表に変換定義を挿入します。このプロシージャは、頻度に基づいてビン境界を計算します。

INSERT_BIN_CAT_FREQは、ユーザーが無視する列のリストを指定しないかぎり、データ・ソースのすべてのCHAR列およびVARCHAR2列をビンに区分します。

構文

DBMS_DATA_MINING_TRANSFORM.INSERT_BIN_CAT_FREQ (
     bin_table_name       IN VARCHAR2,
     data_table_name      IN VARCHAR2,
     bin_num              IN PLS_INTEGER DEFAULT 9,
     exclude_list         IN COLUMN_LIST DEFAULT NULL,
     default_num          IN PLS_INTEGER DEFAULT 2,
     bin_support          IN NUMBER DEFAULT NULL,
     bin_schema_name      IN VARCHAR2 DEFAULT NULL,
     data_schema_name     IN VARCHAR2 DEFAULT NULL);

パラメータ

表36-134 INSERT_BIN_CAT_FREQプロシージャのパラメータ

パラメータ 説明

bin_table_name

質的ビニングの変換定義表の名前。CREATE_BIN_CATプロシージャを使用して、定義表を作成できます。次の列は必須です。

COL       VARCHAR2(30)
VAL       VARCHAR2(4000)
BIN       VARCHAR2(4000)

CREATE_BIN_CATは、追加列のATTを作成しますが、この列は、ネストした属性を指定する場合に使用できます。この列は、INSERT_BIN_CAT_FREQでは使用されません。

data_table_name

変換対象のデータが保存される表の名前。

bin_num

頻度ベースのビニングを使用してデータを移入するビンの数。ビンの合計数は、bin_num+1になります。追加のビンは、デフォルトのビンです。頻度ベースのビンに割り当てられないクラスは、デフォルトのビンに割り当てられます。

デフォルトのビニング順序は、最大頻度から最小頻度で、出現頻度が最も高いクラスが1番目のビンに割り当てられ、出現頻度が2番目に高いクラスが2番目のビンに割り当てられます(以降同様です)。ビニング順序を逆にするには、bin_numに負数を指定します。負の符号が指定されると、ビニング順序は最小頻度から最大頻度になります。

列の個別値(クラス)の合計数がbin_num未満の場合、値ごとに個別のビンが作成され、デフォルトのビンは空になります。

bin_numNULLまたは0を指定すると、ビニングは実行されません。

bin_numのデフォルト値は9です。

exclude_list

ビニング・プロセスから除外するカテゴリ列のリスト。exclude_listを指定しない場合、データ・ソースのすべてのカテゴリ列がビンに区分されます。

exclude_listの書式は次のとおりです。

dbms_data_mining_transform.COLUMN_LIST('col1','col2',
                                       ...'coln')

default_num

デフォルトのビンに割り当てるために必要なクラス出現(同じクラスの行)の数。

デフォルトでは、default_numは、デフォルトのビンに割り当てるために必要な出現の最小数です。たとえば、default_numが3で、特定のクラスが1回のみ出現した場合、そのクラスはデフォルトのビンに割り当てられません。出現要件を最小数から最大数に変更するには、default_numに負数を指定します。たとえば、default_numが-3で、特定のクラスが1回のみ出現した場合、そのクラスはデフォルトのビンに割り当てられますが、4回以上出現したクラスは含まれません。

default_binNULLまたは0を指定すると、デフォルトのビンに割り当てるための要件はなくなります。

default_numのデフォルト値は2です。

bin_support

頻度ベースのビンに割り当てるために必要なクラス出現(同じクラスの行)の数。bin_supportは、行の合計数の一部として表されます。

デフォルトでは、bin_supportは、頻度ベースのビンに割り当てるために必要な最小パーセントです。たとえば、20行のデータが存在する状態でbin_supportに.2を指定する場合、あるクラスが頻度ベースのビンに割り当てられるためには、そのクラスの出現回数は4回(.2*20)以上である必要があります。bin_supportを最小パーセントから最大パーセントに変更するには、bin_supportに負数を指定します。たとえば、20行のデータが存在する状態でbin_supportに-.2を指定する場合、あるクラスが頻度ベースのビンに割り当てられるためには、そのクラスの出現回数は4回以下である必要があります。

出現回数が正のbin_supportより少ないか、負のbin_supportより多いクラスは、デフォルトのビンに割り当てられます。

bin_supportNULLまたは0を指定すると、頻度ベースのビニングのサポート要件はなくなります。

bin_supportのデフォルト値はNULLです。

bin_schema_name

bin_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

data_schema_name

data_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

使用上のノート

  1. 質的データの詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。

  2. 複数の値が同じ頻度で発生した場合、INSERT_BIN_CAT_FREQは、ビニングが最大頻度から最小頻度の順序である場合は降順で、ビニングが最小頻度から最大頻度の順序である場合は昇順で、それらの値を割り当てます。

  1. この例で、INSERT_BIN_CAT_FREQは、sh.customerscust_postal_code列およびcust_city列のビン境界を計算し、変換定義表に変換を挿入します。STACK_BIN_CATプロシージャは、定義表の内容から変換リストを作成し、CREATE_MODELプロシージャは、nb_modelという新規モデルに変換リストを埋め込みます。

    nb_modelに埋め込まれた変換式と逆変換式は、GET_MODEL_TRANSFORMATIONSファンクションによって戻されます。

    CREATE OR REPLACE VIEW mining_data AS
              SELECT cust_id, cust_year_of_birth, cust_postal_code, cust_city
              FROM sh.customers;
     
    DESCRIBE mining_data
     Name                                  Null?    Type
     ------------------------------------- -------- -----------------------------
     CUST_ID                               NOT NULL NUMBER
     CUST_YEAR_OF_BIRTH                    NOT NULL NUMBER(4)
     CUST_POSTAL_CODE                      NOT NULL VARCHAR2(10)
     CUST_CITY                             NOT NULL VARCHAR2(30)
     
    BEGIN
        dbms_data_mining_transform.CREATE_BIN_CAT(
           bin_table_name   => 'bin_tbl_1');
        dbms_data_mining_transform.INSERT_BIN_CAT_FREQ (
           bin_table_name   => 'bin_tbl_1',
           data_table_name  => 'mining_data',
           bin_num          => 4);
    END;
    /
     
    column col format a18
    column val format a15
    column bin format a10
    SELECT col, val, bin 
           FROM bin_tbl_1
           ORDER BY col ASC, bin ASC;
     
    COL                VAL             BIN
    ------------------ --------------- ----------
    CUST_CITY          Los Angeles     1
    CUST_CITY          Greenwich       2
    CUST_CITY          Killarney       3
    CUST_CITY          Montara         4
    CUST_CITY                          5
    CUST_POSTAL_CODE   38082           1
    CUST_POSTAL_CODE   63736           2
    CUST_POSTAL_CODE   55787           3
    CUST_POSTAL_CODE   78558           4
    CUST_POSTAL_CODE                   5
     
    DECLARE
          city_xform   dbms_data_mining_transform.TRANSFORM_LIST;
    BEGIN
          dbms_data_mining_transform.STACK_BIN_CAT (
              bin_table_name           => 'bin_tbl_1',
              xform_list               =>  city_xform);
          dbms_data_mining.CREATE_MODEL(
               model_name              => 'nb_model',
               mining_function         => dbms_data_mining.classification,
               data_table_name         => 'mining_data',
               case_id_column_name     => 'cust_id',
               target_column_name      => 'cust_city',
               settings_table_name     => null,
               data_schema_name        => null,
               settings_schema_name    => null,
               xform_list              => city_xform);
    END;
    /
     
    SELECT attribute_name 
           FROM TABLE(dbms_data_mining.GET_MODEL_TRANSFORMATIONS('nb_model'));
     
    ATTRIBUTE_NAME
    -----------------------------------------------------------------------------
    CUST_CITY
    CUST_POSTAL_CODE
     
    SELECT expression 
           FROM TABLE(dbms_data_mining.GET_MODEL_TRANSFORMATIONS('nb_model'));
     
    EXPRESSION
    -----------------------------------------------------------------------------
    DECODE("CUST_CITY",'Greenwich','2','Killarney','3','Los Angeles','1',
    'Montara','4',NULL,NULL,'5')
    DECODE("CUST_POSTAL_CODE",'38082','1','55787','3','63736','2','78558','4',NULL,NULL,'5')
    
    SELECT reverse_expression 
           FROM TABLE(dbms_data_mining.GET_MODEL_TRANSFORMATIONS('nb_model'));
    
    REVERSE_EXPRESSION
    -----------------------------------------------------------------------------
    DECODE("CUST_CITY",'2','''Greenwich''','3','''Killarney''','1',
    '''Los Angeles''','4','''Montara''',NULL,'NULL','5','DEFAULT')
    DECODE("CUST_POSTAL_CODE",'1','''38082''','3','''55787''','2','''63736''',
    '4','''78558''',NULL,'NULL','5','DEFAULT')
    
  2. 1のビニング順序は、最大頻度から最小頻度です。次の例は、逆の順序のビニング(最小頻度から最大頻度)を示しています。ビニング順序を逆にするには、bin_numを4ではなく-4に設定します。

    BEGIN
        dbms_data_mining_transform.CREATE_BIN_CAT(
            bin_table_name   => 'bin_tbl_reverse');
        dbms_data_mining_transform.INSERT_BIN_CAT_FREQ (
            bin_table_name   => 'bin_tbl_reverse',
            data_table_name  => 'mining_data',
            bin_num          => -4);
     END;
     /
     
    column col format a20
    SELECT col, val, bin 
           FROM bin_tbl_reverse
           ORDER BY col ASC, bin ASC;
     
    COL                  VAL             BIN
    -------------------- --------------- ----------
    CUST_CITY            Tokyo           1
    CUST_CITY            Sliedrecht      2
    CUST_CITY            Haarlem         3
    CUST_CITY            Diemen          4
    CUST_CITY                            5
    CUST_POSTAL_CODE     49358           1
    CUST_POSTAL_CODE     80563           2
    CUST_POSTAL_CODE     74903           3
    CUST_POSTAL_CODE     71349           4
    CUST_POSTAL_CODE                     5

36.2.3.12 INSERT_BIN_NUM_EQWIDTHプロシージャ

このプロシージャは、量的ビニングを実行して、変換定義表に変換定義を挿入します。このプロシージャは、最小値と最大値を識別して等間隔のビン境界を計算します。

INSERT_BIN_NUM_EQWIDTHは、指定した数のビン(n)を計算して、各ビンに(max-min)/nの値を割り当てます。ビンの数は、各列で同じです。等幅ビニングを使用するが、列単位でビンの数を計算する場合、INSERT_AUTOBIN_NUM_EQWIDTHプロシージャを使用します。

INSERT_BIN_NUM_EQWIDTHは、ユーザーが無視する列のリストを指定しないかぎり、データ・ソースのすべてのNUMBER列およびFLOAT列をビンに区分します。

構文

DBMS_DATA_MINING_TRANSFORM.INSERT_BIN_NUM_EQWIDTH (
     bin_table_name        IN VARCHAR2,
     data_table_name       IN VARCHAR2,
     bin_num               IN PLS_INTEGER DEFAULT 10,
     exclude_list          IN COLUMN_LIST DEFAULT NULL,
     round_num             IN PLS_INTEGER DEFAULT 6,
     bin_schema_name       IN VARCHAR2 DEFAULT NULL,
     data_schema_name      IN VARCHAR2 DEFAULT NULL);

パラメータ

表36-135 INSERT_BIN_NUM_EQWIDTHプロシージャのパラメータ

パラメータ 説明

bin_table_name

量的ビニングの変換定義表の名前。CREATE_BIN_NUMプロシージャを使用して、定義表を作成できます。次の列は必須です。

COL       VARCHAR2(30)
VAL       NUMBER
BIN       VARCHAR2(4000)

CREATE_BIN_NUMは、追加列のATTを作成しますが、この列は、ネストした属性を指定する場合に使用できます。この列は、INSERT_BIN_NUM_EQWIDTHでは使用されません。

data_table_name

変換対象のデータが保存される表の名前。

bin_num

ビン数。bin_num0またはNULLの場合、ビニングは実行されません。

デフォルトのビン数は10です。

exclude_list

ビニング・プロセスから除外する数値列のリスト。exclude_listを指定しない場合、データ・ソースのすべての数値列がビンに区分されます。

exclude_listの書式は次のとおりです。

dbms_data_mining_transform.COLUMN_LIST('col1','col2',
                                       ...'coln')

round_num

変換定義表のVAL列の数値を丸める方法を指定します。

round_numが正の値の場合は、保存する最大の有効桁数が指定されます。round_numが負の値の場合は、削除する最小の有効桁数が指定されます。いずれの場合も、結果は、指定した桁数に丸められます。例については、「使用上のノート」を参照してください。

round_numのデフォルト値は6です。

bin_schema_name

bin_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

data_schema_name

data_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

使用上のノート

  1. 量的データの詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。

  2. round_numパラメータは、変換定義表の列値の丸めを次のように制御します。

    For a value of 308.162:
    when round_num =  1       result is 300
    when round_num =  2       result is 310
    when round_num =  3       result is 308
    when round_num =  0       result is 308.162
    when round_num = -1       result is 308.16
    when round_num = -2       result is 308.2
    
  3. INSERT_BIN_NUM_EQWIDTHでは、すべてがNULL値の列または一意の値が1つのみ含まれる列は無視されます。

この例で、INSERT_BIN_NUM_EQWIDTHは、mining_data_buildaffinity_card列のビン境界を計算し、変換定義表に変換を挿入します。STACK_BIN_NUMプロシージャは、定義表の内容から変換リストを作成します。CREATE_MODELプロシージャは、glm_modelという新規モデルに変換リストを埋め込みます。

glm_modelに埋め込まれた変換式と逆変換式は、GET_MODEL_TRANSFORMATIONSファンクションによって戻されます。

CREATE OR REPLACE VIEW mining_data AS
       SELECT cust_id, cust_income_level, cust_gender, affinity_card
       FROM mining_data_build;
 
DESCRIBE mining_data
 Name                      Null?    Type
 ------------------------- -------- -----------------
 CUST_ID                   NOT NULL NUMBER
 CUST_INCOME_LEVEL                  VARCHAR2(30)
 CUST_GENDER                        VARCHAR2(1)
 AFFINITY_CARD                      NUMBER(10)
 
BEGIN
    dbms_data_mining_transform.CREATE_BIN_NUM(
        bin_table_name   => 'bin_tbl');
    dbms_data_mining_transform.INSERT_BIN_NUM_EQWIDTH (
        bin_table_name   => 'bin_tbl',
        data_table_name  => 'mining_data',
        bin_num          => 4,
        exclude_list     => dbms_data_mining_transform.COLUMN_LIST('cust_id'));
END;
/
 
set numwidth 10
column val off
column col format a20
column bin format a10
SELECT col, val, bin FROM bin_tbl
    ORDER BY val ASC;
 
COL                         VAL  BIN
-------------------- ----------  ----------
AFFINITY_CARD                 0
AFFINITY_CARD               .25  1
AFFINITY_CARD                .5  2
AFFINITY_CARD               .75  3
AFFINITY_CARD                 1  4
 
CREATE TABLE glmsettings(
        setting_name  VARCHAR2(30),
        setting_value VARCHAR2(30));
 
BEGIN
   INSERT INTO glmsettings (setting_name, setting_value) VALUES
         (dbms_data_mining.algo_name, dbms_data_mining.algo_generalized_linear_model);
   COMMIT;
END;
/
 
DECLARE
     xforms   dbms_data_mining_transform.TRANSFORM_LIST;
BEGIN
     dbms_data_mining_transform.STACK_BIN_NUM (
         bin_table_name           => 'bin_tbl',
         xform_list               =>  xforms,
         literal_flag             =>  TRUE);
     dbms_data_mining.CREATE_MODEL(
         model_name              => 'glm_model',
         mining_function         => dbms_data_mining.regression,
         data_table_name         => 'mining_data',
         case_id_column_name     => 'cust_id',
         target_column_name      => 'affinity_card',
         settings_table_name     => 'glmsettings',
         data_schema_name        => null,
         settings_schema_name    => null,
         xform_list              => xforms);
END;
/
 
SELECT attribute_name 
      FROM TABLE(dbms_data_mining.GET_MODEL_TRANSFORMATIONS('glm_model'));
 
ATTRIBUTE_NAME
------------------------
AFFINITY_CARD
 
SELECT expression 
       FROM TABLE(dbms_data_mining.GET_MODEL_TRANSFORMATIONS('glm_model'));
 
EXPRESSION
--------------------------------------------------------------------------------
CASE WHEN "AFFINITY_CARD"<0 THEN NULL WHEN "AFFINITY_CARD"<=.25 THEN 1 WHEN
"AFFINITY_CARD"<=.5 THEN 2 WHEN "AFFINITY_CARD"<=.75 THEN 3 WHEN
"AFFINITY_CARD"<=1 THEN 4 END
 
SELECT reverse_expression 
       FROM TABLE(dbms_data_mining.GET_MODEL_TRANSFORMATIONS('glm_model'));
 
REVERSE_EXPRESSION
--------------------------------------------------------------------------------
DECODE("AFFINITY_CARD",4,'(.75; 1]',1,'[0; .25]',2,'(.25; .5]',3,'(.5; .75]',
NULL,'( ; 0), (1;  ), NULL')

36.2.3.13 INSERT_BIN_NUM_QTILEプロシージャ

このプロシージャは、量的ビニングを実行して、変換定義表に変換定義を挿入します。このプロシージャは、SQL NTILE関数をコールしてデータを順序付けし、そのデータを指定した数のビン(クオンタイル)に均等に分割します。

INSERT_BIN_NUM_QTILEは、ユーザーが無視する列のリストを指定しないかぎり、データ・ソースのすべてのNUMBER列およびFLOAT列をビンに区分します。

構文

DBMS_DATA_MINING_TRANSFORM.INSERT_BIN_NUM_QTILE (
    bin_table_name       IN VARCHAR2,
    data_table_name      IN VARCHAR2,
    bin_num              IN PLS_INTEGER DEFAULT 10,
    exclude_list         IN COLUMN_LIST DEFAULT NULL,
    bin_schema_name      IN VARCHAR2 DEFAULT NULL,
    data_schema_name     IN VARCHAR2 DEFAULT NULL);

パラメータ

表36-136 INSERT_BIN_NUM_QTILEプロシージャのパラメータ

パラメータ 説明

bin_table_name

量的ビニングの変換定義表の名前。CREATE_BIN_NUMプロシージャを使用して、定義表を作成できます。次の列は必須です。

COL       VARCHAR2(30)
VAL       NUMBER
BIN       VARCHAR2(4000)

CREATE_BIN_NUMは、追加列のATTを作成しますが、この列は、ネストした属性を指定する場合に使用できます。この列は、INSERT_BIN_NUM_QTILEでは使用されません。

data_table_name

変換対象のデータが保存される表の名前。

bin_num

ビン数。bin_num0またはNULLの場合、ビニングは実行されません。

デフォルトのビン数は10です。

exclude_list

ビニング・プロセスから除外する数値列のリスト。exclude_listを指定しない場合、データ・ソースのすべての数値列がビンに区分されます。

exclude_listの書式は次のとおりです。

dbms_data_mining_transform.COLUMN_LIST('col1','col2',
                                       ...'coln')

bin_schema_name

bin_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

data_schema_name

data_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

使用上のノート

  1. 量的データの詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。

  2. データをクオンタイルに分割した後、NTILE関数は、残りの値を最初から順に各クオンタイルに配分します。詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

  3. INSERT_BIN_NUM_QTILEでは、すべての値がNULL値である列は無視されます。

この例で、INSERT_BIN_NUM_QTILEは、sh.customerscust_year_of_birth列およびcust_credit_limit列のビン境界を計算し、変換定義表に変換を挿入します。STACK_BIN_NUMプロシージャは、定義表の内容から変換リストを作成します。

変換を計算するSQL式は、STACK_VIEWに表示されます。このビューは、表示目的専用であり、変換をモデルに埋め込むためには使用できません。

CREATE OR REPLACE VIEW mining_data AS
        SELECT cust_id, cust_year_of_birth, cust_credit_limit, cust_city
        FROM sh.customers;
 
DESCRIBE mining_data
 Name                                    Null?    Type
 --------------------------------------- -------- -----------------------------
 CUST_ID                                 NOT NULL NUMBER
 CUST_YEAR_OF_BIRTH                      NOT NULL NUMBER(4)
 CUST_CREDIT_LIMIT                       NUMBER
 CUST_CITY                               NOT NULL VARCHAR2(30)
 
BEGIN
   dbms_data_mining_transform.CREATE_BIN_NUM(
        bin_table_name   => 'bin_tbl');
   dbms_data_mining_transform.INSERT_BIN_NUM_QTILE (
        bin_table_name   => 'bin_tbl',
        data_table_name  => 'mining_data',
        bin_num          => 3,
        exclude_list     => dbms_data_mining_transform.COLUMN_LIST('cust_id'));
END;
/
 
set numwidth 8
column val off
column col format a20
column bin format a10
SELECT col, val, bin
      FROM bin_tbl
      ORDER BY col ASC, val ASC;
 
COL                       VAL BIN
-------------------- -------- ----------
CUST_CREDIT_LIMIT        1500
CUST_CREDIT_LIMIT        3000 1
CUST_CREDIT_LIMIT        9000 2
CUST_CREDIT_LIMIT       15000 3
CUST_YEAR_OF_BIRTH       1913
CUST_YEAR_OF_BIRTH       1949 1
CUST_YEAR_OF_BIRTH       1965 2
CUST_YEAR_OF_BIRTH       1990 3
 
DECLARE
   xforms   dbms_data_mining_transform.TRANSFORM_LIST;
BEGIN
   dbms_data_mining_transform.STACK_BIN_NUM (
        bin_table_name        => 'bin_tbl',
        xform_list            =>  xforms);
   dbms_data_mining_transform.XFORM_STACK (
        xform_list            =>  xforms,
        data_table_name       => 'mining_data',
        xform_view_name       => 'stack_view');
END;
/
 
set long 3000
SELECT text FROM user_views WHERE view_name in 'STACK_VIEW';
 
TEXT
--------------------------------------------------------------------------------
SELECT "CUST_ID",CASE WHEN "CUST_YEAR_OF_BIRTH"<1913 THEN NULL WHEN "CUST_YEAR_O
F_BIRTH"<=1949 THEN '1' WHEN "CUST_YEAR_OF_BIRTH"<=1965 THEN '2' WHEN "CUST_YEAR
_OF_BIRTH"<=1990 THEN '3' END "CUST_YEAR_OF_BIRTH",CASE WHEN "CUST_CREDIT_LIMIT"
<1500 THEN NULL WHEN "CUST_CREDIT_LIMIT"<=3000 THEN '1' WHEN "CUST_CREDIT_LIMIT"
<=9000 THEN '2' WHEN "CUST_CREDIT_LIMIT"<=15000 THEN '3' END "CUST_CREDIT_LIMIT"
,"CUST_CITY" FROM mining_data

36.2.3.14 INSERT_BIN_SUPERプロシージャ

このプロシージャは、量的および質的ビニングを実行して、変換定義表に変換定義を挿入します。このプロシージャは、予測子とターゲットの間の内在関係に基づいてビン境界を計算します。

INSERT_BIN_SUPERは、教師ありビニングと呼ばれるインテリジェントなビニング方法を使用します。このプロシージャは、単一予測子のディシジョン・ツリーを作成して、ツリー内の分岐からビン境界を導出します。

INSERT_BIN_SUPERは、ユーザーが無視する列のリストを指定しないかぎり、データ・ソースのすべてのVARCHAR2列、CHAR列、NUMBER列およびFLOAT列をビンに区分します。

構文

DBMS_DATA_MINING_TRANSFORM.INSERT_BIN_SUPER (
    num_table_name        IN VARCHAR2,
    cat_table_name        IN VARCHAR2,
    data_table_name       IN VARCHAR2,
    target_column_name    IN VARCHAR2,
    max_bin_num           IN PLS_INTEGER  DEFAULT 1000,
    exclude_list          IN COLUMN_LIST  DEFAULT NULL,
    num_schema_name       IN VARCHAR2     DEFAULT NULL,
    cat_schema_name       IN VARCHAR2     DEFAULT NULL,
    data_schema_name      IN VARCHAR2     DEFAULT NULL,
    rem_table_name        IN VARCHAR2     DEFAULT NULL,
    rem_schema_name       IN VARCHAR2     DEFAULT NULL);

パラメータ

表36-137 INSERT_BIN_SUPERプロシージャのパラメータ

パラメータ 説明

num_table_name

量的ビニングの変換定義表の名前。CREATE_BIN_NUMプロシージャを使用して、定義表を作成できます。次の列は必須です。

COL       VARCHAR2(30)
VAL       VNUMBER
BIN       VARCHAR2(4000)

CREATE_BIN_NUMは、追加列のATTを作成しますが、この列は、ネストした属性を指定する場合に使用できます。この列は、INSERT_BIN_SUPERでは使用されません。

cat_table_name

質的ビニングの変換定義表の名前。CREATE_BIN_CATプロシージャを使用して、定義表を作成できます。次の列は必須です。

COL       VARCHAR2(30)
VAL       VARCHAR2(4000)
BIN       VARCHAR2(4000)

CREATE_BIN_CATは、追加列のATTを作成しますが、この列は、ネストした属性を指定する場合に使用します。この列は、INSERT_BIN_SUPERでは使用されません。

data_table_name

変換対象のデータが保存される表の名前。

target_column_name

ディシジョン・ツリー・モデルのターゲットとして使用する列の名前。

max_bin_num

最大ビン数。デフォルトは1000です。

exclude_list

ビニング・プロセスから除外する列のリスト。exclude_listを指定しない場合、データ・ソースのすべての数値列とカテゴリ列がビンに区分されます。

exclude_listの書式は次のとおりです。

dbms_data_mining_transform.COLUMN_LIST('col1','col2',
                                       ...'coln')

num_schema_name

num_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

cat_schema_name

cat_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

data_schema_name

data_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

rem_table_name

列削除定義表の名前。この表には、「CREATE_COL_REMプロシージャ」で説明されている列が含まれる必要があります。CREATE_COL_REMを使用して、表を作成できます。「使用上のノート」を参照してください。

rem_schema_name

rem_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

使用上のノート

  1. 量的および質的データの詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。

  2. 有意の分割が存在しない列は、ビンに区分されません。ビンに区分されない列をマイニング・データから削除するには、列削除定義表を指定します。列削除定義表を指定しない場合、これらの列は、ビンに区分されないままマイニング・データに残されます。

  3. Oracle Data Miningのディシジョン・ツリーについてさらに学習するには、『Oracle Data Mining概要』を参照してください。

この例で、INSERT_BIN_SUPERは、cust_credit_limitの予測子に対してビン境界を計算し、変換定義表に変換を挿入します。一方の予測子は量的で、他方は質的です。(INSERT_BIN_SUPERによって、cust_postal_code列は有意の予測子ではないと判断されます。)STACKプロシージャは、定義表の内容から変換リストを作成します。

変換を計算するSQL式は、MINING_DATA_STACK_NUMビューおよびMINING_DATA_STACK_CATビューに表示されます。これらのビューは、表示目的専用であり、変換をモデルに埋め込むためには使用できません。

CREATE OR REPLACE VIEW mining_data AS
     SELECT cust_id, cust_year_of_birth, cust_marital_status,
            cust_postal_code, cust_credit_limit
     FROM sh.customers;
 
DESCRIBE mining_data
 Name                             Null?    Type
 -------------------------------- -------- ------------------------------------
 CUST_ID                          NOT NULL NUMBER
 CUST_YEAR_OF_BIRTH               NOT NULL NUMBER(4)
 CUST_MARITAL_STATUS                       VARCHAR2(20)
 CUST_POSTAL_CODE                 NOT NULL VARCHAR2(10)
 CUST_CREDIT_LIMIT                         NUMBER
 
BEGIN
    dbms_data_mining_transform.CREATE_BIN_NUM(
         bin_table_name      => 'bin_num_tbl');
    dbms_data_mining_transform.CREATE_BIN_CAT(
         bin_table_name      => 'bin_cat_tbl');
    dbms_data_mining_transform.CREATE_COL_REM(
         rem_table_name      => 'rem_tbl');
END;
/
 
BEGIN
   COMMIT;
   dbms_data_mining_transform.INSERT_BIN_SUPER (
      num_table_name      => 'bin_num_tbl',
      cat_table_name      => 'bin_cat_tbl',
      data_table_name     => 'mining_data',
      target_column_name  => 'cust_credit_limit',
      max_bin_num         =>  4,
      exclude_list        =>  dbms_data_mining_transform.COLUMN_LIST('cust_id'),
      num_schema_name     => 'dmuser',
      cat_schema_name     => 'dmuser',
      data_schema_name    => 'dmuser',
      rem_table_name      => 'rem_tbl',
      rem_schema_name     => 'dmuser');
   COMMIT;
END;
/
 
set numwidth 8
column val off
SELECT col, val, bin FROM bin_num_tbl
      ORDER BY bin ASC;
 
COL                       VAL BIN
-------------------- -------- ----------
CUST_YEAR_OF_BIRTH     1923.5 1
CUST_YEAR_OF_BIRTH     1923.5 1
CUST_YEAR_OF_BIRTH     1945.5 2
CUST_YEAR_OF_BIRTH     1980.5 3
CUST_YEAR_OF_BIRTH            4
 
column val on
column val format a20
SELECT col, val, bin FROM bin_cat_tbl
      ORDER BY bin ASC;
 
COL                  VAL                  BIN
-------------------- -------------------- ----------
CUST_MARITAL_STATUS  married              1
CUST_MARITAL_STATUS  single               2
CUST_MARITAL_STATUS  Mar-AF               3
CUST_MARITAL_STATUS  Mabsent              3
CUST_MARITAL_STATUS  Divorc.              3
CUST_MARITAL_STATUS  Married              3
CUST_MARITAL_STATUS  Widowed              3
CUST_MARITAL_STATUS  NeverM               3
CUST_MARITAL_STATUS  Separ.               3
CUST_MARITAL_STATUS  divorced             4
CUST_MARITAL_STATUS  widow                4
 
SELECT col from rem_tbl;
 
COL
--------------------
CUST_POSTAL_CODE
 
DECLARE
    xforms_num      dbms_data_mining_transform.TRANSFORM_LIST;
    xforms_cat      dbms_data_mining_transform.TRANSFORM_LIST;
    BEGIN
       dbms_data_mining_transform.STACK_BIN_NUM (
            bin_table_name    => 'bin_num_tbl',
            xform_list        => xforms_num);
       dbms_data_mining_transform.XFORM_STACK (
            xform_list         => xforms_num,
            data_table_name    => 'mining_data',
            xform_view_name    => 'mining_data_stack_num');
       dbms_data_mining_transform.STACK_BIN_CAT (
             bin_table_name    => 'bin_cat_tbl',
             xform_list        => xforms_cat);
       dbms_data_mining_transform.XFORM_STACK (
             xform_list         => xforms_cat,
             data_table_name    => 'mining_data',
             xform_view_name    => 'mining_data_stack_cat');
   END;
 /
 
set long 3000
SELECT text FROM user_views WHERE view_name IN 'MINING_DATA_STACK_NUM';
 
TEXT
--------------------------------------------------------------------------------
SELECT "CUST_ID",CASE WHEN "CUST_YEAR_OF_BIRTH"<1923.5 THEN '1' WHEN "CUST_YEAR_
OF_BIRTH"<=1923.5 THEN '1' WHEN "CUST_YEAR_OF_BIRTH"<=1945.5 THEN '2' WHEN "CUST
_YEAR_OF_BIRTH"<=1980.5 THEN '3' WHEN "CUST_YEAR_OF_BIRTH" IS NOT NULL THEN '4'
END "CUST_YEAR_OF_BIRTH","CUST_MARITAL_STATUS","CUST_POSTAL_CODE","CUST_CREDIT_L
IMIT" FROM mining_data
 
 
SELECT text FROM user_views WHERE view_name IN 'MINING_DATA_STACK_CAT';
 
TEXT
--------------------------------------------------------------------------------
SELECT "CUST_ID","CUST_YEAR_OF_BIRTH",DECODE("CUST_MARITAL_STATUS",'Divorc.','3'
,'Mabsent','3','Mar-AF','3','Married','3','NeverM','3','Separ.','3','Widowed','3
','divorced','4','married','1','single','2','widow','4') "CUST_MARITAL_STATUS","
CUST_POSTAL_CODE","CUST_CREDIT_LIMIT" FROM mining_data

36.2.3.15 INSERT_CLIP_TRIM_TAILプロシージャ

このプロシージャは、量的外れ値をNULLに置き換えて、変換定義表に変換定義を挿入します。

INSERT_CLIP_TRIM_TAILは、指定したパーセンテージに基づいてデータの境界を計算します。このプロシージャは、境界の外側に存在する値(テール値)をデータから削除します。テール値を削除せずに置換する場合、INSERT_CLIP_WINSOR_TAILプロシージャを使用します。

INSERT_CLIP_TRIM_TAILは、ユーザーが無視する列のリストを指定しないかぎり、データ・ソースのすべてのNUMBER列およびFLOAT列をクリッピングします。

構文

DBMS_DATA_MINING_TRANSFORM.INSERT_CLIP_TRIM_TAIL (
    clip_table_name     IN VARCHAR2,
    data_table_name     IN VARCHAR2,
    tail_frac           IN NUMBER DEFAULT 0.025,
    exclude_list        IN COLUMN_LIST DEFAULT NULL,
    clip_schema_name    IN VARCHAR2 DEFAULT NULL,
    data_schema_name    IN VARCHAR2 DEFAULT NULL);

パラメータ

表36-138 INSERT_CLIP_TRIM_TAILプロシージャのパラメータ

パラメータ 説明

clip_table_name

量的クリッピングの変換定義表の名前。CREATE_CLIPプロシージャを使用して、定義表を作成できます。次の列は必須です。

 COL         VARCHAR2(30)
 LCUT        NUMBER
 LVAL        NUMBER
 RCUT        NUMBER
 RVAL        NUMBER

CREATE_CLIPは、追加列のATTを作成しますが、この列は、ネストした属性を指定する場合に使用できます。この列は、INSERT_CLIP_TRIM_TAILでは使用されません。

data_table_name

変換対象のデータが保存される表の名前。

tail_frac

データの各端で外れ値として指定されるNULL以外の値のパーセント。たとえば、tail_fracが.01の場合、下位1%のデータと上位1%のデータが外れ値として扱われます。

tail_fracが.5以上の場合、クリッピングは実行されません。

tail_fracのデフォルト値は0.025です。

exclude_list

クリッピング・プロセスから除外する数値列のリスト。exclude_listを指定しない場合、データのすべての数値列がクリッピングされます。

exclude_listの書式は次のとおりです。

dbms_data_mining_transform.COLUMN_LIST('col1','col2',
                                       ...'coln')

clip_schema_name

clip_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

data_schema_name

data_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

使用上のノート

  1. 量的データの詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。

  2. DBMS_DATA_MINING_TRANSFORMパッケージには、INSERT_CLIP_TRIM_TAILおよびINSERT_CLIP_WINSOR_TAILという2つのクリッピング・プロシージャが含まれます。どちらのプロシージャでも、境界は次のように計算されます。

    • NULL以外の値の数(n)をカウントして昇順にソートします。

    • 外れ値の数(t)をn*tail_fracとして計算します。

    • 1+floor(t)の位置にある値として下限境界のlcutを定義します。

    • n-floor(t)の位置にある値として上限境界のrcutを定義します。

      (SQL FLOOR関数によって、t以下の最大の整数が戻されます。)

    • <= lcutまたは=> rcutであるすべての値が、外れ値として指定されます。

    INSERT_CLIP_TRIM_TAILは、外れ値をNULLで置き換えて、事実上それらの値をデータから削除します。

    INSERT_CLIP_WINSOR_TAILは、下位の外れ値にlcutを、上位の外れ値にrcutを割り当てます。

この例で、INSERT_CLIP_TRIM_TAILは、2つの列にあるデータの10%(上位5%と下位5%)をトリミングし、変換定義表に変換を挿入します。STACK_CLIPプロシージャは、定義表の内容から変換リストを作成します。

トリミングを計算するSQL式は、MINING_DATA_STACKビューに表示されます。このビューは、表示目的専用であり、変換をモデルに埋め込むためには使用できません。

CREATE OR REPLACE VIEW mining_data AS
       SELECT cust_id, cust_year_of_birth, cust_credit_limit, cust_city
       FROM sh.customers;
 
DESCRIBE mining_data
 Name                            Null?    Type
 ------------------------------- -------- -------------------
 CUST_ID                         NOT NULL NUMBER
 CUST_YEAR_OF_BIRTH              NOT NULL NUMBER(4)
 CUST_CREDIT_LIMIT                        NUMBER
 CUST_CITY                       NOT NULL VARCHAR2(30)

BEGIN
   dbms_data_mining_transform.CREATE_CLIP(
      clip_table_name    => 'clip_tbl');
   dbms_data_mining_transform.INSERT_CLIP_TRIM_TAIL(
      clip_table_name    => 'clip_tbl',
      data_table_name    => 'mining_data',
      tail_frac          => 0.05,
      exclude_list       => DBMS_DATA_MINING_TRANSFORM.COLUMN_LIST('cust_id'));
END;
/
 
SELECT col, lcut, lval, rcut, rval
      FROM clip_tbl
      ORDER BY col ASC;
 
COL                      LCUT     LVAL     RCUT     RVAL
-------------------- -------- -------- -------- --------
CUST_CREDIT_LIMIT        1500             11000
CUST_YEAR_OF_BIRTH       1934              1982
 
DECLARE
     xforms      dbms_data_mining_transform.TRANSFORM_LIST;
BEGIN
     dbms_data_mining_transform.STACK_CLIP (
          clip_table_name    => 'clip_tbl',
          xform_list         => xforms);
     dbms_data_mining_transform.XFORM_STACK (
          xform_list         => xforms,
          data_table_name    => 'mining_data',
          xform_view_name    => 'mining_data_stack');
 END;
 /
 
set long 3000
SELECT text FROM user_views WHERE view_name IN 'MINING_DATA_STACK';
 
TEXT
--------------------------------------------------------------------------------
SELECT "CUST_ID",CASE WHEN "CUST_YEAR_OF_BIRTH" < 1934 THEN NULL WHEN "CUST_YEAR
_OF_BIRTH" > 1982 THEN NULL ELSE "CUST_YEAR_OF_BIRTH" END "CUST_YEAR_OF_BIRTH",C
ASE WHEN "CUST_CREDIT_LIMIT" < 1500 THEN NULL WHEN "CUST_CREDIT_LIMIT" > 11000 T
HEN NULL ELSE "CUST_CREDIT_LIMIT" END "CUST_CREDIT_LIMIT","CUST_CITY" FROM minin
g_data

36.2.3.16 INSERT_CLIP_WINSOR_TAILプロシージャ

このプロシージャは、量的外れ値を上限値または下限値に置き換えます。変換定義表に変換定義を挿入します。

INSERT_CLIP_WINSOR_TAILは、指定したパーセンテージに基づいてデータの境界を計算します。このプロシージャは、境界の外側に存在する値(テール値)を関連する境界値に置き換えます。テール値をNULLに設定する場合、INSERT_CLIP_TRIM_TAILプロシージャを使用します。

INSERT_CLIP_WINSOR_TAILは、ユーザーが無視する列のリストを指定しないかぎり、データ・ソースのすべてのNUMBER列およびFLOAT列をクリッピングします。

構文

DBMS_DATA_MINING_TRANSFORM.INSERT_CLIP_WINSOR_TAIL (
    clip_table_name    IN VARCHAR2,
    data_table_name    IN VARCHAR2,
    tail_frac          IN NUMBER DEFAULT 0.025,
    exclude_list       IN COLUMN_LIST DEFAULT NULL,
    clip_schema_name   IN VARCHAR2 DEFAULT NULL,
    data_schema_name   IN VARCHAR2 DEFAULT NULL);

パラメータ

表36-139 INSERT_CLIP_WINSOR_TAILプロシージャのパラメータ

パラメータ 説明

clip_table_name

量的クリッピングの変換定義表の名前。CREATE_CLIPプロシージャを使用して、定義表を作成できます。次の列は必須です。

 COL         VARCHAR2(30)
 LCUT        NUMBER
 LVAL        NUMBER
 RCUT        NUMBER
 RVAL        NUMBER

CREATE_CLIPは、追加列のATTを作成しますが、この列は、ネストした属性を指定する場合に使用できます。この列は、INSERT_CLIP_WINSOR_TAILでは使用されません。

data_table_name

変換対象のデータが保存される表の名前。

tail_frac

データの各端で外れ値として指定されるNULL以外の値のパーセント。たとえば、tail_fracが.01の場合、下位1%のデータと上位1%のデータが外れ値として扱われます。

tail_fracが.5以上の場合、クリッピングは実行されません。

tail_fracのデフォルト値は0.025です。

exclude_list

クリッピング・プロセスから除外する数値列のリスト。exclude_listを指定しない場合、データのすべての数値列がクリッピングされます。

exclude_listの書式は次のとおりです。

dbms_data_mining_transform.COLUMN_LIST('col1','col2',
                                       ...'coln')

clip_schema_name

clip_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

data_schema_name

data_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

使用上のノート

  1. 量的データの詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。

  2. DBMS_DATA_MINING_TRANSFORMパッケージには、INSERT_CLIP_WINSOR_TAILおよびINSERT_CLIP_TRIM_TAILという2つのクリッピング・プロシージャが含まれます。どちらのプロシージャでも、境界は次のように計算されます。

    • NULL以外の値の数(n)をカウントして昇順にソートします。

    • 外れ値の数(t)をn*tail_fracとして計算します。

    • 1+floor(t)の位置にある値として下限境界のlcutを定義します。

    • n-floor(t)の位置にある値として上限境界のrcutを定義します。

      (SQL FLOOR関数によって、t以下の最大の整数が戻されます。)

    • <= lcutまたは=> rcutであるすべての値が、外れ値として指定されます。

    INSERT_CLIP_WINSOR_TAILは、下位の外れ値にlcutを、上位の外れ値にrcutを割り当てます。

    INSERT_CLIP_TRIM_TAILは、外れ値をNULLで置き換えて、事実上それらの値をデータから削除します。

この例で、INSERT_CLIP_WINSOR_TAILは、2つの列にあるデータの10%(上位5%と下位5%)をウィンザライズし、変換定義表に変換を挿入します。STACK_CLIPプロシージャは、定義表の内容から変換リストを作成します。

変換を計算するSQL式は、MINING_DATA_STACKビューに表示されます。このビューは、表示目的専用であり、変換をモデルに埋め込むためには使用できません。

CREATE OR REPLACE VIEW mining_data AS
        SELECT cust_id, cust_year_of_birth, cust_credit_limit, cust_city
        FROM sh.customers;

describe mining_data
 Name                                     Null?    Type
 ---------------------------------------- -------- -------------
 CUST_ID                                  NOT NULL NUMBER
 CUST_YEAR_OF_BIRTH                       NOT NULL NUMBER(4)
 CUST_CREDIT_LIMIT                                 NUMBER
 CUST_CITY                                NOT NULL VARCHAR2(30)
 
BEGIN
  dbms_data_mining_transform.CREATE_CLIP(
      clip_table_name   => 'clip_tbl');
  dbms_data_mining_transform.INSERT_CLIP_WINSOR_TAIL(
      clip_table_name   => 'clip_tbl',
      data_table_name   => 'mining_data',
      tail_frac         => 0.05,
      exclude_list      => DBMS_DATA_MINING_TRANSFORM.COLUMN_LIST('cust_id'));
END;
/

SELECT col, lcut, lval, rcut, rval FROM clip_tbl
   ORDER BY col ASC;
COL                                LCUT     LVAL     RCUT     RVAL
------------------------------ -------- -------- -------- --------
CUST_CREDIT_LIMIT                  1500     1500    11000    11000
CUST_YEAR_OF_BIRTH                 1934     1934     1982     1982

DECLARE
   xforms      dbms_data_mining_transform.TRANSFORM_LIST;
BEGIN
   dbms_data_mining_transform.STACK_CLIP (
   clip_table_name    => 'clip_tbl',
   xform_list        => xforms);
dbms_data_mining_transform.XFORM_STACK (
   xform_list         => xforms,
   data_table_name    => 'mining_data',
   xform_view_name    => 'mining_data_stack');
END;
/
 
set long 3000
SQL> SELECT text FROM user_views WHERE view_name IN 'MINING_DATA_STACK';
 
TEXT
--------------------------------------------------------------------------------
SELECT "CUST_ID",CASE WHEN "CUST_YEAR_OF_BIRTH" < 1934 THEN 1934 WHEN "CUST_YEAR
_OF_BIRTH" > 1982 THEN 1982 ELSE "CUST_YEAR_OF_BIRTH" END "CUST_YEAR_OF_BIRTH",C
ASE WHEN "CUST_CREDIT_LIMIT" < 1500 THEN 1500 WHEN "CUST_CREDIT_LIMIT" > 11000 T
HEN 11000 ELSE "CUST_CREDIT_LIMIT" END "CUST_CREDIT_LIMIT","CUST_CITY" FROM mini
ng_data

36.2.3.17 INSERT_MISS_CAT_MODEプロシージャ

このプロシージャは、質的欠損値を、その列で出現頻度が最も高い値(最頻値)に置き換えます。変換定義表に変換定義を挿入します。

INSERT_MISS_CAT_MODEは、ユーザーが無視する列のリストを指定しないかぎり、データ・ソースのすべてのVARCHAR2列およびCHAR列の欠損値を置き換えます。

構文

DBMS_DATA_MINING_TRANSFORM.INSERT_MISS_CAT_MODE (
    miss_table_name    IN VARCHAR2,
    data_table_name    IN VARCHAR2,
    exclude_list       IN COLUMN_LIST DEFAULT NULL,
    miss_schema_name   IN VARCHAR2 DEFAULT NULL,
    data_schema_name   IN VARCHAR2 DEFAULT NULL);

パラメータ

表36-140 INSERT_MISS_CAT_MODEプロシージャのパラメータ

パラメータ 説明

miss_table_name

質的欠損値処理の変換定義表の名前。CREATE_MISS_CATプロシージャを使用して、定義表を作成できます。次の列は必須です。

 COL         VARCHAR2(30)
 VAL         VARCHAR2(4000)

CREATE_MISS_CATは、追加列のATTを作成しますが、この列は、ネストした属性を指定する場合に使用できます。この列は、INSERT_MISS_CAT_MODEでは使用されません。

data_table_name

変換対象のデータが保存される表の名前。

exclude_list

欠損値処理から除外するカテゴリ列のリスト。exclude_listを指定しない場合、すべてのカテゴリ列が変換されます。

exclude_listの書式は次のとおりです。

dbms_data_mining_transform.COLUMN_LIST('col1','col2',
                                       ...'coln')

miss_schema_name

miss_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

data_schema_name

data_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

使用上のノート

  1. 質的データの詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。

  2. 質的欠損値を最頻値以外の値に置き換える場合、変換定義表を編集できます。

    参照:

    Oracle Data Miningでのデフォルト欠損値処理の詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。

この例で、INSERT_MISS_CAT_MODEは、cust_cityの欠損値処理を計算し、変換定義表に変換を挿入します。STACK_MISS_CATプロシージャは、定義表の内容から変換リストを作成します。

変換を計算するSQL式は、MINING_DATA_STACKビューに表示されます。このビューは、表示目的専用であり、変換をモデルに埋め込むためには使用できません。

CREATE OR REPLACE VIEW mining_data AS
         SELECT cust_id, cust_year_of_birth, cust_city
         FROM sh.customers;
 
describe mining_data
 Name                             Null?    Type
 -------------------------------- -------- ----------------
 CUST_ID                          NOT NULL NUMBER
 CUST_YEAR_OF_BIRTH               NOT NULL NUMBER(4)
 CUST_CITY                        NOT NULL VARCHAR2(30)
 
BEGIN
  dbms_data_mining_transform.create_miss_cat(
      miss_table_name   => 'missc_tbl');
  dbms_data_mining_transform.insert_miss_cat_mode(
      miss_table_name   => 'missc_tbl',
      data_table_name   => 'mining_data');
END;
/

SELECT stats_mode(cust_city) FROM mining_data;
 
STATS_MODE(CUST_CITY)
------------------------------
Los Angeles

SELECT col, val
    from missc_tbl;

COL                            VAL
------------------------------ ------------------------------
CUST_CITY                      Los Angeles

DECLARE
    xforms      dbms_data_mining_transform.TRANSFORM_LIST;
BEGIN
    dbms_data_mining_transform.STACK_MISS_CAT (
        miss_table_name    => 'missc_tbl',
        xform_list        => xforms);
    dbms_data_mining_transform.XFORM_STACK (
         xform_list         => xforms,
         data_table_name    => 'mining_data',
         xform_view_name    => 'mining_data_stack');
END;
/
 
set long 3000
SELECT text FROM user_views WHERE view_name IN 'MINING_DATA_STACK';
 
TEXT
--------------------------------------------------------------------------------
SELECT "CUST_ID","CUST_YEAR_OF_BIRTH",NVL("CUST_CITY",'Los Angeles') "CUST_CITY"
 FROM mining_data

36.2.3.18 INSERT_MISS_NUM_MEANプロシージャ

このプロシージャは、量的欠損値を平均値に置き換えて、変換定義表に変換定義を挿入します。

INSERT_MISS_NUM_MEANは、ユーザーが無視する列のリストを指定しないかぎり、データ・ソースのすべてのNUMBER列およびFLOAT列の欠損値を置き換えます。

構文

DBMS_DATA_MINING_TRANSFORM.INSERT_MISS_NUM_MEAN (
    miss_table_name    IN VARCHAR2,
    data_table_name    IN VARCHAR2,
    exclude_list       IN COLUMN_LIST DEFAULT NULL,
    round_num          IN PLS_INTEGER DEFAULT 6,
    miss_schema_name   IN VARCHAR2 DEFAULT NULL,
    data_schema_name   IN VARCHAR2 DEFAULT NULL);

パラメータ

表36-141 INSERT_MISS_NUM_MEANプロシージャのパラメータ

パラメータ 説明

miss_table_name

量的欠損値処理の変換定義表の名前。CREATE_MISS_NUMプロシージャを使用して、定義表を作成できます。

次の列はINSERT_MISS_NUM_MEANで必須です。

 COL          VARCHAR2(30)
 VAL          NUMBER

CREATE_MISS_NUMは、追加列のATTを作成しますが、この列は、ネストした属性を指定する場合に使用できます。この列は、INSERT_MISS_NUM_MEANでは使用されません。

data_table_name

変換対象のデータが保存される表の名前。

exclude_list

欠損値処理から除外する数値列のリスト。exclude_listを指定しない場合、すべての数値列が変換されます。

exclude_listの書式は次のとおりです。

dbms_data_mining_transform.COLUMN_LIST('col1','col2',
                                       ...'coln')

round_num

平均値に使用するための有効桁数。

デフォルトの桁数は6です。

miss_schema_name

miss_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

data_schema_name

data_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

使用上のノート

  1. 量的データの詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。

  2. 量的欠損値を平均値以外の値に置き換える場合、変換定義表を編集できます。

    参照:

    Oracle Data Miningでのデフォルト欠損値処理の詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。

この例で、INSERT_MISS_NUM_MEANは、cust_year_of_birthの欠損値処理を計算し、変換定義表に変換を挿入します。STACK_MISS_NUMプロシージャは、定義表の内容から変換リストを作成します。

変換を計算するSQL式は、MINING_DATA_STACKビューに表示されます。このビューは、表示目的専用であり、変換をモデルに埋め込むためには使用できません。

CREATE OR REPLACE VIEW mining_data AS
    SELECT cust_id, cust_year_of_birth, cust_city
    FROM sh.customers;

DESCRIBE mining_data
 Name                                       Null?    Type
 ------------------------------------------ -------- -------------------
 CUST_ID                                    NOT NULL NUMBER
 CUST_YEAR_OF_BIRTH                         NOT NULL NUMBER(4)
 CUST_CITY                                  NOT NULL VARCHAR2(30)
 
BEGIN
   dbms_data_mining_transform.create_miss_num(
       miss_table_name   => 'missn_tbl');
   dbms_data_mining_transform.insert_miss_num_mean(
       miss_table_name   => 'missn_tbl',
       data_table_name   => 'mining_data',
       exclude_list      => DBMS_DATA_MINING_TRANSFORM.COLUMN_LIST('cust_id'));
END;
/
 
set numwidth 4
column val off
SELECT col, val
  FROM missn_tbl;
 
COL                   VAL
-------------------- ----
CUST_YEAR_OF_BIRTH   1957
 
SELECT avg(cust_year_of_birth) FROM mining_data;
 
AVG(CUST_YEAR_OF_BIRTH)
-----------------------
                   1957
 
DECLARE
    xforms      dbms_data_mining_transform.TRANSFORM_LIST;
BEGIN
    dbms_data_mining_transform.STACK_MISS_NUM (
         miss_table_name    => 'missn_tbl',
         xform_list        => xforms);
    dbms_data_mining_transform.XFORM_STACK (
         xform_list         => xforms,
         data_table_name    => 'mining_data',
         xform_view_name    => 'mining_data_stack');
END;
/
 
set long 3000
SELECT text FROM user_views WHERE view_name IN 'MINING_DATA_STACK';
 
TEXT
--------------------------------------------------------------------------------
SELECT "CUST_ID",NVL("CUST_YEAR_OF_BIRTH",1957.4) "CUST_YEAR_OF_BIRTH","CUST_CIT
Y" FROM mining_data

36.2.3.19 INSERT_NORM_LIN_MINMAXプロシージャ

このプロシージャは、線形正規化を実行して、変換定義表に変換定義を挿入します。

INSERT_NORM_LIN_MINMAXは、データから最小値と最大値を計算し、shiftおよびscaleの値を次のように設定します。

shift = min
scale = max - min

正規化の計算式は次のとおりです。

x_new = (x_old - shift)/scale

INSERT_NORM_LIN_MINMAXは、scaleの値を指定した有効桁数に丸めてから、その値を変換定義表に格納します。

INSERT_NORM_LIN_MINMAXは、ユーザーが無視する列のリストを指定しないかぎり、データ・ソースのすべてのNUMBER列およびFLOAT列を正規化します。

構文

DBMS_DATA_MINING_TRANSFORM.INSERT_NORM_LIN_MINMAX (
     norm_table_name     IN VARCHAR2,
     data_table_name     IN VARCHAR2,
     exclude_list        IN COLUMN_LIST DEFAULT NULL,
     round_num           IN PLS_INTEGER DEFAULT 6,
     norm_schema_name    IN VARCHAR2 DEFAULT NULL,
     data_schema_name    IN VARCHAR2 DEFAULT NULL);

パラメータ

表36-142 INSERT_NORM_LIN_MINMAXプロシージャのパラメータ

パラメータ 説明

norm_table_name

線形正規化の変換定義表の名前。CREATE_NORM_LINプロシージャを使用して、定義表を作成できます。次の列は必須です。

 COL          VARCHAR2(30)
 SHIFT        NUMBER
 SCALE        NUMBER

CREATE_NORM_LINは、追加列のATTを作成しますが、この列は、ネストした属性を指定する場合に使用できます。この列は、INSERT_NORM_LIN_MINMAXでは使用されません。

data_table_name

変換対象のデータが保存される表の名前。

exclude_list

正規化から除外する数値列のリスト。exclude_listを指定しない場合、すべての数値列が変換されます。

exclude_listの書式は次のとおりです。

dbms_data_mining_transform.COLUMN_LIST('col1','col2',
                                       ...'coln')

round_num

最小値と最大値に使用するための有効桁数。デフォルトの桁数は6です。

norm_schema_name

norm_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

data_schema_name

data_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

使用上のノート

量的データの詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。

この例で、INSERT_NORM_LIN_MINMAXは、cust_year_of_birth列を正規化し、変換定義表に変換を挿入します。STACK_NORM_LINプロシージャは、定義表の内容から変換リストを作成します。

変換を計算するSQL式は、MINING_DATA_STACKビューに表示されます。このビューは、表示目的専用であり、変換をモデルに埋め込むためには使用できません。

CREATE OR REPLACE VIEW mining_data AS
         SELECT cust_id, cust_gender, cust_year_of_birth
         FROM sh.customers;

describe mining_data
 Name                                 Null?    Type
 ------------------------------------ -------- ----------------
 CUST_ID                              NOT NULL NUMBER
 CUST_GENDER                          NOT NULL CHAR(1)
 CUST_YEAR_OF_BIRTH                   NOT NULL NUMBER(4)
 
BEGIN
       dbms_data_mining_transform.CREATE_NORM_LIN(
         norm_table_name  => 'norm_tbl');
       dbms_data_mining_transform.INSERT_NORM_LIN_MINMAX(
         norm_table_name  => 'norm_tbl',
         data_table_name  => 'mining_data',
         exclude_list     => dbms_data_mining_transform.COLUMN_LIST( 'cust_id'),
         round_num        => 3);
END;
/
 
SELECT col, shift, scale FROM norm_tbl;
 
COL                                 SHIFT      SCALE
------------------------------ ---------- ----------
CUST_YEAR_OF_BIRTH                   1910         77

DECLARE
     xforms      dbms_data_mining_transform.TRANSFORM_LIST;
BEGIN
     dbms_data_mining_transform.STACK_NORM_LIN (
          norm_table_name    => 'norm_tbl',
          xform_list        => xforms);
     dbms_data_mining_transform.XFORM_STACK (
          xform_list         => xforms,
          data_table_name    => 'mining_data',
          xform_view_name    => 'mining_data_stack');
END;
/
 
set long 3000
SELECT text FROM user_views WHERE view_name IN 'MINING_DATA_STACK';
 
TEXT
--------------------------------------------------------------------------------
SELECT "CUST_ID","CUST_GENDER",("CUST_YEAR_OF_BIRTH"-1910)/77 "CUST_YEAR_OF_BIRT
H" FROM mining_data

36.2.3.20 INSERT_NORM_LIN_SCALEプロシージャ

このプロシージャは、線形正規化を実行して、変換定義表に変換定義を挿入します。

INSERT_NORM_LIN_SCALEは、データから最小値と最大値を計算し、shiftおよびscaleの値を次のように設定します。

shift = 0
scale = max(abs(max), abs(min))

正規化の計算式は次のとおりです。

x_new = (x_old)/scale

INSERT_NORM_LIN_SCALEは、scaleの値を指定した有効桁数に丸めてから、その値を変換定義表に格納します。

INSERT_NORM_LIN_SCALEは、ユーザーが無視する列のリストを指定しないかぎり、データ・ソースのすべてのNUMBER列およびFLOAT列を正規化します。

構文

DBMS_DATA_MINING_TRANSFORM.INSERT_NORM_LIN_SCALE (
     norm_table_name     IN VARCHAR2,
     data_table_name     IN VARCHAR2,
     exclude_list        IN COLUMN_LIST DEFAULT NULL,
     round_num           IN PLS_INTEGER DEFAULT 6,
     norm_schema_name    IN VARCHAR2 DEFAULT NULL,
     data_schema_name    IN VARCHAR2 DEFAULT NULL);

パラメータ

表36-143 INSERT_NORM_LIN_SCALEプロシージャのパラメータ

パラメータ 説明

norm_table_name

線形正規化の変換定義表の名前。CREATE_NORM_LINプロシージャを使用して、定義表を作成できます。次の列は必須です。

 COL       VARCHAR2(30)
 SHIFT     NUMBER
 SCALE     NUMBER

CREATE_NORM_LINは、追加列のATTを作成しますが、この列は、ネストした属性を指定する場合に使用できます。この列は、INSERT_NORM_LIN_SCALEでは使用されません。

data_table_name

変換対象のデータが保存される表の名前。

exclude_list

正規化から除外する数値列のリスト。exclude_listを指定しない場合、すべての数値列が変換されます。

exclude_listの書式は次のとおりです。

dbms_data_mining_transform.COLUMN_LIST('col1','col2',
                                       ...'coln')

round_num

scaleに使用するための有効桁数。デフォルトの桁数は6です。

norm_schema_name

norm_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

data_schema_name

data_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

使用上のノート

量的データの詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。

この例で、INSERT_NORM_LIN_SCALEは、cust_year_of_birth列を正規化し、変換定義表に変換を挿入します。STACK_NORM_LINプロシージャは、定義表の内容から変換リストを作成します。

変換を計算するSQL式は、MINING_DATA_STACKビューに表示されます。このビューは、表示目的専用であり、変換をモデルに埋め込むためには使用できません。

CREATE OR REPLACE VIEW mining_data AS
      SELECT cust_id, cust_gender, cust_year_of_birth
      FROM sh.customers;

DESCRIBE mining_data
 Name                               Null?    Type
 ---------------------------------- -------- ------------------
 CUST_ID                            NOT NULL NUMBER
 CUST_GENDER                        NOT NULL CHAR(1)
 CUST_YEAR_OF_BIRTH                 NOT NULL NUMBER(4)
 
BEGIN
   dbms_data_mining_transform.CREATE_NORM_LIN(
       norm_table_name  => 'norm_tbl');
       dbms_data_mining_transform.INSERT_NORM_LIN_SCALE(
       norm_table_name  => 'norm_tbl',
       data_table_name  => 'mining_data',
       exclude_list     => dbms_data_mining_transform.COLUMN_LIST( 'cust_id'),
       round_num        => 3);
 END;
 /
 
SELECT col, shift, scale FROM norm_tbl;
 
COL                  SHIFT SCALE
-------------------- ----- -----
CUST_YEAR_OF_BIRTH       0  1990
 
DECLARE
    xforms      dbms_data_mining_transform.TRANSFORM_LIST;
BEGIN
    dbms_data_mining_transform.STACK_NORM_LIN (
        norm_table_name    => 'norm_tbl',
        xform_list        => xforms);
    dbms_data_mining_transform.XFORM_STACK (
        xform_list         => xforms,
        data_table_name    => 'mining_data',
        xform_view_name    => 'mining_data_stack');
END;
/
 
set long 3000
SELECT text FROM user_views WHERE view_name IN 'MINING_DATA_STACK';
 
TEXT
--------------------------------------------------------------------------------
SELECT "CUST_ID","CUST_GENDER",("CUST_YEAR_OF_BIRTH"-0)/1990 "CUST_YEAR_OF_BIRTH
" FROM mining_data

36.2.3.21 INSERT_NORM_LIN_ZSCOREプロシージャ

このプロシージャは、線形正規化を実行して、変換定義表に変換定義を挿入します。

INSERT_NORM_LIN_ZSCOREは、データから平均値と標準偏差を計算し、shiftおよびscaleの値を次のように設定します。

shift = mean
scale = stddev

正規化の計算式は次のとおりです。

x_new = (x_old - shift)/scale

INSERT_NORM_LIN_ZSCOREは、scaleの値を指定した有効桁数に丸めてから、その値を変換定義表に格納します。

INSERT_NORM_LIN_ZSCOREは、ユーザーが無視する列のリストを指定しないかぎり、データのすべてのNUMBER列およびFLOAT列を正規化します。

構文

DBMS_DATA_MINING_TRANSFORM.INSERT_NORM_LIN_ZSCORE (
     norm_table_name     IN VARCHAR2,
     data_table_name     IN VARCHAR2,
     exclude_list        IN COLUMN_LIST DEFAULT NULL,
     round_num           IN PLS_INTEGER DEFAULT 6,
     norm_schema_name    IN VARCHAR2 DEFAULT NULL,
     data_schema_name    IN VARCHAR2 DEFAULT NULL);

パラメータ

表36-144 INSERT_NORM_LIN_ZSCOREプロシージャのパラメータ

パラメータ 説明

norm_table_name

線形正規化の変換定義表の名前。CREATE_NORM_LINプロシージャを使用して、定義表を作成できます。次の列は必須です。

 COL       VARCHAR2(30)
 SHIFT     NUMBER
 SCALE     NUMBER

CREATE_NORM_LINは、追加列のATTを作成しますが、この列は、ネストした属性を指定する場合に使用できます。この列は、INSERT_NORM_LIN_ZSCOREでは使用されません。

data_table_name

変換対象のデータが保存される表の名前。

exclude_list

正規化から除外する数値列のリスト。exclude_listを指定しない場合、すべての数値列が変換されます。

exclude_listの書式は次のとおりです。

dbms_data_mining_transform.COLUMN_LIST('col1','col2',
                                       ...'coln')

round_num

scaleに使用するための有効桁数。デフォルトの桁数は6です。

norm_schema_name

norm_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

data_schema_name

data_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

使用上のノート

量的データの詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。

この例で、INSERT_NORM_LIN_ZSCOREは、cust_year_of_birth列を正規化し、変換定義表に変換を挿入します。STACK_NORM_LINプロシージャは、定義表の内容から変換リストを作成します。

変換を計算するSQL式は、MINING_DATA_STACKビューに表示されます。このビューは、表示目的専用であり、変換をモデルに埋め込むためには使用できません。

CREATE OR REPLACE VIEW mining_data AS
       SELECT cust_id, cust_gender, cust_year_of_birth
       FROM sh.customers;
 
DESCRIBE mining_data
 Name                                Null?    Type
 ----------------------------------- -------- --------------------
 CUST_ID                             NOT NULL NUMBER
 CUST_GENDER                         NOT NULL CHAR(1)
 CUST_YEAR_OF_BIRTH                  NOT NULL NUMBER(4)
 
BEGIN
    dbms_data_mining_transform.CREATE_NORM_LIN(
       norm_table_name  => 'norm_tbl');
       dbms_data_mining_transform.INSERT_NORM_LIN_ZSCORE(
       norm_table_name  => 'norm_tbl',
       data_table_name  => 'mining_data',
       exclude_list     => dbms_data_mining_transform.COLUMN_LIST( 'cust_id'),
       round_num        => 3);
END;
/
 
SELECT col, shift, scale FROM norm_tbl;
 
COL                  SHIFT SCALE
-------------------- ----- -----
CUST_YEAR_OF_BIRTH    1960    15
 
DECLARE
    xforms      dbms_data_mining_transform.TRANSFORM_LIST;
BEGIN
    dbms_data_mining_transform.STACK_NORM_LIN (
        norm_table_name    => 'norm_tbl',
        xform_list        => xforms);
    dbms_data_mining_transform.XFORM_STACK (
        xform_list         => xforms,
        data_table_name    => 'mining_data',
        xform_view_name    => 'mining_data_stack');
END;
/
 
set long 3000
SQL> SELECT text FROM user_views WHERE view_name IN 'MINING_DATA_STACK';
 
TEXT
--------------------------------------------------------------------------------
SELECT "CUST_ID","CUST_GENDER",("CUST_YEAR_OF_BIRTH"-1960)/15 "CUST_YEAR_OF_BIRT
H" FROM mining_data

36.2.3.22 SET_EXPRESSIONプロシージャ

このプロシージャは、SQL式を格納するVARCHAR2配列に行を追加します。

この配列を使用すると、長すぎてSET_TRANSFORMプロシージャで使用できない変換式を指定できます。

GET_EXPRESSIONファンクションは、この配列の行を戻します。

SET_EXPRESSIONを使用して変換式を作成する場合、対応する逆変換式を構成し、変換レコードを作成して、その変換レコードを変換リストに追加する必要があります。

構文

DBMS_DATA_MINING_TRANSFORM.SET_EXPRESSION (
           expression    IN OUT NOCOPY EXPRESSION_REC,
           chunk                       VARCHAR2 DEFAULT NULL);

パラメータ

表36-145 SET_EXPRESSIONプロシージャのパラメータ

パラメータ 説明

expression

属性の変換式または逆変換式を指定する式レコード(EXPRESSION_REC)。各式レコードには、VARCHAR2配列と、その配列内の上限境界と下限境界を指定する索引フィールドが含まれます。

変換レコード(TRANSFORM_REC)内には、2つのEXPRESSION_RECフィールドがあります。1つのフィールドは変換式用で、もう1つのフィールドは逆変換式用です。

EXPRESSION_RECタイプの詳細は、表36-114を参照してください。

chunk

expressionに追加するVARCHAR2チャンク(行)。

ノート

  1. SET_EXPRESSIONchunk引数にNULLを渡すことで、前のチャンクをクリアできます。chunkのデフォルト値はNULLです。

  2. 「変換リストについて」を参照してください。

  3. 「操作上のノート」を参照してください。

この例では、SET_EXPRESSIONへの2つのコールで変換式を構成し、別の2つのコールで逆変換式を構成します。

ノート:

この例は単なる参考用です。この例は、SET_EXPRESSIONによってexpressionにすでに存在するテキストにchunkで指定されたテキストを追加する方法を示しています。SET_EXPRESSIONプロシージャの目的は、SET_TRANSFORMVARCHAR2引数に指定できない非常に長い変換式を構成することです。

同様に、変換リストはモデルに埋め込むためのものですが、参考用として変換リストv_xlstを外部ビューに表示しています。

CREATE OR REPLACE VIEW mining_data AS
       SELECT cust_id, cust_year_of_birth, cust_postal_code, cust_credit_limit
       FROM sh.customers;
 
DECLARE
        v_expr dbms_data_mining_transform.EXPRESSION_REC;
        v_rexp dbms_data_mining_transform.EXPRESSION_REC;
        v_xrec dbms_data_mining_transform.TRANSFORM_REC;
        v_xlst dbms_data_mining_transform.TRANSFORM_LIST :=
                                dbms_data_mining_transform.TRANSFORM_LIST(NULL);
BEGIN
    dbms_data_mining_transform.SET_EXPRESSION(
         EXPRESSION  => v_expr,
         CHUNK       => '("CUST_YEAR_OF_BIRTH"-1910)');
    dbms_data_mining_transform.SET_EXPRESSION(
          EXPRESSION  => v_expr,
          CHUNK       => '/77');
    dbms_data_mining_transform.SET_EXPRESSION(
          EXPRESSION  => v_rexp,
          CHUNK       => '"CUST_YEAR_OF_BIRTH"*77');
    dbms_data_mining_transform.SET_EXPRESSION(
          EXPRESSION  => v_rexp,
          CHUNK       => '+1910');
 
    v_xrec := null;
    v_xrec.attribute_name := 'CUST_YEAR_OF_BIRTH';
    v_xrec.expression := v_expr;
    v_xrec.reverse_expression := v_rexp;
    v_xlst.TRIM;
    v_xlst.extend(1);
    v_xlst(1) := v_xrec;
 
    dbms_data_mining_transform.XFORM_STACK (
        xform_list           =>  v_xlst,
        data_table_name      => 'mining_data',
        xform_view_name      => 'v_xlst_view');
 
    dbms_output.put_line('====');
    FOR i IN 1..v_xlst.count LOOP
      dbms_output.put_line('ATTR: '||v_xlst(i).attribute_name);
      dbms_output.put_line('SUBN: '||v_xlst(i).attribute_subname);
      FOR j IN v_xlst(i).expression.lb..v_xlst(i).expression.ub LOOP
        dbms_output.put_line('EXPR: '||v_xlst(i).expression.lstmt(j));
      END LOOP;
      FOR j IN v_xlst(i).reverse_expression.lb..
                v_xlst(i).reverse_expression.ub LOOP
        dbms_output.put_line('REXP: '||v_xlst(i).reverse_expression.lstmt(j));
      END LOOP;
      dbms_output.put_line('====');
    END LOOP;
  END;
/
====
ATTR: CUST_YEAR_OF_BIRTH
SUBN:
EXPR: ("CUST_YEAR_OF_BIRTH"-1910)
EXPR: /77
REXP: "CUST_YEAR_OF_BIRTH"*77
REXP: +1910
====

36.2.3.23 SET_TRANSFORMプロシージャ

このプロシージャは、属性の変換命令を変換リストに追加します。

構文

DBMS_DATA_MINING_TRANSFORM.SET_TRANSFORM (
          xform_list               IN OUT NOCOPY TRANSFORM_LIST,
          attribute_name           VARCHAR2,
          attribute_subname        VARCHAR2,
          expression               VARCHAR2,
          reverse_expression       VARCHAR2,
          attribute_spec           VARCHAR2 DEFAULT NULL);

パラメータ

表36-146 SET_TRANSFORMプロシージャのパラメータ

パラメータ 説明

xform_list

変換リスト。TRANSFORM_LISTオブジェクト・タイプの詳細は、表36-114を参照してください。

attribute_name

変換する属性の名前。

attribute_subname

attribute_nameがネストされた列の場合はネストされた属性の名前。それ以外の場合はNULL

expression

属性の変換を指定するSQL式。

reverse_expression

モデルのディテールおよび教師ありモデルのターゲット(属性がターゲットの場合)の変換を読みやすさを考慮して元に戻すSQL式。

attribute_spec

モデル作成中の属性の特別な処理を識別する1つ以上のキーワード。値は次のとおりです。

  • NOPREP: ADPが有効な場合、属性の自動変換を阻止します。ADPが有効になっていない場合は、この値による影響はありません。

  • TEXT: 属性が非構造化テキスト・データとして処理されるようになります。

  • FORCE_IN: モデル作成に属性を強制的に含める。特徴選択が有効(ftr_selection_enable = yes)なGLMモデルにのみ使用できます。機能選択はデフォルトで無効になっている。

    特徴選択が有効なGLMがモデルで使用されていない場合、この値は効果がありません。

    attribute_specの詳細は、Oracle Data Miningユーザーズ・ガイドの「属性の変換方法の指定」を参照してください。

使用上のノート

  1. 次の「操作上のノート」の関連する項を参照してください。

    • 変換リストについて

    • ネストしたデータの変換

  2. 次の例に示すとおり、NULL変換式および反転式を指定して属性を削除できます。また、STACKインタフェースを使用して列を削除することもできます(CREATE_COL_REMプロシージャおよびSTACK_COL_REMプロシージャ)。

36.2.3.24 STACK_BIN_CATプロシージャ

このプロシージャは、変換リストに質的ビニング変換を追加します。

構文

DBMS_DATA_MINING_TRANSFORM.STACK_BIN_CAT (
     bin_table_name     IN            VARCHAR2,
     xform_list         IN OUT NOCOPY TRANSFORM_LIST,
     literal_flag       IN            BOOLEAN  DEFAULT FALSE,
     bin_schema_name    IN            VARCHAR2 DEFAULT NULL);

パラメータ

表36-147 STACK_BIN_CATプロシージャのパラメータ

パラメータ 説明

bin_table_name

質的ビニングの変換定義表の名前。CREATE_BIN_CATプロシージャを使用して、定義表を作成できます。STACK_BIN_CATをコールする前に、この表に変換定義を移入する必要があります。表の移入を行う場合、質的ビニング用のINSERTプロシージャの1つを使用するか、独自のSQLを記述することができます。

表36-117を参照してください

xform_list

変換リスト。TRANSFORM_LISTオブジェクト・タイプの詳細は、表36-114 を参照してください。

literal_flag

変換定義表のbin列の値が有効なSQLリテラルであるかどうかを示します。literal_flagFALSE(デフォルト)の場合、ビン識別子は一重引用符で囲まれてSQLリテラルに変換されます。

ビン識別子が数値データ・タイプを含む必要のある数値である場合、O-Clusterモデルと同様にliteral_flagTRUEに設定します。

例については、「INSERT_BIN_NUM_EQWIDTHプロシージャ」を参照してください。

bin_schema_name

bin_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

使用上のノート

「操作上のノート」を参照してください。特に次の項が重要です。

この例は、質的属性列cust_postal_codeのビニング変換をmining_data_stackというスタックに追加する方法を示しています。

ノート:

この例では、XFORM_STACKプロシージャを起動して、スタックによるデータの変換方法を表示します。XFORM_STACKは、変換されたデータの外部ビューを単に生成します。STACKプロシージャの実際の目的は、モデルに埋め込むための変換リストを構成することです。変換は、CREATE_MODELxform_listパラメータに渡されます。例については、「INSERT_BIN_NUM_EQWIDTHプロシージャ」を参照してください。

CREATE or REPLACE VIEW mining_data AS
    SELECT cust_id, cust_postal_code, cust_credit_limit
       FROM sh.customers
       WHERE cust_id BETWEEN 100050 AND 100100;
BEGIN
   dbms_data_mining_transform.CREATE_BIN_CAT ('bin_cat_tbl');
   dbms_data_mining_transform.INSERT_BIN_CAT_FREQ (
        bin_table_name   => 'bin_cat_tbl',
        data_table_name  => 'mining_data',
        bin_num          =>  3);
  END;
/
DECLARE
  MINING_DATA_STACK   dbms_data_mining_transform.TRANSFORM_LIST;
BEGIN
  dbms_data_mining_transform.STACK_BIN_CAT (
    bin_table_name       => 'bin_cat_tbl',
    xform_list           =>  mining_data_stack);
  dbms_data_mining_transform.XFORM_STACK (
    xform_list           =>  mining_data_stack,
    data_table_name      => 'mining_data',
    xform_view_name      => 'mining_data_stack_view');
  END;
/
-- Before transformation
column cust_postal_code format a16
SELECT * from mining_data 
              WHERE cust_id BETWEEN 100050 AND 100053
              ORDER BY cust_id;

  CUST_ID CUST_POSTAL_CODE CUST_CREDIT_LIMIT
---------- ---------------- -----------------
    100050 76486                         1500
    100051 73216                         9000
    100052 69499                         5000
    100053 45704                         7000

-- After transformation
SELECT * FROM mining_data_stack_view
              WHERE cust_id BETWEEN 100050 AND 100053
              ORDER BY cust_id;
 
  CUST_ID CUST_POSTAL_CODE CUST_CREDIT_LIMIT
---------- ---------------- -----------------
    100050 4                             1500
    100051 1                             9000
    100052 4                             5000
    100053 4                             7000

36.2.3.25 STACK_BIN_NUMプロシージャ

このプロシージャは、変換リストに量的ビニング変換を追加します。

構文

DBMS_DATA_MINING_TRANSFORM.STACK_BIN_NUM (
     bin_table_name     IN             VARCHAR2,
     xform_list         IN OUT  NOCOPY TRANSFORM_LIST,
     literal_flag       IN             BOOLEAN  DEFAULT FALSE,
     bin_schema_name    IN             VARCHAR2 DEFAULT NULL);

パラメータ

表36-148 STACK_BIN_NUMプロシージャのパラメータ

パラメータ 説明

bin_table_name

量的ビニングの変換定義表の名前。CREATE_BIN_NUMプロシージャを使用して、定義表を作成できます。STACK_BIN_NUMをコールする前に、この表に変換定義を移入する必要があります。表の移入を行う場合、量的ビニング用のINSERTプロシージャの1つを使用するか、独自のSQLを記述することができます。

表36-119を参照してください。

xform_list

変換リスト。TRANSFORM_LISTオブジェクト・タイプの詳細は、表36-114 を参照してください。

literal_flag

変換定義表のbin列の値が有効なSQLリテラルであるかどうかを示します。literal_flagFALSE(デフォルト)の場合、ビン識別子は一重引用符で囲まれてSQLリテラルに変換されます。

ビン識別子が数値データ・タイプを含む必要のある数値である場合、O-Clusterモデルと同様にliteral_flagTRUEに設定します。

例については、「INSERT_BIN_NUM_EQWIDTHプロシージャ」を参照してください。

bin_schema_name

bin_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

使用上のノート

「操作上のノート」を参照してください。特に次の項が重要です。

この例は、量的属性列cust_credit_limitのビニング変換をmining_data_stackというスタックに追加する方法を示しています。

ノート:

この例では、XFORM_STACKプロシージャを起動して、スタックによるデータの変換方法を表示します。XFORM_STACKは、変換されたデータの外部ビューを単に生成します。STACKプロシージャの実際の目的は、モデルに埋め込むための変換リストを構成することです。変換は、CREATE_MODELxform_listパラメータに渡されます。例については、「INSERT_BIN_NUM_EQWIDTHプロシージャ」を参照してください。

CREATE OR REPLACE VIEW mining_data AS
    SELECT cust_id, cust_postal_code, cust_credit_limit
      FROM sh.customers
      WHERE cust_id BETWEEN 100050 and 100100;
BEGIN
  dbms_data_mining_transform.create_bin_num ('bin_num_tbl');
  dbms_data_mining_transform.insert_bin_num_qtile (
  bin_table_name    => 'bin_num_tbl',
  data_table_name   => 'mining_data',
  bin_num	           => 5,
  exclude_list      =>  dbms_data_mining_transform.COLUMN_LIST('cust_id'));
END;
/
DECLARE
   MINING_DATA_STACK   dbms_data_mining_transform.TRANSFORM_LIST;
BEGIN
   dbms_data_mining_transform.STACK_BIN_CAT (
      bin_table_name	    => 'bin_num_tbl',
      xform_list	        =>  mining_data_stack);
   dbms_data_mining_transform.XFORM_STACK (
      xform_list	        =>  mining_data_stack,
      data_table_name   => 'mining_data',
      xform_view_name   => 'mining_data_stack_view');
END;
/
-- Before transformation
SELECT cust_id, cust_postal_code, ROUND(cust_credit_limit) FROM mining_data
   WHERE cust_id BETWEEN 100050 AND 100055
   ORDER BY cust_id;
CUST_ID   CUST_POSTAL_CODE   ROUND(CUST_CREDIT_LIMIT)
-------   -----------------  -------------------------
100050    76486                                 1500
100051    73216                                 9000 
100052    69499                                 5000
100053    45704                                 7000
100055    74673                                11000
100055    74673                                11000

-- After transformation
SELECT cust_id, cust_postal_code, ROUND(cust_credit_limit)
   FROM mining_data_stack_view
   WHERE cust_id BETWEEN 100050 AND 100055
   ORDER BY cust_id;
CUST_ID   CUST_POSTAL_CODE   ROUND(CUST_CREDIT_LIMITT)
-------   ----------------   -------------------------
100050    76486                                     
100051    73216                                   2
100052    69499                                   1
100053    45704                                   
100054    88021                                   3
100055    74673                                   3

36.2.3.26 STACK_CLIPプロシージャ

このプロシージャは、変換リストにクリッピング変換を追加します。

構文

DBMS_DATA_MINING_TRANSFORM.STACK_CLIP (
          clip_table_name     IN            VARCHAR2,
          xform_list          IN OUT NOCOPY TRANSFORM_LIST,
          clip_schema_name    IN            VARCHAR2 DEFAULT NULL);

パラメータ

表36-149 STACK_CLIPプロシージャのパラメータ

パラメータ 説明

clip_table_name

クリッピングの変換定義表の名前。CREATE_CLIPプロシージャを使用して、定義表を作成できます。STACK_CLIPをコールする前に、この表に変換定義を移入する必要があります。表の移入を行う場合、クリッピング用のINSERTプロシージャの1つを使用するか、独自のSQLを記述することができます。

表36-121を参照してください

xform_list

変換リスト。TRANSFORM_LISTオブジェクト・タイプの詳細は、表36-114 を参照してください。

clip_schema_name

clip_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

使用上のノート

「DBMS_DATA_MINING_TRANSFORMの操作上のノート」を参照してください。特に次の項が重要です。

  • 「変換リストについて」

  • 「スタックについて」

  • 「ネストしたデータの変換」

この例は、量的属性列cust_credit_limitのクリッピング変換をmining_data_stackというスタックに追加する方法を示しています。

ノート:

この例では、XFORM_STACKプロシージャを起動して、スタックによるデータの変換方法を表示します。XFORM_STACKは、変換されたデータの外部ビューを単に生成します。STACKプロシージャの実際の目的は、モデルに埋め込むための変換リストを構成することです。変換は、CREATE_MODELxform_listパラメータに渡されます。例については、「INSERT_BIN_NUM_EQWIDTHプロシージャ」を参照してください。

CREATE OR REPLACE VIEW mining_data AS
       SELECT cust_id, cust_postal_code, cust_credit_limit
       FROM sh.customers
       WHERE cust_id BETWEEN 100050 AND 100100;
BEGIN
   dbms_data_mining_transform.create_clip ('clip_tbl');
   dbms_data_mining_transform.insert_clip_winsor_tail (
       clip_table_name   => 'clip_tbl',
       data_table_name   => 'mining_data',
       tail_frac         => 0.25,
       exclude_list      => dbms_data_mining_transform.COLUMN_LIST('cust_id'));
END;
/
DECLARE
      MINING_DATA_STACK   dbms_data_mining_transform.TRANSFORM_LIST;
BEGIN
      dbms_data_mining_transform.STACK_CLIP (
         clip_table_name     => 'clip_tbl',
         xform_list          =>  mining_data_stack);
      dbms_data_mining_transform.XFORM_STACK (
          xform_list        =>  mining_data_stack,
          data_table_name   => 'mining_data',
          xform_view_name   => 'mining_data_stack_view');
END;
/
-- Before transformation
SELECT cust_id, cust_postal_code, round(cust_credit_limit) 
  FROM mining_data
    WHERE cust_id BETWEEN 100050 AND 100054
    ORDER BY cust_id;
    
CUST_ID   CUST_POSTAL_CODE   ROUND(CUST_CREDIT_LIMIT)
-------   ----------------   ------------------------ 
100050    76486                                 1500 
100051    73216                                 9000 
100052    69499                                 5000 
100053    45704                                 7000 
100054    88021                                11000 
 
-- After transformation
SELECT cust_id, cust_postal_code, round(cust_credit_limit)  
  FROM mining_data_stack_view
    WHERE cust_id BETWEEN 100050 AND 100054
    ORDER BY cust_id;
    
CUST_ID   CUST_POSTAL_CODE   ROUND(CUST_CREDIT_LIMIT)
-------   ----------------   ------------------------
100050    76486                                 5000
100051    73216                                 9000
100052    69499                                 5000
100053    45704                                 7000
100054    88021                                11000

36.2.3.27 STACK_COL_REMプロシージャ

このプロシージャは、変換リストに列削除変換を追加します。

構文

DBMS_DATA_MINING_TRANSFORM.STACK_COL_REM (
     rem_table_name     IN            VARCHAR2,
     xform_list         IN OUT NOCOPY TRANSFORM_LIST,
     rem_schema_name    IN            VARCHAR2 DEFAULT NULL);

パラメータ

表36-150 STACK_COL_REMプロシージャのパラメータ

パラメータ 説明

rem_table_name

列削除の変換定義表の名前。CREATE_COL_REMプロシージャを使用して、定義表を作成できます。表36-123を参照してください。

STACK_COL_REMをコールする前に、この表に列名を移入する必要があります。表の移入を行う場合、オプションでINSERT_BIN_SUPERプロシージャおよびINSERT_AUTOBIN_NUM_EQWIDTHプロシージャを使用できます。また、SQL INSERT文も使用できます。

xform_list

変換リスト。TRANSFORM_LISTオブジェクト・タイプの詳細は、表36-114 を参照してください。

rem_schema_name

rem_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

使用上のノート

「操作上のノート」を参照してください。特に次の項が重要です。

この例は、列cust_credit_limitmining_data_stackという変換リストから削除する方法を示しています。

ノート:

この例では、XFORM_STACKプロシージャを起動して、スタックによるデータの変換方法を表示します。XFORM_STACKは、変換されたデータの外部ビューを単に生成します。STACKプロシージャの実際の目的は、モデルに埋め込むための変換リストを構成することです。変換は、CREATE_MODELxform_listパラメータに渡されます。例については、「INSERT_BIN_NUM_EQWIDTHプロシージャ」を参照してください。

CREATE OR REPLACE VIEW mining_data AS
     SELECT cust_id, country_id, cust_postal_code, cust_credit_limit
        FROM sh.customers;
 
BEGIN
    dbms_data_mining_transform.create_col_rem ('rem_tbl');
END;
/

INSERT into rem_tbl VALUES (upper('cust_postal_code'), null);
 
DECLARE
  MINING_DATA_STACK   dbms_data_mining_transform.TRANSFORM_LIST;
BEGIN
     dbms_data_mining_transform.stack_col_rem (
          rem_table_name     => 'rem_tbl',
          xform_list         =>  mining_data_stack);
      dbms_data_mining_transform.XFORM_STACK (
          xform_list         =>  mining_data_stack,
          data_table_name    => 'mining_data',
          xform_view_name    => 'mining_data_stack_view');
END;
/
 
SELECT *  FROM mining_data
  WHERE cust_id BETWEEN 100050 AND 100051
  ORDER BY cust_id;
 
CUST_ID   COUNTRY_ID   CUST_POSTAL_CODE   CUST_CREDIT_LIMIT
-------   ----------   ----------------   -----------------
100050         52773   76486                          1500
100051         52790   73216                          9000
 
SELECT *  FROM mining_data_stack_view
  WHERE cust_id BETWEEN 100050 AND 100051
  ORDER BY cust_id;
 
CUST_ID   COUNTRY_ID   CUST_CREDIT_LIMIT
-------   ----------   -----------------
100050         52773              1500
100051         52790              9000

36.2.3.28 STACK_MISS_CATプロシージャ

このプロシージャは、変換リストに質的欠損値変換を追加します。

構文

DBMS_DATA_MINING_TRANSFORM.STACK_MISS_CAT (
     miss_table_name     IN       VARCHAR2,
     xform_list          IN OUT   NOCOPY TRANSFORM_LIST,
     miss_schema_name    IN       VARCHAR2 DEFAULT NULL);

パラメータ

表36-151 STACK_MISS_CATプロシージャのパラメータ

パラメータ 説明

miss_table_name

質的欠損値処理の変換定義表の名前。CREATE_MISS_CATプロシージャを使用して、定義表を作成できます。STACK_MISS_CATをコールする前に、この表に変換定義を移入する必要があります。表の移入を行う場合、INSERT_MISS_CAT_MODEプロシージャを使用するか、独自のSQLを記述することができます。

表36-125を参照してください。

xform_list

変換リスト。TRANSFORM_LISTオブジェクト・タイプの詳細は、表36-114 を参照してください。

miss_schema_name

miss_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

使用上のノート

「操作上のノート」を参照してください。特に次の項が重要です。

この例は、列cust_marital_statusの欠損値をmining_data_stackという変換リストの最頻値に置き換える方法を示しています。

ノート:

この例では、XFORM_STACKプロシージャを起動して、スタックによるデータの変換方法を表示します。XFORM_STACKは、変換されたデータの外部ビューを単に生成します。STACKプロシージャの実際の目的は、モデルに埋め込むための変換リストを構成することです。変換は、CREATE_MODELxform_listパラメータに渡されます。例については、「INSERT_BIN_NUM_EQWIDTHプロシージャ」を参照してください。

CREATE OR REPLACE VIEW mining_data AS
      SELECT cust_id, country_id, cust_marital_status
         FROM sh.customers
         where cust_id BETWEEN 1 AND 10;
 
BEGIN
  dbms_data_mining_transform.create_miss_cat ('miss_cat_tbl');
  dbms_data_mining_transform.insert_miss_cat_mode ('miss_cat_tbl', 'mining_data');
END;
/
 
DECLARE
  MINING_DATA_STACK   dbms_data_mining_transform.TRANSFORM_LIST;
BEGIN
     dbms_data_mining_transform.stack_miss_cat (
          miss_table_name   => 'miss_cat_tbl',
          xform_list        => mining_data_stack);
      dbms_data_mining_transform.XFORM_STACK (
          xform_list        =>  mining_data_stack,
          data_table_name   => 'mining_data',
          xform_view_name   => 'mining_data_stack_view');
END;
/
SELECT * FROM mining_data
  ORDER BY cust_id;
 
CUST_ID   COUNTRY_ID   CUST_MARITAL_STATUS
-------   ----------   --------------------
      1      52789
      2      52778
      3      52770
      4      52770
      5      52789
      6      52769     single
      7      52790     single
      8      52790     married
      9      52770     divorced
     10      52790     widow
 
SELECT * FROM mining_data_stack_view
   ORDER By cust_id;
 
CUST_ID   COUNTRY_ID   CUST_MARITAL_STATUS
-------   -----------  --------------------
      1       52789    single
      2       52778    single
      3       52770    single
      4       52770    single
      5       52789    single
      6       52769    single
      7       52790    single
      8       52790    married
      9       52770    divorced
     10       52790    widow

36.2.3.29 STACK_MISS_NUMプロシージャ

このプロシージャは、変換リストに量的欠損値変換を追加します。

構文

DBMS_DATA_MINING_TRANSFORM.STACK_MISS_NUM (
     miss_table_name     IN       VARCHAR2,
     xform_list          IN OUT   NOCOPY TRANSFORM_LIST,
     miss_schema_name    IN       VARCHAR2 DEFAULT NULL);

パラメータ

表36-152 STACK_MISS_NUMプロシージャのパラメータ

パラメータ 説明

miss_table_name

量的欠損値処理の変換定義表の名前。CREATE_MISS_NUMプロシージャを使用して、定義表を作成できます。STACK_MISS_NUMをコールする前に、この表に変換定義を移入する必要があります。表の移入を行う場合、INSERT_MISS_NUM_MEANプロシージャを使用するか、独自のSQLを記述することができます。

表36-127を参照してください。

xform_list

変換リスト。TRANSFORM_LISTオブジェクト・タイプの詳細は、表36-114 を参照してください。

miss_schema_name

miss_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

使用上のノート

「操作上のノート」を参照してください。特に次の項が重要です。

この例は、列cust_credit_limitの欠損値をmining_data_stackという変換リストの平均値に置き換える方法を示しています。

ノート:

この例では、XFORM_STACKプロシージャを起動して、スタックによるデータの変換方法を表示します。XFORM_STACKは、変換されたデータの外部ビューを単に生成します。STACKプロシージャの実際の目的は、モデルに埋め込むための変換リストを構成することです。変換は、CREATE_MODELxform_listパラメータに渡されます。例については、「INSERT_BIN_NUM_EQWIDTHプロシージャ」を参照してください。

describe mining_data
 Name                                                  Null?    Type
 ----------------------------------------------------- -------- -----
 CUST_ID                                               NOT NULL NUMBER
 CUST_CREDIT_LIMIT                                              NUMBER

BEGIN
   dbms_data_mining_transform.create_miss_num ('miss_num_tbl');
   dbms_data_mining_transform.insert_miss_num_mean ('miss_num_tbl','mining_data');
END;
/
SELECT * FROM miss_num_tbl;
 
COL                  ATT      VAL
-------------------- ----- ------
CUST_ID                       5.5
CUST_CREDIT_LIMIT          185.71
 
DECLARE
    MINING_DATA_STACK   dbms_data_mining_transform.TRANSFORM_LIST;
  BEGIN
    dbms_data_mining_transform.STACK_MISS_NUM (
          miss_table_name   => 'miss_num_tbl',
          xform_list        => mining_data_stack);
    dbms_data_mining_transform.XFORM_STACK (
          xform_list        =>  mining_data_stack,
          data_table_name   => 'mining_data',
          xform_view_name   => 'mining_data_stack_view');
END;
/
-- Before transformation
SELECT * FROM mining_data
  ORDER BY cust_id;
CUST_ID CUST_CREDIT_LIMIT
------- -----------------
      1               100
      2
      3               200
      4
      5               150
      6               400
      7               150
      8
      9               100
     10               200
 
-- After transformation
SELECT * FROM mining_data_stack_view
  ORDER BY cust_id;
CUST_ID CUST_CREDIT_LIMIT
------- -----------------
      1               100
      2            185.71
      3               200
      4            185.71
      5               150
      6               400
      7               150
      8            185.71
      9               100
     10               200

36.2.3.30 STACK_NORM_LINプロシージャ

このプロシージャは、変換リストに線形正規化変換を追加します。

構文

DBMS_DATA_MINING_TRANSFORM.STACK_NORM_LIN (
     norm_table_name     IN       VARCHAR2,
     xform_list          IN OUT   NOCOPY TRANSFORM_LIST,
     norm_schema_name    IN       VARCHAR2 DEFAULT NULL);

パラメータ

表36-153 STACK_NORM_LINプロシージャのパラメータ

パラメータ 説明

norm_table_name

線形正規化の変換定義表の名前。CREATE_NORM_LINプロシージャを使用して、定義表を作成できます。STACK_NORM_LINをコールする前に、この表に変換定義を移入する必要があります。表の移入を行う場合、正規化用のINSERTプロシージャの1つを使用するか、独自のSQLを記述することができます。

表36-129を参照してください。

xform_list

変換リスト。TRANSFORM_LISTオブジェクト・タイプの詳細は、表36-114 を参照してください。

norm_schema_name

norm_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

使用上のノート

「操作上のノート」を参照してください。特に次の項が重要です。

この例は、列cust_credit_limitmining_data_stackという変換リストで正規化する方法を示しています。

ノート:

この例では、XFORM_STACKプロシージャを起動して、スタックによるデータの変換方法を表示します。XFORM_STACKは、変換されたデータの外部ビューを単に生成します。STACKプロシージャの実際の目的は、モデルに埋め込むための変換リストを構成することです。変換は、CREATE_MODELxform_listパラメータに渡されます。例については、「INSERT_BIN_NUM_EQWIDTHプロシージャ」を参照してください。

CREATE OR REPLACE VIEW mining_data AS
       SELECT cust_id, country_id, cust_postal_code, cust_credit_limit
          FROM sh.customers;
BEGIN
   dbms_data_mining_transform.create_norm_lin ('norm_lin_tbl');
   dbms_data_mining_transform.insert_norm_lin_minmax (
       norm_table_name   => 'norm_lin_tbl',
       data_table_name   => 'mining_data',
       exclude_list      =>  dbms_data_mining_transform.COLUMN_LIST('cust_id',
                                                             'country_id'));
END;
/
SELECT * FROM norm_lin_tbl;
COL                  ATT    SHIFT  SCALE
-------------------- ----- ------ ------
CUST_CREDIT_LIMIT            1500  13500

DECLARE
   MINING_DATA_STACK   dbms_data_mining_transform.TRANSFORM_LIST;
BEGIN
   dbms_data_mining_transform.stack_norm_lin (
        norm_table_name   => 'norm_lin_tbl',
        xform_list        => mining_data_stack);
   dbms_data_mining_transform.XFORM_STACK (
        xform_list        =>  mining_data_stack,
        data_table_name   => 'mining_data',
        xform_view_name   => 'mining_data_stack_view');
END;
/
SELECT * FROM mining_data
  WHERE cust_id between 1 and 10
  ORDER BY cust_id;
CUST_ID COUNTRY_ID CUST_POSTAL_CODE     CUST_CREDIT_LIMIT
------- ---------- -------------------- -----------------
      1      52789 30828                             9000
      2      52778 86319                            10000
      3      52770 88666                             1500
      4      52770 87551                             1500
      5      52789 59200                             1500
      6      52769 77287                             1500
      7      52790 38763                             1500
      8      52790 58488                             3000
      9      52770 63033                             3000
     10      52790 52602                             3000
 
SELECT * FROM mining_data_stack_view
  WHERE cust_id between 1 and 10
  ORDER BY cust_id;
CUST_ID COUNTRY_ID CUST_POSTAL_CODE     CUST_CREDIT_LIMIT
------- ---------- -------------------- -----------------
      1      52789 30828                           .55556
      2      52778 86319                           .62963
      3      52770 88666                                0
      4      52770 87551                                0
      5      52789 59200                                0
      6      52769 77287                                0
      7      52790 38763                                0
      8      52790 58488                           .11111
      9      52770 63033                           .11111
     10      52790 52602                           .11111

36.2.3.31 XFORM_BIN_CATプロシージャ

このプロシージャは、定義表で指定された質的ビニング変換を実装するビューを作成します。定義表で指定された列のみが変換され、データ表の残りの列はビューに表示されますが、変更されません。

構文

DBMS_DATA_MINING_TRANSFORM.XFORM_BIN_CAT (
     bin_table_name       IN VARCHAR2,
     data_table_name      IN VARCHAR2,
     xform_view_name      IN VARCHAR2,
     literal_flag         IN BOOLEAN DEFAULT FALSE,
     bin_schema_name      IN VARCHAR2 DEFAULT NULL,
     data_schema_name     IN VARCHAR2 DEFAULT NULL,
     xform_schema_name    IN VARCHAR2 DEFAULT NULL);

パラメータ

表36-154 XFORM_BIN_CATプロシージャのパラメータ

パラメータ 説明

bin_table_name

質的ビニングの変換定義表の名前。CREATE_BIN_CATプロシージャを使用して、定義表を作成できます。XFORM_BIN_CATをコールする前に、この表に変換定義を移入する必要があります。表の移入を行う場合、質的ビニング用のINSERTプロシージャの1つを使用するか、独自のSQLを記述することができます。

表36-117を参照してください。

data_table_name

変換対象のデータが保存される表の名前。

xform_view_name

作成するビューの名前。このビューには、bin_table_nameで指定された変換を含むdata_table_nameの列が表示されます。

literal_flag

変換定義表のbin列の値が有効なSQLリテラルであるかどうかを示します。literal_flagFALSE(デフォルト)の場合、ビン識別子は一重引用符で囲まれてSQLリテラルに変換されます。

ビン識別子が数値データ・タイプを含む必要のある数値である場合、O-Clusterモデルと同様にliteral_flagTRUEに設定します。

例については、「INSERT_BIN_NUM_EQWIDTHプロシージャ」を参照してください。

bin_schema_name

bin_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

data_schema_name

data_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

xform_schema_name

xform_view_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

使用上のノート

「操作上のノート」を参照してください。

この例では、cust_postal_code列をビンに区分するビューを作成します。データ・ソースは、sh.customerの3つの列で構成されます。

describe mining_data
 Name                                   Null?    Type
 -------------------------------------- -------- ------------------------
 CUST_ID                                NOT NULL NUMBER
 CUST_POSTAL_CODE                       NOT NULL VARCHAR2(10)
 CUST_CREDIT_LIMIT                               NUMBER
 
SELECT * FROM mining_data WHERE cust_id between 104066 and 104069;
 
   CUST_ID CUST_POSTAL_CODE     CUST_CREDIT_LIMIT                                                   
--------- -------------------- -----------------                                                   
    104066 69776                             7000                                                   
    104067 52602                             9000                                                   
    104068 55787                            11000                                                   
    104069 55977                             5000                                                   
 
BEGIN
  dbms_data_mining_transform.create_bin_cat(
     bin_table_name     => 'bin_cat_tbl');
  dbms_data_mining_transform.insert_bin_cat_freq(
     bin_table_name     => 'bin_cat_tbl',
     data_table_name    => 'mining_data',
     bin_num	      => 10);
   dbms_data_mining_transform.xform_bin_cat(
     bin_table_name     => 'bin_cat_tbl',
     data_table_name    => 'mining_data',
     xform_view_name    => 'bin_cat_view');
END;
/
 
SELECT * FROM bin_cat_view WHERE cust_id between 104066 and 104069;
 
   CUST_ID CUST_POSTAL_CODE     CUST_CREDIT_LIMIT                                                   
---------- -------------------- -----------------                                                   
    104066 6                                 7000                                                   
    104067 11                                9000                                                   
    104068 3                                11000                                                   
    104069 11                                5000                                                   
 
SELECT text FROM user_views WHERE view_name IN 'BIN_CAT_VIEW';
 
TEXT                                                                                                
--------------------------------------------------------------------------------                    
SELECT "CUST_ID",DECODE("CUST_POSTAL_CODE",'38082','1','45704','9','48346','5','                    
55787','3','63736','2','67843','7','69776','6','72860','10','78558','4','80841',                    
'8',NULL,NULL,'11') "CUST_POSTAL_CODE","CUST_CREDIT_LIMIT" FROM mining_data                         

36.2.3.32 XFORM_BIN_NUMプロシージャ

このプロシージャは、定義表で指定された量的ビニング変換を実装するビューを作成します。定義表で指定された列のみが変換され、データ表の残りの列はビューに表示されますが、変更されません。

構文

DBMS_DATA_MINING_TRANSFORM.XFORM_BIN_NUM (
     bin_table_name     IN VARCHAR2,
     data_table_name    IN VARCHAR2,
     xform_view_name    IN VARCHAR2,
     literal_flag       IN BOOLEAN DEFAULT FALSE,
     bin_schema_name    IN VARCHAR2 DEFAULT NULL,
     data_schema_name   IN VARCHAR2 DEFAULT NULL,
     xform_schema_name  IN VARCHAR2 DEFAULT NULL);

パラメータ

表36-155 XFORM_BIN_NUMプロシージャのパラメータ

パラメータ 説明

bin_table_name

量的ビニングの変換定義表の名前。CREATE_BIN_NUMプロシージャを使用して、定義表を作成できます。XFORM_BIN_NUMをコールする前に、この表に変換定義を移入する必要があります。表の移入を行う場合、量的ビニング用のINSERTプロシージャの1つを使用するか、独自のSQLを記述することができます。

表36-119を参照してください。

data_table_name

変換対象のデータが保存される表の名前。

xform_view_name

作成するビューの名前。このビューには、bin_table_nameで指定された変換を含むdata_table_nameの列が表示されます。

literal_flag

変換定義表のbin列の値が有効なSQLリテラルであるかどうかを示します。literal_flagFALSE(デフォルト)の場合、ビン識別子は一重引用符で囲まれてSQLリテラルに変換されます。

ビン識別子が数値データ・タイプを含む必要のある数値である場合、O-Clusterモデルと同様にliteral_flagTRUEに設定します。

例については、「INSERT_BIN_NUM_EQWIDTHプロシージャ」を参照してください。

bin_schema_name

bin_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

data_schema_name

data_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

xform_schema_name

xform_view_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

使用上のノート

「操作上のノート」を参照してください。

この例では、cust_credit_limit列をビンに区分するビューを作成します。データ・ソースは、sh.customerの3つの列で構成されます。

describe mining_data
 Name                                   Null?    Type
 -------------------------------------- -------- ------------------------
 CUST_ID                                NOT NULL NUMBER
 CUST_POSTAL_CODE                       NOT NULL VARCHAR2(10)
 CUST_CREDIT_LIMIT                               NUMBER
 
column cust_credit_limit off
SELECT * FROM mining_data WHERE cust_id between 104066 and 104069;
 
   CUST_ID CUST_POSTAL_CODE   CUST_CREDIT_LIMIT                                         
---------  ------------------  --------------------                                        
    104066 69776                           7000                                         
    104067 52602                           9000                                         
    104068 55787                          11000                                         
    104069 55977                           5000                                         
 
BEGIN
   dbms_data_mining_transform.create_bin_num(
    	   bin_table_name     => 'bin_num_tbl');
   dbms_data_mining_transform.insert_autobin_num_eqwidth(
    	   bin_table_name     => 'bin_num_tbl',
    	   data_table_name    => 'mining_data',
    	   bin_num	            => 5,
    	   max_bin_num	        => 10,
    	   exclude_list       => dbms_data_mining_transform.COLUMN_LIST('cust_id'));
  dbms_data_mining_transform.xform_bin_num(
   	   bin_table_name      => 'bin_num_tbl',
   	   data_table_name     => 'mining_data',
   	   xform_view_name     => 'mining_data_view');
END;
/
describe mining_data_view
 Name                                 Null?    Type
 ------------------------------------ -------- ------------------------
 CUST_ID                              NOT NULL NUMBER
 CUST_POSTAL_CODE                     NOT NULL VARCHAR2(10)
 CUST_CREDIT_LIMIT                             VARCHAR2(2)
 
col cust_credit_limit on
col cust_credit_limit format a25
SELECT * FROM mining_data_view WHERE cust_id between 104066 and 104069;
 
   CUST_ID CUST_POSTAL_CODE     CUST_CREDIT_LIMIT                                         
---------- -------------------- -------------------------                                 
    104066 69776                5                                                         
    104067 52602                6                                                         
    104068 55787                8                                                         
    104069 55977                3                                                         
 
set long 2000
SELECT text FROM user_views WHERE view_name IN 'MINING_DATA_VIEW';
 
TEXT                                                                                      
--------------------------------------------------------------------------------          
SELECT "CUST_ID","CUST_POSTAL_CODE",CASE WHEN "CUST_CREDIT_LIMIT"<1500 THEN NULL          
 WHEN "CUST_CREDIT_LIMIT"<=2850 THEN '1' WHEN "CUST_CREDIT_LIMIT"<=4200 THEN '2'          
 WHEN "CUST_CREDIT_LIMIT"<=5550 THEN '3' WHEN "CUST_CREDIT_LIMIT"<=6900 THEN '4'          
 WHEN "CUST_CREDIT_LIMIT"<=8250 THEN '5' WHEN "CUST_CREDIT_LIMIT"<=9600 THEN '6'          
 WHEN "CUST_CREDIT_LIMIT"<=10950 THEN '7' WHEN "CUST_CREDIT_LIMIT"<=12300 THEN '          
8' WHEN "CUST_CREDIT_LIMIT"<=13650 THEN '9' WHEN "CUST_CREDIT_LIMIT"<=15000 THEN          
 '10' END "CUST_CREDIT_LIMIT" FROM mining_data                                            

36.2.3.33 XFORM_CLIPプロシージャ

このプロシージャは、定義表で指定されたクリッピング変換を実装するビューを作成します。定義表で指定された列のみが変換され、データ表の残りの列はビューに表示されますが、変更されません。

構文

DBMS_DATA_MINING_TRANSFORM.XFORM_CLIP (
    clip_table_name       IN VARCHAR2, 
    data_table_name       IN VARCHAR2,
    xform_view_name       IN VARCHAR2,
    clip_schema_name      IN VARCHAR2 DEFAULT NULL,
    data_schema_name      IN VARCHAR2,DEFAULT NULL,
    xform_schema_name     IN VARCHAR2,DEFAULT NULL);

パラメータ

表36-156 XFORM_CLIPプロシージャのパラメータ

パラメータ 説明

clip_table_name

クリッピングの変換定義表の名前。CREATE_CLIPプロシージャを使用して、定義表を作成できます。XFORM_CLIPをコールする前に、この表に変換定義を移入する必要があります。表の移入を行う場合、クリッピング用のINSERTプロシージャの1つを使用するか、独自のSQLを記述することができます。

表36-121を参照してください。

data_table_name

変換対象のデータが保存される表の名前。

xform_view_name

作成するビューの名前。このビューには、clip_table_nameで指定された変換を含むdata_table_nameの列が表示されます。

clip_schema_name

clip_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

data_schema_name

data_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

xform_schema_name

xform_view_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

この例では、cust_credit_limit列をクリッピングするビューを作成します。データ・ソースは、sh.customerの3つの列で構成されます。

describe mining_data
 Name                           Null?    Type
 ------------------------------ -------- -------------------------
 CUST_ID                        NOT NULL NUMBER
 CUST_POSTAL_CODE               NOT NULL VARCHAR2(10)
 CUST_CREDIT_LIMIT                        NUMBER
 
BEGIN
   dbms_data_mining_transform.create_clip(
      clip_table_name    => 'clip_tbl');
   dbms_data_mining_transform.insert_clip_trim_tail(
      clip_table_name   => 'clip_tbl',
      data_table_name   => 'mining_data',
      tail_frac         => 0.05,
      exclude_list      => dbms_data_mining_transform.COLUMN_LIST('cust_id'));
   dbms_data_mining_transform.xform_clip(
      clip_table_name     => 'clip_tbl',
      data_table_name    => 'mining_data',
      xform_view_name    => 'clip_view');
END;
/
describe clip_view
 Name                          Null?    Type
 ----------------------------- -------- --------------------------
 CUST_ID                       NOT NULL NUMBER
 CUST_POSTAL_CODE              NOT NULL VARCHAR2(10)
 CUST_CREDIT_LIMIT                      NUMBER
 
SELECT MIN(cust_credit_limit), MAX(cust_credit_limit) FROM mining_data;
 
MIN(CUST_CREDIT_LIMIT) MAX(CUST_CREDIT_LIMIT)
---------------------- ----------------------
                  1500                  15000
 
SELECT MIN(cust_credit_limit), MAX(cust_credit_limit) FROM clip_view;
 
MIN(CUST_CREDIT_LIMIT) MAX(CUST_CREDIT_LIMIT)
---------------------- ----------------------
                  1500                  11000
 
set long 2000
SELECT text FROM user_views WHERE view_name IN 'CLIP_VIEW';
 
TEXT
--------------------------------------------------------------------------------
SELECT "CUST_ID","CUST_POSTAL_CODE",CASE WHEN "CUST_CREDIT_LIMIT" < 1500 THEN NU
LL WHEN "CUST_CREDIT_LIMIT" > 11000 THEN NULL ELSE "CUST_CREDIT_LIMIT" END "CUST
_CREDIT_LIMIT" FROM mining_data

36.2.3.34 XFORM_COL_REMプロシージャ

このプロシージャは、定義表で指定された列削除変換を実装するビューを作成します。定義表で指定された列のみが削除され、データ表の残りの列はビューに表示されます。

構文

DBMS_DATA_MINING_TRANSFORM.XFORM_COL_REM (
     rem_table_name     IN       VARCHAR2,
     data_table_name    IN       VARCHAR2,
     xform_view_name    IN       VARCHAR2,
     rem_schema_name    IN       VARCHAR2 DEFAULT NULL,
     data_schema_name   IN       VARCHAR2 DEFAULT NULL,
     xform_schema_name  IN       VARCHAR2 DEFAULT NULL);

パラメータ

表36-157 XFORM_COL_REMプロシージャのパラメータ

パラメータ 説明

rem_table_name

列削除の変換定義表の名前。CREATE_COL_REMプロシージャを使用して、定義表を作成できます。表36-123を参照してください。

XFORM_COL_REMをコールする前に、この表に列名を移入する必要があります。表の移入を行う場合、オプションでINSERT_BIN_SUPERプロシージャおよびINSERT_AUTOBIN_NUM_EQWIDTHプロシージャを使用できます。また、SQL INSERT文も使用できます。

data_table_name

変換対象のデータが保存される表の名前。

xform_view_name

作成するビューの名前。このビューには、rem_table_nameで指定されていないdata_table_nameの列が表示されます。

rem_schema_name

rem_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

data_schema_name

data_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

xform_schema_name

xform_view_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

使用上のノート

「操作上のノート」を参照してください。

この例では、現行のスキーマのcustomers表に含まれるすべての列から1つの列のみを除いたビューを作成します。

describe customers
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 CUST_ID                                   NOT NULL NUMBER
 CUST_MARITAL_STATUS                                VARCHAR2(20)
 OCCUPATION                                         VARCHAR2(21)
 AGE                                                NUMBER
 YRS_RESIDENCE                                      NUMBER

BEGIN
    DBMS_DATA_MINING_TRANSFORM.CREATE_COL_REM ('colrem_xtbl');
END;
 /
INSERT INTO colrem_xtbl VALUES('CUST_MARITAL_STATUS', null);
NOTE: This currently doesn't work. See bug 9310319
BEGIN
   DBMS_DATA_MINING_TRANSFORM.XFORM_COL_REM (
     rem_table_name        => 'colrem_xtbl',
     data_table_name       => 'customers',
     xform_view_name       => 'colrem_view');
END;
/
describe colrem_view

 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 CUST_ID                                   NOT NULL NUMBER
 OCCUPATION                                         VARCHAR2(21)
 AGE                                                NUMBER
 YRS_RESIDENCE                                      NUMBER

36.2.3.35 XFORM_EXPR_NUMプロシージャ

このプロシージャは、指定された量的変換を実装するビューを作成します。指定した列のみが変換され、データ表の残りの列はビューに表示されますが、変更されません。

構文

DBMS_DATA_MINING_TRANSFORM.XFORM_EXPR_NUM (
     expr_pattern       IN       VARCHAR2,
     data_table_name    IN       VARCHAR2,
     xform_view_name    IN       VARCHAR2,
     exclude_list       IN       COLUMN_LIST DEFAULT NULL,
     include_list       IN       COLUMN_LIST DEFAULT NULL,
     col_pattern        IN       VARCHAR2 DEFAULT ':col',
     data_schema_name   IN       VARCHAR2 DEFAULT NULL,
     xform_schema_name  IN       VARCHAR2 DEFAULT NULL);

パラメータ

表36-158 XFORM_EXPR_NUMプロシージャのパラメータ

パラメータ 説明

expr_pattern

数値変換式。

data_table_name

変換対象のデータが保存される表の名前。

xform_view_name

作成するビューの名前。このビューには、expr_patternおよびcol_patternで指定された変換を含むdata_table_nameの列が表示されます。

exclude_list

除外する数値列のリスト。NULLの場合、数値列は除外されません。

exclude_listの書式は次のとおりです。

dbms_data_mining_transform.COLUMN_LIST('col1','col2',
                                       ...'coln')

include_list

含める数値列のリスト。NULLの場合、すべての数値列が含まれます。

include_listの書式は次のとおりです。

dbms_data_mining_transform.COLUMN_LIST('col1','col2',
                                       ...'coln')

col_pattern

列名に置換されるexpr_pattern内の値。col_patternの値は、大文字と小文字が区別されます。

col_patternのデフォルト値は':col'です。

data_schema_name

data_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

xform_schema_name

xform_view_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

使用上のノート

  1. XFORM_EXPR_NUMプロシージャは、出現するすべての指定された列パターン(col_pattern)を実際の列名に置き換えることによって、指定された式パターン(expr_pattern)から数値変換式を構成します。

    XFORM_EXPR_NUMは、SQL REPLACE関数を使用して変換式を構成します。

    REPLACE (expr_pattern,col_pattern,'"column_name"') || '"column_name"'
    

    列が一致した場合、変換式で置換が行われます。一致しない場合、列は変換なしで使用されます。

    関連項目:

    REPLACE関数の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

  2. 包含リストと除外リストのパラメータがあるため、XFORM_EXPR_NUMプロシージャとXFORM_EXPR_STRプロシージャでは、大規模なデータ・セット内で変換を行うために個々の列を簡単に指定できます。他のXFORM_*プロシージャでは、除外リストのみがサポートされます。これらのプロシージャでは、変換しないすべての列を列挙する必要があります。

  3. 「操作上のノート」を参照してください

この例では、数値列のデータ・タイプを変換するビューを作成します。

describe customers
 Name                                Null?    Type
 ----------------------------------- -------- ------------------------
 CUST_ID                             NOT NULL NUMBER
 CUST_MARITAL_STATUS                          VARCHAR2(20)
 OCCUPATION                                   VARCHAR2(21)
 AGE                                          NUMBER
 YRS_RESIDENCE                                NUMBER

BEGIN
  DBMS_DATA_MINING_TRANSFORM.XFORM_EXPR_NUM(
    expr_pattern         => 'to_char(:col)',
    data_table_name      => 'customers',
    xform_view_name      => 'cust_nonum_view',
    exclude_list         => dbms_data_mining_transform.COLUMN_LIST( 'cust_id'),
    include_list         => null,
    col_pattern          => ':col');
END;
/
describe cust_nonum_view
 Name                                Null?    Type
 ----------------------------------- -------- ------------------------
 CUST_ID                             NOT NULL NUMBER
 CUST_MARITAL_STATUS                          VARCHAR2(20)
 OCCUPATION                                   VARCHAR2(21)
 AGE                                          VARCHAR2(40)
 YRS_RESIDENCE                                VARCHAR2(40)

36.2.3.36 XFORM_EXPR_STRプロシージャ

このプロシージャは、指定された質的変換を実装するビューを作成します。指定した列のみが変換され、データ表の残りの列はビューに表示されますが、変更されません。

構文

DBMS_DATA_MINING_TRANSFORM.XFORM_EXPR_STR (
     expr_pattern       IN       VARCHAR2,
     data_table_name    IN       VARCHAR2,
     xform_view_name    IN       VARCHAR2,
     exclude_list       IN       COLUMN_LIST DEFAULT NULL,
     include_list       IN       COLUMN_LIST DEFAULT NULL,
     col_pattern        IN       VARCHAR2 DEFAULT ':col',
     data_schema_name   IN       VARCHAR2 DEFAULT NULL,
     xform_schema_name  IN       VARCHAR2 DEFAULT NULL);

パラメータ

表36-159 XFORM_EXPR_STRプロシージャのパラメータ

パラメータ 説明

expr_pattern

文字変換式。

data_table_name

変換対象のデータが保存される表の名前。

xform_view_name

作成するビューの名前。このビューには、expr_patternおよびcol_patternで指定された変換を含むdata_table_nameの列が表示されます。

exclude_list

除外するカテゴリ列のリスト。NULLの場合、カテゴリ列は除外されません。

exclude_listの書式は次のとおりです。

dbms_data_mining_transform.COLUMN_LIST('col1','col2',
                                       ...'coln')

include_list

含める文字の列のリスト。NULLの場合、すべての文字の列が含まれます。

include_listの書式は次のとおりです。

dbms_data_mining_transform.COLUMN_LIST('col1','col2',
                                       ...'coln')

col_pattern

列名に置換されるexpr_pattern内の値。col_patternの値は、大文字と小文字が区別されます。

col_patternのデフォルト値は':col'です。

data_schema_name

data_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

xform_schema_name

xform_view_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

使用上のノート

  1. XFORM_EXPR_STRプロシージャは、出現するすべての指定された列パターン(col_pattern)を実際の列名に置き換えることによって、指定された式パターン(expr_pattern)から文字変換式を構成します。

    XFORM_EXPR_STRは、SQL REPLACE関数を使用して変換式を構成します。

    REPLACE (expr_pattern,col_pattern,'"column_name"') || '"column_name"'
    

    列が一致した場合、変換式で置換が行われます。一致しない場合、列は変換なしで使用されます。

    関連項目:

    REPLACE関数の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

  2. 包含リストと除外リストのパラメータがあるため、XFORM_EXPR_STRプロシージャとXFORM_EXPR_NUMプロシージャでは、大規模なデータ・セット内で変換を行うために個々の列を簡単に指定できます。他のXFORM_*プロシージャでは、除外リストのみがサポートされます。これらのプロシージャでは、変換しないすべての列を列挙する必要があります。

  3. 「操作上のノート」を参照してください

この例では、文字の列を大文字に変換するビューを作成します。

describe customers
 Name                                Null?    Type
 ----------------------------------- -------- ------------------------
 CUST_ID                             NOT NULL NUMBER
 CUST_MARITAL_STATUS                          VARCHAR2(20)
 OCCUPATION                                   VARCHAR2(21)
 AGE                                          NUMBER
 YRS_RESIDENCE                                NUMBER

SELECT cust_id,  cust_marital_status, occupation FROM customers
    WHERE   cust_id > 102995
    ORDER BY cust_id desc;
 
CUST_ID CUST_MARITAL_STATUS  OCCUPATION
------- -------------------- ---------------------
 103000 Divorc.              Cleric.
 102999 Married              Cleric.
 102998 Married              Exec.
 102997 Married              Exec.
 102996 NeverM               Other
 
BEGIN
  DBMS_DATA_MINING_TRANSFORM.XFORM_EXPR_STR(
       expr_pattern            => 'upper(:col)',
       data_table_name         => 'customers',
       xform_view_name         => 'cust_upcase_view');
END;
/
describe cust_upcase_view
 Name                          Null?    Type
 ----------------------------- -------- --------------------
 CUST_ID                       NOT NULL NUMBER
 CUST_MARITAL_STATUS                    VARCHAR2(20)
 OCCUPATION                             VARCHAR2(21)
 AGE                                    NUMBER
 YRS_RESIDENCE                          NUMBER
 
SELECT cust_id,  cust_marital_status, occupation FROM cust_upcase_view
   WHERE   cust_id > 102995
   ORDER BY cust_id desc;
 
CUST_ID CUST_MARITAL_STATUS  OCCUPATION
------- -------------------- ---------------------
 103000 DIVORC.              CLERIC.
 102999 MARRIED              CLERIC.
 102998 MARRIED              EXEC.
 102997 MARRIED              EXEC.
 102996 NEVERM               OTHER

36.2.3.37 XFORM_MISS_CATプロシージャ

このプロシージャは、定義表で指定された質的欠損値処理変換を実装するビューを作成します。定義表で指定された列のみが変換され、データ表の残りの列はビューに表示されますが、変更されません。

構文

DBMS_DATA_MINING_TRANSFORM.XFORM_MISS_CAT (
    miss_table_name       IN VARCHAR2, 
    data_table_name       IN VARCHAR2,
    xform_view_name       IN VARCHAR2,
    miss_schema_name      IN VARCHAR2 DEFAULT NULL,
    data_schema_name      IN VARCHAR2 DEFAULT NULL,
    xform_schema_name     IN VARCHAR2 DEFAULT NULL;

パラメータ

表36-160 XFORM_MISS_CATプロシージャのパラメータ

パラメータ 説明

miss_table_name

質的欠損値処理の変換定義表の名前。CREATE_MISS_CATプロシージャを使用して、定義表を作成できます。XFORM_MISS_CATをコールする前に、この表に変換定義を移入する必要があります。表の移入を行う場合、INSERT_MISS_CAT_MODEプロシージャを使用するか、独自のSQLを記述することができます。

表36-125を参照してください。

data_table_name

変換対象のデータが保存される表の名前。

xform_view_name

作成するビューの名前。このビューには、miss_table_nameで指定された変換を含むdata_table_nameの列が表示されます。

miss_schema_name

miss_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

data_schema_name

data_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

xform_schema_name

xform_view_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

使用上のノート

「操作上のノート」を参照してください。

この例では、質的欠損値を最頻値に置き換えるビューを作成します。

SELECT * FROM geog;

REG_ID REGION
------ ------------------------------
     1 NE
     2 SW
     3 SE
     4 SW
     5
     6 NE
     7 NW
     8 NW
     9
    10
    11 SE
    12 SE
    13 NW
    14 SE
    15 SE
 
SELECT STATS_MODE(region) FROM geog;

STATS_MODE(REGION)
------------------------------
SE
 
BEGIN
  DBMS_DATA_MINING_TRANSFORM.CREATE_MISS_CAT('misscat_xtbl');
  DBMS_DATA_MINING_TRANSFORM.INSERT_MISS_CAT_MODE (
    miss_table_name         => 'misscat_xtbl',
    data_table_name         => 'geog' );
END;
/

SELECT col, val FROM misscat_xtbl;

COL        VAL
---------- ----------
REGION     SE
 
BEGIN
  DBMS_DATA_MINING_TRANSFORM.XFORM_MISS_CAT (
     miss_table_name        => 'misscat_xtbl',
     data_table_name        => 'geog',
     xform_view_name        => 'geogxf_view');
END;
/

SELECT * FROM geogxf_view;

REG_ID REGION
------ ------------------------------
     1 NE
     2 SW
     3 SE
     4 SW
     5 SE
     6 NE
     7 NW
     8 NW
     9 SE
    10 SE
    11 SE
    12 SE
    13 NW
    14 SE
    15 SE

36.2.3.38 XFORM_MISS_NUMプロシージャ

このプロシージャは、定義表で指定された量的欠損値処理変換を実装するビューを作成します。定義表で指定された列のみが変換され、データ表の残りの列はビューに表示されますが、変更されません。

構文

DBMS_DATA_MINING_TRANSFORM.XFORM_MISS_NUM (
    miss_table_name       IN VARCHAR2, 
    data_table_name       IN VARCHAR2,
    xform_view_name       IN VARCHAR2,
    miss_schema_name      IN VARCHAR2 DEFAULT NULL,
    data_schema_name      IN VARCHAR2 DEFAULT NULL,
    xform_schema_name     IN VARCHAR2 DEFAULT NULL;

パラメータ

表36-161 XFORM_MISS_NUMプロシージャのパラメータ

パラメータ 説明

miss_table_name

量的欠損値処理の変換定義表の名前。CREATE_MISS_NUMプロシージャを使用して、定義表を作成できます。XFORM_MISS_NUMをコールする前に、この表に変換定義を移入する必要があります。表の移入を行う場合、INSERT_MISS_NUM_MEANプロシージャを使用するか、独自のSQLを記述することができます。

表36-127を参照してください。

data_table_name

変換対象のデータが保存される表の名前。

xform_view_name

作成するビューの名前。このビューには、miss_table_nameで指定された変換を含むdata_table_nameの列が表示されます。

miss_schema_name

miss_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

data_schema_name

data_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

xform_schema_name

xform_view_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

使用上のノート

「操作上のノート」を参照してください。

この例では、量的欠損値を平均値に置き換えるビューを作成します。

SELECT * FROM items;
 
ITEM_ID       QTY
---------- ------
aa            200
bb            200
cc            250
dd
ee
ff            100
gg            250
hh            200
ii
jj            200
 
SELECT AVG(qty) FROM items;
 
AVG(QTY)
--------
     200
 
BEGIN
  DBMS_DATA_MINING_TRANSFORM.CREATE_MISS_NUM('missnum_xtbl');
  DBMS_DATA_MINING_TRANSFORM.INSERT_MISS_NUM_MEAN (
     miss_table_name          => 'missnum_xtbl',
     data_table_name         => 'items' );
END;
/
 
SELECT col, val FROM missnum_xtbl;
 
COL           VAL
---------- ------
QTY           200
 
BEGIN
    DBMS_DATA_MINING_TRANSFORM.XFORM_MISS_NUM (
        miss_table_name        => 'missnum_xtbl',
        data_table_name        => 'items',
        xform_view_name        => 'items_view');
END;
/
 
SELECT * FROM items_view;
 
ITEM_ID       QTY
---------- ------
aa            200
bb            200
cc            250
dd            200
ee            200
ff            100
gg            250
hh            200
ii            200
jj            200

36.2.3.39 XFORM_NORM_LINプロシージャ

このプロシージャは、定義表で指定された線形正規化変換を実装するビューを作成します。定義表で指定された列のみが変換され、データ表の残りの列はビューに表示されますが、変更されません。

構文

DBMS_DATA_MINING_TRANSFORM.XFORM_NORM_LIN (
     norm_table_name      IN VARCHAR2,
     data_table_name      IN VARCHAR2,
     xform_view_name      IN VARCHAR2,
     norm_schema_name     IN VARCHAR2 DEFAULT NULL,
     data_schema_name     IN VARCHAR2 DEFAULT NULL,
     xform_schema_name    IN VARCHAR2 DEFAULT NULL);

パラメータ

表36-162 XFORM_NORM_LINプロシージャのパラメータ

パラメータ 説明

norm_table_name

線形正規化の変換定義表の名前。CREATE_NORM_LINプロシージャを使用して、定義表を作成できます。XFORM_NORM_LINをコールする前に、この表に変換定義を移入する必要があります。表の移入を行う場合、正規化用のINSERTプロシージャの1つを使用するか、独自のSQLを記述することができます。

表36-125を参照してください。

data_table_name

変換対象のデータが保存される表の名前。

xform_view_name

作成するビューの名前。このビューには、miss_table_nameで指定された変換を含むdata_table_nameの列が表示されます。

norm_schema_name

miss_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

data_schema_name

data_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

xform_schema_name

xform_view_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

使用上のノート

「操作上のノート」を参照してください。

この例では、cust_year_of_birth列とcust_credit_limit列を正規化するビューを作成します。データ・ソースは、sh.customerの3つの列で構成されます。

CREATE OR REPLACE VIEW mining_data AS
     SELECT cust_id, cust_year_of_birth, cust_credit_limit
     FROM sh.customers;

describe mining_data
 Name                                   Null?    Type
 -------------------------------------- -------- --------------------------
 CUST_ID                                NOT NULL NUMBER
 CUST_YEAR_OF_BIRTH                     NOT NULL NUMBER(4)
 CUST_CREDIT_LIMIT                               NUMBER
 
SELECT * FROM mining_data WHERE cust_id > 104495
  	ORDER BY cust_year_of_birth;
 
 CUST_ID CUST_YEAR_OF_BIRTH CUST_CREDIT_LIMIT
-------- ------------------ -----------------
  104496               1947              3000
  104498               1954             10000
  104500               1962             15000
  104499               1970              3000
  104497               1976              3000
 
BEGIN
  dbms_data_mining_transform.CREATE_NORM_LIN(
       norm_table_name		=> 'normx_tbl');
 dbms_data_mining_transform.INSERT_NORM_LIN_MINMAX(
      norm_table_name	 => 'normx_tbl',
      data_table_name	 => 'mining_data',
      exclude_list	 => dbms_data_mining_transform.COLUMN_LIST( 'cust_id'),
      round_num 	 => 3);
END;
/
 
SELECT col, shift, scale FROM normx_tbl;
 
COL                               SHIFT    SCALE                           
------------------------------ -------- --------                           
CUST_YEAR_OF_BIRTH                 1910       77                           
CUST_CREDIT_LIMIT                  1500    13500                           
 
BEGIN
  DBMS_DATA_MINING_TRANSFORM.XFORM_NORM_LIN (
     norm_table_name	 => 'normx_tbl',
     data_table_name	 => 'mining_data',
     xform_view_name	 => 'norm_view');
END;
/
 
SELECT * FROM norm_view WHERE cust_id > 104495
  	ORDER BY cust_year_of_birth;
 
 CUST_ID CUST_YEAR_OF_BIRTH CUST_CREDIT_LIMIT
-------- ------------------ -----------------
  104496           .4805195          .1111111
  104498           .5714286          .6296296
  104500           .6753247                 1
  104499           .7792208          .1111111
  104497           .8571429          .1111111
 
 
set long 2000
SQL> SELECT text FROM user_views WHERE view_name IN 'NORM_VIEW';
 
TEXT                                                                       
---------------------------------------------------------------------------
SELECT "CUST_ID",("CUST_YEAR_OF_BIRTH"-1910)/77 "CUST_YEAR_OF_BIRTH",("CUST
_CREDIT_LIMIT"-1500)/13500 "CUST_CREDIT_LIMIT" FROM mining_data            
                                                                           

36.2.3.40 XFORM_STACKプロシージャ

このプロシージャは、スタックによって指定された変換を実装するビューを作成します。スタックで指定された列およびネストした属性のみが変換されます。データ表の残りのすべての列およびネストした属性は、変更なしでビューに表示されます。

変換された列を説明するオブジェクトのリストを作成するには、DESCRIBE_STACKプロシージャを使用します。

参照:

概要

データ・マイニング属性の詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。

構文

DBMS_DATA_MINING_TRANSFORM.XFORM_STACK (
     xform_list         IN     TRANSFORM_list,
     data_table_name    IN     VARCHAR2,
     xform_view_name    IN     VARCHAR2,
     data_schema_name   IN     VARCHAR2 DEFAULT NULL,
     xform_schema_name  IN     VARCHAR2 DEFAULT NULL);

パラメータ

表36-163 XFORM_STACKプロシージャのパラメータ

パラメータ 説明

xform_list

変換リスト。TRANSFORM_LISTオブジェクト・タイプの詳細は、表36-114 を参照してください。

data_table_name

変換対象のデータが保存される表の名前。

xform_view_name

作成するビューの名前。このビューによって、xform_listの変換がdata_table_nameに適用されます。

data_schema_name

data_table_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

xform_schema_name

xform_view_nameのスキーマ。スキーマが指定されない場合は、現行のスキーマが使用されます。

使用上のノート

「操作上のノート」を参照してください。特に次の項が重要です。

この例では、変換リストをdmuser.cust_infoビューに適用し、データの変換方法を表示します。cust_infoCREATE文は、「DESCRIBE_STACKプロシージャ」に記載されています。

BEGIN
  dbms_data_mining_transform.CREATE_BIN_NUM ('birth_yr_bins');
  dbms_data_mining_transform.INSERT_BIN_NUM_QTILE (
        bin_table_name   => 'birth_yr_bins',
        data_table_name  =>  'cust_info',
        bin_num          =>   6,
        exclude_list     =>  dbms_data_mining_transform.column_list(
                                 'cust_id','country_id'));
END;
/
SELECT * FROM birth_yr_bins;

COL                  ATT      VAL BIN
-------------------- ----- ------ ----------
CUST_YEAR_OF_BIRTH           1922
CUST_YEAR_OF_BIRTH           1951 1
CUST_YEAR_OF_BIRTH           1959 2
CUST_YEAR_OF_BIRTH           1966 3
CUST_YEAR_OF_BIRTH           1973 4
CUST_YEAR_OF_BIRTH           1979 5
CUST_YEAR_OF_BIRTH           1986 6

DECLARE
      cust_stack   dbms_data_mining_transform.TRANSFORM_LIST;
BEGIN
      dbms_data_mining_transform.SET_TRANSFORM (cust_stack,
          'country_id', NULL, 'country_id/10', 'country_id*10');
      dbms_data_mining_transform.STACK_BIN_NUM ('birth_yr_bins',
          cust_stack);
      dbms_data_mining_transform.SET_TRANSFORM (cust_stack,
          'custprods', 'Mouse Pad', 'value*100', 'value/100');
      dbms_data_mining_transform.XFORM_STACK(
          xform_list        => cust_stack,
          data_table_name   => 'cust_info',
          xform_view_name   =>  'cust_xform_view');
  END;
/

-- Two rows of data without transformations
SELECT * from cust_info WHERE cust_id BETWEEN 100010 AND 100011;

CUST_ID COUNTRY_ID CUST_YEAR_OF_BIRTH CUSTPRODS(ATTRIBUTE_NAME, VALUE)
------- ---------- ------------------ -----------------------------------------
 100010      52790               1975 DM_NESTED_NUMERICALS(
                                        DM_NESTED_NUMERICAL(
                                         '18" Flat Panel Graphics Monitor', 1),
                                        DM_NESTED_NUMERICAL(
                                         'SIMM- 16MB PCMCIAII card', 1))
 100011      52775               1972 DM_NESTED_NUMERICALS(
                                       DM_NESTED_NUMERICAL(
                                         'External 8X CD-ROM', 1),
                                       DM_NESTED_NUMERICAL(
                                         'Mouse Pad', 1),
                                       DM_NESTED_NUMERICAL(
                                        'SIMM- 16MB PCMCIAII card', 1),
                                       DM_NESTED_NUMERICAL(
                                         'Keyboard Wrist Rest', 1),
                                       DM_NESTED_NUMERICAL(
                                         '18" Flat Panel Graphics Monitor', 1),
                                       DM_NESTED_NUMERICAL(
                                         'O/S Documentation Set - English', 1))

-- Same two rows of data with transformations
SELECT * FROM cust_xform_view WHERE cust_id BETWEEN 100010 AND 100011;
 
CUST_ID  COUNTRY_ID  C  CUSTPRODS(ATTRIBUTE_NAME, VALUE)
-------  ----------  -  --------------------------------------------------------
 100010       5279   5  DM_NESTED_NUMERICALS(
                          DM_NESTED_NUMERICAL(
                           '18" Flat Panel Graphics Monitor', 1),
                          DM_NESTED_NUMERICAL(
                            'SIMM- 16MB PCMCIAII card', 1))
 100011     5277.5   4  DM_NESTED_NUMERICALS(
                          DM_NESTED_NUMERICAL(
                            'External 8X CD-ROM', 1),
                          DM_NESTED_NUMERICAL(
                            'Mouse Pad', 100),
                          DM_NESTED_NUMERICAL(
                            'SIMM- 16MB PCMCIAII card', 1),
                          DM_NESTED_NUMERICAL(
                            'Keyboard Wrist Rest', 1),
                          DM_NESTED_NUMERICAL(
                            '18" Flat Panel Graphics Monitor', 1),
                          DM_NESTED_NUMERICAL(
                            'O/S Documentation Set - English', 1))