KNIME・EXCEL倉庫

KNIMEやEXCELマクロの備忘録。

【KNIME】Concatenateで表にデータを追加したい。

・表を縦にくっつけるConcatenateとデータを纏めるGroupByを使うと、表にどんどんデータを追加するワークフローを作ることができる。

・例えば、会員IDが一意に決まっているとき、会員ID+名前の情報をどんどん追加する場合を考える。

・以下の例の場合、あとから足したデータで先のデータを上書きすることができる。

f:id:choron81:20211009001641p:plain

・Joinerでくっつける場合との違いは、Loopを回さなくて良いこと、Nullで上書きすることでデータを削除できること。

・大元の表と新規追加分の表で、列が同じ構成であれば非常に便利に使える。

 

 

終わり。

 

【KNIME】Reference Column Resoterで列を指定の順番に並べ替えたい

・表の列を何らかの順番に並べ替えたいことがある。

・Column Resorterでできるかと思ったが、どうもしっくりこない。

・Column Resorterを使う過程で、Reference Column Resoterなる怪しげなノードを見つけた。

・どうもこれでできるらしい。

・Reference Column Resoterの上からの入力で、列の順番を入れ替えたい表を、下らからの入力で、並べ替えた後の順番を接続する(下図)。Reference Column Resoterの設定では、下の表のどの列を並べ替え後の列の順番として指定するかを設定すれば良い。

f:id:choron81:20211009000133p:plain

・Loop制御が必要かと思っていたが、すっきりできた。

 

終わり。

 

 

 

 

【KNIME】たくさんのパラメータの関係を図示したい。

・たくさんの数値データがある際に、それらの関係がどのようなものか推察する必要がでることがある。

・散布図を描く際に、いちいちやってられないので、マトリックスで一気に可視化したい場合がある。

・そういう場合には、Scatter Matrixノードを使うと、それぞれの数値変数での総当たり散布図を一覧で描いてくれる(下図)。

f:id:choron81:20210930232941p:plain

・データを眺めたい時に便利。

 

終わり。

 

 

【KNIME】UngroupでListをバラバラにしたい。

・先日、データをグループでまとめるノードGroupByに関して記事にした。

・GroupByノードを出そうとすると、KNIME検索でUngroupなるノードが引っ掛かった。

・このノードは、List形式のセルをバラバラにして、縦にずらっと並べるノードらしい。

・例えば、GroupByノードで、家族の名前Listの列を作ったとする(下図)。

f:id:choron81:20210930225630p:plain

・これに、Ungroupノードをくっつけて、IncludeにバラバラにしたいListの列を指定すると、以下のようになる。

f:id:choron81:20210930225859p:plain

・今回の例では元に戻っただけで何の役にも立たないが、List形式のデータが扱いづらいと感じたら、このように変換することも有効かもしれない。

 

終わり。

 

 

 

 

【KNIME】Groupbyでデータを集計したい。

・共通項のあるデータを集計したり、重複を潰すのに、Groupbyというノードを使えば便利らしい。

・使い方をメモしておく。

・以下の表からデータを集計してみる。

f:id:choron81:20210930221437p:plain

 

・例えば、各家庭(姓)の一番上に挙がっている名前(名)を代表者として、各家庭の平均年齢を集計してみる。

・GroupByのSettingのGroupsはこんな感じになる(下図)。

f:id:choron81:20210930221830p:plain

・「姓」というグループの中で集計をとること、集計対象としては「名」と「年齢」があることになる。

・次に、Manual Aggregationで、「名」は「一番上に挙がっている名前」、「年齢」は「平均年齢」を集計してくれ、と設定する(下図)

f:id:choron81:20210930222204p:plain

 

・これで実行すると、以下のように集計される。

f:id:choron81:20210930222312p:plain

・年齢情報は不要で、各姓ごとに名をずらっと並べた表を作りたいのであれば、以下のように設定する。

f:id:choron81:20210930223253p:plain

・出力は以下のようになる。

f:id:choron81:20210930223348p:plain

・「年齢」がまとめる項目にも、集計する項目にも入っていないので、集計後には列自体がなくなっている。

 

終わり。

 

 

 

 

【KNIME】表全体でString Manipulationしたい。

・たくさん列のある表全体に対して同じString Manipulationの処理を実行したい時がある。

・String Manipulationは、1つの列に対してしか機能しないので、Loopを使って列を一つ一つ処理していく必要がある。

・例えば、表中の「田中」を「鈴木」に変換するWork Flowを作ってみた(下図)。

f:id:choron81:20210908224914p:plain

・逐次処理を実施するため、LoopはRecursive Loopを選択した。

・一番上に二つ並んだノードは、表から列数を抽出し、Recursive Loop EndのMaximal number of iterationを決めるために設置した。

・String Manipulationで編集対象の列名は、もともとの列名のリストをiteration数に応じて削り、1行目を変数として使用した。

・String Manipulationの列名に直接的に変数を使う方法が分からなかったので、編集したい列の名前を一時的にTempColumnNameに変更した。列名TempColumnNameをString Manipulationの編集対象の列として編集した後、TempColumnNameをもとの列名に戻した。

・Recursive Loop EndのData settingのCollect~~onlyにはチェックを入れた。

 

・Rule Based Row FilterとColumn Rename (Regex)は初めて使ったが、とても便利。

 

終わり。

 

 

 

 

 

 

【KNIME】workflow内で使えるflow variableを設定したい。

・workflowを組んでいると、ユニバーサルに使える変数を設定したくなることがたまにある。

・workflow内で使用できるflow variableの設定方法があるので、残しておく。

・KNIME Explorerでworkflowファイルを右クックし、Workflow Variablesというのを選択する(下図)。

f:id:choron81:20210828234846p:plain

・ウィンドウが開くので、適当に変数を入力する(下図)。

f:id:choron81:20210828235102p:plain

・これで、testという名前のDOUBLE型の変数1.2345を登録することができる。

・この変数は、このworkflow内では好きに引用することができるっぽい。

 

終わり。