正直に書くブログ

2012年9月からフリーランス活動開始しました。
今後もマニアックでも有用な情報を提供出来るように頑張ります。

CSV

awkの高速処理でCSVからファイル楽々抽出

awkがCSVファイルの編集や、情報抽出に非常に相性の良いツールだという事は、使ってみて初めて理解できることだと思いますので、ここでいっちょ例題というかやってみようと思います。

素材は、日本郵便が提供している郵便番号データとします。全国版をダウンロードして圧縮を解凍し、テキストエディタで開くと12万行以上あることが分かります。

MS-ExcelでもCSVファイルを読み込む事は出来ますが、Excel 2003までは6万数千行までしか読み込めませんので全国分は一度には作業出来ません。Excel 2007以降なら12万行でも読み込めますけどね。最近のバージョンであれば、無料で使用出来るオフィススイートOpenOfficeやLibreOfficeのCalcでも大丈夫です。

ファイルを開けるという話で言えば、表計算でも可能ですが、実際に抽出処理を行うとawkの処理能力の素晴らしさが一気にアピール出来ます。是非とも実際にやってみていただきたいです。

例えば、欲しい列(郵便番号、都道府県、市、町名番地)を抜き出すとしましょう。表計算ならKEN_ALL.CSVを開いて、不要な列を削除して、別名で保存という感じの手作業になると思います。PCのスペックによってはもっさりした動作になるかも知れません。

キャプチャ

awkなら下記のスクリプトを通すだけで一瞬です。

続きを読む

MIFES 9がCSVデータ編集の最強ツールになるかも!

MIFES 9ベータ版が公開されているので試してみた。理由はずばり、強化されたCSVモードの実装セル(列)内で改行されていても読み込める様になったそうだ

CSV形式のファイルを編集する際、Excelで回りくどい開き方と保存の手間を強いられ、うっかりするとデータが化け(型を変換される)てしまうという煩わしさに苦悩してきた。

比較的データ量の少ないCSV形式の処理にはCSVエディタが適しているが、データ量が多くなるとべらぼう遅くなるので、ネットショップの商品データCSVの処理には向かない。特にアパレル系は、一つの品番に色とサイズが存在するので、データ数はどんどん増える。

同様にJANデータの管理も、もはやExcelでは追いつかず、Accessに取り込んで行うことになっていた。当然ながら入出力の繰り返しで、型の変換を勝手にやられてしまうとうっとうしい事この上ない。

そこで私はテキストエディタ(EmEditor)を使用している。慣れてくると表になっていなくても編集できてしまうし、何よりも膨大なデータでもサクサクと処理できるので快適に思っていた。しかしその上を行くのがawk言語によるスクリプト処理で、簡単な手順をスクリプトに記したり、一行コマンドで処理してもあっという間に結果がファイルに出力されるので、もはや最強だろうと思っていた。(もちろんPerlやRubyなどのより強力な言語を扱えればそれにこしたことは無いが、私はプログラマーじゃないのでawkを扱うので限界だ)

しかしawkには致命的な弱点がある。1行=1レコードというルールが崩れると正しくレコードを認識できない。今時のCSV書式の常識では"ダブルクォーテーション"でフィールドを囲む事によって、途中で改行されていてもそれは文章中の改行だと判断させることになっているが、awkのパーサはそれを標準では理解してくれない。

そんなところへひょっこり現れたのが、CSVモードを洗練させたMIFES 9である。

テキストエディタという地味なツール故、知らない人も多いだろうが、MS-DOSな時代から販売されている強力なテキストエディタで、私が初めてPC(パーソナルなコンピュータという本来の意味で)を扱う様になった職場では、Dynabook J-3100にMIFESスクリーンエディタがインストールされていた。MS-DOSに標準実装のエディタ、EDLINコマンド(一行ずつ表示して編集)なんか使ってられないと痛感した。

あれから15年位は経っているだろうか?いまだにMIFESが生き残っている事に驚いた。想像するにプログラマー、ライター(もの書き)等の根強い支持を受け続けてきたのだろう。それだけ完成度の高い、洗練されたツールであると評価しても良いだろう。(MIFES 8でアクティベーションが採用され、ライセンスが厳しくなった事より、コアなユーザーにそっぽ向かれたという情報を見て、MIFES終わったなと思ったのをなんとなく記憶している)

そんなMIFESが9というバージョン番号を掲げて再び市場に現れた。アクティベーションは廃止、個人ユーザーなら1ライセンスで2台のPCまでインストール可能。USB版を作成する機能も付いているとか。

そして目玉は、進化したCSVモードである。これは圧巻であった。大容量データを開いた時のCSVエディタのどんくさい動きを、存在が無意味だと思わされる位に快適だ。なにしろテキストエディタなんだから動作が軽い。

