デジタル推進課

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

KNIME - CSV ファイル・タブ区切りファイルを読み込む / Excel区切り位置の自動化 ~CSV Reader~

f:id:makkynm:20201220000139p:plain

 

 

はじめに

今回はCSVファイルを読み込んでみたいと思います。また、Excelの区切り位置機能の自動化について触れます。本来であれば初級編で扱う内容かもしれませんが、初級編は出来るだけ数を少なくしたかったので、中級編に入れてしまいました。また、CSV Writerもやりたかったのですが、分量が多くなってしまったので分けました。

 

 今回のテーマ ~CSV Reader~

CSVを読み込む際のNodeは"CSV Reader"です。

f:id:makkynm:20200525233930p:plain

CSV Reader

Workflowは下記からダウンロードできます。

kni.me

 

覚えてほしいこと

CSVファイルはカンマ区切り

タブ区切りは「\t」

 

やりたいこと

カンマ区切りのCSVファイルを読み込む

テキストエディタで開くとカンマ区切りという意味が良くわかると思います。

f:id:makkynm:20200525233557p:plain

CSVファイル

タブ区切りのTXTファイルを読み込む

これはメイントピックではありませんが、Excelでよく”区切り位置”でデータを分けること、やりません?

個人的には面倒でやりたくない作業の一つです。今回のテーマでこれが自動化できるようになります。

f:id:makkynm:20200526013930p:plain

区切り位置

 

CSV Readerの使い方

Workflow

f:id:makkynm:20200525233930p:plain

Workflow - CSV Reader

Confirm

カンマ区切りを設定すると、Excelで開いたように読み込めます。

f:id:makkynm:20200525234031p:plain

Confirm - CSV Reader

Configure

正直、ほとんど何もせずに読み込めてしまいます。しかしオプションがいくつかあるので、ちょっと一言であえて細かく説明したいと思います。

エラーが出てしまった!というときだけ参考にしてみてください。

Step1 - Settings

まずは最初の画面です。この画面では、ファイルパスとオプションを選択します。

基本は、ファイルパスをBrowseから選択、Column HeaderとRow Headerの有無について設定をすれば終了です。

f:id:makkynm:20200526000637p:plain

Configure - CSV Reader Settings

その他の設定は下記の通りですが、詳しくはちょっと一言で触れたいと思います。

Column Delimiter

列にする区切りを指定します。CSVファイルは、カンマ区切りなのでデフォルトで「,」になっています。タブ区切りの場合は、これを「\t」としてみましょう。

Row Delimiter

行を区切る識別子を定義します。「\n」は、改行という意味です。改行されたら新しい行として認識してほしいので、基本はデフォルトのままでOKです。

Quote Char

これで囲めば、下で説明するComment Charで指定された記号でも、コメントではなく文字として認識できます。

Comment Char

この文字が入ると、それ以降の文字がすべてコメント行として無視されます。正直、通常の業務であればこんなのいらないと思うのですが、プログラムを書く人は良く使ったりします。これが原因で不具合を起こすこともあるので、特別な理由がない限り空白でいいと思います。

 

Support Short Lines

間に空白のセルがある場合、空白のセルとして認識します。これがないと、空白のセルがある場合、列を詰めてしまうため、列がずれて認識されてしまいます。

 

Step2 - Limit Rows

続いて、行の選択です。3行スキップしてから読みたいんだよなーなどの設定をする部分です。

f:id:makkynm:20200526000814p:plain

Configure - CSV Reader Limit Rows

Skip first lines

スキップする行数を指定できます。1と入力すると、1行目はスキップして、2行目から読み込み始めます。

Column Headerをオンにしているとすると、2行目が列名、3行目からデータという扱いになりますね。

Limit rows

読み込む行数を制限できます。1と入力すると、1行分のデータしか読み込まれません。ただし、Column Header分はノーカウントです。

Scan Limit(number of lines)

はじめにデータ型を自動的に決めるために、KNIMEのReader Nodeは必ずScanを行って、データの中身を分析します。

なので、データ量が多いとそれだけ分析に時間がかかってしまいます。

