image

  • フォト Amazonギフト券
    ※この時計の時刻は、閲覧しているパソコンのものであり、必ずしも正確な時間とは限りません

検索

最近のトラックバック

無料ブログはココログ

« Processing 本を買った | トップページ | ピックアップ:フリーな地球の高解像度画像, 錯覚の不思議, etc... »

2009-01-03

郵便番号と緯度経度情報

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... »

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: 郵便番号と緯度経度情報:

» 秋田県 郵便番号 [電脳かわら版]
【新米】 【送料無料】秋田県産ひとめぼれ普通栽培 【20年産】玄米・30kg 調製済 【三郎 玄】 商品価格:9,713円レビュー平均:4.8 秋田県の方におたずねします。 秋田県の方におたずねします。秋田県に、油(石油)が浮いたような温泉があると聞いたことがありますが、入られた方はご感想をお聞かせください。(続きを読む) 山形県と秋田県の関係について 山形県と秋田県の関係について山形県と秋田県は隣同士ですがあまり交流がありません。仲は良いとはいえないかもしれませんが、仲が悪いということ... [続きを読む]

» 秋田県 [まいの出来事]
東洋大・佐藤監督代行 大胆オレ流采配…箱根駅伝 スポーツ報知肩の荷を下ろし、秋田... [続きを読む]

« Processing 本を買った | トップページ | ピックアップ:フリーな地球の高解像度画像, 錯覚の不思議, etc... »

mokuji

2013年12月
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        

google

  • twitter
  • __
  • _
    Googleボットチェッカー

合わせて読む

  • 合わせて読む
    フィードメーター - katoy: cocolog あわせて読みたい

リンク