某、ドロップシッピングの商品データCSVを落としてきて、MIFES 9のベータ版で開いてみた。流石に20万レコード以上、ファイルサイズにして250MBのCSVデータを開くと数秒はかかるが、開いてしまえば編集は快適である。やはりテキストエディタだけのことはある。

CSVモードに切り替える時は、セパレータ(カンマ)、囲み(ダブルコーテーション)等の指定をする。数秒でセパレータで区切られた表形式に整形される。今時のCSVの書式を正確にパースしてくれる。これならテキストエディタでも見やすくCSVデータを表に整形した上で編集できるだろう。ExcelでCSVファイルを開く際の型指定が無いだけでも手間とは感じない。

しかし、一行目(列見出し)を固定する方法が見当たらない。今回の試用では20万レコードを編集する。ならば列見出しの常時表示は必須である。特に状態フラグ等を表す列で、0か1の値しか持ってない場合は、どの列がどの項目なのか分からないと編集が出来ない。せっかく表形式に整形してもらってもあんまり意味がなくなる。CSVデータの編集ならではのニーズだろうがその配慮は欲しい。

まだベータ版なので、フィードバックで要望を2つあげた。実装されるかどうかは分からないが、CSV編集をする上で欠かせない基本機能なので期待をしている。

おそらく私はMIFES 9を購入するであろう。それは作業の効率アップが確実に期待できるからだ。職場で購入してくれるかどうかは分からないが、個人的に購入してででも使用するつもりだ。なにしろ扱うファイル形式が基本的にTXT形式なのだから、Offceアプリの様に互換性うんぬんをい気にする必要が無い。私はプログラマーでは無いが、SubversionやVSSとの連携によるバージョン管理機能も魅力的だ。

最後のブラッシュアップを開発元が決めてくれたら、ネットショップ業界でも欠かせないツールになりかねないパフォーマンスを秘めているだけに、かなり期待している。

本当はあんまり教えたくない情報でもあるが、MIFESの開発が中止してしまうとこれも問題なので、良いものには売れてもらわないと困るから紹介する事にした次第である。

日々、膨大なCSVデータを扱う人は是非、ベータ版(致命的なエラーにはまだ遭遇していない)の検証を行い、フィードバックを送って完成品の購入を検討していただきたい。

良いものが必ずしも生き残る時代ではないだけに、良いものはユーザーが口コミででも広げていかないといかないと思っている。最後は自分に帰ってくることだから。なんとなくでも興味をもってくれた方は、概要が読み取れる元麻布氏のレビュー記事を読んでみて欲しい。


Excelのおせっかいが煩わしいっ

今日は楽天の商品管理をCSVで行なうための調査をしています。CSVファイルで一気に操作が出来るので、プログラミングできる人ならシステムと連携してCSVファイルを書き出せば、それをFTPで楽天のサーバーにアップロードするだけで楽できますしかなり作業効率アップです。しかし、プログラムを組もうにも楽天側のシステムの仕組みが分かっていないとどうしようもないので、その調査って訳です。

分かってしまえばそれまでなのですが、テストして結果を見てみないと分からないことが多々あります。マニュアル読めって話ですが、楽天のマニュアルは本当に分かりづらい(でもビッダーズよりはマシかな?)。なので手っ取り早く試してみる方が早かったりします。

CSVファイルのアップロードは、GOLDスペースじゃなくRMSの方になるみたいです。/ritem/batchにCSVファイルを放り込むとバッチ処理が走ります。数分待たされて結果がメールで送られてきます。結果の詳細は/ritem/logsにCSVファイルとして生成されます。

ここで多々遭遇したのは、「一行目の項目数が一致しません」と言うエラー。楽天のCSVファイルは全て文字列として扱われるらしく、"値"というダブルクォートで囲んでおり、区切りはカンマ(,)です。ところがExcelで作業すると、ダブルクォートは勝手に削除されてしまうし、空白列は省略されてしまいます。特に後者が原因で行の項目が足りないって事が発生します。

もっと簡易な、単純にカンマで区切っているだけのCSVデータとして、ありのままの編集ができるツールは無いもんかなと調べてみたらありました。

Cassava Editor

オプション設定に「全ての値を""で囲む」という機能が備わっており、これで少なくとも行の項目数が合わないって事は回避できるようになりました。ありがたいことです。しかも拡張子毎にルールを設定できるので応用すれば色々な拡張子で挙動をコントロールできます。

続きを読む
記事検索
月別アーカイブ
SEO的な実験
RSS

ブログランキング

track feed 正直に書くブログ
最新コメント
スポンサードリンク
QRコード
QRコード
  • ライブドアブログ