Python製のcsvファイルを処理するためのコマンドラインツール「csvkit」

csvファイルを扱うためのコマンドラインツールを集めたライブラリ。python製。

csvkit 0.6.2 (beta) ― csvkit 0.6.2 (beta) documentation

いろいろ試してみた。

まずcsvファイルを用意。
以下のサイトからガンバ大阪の年間試合スケジュールをcsvファイルでDLさせてもらった。
さっかりん - スケジュール ダウンロード

csvファイルのカラムを調べる

csvcut -nでカラムの情報が得られる
ファイルがutf-8でない場合はエラーになるので-eオプションでエンコーディングを指定する。

$ csvcut -n SJIS_all_g_osaka.csv -e sjis
  1: Subject
  2: Start Date
  3: Start Time
  4: End Date
  5: End Time
  6: All day event
  7: Location
  8: Description

8カラムあることがわかる。

カラムを絞って表示

csvcutに-cオプションで表示するカラムを絞ることができる。
カラム番号を前後させれば、カラムのポジションを入れ替えることもできる

 $ csvcut -c1,2,7 SJIS_all_g_osaka.csv -e sjis | head -n10
Subject,Start Date,Location
天皇杯 決勝戦 G大阪-柏,2013/01/01,国立霞ヶ丘競技場
練習試合 G大阪-ガンバ大阪ユース,2013/01/26,ガンバ大阪練習場
練習試合 大宮-G大阪,2013/02/03,グアム
練習試合 福岡-G大阪,2013/02/09,宮崎市生目の杜運動公園陸上競技場
練習試合 岡山-G大阪,2013/02/12,宮崎市生目の杜運動公園陸上競技場
練習試合 G大阪-町田,2013/02/15,綾町錦原運動公園サッカー場
練習試合 鳥取-G大阪,2013/02/24,チュウブYAJINスタジアム
練習試合 G大阪-鳥取,2013/02/25,万博記念競技場
J2 第1節 G大阪-京都,2013/03/03,万博記念競技場

csvstatで統計情報を表示

csvstatにcsvデータを渡すと、最小値や最大値、頻出値などを調べることができる

$ csvcut -c1,2,7 SJIS_all_g_osaka.csv -e sjis | csvstat
  1. Subject
	<type 'unicode'>
	Nulls: False
	Unique values: 69
	5 most frequent values:
		練習試合 G大阪-関西大学:	3
		関西ステップアップリーグ G大阪-関西学生選抜B:	2
		練習試合 岡山-G大阪:	2
		関西ステップアップリーグ G大阪-関西学生選抜A:	2
		練習試合 G大阪-岐阜:	2
	Max length: 24
  2. Start Date
	<type 'datetime.date'>
	Nulls: False
	Min: 2013-01-01
	Max: 2013-11-24
	Unique values: 75
  3. Location
	<type 'unicode'>
	Nulls: True
	Unique values: 33
	5 most frequent values:
		万博記念競技場:	26
		ガンバ大阪練習場:	15
		J-GREEN堺:	2
		宮崎市生目の杜運動公園陸上競技場:	2
		とりぎんバードスタジアム:	1
	Max length: 24

Row count: 75

関西大学との練習試合が3試合あることや、当たり前だけどホーム万博の試合が多いことがわかる

grepして絞り込む

csvgrepを使う
対象となるカラムを-cオプションで指定し、-mオプションでパターンを指定する

パターンにマルチバイト文字を使うとエラーになったのでこれは後で調べたい

以下は練習試合などを除いたリーグ戦のみの表示にしている

$ csvcut -c1,2,7  SJIS_all_g_osaka.csv -e sjis | csvgrep -c1 -m J2 | head -n10
Subject,Start Date,Location
J2 第1節 G大阪-京都,2013/03/03,万博記念競技場
J2 第2節 長崎-G大阪,2013/03/10,長崎県立総合運動公園陸上競技場
J2 第3節 G大阪-横浜FC,2013/03/17,万博記念競技場
J2 第4節 熊本-G大阪,2013/03/20,うまかな・よかなスタジアム
J2 第5節 G大阪-千葉,2013/03/24,万博記念競技場
J2 第6節 札幌-G大阪,2013/03/31,札幌ドーム
J2 第7節 G大阪-東京V,2013/04/07,万博記念競技場
J2 第8節 山形-G大阪,2013/04/14,NDソフトスタジアム山形
J2 第9節 G大阪-松本,2013/04/17,万博記念競技場

csvsortでソートする

ソート対象の絡むを-cオプションで指定する
逆順にするのは-rオプション

今年も残りわずか

$ csvcut -c2,1  SJIS_all_g_osaka.csv -e sjis | csvgrep -c2 -m J2 | csvsort -c1 -r | head -n12
Start Date,Subject
2013-11-24,J2 第42節 群馬-G大阪
2013-11-17,J2 第41節 G大阪-山形
2013-11-10,J2 第40節 京都-G大阪
2013-11-03,J2 第39節 G大阪-熊本
2013-10-27,J2 第38節 徳島-G大阪
2013-10-20,J2 第37節 G大阪-富山
2013-10-06,J2 第36節 栃木-G大阪
2013-09-29,J2 第35節 G大阪-愛媛
2013-09-22,J2 第34節 松本-G大阪
2013-09-15,J2 第33節 G大阪-水戸
2013-09-01,J2 第32節 G大阪-長崎

csvlookで枠線を表示する

csvlookに渡すと枠線を表示してくれる
line_numberはcsvsortにつけた-lオプションで表示されている

$  csvcut -c2,1  SJIS_all_g_osaka.csv -e sjis | csvgrep -c2 -m J2 | csvsort -c1 -r -l | head -n12 | csvlook
|--------------+------------+-----------------|
|  line_number | Start Date | Subject         |
|--------------+------------+-----------------|
|  1           | 2013-11-24 | J2 第42節 群馬-G大阪  |
|  2           | 2013-11-17 | J2 第41節 G大阪-山形  |
|  3           | 2013-11-10 | J2 第40節 京都-G大阪  |
|  4           | 2013-11-03 | J2 第39節 G大阪-熊本  |
|  5           | 2013-10-27 | J2 第38節 徳島-G大阪  |
|  6           | 2013-10-20 | J2 第37節 G大阪-富山  |
|  7           | 2013-10-06 | J2 第36節 栃木-G大阪  |
|  8           | 2013-09-29 | J2 第35節 G大阪-愛媛  |
|  9           | 2013-09-22 | J2 第34節 松本-G大阪  |
|  10          | 2013-09-15 | J2 第33節 G大阪-水戸  |
|  11          | 2013-09-01 | J2 第32節 G大阪-長崎  |
|--------------+------------+-----------------|


まだ色々機能がありそうなので続きは明日