はじめに
今回はCSVファイルを読み込んでみたいと思います。また、Excelの区切り位置機能の自動化について触れます。本来であれば初級編で扱う内容かもしれませんが、初級編は出来るだけ数を少なくしたかったので、中級編に入れてしまいました。また、CSV Writerもやりたかったのですが、分量が多くなってしまったので分けました。
今回のテーマ ~CSV Reader~
CSVを読み込む際のNodeは"CSV Reader"です。
Workflowは下記からダウンロードできます。
覚えてほしいこと
CSVファイルはカンマ区切り
タブ区切りは「\t」
やりたいこと
カンマ区切りのCSVファイルを読み込む
テキストエディタで開くとカンマ区切りという意味が良くわかると思います。
タブ区切りのTXTファイルを読み込む
これはメイントピックではありませんが、Excelでよく”区切り位置”でデータを分けること、やりません?
個人的には面倒でやりたくない作業の一つです。今回のテーマでこれが自動化できるようになります。
CSV Readerの使い方
Workflow
Confirm
カンマ区切りを設定すると、Excelで開いたように読み込めます。
Configure
正直、ほとんど何もせずに読み込めてしまいます。しかしオプションがいくつかあるので、ちょっと一言であえて細かく説明したいと思います。
エラーが出てしまった!というときだけ参考にしてみてください。
Step1 - Settings
まずは最初の画面です。この画面では、ファイルパスとオプションを選択します。
基本は、ファイルパスをBrowseから選択、Column HeaderとRow Headerの有無について設定をすれば終了です。
その他の設定は下記の通りですが、詳しくはちょっと一言で触れたいと思います。
Column Delimiter
列にする区切りを指定します。CSVファイルは、カンマ区切りなのでデフォルトで「,」になっています。タブ区切りの場合は、これを「\t」としてみましょう。
Row Delimiter
行を区切る識別子を定義します。「\n」は、改行という意味です。改行されたら新しい行として認識してほしいので、基本はデフォルトのままでOKです。
Quote Char
これで囲めば、下で説明するComment Charで指定された記号でも、コメントではなく文字として認識できます。
Comment Char
この文字が入ると、それ以降の文字がすべてコメント行として無視されます。正直、通常の業務であればこんなのいらないと思うのですが、プログラムを書く人は良く使ったりします。これが原因で不具合を起こすこともあるので、特別な理由がない限り空白でいいと思います。
Support Short Lines
間に空白のセルがある場合、空白のセルとして認識します。これがないと、空白のセルがある場合、列を詰めてしまうため、列がずれて認識されてしまいます。
Step2 - Limit Rows
続いて、行の選択です。3行スキップしてから読みたいんだよなーなどの設定をする部分です。
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
ここでエンコーディングが指定できます。
エンコーディング(Encoding)とは、文字コードのことで、機械の文字を人が読める文字に変換する対応表の種類のようなものです。これが異なると、文字化けが起こります。
デフォルトでは、KNIMEで設定されたデフォルトのエンコーディングが採用されます。私の場合、Shift-JISかと思います。
ExcelでCSVファイルを作ると、UTF-8で作成されてしまうので、普通に読み込むと文字化けが起こってしまいます。
文字化けが起こった場合は、エンコーディングの見直しをしてみましょう。
ExcelでCSVファイルを作ると、UTF-8で書き出される。
ちょっと一言
タブ区切りのTXTファイルを読み込んでみる
CSV Readerは、カンマ区切りのCSVファイルだけではなく、タブ区切りでも読み込めます。
上で少し触れましたが、Column Delimiterをタブ区切りの場合は、「\t」とするだけです。
また、ファイルの読み込みの際もファイルのタイプをプルダウンからTXTを選べばTXTファイルを選択可能です。
Quote Char / Comment Char / Support Short Linesをサンプルファイルで検証してみる
上のざっくりとした説明では分からない!という場合は実験してみましょう。
実験1:Comment Charを入れてみる
Quote Char / Comment Char / Support Short Linesが上のざっくりとした説明では分からない!という場合は実験してみましょう。
1つ目のファイルは、1行目の部署のセルを「総務」から「#総務」として、コメント行として認識させてみましょう。
実行結果は、「Executed failed: Too few data elements (line: 4 (Row1), source...」というエラーが発生してしまいました。これは「なんかデータ少なすぎるぞ、、」といわれています。
もう少し詳しく言うと、読み込んでみたらソースファイルで4行目に当たる、社員番号A003のデータがRow1として読み込まれたけど、Row0と比べたらデータ少なすぎるよ、、というエラーです。
2行目は、「#」以降、改行の「\n」すらコメントとして読み込まれてしまうので、2行目が、3行目の終わりまで続いていると認識されてしまったことが原因ですね。
実験2:Quote Charを入れてみる
続いて、Quote Charを用いて、上のコメント記号を通常のデータとして認識させてみましょう。用意したデータはこのようになっています。コメント記号をQuote 記号で囲んでいます。
これを使うと、コメント記号が読み込めるんです!
実験3:Support Short Linesの効果検証:列が一部足りない場合
最後に途中のデータが何らかの理由でなくなり、コラムが足りない場合を考えてみましょう。
普通に実行すると、実験1と同じようなエラーが出てしまいます。
これをSupport Short Linesにチェックを入れると、コラムが足りない場合でも実行することができます。ただし、抜けている部分は横にずれてしまいます。
おわりに
ものすごく簡単なCSV Readerで1記事にしてしまいました、、
ブログの発行スピード、早められるように頑張ります~
ではまた!
参考リンク
- エンコーディングとは:
-
すさんのBlog:
【KNIME】お手軽に機械学習してみませんか? 〜random_forest_regression〜 - 非プログラマーのためのインフォマティクス入門。(仮)
- KNIME公式Node Pit(英語):
- KNIME Example Workflow(英語):