40.2 DBMS_DATA_MINING_TRANSFORM
DBMS_DATA_MINING_TRANSFORMにより、機械学習で一般的に使用される一連の変換が実装されます。
この章のトピックは、次のとおりです:
40.2.1 DBMS_DATA_MINING_TRANSFORMの使用
この項では、DBMS_DATA_MINING_TRANSFORMパッケージの使用に関連する項目について説明します。
40.2.1.1 DBMS_DATA_MINING_TRANSFORMの概要
変換とは、1つ以上の列のデータを変更するSQL式のことです。
データを使用して機械学習モデルを作成するには、通常、事前にそれらのデータに一定の変換処理を行う必要があります。多くの機械学習のアルゴリズムに特定の変換要件があります。
スコアリングされるデータは、モデルの作成(トレーニング)に使用されたデータと同じ方法で変換される必要があります。
外部変換または埋込み変換
DBMS_DATA_MINING_TRANSFORMでは、変換を実装するための2つのアプローチが提供されます。指定のモデルに対して、次のいずれかを実行できます。
-
変換式のリストを作成してそのリストをCREATE_MODELプロシージャに渡すことができます。
または
-
変換を実装するビューを作成してそのビューの名前をCREATE_MODELプロシージャに渡すことができます。
変換リストを作成してCREATE_MODELに渡す場合、変換式は、モデルに埋め込まれ、モデルが適用されると常に自動的に実装されます。
ビューを作成する場合、変換式は、モデルの外部に存在します。ユーザーは、モデルを適用するたびに変換を再作成する必要があります。
ノート:
埋込み変換によって、モデルの使いやすさが大幅に向上し、モデル管理のプロセスも簡単になります。自動変換
Oracle Machine Learning for SQLは、自動データ準備(ADP)モードをサポートしています。ADPを有効にすると、アルゴリズム固有のほとんどの変換は、自動的に埋め込まれます。他の追加の変換は、埋込み変換リストまたはビューで明示的に指定する必要があります。
ADPを有効にし、変換リストを使用してモデルを作成すると、両方の変換セットが埋め込まれます。モデルは、ADPによって指定された自動変換を実行する前に、変換リストに基づいたユーザー指定の変換を実行します。
変換リスト内で、個々の属性のADPを選択的に無効化できます。
DBMS_DATA_MINING_TRANSFORMでの変換
この項では、DBMS_DATA_MINING_TRANSFORMによってサポートされる変換について要約します。
ビニング
ビニングとは、連続値または離散値をカーディナリティ(基数)の少ない離散値(ビン)に変換することを示します。
-
教師ありビニング(質的および量的)
ビニングは、デシジョン・ツリー・モデルによって決定されるデータの内在関係に基づきます。
「INSERT_BIN_SUPERプロシージャ」を参照してください。
-
頻度が上位N番までの質的属性のビニング
ビニングは、各カテゴリのケース数に基づきます。
「INSERT_BIN_CAT_FREQプロシージャ」を参照してください。
-
等幅の量的ビニング
ビニングは、等範囲のパーティションに基づきます。
「INSERT_BIN_NUM_EQWIDTHプロシージャ」を参照してください。
-
クオンタイル量的ビニング
ビニングは、SQL
NTILE関数を使用して計算されたクオンタイルに基づきます。「INSERT_BIN_NUM_QTILEプロシージャ」を参照してください。
線形正規化
正規化とは、連続値を特定の範囲(通常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プロシージャ」を参照してください。
外れ値処理
外れ値は、それ以外の残りのデータから大きく離れた位置にある数値です。外れ値によって、機械学習の結果を人為的に非対称にすることができます。
-
ウィンザライズ
外れ値は、外れ値以外の最近値に置き換えられます。
「INSERT_CLIP_WINSOR_TAILプロシージャ」を参照してください。
-
トリミング
外れ値は、
NULLに設定されます。「INSERT_CLIP_TRIM_TAILプロシージャ」を参照してください。
欠損値の処理
欠損データは、スパースなデータを示す場合と、複数の値がランダムに欠損していることを示す場合があります。DBMS_DATA_MINING_TRANSFORMでは、欠損値の影響を最小限に抑えるために次の変換がサポートされます。
-
量的欠損値は、その平均値に置き換えられます。
「INSERT_MISS_NUM_MEANプロシージャ」を参照してください。
-
質的欠損値は、その最頻値に置き換えられます。
「INSERT_MISS_CAT_MODEプロシージャ」を参照してください。
ノート:
Oracle Machine Learning for SQLには、欠損データを処理するためのデフォルトのメカニズムもあります。詳細は、『Oracle Machine Learning for SQLユーザーズ・ガイド』を参照してください。40.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_*プロシージャの詳細は、「操作上のノート」を参照してください。
40.2.1.3 DBMS_DATA_MINING_TRANSFORMのデータ型
DBMS_DATA_MINING_TRANSFORMは、次の表で説明するデータ型を定義します。
表40-121 DBMS_DATA_MINING_TRANSFORMのデータ・タイプ
| リスト・タイプ | リスト要素 | 説明 |
|---|---|---|
COLUMN_ LIST |
VARRAY(1000) OF varchar2(32) |
|
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); |
|
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; |
|
40.2.1.4 DBMS_DATA_MINING_TRANSFORMの定数
DBMS_DATA_MINING_TRANSFORMは、次の表で説明する定数を定義します。
表40-122 DBMS_DATA_MINING_TRANSFORMの定数
| 定数 | 値 | 説明 |
|---|---|---|
|
|
100001 |
変換リストの属性が、 ネストした量的属性は次のように定義されます。 attribute_name VARCHAR2(4000) value NUMBER |
|
|
100002 |
変換リストの属性が、 ネストした質的属性は次のように定義されます。 attribute_name VARCHAR2(4000) value VARCHAR2(4000) |
|
|
100003 |
変換リストの属性が、 ネストしたバイナリdouble属性は次のように定義されます。 attribute_name VARCHAR2(4000) value BINARY_DOUBLE |
|
|
100004 |
変換リストの属性が、 attribute_name VARCHAR2(4000) value BINARY_FLOAT |
40.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ルーチンは、移入された定義表を使用して変換リストを作成します。
定義表に基づいて変換を指定するには、次のステップを実行します。
-
CREATEルーチンを使用して変換定義表を作成します。これらの表には、指定のタイプの変換に対応する変換定義を格納する列が含まれます。たとえば、CREATE_BIN_NUMプロシージャは、データ値を格納する列と、関連するビン識別子を格納する別の列を含んだ定義表を作成します。
-
INSERTルーチンを使用して変換定義を計算し、表に挿入します。各
INSERTルーチンでは、変換定義の計算に特定の方法が使用されます。たとえば、INSERT_BIN_NUM_EQWIDTHプロシージャは、最小値と最大値を識別してビン境界を等間隔に設定することで、ビン境界を計算します。 -
STACKルーチンまたはXFORMルーチンを使用して、次のように定義表の情報に基づいて変換式を生成します。-
STACKルーチンを使用して変換リストに変換式を追加します。変換リストをCREATE_MODELプロシージャに渡します。変換式は、1つの長いSQL問合せに構成され、モデルに埋め込まれます。 -
XFORMルーチンを使用してビュー内の変換式を実行します。変換は、モデルの外部に存在するため、新規データにモデルを適用するたびに再作成する必要があります。
-
定義表を使用しない変換
STACKルーチンは、変換リストに変換式を追加するための唯一の方法ではありません。定義表を使用せずに変換リストを作成することも可能です。
定義表を使用せずに変換を指定するには、次のステップを実行します。
-
属性を変換するためのSQL式を記述します。
-
変換を元に戻すためのSQL式を記述します。(「DBMS_DATA_MINING_TRANSFORM - 変換リストについて」の「逆変換とモデルの透過性」を参照)
-
属性のADPを無効にするかどうかを指定します。デフォルトでは、モデルに対してADPを指定した場合、属性に対してADPが有効になります。(「DBMS_DATA_MINING_TRANSFORM - 変換リストについて」の「自動データ準備の無効化」を参照)
-
変換リストに情報を追加するSET_TRANSFORMプロシージャへのコールでSQL式およびADP命令を指定します。
-
変換リストをCREATE_MODELプロシージャに渡します。変換式は、1つの長いSQL問合せに構成され、モデルに埋め込まれます。
ノート:
SET_TRANSFORMを使用して指定するSQL式は、VARCHAR2に収まる必要があります。それより長い式を指定するには、SET_EXPRESSIONプロシージャを使用します。SET_EXPRESSIONでは、VARCHAR2配列に行を追加して式を作成できます。
スタックについて
変換リストは、変換レコードをスタックすることで作成されます。変換リストは、下から上へと評価されます。各変換式は、スタック内でその下位にある変換式の結果に依存します。
40.2.2.1 DBMS_DATA_MINING_TRANSFORM — 変換リストについて
変換リストの要素は、変換レコードです。各変換レコードによって、単一属性の変換を管理するためにモデルで必要とされるすべての情報が提供されます。
各変換レコードには、次のフィールドが含まれます。
-
attribute_name— 変換されるデータの列の名前。 -
attribute_subname—attribute_nameがネストされた列の場合はネストされた属性の名前。それ以外の場合はNULL。 -
expression— 属性を変換するためのSQL式。 -
reverse_expression— 変換を元に戻すためのSQL式。 -
attribute_spec— モデル作成中に、属性の特別な処理を識別します。詳細は、表40-153を参照してください。
参照:
-
TRANSFORM_LISTおよびTRANSFORM_RECオブジェクト・タイプの詳細は、表40-121を参照
逆変換とモデルの透過性
アルゴリズムによって、変換された属性が操作され、モデルの調整およびスコアリングが行われます。ただし、変換された属性はエンド・ユーザーには重要でない場合があります。たとえば、属性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プロシージャを使用すると、既存のモデルに対して逆変換式の指定または更新を行うことができます。
自動データ準備の無効化
ADPは、モデル固有の設定(PREP_AUTO)によって制御されます。PREP_AUTO設定は、個々の属性に対して無効化しないかぎり、すべてのモデル属性に影響します。
ADPを有効化してattribute_specをNOPREPに設定すると、その属性に指定した変換のみが評価されます。ADPを有効化してattribute_specをNOPREPに設定しない場合、その属性に指定した変換の後で自動変換が評価されます。
ADPをモデルに対して有効化しない場合、変換レコードのattribute_specフィールドは無視されます。
参照:
PREP_AUTO設定の詳細は、「自動データ準備」を参照してください。
変換リストへの変換レコードの追加
変換リストは、変換レコードのスタックです。新しい変換レコードを追加すると、そのレコードはスタックの一番上に追加されます。(詳細は、「スタックについて」を参照)
SET_TRANSFORMを使用して変換リストに変換レコードを追加する場合、変換レコードのすべてのフィールドに値を指定できます。
STACKプロシージャを使用して変換リストに変換レコードを追加する場合、変換式のフィールドのみが移入されます。正規化の変換の場合、逆変換式のフィールドも移入されます。
STACKプロシージャとSET_TRANSFORMの両方を使用して1つの変換リストを作成できます。1回のSTACKプロシージャ・コールで、指定した変換定義表にすべての属性の変換レコードが追加されます。1回のSET_TRANSFORMコールで、単一属性の変換レコードが1つ追加されます。
40.2.2.2 DBMS_DATA_MINING_TRANSFORM — スタックおよびSTACKプロシージャについて
変換リストは、変換レコードをスタックすることで作成されます。変換リストは、下から上へと評価されます。各変換式は、スタック内でその下位にある変換式の結果に依存します。
STACKプロシージャ
STACKプロシージャは、変換定義表の情報から変換レコードを作成します。たとえば、STACK_BIN_NUMは、量的ビニング用の定義表に指定された各属性の変換レコードを作成します。STACKプロシージャは、変換レコードを次のようにスタックします。
例40-3 クリッピング変換のスタック
この例は、STACK_CLIPプロシージャによって変換リストに変換レコードを追加する方法を示しています。クリッピング変換は、スタック後にCOL1およびCOL2で元に戻されないことに注意してください(「DBMS_DATA_MINING_TRANSFORM - 変換リストについて」の「逆変換とモデルの透過性」を参照)。
参照先:
-
CREATE_CLIPプロシージャ—定義表の作成
-
INSERT_CLIP_TRIM_TAILプロシージャ—表への定義の挿入
-
INSERT_CLIP_WINSOR_TAILプロシージャ—表への定義の挿入
-
表40-121—変換リストの構造の説明(
TRANSFORM_LISTオブジェクト)
次のように移入されたクリッピング定義表があるとします。
| col | att | lcut | lval | rcut | rval |
|---|---|---|---|---|---|
|
|
null |
-1.5 |
-1.5 |
4.5 |
4.5 |
|
|
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 = null40.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のみです。ネストしたデータの変換は、常にモデルに埋め込まれます。
Oracle Machine Learning for SQLのネストした列は、次の型を保持できます。
DM_NESTED_NUMERICALS DM_NESTED_CATEGORICALS DM_NESTED_BINARY_DOUBLES DM_NESTED_BINARY_FLOATS
参照:
「定数」
Oracle Machine Learning for SQLのネストした属性の詳細は、『Oracle Machine Learning for SQLユーザーズ・ガイド』を参照してください
変換レコードでのネストした属性の指定
変換レコード(TRANSFORM_REC)には、属性を識別するための2つのフィールド(attribute_nameおよびattribute_subname)が含まれます。フィールドattribute_nameには、データ表の列名が格納されます。データ列がネストしていない場合、attribute_subnameはNULLであり、属性名はattribute_nameになります。データ列がネストしている場合、attribute_subnameにはネストした属性の名前が格納され、属性名はattribute_name.attribute_subnameになります。
個々のネストした属性の変換
ネストした列の個々の属性に異なる変換を指定し、その列の残りの属性すべてにデフォルト変換を指定できます。ネストしたデフォルト変換を指定するには、例40-4に示すとおり、attribute_nameフィールドにNULLを指定し、attribute_subnameフィールドにネストした列の名前を指定します。VALUEというキーワードを使用して、変換式でネストした属性の値を表現していることに注意してください。
例40-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関数がネストされます。
ネストした列の追加
例40-5に示すとおり、ネストした列をデータに追加する変換を指定できます。
例40-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))ネストした変換のスタック
例40-6は、STACK_NORM_LINプロシージャによって変換リストにネストした列COL_Nの変換レコードを追加する方法を示しています。
参照先:
-
CREATE_NORM_LINプロシージャ—定義表の作成
-
INSERT_NORM_LIN_MINMAXプロシージャ—表への定義の挿入
-
INSERT_NORM_LIN_SCALEプロシージャ—表への定義の挿入
-
INSERT_NORM_LIN_ZSCOREプロシージャ—表への定義の挿入
-
表40-121—変換リストの構造の説明
例40-6 ネストした正規化変換のスタック
次のように移入された線形正規化定義表があるとします。
| col | att | shift | scale |
|---|---|---|---|
|
|
|
0 |
20 |
|
|
|
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)40.2.3 DBMS_DATA_MINING_TRANSFORMサブプログラムの要約
この表は、DBMS_DATA_MINING_TRANSFORMサブプログラムをアルファベット順に示し、簡単に説明しています。
表40-123 DBMS_DATA_MINING_TRANSFORMパッケージのサブプログラム
| サブプログラム | 用途 |
|---|---|
|
質的ビニングの変換定義表を作成します。 |
|
|
量的ビニングの変換定義表を作成します。 |
|
|
クリッピングの変換定義表を作成します。 |
|
|
列削除の変換定義表を作成します。 |
|
|
質的欠損値処理の変換定義表を作成します。 |
|
|
量的欠損値処理の変換定義表を作成します。 |
|
|
線形正規化の変換定義表を作成します。 |
|
|
変換リストを説明します。 |
|
|
変換式から |
|
|
変換定義表に量的自動等幅ビニング定義を挿入します。 |
|
|
変換定義表に質的頻度ベース・ビニング定義を挿入します。 |
|
|
変換定義表に量的等幅ビニング定義を挿入します。 |
|
|
変換定義表に量的クオンタイル・ビニング式を挿入します。 |
|
|
量的データおよび質的データの変換定義表に教師ありビニング定義を挿入します。 |
|
|
変換定義表に量的トリミング定義を挿入します。 |
|
|
変換定義表に量的ウィンザライズ定義を挿入します。 |
|
|
変換定義表に質的欠損値処理定義を挿入します。 |
|
|
変換定義表に量的欠損値処理定義を挿入します。 |
|
|
変換定義表に最小値と最大値による線形正規化定義を挿入します。 |
|
|
変換定義表にスケールによる線形正規化定義を挿入します。 |
|
|
変換定義表にZスコアによる線形正規化定義を挿入します。 |
|
|
式に |
|
|
変換リストに変換レコードを追加します。 |
|
|
変換リストに質的ビニング式を追加します。 |
|
|
変換リストに量的ビニング式を追加します。 |
|
|
変換リストにクリッピング式を追加します。 |
|
|
変換リストに列削除式を追加します。 |
|
|
変換リストに質的欠損値処理式を追加します。 |
|
|
変換リストに量的欠損値処理式を追加します。 |
|
|
変換リストに線形正規化式を追加します。 |
|
|
質的ビニング変換を使用してデータ表のビューを作成します。 |
|
|
量的ビニング変換を使用してデータ表のビューを作成します。 |
|
|
クリッピング変換を使用してデータ表のビューを作成します。 |
|
|
列削除変換を使用してデータ表のビューを作成します。 |
|
|
指定された量的変換を使用してデータ表のビューを作成します。 |
|
|
指定された質的変換を使用してデータ表のビューを作成します。 |
|
|
質的欠損値処理を使用してデータ表のビューを作成します。 |
|
|
量的欠損値処理を使用してデータ表のビューを作成します。 |
|
|
線形正規化変換を使用してデータ表のビューを作成します。 |
|
|
変換リストのビューを作成します。 |
40.2.3.1 CREATE_BIN_CATプロシージャ
このプロシージャは、質的ビニングの変換定義表を作成します。
列の説明は、次の表のとおりです。
表40-124 質的ビニングの変換定義表の列
| 名前 | データ・タイプ | 説明 |
|---|---|---|
|
|
|
質的データの列の名前。 列がネストしていない場合、列名は属性名でもあります。属性名の詳細は、『Oracle Machine Learning for SQLユーザーズ・ガイド』を参照してください。 |
|
|
|
|
|
|
|
属性の値。 |
|
|
|
値に対するビン割当て。 |
構文
DBMS_DATA_MINING_TRANSFORM.CREATE_BIN_CAT (
bin_table_name IN VARCHAR2,
bin_schema_name IN VARCHAR2 DEFAULT NULL );パラメータ
表40-125 CREATE_BIN_CATプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
作成する変換定義表の名前。 |
|
|
|
使用上のノート
-
質的データの詳細は、『Oracle Machine Learning for SQLユーザーズ・ガイド』を参照してください。
-
変換定義表およびネストしたデータの詳細は、「ネストしたデータの変換」を参照してください。
-
次のプロシージャを使用して、変換定義表にデータを移入できます。
-
INSERT_BIN_CAT_FREQプロシージャ—頻度ベースのビニング
-
INSERT_BIN_SUPERプロシージャ—教師ありビニング
-
例
次の文では、現行のスキーマに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)40.2.3.2 CREATE_BIN_NUMプロシージャ
このプロシージャは、量的ビニングの変換定義表を作成します。
列の説明は、次の表のとおりです。
表40-126 量的ビニングの変換定義表の列
| 名前 | データ・タイプ | 説明 |
|---|---|---|
|
|
|
量的データの列の名前。 列がネストしていない場合、列名は属性名でもあります。属性名の詳細は、『Oracle Machine Learning for SQLユーザーズ・ガイド』を参照してください。 |
|
|
|
|
|
|
|
属性の値。 |
|
|
|
値に対するビン割当て。 |
構文
DBMS_DATA_MINING_TRANSFORM.CREATE_BIN_NUM (
bin_table_name IN VARCHAR2,
bin_schema_name IN VARCHAR2 DEFAULT NULL );パラメータ
表40-127 CREATE_BIN_NUMプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
作成する変換定義表の名前。 |
|
|
|
使用上のノート
-
量的データの詳細は、『Oracle Machine Learning for SQLユーザーズ・ガイド』を参照してください。
-
変換定義表およびネストしたデータの詳細は、「ネストしたデータの変換」を参照してください。
-
次のプロシージャを使用して、変換定義表にデータを移入できます。
-
INSERT_AUTOBIN_NUM_EQWIDTHプロシージャ—自動等幅ビニング
-
INSERT_BIN_NUM_EQWIDTHプロシージャ—ユーザー指定の等幅ビニング
-
INSERT_BIN_NUM_QTILEプロシージャ—クオンタイル・ビニング
-
INSERT_BIN_SUPERプロシージャ—教師ありビニング
-
例
次の文では、現行のスキーマに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)40.2.3.3 CREATE_CLIPプロシージャ
このプロシージャは、外れ値の影響を最小限に抑えるためにクリッピングまたはウィンザライズの変換定義表を作成します。
列の説明は、次の表のとおりです。
表40-128 クリッピングまたはウィンザライズの変換定義表の列
| 名前 | データ・タイプ | 説明 |
|---|---|---|
|
|
|
量的データの列の名前。 列がネストしていない場合、列名は属性名でもあります。属性名の詳細は、『Oracle Machine Learning for SQLユーザーズ・ガイド』を参照してください。 |
|
|
|
|
|
|
|
属性の最小の標準値。 属性値がxy軸にプロットされている場合、
|
|
|
|
|
|
|
|
属性の最大の標準値。 属性値がxy軸にプロットされている場合、
|
|
|
|
|
構文
DBMS_DATA_MINING_TRANSFORM.CREATE_CLIP (
clip_table_name IN VARCHAR2,
clip_schema_name IN VARCHAR2 DEFAULT NULL );パラメータ
表40-129 CREATE_CLIPプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
作成する変換定義表の名前。 |
|
|
|
使用上のノート
-
量的データの詳細は、『Oracle Machine Learning for SQLユーザーズ・ガイド』を参照してください。
-
変換定義表およびネストしたデータの詳細は、「ネストしたデータの変換」を参照してください。
-
次のプロシージャを使用して、変換定義表にデータを移入できます。
-
INSERT_CLIP_TRIM_TAILプロシージャ—外れ値をNULLで置換
-
INSERT_CLIP_WINSOR_TAILプロシージャ—外れ値を平均値で置換
-
例
次の文では、現行のスキーマに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 NUMBER40.2.3.4 CREATE_COL_REMプロシージャ
このプロシージャは、データ表から列を削除するための変換定義表を作成します。
列の説明は、次の表のとおりです。
表40-130 列削除の変換定義表の列
| 名前 | データ・タイプ | 説明 |
|---|---|---|
|
|
|
データの列の名前。 列がネストしていない場合、列名は属性名でもあります。属性名の詳細は、『Oracle Machine Learning for SQLユーザーズ・ガイド』を参照してください。 |
|
|
|
|
構文
DBMS_DATA_MINING_TRANSFORM.CREATE_COL_REM (
rem_table_name VARCHAR2,
rem_schema_name VARCHAR2 DEFAULT NULL );パラメータ
表40-131 CREATE_COL_REMプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
作成する変換定義表の名前。 |
|
|
|
使用上のノート
-
変換定義表およびネストしたデータの詳細は、「ネストしたデータの変換」を参照してください。
-
「操作上のノート」を参照してください。
例
次の文では、現行のスキーマに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)40.2.3.5 CREATE_MISS_CATプロシージャ
このプロシージャは、質的欠損値を置換するための変換定義表を作成します。
列の説明は、次の表のとおりです。
表40-132 質的欠損値処理の変換定義表の列
| 名前 | データ・タイプ | 説明 |
|---|---|---|
|
|
|
質的データの列の名前。 列がネストしていない場合、列名は属性名でもあります。属性名の詳細は、『Oracle Machine Learning for SQLユーザーズ・ガイド』を参照してください。 |
|
|
|
|
|
|
|
属性の欠損値の置換値。 |
構文
DBMS_DATA_MINING_TRANSFORM.CREATE_MISS_CAT (
miss_table_name IN VARCHAR2,
miss_schema_name IN VARCHAR2 DEFAULT NULL );パラメータ
表40-133 CREATE_MISS_CATプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
作成する変換定義表の名前。 |
|
|
|
使用上のノート
-
質的データの詳細は、『Oracle Machine Learning for SQLユーザーズ・ガイド』を参照してください。
-
変換定義表およびネストしたデータの詳細は、「ネストしたデータの変換」を参照してください。
-
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)40.2.3.6 CREATE_MISS_NUMプロシージャ
このプロシージャは、量的欠損値を置換するための変換定義表を作成します。
表40-134に、列の説明を示します。
表40-134 量的欠損値処理の変換定義表の列
| 名前 | データ・タイプ | 説明 |
|---|---|---|
|
|
|
量的データの列の名前。 列がネストしていない場合、列名は属性名でもあります。属性名の詳細は、『Oracle Machine Learning for SQLユーザーズ・ガイド』を参照してください。 |
|
|
|
|
|
|
|
属性の欠損値の置換値。 |
構文
DBMS_DATA_MINING_TRANSFORM.CREATE_MISS_NUM (
miss_table_name IN VARCHAR2,
miss_schema_name IN VARCHAR2 DEFAULT NULL );パラメータ
表40-135 CREATE_MISS_NUMプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
作成する変換定義表の名前。 |
|
|
|
使用上のノート
-
量的データの詳細は、『Oracle Machine Learning for SQLユーザーズ・ガイド』を参照してください。
-
変換定義表およびネストしたデータの詳細は、「ネストしたデータの変換」を参照してください。
-
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 NUMBER40.2.3.7 CREATE_NORM_LINプロシージャ
このプロシージャは、線形正規化の変換定義表を作成します。
表40-136に、列の説明を示します。
表40-136 線形正規化の変換定義表の列
| 名前 | データ・タイプ | 説明 |
|---|---|---|
|
|
|
量的データの列の名前。 列がネストしていない場合、列名は属性名でもあります。属性名の詳細は、『Oracle Machine Learning for SQLユーザーズ・ガイド』を参照してください。 |
|
|
|
|
|
|
|
属性値から差し引かれる定数。 |
|
|
|
差引き後の値を割るための定数。 |
構文
DBMS_DATA_MINING_TRANSFORM.CREATE_NORM_LIN (
norm_table_name IN VARCHAR2,
norm_schema_name IN VARCHAR2 DEFAULT NULL );パラメータ
表40-137 CREATE_NORM_LINプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
作成する変換定義表の名前。 |
|
|
|
使用上のノート
-
量的データの詳細は、『Oracle Machine Learning for SQLユーザーズ・ガイド』を参照してください。
-
変換定義表およびネストしたデータの詳細は、「ネストしたデータの変換」を参照してください。
-
次のプロシージャを使用して、変換定義表にデータを移入できます。
-
INSERT_NORM_LIN_MINMAXプロシージャ—最小値と最大値による線形正規化の使用
-
INSERT_NORM_LIN_SCALEプロシージャ—スケールによる線形正規化の使用
-
INSERT_NORM_LIN_ZSCOREプロシージャ—Zスコアによる線形正規化の使用
-
例
次の文では、現行のスキーマに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
40.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);パラメータ
表40-138 DESCRIBE_STACKプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
変換のリスト。 |
|
|
変換対象のデータが保存される表の名前。 |
|
|
|
|
|
|
使用上のノート
変換リストおよび埋込み変換の詳細は、「操作上のノート」を参照してください。
例
この例は、変換リストが適用された後のoml_user.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
====40.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;パラメータ
表40-139 GET_EXPRESSIONファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
属性の変換式または逆変換式を指定する式レコード( 変換レコード(
|
|
|
|
使用上のノート
-
チャンクの番号は1から始まります。範囲外のチャンクの場合、戻り値はNULLになります。チャンク番号がNULLの場合は、式全体が文字列として戻されます。式が大きすぎる場合は、
VALUE_ERRORが発生します。 -
「変換リストについて」を参照してください。
-
「操作上のノート」を参照してください。
例
SET_EXPRESSIONプロシージャの例を参照してください。
40.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));パラメータ
表40-140 INSERT_AUTOBIN_NUM_EQWIDTHプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
量的ビニングの変換定義表の名前。CREATE_BIN_NUMプロシージャを使用して、定義表を作成できます。次の列は必須です。 COL VARCHAR2(30) VAL NUMBER BIN VARCHAR2(4000)
|
|
|
変換対象のデータが保存される表の名前。 |
|
|
ビンの最小数。
|
|
|
ビンの最大数。
|
|
|
ビニング・プロセスから除外する数値列のリスト。
dbms_data_mining_transform.COLUMN_LIST('col1','col2',
...'coln') |
|
|
変換定義表の
|
|
|
データ・サンプルのサイズ。
|
|
|
|
|
|
|
|
|
列削除の変換定義表の名前。この表には、「CREATE_COL_REMプロシージャ」で説明されている列が含まれる必要があります。
|
|
|
|
使用上のノート
-
量的データの詳細は、『Oracle Machine Learning for SQLユーザーズ・ガイド』を参照してください。
-
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のかわりに使用されます。COUNT、MAX、MIN、STDDEV、FLOORおよびPOWERの各関数の詳細は、『Oracle Machine Learning for SQLユーザーズ・ガイド』を参照してください。 -
INSERT_AUTOBIN_NUM_EQWIDTHは、絶対値を使用してビン数を計算します。パラメータbin_num、max_bin_numおよびsample_sizeの符号は、結果に影響を与えません。 -
ビン数を計算する場合、
INSERT_AUTOBIN_NUM_EQWIDTHは、次の基準を次の順序で評価します。-
ビンの最小数(
bin_num) -
ビンの最大数(
max_bin_num) -
整数列のビンの最大数(
max-min+1の範囲に存在する個別値の数として計算されます)
-
-
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.customersのcust_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')
40.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);パラメータ
表40-141 INSERT_BIN_CAT_FREQプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
質的ビニングの変換定義表の名前。CREATE_BIN_CATプロシージャを使用して、定義表を作成できます。次の列は必須です。 COL VARCHAR2(30) VAL VARCHAR2(4000) BIN VARCHAR2(4000)
|
|
|
変換対象のデータが保存される表の名前。 |
|
|
頻度ベースのビニングを使用してデータを移入するビンの数。ビンの合計数は、 デフォルトのビニング順序は、最大頻度から最小頻度で、出現頻度が最も高いクラスが1番目のビンに割り当てられ、出現頻度が2番目に高いクラスが2番目のビンに割り当てられます(以降同様です)。ビニング順序を逆にするには、 列の個別値(クラス)の合計数が
|
|
|
ビニング・プロセスから除外するカテゴリ列のリスト。
dbms_data_mining_transform.COLUMN_LIST('col1','col2',
...'coln') |
|
|
デフォルトのビンに割り当てるために必要なクラス出現(同じクラスの行)の数。 デフォルトでは、
|
|
|
頻度ベースのビンに割り当てるために必要なクラス出現(同じクラスの行)の数。 デフォルトでは、 出現回数が正の
|
|
|
|
|
|
|
使用上のノート
-
質的データの詳細は、『Oracle Machine Learning for SQLユーザーズ・ガイド』を参照してください。
-
複数の値が同じ頻度で発生した場合、
INSERT_BIN_CAT_FREQは、ビニングが最大頻度から最小頻度の順序である場合は降順で、ビニングが最小頻度から最大頻度の順序である場合は昇順で、それらの値を割り当てます。
例
-
この例で、
INSERT_BIN_CAT_FREQは、sh.customersのcust_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') -
例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
40.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);パラメータ
表40-142 INSERT_BIN_NUM_EQWIDTHプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
量的ビニングの変換定義表の名前。CREATE_BIN_NUMプロシージャを使用して、定義表を作成できます。次の列は必須です。 COL VARCHAR2(30) VAL NUMBER BIN VARCHAR2(4000)
|
|
|
変換対象のデータが保存される表の名前。 |
|
|
ビン数。 デフォルトのビン数は10です。 |
|
|
ビニング・プロセスから除外する数値列のリスト。
dbms_data_mining_transform.COLUMN_LIST('col1','col2',
...'coln') |
|
|
変換定義表の
|
|
|
|
|
|
|
使用上のノート
-
量的データの詳細は、『Oracle Machine Learning for SQLユーザーズ・ガイド』を参照してください。
-
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_BIN_NUM_EQWIDTHでは、すべてがNULL値の列または一意の値が1つのみ含まれる列は無視されます。
例
この例で、INSERT_BIN_NUM_EQWIDTHは、mining_data_buildのaffinity_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')40.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);パラメータ
表40-143 INSERT_BIN_NUM_QTILEプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
量的ビニングの変換定義表の名前。CREATE_BIN_NUMプロシージャを使用して、定義表を作成できます。次の列は必須です。 COL VARCHAR2(30) VAL NUMBER BIN VARCHAR2(4000)
|
|
|
変換対象のデータが保存される表の名前。 |
|
|
ビン数。 デフォルトのビン数は10です。 |
|
|
ビニング・プロセスから除外する数値列のリスト。
dbms_data_mining_transform.COLUMN_LIST('col1','col2',
...'coln') |
|
|
|
|
|
|
使用上のノート
-
量的データの詳細は、『Oracle Machine Learning for SQLユーザーズ・ガイド』を参照してください。
-
データをクオンタイルに分割した後、
NTILE関数は、残りの値を最初から順に各クオンタイルに配分します。詳細は、『Oracle Database SQL言語リファレンス』を参照してください。 -
INSERT_BIN_NUM_QTILEでは、すべての値がNULL値である列は無視されます。
例
この例で、INSERT_BIN_NUM_QTILEは、sh.customersのcust_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_data40.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);パラメータ
表40-144 INSERT_BIN_SUPERプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
量的ビニングの変換定義表の名前。CREATE_BIN_NUMプロシージャを使用して、定義表を作成できます。次の列は必須です。 COL VARCHAR2(30) VAL VNUMBER BIN VARCHAR2(4000)
|
|
|
質的ビニングの変換定義表の名前。CREATE_BIN_CATプロシージャを使用して、定義表を作成できます。次の列は必須です。 COL VARCHAR2(30) VAL VARCHAR2(4000) BIN VARCHAR2(4000)
|
|
|
変換対象のデータが保存される表の名前。 |
|
|
デシジョン・ツリー・モデルのターゲットとして使用する列の名前。 |
|
|
最大ビン数。デフォルトは1000です。 |
|
|
ビニング・プロセスから除外する列のリスト。
dbms_data_mining_transform.COLUMN_LIST('col1','col2',
...'coln') |
|
|
|
|
|
|
|
|
|
|
|
列削除定義表の名前。この表には、「CREATE_COL_REMプロシージャ」で説明されている列が含まれる必要があります。 |
|
|
|
使用上のノート
-
量的データと質的データの詳細は、『Oracle Machine Learning for SQLユーザーズ・ガイド』を参照してください。
-
有意の分割が存在しない列は、ビンに区分されません。ビンに区分されない列をマイニング・データから削除するには、列削除定義表を指定します。列削除定義表を指定しない場合、これらの列は、ビンに区分されないままマイニング・データに残されます。
-
Oracle Machine Learning for SQLのデシジョン・ツリーについてさらに学習するには、『Oracle Machine Learning for SQL概要』を参照してください
例
この例で、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 => 'oml_user',
cat_schema_name => 'oml_user',
data_schema_name => 'oml_user',
rem_table_name => 'rem_tbl',
rem_schema_name => 'oml_user');
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
40.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);パラメータ
表40-145 INSERT_CLIP_TRIM_TAILプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
量的クリッピングの変換定義表の名前。CREATE_CLIPプロシージャを使用して、定義表を作成できます。次の列は必須です。 COL VARCHAR2(30) LCUT NUMBER LVAL NUMBER RCUT NUMBER RVAL NUMBER
|
|
|
変換対象のデータが保存される表の名前。 |
|
|
データの各端で外れ値として指定されるNULL以外の値のパーセント。たとえば、
|
|
|
クリッピング・プロセスから除外する数値列のリスト。
dbms_data_mining_transform.COLUMN_LIST('col1','col2',
...'coln') |
|
|
|
|
|
|
使用上のノート
-
量的データの詳細は、『Oracle Machine Learning for SQLユーザーズ・ガイド』を参照してください。
-
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_data40.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);パラメータ
表40-146 INSERT_CLIP_WINSOR_TAILプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
量的クリッピングの変換定義表の名前。CREATE_CLIPプロシージャを使用して、定義表を作成できます。次の列は必須です。 COL VARCHAR2(30) LCUT NUMBER LVAL NUMBER RCUT NUMBER RVAL NUMBER
|
|
|
変換対象のデータが保存される表の名前。 |
|
|
データの各端で外れ値として指定されるNULL以外の値のパーセント。たとえば、
|
|
|
クリッピング・プロセスから除外する数値列のリスト。
dbms_data_mining_transform.COLUMN_LIST('col1','col2',
...'coln') |
|
|
|
|
|
|
使用上のノート
-
量的データの詳細は、『Oracle Machine Learning for SQLユーザーズ・ガイド』を参照してください。
-
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_data40.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);パラメータ
表40-147 INSERT_MISS_CAT_MODEプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
質的欠損値処理の変換定義表の名前。CREATE_MISS_CATプロシージャを使用して、定義表を作成できます。次の列は必須です。 COL VARCHAR2(30) VAL VARCHAR2(4000)
|
|
|
変換対象のデータが保存される表の名前。 |
|
|
欠損値処理から除外するカテゴリ列のリスト。
dbms_data_mining_transform.COLUMN_LIST('col1','col2',
...'coln') |
|
|
|
|
|
|
使用上のノート
-
質的データの詳細は、『Oracle Machine Learning for SQLユーザーズ・ガイド』を参照してください。
-
質的欠損値を最頻値以外の値に置き換える場合、変換定義表を編集できます。
参照:
Oracle Machine Learning for SQLのデフォルトの欠損値処理の詳細は、『Oracle Machine Learning for SQLユーザーズ・ガイド』を参照してください
例
この例で、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_data40.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);パラメータ
表40-148 INSERT_MISS_NUM_MEANプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
量的欠損値処理の変換定義表の名前。CREATE_MISS_NUMプロシージャを使用して、定義表を作成できます。 次の列は COL VARCHAR2(30) VAL NUMBER
|
|
|
変換対象のデータが保存される表の名前。 |
|
|
欠損値処理から除外する数値列のリスト。
dbms_data_mining_transform.COLUMN_LIST('col1','col2',
...'coln') |
|
|
平均値に使用するための有効桁数。 デフォルトの桁数は6です。 |
|
|
|
|
|
|
使用上のノート
-
量的データの詳細は、『Oracle Machine Learning for SQLユーザーズ・ガイド』を参照してください。
-
量的欠損値を平均値以外の値に置き換える場合、変換定義表を編集できます。
参照:
Oracle Machine Learning for SQLのデフォルトの欠損値処理の詳細は、『Oracle Machine Learning for SQLユーザーズ・ガイド』を参照してください
例
この例で、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_data40.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);パラメータ
表40-149 INSERT_NORM_LIN_MINMAXプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
線形正規化の変換定義表の名前。CREATE_NORM_LINプロシージャを使用して、定義表を作成できます。次の列は必須です。 COL VARCHAR2(30) SHIFT NUMBER SCALE NUMBER
|
|
|
変換対象のデータが保存される表の名前。 |
|
|
正規化から除外する数値列のリスト。
dbms_data_mining_transform.COLUMN_LIST('col1','col2',
...'coln') |
|
|
最小値と最大値に使用するための有効桁数。デフォルトの桁数は6です。 |
|
|
|
|
|
|
使用上のノート
量的データの詳細は、『Oracle Machine Learning for SQLユーザーズ・ガイド』を参照してください。
例
この例で、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_data40.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);パラメータ
表40-150 INSERT_NORM_LIN_SCALEプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
線形正規化の変換定義表の名前。CREATE_NORM_LINプロシージャを使用して、定義表を作成できます。次の列は必須です。 COL VARCHAR2(30) SHIFT NUMBER SCALE NUMBER
|
|
|
変換対象のデータが保存される表の名前。 |
|
|
正規化から除外する数値列のリスト。
dbms_data_mining_transform.COLUMN_LIST('col1','col2',
...'coln') |
|
|
|
|
|
|
|
|
|
使用上のノート
量的データの詳細は、『Oracle Machine Learning for SQLユーザーズ・ガイド』を参照してください。
例
この例で、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_data40.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);パラメータ
表40-151 INSERT_NORM_LIN_ZSCOREプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
線形正規化の変換定義表の名前。CREATE_NORM_LINプロシージャを使用して、定義表を作成できます。次の列は必須です。 COL VARCHAR2(30) SHIFT NUMBER SCALE NUMBER
|
|
|
変換対象のデータが保存される表の名前。 |
|
|
正規化から除外する数値列のリスト。
dbms_data_mining_transform.COLUMN_LIST('col1','col2',
...'coln') |
|
|
|
|
|
|
|
|
|
使用上のノート
量的データの詳細は、『Oracle Machine Learning for SQLユーザーズ・ガイド』を参照してください。
例
この例で、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_data40.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);パラメータ
表40-152 SET_EXPRESSIONプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
属性の変換式または逆変換式を指定する式レコード( 変換レコード(
|
|
|
|
ノート
-
SET_EXPRESSIONのchunk引数にNULLを渡すことで、前のチャンクをクリアできます。chunkのデフォルト値はNULLです。 -
「変換リストについて」を参照してください。
-
「操作上のノート」を参照してください。
例
この例では、SET_EXPRESSIONへの2つのコールで変換式を構成し、別の2つのコールで逆変換式を構成します。
ノート:
この例は単なる参考用です。この例は、SET_EXPRESSIONによってexpressionにすでに存在するテキストにchunkで指定されたテキストを追加する方法を示しています。SET_EXPRESSIONプロシージャの目的は、SET_TRANSFORMのVARCHAR2引数に指定できない非常に長い変換式を構成することです。
同様に、変換リストはモデルに埋め込むためのものですが、参考用として変換リスト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
====40.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);パラメータ
表40-153 SET_TRANSFORMプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
変換リスト。 |
|
|
変換する属性の名前。 |
|
|
|
|
|
属性の変換を指定するSQL式。 |
|
|
モデルのディテールおよび教師ありモデルのターゲット(属性がターゲットの場合)の変換を読みやすさを考慮して元に戻すSQL式。 |
|
|
モデル作成中の属性の特別な処理を識別する1つ以上のキーワード。値は次のとおりです。
|
使用上のノート
-
次の「操作上のノート」の関連する項を参照してください。
-
変換リストについて
-
ネストしたデータの変換
-
-
次の例に示すとおり、NULL変換式および反転式を指定して属性を削除できます。また、STACKインタフェースを使用して列を削除することもできます(CREATE_COL_REMプロシージャおよびSTACK_COL_REMプロシージャ)。
40.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);パラメータ
表40-154 STACK_BIN_CATプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
質的ビニングの変換定義表の名前。CREATE_BIN_CATプロシージャを使用して、定義表を作成できます。 表40-124を参照してください |
|
|
変換リスト。 |
|
|
変換定義表の ビン識別子が数値データ・タイプを含む必要のある数値である場合、O-Clusterモデルと同様に 例については、「INSERT_BIN_NUM_EQWIDTHプロシージャ」を参照してください。 |
|
|
|
例
この例は、質的属性列cust_postal_codeのビニング変換をmining_data_stackというスタックに追加する方法を示しています。
ノート:
この例では、XFORM_STACKプロシージャを起動して、スタックによるデータの変換方法を表示します。XFORM_STACKは、変換されたデータの外部ビューを単に生成します。STACKプロシージャの実際の目的は、モデルに埋め込むための変換リストを構成することです。変換は、CREATE_MODELのxform_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 700040.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);パラメータ
表40-155 STACK_BIN_NUMプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
量的ビニングの変換定義表の名前。CREATE_BIN_NUMプロシージャを使用して、定義表を作成できます。 表40-126を参照してください。 |
|
|
変換リスト。 |
|
|
変換定義表の ビン識別子が数値データ・タイプを含む必要のある数値である場合、O-Clusterモデルと同様に 例については、「INSERT_BIN_NUM_EQWIDTHプロシージャ」を参照してください。 |
|
|
|
例
この例は、量的属性列cust_credit_limitのビニング変換をmining_data_stackというスタックに追加する方法を示しています。
ノート:
この例では、XFORM_STACKプロシージャを起動して、スタックによるデータの変換方法を表示します。XFORM_STACKは、変換されたデータの外部ビューを単に生成します。STACKプロシージャの実際の目的は、モデルに埋め込むための変換リストを構成することです。変換は、CREATE_MODELのxform_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 340.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);パラメータ
表40-156 STACK_CLIPプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
クリッピングの変換定義表の名前。CREATE_CLIPプロシージャを使用して、定義表を作成できます。 表40-128を参照してください |
|
|
変換リスト。 |
|
|
|
使用上のノート
「DBMS_DATA_MINING_TRANSFORMの操作上のノート」を参照してください。特に次の項が重要です。
-
「変換リストについて」
-
「スタックについて」
-
「ネストしたデータの変換」
例
この例は、量的属性列cust_credit_limitのクリッピング変換をmining_data_stackというスタックに追加する方法を示しています。
ノート:
この例では、XFORM_STACKプロシージャを起動して、スタックによるデータの変換方法を表示します。XFORM_STACKは、変換されたデータの外部ビューを単に生成します。STACKプロシージャの実際の目的は、モデルに埋め込むための変換リストを構成することです。変換は、CREATE_MODELのxform_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 1100040.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);パラメータ
表40-157 STACK_COL_REMプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
列削除の変換定義表の名前。CREATE_COL_REMプロシージャを使用して、定義表を作成できます。表40-130を参照してください。
|
|
|
変換リスト。 |
|
|
|
例
この例は、列cust_credit_limitをmining_data_stackという変換リストから削除する方法を示しています。
ノート:
この例では、XFORM_STACKプロシージャを起動して、スタックによるデータの変換方法を表示します。XFORM_STACKは、変換されたデータの外部ビューを単に生成します。STACKプロシージャの実際の目的は、モデルに埋め込むための変換リストを構成することです。変換は、CREATE_MODELのxform_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 900040.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);パラメータ
表40-158 STACK_MISS_CATプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
質的欠損値処理の変換定義表の名前。CREATE_MISS_CATプロシージャを使用して、定義表を作成できます。 表40-132を参照してください。 |
|
|
変換リスト。 |
|
|
|
例
この例は、列cust_marital_statusの欠損値をmining_data_stackという変換リストの最頻値に置き換える方法を示しています。
ノート:
この例では、XFORM_STACKプロシージャを起動して、スタックによるデータの変換方法を表示します。XFORM_STACKは、変換されたデータの外部ビューを単に生成します。STACKプロシージャの実際の目的は、モデルに埋め込むための変換リストを構成することです。変換は、CREATE_MODELのxform_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
40.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);パラメータ
表40-159 STACK_MISS_NUMプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
量的欠損値処理の変換定義表の名前。CREATE_MISS_NUMプロシージャを使用して、定義表を作成できます。 表40-134を参照してください。 |
|
|
変換リスト。 |
|
|
|
例
この例は、列cust_credit_limitの欠損値をmining_data_stackという変換リストの平均値に置き換える方法を示しています。
ノート:
この例では、XFORM_STACKプロシージャを起動して、スタックによるデータの変換方法を表示します。XFORM_STACKは、変換されたデータの外部ビューを単に生成します。STACKプロシージャの実際の目的は、モデルに埋め込むための変換リストを構成することです。変換は、CREATE_MODELのxform_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 20040.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);パラメータ
表40-160 STACK_NORM_LINプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
線形正規化の変換定義表の名前。CREATE_NORM_LINプロシージャを使用して、定義表を作成できます。 表40-136を参照してください。 |
|
|
変換リスト。 |
|
|
|
例
この例は、列cust_credit_limitをmining_data_stackという変換リストで正規化する方法を示しています。
ノート:
この例では、XFORM_STACKプロシージャを起動して、スタックによるデータの変換方法を表示します。XFORM_STACKは、変換されたデータの外部ビューを単に生成します。STACKプロシージャの実際の目的は、モデルに埋め込むための変換リストを構成することです。変換は、CREATE_MODELのxform_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 .1111140.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);パラメータ
表40-161 XFORM_BIN_CATプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
質的ビニングの変換定義表の名前。CREATE_BIN_CATプロシージャを使用して、定義表を作成できます。 表40-124を参照してください。 |
|
|
変換対象のデータが保存される表の名前。 |
|
|
作成するビューの名前。このビューには、 |
|
|
変換定義表の ビン識別子が数値データ・タイプを含む必要のある数値である場合、O-Clusterモデルと同様に 例については、「INSERT_BIN_NUM_EQWIDTHプロシージャ」を参照してください。 |
|
|
|
|
|
|
|
|
|
使用上のノート
「操作上のノート」を参照してください。
例
この例では、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 40.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);パラメータ
表40-162 XFORM_BIN_NUMプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
量的ビニングの変換定義表の名前。CREATE_BIN_NUMプロシージャを使用して、定義表を作成できます。 表40-126を参照してください。 |
|
|
変換対象のデータが保存される表の名前。 |
|
|
作成するビューの名前。このビューには、 |
|
|
変換定義表の ビン識別子が数値データ・タイプを含む必要のある数値である場合、O-Clusterモデルと同様に 例については、「INSERT_BIN_NUM_EQWIDTHプロシージャ」を参照してください。 |
|
|
|
|
|
|
|
|
|
使用上のノート
「操作上のノート」を参照してください。
例
この例では、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 40.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);パラメータ
表40-163 XFORM_CLIPプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
クリッピングの変換定義表の名前。CREATE_CLIPプロシージャを使用して、定義表を作成できます。 表40-128を参照してください。 |
|
|
変換対象のデータが保存される表の名前。 |
|
|
作成するビューの名前。このビューには、 |
|
|
|
|
|
|
|
|
|
例
この例では、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_data40.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);パラメータ
表40-164 XFORM_COL_REMプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
列削除の変換定義表の名前。CREATE_COL_REMプロシージャを使用して、定義表を作成できます。表40-130を参照してください。
|
|
|
変換対象のデータが保存される表の名前。 |
|
|
作成するビューの名前。このビューには、 |
|
|
|
|
|
|
|
|
|
使用上のノート
「操作上のノート」を参照してください。
例
この例では、現行のスキーマの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 NUMBER40.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);パラメータ
表40-165 XFORM_EXPR_NUMプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
数値変換式。 |
|
|
変換対象のデータが保存される表の名前。 |
|
|
作成するビューの名前。このビューには、 |
|
|
除外する数値列のリスト。
dbms_data_mining_transform.COLUMN_LIST('col1','col2',
...'coln') |
|
|
含める数値列のリスト。
dbms_data_mining_transform.COLUMN_LIST('col1','col2',
...'coln') |
|
|
列名に置換される
|
|
|
|
|
|
|
使用上のノート
-
XFORM_EXPR_NUMプロシージャは、出現するすべての指定された列パターン(col_pattern)を実際の列名に置き換えることによって、指定された式パターン(expr_pattern)から数値変換式を構成します。XFORM_EXPR_NUMは、SQLREPLACE関数を使用して変換式を構成します。REPLACE (expr_pattern,col_pattern,'"column_name"') || '"column_name"'
列が一致した場合、変換式で置換が行われます。一致しない場合、列は変換なしで使用されます。
関連項目:
REPLACE関数の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。 -
包含リストと除外リストのパラメータがあるため、
XFORM_EXPR_NUMプロシージャとXFORM_EXPR_STRプロシージャでは、大規模なデータ・セット内で変換を行うために個々の列を簡単に指定できます。他のXFORM_*プロシージャでは、除外リストのみがサポートされます。これらのプロシージャでは、変換しないすべての列を列挙する必要があります。 -
「操作上のノート」を参照してください
例
この例では、数値列のデータ・タイプを変換するビューを作成します。
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)40.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);パラメータ
表40-166 XFORM_EXPR_STRプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
文字変換式。 |
|
|
変換対象のデータが保存される表の名前。 |
|
|
作成するビューの名前。このビューには、 |
|
|
除外するカテゴリ列のリスト。
dbms_data_mining_transform.COLUMN_LIST('col1','col2',
...'coln') |
|
|
含める文字の列のリスト。
dbms_data_mining_transform.COLUMN_LIST('col1','col2',
...'coln') |
|
|
列名に置換される
|
|
|
|
|
|
|
使用上のノート
-
XFORM_EXPR_STRプロシージャは、出現するすべての指定された列パターン(col_pattern)を実際の列名に置き換えることによって、指定された式パターン(expr_pattern)から文字変換式を構成します。XFORM_EXPR_STRは、SQLREPLACE関数を使用して変換式を構成します。REPLACE (expr_pattern,col_pattern,'"column_name"') || '"column_name"'
列が一致した場合、変換式で置換が行われます。一致しない場合、列は変換なしで使用されます。
関連項目:
REPLACE関数の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。 -
包含リストと除外リストのパラメータがあるため、
XFORM_EXPR_STRプロシージャとXFORM_EXPR_NUMプロシージャでは、大規模なデータ・セット内で変換を行うために個々の列を簡単に指定できます。他のXFORM_*プロシージャでは、除外リストのみがサポートされます。これらのプロシージャでは、変換しないすべての列を列挙する必要があります。 -
「操作上のノート」を参照してください
例
この例では、文字の列を大文字に変換するビューを作成します。
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 OTHER40.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;パラメータ
表40-167 XFORM_MISS_CATプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
質的欠損値処理の変換定義表の名前。CREATE_MISS_CATプロシージャを使用して、定義表を作成できます。 表40-132を参照してください。 |
|
|
変換対象のデータが保存される表の名前。 |
|
|
作成するビューの名前。このビューには、 |
|
|
|
|
|
|
|
|
|
使用上のノート
「操作上のノート」を参照してください。
例
この例では、質的欠損値を最頻値に置き換えるビューを作成します。
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
40.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;パラメータ
表40-168 XFORM_MISS_NUMプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
量的欠損値処理の変換定義表の名前。CREATE_MISS_NUMプロシージャを使用して、定義表を作成できます。 表40-134を参照してください。 |
|
|
変換対象のデータが保存される表の名前。 |
|
|
作成するビューの名前。このビューには、 |
|
|
|
|
|
|
|
|
|
使用上のノート
「操作上のノート」を参照してください。
例
この例では、量的欠損値を平均値に置き換えるビューを作成します。
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 20040.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);パラメータ
表40-169 XFORM_NORM_LINプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
線形正規化の変換定義表の名前。CREATE_NORM_LINプロシージャを使用して、定義表を作成できます。 表40-132を参照してください。 |
|
|
変換対象のデータが保存される表の名前。 |
|
|
作成するビューの名前。このビューには、 |
|
|
|
|
|
|
|
|
|
使用上のノート
「操作上のノート」を参照してください。
例
この例では、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
40.2.3.40 XFORM_STACKプロシージャ
このプロシージャは、スタックによって指定された変換を実装するビューを作成します。スタックで指定された列およびネストした属性のみが変換されます。データ表の残りのすべての列およびネストした属性は、変更なしでビューに表示されます。
変換された列を説明するオブジェクトのリストを作成するには、DESCRIBE_STACKプロシージャを使用します。
構文
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);パラメータ
表40-170 XFORM_STACKプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
変換リスト。 |
|
|
変換対象のデータが保存される表の名前。 |
|
|
作成するビューの名前。このビューによって、 |
|
|
|
|
|
|
例
この例は、ビューoml_user.cust_infoに変換リストを適用することで、データを変換する方法について示しています。cust_infoのCREATE文は、「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))