デジタル推進課

KNIME・Excel Macro・Power Automateなど日々の業務で使用できる自動化ツールを中心に書き綴ります

KNIME 実践編 - 売上データを年月で分割して出力するには? - Just KNIME it 第2回課題解説

f:id:makkynm:20220206164207p:plain

 

はじめに

こんにちは、自動化大好きまっきーです。さて、今回は実践編 2022年1月から始まった、毎週課題が出されて回答をアップロード・シェアするJust KNIME itという企画に参加してみたのでその解説です。

第一回は専門外すぎたのと、本ブログで扱っているテーマから離れていたので解説等行いませんでしたが、第2回は実用問題として良さげだったので取り上げたいと思います。

 

 

 今回のテーマ ~Just KNIME it Challenge2~

www.knime.com

 

覚えてほしいこと

新しいKNIMEのバージョンではPath型ができた

 

やりたいこと

大きなcsv ファイルを年月で分割し保存する

f:id:makkynm:20220206160001p:plain

元ファイル

f:id:makkynm:20220206160015p:plain

処理後のファイル

 

やりたいことは上に示した通りですが、一応原文の問題文と日本語訳も。

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

DatasetSales 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は下記リンクからダウンロードできます。

hub.knime.com

f:id:makkynm:20220206161254p:plain

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となっていないような場合でも変換できます。

f:id:makkynm:20220206161914p:plain

String to Date&time

年月ごとにループ

Extract Date&Timeで年月要素を抽出したら、年月単位でフィルタしながら繰り返したいので、Groop Loop Startを使用します。

f:id:makkynm:20220206162139p:plain

Group Loop Start
フォルダパスを作成

年でフォルダを作りたいので、String to Pathを使用します。

あらかじめStringに変換しておいたYearを指定して、今回の課題で出てきたようにworkflowフォルダ下のdataフォルダにYearのフォルダパス指定すると、パスが出来上がります。

f:id:makkynm:20220206162534p:plain

String to Path

f:id:makkynm:20220206162637p:plain

String to Pathでフォルダパスを作成

ファイルパスも作成

ファイルパスの作り方もKNIMEのバージョンが新しくなって少し変わっています。今回のポイントは、前のNodeで作ったフォルダのPath型変数を指定する点です。

f:id:makkynm:20220206162847p:plain

Create file/folder Variables configuration

f:id:makkynm:20220206162912p:plain

Create file/folder Variables configuration flowvariables

 

おわりに

難易度は簡単になっていましたが、いかがでしたでしょうか。

KNIME Hubに行くと色んな人の回答がみれるので、他の人はどうやって回答したのかみてみるのも面白いですよ。

 KNIMEはノーコードですが、実際に作ってみると回答は千差万別で面白いです。別に目的を達成すれば、過程はどうでもいいのですが、それでも分かりやすいワークフローや分かりにくいワークフローが存在します。

せっかくノーコードは他人に共有しても分かりやすいと言う特性を持っているんですから、それを存分に活かしているフローが私は「綺麗な回答」だと思います。

あなたの回答は他人に分かりやすいものでしたか?

Java SnipptやデフォルトでインストールされていないNodeなど、ワークフローをパッとみるだけでは何をやっているか分からないNodeを使っていませんか?

 

ぜひ、他人に共有しても分かるワークフローの作成を目指してみてください。

ではまた!

 

degitalization.hatenablog.jp

 

 

 

KNIME Hubワークスペース

makkynm/Public – KNIME Hub

Twitter アカウント

まっきー | デジタル推進課 (@makkynm) | Twitter

 

KNIMEに関する本

KNIMEに関する日本語の本って今これくらいしかないと思うんですよね、、

本がいいなーと言う人はぜひ試してみてください。

 

参考リンク