COMPANY

PAGE TOP

BLOG

Hadley Wickhamの「Tidy Data」をRapidMinerでやってみる(パート4)

If you would like to read this post in English, it’s here.


こんにちは。またお越しいただきありがとうございます。今回は、前回お伝えした通り、前回のプロセスの拡張です。前回の投稿では、ハドリーウィッカムが提唱した「整理されていない」データの5つの例の中の2つ目の問題を解決する方法について解説しました。今回は、Split、Renameオペレータとは異なるオペレータを使用し、より複雑な例を紹介していきます。今回の記事ではプロセスをスキップする箇所があります。もしわからない場合は前回の投稿を参照してください。また、RapidMinerを操作しながらこの投稿を読む際は、ここをクリックして「整理されていない」データをダウンロードしてください。

 

何故、今回の例が前回よりも複雑であるかというと、「Sex_Age」のフォーマット方法が異なるからです。De-Pivotオペレータから出力されたあまり複雑ではないデータを見てみましょう。

Click to Open

ここで、分割したい要素は、”Sex”と”Age”です。

「Sex_Age」の最初のデータポイント(「F_0-14」)を例にとると、”Sex”要素は「F」であり、”Age”要素は「0-14」です。前回は、Splitオペレータを使用して、これらの要素を分離しました。これは正規表現を使用して、アンダースコア “_”を捕捉して分割します。しかし、正規表現を使用して要素を分割するためには、分割に使用できる文字や空白がなければいけません。すなわち、”Split”オペレータは、分割に使用できる文字等がなければ、使用することができないということです。

Click to Open

上記はより複雑なデータの例です。”Sex”と”Age”の要素には分割する文字がないため、”Split”オペレータとは別のアプローチが必要です。それでは、今回のプロセスを見ていきましょう。

Click to Open

ご覧の通り、前回使用した“Split”、“Rename”オペレータは、“Generate Attributes”、 “Select Attributes”オペレータに代わっています。これらの2つのオペレータについて、まずは”Generate Attributes”オペレータから、詳しく見ていきましょう。

Click to Open

“Generate Attributes”オペレータをクリックすると、上記のパラメータウィンドウが開きます。属性を作成するには、「Edit List」ボタン(赤枠)をクリックします。そうすると、以下の“Edit Parameter List: function descriptions”ウィンドウが開きます。

Click to Open

このウィンドウでは、新たに作成する属性の名前を”attribute name”ボックスに入力し、それらの属性を作成するための関数を“function expressions”ボックスに記述します。エントリーを追加または削除するには、”Add Entry”および”Remove Entry”ボタン(赤枠)をクリックします。“function expressions”の記述の助けになるのが、右側の電卓ボタン(青枠)です。これをクリックすると、“Edit Expressions: function expressions”ウィンドウを開くことができます。

Click to Open

このウィンドウには、関数を記述する“Expression” ボックス、使用する関数を選択する“Functions”ボックス、属性、基本定数、データ関数、およびマクロを選択できる“Inputs”ボックスがあります。上記は、新たに”Sex”属性を作成しているウィンドウになっています。 ここでは、”Sex”属性を作成するために、”cut”関数を使用しています。”cut”関数には、カットする文字列(”Nominal text”)と、開始位置と終了位置を表す2つの数値( “Numeric start”と “Numeric length”)が入ります。今回の場合、”Nominal text”に入力する文字列は、”Sex_Ages”です。これにより、”Sex_Ages”列に含まれるすべての文字列値を取得します。そして、”Numeric start”を0、”Numeric length”を1と入力することによって、文字列内の “M”または”F”を取得することができます。

Click to Open

次に、”cut”関数を使用して “Age”属性を作成します。ここでは、”length”関数を使用して最終値を自動的に計算します。というのも、”Sex_Ages”の “Age”要素の長さは、文字の長さが3〜5文字の中でまちまちだからです。

Click to Open

最後に、2つの “if”関数と “replaceAll”関数を使用して、先程作成した “Age”属性を編集します。上記のように、”if”関数は 一つの“conditional if、then、else”ステートメントしか使えません。したがって、複数の条件が必要な場合は、複数の”if”関数を連鎖させ、次の”if”関数が前の”if”関数のelse値になるようにする必要があります。今回は、 “replaceAll”関数を、2個目の”if”関数のelse値として使用します。

Click to Open

“replaceAll”関数は文字列(この場合は属性 “Age”)を取り、正規表現を使って2つの “if”文でカバーされていない残りの文字列を見つけて編集します。正規表現は、ハイフンで区切られた二つ目のセット内を捕捉します(以下、“capturing groups”と呼ぶ)。今回は、”()”で括られた二つのグループから構成されます。新しく作成する置換文字列は、ハイフンで区切られた三つ目のセット内に入力します。今回は、“capturing groups”と一致したものが作成されています。出力されたデータは以下の通りです。

Click to Open

Click to Open

出力されたデータはSelect Attributesオペレータに入力されます。ここでは、”Sex_Ages”属性が不要なので、削除します。“attribute filter type “(赤枠)で”single”を選択し、フィルタリングする属性として”Sex_Ages”(青枠)を選択します。最後に、“invert selection”ボックスをチェックして、”Sex_Ages”が削除されるようにします(緑枠)。チェックをしなければ、”Sex_Ages”が保持され、他のすべての属性は削除されることになります。出力されたデータは以下のようになります。

Click to Open

最後のプロセスは、Reorder Attributesオペレータを使います。これは、前回の投稿と同じ方法で使用します。そのため、詳細は前回の投稿を参照してください。 出力された「整理された」データは以下の通りです。

Click to Open

それでは、今回のプロセスをまとめます。De-Pivotオペレータから出力された後、Generate Attributesオペレータを使用して、元の”Sex_Ages”属性から”Sex”および”Age”属性を作成する式を作成しました。次に、Select Attributesオペレータを使用して”Sex_Ages”属性を削除し、Reorder Attributesオペレータで適切な順序に列を並び替えました。

 

最後に、このチュートリアルが、皆さんの分析の手助けになれば幸いです。次回は、ハドリーウィッカムによって提唱された「整理されていない」データの5つの問題のうちの3つ目「変数が行列の両方に保存されている」場合について説明します。

 

それではまた!

 

 

$$ \begin{aligned} \newcommand\argmin{\mathop{\rm arg~min}\limits} \boldsymbol{\beta}_{\text{ridge}} & = \argmin_{\boldsymbol{\beta} \in \mathcal{R^p}} \biggl[ ||\boldsymbol{y}-\boldsymbol{X\beta}||^2 + \lambda ||\boldsymbol{\beta}||^2 \biggr] \\ & = (\boldsymbol{X}^T\boldsymbol{X} + \lambda\boldsymbol{I_{p+1}})^{-1}\boldsymbol{X}^T\boldsymbol{y} \end{aligned} $$
PAGE TOP