Perlで横浜市統計webから人口データを入手する
こんにちは。今日は梅雨らしいジトジトしたお天気ですね。
雨ニモ負ケズ、元気に行こうと思います♥︎
さて、前回はようやく普通の横浜市地図を入手したところでした。その次に、地図を人口の大小で塗り分けたいので、今日は元となる人口データを調達したいと思います!
横浜市の人口データを入手する
横浜市のページを開くと、おおっ、統計ポータルサイトがあります。
横浜市統計ポータルサイト http://www.city.yokohama.lg.jp/ex/stat/
ちょっと寄り道
つい気になって、寄り道。「大都市推計人口」を見てみました。
http://www.city.yokohama.lg.jp/ex/stat/jinko/city/new-j.html
横浜市統計ポータルサイトより引用
男女の性比が載っているのですが、地方都市は軒並み男性少ないじゃないですかー。東京に移動しているのかな・・・と見てみても、関東圏もほぼ男女比1:1みたいです。男性はどこへ行ったのでしょう・・・?女性の方が長生きするからでしょうか。もっと年代別の詳しいデータが無いと分からないですね。
本題に戻ります
先ほどの統計ポータルサイトに、年齢(各歳・5歳階級)別男女別人口が掲載されています。
こちら
http://www.city.yokohama.lg.jp/ex/stat/jinko/age/new/age-j.html
案の上、HTMLのテーブルデータとExcelですね・・・(正直メンドクサイ…;-;)。
行政区毎のデータが欲しいので、ちまちまコピペは嫌なので自動処理がしたい!
Web屋さんらしく、HTMLの方から目的のデータを入手するスクリプトを作ってみました。
今日はPerlで実装します。TableExtractというモジュールが使えそうです。
日本語で使い方を書いてくれているサイト発見:
http://www.geocities.co.jp/SiliconValley-Sunnyvale/6128/perl/tableextract.html
上のサイトを参考にして、早速小さいスクリプトを書いてみました。
※目的のhtmlをtest.htmlとしてローカルに保存してあります。
read_yokohama_population.pl
TableExtractモジュール、とっても便利ですね!カラムの見出し値を指定することで、抽出するテーブル&カラムを限定することが出来るようです。
他に注意点としては、
お役所のホームページなので、エンコードがShift_JISです。読み込んだHTMLソースは、Shift_jisでdecodeにてPerl内部リテラルに変換します。出力時は自分の標準出力環境がutf-8なので、utf-8でencodeします。
行見出しが0-5の各年齢に合致する値を入手したいのですが、見出しの年齢が全角表記になっていますね。見出しが全角の0-5各年齢と一致する行を選択して、その後の処理のしやすさを考えて、半角数値に置き直しています。
人口は3桁毎にカンマ(,)で区切られているので、カンマを除去、再度文字列連結してから、数値データに変換しています。数値データへの変換が上手くいくかどうかでvalidationの機能を持たせているつもりです。
次回は、各行政区のデータを一気にWebから取得して、目的の人口データを入手してファイルに書き出す処理を実装したいと思います。
それでは、よい一日をお過ごしください♥︎