そんな時に使用が推奨されます。3万行のデータだけれど50行分くらい読み込んでくれればデータ型は判断できるなーという場合に力を発揮します。

 

Step3 - Encoding

ここでエンコーディングが指定できます。

f:id:makkynm:20200526003503p:plain

Configure - CSV Reader Encoding

 

エンコーディング(Encoding)とは、文字コードのことで、機械の文字を人が読める文字に変換する対応表の種類のようなものです。これが異なると、文字化けが起こります。

デフォルトでは、KNIMEで設定されたデフォルトのエンコーディングが採用されます。私の場合、Shift-JISかと思います。

ExcelCSVファイルを作ると、UTF-8で作成されてしまうので、普通に読み込むと文字化けが起こってしまいます。

文字化けが起こった場合は、エンコーディングの見直しをしてみましょう。

f:id:makkynm:20200526003927p:plain

エンコーディングを指定

ExcelCSVファイルを作ると、UTF-8で書き出される。

f:id:makkynm:20200525233740p:plain

Excel CSVファイルで書き出す

 

 ちょっと一言

 タブ区切りのTXTファイルを読み込んでみる

CSV Readerは、カンマ区切りのCSVファイルだけではなく、タブ区切りでも読み込めます。

f:id:makkynm:20200526004751p:plain

タブ区切りのTXTファイルを読み込む

上で少し触れましたが、Column Delimiterタブ区切りの場合は、「\t」とするだけです。

また、ファイルの読み込みの際もファイルのタイプをプルダウンからTXTを選べばTXTファイルを選択可能です。

f:id:makkynm:20200526004551p:plain

タブ区切りのTXTファイルを読み込む

 

Quote Char / Comment Char / Support Short Linesをサンプルファイルで検証してみる

上のざっくりとした説明では分からない!という場合は実験してみましょう。

実験1:Comment Charを入れてみる

Quote Char / Comment Char / Support Short Linesが上のざっくりとした説明では分からない!という場合は実験してみましょう。

 1つ目のファイルは、1行目の部署のセルを「総務」から「#総務」として、コメント行として認識させてみましょう。

f:id:makkynm:20200526005649p:plain

実験1 - コメント記号を入れてみる

実行結果は、「Executed failed: Too few data elements (line: 4 (Row1), source...」というエラーが発生してしまいました。これは「なんかデータ少なすぎるぞ、、」といわれています。

f:id:makkynm:20200526005859p:plain

読み込み不可のエラー

もう少し詳しく言うと、読み込んでみたらソースファイルで4行目に当たる、社員番号A003のデータがRow1として読み込まれたけど、Row0と比べたらデータ少なすぎるよ、、というエラーです。

2行目は、「#」以降、改行の「\n」すらコメントとして読み込まれてしまうので、2行目が、3行目の終わりまで続いていると認識されてしまったことが原因ですね。

実験2:Quote Charを入れてみる

続いて、Quote Charを用いて、上のコメント記号を通常のデータとして認識させてみましょう。用意したデータはこのようになっています。コメント記号をQuote 記号で囲んでいます。

f:id:makkynm:20200526010736p:plain

実験2 - Quote記号を入れてみる

これを使うと、コメント記号が読み込めるんです!

f:id:makkynm:20200526010922p:plain

コメント記号を読み込む
実験3:Support Short Linesの効果検証:列が一部足りない場合

最後に途中のデータが何らかの理由でなくなり、コラムが足りない場合を考えてみましょう。

f:id:makkynm:20200526011512p:plain

実験3 - コラムが足りない場合

普通に実行すると、実験1と同じようなエラーが出てしまいます。

f:id:makkynm:20200526011735p:plain

コラムが足りないエラー

これをSupport Short Linesにチェックを入れると、コラムが足りない場合でも実行することができます。ただし、抜けている部分は横にずれてしまいます。

f:id:makkynm:20200526011825p:plain

Support Short Lines

  

おわりに

ものすごく簡単なCSV Readerで1記事にしてしまいました、、

ブログの発行スピード、早められるように頑張ります~

ではまた!

 

 

 

参考リンク