2017-03-23 113 views
1

私はデータサイエンスに興味があり、私はknimeにはかなり新しいです。私はExcelでのデータのグループ化に関する質問があります。私は2つの列を持つxlsxファイルを持っています。 xlsxファイルには2000人の情報があります。この情報のタイトルは列Aにあり、情報は列Bにあります。データの中で、1人の情報が完了すると、他人のデータの順序が始まります。 A列には約10のユニークなタイトルがあります。人々はこれらのタイトルのいくつかを持っている、多分いくつかの人々がすべてを持っています。私がしたいのは、列のこれらのデータを列Aの一意のタイトルで変換し、列Bのデータを行に書き込むことです。しかしどうですか?knimeの一意の値を持つ行をグループ化するにはどうすればいいですか?

まず絵は私のデータがどのように見えると第二の画像は、私が何をしたいですかです: That is how my data looksThat is what i want

+0

HiTSでは、このノード[Pivot](https://raw.githubusercontent.com/aborg0/hits/master/com.mind_era.knime.util/html/nodes/Pivot.html)がありました。例を確認してください。グループの長さが異なるため、グループループ開始、トランスポーズ、グループループ終了ソリューションを簡単に実行することはできません。たぶん、Python、Rなど何かがここで助けてくれるかもしれません。 –

答えて

1

あなたは、各行が属するグループを識別するデータに列を追加する必要があり、その後、ピボットノードを使用して、必要な方法で変換することができます。

これは、Excelで、上のセルの値を返す式と、列Aのセルが「名前」に等しい場合は1を使用してExcelで実行されます。名。

Excelのソースを変更できない場合は、KNIMEでそれを行う最もきちんとした方法は、Gáborが示唆するように、Java、RまたはPythonのスニペットを使用することです。あなたは本当に純粋なKNIMEでそれをしたい場合は、ここでは遅いと精巧なワークフローです:

KNIME workflow to add group IDs

ノードは以下のように設定する必要がありますテーブルを返し

  • エクセルリーダー列を含むCol0およびCol1
  • にはCol0が含まれますが、Col1は含まれませんCol0nameある時はいつでも(他の可能な値のそれぞれについても、列が、私たちはこれらを使用することはありません)私たちに1を含むname列をES
  • Group 0
  • 列アペンダという名前の1つの整数列を作成し、テーブル構造を作成します。欠落値
  • 非同一の行キーとテーブルの長さのために構成され、第1のテーブルからの行のキーを使用する固定値0
で欠落している数値を置き換え

この時点で、テーブルには、次のようになります。

  • 再帰ループ内

    KNIME table

    数学式$Group 0$+$${Iname}$$でカラムGroup 0を置き換える - の前の値をとりますGroup 0を追加し、テーブルの現在の反復の最初の行からnameの値を追加します(テーブル行を介して変数

  • 行スプリッタは、 '番号で行を含む'ように構成され、行2 - 終わりを上位ポートに、行1を下位ポートに出力します。によってCol1

    KNIME table 2

    最後ピボットノードはGroup 0上のグループに設定され、ピボットCol0上及び集計:

Group 0カラムは、現在、それぞれの名前にインクリメント値を含みますFirst方法、与える:

KNIME table 3

必要に応じてフィルタリングや並べ替えなどを行うことができます。

1対多を除外し、Col0の変数が 'name'と等しくなるたびに1を加算するように数式を設定することは可能ですが、最初に動作させることができませんでしたそのまま。

nameが常にテーブル内の各人の最初の行である場合にのみ有効ですが、そうでない場合にはデータを明確に解釈する方法はわかりません。

誰かが速くて簡潔なKNIMEの実装を持っていれば、私はそれを見てうれしいです!

関連する問題