COMPANY

PAGE TOP

BLOG

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

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


こんにちは。またお越しいただきありがとうございます。前回の記事では、ハドリーウィッカムによって提唱された3番目の問題「変数が行列の両方に保存されている」場合について説明しました。今回の記事では、4番目の問題「複数の異なる型の観測単位が同じテーブルに保存されている」場合について説明していきます。ハドリーウィッカムの例として使われているデータと同様に、ここで使用するデータはBillboardのHot 100リストのデータです。RapidMinerを操作しながら本記事を読む際は、ここで「整理されていない」データをダウンロードしてください(クリックでダウンロードが始まります)。

 

問題4:複数の異なる型の観測単位が同じテーブルに保存されている

 

まず初めに、これから手を加えていく「整理されていない」データと、クリーニングが終わった「整理された」データを見てみましょう。

“Messy” Data (Click to Open)

“Tidy” Song Information Data (Click to Open)

“Tidy” Rank Information Data (Click to Open)

今回の「整理されていない」データは、以前の投稿と同じような形ではありません。ハドリーウィッカムの原著論文では、整理されたデータは以下の3つの特徴があると述べています。

 

  1. 各変数が一つの列を形成していること

  2. 各観測が一つの行を形成していること

  3. 各観測単位の型が一つのテーブルを形成していること

 

今回のケースでは、このデータは最初の2つの基準を満たしていますが、3つ目の基準は満たしません。これは、2つのタイプの観測単位(ソング情報(赤枠)とそのランク情報(青枠))を含むためです。そのため、上記の「整理された」データは2つのテーブルで構成されています。何故これが重要なのでしょうか?ハドリーウィッカムは論文中で次のように述べています。

 

データセットには、さまざまなタイプの観測単位で複数のレベルで収集された値が含まれることがある。データを整理している間、各タイプの観測単位はそれぞれ別のテーブルに保存されるべきである。これは、データベースの正規化の考え方と密接に関連している。ここでは、それぞれの事実が1つの場所で表現されている。これらを別のテーブルに保存しないと、データの不一致が発生する可能性がある。

ただし、これはデータの整理と不一致の解消に役立ちますが、ほとんどのデータ分析ツールでは、リレーショナルデータは機能しません。そのため、整理するために観測単位に分割されたデータは、分析する際は1つの表に統合される可能性が高くなります。

 

プロセス画面

(Click to Open)

 

まず、プロセス全体(上図)を簡単に要約し、各オペレータを個別に説明していきます。

「整理されていない」データは2つの別々の枝に分けられて、上の枝のデータを使ってID属性を作成します。これらの枝は、元のデータセットにID属性が追加されるように、再び結合されます。次に、データを再び2つの別々の枝に掛けます。上の枝には「ソング情報」が含まれ、下の枝には「ランク情報」が含まれています。さて、各オペレータを個別に見ていきましょう。

 

パート1:IDの作成

 

まず、「整理されていない」データがMultiplyオペレータに入力されています。このオペレータは非常に簡単です。データのコピーを作成することのできるオペレータで、出力ポートを別のオペレータに接続することにより、複数のコピーを作成して使用することができます。この場合、データのコピーを2つしか作成しないので、2つの出力ポートしか使用されません。上の枝から出てくるデータは、IDを生成するために使われます。これを行うには、Aggregateオペレータを使用します。

Aggregate Parameters (Click to Open)

Aggregateオペレータをクリックして上記のParametersウィンドウを開き、Edit Listボタン(赤枠)をクリックして「Select Attributes:attribute by group」ウィンドウを開きます。次に、左に表示されている”Attributes”ボックスから、”title”属性を見つけてクリックし、右矢印ボタン(青枠)を使って右側の “Selected Attributes”ボックスに移動させます。 最後に、”Apply”ボタンをクリックします。

Generate ID Parameters (Click to Open)

次に、Generate IDオペレータをクリックして上記のParametersウィンドウを開きます。今回は、変更する設定はありません。” create nominal ids”ボックスはデフォルトでチェックされていないので、整数のIDが作成されます(1,2,3など)。しかし、”create nominal ids”ボックスをチェックすると、文字型のIDが作成されます(id_1、id_2、 id_3など、nominalは文字型という意味です)。このオペレータから出力されるデータは、以下の例のようになります。

