こんにちは。今日は梅雨らしいジトジトしたお天気ですね。

雨ニモ負ケズ、元気に行こうと思います♥︎

 

さて、前回はようやく普通の横浜市地図を入手したところでした。その次に、地図を人口の大小で塗り分けたいので、今日は元となる人口データを調達したいと思います!

 

横浜市の人口データを入手する

横浜市のページを開くと、おおっ、統計ポータルサイトがあります。

横浜市統計ポータルサイト 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から取得して、目的の人口データを入手してファイルに書き出す処理を実装したいと思います。

 

それでは、よい一日をお過ごしください♥︎