“ビジュアライジング・データ ―Processingによる情報視覚化手法” にアメリカの郵便番号の緯度経度を平面上にマッピングし、キーボードからの郵便番号入力にしたがって、入力した郵便番号に部分一致するポイントをインタラクティブに表示するサンプルが載っています。
例えば、「2」と入力すると、郵便番号が「2」から始まるエリアがハイライトされ、それ以外が暗くなります。続けて「1」と入力すると「21」と続くエリアが絞り込まれてハイライトされます。
ズーム機能をオンにすると、一致したエリアになめらかにズームし、郵便番号の緯度経度といった無機質なデータをとても美しく表示してくれます。
本書はProcessingによるデータ表示の手法だけでなく、オンライン上にあるデータを取得し、解析し、不要なデータを削除するフィルタリングの手法についても書かれており、自分で応用してさまざまなデータを視覚化していくことができるようになるでしょう。
このサンプルを参考に日本の郵便番号で試してみることにしました。アメリカの郵便番号は5桁ですが、日本は7桁なのでより精緻なマップを得ることができることを期待しています。
郵便番号から緯度経度データ取得
郵便番号は郵政局のwebサイトからダウンロードできますが、残念なことに緯度経度情報が含まれていません。GoogleMapsAPIのGeocordingを使って地名から緯度経度情報を取得する簡単なスクリプトをRubyでつくりました。
データ量が多いので、同じIPからリクエスト続けていると5000件程度でGoogleMapsから拒否されるようになるので、自動的にプロキシを変更するように、データ取得をどこからでもレジュームできるように作っておくとよいでしょう。
郵便番号リストは住所に(その他)と入っていたり(1丁目〜10丁目)、(ビル名何階)と書いてあったり表記がばらばらなので、Geocordingに投げて緯度経度が戻ってこないものは今回は無視することにしました。マッピングに必要なデータは十分な得られました。
Processingプログラム修正
本書のサンプルが外部データを取得して表示するようにつくられているため、ほとんどそのままで利用できます。アメリカの郵便番号が5桁なので、日本の郵便番号7桁に合うようにいくつか修正します。
実行
日本が浮かび上がりました。人口の密な地域はポイントもたくさんありますし、郵便番号の緯度経度だけから山脈がなんとなくわかったりとおもしろいです。9からはじまる郵便番号は沖縄と北陸、南東北まとめて割り振られたりします。
いくつかGeocordingが突飛な緯度経度を返しているようで、7からはじまる郵便番号がぽつっと関東にあったりするので、はずれ値をフィルタリングする処理を追加する必要がありそうです。
もうひとつの問題はデバイスフォントをつかって日本語が表示できない。。vlwというフォントファイルを日本語含めて作成することはできるようなのですが、フォントも配布となるとサイズが大きくなってしまうので。
データビジュアライジング
この本とても勉強になります。いろいろと刺激されてなにか作りたくなります。おすすめです!
“ビジュアライジング・データ ―Processingによる情報視覚化手法”
追記:
・いくつか外れ値がある
・日本語表示できない。
と問題がありますが、アプレットをアップしましたのでぜひお試しください。フォーカスがあたっている状態で郵便番号を入力すると、一致したエリアがハイライトされます。ズームモードに入るには右下の「ZOOM」をクリックします。