- はじめに
- 覚えてほしいこと
- やりたいこと
- Challenge 2: Split File and Save into Subfolders
- 事前準備
- まっきーの回答
- おわりに
- KNIMEに関する本
- 参考リンク
はじめに
こんにちは、自動化大好きまっきーです。さて、今回は実践編 2022年1月から始まった、毎週課題が出されて回答をアップロード・シェアするJust KNIME itという企画に参加してみたのでその解説です。
第一回は専門外すぎたのと、本ブログで扱っているテーマから離れていたので解説等行いませんでしたが、第2回は実用問題として良さげだったので取り上げたいと思います。
Posted my solution for Just KNIME it challenge 2. https://t.co/qIPJOwCyQ8#justknimeit #KNIME #ETL #automation
— まっきー | デジタル推進課 (@makkynm) February 6, 2022
今回のテーマ ~Just KNIME it Challenge2~
覚えてほしいこと
新しいKNIMEのバージョンではPath型ができた
やりたいこと
大きなcsv ファイルを年月で分割し保存する
やりたいことは上に示した通りですが、一応原文の問題文と日本語訳も。
Challenge 2: Split File and Save into Subfolders
Level: Easy
Description: A pharmaceutical company used to keep its sales data in a CSV file. They ask for your help to split the data into monthly CSV files and to save them into different subfolders, where each subfolder corresponds to a year. As an example, the data for January 2015 should be stored in a file named 2015/January.csv. In your solution, remember to save the files and subfolders in the workflow data folder.
Author: Emilio Silvestri
Dataset: Sales Data in the KNIME Hub
Our solution will appear here next Tuesday. In the meantime, feel free to discuss your work on the KNIME forum or on social media using the hashtag #justknimeit. Remember to upload your solution with tag #justknimeit-2 to your public space on the KNIME Hub.
日本語訳をそのままDeepLへ。
ある製薬会社では、これまで売上データをCSVファイルで管理していました。このデータを毎月のCSVファイルに分割し、各サブフォルダが1年に対応するように、異なるサブフォルダに保存することを手伝ってほしいと依頼されています。例として、2015年1月のデータは、2015/January.csvという名前のファイルに保存される必要があります。ソリューションでは、ファイルとサブフォルダをワークフローデータフォルダに保存することを忘れないでください。
事前準備
使用データ
使用するデータは下記からダウンロードしてください。
alinebessa/Just KNIME It! Datasets – Challenge 2 - Dataset – KNIME Hub
使いそうなNode
今回使いそうなNodeも下記に置いておくので、もし先に解きたい方はどうぞ!
ヒントとしてお使いください。
KNIME - CSV ファイル・タブ区切りファイルを読み込む / Excel区切り位置の自動化 - デジタル推進課
KNIME - 超便利! 時を操る5 日時情報を抜き出す ~Extract Date&Time Fields~ - デジタル推進課
KNIME - 分割してExcel出力!グループごとに繰り返すには? - Group Loop Start - デジタル推進課
KNIME - CSV ファイルを書き出す - デジタル推進課
まっきーの回答
Workflow
Workflowは下記リンクからダウンロードできます。
ざっくり解説
今回のポイントは、
- Extract Date&TimeでYearとMonth(name)を作成する
- Group Loop Startで出力したいグループごとにデータを分割
- Path型を変数で作成してフォルダ・ファイル名を作成する
の3つでしょう。
特に3点目のPath型については、KNIMEのバージョンが新しくなってから出たものなので私のブログではまだ扱っていませんでしたね。
Path型は、ファイル等を扱う際に出てくる特殊なデータ型だと思っておくといいかも知れません。Create folderやcreate file/folder variablesを使用する際によく使います。
Date型への変換
m/d/yyyyとすると、今回のように月が01となっていないような場合でも変換できます。
年月ごとにループ
Extract Date&Timeで年月要素を抽出したら、年月単位でフィルタしながら繰り返したいので、Groop Loop Startを使用します。
フォルダパスを作成
年でフォルダを作りたいので、String to Pathを使用します。
あらかじめStringに変換しておいたYearを指定して、今回の課題で出てきたようにworkflowフォルダ下のdataフォルダにYearのフォルダパス指定すると、パスが出来上がります。
ファイルパスも作成
ファイルパスの作り方もKNIMEのバージョンが新しくなって少し変わっています。今回のポイントは、前のNodeで作ったフォルダのPath型変数を指定する点です。
おわりに
難易度は簡単になっていましたが、いかがでしたでしょうか。
KNIME Hubに行くと色んな人の回答がみれるので、他の人はどうやって回答したのかみてみるのも面白いですよ。
KNIMEはノーコードですが、実際に作ってみると回答は千差万別で面白いです。別に目的を達成すれば、過程はどうでもいいのですが、それでも分かりやすいワークフローや分かりにくいワークフローが存在します。
せっかくノーコードは他人に共有しても分かりやすいと言う特性を持っているんですから、それを存分に活かしているフローが私は「綺麗な回答」だと思います。
あなたの回答は他人に分かりやすいものでしたか?
Java SnipptやデフォルトでインストールされていないNodeなど、ワークフローをパッとみるだけでは何をやっているか分からないNodeを使っていませんか?
ぜひ、他人に共有しても分かるワークフローの作成を目指してみてください。
ではまた!
KNIME Hubワークスペース
Twitter アカウント
まっきー | デジタル推進課 (@makkynm) | Twitter
KNIMEに関する本
KNIMEに関する日本語の本って今これくらいしかないと思うんですよね、、
本がいいなーと言う人はぜひ試してみてください。
参考リンク
- KNIME blog(英語):
- KNIME hub(英語):
alinebessa/Just KNIME It! Datasets – Challenge 2 - Dataset – KNIME Hub