はじめに
こんにちは、自動化大好きまっきーです。
今回は、便利すぎて最近多用しているNode、Rankについて解説します。拡張機能Extensionの追加インストールも必要ない、基礎的なNodeになります。
Nodeの名前から想像できる通り、このNodeはさまざまな条件でランキングをつけることができます。できることを全てカバーできるように例を配置しましたので、ぜひ全てのパターンをマスターしてこのNodeを使いこなしてみてください!
今回のテーマ ~Rank~
覚えてほしいこと
同立ランクの付け方は3種類
- Starndard :(1-1) 同じ順位をつける。次のランクは人数分スキップしてランク付け
- Dense :(1-2) 同じ順位をつける。次のランクはスキップせずにランク付け
- Ordinal :(1-3) 元並んでいた順番を参照して同じ番号にならないようにランク付け
やりたいこと
1番残業時間が長い人を抜き出すなら簡単でしょう。SortをかければOKです。String ManipulationやMath FormulaのROWINDEXを組み合わせたら達成できそうですよね。
では、同立が存在する場合の2番目に残業時間が長い社員を抜き出したいときはどうすればいいでしょうか?
また、この残業時間ランキングを部署ごとに行った場合はどのようにすればいいでしょうか?
今回はそんなSortとROWINDEXの組み合わせでは対応できないような複雑なケースでも簡単に対応できる便利なNodeです。
やりたいこと1 -全社員を残業時間が多い順にランク付
ランクの付け方を4種類試してみましょう
同順位の場合のランクの付け方
- 同じ順位をつける。次のランクは人数分スキップしてランク付け
- 同じ順位をつける。次のランクはスキップせずにランク付け
- 元並んでいた順番を参照して同じ番号にならないようにランク付け
- 年齢が高い人が順位も高くなるようランク付
やりたいこと2 -部署ごとで残業時間が多い社員をランク付
先ほどは全社員でランク付しましたが、ここでは部署ごとの残業時間ランキングを出したいと思います。
Rankの使い方
使い勝手はかなりいいと思います。拡張機能Extensionの追加インストールも必要ない、Nodeになります。
このNodeがなかったらGroup LoopやJoinerを駆使して抜き出さないといけないので非常にややこしいFlowになります。かなり便利なNodeだと思うので、ぜひ覚えてみてください。
Workflow - Rank
Workflowは下記リンクからダウンロードできます。
Confirm - Rank
それぞれ見ていきましょう。これらの細かい設定がこのNodeでは可能です。
Confirm - やりたいこと 1-1
1-1 全社員の残業時間多いランキング。同順位の場合、同じ順位をつける。次のランクは人数分スキップしてランク付け
Confirm - やりたいこと 1-2
1-2 全社員の残業時間多いランキング。同順位の場合、同じ順位をつける。次のランクはスキップせずにランク付け
Confirm - やりたいこと 1-3
1-3 全社員の残業時間多いランキング。同順位の場合、元並んでいた順番を参照して同じ番号にならないようにランク付け
Confirm - やりたいこと 1-4
1-4 全社員の残業時間多いランキング。同順位の場合、年齢が高い人が順位も高くなるようランク付
Confirm - やりたいこと 2-1
2-1 部署ごとで社員の残業時間多いランキング。同順位の場合、同じ順位をつける。次のランクは人数分スキップしてランク付け
Configure - Rank
さて、Confirmが色々出てきすぎて大変でしたかね。ひとまず一番スタンダードなやりたいこと1-1のConfigureを通して全体のOptionを説明した後、各やりたいことのConfigureを見ていきます。
Step1 - Ranking Attributes ランクの基準カラム指定
どのカラムを基準にしてランクをつけていくかを決定する部分です。複数カラム指定した場合、一番上の値を参照、同立なら次のカラムを参照という動きをします。
Sorterと似た考えですね。複数カラムの事例はやりたいこと1-3でカバーしています。
またおさらいですが、昇順と降順は下記のようになっています。
- Ascending - 小さい順 / 昇順
- Descending - 大きい順 / 降順
Step2 - Grouping Attributes グループカラムの指定
グループごとのランキングを出す場合、まとめるカラムをここで指定します。
GroupByやGroup Loop Startと同じ考え方ですね。
この事例はやりたいこと2-1でカバーしています。
Step3 - Ranking Mode ランクの付け方の指定
同順位だった場合のランクの付け方を指定します。下記が種類と説明です。
- Starndard :(1-1) 同じ順位をつける。次のランクは人数分スキップしてランク付け
- Dense :(1-2) 同じ順位をつける。次のランクはスキップせずにランク付け
- Ordinal :(1-3) 元並んでいた順番を参照して同じ番号にならないようにランク付け
Step4 - Other Options カラム名の指定
続いてその他のOptionについてです。主にカラム名の指定のみやればOKです。
- Name of Rank Attribute - 出力するランクのカラム名を指定します。
- Retain Row Order - 通常Rankの順番に並び変わって出力されますが、下の順番に並べ替えるOptionです。処理速度が落ちるのであまりお勧めされていないようです。
- Rank as Long - 行数がintの上限を超える可能性がある場合にチェックを入れます。普通そんなことは起こらないと思うのでチェック入れないほうが良いともいます。
Configure - やりたいこと 1-1
Standardモードのランキングです。
Configure - やりたいこと 1-2
Denseモードのランキングです。
Configure - やりたいこと 1-3
Ordinalモードのランキングです。
Configure - やりたいこと 1-4
複数カラムをRanking Attributesで使うパターンです。
Configure - やりたいこと 2-1
Grouping Attributeを使うパターンです。
おわりに
更新遅くなりました!やっぱり1個のNode紹介するのめっちゃ時間かかります。。軽いテーマのネタ切れ感があるというのもありますが、そもそも本来の目的が社内の人にKNIMEを覚えてもらうということだったんで、もう目的達成されてるんですよね(笑)
これ書いても特に収入とかあるわけでもなく、休日半日潰しちゃうんで、記事を書くモチベーションが、、、w
紹介したい重いテーマ(KNIMEで作った自分のためのサービス)とかもあるんですけどねー、講演依頼いただいた時に紹介するとかにしても面白いかもしれないですね。
もしなにかリクエストがあればTwitterでも、問い合わせフォームでも良いので気軽にお問い合わせいただければと思います〜
KNIME Hubワークスペース
Twitter アカウント
まっきー | デジタル推進課 (@makkynm) | Twitter
KNIMEに関する本
KNIMEに関する日本語の本って今これくらいしかないと思うんですよね、、
本がいいなーと言う人はぜひ試してみてください。
参考リンク
- KNIME Hub(英語):