「サンプリング」ノード

 巨大なデータを扱いますと、すべてのデータを表示させるだけで何時間もかかってしまうような状況に遭遇することも多くあります。

巨大なデータのごく一部だけを見れば、十分という場合では、「サンプリング」ノードを使用します。

下記の「フィールド作成」ノードは、「フィールド作成」ノードで紹介したノードと同様です。データ加工用に、ユーザーIDを付与しています。

  

「サンプリング」ノードでよく使用する2つの方法を下記に示します。

1.巨大なデータのうち、初めのN件だけを取り出す方法

2.全体のデータのうち、ランダムに一定数のデータのみを取り出す方法

 

 

  

1.巨大なデータのうち、初めのn件だけを取り出す方法

 
 例えば、10GBcsvの中身を確認する場合、レコード数が数千万件に及ぶこともあり、「データ検査ノード」を実行すると時間がかかってしまいます。

上記の場合は、通常は初めの1万件など少ない件数にして抽出を行い、「データ検査ノード」に投入してデータの検査を行います。

そのアウトプットを確認している間に、全件投入を行うなどの段取りを踏むことが合理的なこともあります。

 

「サンプリング」ノードを使用して、サンプルデータ"商品A購買有無サンプルデータ.csv"最初の5件を取り出します。 

 


これにより、下のようなアウトプットが得られます。1,463件のうち、最初の5件が取り出されていることが確認できます。

 

 

 

2.全体のデータのうち、ランダムに一定数のデータのみを取り出す方法

 

上記のように設定して、全体の一部データを取り出すことができます。

しかし元のデータが、たとえばユーザーの入会日時順に並んでいたとすればどうでしょうか?

その最初の5件を取り出すということは、全体のユーザーのうち、最も古参のユーザー5人を抜き出していることになります。

この5人の動向と全体の動向は、大きくかけ離れている可能性があります。したがって、データの概要を知りたい場合に、「初めのn件」のレコードを取り出すのは、大変危険な操作となります。

このような場合には、全体のユーザーの中からランダムに一定数のユーザーを抜き出すことが有効な場合があります。

以下に例を出して説明します。 

上のような設定で、全体のうち100件を抜き出した場合どうなるでしょうか?

(最大サンプル数を100としているので一見大丈夫そうにみえます)

 

アウトプットを「出力」タブにある「データ検査」ノードに投入すると下のようになります。

 


「有効」の欄が100となっているので想定通り100レコード抜き出すことができています。

しかし最大値が184となっています。

もとの1,463件のデータに対して、通し番号として「user_id」を割り当てています。サンプリングした結果、「user_id」の最大値が184というのは

かなり偏りがあることが分かります。

 

このような場合は、「サンプル方法」を「コンプレックス」に変更し、下のように入力します。

 

 

最大値が1,456、最小値が30でレコード数が100となっています。

グラフの分布を見ても、特に偏りは見られません。

11,463の中から、ランダムにサンプリングされていそうであることが確認できます。