csvファイルのカラムの要素による集計をするRubyスクリプト
2008年11月25日
住所録から市(区)毎の合計数を集計するRubyスクリプトのメモ。
csvファイルは、文字コードが utf-8 、改行コードが lf を想定している。
$KCODE = "UTF8" require "csv" areas = Hash.new total = 0 colnum = 4 CSV.open(ARGV[0], "r") {|row| address = row[colnum] city_name = address.slice(/[^市区]*(市|区)/) unless city_name then next end if areas.key?(city_name) then new_count = areas[city_name].to_i + 1 areas.store(city_name, new_count) else areas.store(city_name, 1) end total = total + 1 } areas.each {|key,val| puts "#{key}, #{val}" } puts "合計 #{total}"
csvデータの中身は以下のようになっている。
市(または区)別に集計をしていく。
"連番","法人名","法人電話番号","法人郵便番号","法人住所"
"1","安威小学校","072-xxx-xxxx","567-xxxx","大阪府茨木市安威x-xx-xx"
"5","茨木市立小学校東小学校","072-xxx-xxxx","567-xxxx","大阪府茨木市鮎川x-x-xx"
"9","茨木市立小学校清溪小学校","072-xxx-xxxx","568-xxxx","大阪府茨木市泉原xxx"
"16","茨木市立小学校茨木小学校","072-xxx-xxxx","567-xxxx","大阪府茨木市片桐町x-xx"
...
...
...
"116","金蘭千里中学校","06-xxxx-xxxx","565-xxxx","大阪府吹田市藤白台x-xx-x"
"117","弘済中学校","06-xxxx-xxxx","565-xxxx","大阪府吹田市古江台x-x-x"
"118","吹田市立中学校豊津西中学校","06-xxxx-xxxx","564-xxxx","大阪府吹田市豊津町x-x"
必要に応じてcsvファイルの文字コード・改行コードを変更する。
実行結果。
$ cat school_data_osaka.csv | nkf -dw >hoge
$ ./count.rb hoge
大阪府吹田市, 57
大阪府茨木市, 47
大阪府大阪市, 456
合計 560
Rubyレシピブック 第2版 268の技
posted with amazlet at 08.11.25
青木 峰郎 後藤 裕蔵 高橋 征義
ソフトバンク クリエイティブ
売り上げランキング: 63136
ソフトバンク クリエイティブ
売り上げランキング: 63136