Hatena::Grouprubyist

たばさの RSSフィード

03/17(月) 2008

大量データサンプルといえば

| 大量データサンプルといえば - たばさの を含むブックマーク はてなブックマーク - 大量データサンプルといえば - たばさの

下に貼った参考資料をもとに郵便番号データをいじる。

まずcsvをデータベース用に変換

# post.csvtodb.test1.rb
require'iconv'

while str=gets.chomp
i=Iconv.new("utf-8",'SHIFT_JIS')  #=>SHIFT_JISからutf-8に変換
# ri=Iconv.new('SHIFT_JIS',"utf-8") #=>その逆
puts i.iconv(str).gsub("\"","")
end

regexはまだ使えない模様(sqlite3)

郵便番号から住所検索。7桁なくてもいいように。

部分文字列を使った。もっといい手はあるかも。

#!/usr/bin/ruby  -Ks
# zipdata_analy_sqlite.rb

require 'sqlite3'
require 'nkf'

puts "<zip data>"
print "zipcode:"
cond0=gets.chomp
cond=cond0.gsub(/(-| )/,"")

dbpath="zipdata.db"
db = SQLite3::Database.new(dbpath)

def getsql cond,num
  sql=<<"EOS"
  select new_zip,pref,city,town from zipdata where substr(new_zip,0,#{num}) like #{cond};
EOS
  sql
end

a=db.execute(getsql(cond,cond.size))

a.each{|i|
  i.each{|key|
    print NKF.nkf('-s', key), " / " 
  }
  puts
}


f:id:hatecha:20080317163606p:image

実行例

>zipdata_analy_sqlite.rb

<zip data>

zipcode:789015

7890157 / 高知県 / 長岡郡大豊町 / 筏木 /

7890158 / 高知県 / 長岡郡大豊町 / 岩原 /

7890159 / 高知県 / 長岡郡大豊町 / 西峰(三谷) /

7890156 / 高知県 / 長岡郡大豊町 / 八川 /

>

データベース使わない版と比較もそのうちやってみたい。


参考

郵便番号データダウンロード - 日本郵便

no title

続き csv版

| 続き csv版 - たばさの を含むブックマーク はてなブックマーク - 続き csv版 - たばさの

#!/usr/bin/ruby  -Ks
# post.csv.rb
require 'nkf'
require 'csv'

puts "<zip data>"
print "zipcode:"
cond0=gets.chomp
cond=cond0.gsub(/(-| )/,"")

CSV.open("ken_all_utf-8.csv", 'r') do |row|
  if row[2] =~/^#{cond}/
    puts NKF.nkf('-s', row.join(" /"))
  end
end

(上のsqlite3版と等価ではないけども)けっこうかかるものだな。


あと、sqlite版のほうは0で始まるとうまく行ってないような。

+で文字列をつなげようとしても自動変換で数値計算になるようだ。


  select new_zip,pref,city,town from zipdata where "t"+substr(new_zip,0,#{n}) like "t"+#{cond};

ということで比較部を修正したら直った。ゴルフ場で得た知恵。

参考

no title

トラックバック - http://rubyist.g.hatena.ne.jp/hatecha/20080317
カレンダー
<< 2008/03 >>
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
archive Error : RSSが取得できませんでした。