DBMS_DATA_MINING_TRANSFORM
では、データ・マイニングで一般的に使用されている一連の変換が実装されます。
この章では、次の項目について説明します。
DBMS_DATA_MINING_TRANSFORMの使用方法
概要
使用上の注意
セキュリティ・モデル
タイプ
定数
この項では、DBMS_DATA_MINING_TRANSFORM
パッケージの使用に関連する項目について説明します。
変換とは、1つ以上の列のデータを変更するSQL式のことです。
データを使用してマイニング・モデルを作成するには、通常、事前にそれらのデータに一定の変換処理を行う必要があります。多くのデータ・マイニング・アルゴリズムに特定の変換要件が存在します。
スコアリングされるデータは、モデルの作成(トレーニング)に使用されたデータと同じ方法で変換される必要があります。
DBMS_DATA_MINING_TRANSFORM
では、変換を実装するための2つのアプローチが提供されます。指定のモデルに対して、次のいずれかを実行できます。
変換式のリストを作成してそのリストをCREATE_MODELプロシージャに渡すことができます。
または
変換を実装するビューを作成してそのビューの名前をCREATE_MODELプロシージャに渡すことができます。
変換リストを作成してCREATE_MODEL
に渡す場合、変換式は、モデルに埋め込まれ、モデルが適用されると常に自動的に実装されます。
ビューを作成する場合、変換式は、モデルの外部に存在します。ユーザーは、モデルを適用するたびに変換を再作成する必要があります。
注意: 埋込み変換によって、モデルの使いやすさが大幅に向上し、モデル管理のプロセスも簡単になります。 |
Oracle Data Miningでは、自動データ準備(ADP)モードがサポートされます。ADPを有効にすると、アルゴリズム固有のほとんどの変換は、自動的に埋め込まれます。他の追加の変換は、埋込み変換リストまたはビューで明示的に指定する必要があります。
ADPを有効にし、変換リストを使用してモデルを作成すると、両方の変換セットが埋め込まれます。モデルは、ADPによって指定された自動変換を実行する前に、変換リストに基づいたユーザー指定の変換を実行します。
変換リスト内で、個々の属性のADPを選択的に無効化できます。
この項では、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 Data Miningには、欠損データを処理するためのデフォルトのメカニズムもあります。詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。 |
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式を記述します。(「逆変換とモデルの透過性」を参照してください。)
属性のADPを無効にするかどうかを指定します。デフォルトでは、モデルに対してADPを指定した場合、属性に対してADPが有効になります。(「自動データ準備の無効化」を参照してください。)
変換リストに情報を追加するSET_TRANSFORMプロシージャへのコールでSQL式およびADP命令を指定します。
変換リストをCREATE_MODELプロシージャに渡します。変換式は、1つの長いSQL問合せに構成され、モデルに埋め込まれます。
注意: SET_TRANSFORM を使用して指定するSQL式は、VARCHAR2 に収まる必要があります。それより長い式を指定するには、SET_EXPRESSIONプロシージャを使用します。SET_EXPRESSION では、VARCHAR2 配列に行を追加して式を作成できます。 |
変換リストの要素は、変換レコードです。各変換レコードによって、単一属性の変換を管理するためにモデルで必要とされるすべての情報が提供されます。
各変換レコードには、次のフィールドが含まれます。
attribute_name
: 変換されるデータの列の名前。
attribute_subname
: attribute_name
がネストされた列の場合はネストされた属性の名前。それ以外の場合はNULL
。
expression
: 属性を変換するためのSQL式。
reverse_expression
: 変換を元に戻すためのSQL式。
attribute_spec
: モデル作成中に、属性の特別な処理を識別します。詳細は、表46-33「SET_TRANSFORMプロシージャのパラメータ」を参照してください。
アルゴリズムによって、変換された属性が操作され、モデルの調整およびスコアリングが行われます。ただし、変換された属性はエンド・ユーザーには重要でない場合があります。たとえば、属性xがビン1から4に変換された場合、ビン名1、2、3および4がアルゴリズムによって操作されますが、ユーザーはビン1から4に関するモデルのディテールまたは数値1から4の予測を必要としない可能性が高いです。
モデルのディテールおよび予測で元の属性値を戻すために、属性の変換レコードに反転式を指定できます。たとえば、属性yに対して変換式
'log(10, y)'を指定する場合、逆変換式'power(10, y)'
を指定できます。
逆変換によって、モデルの透過性が有効になります。内部処理がユーザーに対して透過的になります。
注意: STACK プロシージャでは、正規化の変換が自動的に元に戻されますが、ビニング、クリッピングまたは欠損値の変換を元に戻すメカニズムは提供されません。
|
関連項目: 「ALTER_REVERSE_EXPRESSIONプロシージャ」 モデル・ディテール・ファンクションへのリンクは、「DBMS_DATA_MININGサブプログラムの要約」を参照してください。 |
ADPは、モデル固有の設定(PREP_AUTO
)によって制御されます。PREP_AUTO
設定は、個々の属性に対して無効化しないかぎり、すべてのモデル属性に影響します。
ADPを有効化してattribute_spec
をNOPREP
に設定すると、その属性に指定した変換のみが評価されます。ADPを有効化してattribute_specをNOPREP
に設定しない
場合、その属性に指定した変換の後で自動変換が評価されます。
ADPをモデルに対して有効化しない場合、変換レコードのattribute_spec
フィールドは無視されます。
変換リストは、変換レコードのスタックです。新しい変換レコードを追加すると、そのレコードはスタックの一番上に追加されます。(詳細は、「スタックについて」を参照してください。)
SET_TRANSFORM
を使用して変換リストに変換レコードを追加する場合、変換レコードのすべてのフィールドに値を指定できます。
STACK
プロシージャを使用して変換リストに変換レコードを追加する場合、変換式のフィールドのみが移入されます。正規化の変換の場合、逆変換式のフィールドも移入されます。
STACK
プロシージャとSET_TRANSFORM
の両方を使用して1つの変換リストを作成できます。1回のSTACK
プロシージャ・コールで、指定した変換定義表にすべての属性の変換レコードが追加されます。1回のSET_TRANSFORM
コールで、単一属性の変換レコードが1つ追加されます。
変換リストは、変換レコードをスタックすることで作成されます。変換リストは、下から上へと評価されます。各変換式は、スタック内でその下位にある変換式の結果に依存します。
STACK
プロシージャは、変換定義表の情報から変換レコードを作成します。たとえば、STACK_BIN_NUM
は、量的ビニング用の定義表に指定された各属性の変換レコードを作成します。STACK
プロシージャは、変換レコードを次のようにスタックします。
属性が定義表に指定されているが、変換リストに指定されていない場合、STACK
プロシージャは、変換レコードを作成し、(可能であれば)逆変換を計算し、変換レコードに変換および逆変換を挿入して、変換リストの一番上に変換レコードを追加します。
属性が変換リストに指定されているが、定義表に指定されていない場合、STACK
プロシージャは何の処理も行いません。
属性が定義表および変換リストに指定されている場合、STACK
プロシージャは、定義表の変換式を変換レコードの変換式の上位にスタックし、逆変換を更新します。例46-1「クリッピング変換のスタック」および例46-4「ネストした正規化変換のスタック」を参照してください。
例46-1 クリッピング変換のスタック
この例は、STACK_CLIPプロシージャによって変換リストに変換レコードを追加する方法を示しています。クリッピング変換は、スタック後にCOL1
およびCOL2
で元に戻されないことに注意してください(「逆変換とモデルの透過性」を参照)。
次の説明を参照してください。
CREATE_CLIPプロシージャ: 定義表の作成
INSERT_CLIP_TRIM_TAILプロシージャ: 表への定義の挿入
INSERT_CLIP_WINSOR_TAILプロシージャ: 表への定義の挿入
表46-1: 変換リストの構造の説明(TRANSFORM_LIST
オブジェクト)
次のように移入されたクリッピング定義表があるとします。
col | att | lcut | lval | rcut | rval |
---|---|---|---|---|---|
COL1 |
NULL | -1.5 | -1.5 | 4.5 | 4.5 |
COL2 |
NULL | 0 | 0 | 1 | 1 |
スタック前の変換リストは次のとおりだとします。
------------------------- transformation record #1: ------------------------- attribute_name = COL1 attribute_subname = null expression = log(10, COL1) reverse_expression = power(10, COL1) ------------------------- transformation record #2: ------------------------- attribute_name = COL3 attribute_subname = null expression = ln(COL3) reverse_expression = exp(COL3)
スタック後の変換リストは次のとおりです。
------------------------- transformation record #1: ------------------------- attribute_name = COL1 attribute_subname = null expression = CASE WHEN log(10, COL1) < -1.5 THEN -1.5 WHEN log(10, COL1) > 4.5 THEN 4.5 ELSE log(10, COL1) END; reverse_expression = power(10, COL1) ------------------------- transformation record #2: ------------------------- attribute_name = COL3 attribute_subname = null expression = ln(COL3) reverse_expression = exp(COL3) ------------------------- transformation record #3: ------------------------- attribute_name = COL2 attribute_subname = null expression = CASE WHEN COL2 < 0 THEN 0 WHEN COL2 > 1 THEN 1 ELSE COL2 END; reverse_expression = null
CREATE
ルーチンによって、属性を識別するための2つの列(col
およびatt
)が含まれる変換定義表が作成されます。列col
には、データ表の列名が格納されます。データ列がネストしていない場合、att
はNULLであり、属性名はcol
になります。データ列がネストしている場合、att
にはネストした属性の名前が格納され、属性名はcol.att
になります。
INSERT
ルーチンとXFORM
ルーチンでは、定義表のatt
列は無視されます。ネストしたデータは、INSERT
ルーチンまたはXFORM
ルーチンのどちらでもサポートされません。
ネストしたデータがサポートされるのは、STACK
プロシージャおよびSET_TRANSFORM
のみです。ネストしたデータの変換は、常にモデルに埋め込まれます。
Oracle Data Miningのネストした列には、次のタイプが含まれます。
DM_NESTED_NUMERICALS DM_NESTED_CATEGORICALS DM_NESTED_BINARY_DOUBLES DM_NESTED_BINARY_FLOATS
変換レコードでのネストした属性の指定
変換レコード(TRANSFORM_REC
)には、属性を識別するための2つのフィールド(attribute_name
およびattribute_subname
)が含まれます。フィールドattribute_name
には、データ表の列名が格納されます。データ列がネストしていない場合、attribute_subname
はNULLであり、属性名はattribute_name
になります。データ列がネストしている場合、attribute_subname
にはネストした属性の名前が格納され、属性名はattribute_name.attribute_subname
になります。
個々のネストした属性の変換
ネストした列の個々の属性に異なる変換を指定し、その列の残りの属性すべてにデフォルト変換を指定できます。ネストしたデフォルト変換を指定するには、例46-2
に示すとおり、attribute_name
フィールドにNULLを指定し、attribute_subnameフィールドにネストした列の名前を指定します。VALUE
というキーワードを使用して、変換式でネストした属性の値を表現していることに注意してください。
例46-2 ネストした列の変換
次の文では、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
関数がネストされます。
ネストした列の追加
例46-3に示すとおり、ネストした列をデータに追加する変換を指定できます。
例46-3 変換リストへのネストした列の追加
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))
ネストした変換のスタック
例46-4は、STACK_NORM_LINプロシージャによって変換リストにネストした列COL_N
の変換レコードを追加する方法を示しています。
次の説明を参照してください。
CREATE_NORM_LINプロシージャ: 定義表の作成
INSERT_NORM_LIN_MINMAXプロシージャ: 表への定義の挿入
INSERT_NORM_LIN_SCALEプロシージャ: 表への定義の挿入
INSERT_NORM_LIN_ZSCOREプロシージャ: 表への定義の挿入
表46-1: 変換リストの構造の説明
例46-4 ネストした正規化変換のスタック
次のように移入された線形正規化定義表があるとします。
col | att | shift | scale |
---|---|---|---|
COL_N |
ATT2 |
0 | 20 |
null |
COL_N |
0 | 10 |
スタック前の変換リストは次のとおりだとします。
------------------------- transformation record #1: ------------------------- attribute_name = COL_N attribute_subname = ATT1 expression = log(10, VALUE) reverse_expression = power(10, VALUE) ------------------------- transformation record #2: ------------------------- attribute_name = null attribute_subname = COL_N expression = ln(VALUE) reverse_expression = exp(VALUE)
スタック後の変換リストは次のとおりです。
------------------------- transformation record #1: ------------------------- attribute_name = COL_N attribute_subname = ATT1 expression = (log(10, VALUE) - 0)/10 reverse_expression = power(10, VALUE*10 + 0) ------------------------- transformation record #2: ------------------------- attribute_name = NULL attribute_subname = COL_N expression = (ln(VALUE)- 0)/10 reverse_expression = exp(VALUE *10 + 0) ------------------------- transformation record #3: ------------------------- attribute_name = COL_N attribute_subname = ATT2 expression = (ln(VALUE) - 0)/20 reverse_expression = exp(VALUE * 20 + 0)
DBMS_DATA_MINING_TRANSFORM
パッケージは、ユーザーSYS
によって所有され、データベース・インストールの一環としてインストールされます。このパッケージの実行権限は、PUBLICに付与されます。このパッケージ内のルーチンは、実行者権限(現行のユーザーの権限)を使用して実行されます。
DBMS_DATA_MINING_TRANSFORM.INSERT
_*プロシージャには、変換目的で入力データを指定できるdata_table_name
パラメータがあります。data_table_name
の値には、物理表またはビューの名前を指定できます。data_table_name
パラメータには、インライン問合せを指定することもできます。
重要: インライン問合せは、変換用データの指定に使用できるため、コール側ルーチンで入力文字列に対して必要なSQLインジェクション・チェックを実行することを強くお薦めします。 |
Table 46-1
では、DBMS_DATA_MINING_TRANSFORMで定義されているデータ・タイプについて説明します。
表46-1 DBMS_DATA_MINING_TRANSFORMのデータ・タイプ
リスト・タイプ | リスト要素 | 説明 |
---|---|---|
COLUMN_ LIST |
VARRAY(1000) OF varchar2(32) |
VARRAY構造の移入の詳細は、『Oracle Database PL/SQL言語リファレンス』 |
DESCRIBE_ LIST |
DBMS_SQL.DESC_TAB2 TYPE desc_tab2 IS TABLE OF desc_rec2 INDEX BY BINARY_INTEGER TYPE desc_rec2 IS RECORD ( col_type BINARY_INTEGER := 0, col_max_len BINARY_INTEGER := 0, col_name VARCHAR2(32767):= '', col_name_len BINARY_INTEGER := 0, col_schema_name VARCHAR2(32) := '', col_schema_name_len BINARY_INTEGER := 0, col_precision BINARY_INTEGER := 0, col_scale BINARY_INTEGER := 0, col_charsetid BINARY_INTEGER := 0, col_charsetform BINARY_INTEGER := 0, col_null_ok BOOLEAN := TRUE); |
|
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; |
|
表46-2
では、DBMS_DATA_MINING_TRANSFORMで定義されている定数について説明します。
表46-2 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 |
関連項目: Oracle Data Miningでのネストしたデータの詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。 |
表46-3 DBMS_DATA_MINING_TRANSFORMパッケージのサブプログラム
サブプログラム | 用途 |
---|---|
|
質的ビニングの変換定義表を作成します。 |
|
量的ビニングの変換定義表を作成します。 |
|
クリッピングの変換定義表を作成します。 |
|
列削除の変換定義表を作成します。 |
|
質的欠損値処理の変換定義表を作成します。 |
|
量的欠損値処理の変換定義表を作成します。 |
|
線形正規化の変換定義表を作成します。 |
|
変換リストを説明します。 |
|
変換式から |
変換定義表に量的自動等幅ビニング定義を挿入します。 |
|
変換定義表に質的頻度ベース・ビニング定義を挿入します。 |
|
|
変換定義表に量的等幅ビニング定義を挿入します。 |
|
変換定義表に量的クオンタイル・ビニング式を挿入します。 |
|
量的データおよび質的データの変換定義表に監視ありビニング定義を挿入します。 |
|
変換定義表に量的トリミング定義を挿入します。 |
|
変換定義表に量的ウィンザライズ定義を挿入します。 |
|
変換定義表に質的欠損値処理定義を挿入します。 |
|
変換定義表に量的欠損値処理定義を挿入します。 |
|
変換定義表に最小値と最大値による線形正規化定義を挿入します。 |
変換定義表にスケールによる線形正規化定義を挿入します。 |
|
|
変換定義表にZスコアによる線形正規化定義を挿入します。 |
|
式に |
|
変換リストに変換レコードを追加します。 |
|
変換リストに質的ビニング式を追加します。 |
|
変換リストに量的ビニング式を追加します。 |
|
変換リストにクリッピング式を追加します。 |
|
変換リストに列削除式を追加します。 |
|
変換リストに質的欠損値処理式を追加します。 |
|
変換リストに量的欠損値処理式を追加します。 |
|
変換リストに線形正規化式を追加します。 |
|
質的ビニング変換を使用してデータ表のビューを作成します。 |
|
量的ビニング変換を使用してデータ表のビューを作成します。 |
|
クリッピング変換を使用してデータ表のビューを作成します。 |
|
列削除変換を使用してデータ表のビューを作成します。 |
|
指定された量的変換を使用してデータ表のビューを作成します。 |
|
指定された質的変換を使用してデータ表のビューを作成します。 |
|
質的欠損値処理を使用してデータ表のビューを作成します。 |
|
量的欠損値処理を使用してデータ表のビューを作成します。 |
|
線形正規化変換を使用してデータ表のビューを作成します。 |
|
変換リストのビューを作成します。 |
このプロシージャは、質的ビニングの変換定義表を作成します。表46-4に、列の説明を示します。
表46-4 質的ビニングの変換定義表の列
名前 | データ・タイプ | 説明 |
---|---|---|
|
|
質的データの列の名前。 列がネストしていない場合、列名は属性名でもあります。属性名の詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。 |
|
|
|
|
|
属性の値。 |
|
|
値に対するビン割当て。 |
構文
DBMS_DATA_MINING_TRANSFORM.CREATE_BIN_CAT ( bin_table_name IN VARCHAR2, bin_schema_name IN VARCHAR2 DEFAULT NULL );
使用上の注意
質的データの詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。
変換定義表とネストしたデータの詳細は、「ネストしたデータの変換」を参照してください。
次のプロシージャを使用して、変換定義表にデータを移入できます。
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)
このプロシージャは、量的ビニングの変換定義表を作成します。表46-6に、列の説明を示します。
表46-6 量的ビニングの変換定義表の列
名前 | データ・タイプ | 説明 |
---|---|---|
|
|
量的データの列の名前。 列がネストしていない場合、列名は属性名でもあります。属性名の詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。 |
|
|
|
|
|
属性の値。 |
|
|
値に対するビン割当て。 |
構文
DBMS_DATA_MINING_TRANSFORM.CREATE_BIN_NUM ( bin_table_name IN VARCHAR2, bin_schema_name IN VARCHAR2 DEFAULT NULL );
使用上の注意
量的データの詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。
変換定義表とネストしたデータの詳細は、「ネストしたデータの変換」を参照してください。
次のプロシージャを使用して、変換定義表にデータを移入できます。
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)
このプロシージャは、外れ値の影響を最小限に抑えるためにクリッピングまたはウィンザライズの変換定義表を作成します。表46-8に、列の説明を示します。
表46-8 クリッピングまたはウィンザライズの変換定義表の列
名前 | データ・タイプ | 説明 |
---|---|---|
|
|
量的データの列の名前。 列がネストしていない場合、列名は属性名でもあります。属性名の詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。 |
|
|
|
|
|
属性の最小の標準値。 属性値がxy軸にプロットされている場合、
|
|
|
|
|
|
属性の最大の標準値。 属性値がxy軸にプロットされている場合、
|
|
|
|
構文
DBMS_DATA_MINING_TRANSFORM.CREATE_CLIP ( clip_table_name IN VARCHAR2, clip_schema_name IN VARCHAR2 DEFAULT NULL );
使用上の注意
量的データの詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。
変換定義表とネストしたデータの詳細は、「ネストしたデータの変換」を参照してください。
次のプロシージャを使用して、変換定義表にデータを移入できます。
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 NUMBER
このプロシージャは、データ表から列を削除するための変換定義表を作成します。表46-10に、列の説明を示します。
表46-10 列削除の変換定義表の列
名前 | データ・タイプ | 説明 |
---|---|---|
|
|
データの列の名前。 列がネストしていない場合、列名は属性名でもあります。属性名の詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。 |
|
|
|
構文
DBMS_DATA_MINING_TRANSFORM.CREATE_COL_REM ( rem_table_name VARCHAR2, rem_schema_name VARCHAR2 DEFAULT NULL );
例
次の文では、現行のスキーマに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)
このプロシージャは、質的欠損値を置換するための変換定義表を作成します。表46-12に、列の説明を示します。
表46-12 質的欠損値処理の変換定義表の列
名前 | データ・タイプ | 説明 |
---|---|---|
|
|
質的データの列の名前。 列がネストしていない場合、列名は属性名でもあります。属性名の詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。 |
|
|
|
|
|
属性の欠損値の置換値。 |
構文
DBMS_DATA_MINING_TRANSFORM.CREATE_MISS_CAT ( miss_table_name IN VARCHAR2, miss_schema_name IN VARCHAR2 DEFAULT NULL );
使用上の注意
質的データの詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。
変換定義表とネストしたデータの詳細は、「ネストしたデータの変換」を参照してください。
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)
このプロシージャは、量的欠損値を置換するための変換定義表を作成します。表46-14に、列の説明を示します。
表46-14 量的欠損値処理の変換定義表の列
名前 | データ・タイプ | 説明 |
---|---|---|
|
|
量的データの列の名前。 列がネストしていない場合、列名は属性名でもあります。属性名の詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。 |
|
|
|
|
|
属性の欠損値の置換値。 |
構文
DBMS_DATA_MINING_TRANSFORM.CREATE_MISS_NUM ( miss_table_name IN VARCHAR2, miss_schema_name IN VARCHAR2 DEFAULT NULL );
使用上の注意
量的データの詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。
変換定義表とネストしたデータの詳細は、「ネストしたデータの変換」を参照してください。
INSERT_MISS_NUM_MEANプロシージャを使用して、変換定義表にデータを移入できます。
例
次の文では、現行のスキーマにmiss_num_xtbl
という表を作成します。この表には、量的属性の欠損データに対する値を移入できる列が含まれます。
BEGIN DBMS_DATA_MINING_TRANSFORM.CREATE_MISS_NUM('miss_num_xtbl'); END; / DESCRIBE miss_num_xtbl Name Null? Type ----------------------------------------- -------- ---------------------------- COL VARCHAR2(30) ATT VARCHAR2(4000) VAL NUMBER
このプロシージャは、線形正規化の変換定義表を作成します。表46-16に、列の説明を示します。
表46-16 線形正規化の変換定義表の列
名前 | データ・タイプ | 説明 |
---|---|---|
|
|
量的データの列の名前。 列がネストしていない場合、列名は属性名でもあります。属性名の詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。 |
|
|
|
|
|
属性値から差し引かれる定数。 |
|
|
差引き後の値を割るための定数。 |
構文
DBMS_DATA_MINING_TRANSFORM.CREATE_NORM_LIN ( norm_table_name IN VARCHAR2, norm_schema_name IN VARCHAR2 DEFAULT NULL );
使用上の注意
量的データの詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。
変換定義表とネストしたデータの詳細は、「ネストしたデータの変換」を参照してください。
次のプロシージャを使用して、変換定義表にデータを移入できます。
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
このプロシージャは、変換リストを適用した後のデータ表の列の情報を表示します。変換リストで指定された列のみが変換されます。データ表の残りの列は、変更なしで出力に含められます。
変換の適用後にデータ表のビューを作成するには、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);
パラメータ
表46-18 DESCRIBE_STACKプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
変換のリスト。TRANSFORM_LISTオブジェクト・タイプの詳細は、 |
|
変換対象のデータが保存される表の名前。 |
|
|
|
|
例
この例は、変換リストが適用された後のdmuser.cust_info
ビューの列名とデータ・タイプ、列名の長さおよび列の最大の長さを示しています。変換はすべてユーザー指定です。SET_TRANSFORM
プロシージャによって元の表の列の1つがNULL
に設定されるため、DESCRIBE_STACK
の結果にはその列は含まれません。
CREATE OR REPLACE VIEW cust_info AS
SELECT a.cust_id, c.country_id, c.cust_year_of_birth,
CAST(COLLECT(DM_Nested_Numerical(
b.prod_name, 1))
AS DM_Nested_Numericals) custprods
FROM sh.sales a, sh.products b, sh.customers c
WHERE a.prod_id = b.prod_id AND
a.cust_id=c.cust_id and
a.cust_id between 100001 AND 105000
GROUP BY a.cust_id, country_id, cust_year_of_birth;
describe cust_info
Name Null? Type
----------------------------------------- -------- ----------------------------
CUST_ID NOT NULL NUMBER
COUNTRY_ID NOT NULL NUMBER
CUST_YEAR_OF_BIRTH NOT NULL NUMBER(4)
CUSTPRODS SYS.DM_NESTED_NUMERICALS
DECLARE
cust_stack dbms_data_mining_transform.TRANSFORM_LIST;
cust_cols dbms_data_mining_transform.DESCRIBE_LIST;
BEGIN
dbms_data_mining_transform.SET_TRANSFORM (cust_stack,
'country_id', NULL, 'country_id/10', 'country_id*10');
dbms_data_mining_transform.SET_TRANSFORM (cust_stack,
'cust_year_of_birth', NULL, NULL, NULL);
dbms_data_mining_transform.SET_TRANSFORM (cust_stack,
'custprods', 'Mouse Pad', 'value*100', 'value/100');
dbms_data_mining_transform.DESCRIBE_STACK(
xform_list => cust_stack,
data_table_name => 'cust_info',
describe_list => cust_cols);
dbms_output.put_line('====');
for i in 1..cust_cols.COUNT loop
dbms_output.put_line('COLUMN_NAME: '||cust_cols(i).col_name);
dbms_output.put_line('COLUMN_TYPE: '||cust_cols(i).col_type);
dbms_output.put_line('COLUMN_NAME_LEN: '||cust_cols(i).col_name_len);
dbms_output.put_line('COLUMN_MAX_LEN: '||cust_cols(i).col_max_len);
dbms_output.put_line('====');
END loop;
END;
/
====
COLUMN_NAME: CUST_ID
COLUMN_TYPE: 2
COLUMN_NAME_LEN: 7
COLUMN_MAX_LEN: 22
====
COLUMN_NAME: COUNTRY_ID
COLUMN_TYPE: 2
COLUMN_NAME_LEN: 10
COLUMN_MAX_LEN: 22
====
COLUMN_NAME: CUSTPRODS
COLUMN_TYPE: 100001
COLUMN_NAME_LEN: 9
COLUMN_MAX_LEN: 40
====
このファンクションは、変換式を格納する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;
パラメータ
表46-19 GET_EXPRESSIONファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
属性の変換式または逆変換式を指定する式レコード( 変換レコード( EXPRESSION_RECタイプの詳細は、 |
|
|
使用上の注意
チャンクの番号は1から始まります。範囲外のチャンクの場合、戻り値はNULLになります。チャンク番号がNULLの場合は、式全体が文字列として戻されます。式が大きすぎる場合は、VALUE_ERROR
が発生します。
「変換リストについて」を参照してください。
「使用上の注意」を参照してください。
このプロシージャは、量的ビニングを実行して、変換定義表に変換定義を挿入します。このプロシージャは、最小値と最大値を識別して等間隔のビン境界を計算します。
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));
パラメータ
表46-20 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 Data Miningユーザーズ・ガイドを参照してください。
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 Database 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')
このプロシージャは、質的ビニングを実行して、変換定義表に変換定義を挿入します。このプロシージャは、頻度に基づいてビン境界を計算します。
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);
パラメータ
表46-21 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 Data Miningユーザーズ・ガイドを参照してください。
複数の値が同じ頻度で発生した場合、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
このプロシージャは、量的ビニングを実行して、変換定義表に変換定義を挿入します。このプロシージャは、最小値と最大値を識別して等間隔のビン境界を計算します。
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);
パラメータ
表46-22 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 Data Miningユーザーズ・ガイドを参照してください。
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')
このプロシージャは、量的ビニングを実行して、変換定義表に変換定義を挿入します。このプロシージャは、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);
パラメータ
表46-23 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 Data Miningユーザーズ・ガイドを参照してください。
データをクオンタイルに分割した後、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_data
このプロシージャは、量的および質的ビニングを実行して、変換定義表に変換定義を挿入します。このプロシージャは、予測子とターゲットの間の内在関係に基づいてビン境界を計算します。
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);
パラメータ
表46-24 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 Data Miningユーザーズ・ガイドを参照してください。
有意の分割が存在しない列は、ビンに区分されません。ビンに区分されない列をマイニング・データから削除するには、列削除定義表を指定します。列削除定義表を指定しない場合、これらの列は、ビンに区分されないままマイニング・データに残されます。
Oracle Data Miningのディシジョン・ツリーの詳細は、『Oracle Data Mining概要』を参照してください。
例
この例で、INSERT_BIN_SUPER
は、cust_credit_limit
の予測子に対してビン境界を計算し、変換定義表に変換を挿入します。一方の予測子は量的で、他方は質的です。(INSERT_BIN_SUPER
によって、cust_postal_code
列は有意の予測子ではないと判断されます。)STACK
プロシージャは、定義表の内容から変換リストを作成します。
変換を計算するSQL式は、MINING_DATA_STACK_NUM
ビューおよびMINING_DATA_STACK_CAT
ビューに表示されます。これらのビューは、表示目的専用であり、変換をモデルに埋め込むためには使用できません。
CREATE OR REPLACE VIEW mining_data AS SELECT cust_id, cust_year_of_birth, cust_marital_status, cust_postal_code, cust_credit_limit FROM sh.customers; DESCRIBE mining_data Name Null? Type -------------------------------- -------- ------------------------------------ CUST_ID NOT NULL NUMBER CUST_YEAR_OF_BIRTH NOT NULL NUMBER(4) CUST_MARITAL_STATUS VARCHAR2(20) CUST_POSTAL_CODE NOT NULL VARCHAR2(10) CUST_CREDIT_LIMIT NUMBER BEGIN dbms_data_mining_transform.CREATE_BIN_NUM( bin_table_name => 'bin_num_tbl'); dbms_data_mining_transform.CREATE_BIN_CAT( bin_table_name => 'bin_cat_tbl'); dbms_data_mining_transform.CREATE_COL_REM( rem_table_name => 'rem_tbl'); END; / BEGIN COMMIT; dbms_data_mining_transform.INSERT_BIN_SUPER ( num_table_name => 'bin_num_tbl', cat_table_name => 'bin_cat_tbl', data_table_name => 'mining_data', target_column_name => 'cust_credit_limit', max_bin_num => 4, exclude_list => dbms_data_mining_transform.COLUMN_LIST('cust_id'), num_schema_name => 'dmuser', cat_schema_name => 'dmuser', data_schema_name => 'dmuser', rem_table_name => 'rem_tbl', rem_schema_name => 'dmuser'); COMMIT; END; / set numwidth 8 column val off SELECT col, val, bin FROM bin_num_tbl ORDER BY bin ASC; COL VAL BIN -------------------- -------- ---------- CUST_YEAR_OF_BIRTH 1923.5 1 CUST_YEAR_OF_BIRTH 1923.5 1 CUST_YEAR_OF_BIRTH 1945.5 2 CUST_YEAR_OF_BIRTH 1980.5 3 CUST_YEAR_OF_BIRTH 4 column val on column val format a20 SELECT col, val, bin FROM bin_cat_tbl ORDER BY bin ASC; COL VAL BIN -------------------- -------------------- ---------- CUST_MARITAL_STATUS married 1 CUST_MARITAL_STATUS single 2 CUST_MARITAL_STATUS Mar-AF 3 CUST_MARITAL_STATUS Mabsent 3 CUST_MARITAL_STATUS Divorc. 3 CUST_MARITAL_STATUS Married 3 CUST_MARITAL_STATUS Widowed 3 CUST_MARITAL_STATUS NeverM 3 CUST_MARITAL_STATUS Separ. 3 CUST_MARITAL_STATUS divorced 4 CUST_MARITAL_STATUS widow 4 SELECT col from rem_tbl; COL -------------------- CUST_POSTAL_CODE DECLARE xforms_num dbms_data_mining_transform.TRANSFORM_LIST; xforms_cat dbms_data_mining_transform.TRANSFORM_LIST; BEGIN dbms_data_mining_transform.STACK_BIN_NUM ( bin_table_name => 'bin_num_tbl', xform_list => xforms_num); dbms_data_mining_transform.XFORM_STACK ( xform_list => xforms_num, data_table_name => 'mining_data', xform_view_name => 'mining_data_stack_num'); dbms_data_mining_transform.STACK_BIN_CAT ( bin_table_name => 'bin_cat_tbl', xform_list => xforms_cat); dbms_data_mining_transform.XFORM_STACK ( xform_list => xforms_cat, data_table_name => 'mining_data', xform_view_name => 'mining_data_stack_cat'); END; / set long 3000 SELECT text FROM user_views WHERE view_name IN 'MINING_DATA_STACK_NUM'; TEXT -------------------------------------------------------------------------------- SELECT "CUST_ID",CASE WHEN "CUST_YEAR_OF_BIRTH"<1923.5 THEN '1' WHEN "CUST_YEAR_ OF_BIRTH"<=1923.5 THEN '1' WHEN "CUST_YEAR_OF_BIRTH"<=1945.5 THEN '2' WHEN "CUST _YEAR_OF_BIRTH"<=1980.5 THEN '3' WHEN "CUST_YEAR_OF_BIRTH" IS NOT NULL THEN '4' END "CUST_YEAR_OF_BIRTH","CUST_MARITAL_STATUS","CUST_POSTAL_CODE","CUST_CREDIT_L IMIT" FROM mining_data SELECT text FROM user_views WHERE view_name IN 'MINING_DATA_STACK_CAT'; TEXT -------------------------------------------------------------------------------- SELECT "CUST_ID","CUST_YEAR_OF_BIRTH",DECODE("CUST_MARITAL_STATUS",'Divorc.','3' ,'Mabsent','3','Mar-AF','3','Married','3','NeverM','3','Separ.','3','Widowed','3 ','divorced','4','married','1','single','2','widow','4') "CUST_MARITAL_STATUS"," CUST_POSTAL_CODE","CUST_CREDIT_LIMIT" FROM mining_data
このプロシージャは、量的外れ値を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);
パラメータ
表46-25 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 Data Miningユーザーズ・ガイドを参照してください。
DBMS_DATA_MINING_TRANSFORM
パッケージには、INSERT_CLIP_TRIM_TAIL
およびINSERT_CLIP_WINSOR_TAIL
という2つのクリッピング・プロシージャが含まれます。どちらのプロシージャでも、境界は次のように計算されます。
NULL以外の値の数(n
)をカウントして昇順にソートします。
外れ値の数(t
)をn*tail_frac
として計算します。
1+
floor
(t)
の位置にある値として下限境界のlcut
を定義します。
n-floor
(t)
の位置にある値として上限境界のrcut
を定義します。
(SQL FLOOR
関数によって、t
以下の最大の整数が戻されます。)
<= lcut
または=> rcut
であるすべての値が、外れ値として指定されます。
INSERT_CLIP_TRIM_TAIL
は、外れ値をNULLで置き換えて、事実上それらの値をデータから削除します。
INSERT_CLIP_WINSOR_TAIL
は、下位の外れ値にlcut
を、上位の外れ値にrcut
を割り当てます。
例
この例で、INSERT_CLIP_TRIM_TAIL
は、2つの列にあるデータの10%(上位5%と下位5%)をトリミングし、変換定義表に変換を挿入します。STACK_CLIPプロシージャは、定義表の内容から変換リストを作成します。
トリミングを計算するSQL式は、MINING_DATA_STACK
ビューに表示されます。このビューは、表示目的専用であり、変換をモデルに埋め込むためには使用できません。
CREATE OR REPLACE VIEW mining_data AS SELECT cust_id, cust_year_of_birth, cust_credit_limit, cust_city FROM sh.customers; DESCRIBE mining_data Name Null? Type ------------------------------- -------- ------------------- CUST_ID NOT NULL NUMBER CUST_YEAR_OF_BIRTH NOT NULL NUMBER(4) CUST_CREDIT_LIMIT NUMBER CUST_CITY NOT NULL VARCHAR2(30) BEGIN dbms_data_mining_transform.CREATE_CLIP( clip_table_name => 'clip_tbl'); dbms_data_mining_transform.INSERT_CLIP_TRIM_TAIL( clip_table_name => 'clip_tbl', data_table_name => 'mining_data', tail_frac => 0.05, exclude_list => DBMS_DATA_MINING_TRANSFORM.COLUMN_LIST('cust_id')); END; / SELECT col, lcut, lval, rcut, rval FROM clip_tbl ORDER BY col ASC; COL LCUT LVAL RCUT RVAL -------------------- -------- -------- -------- -------- CUST_CREDIT_LIMIT 1500 11000 CUST_YEAR_OF_BIRTH 1934 1982 DECLARE xforms dbms_data_mining_transform.TRANSFORM_LIST; BEGIN dbms_data_mining_transform.STACK_CLIP ( clip_table_name => 'clip_tbl', xform_list => xforms); dbms_data_mining_transform.XFORM_STACK ( xform_list => xforms, data_table_name => 'mining_data', xform_view_name => 'mining_data_stack'); END; / set long 3000 SELECT text FROM user_views WHERE view_name IN 'MINING_DATA_STACK'; TEXT -------------------------------------------------------------------------------- SELECT "CUST_ID",CASE WHEN "CUST_YEAR_OF_BIRTH" < 1934 THEN NULL WHEN "CUST_YEAR _OF_BIRTH" > 1982 THEN NULL ELSE "CUST_YEAR_OF_BIRTH" END "CUST_YEAR_OF_BIRTH",C ASE WHEN "CUST_CREDIT_LIMIT" < 1500 THEN NULL WHEN "CUST_CREDIT_LIMIT" > 11000 T HEN NULL ELSE "CUST_CREDIT_LIMIT" END "CUST_CREDIT_LIMIT","CUST_CITY" FROM minin g_data
このプロシージャは、量的外れ値を上限値または下限値に置き換えます。変換定義表に変換定義を挿入します。
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);
パラメータ
表46-26 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 Data Miningユーザーズ・ガイドを参照してください。
DBMS_DATA_MINING_TRANSFORM
パッケージには、INSERT_CLIP_WINSOR_TAIL
およびINSERT_CLIP_TRIM_TAIL
という2つのクリッピング・プロシージャが含まれます。どちらのプロシージャでも、境界は次のように計算されます。
NULL以外の値の数(n
)をカウントして昇順にソートします。
外れ値の数(t
)をn*tail_frac
として計算します。
1+
floor
(t)
の位置にある値として下限境界のlcut
を定義します。
n-floor
(t)
の位置にある値として上限境界のrcut
を定義します。
(SQL FLOOR
関数によって、t
以下の最大の整数が戻されます。)
<= lcut
または=> rcut
であるすべての値が、外れ値として指定されます。
INSERT_CLIP_WINSOR_TAIL
は、下位の外れ値にlcut
を、上位の外れ値にrcut
を割り当てます。
INSERT_CLIP_TRIM_TAIL
は、外れ値をNULLで置き換えて、事実上それらの値をデータから削除します。
例
この例で、INSERT_CLIP_WINSOR_TAIL
は、2つの列にあるデータの10%(上位5%と下位5%)をウィンザライズし、変換定義表に変換を挿入します。STACK_CLIPプロシージャは、定義表の内容から変換リストを作成します。
変換を計算するSQL式は、MINING_DATA_STACK
ビューに表示されます。このビューは、表示目的専用であり、変換をモデルに埋め込むためには使用できません。
CREATE OR REPLACE VIEW mining_data AS SELECT cust_id, cust_year_of_birth, cust_credit_limit, cust_city FROM sh.customers; describe mining_data Name Null? Type ---------------------------------------- -------- ------------- CUST_ID NOT NULL NUMBER CUST_YEAR_OF_BIRTH NOT NULL NUMBER(4) CUST_CREDIT_LIMIT NUMBER CUST_CITY NOT NULL VARCHAR2(30) BEGIN dbms_data_mining_transform.CREATE_CLIP( clip_table_name => 'clip_tbl'); dbms_data_mining_transform.INSERT_CLIP_WINSOR_TAIL( clip_table_name => 'clip_tbl', data_table_name => 'mining_data', tail_frac => 0.05, exclude_list => DBMS_DATA_MINING_TRANSFORM.COLUMN_LIST('cust_id')); END; / SELECT col, lcut, lval, rcut, rval FROM clip_tbl ORDER BY col ASC; COL LCUT LVAL RCUT RVAL ------------------------------ -------- -------- -------- -------- CUST_CREDIT_LIMIT 1500 1500 11000 11000 CUST_YEAR_OF_BIRTH 1934 1934 1982 1982 DECLARE xforms dbms_data_mining_transform.TRANSFORM_LIST; BEGIN dbms_data_mining_transform.STACK_CLIP ( clip_table_name => 'clip_tbl', xform_list => xforms); dbms_data_mining_transform.XFORM_STACK ( xform_list => xforms, data_table_name => 'mining_data', xform_view_name => 'mining_data_stack'); END; / set long 3000 SQL> SELECT text FROM user_views WHERE view_name IN 'MINING_DATA_STACK'; TEXT -------------------------------------------------------------------------------- SELECT "CUST_ID",CASE WHEN "CUST_YEAR_OF_BIRTH" < 1934 THEN 1934 WHEN "CUST_YEAR _OF_BIRTH" > 1982 THEN 1982 ELSE "CUST_YEAR_OF_BIRTH" END "CUST_YEAR_OF_BIRTH",C ASE WHEN "CUST_CREDIT_LIMIT" < 1500 THEN 1500 WHEN "CUST_CREDIT_LIMIT" > 11000 T HEN 11000 ELSE "CUST_CREDIT_LIMIT" END "CUST_CREDIT_LIMIT","CUST_CITY" FROM mini ng_data
このプロシージャは、質的欠損値を、その列で出現頻度が最も高い値(最頻値)に置き換えます。変換定義表に変換定義を挿入します。
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);
パラメータ
表46-27 INSERT_MISS_CAT_MODEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
質的欠損値処理の変換定義表の名前。CREATE_MISS_CATプロシージャを使用して、定義表を作成できます。次の列は必須です。 COL VARCHAR2(30) VAL VARCHAR2(4000)
|
|
変換対象のデータが保存される表の名前。 |
|
欠損値処理から除外するカテゴリ列のリスト。
dbms_data_mining_transform.COLUMN_LIST('col1','col2', ...'coln') |
|
|
|
|
使用上の注意
質的データの詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。
質的欠損値を最頻値以外の値に置き換える場合、変換定義表を編集できます。
関連項目: Oracle Data Miningでのデフォルト欠損値処理の詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。 |
例
この例で、INSERT_MISS_CAT_MODE
は、cust_city
の欠損値処理を計算し、変換定義表に変換を挿入します。STACK_MISS_CATプロシージャは、定義表の内容から変換リストを作成します。
変換を計算するSQL式は、MINING_DATA_STACK
ビューに表示されます。このビューは、表示目的専用であり、変換をモデルに埋め込むためには使用できません。
CREATE OR REPLACE VIEW mining_data AS SELECT cust_id, cust_year_of_birth, cust_city FROM sh.customers; describe mining_data Name Null? Type -------------------------------- -------- ---------------- CUST_ID NOT NULL NUMBER CUST_YEAR_OF_BIRTH NOT NULL NUMBER(4) CUST_CITY NOT NULL VARCHAR2(30) BEGIN dbms_data_mining_transform.create_miss_cat( miss_table_name => 'missc_tbl'); dbms_data_mining_transform.insert_miss_cat_mode( miss_table_name => 'missc_tbl', data_table_name => 'mining_data'); END; / SELECT stats_mode(cust_city) FROM mining_data; STATS_MODE(CUST_CITY) ------------------------------ Los Angeles SELECT col, val from missc_tbl; COL VAL ------------------------------ ------------------------------ CUST_CITY Los Angeles DECLARE xforms dbms_data_mining_transform.TRANSFORM_LIST; BEGIN dbms_data_mining_transform.STACK_MISS_CAT ( miss_table_name => 'missc_tbl', xform_list => xforms); dbms_data_mining_transform.XFORM_STACK ( xform_list => xforms, data_table_name => 'mining_data', xform_view_name => 'mining_data_stack'); END; / set long 3000 SELECT text FROM user_views WHERE view_name IN 'MINING_DATA_STACK'; TEXT -------------------------------------------------------------------------------- SELECT "CUST_ID","CUST_YEAR_OF_BIRTH",NVL("CUST_CITY",'Los Angeles') "CUST_CITY" FROM mining_data
このプロシージャは、量的欠損値を平均値に置き換えて、変換定義表に変換定義を挿入します。
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);
パラメータ
表46-28 INSERT_MISS_NUM_MEANプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
量的欠損値処理の変換定義表の名前。CREATE_MISS_NUMプロシージャを使用して、定義表を作成できます。 次の列は COL VARCHAR2(30) VAL NUMBER
|
|
変換対象のデータが保存される表の名前。 |
|
欠損値処理から除外する数値列のリスト。
dbms_data_mining_transform.COLUMN_LIST('col1','col2', ...'coln') |
|
平均値に使用するための有効桁数。 デフォルトの桁数は6です。 |
|
|
|
|
使用上の注意
量的データの詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。
量的欠損値を平均値以外の値に置き換える場合、変換定義表を編集できます。
関連項目: Oracle Data Miningでのデフォルト欠損値処理の詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。 |
例
この例で、INSERT_MISS_NUM_MEAN
は、cust_year_of_birth
の欠損値処理を計算し、変換定義表に変換を挿入します。STACK_MISS_NUMプロシージャは、定義表の内容から変換リストを作成します。
変換を計算するSQL式は、MINING_DATA_STACK
ビューに表示されます。このビューは、表示目的専用であり、変換をモデルに埋め込むためには使用できません。
CREATE OR REPLACE VIEW mining_data AS SELECT cust_id, cust_year_of_birth, cust_city FROM sh.customers; DESCRIBE mining_data Name Null? Type ------------------------------------------ -------- ------------------- CUST_ID NOT NULL NUMBER CUST_YEAR_OF_BIRTH NOT NULL NUMBER(4) CUST_CITY NOT NULL VARCHAR2(30) BEGIN dbms_data_mining_transform.create_miss_num( miss_table_name => 'missn_tbl'); dbms_data_mining_transform.insert_miss_num_mean( miss_table_name => 'missn_tbl', data_table_name => 'mining_data', exclude_list => DBMS_DATA_MINING_TRANSFORM.COLUMN_LIST('cust_id')); END; / set numwidth 4 column val off SELECT col, val FROM missn_tbl; COL VAL -------------------- ---- CUST_YEAR_OF_BIRTH 1957 SELECT avg(cust_year_of_birth) FROM mining_data; AVG(CUST_YEAR_OF_BIRTH) ----------------------- 1957 DECLARE xforms dbms_data_mining_transform.TRANSFORM_LIST; BEGIN dbms_data_mining_transform.STACK_MISS_NUM ( miss_table_name => 'missn_tbl', xform_list => xforms); dbms_data_mining_transform.XFORM_STACK ( xform_list => xforms, data_table_name => 'mining_data', xform_view_name => 'mining_data_stack'); END; / set long 3000 SELECT text FROM user_views WHERE view_name IN 'MINING_DATA_STACK'; TEXT -------------------------------------------------------------------------------- SELECT "CUST_ID",NVL("CUST_YEAR_OF_BIRTH",1957.4) "CUST_YEAR_OF_BIRTH","CUST_CIT Y" FROM mining_data
このプロシージャは、線形正規化を実行して、変換定義表に変換定義を挿入します。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);
パラメータ
表46-29 INSERT_NORM_LIN_MINMAXプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
線形正規化の変換定義表の名前。CREATE_NORM_LINプロシージャを使用して、定義表を作成できます。次の列は必須です。 COL VARCHAR2(30) SHIFT NUMBER SCALE NUMBER
|
|
変換対象のデータが保存される表の名前。 |
|
正規化から除外する数値列のリスト。
dbms_data_mining_transform.COLUMN_LIST('col1','col2', ...'coln') |
|
最小値と最大値に使用するための有効桁数。デフォルトの桁数は6です。 |
|
|
|
|
例
この例で、INSERT_NORM_LIN_MINMAX
は、cust_year_of_birth
列を正規化し、変換定義表に変換を挿入します。STACK_NORM_LINプロシージャは、定義表の内容から変換リストを作成します。
変換を計算するSQL式は、MINING_DATA_STACK
ビューに表示されます。このビューは、表示目的専用であり、変換をモデルに埋め込むためには使用できません。
CREATE OR REPLACE VIEW mining_data AS SELECT cust_id, cust_gender, cust_year_of_birth FROM sh.customers; describe mining_data Name Null? Type ------------------------------------ -------- ---------------- CUST_ID NOT NULL NUMBER CUST_GENDER NOT NULL CHAR(1) CUST_YEAR_OF_BIRTH NOT NULL NUMBER(4) BEGIN dbms_data_mining_transform.CREATE_NORM_LIN( norm_table_name => 'norm_tbl'); dbms_data_mining_transform.INSERT_NORM_LIN_MINMAX( norm_table_name => 'norm_tbl', data_table_name => 'mining_data', exclude_list => dbms_data_mining_transform.COLUMN_LIST( 'cust_id'), round_num => 3); END; / SELECT col, shift, scale FROM norm_tbl; COL SHIFT SCALE ------------------------------ ---------- ---------- CUST_YEAR_OF_BIRTH 1910 77 DECLARE xforms dbms_data_mining_transform.TRANSFORM_LIST; BEGIN dbms_data_mining_transform.STACK_NORM_LIN ( norm_table_name => 'norm_tbl', xform_list => xforms); dbms_data_mining_transform.XFORM_STACK ( xform_list => xforms, data_table_name => 'mining_data', xform_view_name => 'mining_data_stack'); END; / set long 3000 SELECT text FROM user_views WHERE view_name IN 'MINING_DATA_STACK'; TEXT -------------------------------------------------------------------------------- SELECT "CUST_ID","CUST_GENDER",("CUST_YEAR_OF_BIRTH"-1910)/77 "CUST_YEAR_OF_BIRT H" FROM mining_data
このプロシージャは、線形正規化を実行して、変換定義表に変換定義を挿入します。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);
パラメータ
表46-30 INSERT_NORM_LIN_SCALEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
線形正規化の変換定義表の名前。CREATE_NORM_LINプロシージャを使用して、定義表を作成できます。次の列は必須です。 COL VARCHAR2(30) SHIFT NUMBER SCALE NUMBER
|
|
変換対象のデータが保存される表の名前。 |
|
正規化から除外する数値列のリスト。
dbms_data_mining_transform.COLUMN_LIST('col1','col2', ...'coln') |
|
|
|
|
|
|
例
この例で、INSERT_NORM_LIN_SCALE
は、cust_year_of_birth
列を正規化し、変換定義表に変換を挿入します。STACK_NORM_LINプロシージャは、定義表の内容から変換リストを作成します。
変換を計算するSQL式は、MINING_DATA_STACK
ビューに表示されます。このビューは、表示目的専用であり、変換をモデルに埋め込むためには使用できません。
CREATE OR REPLACE VIEW mining_data AS SELECT cust_id, cust_gender, cust_year_of_birth FROM sh.customers; DESCRIBE mining_data Name Null? Type ---------------------------------- -------- ------------------ CUST_ID NOT NULL NUMBER CUST_GENDER NOT NULL CHAR(1) CUST_YEAR_OF_BIRTH NOT NULL NUMBER(4) BEGIN dbms_data_mining_transform.CREATE_NORM_LIN( norm_table_name => 'norm_tbl'); dbms_data_mining_transform.INSERT_NORM_LIN_SCALE( norm_table_name => 'norm_tbl', data_table_name => 'mining_data', exclude_list => dbms_data_mining_transform.COLUMN_LIST( 'cust_id'), round_num => 3); END; / SELECT col, shift, scale FROM norm_tbl; COL SHIFT SCALE -------------------- ----- ----- CUST_YEAR_OF_BIRTH 0 1990 DECLARE xforms dbms_data_mining_transform.TRANSFORM_LIST; BEGIN dbms_data_mining_transform.STACK_NORM_LIN ( norm_table_name => 'norm_tbl', xform_list => xforms); dbms_data_mining_transform.XFORM_STACK ( xform_list => xforms, data_table_name => 'mining_data', xform_view_name => 'mining_data_stack'); END; / set long 3000 SELECT text FROM user_views WHERE view_name IN 'MINING_DATA_STACK'; TEXT -------------------------------------------------------------------------------- SELECT "CUST_ID","CUST_GENDER",("CUST_YEAR_OF_BIRTH"-0)/1990 "CUST_YEAR_OF_BIRTH " FROM mining_data
このプロシージャは、線形正規化を実行して、変換定義表に変換定義を挿入します。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);
パラメータ
表46-31 INSERT_NORM_LIN_ZSCOREプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
線形正規化の変換定義表の名前。CREATE_NORM_LINプロシージャを使用して、定義表を作成できます。次の列は必須です。 COL VARCHAR2(30) SHIFT NUMBER SCALE NUMBER
|
|
変換対象のデータが保存される表の名前。 |
|
正規化から除外する数値列のリスト。
dbms_data_mining_transform.COLUMN_LIST('col1','col2', ...'coln') |
|
|
|
|
|
|
例
この例で、INSERT_NORM_LIN_ZSCORE
は、cust_year_of_birth
列を正規化し、変換定義表に変換を挿入します。STACK_NORM_LINプロシージャは、定義表の内容から変換リストを作成します。
変換を計算するSQL式は、MINING_DATA_STACK
ビューに表示されます。このビューは、表示目的専用であり、変換をモデルに埋め込むためには使用できません。
CREATE OR REPLACE VIEW mining_data AS SELECT cust_id, cust_gender, cust_year_of_birth FROM sh.customers; DESCRIBE mining_data Name Null? Type ----------------------------------- -------- -------------------- CUST_ID NOT NULL NUMBER CUST_GENDER NOT NULL CHAR(1) CUST_YEAR_OF_BIRTH NOT NULL NUMBER(4) BEGIN dbms_data_mining_transform.CREATE_NORM_LIN( norm_table_name => 'norm_tbl'); dbms_data_mining_transform.INSERT_NORM_LIN_ZSCORE( norm_table_name => 'norm_tbl', data_table_name => 'mining_data', exclude_list => dbms_data_mining_transform.COLUMN_LIST( 'cust_id'), round_num => 3); END; / SELECT col, shift, scale FROM norm_tbl; COL SHIFT SCALE -------------------- ----- ----- CUST_YEAR_OF_BIRTH 1960 15 DECLARE xforms dbms_data_mining_transform.TRANSFORM_LIST; BEGIN dbms_data_mining_transform.STACK_NORM_LIN ( norm_table_name => 'norm_tbl', xform_list => xforms); dbms_data_mining_transform.XFORM_STACK ( xform_list => xforms, data_table_name => 'mining_data', xform_view_name => 'mining_data_stack'); END; / set long 3000 SQL> SELECT text FROM user_views WHERE view_name IN 'MINING_DATA_STACK'; TEXT -------------------------------------------------------------------------------- SELECT "CUST_ID","CUST_GENDER",("CUST_YEAR_OF_BIRTH"-1960)/15 "CUST_YEAR_OF_BIRT H" FROM mining_data
このプロシージャは、SQL式を格納するVARCHAR2
配列に行を追加します。この配列を使用すると、長すぎてSET_TRANSFORMプロシージャで使用できない変換式を指定できます。
GET_EXPRESSIONファンクションは、この配列の行を戻します。
SET_EXPRESSION
を使用して変換式を作成する場合、対応する逆変換式を構成し、変換レコードを作成して、その変換レコードを変換リストに追加する必要があります。
構文
DBMS_DATA_MINING_TRANSFORM.SET_EXPRESSION ( expression IN OUT NOCOPY EXPRESSION_REC, chunk VARCHAR2 DEFAULT NULL);
パラメータ
表46-32 SET_EXPRESSIONプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
属性の変換式または逆変換式を指定する式レコード( 変換レコード( EXPRESSION_RECタイプの詳細は、 |
|
|
注意
SET_EXPRESSION
のchunk
引数にNULL
を渡すことで、前のチャンクを消去できます。chunk
のデフォルト値はNULL
です。
「変換リストについて」を参照してください。
「使用上の注意」を参照してください。
例
この例では、SET_EXPRESSION
への2つのコールで変換式を構成し、別の2つのコールで逆変換式を構成します。
注意: この例は単なる参考用です。この例は、SET_EXPRESSION によってexpression にすでに存在するテキストにchunk で指定されたテキストを追加する方法を示しています。SET_EXPRESSION プロシージャの目的は、SET_TRANSFORM のVARCHAR2 引数に指定できない非常に長い変換式を構成することです。
同様に、変換リストはモデルに埋め込むためのものですが、参考用として変換リスト |
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 ====
このプロシージャは、属性の変換命令を変換リストに追加します。
構文
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);
パラメータ
表46-33 SET_TRANSFORMプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
変換リスト。TRANSFORM_LISTオブジェクト・タイプの詳細は、 |
|
変換する属性の名前。 |
|
|
|
属性の変換を指定するSQL式。 |
|
モデルのディテールおよび監視ありモデルのターゲット(属性がターゲットの場合)の変換を読みやすさを考慮して元に戻すSQL式。 |
|
モデル作成中の属性の特別な処理を識別する1つ以上のキーワード。値は次のとおりです。
|
使用上の注意
「使用上の注意」を参照してください。特に次の項が重要です。
次の例に示すとおり、NULL変換式および反転式を指定して属性を削除できます。また、STACKインタフェースを使用して列を削除することもできます(CREATE_COL_REMプロシージャおよびSTACK_COL_REMプロシージャ)。
この例では、SET_TRANSFORM
を使用してデータ・セットcust_info
のcust_stack
に変換を追加し、変換されたデータの1つの行を表示します。
SET_TRANSFORM
は、country_id
列を10で割り、cust_year_of_birth
列を削除し、ネストした属性custprods.mouse pad
に10を掛けます。(cust_infoの定義は、「DESCRIBE_STACKプロシージャ」
を参照してください。)
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; 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.XFORM_STACK (cust_stack, 'cust_info', 'xform_cust_view'); END; / select * from xform_cust_view where cust_id = 100004; CUST_ID COUNTRY_ID CUSTPRODS(ATTRIBUTE_NAME, VALUE) ------- ---------- ---------------------------------------------- 100004 5279 DM_NESTED_NUMERICALS(DM_NESTED_NUMERICAL ('External 8X CD-ROM', 1), DM_NESTED_NUMERICAL('Keyboard Wrist Rest', 1))
このプロシージャは、変換リストに質的ビニング変換を追加します。
構文
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);
パラメータ
表46-34 STACK_BIN_CATプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
質的ビニングの変換定義表の名前。CREATE_BIN_CATプロシージャを使用して、定義表を作成できます。 表46-4「質的ビニングの変換定義表の列」を参照してください。 |
|
変換リスト。TRANSFORM_LISTオブジェクト・タイプの詳細は、 |
|
変換定義表の ビン識別子が数値データ・タイプを含む必要のある数値である場合、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 7000
このプロシージャは、変換リストに量的ビニング変換を追加します。
構文
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);
パラメータ
表46-35 STACK_BIN_NUMプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
量的ビニングの変換定義表の名前。CREATE_BIN_NUMプロシージャを使用して、定義表を作成できます。 表46-6「量的ビニングの変換定義表の列」を参照してください。 |
|
変換リスト。TRANSFORM_LISTオブジェクト・タイプの詳細は、 |
|
変換定義表の ビン識別子が数値データ・タイプを含む必要のある数値である場合、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 3
このプロシージャは、変換リストにクリッピング変換を追加します。
構文
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);
パラメータ
表46-36 STACK_CLIPプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
クリッピングの変換定義表の名前。CREATE_CLIPプロシージャを使用して、定義表を作成できます。 表46-8「クリッピングまたはウィンザライズの変換定義表の列」を参照してください。 |
|
変換リスト。TRANSFORM_LISTオブジェクト・タイプの詳細は、 |
|
|
例
この例は、量的属性列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 11000
このプロシージャは、変換リストに列削除変換を追加します。
構文
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);
パラメータ
表46-37 STACK_COL_REMプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
列削除の変換定義表の名前。CREATE_COL_REMプロシージャを使用して、定義表を作成できます。表46-10「列削除の変換定義表の列」を参照してください。
|
|
変換リスト。TRANSFORM_LISTオブジェクト・タイプの詳細は、 |
|
|
例
この例は、列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 9000
このプロシージャは、変換リストに質的欠損値変換を追加します。
構文
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);
パラメータ
表46-38 STACK_MISS_CATプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
質的欠損値処理の変換定義表の名前。CREATE_MISS_CATプロシージャを使用して、定義表を作成できます。 表46-12「質的欠損値処理の変換定義表の列」を参照してください。 |
|
変換リスト。TRANSFORM_LISTオブジェクト・タイプの詳細は、 |
|
|
例
この例は、列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
このプロシージャは、変換リストに量的欠損値変換を追加します。
構文
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);
パラメータ
表46-39 STACK_MISS_NUMプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
量的欠損値処理の変換定義表の名前。CREATE_MISS_NUMプロシージャを使用して、定義表を作成できます。 表46-14「量的欠損値処理の変換定義表の列」を参照してください。 |
|
変換リスト。TRANSFORM_LISTオブジェクト・タイプの詳細は、 |
|
|
例
この例は、列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 200
このプロシージャは、変換リストに線形正規化変換を追加します。
構文
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);
パラメータ
表46-40 STACK_NORM_LINプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
線形正規化の変換定義表の名前。CREATE_NORM_LINプロシージャを使用して、定義表を作成できます。 表46-16「線形正規化の変換定義表の列」を参照してください。 |
|
変換リスト。TRANSFORM_LISTオブジェクト・タイプの詳細は、 |
|
|
例
この例は、列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 .11111
このプロシージャは、定義表で指定された質的ビニング変換を実装するビューを作成します。定義表で指定された列のみが変換され、データ表の残りの列はビューに表示されますが、変更されません。
構文
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);
パラメータ
表46-41 XFORM_BIN_CATプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
質的ビニングの変換定義表の名前。CREATE_BIN_CATプロシージャを使用して、定義表を作成できます。 表46-4「質的ビニングの変換定義表の列」を参照してください。 |
|
変換対象のデータが保存される表の名前。 |
|
作成するビューの名前。このビューには、 |
|
変換定義表の ビン識別子が数値データ・タイプを含む必要のある数値である場合、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
このプロシージャは、定義表で指定された量的ビニング変換を実装するビューを作成します。定義表で指定された列のみが変換され、データ表の残りの列はビューに表示されますが、変更されません。
構文
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);
パラメータ
表46-42 XFORM_BIN_NUMプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
量的ビニングの変換定義表の名前。CREATE_BIN_NUMプロシージャを使用して、定義表を作成できます。 「量的ビニングの変換定義表の列」を参照してください。 |
|
変換対象のデータが保存される表の名前。 |
|
作成するビューの名前。このビューには、 |
|
変換定義表の ビン識別子が数値データ・タイプを含む必要のある数値である場合、O-Clusterモデルと同様に 例については、「INSERT_BIN_NUM_EQWIDTHプロシージャ」を参照してください。 |
|
|
|
|
|
|
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
このプロシージャは、定義表で指定されたクリッピング変換を実装するビューを作成します。定義表で指定された列のみが変換され、データ表の残りの列はビューに表示されますが、変更されません。
構文
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);
パラメータ
表46-43 XFORM_CLIPプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
クリッピングの変換定義表の名前。CREATE_CLIPプロシージャを使用して、定義表を作成できます。 表46-8「クリッピングまたはウィンザライズの変換定義表の列」を参照してください。 |
|
変換対象のデータが保存される表の名前。 |
|
作成するビューの名前。このビューには、 |
|
|
|
|
|
|
例
この例では、cust_credit_limit
列をクリッピングするビューを作成します。データ・ソースは、sh.customer
の3つの列で構成されます。
describe mining_data Name Null? Type ------------------------------ -------- ------------------------- CUST_ID NOT NULL NUMBER CUST_POSTAL_CODE NOT NULL VARCHAR2(10) CUST_CREDIT_LIMIT NUMBER BEGIN dbms_data_mining_transform.create_clip( clip_table_name => 'clip_tbl'); dbms_data_mining_transform.insert_clip_trim_tail( clip_table_name => 'clip_tbl', data_table_name => 'mining_data', tail_frac => 0.05, exclude_list => dbms_data_mining_transform.COLUMN_LIST('cust_id')); dbms_data_mining_transform.xform_clip( clip_table_name => 'clip_tbl', data_table_name => 'mining_data', xform_view_name => 'clip_view'); END; / describe clip_view Name Null? Type ----------------------------- -------- -------------------------- CUST_ID NOT NULL NUMBER CUST_POSTAL_CODE NOT NULL VARCHAR2(10) CUST_CREDIT_LIMIT NUMBER SELECT MIN(cust_credit_limit), MAX(cust_credit_limit) FROM mining_data; MIN(CUST_CREDIT_LIMIT) MAX(CUST_CREDIT_LIMIT) ---------------------- ---------------------- 1500 15000 SELECT MIN(cust_credit_limit), MAX(cust_credit_limit) FROM clip_view; MIN(CUST_CREDIT_LIMIT) MAX(CUST_CREDIT_LIMIT) ---------------------- ---------------------- 1500 11000 set long 2000 SELECT text FROM user_views WHERE view_name IN 'CLIP_VIEW'; TEXT -------------------------------------------------------------------------------- SELECT "CUST_ID","CUST_POSTAL_CODE",CASE WHEN "CUST_CREDIT_LIMIT" < 1500 THEN NU LL WHEN "CUST_CREDIT_LIMIT" > 11000 THEN NULL ELSE "CUST_CREDIT_LIMIT" END "CUST _CREDIT_LIMIT" FROM mining_data
このプロシージャは、定義表で指定された列削除変換を実装するビューを作成します。定義表で指定された列のみが削除され、データ表の残りの列はビューに表示されます。
構文
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);
パラメータ
表46-44 XFORM_COL_REMプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
列削除の変換定義表の名前。CREATE_COL_REMプロシージャを使用して、定義表を作成できます。表46-10「列削除の変換定義表の列」を参照してください。
|
|
変換対象のデータが保存される表の名前。 |
|
作成するビューの名前。このビューには、 |
|
|
|
|
|
|
例
この例では、現行のスキーマの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); BEGIN DBMS_DATA_MINING_TRANSFORM.XFORM_COL_REM ( rem_table_name => 'colrem_xtbl', data_table_name => 'customers', xform_view_name => 'colrem_view'); END; / describe colrem_view Name Null? Type ----------------------------------------- -------- ---------------------------- CUST_ID NOT NULL NUMBER OCCUPATION VARCHAR2(21) AGE NUMBER YRS_RESIDENCE NUMBER
このプロシージャは、指定された量的変換を実装するビューを作成します。指定した列のみが変換され、データ表の残りの列はビューに表示されますが、変更されません。
構文
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);
パラメータ
表46-45 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
は、SQL REPLACE
関数を使用して変換式を構成します。
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)
このプロシージャは、指定された質的変換を実装するビューを作成します。指定した列のみが変換され、データ表の残りの列はビューに表示されますが、変更されません。
構文
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);
パラメータ
表46-46 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
は、SQL REPLACE
関数を使用して変換式を構成します。
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 OTHER
このプロシージャは、定義表で指定された質的欠損値処理変換を実装するビューを作成します。定義表で指定された列のみが変換され、データ表の残りの列はビューに表示されますが、変更されません。
構文
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;
パラメータ
表46-47 XFORM_MISS_CATプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
質的欠損値処理の変換定義表の名前。CREATE_MISS_CATプロシージャを使用して、定義表を作成できます。 表46-12「質的欠損値処理の変換定義表の列」を参照してください。 |
|
変換対象のデータが保存される表の名前。 |
|
作成するビューの名前。このビューには、 |
|
|
|
|
|
|
例
この例では、質的欠損値を最頻値に置き換えるビューを作成します。
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
このプロシージャは、定義表で指定された量的欠損値処理変換を実装するビューを作成します。定義表で指定された列のみが変換され、データ表の残りの列はビューに表示されますが、変更されません。
構文
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;
パラメータ
表46-48 XFORM_MISS_NUMプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
量的欠損値処理の変換定義表の名前。CREATE_MISS_NUMプロシージャを使用して、定義表を作成できます。 表46-14「量的欠損値処理の変換定義表の列」を参照してください。 |
|
変換対象のデータが保存される表の名前。 |
|
作成するビューの名前。このビューには、 |
|
|
|
|
|
|
例
この例では、量的欠損値を平均値に置き換えるビューを作成します。
SELECT * FROM items; ITEM_ID QTY ---------- ------ aa 200 bb 200 cc 250 dd ee ff 100 gg 250 hh 200 ii jj 200 SELECT AVG(qty) FROM items; AVG(QTY) -------- 200 BEGIN DBMS_DATA_MINING_TRANSFORM.CREATE_MISS_NUM('missnum_xtbl'); DBMS_DATA_MINING_TRANSFORM.INSERT_MISS_NUM_MEAN ( miss_table_name => 'missnum_xtbl', data_table_name => 'items' ); END; / SELECT col, val FROM missnum_xtbl; COL VAL ---------- ------ QTY 200 BEGIN DBMS_DATA_MINING_TRANSFORM.XFORM_MISS_NUM ( miss_table_name => 'missnum_xtbl', data_table_name => 'items', xform_view_name => 'items_view'); END; / SELECT * FROM items_view; ITEM_ID QTY ---------- ------ aa 200 bb 200 cc 250 dd 200 ee 200 ff 100 gg 250 hh 200 ii 200 jj 200
このプロシージャは、定義表で指定された線形正規化変換を実装するビューを作成します。定義表で指定された列のみが変換され、データ表の残りの列はビューに表示されますが、変更されません。
構文
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);
パラメータ
表46-49 XFORM_NORM_LINプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
線形正規化の変換定義表の名前。CREATE_NORM_LINプロシージャを使用して、定義表を作成できます。 表46-12「質的欠損値処理の変換定義表の列」を参照してください。 |
|
変換対象のデータが保存される表の名前。 |
|
作成するビューの名前。このビューには、 |
|
|
|
|
|
|
例
この例では、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
このプロシージャは、スタックによって指定された変換を実装するビューを作成します。スタックで指定された列およびネストした属性のみが変換されます。データ表の残りのすべての列およびネストした属性は、変更なしでビューに表示されます。
変換された列を説明するオブジェクトのリストを作成するには、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);
パラメータ
表46-50 XFORM_STACKプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
変換リスト。TRANSFORM_LISTオブジェクト・タイプの詳細は、 |
|
変換対象のデータが保存される表の名前。 |
|
作成するビューの名前。このビューによって、 |
|
|
|
|
例
この例では、変換リストをdmuser.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))