郵便番号と緯度経度情報
google や yahoo には 郵便番号/緯度経度情報/住所 の変換サービスがある。
でも 書籍 "ビジュアライジング・データ —Processingによる情報視覚化手法" 中にある例の
郵便番号の分布を地図上に配置してみる
といった用途には、これらのサービスは使えない。
(何万という件数のデータ変換を web サービス経由で行うのは無理)
郵便番号データ、住所と緯度経度データは以下にある。
- http://www.post.japanpost.jp/zipcode/download.html
> 郵便番号データダウンロード - 日本郵便
- http://nlftp.mlit.go.jp/isj/
> 位置参照情報ダウンロードサービス
これらを合体させたデータをつくろうと思ったが、簡単にはできない。orz...
俺が半日かけて行ったことを示そう。
1. 郵便番号 (全国) を download し、UTF8 に変換 (zipcode.csv)
2. 位置参照情報 (47 都道府県全部) を download し、UTF8 に変換( *_2007.csv)
2 の作業では、download できるデータは zip である。download は手動でおこなったが、それを解凍、文字コード変換するのは次の shell script を使った。
# ! /bin/sh
rm -r ../*.csv
rm -f *.csv
for i in *.zip
do
unzip -o $i
for j in *.csv
do
nkf -w $j > 1.txt
mv -f 1.txt ../$j
done
rm -f *.csv *.xml
done
さて、これらのデータに次の操作をしようとした。
3. zipcode.csv に 緯度経度情報を追加する。
4. *_2007.csv に 郵便番号情報を追加する。
3 を行うための実験として次の ruby スクリプトを作ってみた。
そして、わかったのは 単純な突き合わせでは、郵便番号 に 緯度経度を追加することができないと
いうこと。
実験 ruby script と その出力結果の一部を示す。
$ cat addgeo.rb
$KCODE = 'utf8'
require 'rubygems'
require 'fastercsv'
require 'pp'
KEN_TO_GEOCSV = {
"北海道" => '01_2007.csv',
"青森県" => '02_2007.csv',
"岩手県" => '03_2007.csv',
"宮城県" => '04_2007.csv',
"秋田県" => '05_2007.csv',
"山形県" => '06_2007.csv',
"福島県" => '07_2007.csv',
"茨城県" => '08_2007.csv',
"栃木県" => '09_2007.csv',
"群馬県" => '10_2007.csv',
"埼玉県" => '11_2007.csv',
"千葉県" => '12_2007.csv',
"東京都" => '13_2007.csv',
"神奈川県" => '14_2007.csv',
"新潟県" => '15_2007.csv',
"富山県" => '16_2007.csv',
"石川県" => '17_2007.csv',
"福井県" => '18_2007.csv',
"山梨県" => '19_2007.csv',
"長野県" => '20_2007.csv',
"岐阜県" => '21_2007.csv',
"静岡県" => '22_2007.csv',
"愛知県" => '23_2007.csv',
"三重県" => '24_2007.csv',
"滋賀県" => '25_2007.csv',
"京都府" => '26_2007.csv',
"大阪府" => '27_2007.csv',
"兵庫県" => '28_2007.csv',
"奈良県" => '29_2007.csv',
"和歌山県" => '30_2007.csv',
"鳥取県" => '31_2007.csv',
"島根県" => '32_2007.csv',
"岡山県" => '33_2007.csv',
"広島県" => '34_2007.csv',
"山口県" => '35_2007.csv',
"徳島県" => '36_2007.csv',
"香川県" => '37_2007.csv',
"愛媛県" => '38_2007.csv',
"高知県" => '39_2007.csv',
"福岡県" => '40_2007.csv',
"佐賀県" => '41_2007.csv',
"長崎県" => '42_2007.csv',
"熊本県" => '43_2007.csv',
"大分県" => '44_2007.csv',
"宮崎県" => '45_2007.csv',
"鹿児島県" => '46_2007.csv',
"沖縄県" => '47_2007.csv',
}
def read_gio_csv(file)
puts "read ... #{file}"
gios = []
open(file) { |f|
while l = f.gets
gios << l
end
}
puts "end."
gios
end
current_gio = ''
gios = []
FasterCSV.foreach("zipcode.csv") do |row|
gio_file = KEN_TO_GEOCSV[row[6]]
if current_gio != gio_file
gios = read_gio_csv(gio_file)
current_gio =gio_file
end
address = '"' + row[7] + '","' + row[8]
pattern = Regexp.new(address)
find = ''
gios.each do |g|
if pattern =~ g
find = g
break;
end
end
if find == ''
puts "--------------- not found " + ( row * ",")
else
# puts find
end
# puts row * ","
end
走らせてみる。
$ ruby addgeo.rb >1.txt
1 時間経過しても終わらないので、別端末で進み具合いなどをしらべてみる。
$ wc -l zipcode.cvs
122535 zipcode.csv
$ head 1.txt
ntsitm157187:gio-data youichikato$ head 1.txt
read ... 01_2007.csv
end.
--------------- not found 01101,060 ,0600000,ホッカイドウ,サッポロシチュウオウク,イカニケイサイガナイバアイ,北海道,札幌市中央区,以下に掲載がない場合,0,0,0,0,0,0
--------------- not found 01101,060 ,0600042,ホッカイドウ,サッポロシチュウオウク,オオドオリニシ(1-19チョウメ),北海道,札幌市中央区,大通西(1〜19丁目),1,0,1,0,0,0
--------------- not found 01101,064 ,0640820,ホッカイドウ,サッポロシチュウオウク,オオドオリニシ(20-28チョウメ),北海道,札幌市中央区,大通西(20〜28丁目),1,0,1,0,0,0
--------------- not found 01101,060 ,0600001,ホッカイドウ,サッポロシチュウオウク,キタ1ジョウニシ(1-19チョウメ),北海道,札幌市中央区,北一条西(1〜19丁目),1,0,1,0,0,0
--------------- not found 01101,064 ,0640821,ホッカイドウ,サッポロシチュウオウク,キタ1ジョウニシ(20-28チョウメ),北海道,札幌市中央区,北一条西(20〜28丁目),1,0,1,0,0,0
--------------- not found 01101,060 ,0600002,ホッカイドウ,サッポロシチュウオウク,キタ2ジョウニシ(1-19チョウメ),北海道,札幌市中央区,北二条西(1〜19丁目),1,0,1,0,0,0
--------------- not found 01101,064 ,0640822,ホッカイドウ,サッポロシチュウオウク,キタ2ジョウニシ(20-28チョウメ),北海道,札幌市中央区,北二条西(20〜28丁目),1,0,1,0,0,0
--------------- not found 01101,060 ,0600003,ホッカイドウ,サッポロシチュウオウク,キタ3ジョウニシ(1-19チョウメ),北海道,札幌市中央区,北三条西(1〜19丁目),1,0,1,0,0,0
上のようなパターン以外にも
--------------- not found 01102,002 ,0028091,ホッカイドウ,サッポロシキタク,ミナミアイノサト,北海道,札幌市北区,南あいの里,0,0,1,0,0,0
なんて、郵便番号データにある住所がヒットしていないケースもある!
$ grep read 1.txt
read ... 01_2007.csv
read ... 02_2007.csv
read ... 03_2007.csv
read ... 04_2007.csv
read ... 05_2007.csv
read ... 06_2007.csv
read ... 07_2007.csv
$ wc -l 1.txt
11271 1.txt
7 ファイル分を処理した段階で、 1 万以上のマッチしなかったパターンがある!
"以下に掲載がない場合" と "xx 丁目ーxx丁目" パターンの対処をして、どこまで減らせるかなぁ...
« Processing 本を買った | トップページ | ピックアップ:フリーな地球の高解像度画像, 錯覚の不思議, etc... »
この記事へのコメントは終了しました。
« Processing 本を買った | トップページ | ピックアップ:フリーな地球の高解像度画像, 錯覚の不思議, etc... »
コメント