データの前処理や加工に使えるPython csvkit

みなさなまこんばんは。Python Advent Calendar 2014 24日目の記事です。

先日のpyhack@atelierhideに教えてもらった、データ前処理スト垂涎のライブラリの紹介をすることにしました。

csvkit とは

csvkitは、コマンドラインでCSVやTSVファイルを取り扱うのに便利なライブラリです。データの前処理や加工をLinux/UNIXのコマンドラインで行っている環境もあると思いますが、それを代替する、あるいは組み合わせて使うとよいのがcsvkitです。

pipでインストール出来ます。Python3.4にもインストールは可能ですが、一部の機能が動作しないことを確認しています。今回は2.7にインストールしました。

具体的な使い方を見ていきます。

基本的な使い方

ここからはiris.csvのデータをcsvkitで触っていきます。

csvcut

上記のコマンドを実行すると下記の様に出力されます。

ヘッダ行を出力してくれています。

「5: Species」の列だけ抽出してみます。

結果は以下の通り。

ちなみに、Delimiter はオプションで指定することが出来ますので、ファイルがカンマ区切りでなくとも同様に扱えます。

csvlook

csvlookは、次の様にCSVファイルを整形してくれるコマンドです。

csvkitはLinux/UNIXコマンド同等にパイプで処理を渡すことによって柔軟な処理が行えます。

上記の実行結果は下記の通りです。

csvgrep

grepコマンドのように、指定する文字列で絞り込むことができます。

正規表現も利用出来ます。

csvsort

指定した列でソートして出力されます。

csvjoin

csvjoinを試すために、もう1つのデータ name.csv を用意しました。

csvjoinを行います。

結果は次の通り。

オプションを指定することで、LEFT JOIN、RIGHT JOINも行えます。

csvclean

name.csvに対して、csvcleanコマンドを実行すると「No errors.」とだけ表示されます。

では、name.csvを編集し、「ばーじからー」を「ばーじ,からー」にして保存します。再度csvcleanを実行すると下記の様に出力されます。

このように、フォーマットが正常であるか異常であるかの判定、異常発見の手がかりを教えてくれるのがcsvcleanです。

csvstat

csvstatは、データの概要を出力しれくれます。

数値の場合は最大値や最頻値、中央値、文字列の場合は値の一覧が出力されます。うーん、便利ですねぇ。

csvsql

csvsqlは、データベースへの入力をサポートしてくれるコマンドです。

指定したファイルを解析して、適切なCREATE文を作成してくれているようです。MySQLやORACLEにも対応しています。データベースへの接続情報を与えることで、データのINSERTまで行うこともできます。

まとめ

いかがでしたでしょうか。head, cut, join など Linux/UNIXコマンドと似た機能もありますが、csvstatやcsvsqlなど、独自の便利な機能も実装されています。利用するのにPythonプログラミングの知識は必要ありませんので、間口の広いライブラリではないかと思います。

それではメリークリスマス!