Generate ID Output Data (Click to Open)

 

パート2:データセットの結合

Join Parameters (Click to Open)

 

さて、Joinオペレータを見てみましょう。まず、オペレータをクリックして、上の Parametersウィンドウを開きます。次に、”join type”を”left”(赤枠)に設定し、”use id attribute as key”パラメータ(青枠)をオフにします。最後に、Edit Listボタン(緑枠)をクリックして、上の “Edit Parameter List:key attributes”ウィンドウを開き、”left key attributes”と “right key attributes”を “title”に設定し、Applyをクリックします。このオペレータから出力されるデータは以下のようになります。

Join Output Data (Click to Open)

パート3:ソング情報の枝

 

次に、Multiplyオペレータを使用して再度コピーを複製し、2つの分岐を作ります。上の枝では、ソング情報のみを含む「整理した」データを作成します。「整理した」データにするために、Select AttributesおよびRemove Duplicatesオペレータを使用します。

Select Attributes Parameters (Click to Open)

Select AttributesオペレータをクリックしてParametersウィンドウを開き、attribute filter typeを”subset”(赤枠)に設定します。次に、「Select Attributes …」ボタン(青枠)をクリックして、「Select Attributes:attributes」ウィンドウを開きます。左のAttributesボックスから”artist”、”id”、”title”を選択し、右矢印キー(緑枠)を使用して右側の「Selected Attributes」ボックスに移動します。 最後に、Applyをクリックします。このオペレータから出力されるデータは以下のようになります。

Select Attributes Output Data (Click to Open)

Remove Duplicates Parameters (Click to Open)

次は Remove Duplicatesオペレータですが、今回は変更すべき設定はありません(上記参照)。”attribute filter type”パラメータでは様々な選択肢があり、選択した内容に応じて追加のパラメータが表示されますが、今回はすべての属性に重複がないようにしたいと考えているため、デフォルトの”all”のままにしておきます。また、“include special attributes”にチェックをすることで属性の特別な役割を削除することもできますが、今回は特別な “id”属性を保持したいので、チェックを外しておきます。この枝の最終的な「整理された」データを以下に示します。

“Tidy” Song Information Data (Click to Open)

 

パート4:ランク情報の枝

 

Mlutiplyオペレータによって作成された下の枝には、Select Attributesオペレータしか含まれていません。この枝では、各曲のランク情報のみを保持することで、「整理された」データになります。

Select Attributes Parameters (Click to Open)

Select Attributesオペレータは先程と同じオペレータですが、今度は別の属性を選択していきます。先程と同様にオペレータをクリックして右のParametersウィンドウを開き、、attribute filter typeを”subset”に設定します。 次に、”invert selection”ボックスがチェックされていることを確認します(赤枠)。これにより、次のステップが簡単になります。「Select Attributes …」ボタンをクリックし、”artist”、”id”属性を右側に移動し、Applyをクリックします。ここでは、”invert selection”ボックスにチェックをしていたので、選択された”artist”、”id”属性は削除され、他のすべての属性が保持されました。この枝での最終的な「整理された」データを以下に示します。

“Tidy” Rank Information Data (Click to Open)

 

結論

今回のプロセスを要約すると、元の「整理されていない」データはMultiplyオペレータを使用して複製され、上の枝はAggregateおよびGenarate IDオペレータを使用してIDを生成しました。2つの枝は、Joinオペレータを使用して結合されました。そして、再度Multiplyオペレータを使用してデータを複製し、上の枝は曲情報のみを、下の枝ははランク情報のみを含む「整理された」データにしました。上の枝はSelect AttributesとRemove Duplicatesオペレータを使用してソング情報データを作成し、下の枝はSelect Attributesオペレータを使用してランク情報データを作成しました。

 

今回の記事が皆さんの分析の手助けになれば幸いです。次回の記事では、ハドリーウィッカムによって提唱された「整理されていない」データの5番目の問題

「一つの観測単位の型が複数のテーブルに保存されている」

場合について説明します。

 

それではまた!

 

 

$$ \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