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大阪-長崎 | |--------------+------------+-----------------|
まだ色々機能がありそうなので続きは明日