プログラマーのメモ書き

伊勢在住のプログラマーが気になることを気ままにメモったブログです

E2D3 で地図を描いてみた(続き)

こちらの記事

blog.mori-soft.com

で紹介したように E2D3 で地図描いてみたので、データも表示してみることにします。

データの表示

表示するデータの取得

今回作成した地図の元にした nagoya-color と同様に、人口や世帯数を表示してみようと思います。 人口のデータも境界データと同じく、 e-stat から取得できます。

e-stat のサイトのトップページから 『地図で見る』->『地図で見る統計(統計GIS)』->『統計データダウンロード』と進みます。 次に、『国勢調査』->『2015年』->『小地域(町丁・字等別)』と進むと、

f:id:junichim:20181027003630p:plain

のようにダウンロードしたいデータを選択する画面が表示されるので、『男女別人口総数及び世帯総数』をクリックします。 すると、県単位でデータがダウンロードできるので、三重県を選択して、ダウンロードします。

データの加工

ダウンロードしたデータ(CSV形式)を見ると、県内の全市町村さらに町丁字別に総人口および男女別人口と世帯数が記載されています。 いやー、これだけの統計まとめて公開してるのすごいですね。国勢調査、面倒やなー、ぐらいにしか思ってませんでしたが、こうやって成果を目の当たりにすると、ただただ頭の下がる思いです。

E2D3 で表示するために、これを若干加工します。もとにした nagoya-color ではどうも ward に該当する名前をもとにデータを表示しているようです。伊勢市のデータだと、wardの部分は、町丁字(ちょうちょうあざ)の名前になります。 なので、先頭列に 町丁字等の名前が来て、続いて総人口、男女別人口、世帯数が並んだ形式にします。こんな感じです。

f:id:junichim:20181027003847p:plain

これを data.csv として ise-color ディレクトリに保存しておきます。

表示

これで準備できました。e2d3 コマンドを実行して、ブラウザで ise-color を表示させると

f:id:junichim:20181027004223p:plain

見事に表示されました。

いやー、なかなかいいですね。マウスをその地域に合わせるとポップアップで情報が表示されます。

f:id:junichim:20181027004309p:plain

余談

ま、基本的にはこれで問題ないのですが、実はデータをよく見ると不思議な点があるのに気づきました。 伊勢市の場合、町丁字等の名前が同じデータが複数存在しています。

例えば、伊勢市のデータだと、『小俣町新村』というところが、2レコードあったりします。

f:id:junichim:20181027004701p:plain

不思議に思って、データのフォーマット(PDF)を調べてみると、 それぞれに対して KEY_CODE という 都道府県コード + 市町村コード + 町丁字コード であらわされたコードが割り当てられています。 前述のデータをよく見ると、先頭列が KEY_CODE となっており、確かに同じ町名であっても、KEY_CODE が異なっています。

これって、いわゆる大字(おおあざ)までが載っていて、小字(こあざ)の地名が省略されてるんでしょうか?ちょっとわかんないですね。 わざわざ町字コードを変えるなら、対応する町丁字名も変えてくれてもよかったのに、と個人的には思います。

で、これにちゃんと対応しようとすると main.js 側の処理を変えてやり、KEY_CODE を使って領域を区別する必要があるようです。 (もちろん、処理を変えなくても、町名に1とか2を付加して、対応する topojson の町名も同じように1とか2を追加すれば、対応できます。)

ちょっと手間かかりそうなんで今回は割愛します。

ちなみに、今の main.js のs処理だと、同じ地名のデータが複数ある場合は、あと側のレコードのデータが採用されます。

(参考) ダウンロードしたデータに関する情報は、下記のページにあります。上記のデータフォーマットのPDFもこちらのページから飛べます。

ダウンロードデータについて | 政府統計の総合窓口

余談2

上記のデータの箇所について、 topojson 側はどうなってるんだろうか?と気になったので、調べてみました。

すると、上記の『小俣町新村』というところが、人口データでは2レコードなんですが、topojsonでは、4か所もあります!

なんじゃこれは?

で、仕方ないので topojson のもとになった国勢調査の内容を確認してみると、同じ町丁・字番号(KEY_CODEが同じということになるかな?)に対して、複数のデータが存在していることがある、とのことです。

そんなのありか?と思いましたが、あれこれ地図を見ていたら、世の中には『飛び地』とかがあることを思い出しました。同じ町名だけど、飛び地。そうなると領域としては分離してる。なので、同じKEY_CODEに対して、複数の領域(複数のデータ)が存在しているのかな?と思うとなんとなく合点がいきました。

じゃあ、これって、topojson 内(というか国勢調査内)では どうやって表現してるんだろうか?と思って 境界データの定義書(PDF) を調べる と KIGO_E (特殊記号E) というのを連番で割り当てて、区別可能になっているようです。

データ表現って難しいなー。

ちなみに、 topojson 側で同じ地名の領域が複数ある場合、すべて同じデータが表示されます。

プルリクエスト

さて、せっかくデータを作ったので、 E2D3 に地図のテンプレートとして追加申請してみようと思います。 テンプレートの追加を申請するには、 e2d3-contrib のクローンを使うのではなく、一度 e2d3-contrib をフォークして、そのリポジトリにコミットしたものをプルリクエストで取り込み依頼をかけます。

具体的な手順は、 データ可視化テンプレートを新しく追加する に載っているので、それに従えば問題ありません。

ということで、まず Github 上で e2d3-contrib のフォークを作ります。 フォークしたリポジトリをクローンします。

mor@lenovo:~/workspace/e2d3/test$ git clone https://github.com/junichim/e2d3-contrib/

作業用のブランチを切ります。

mor@lenovo:~/workspace/e2d3/test$ cd e2d3-contrib
mor@lenovo:~/workspace/e2d3/test/e2d3-contrib$ git checkout -b ise-color

作業用ブランチに先ほど作った ise-color をコミットします。

mor@lenovo:~/workspace/e2d3/test/e2d3-contrib$ cd ise-color
mor@lenovo:~/workspace/e2d3/test/e2d3-contrib/ise-color$ 各種ファイル編集
mor@lenovo:~/workspace/e2d3/test/e2d3-contrib/ise-color$ cd ..
mor@lenovo:~/workspace/e2d3/test/e2d3-contrib$ git add ise-color
mor@lenovo:~/workspace/e2d3/test/e2d3-contrib$ git commit -m "Add Ise color"

実際にコミットしたものは、前回書いた記事とは若干異なり、

  • topojson 側の属性名を変更するのではなく、 main.js 側で参照する属性名を変更している
  • 領域にマウスを乗せた際に表示される地名を、町丁字名のみとしている(三重県伊勢市は省略)

のようにして内容を変えています。また、README.mdやthumbnail.pngも整えました。

リモートリポジトリにプッシュします。

mor@lenovo:~/workspace/e2d3/test/e2d3-contrib$ git push origin ise-color

Github 上でプッシュした ise-color についてプルリクエストで取り込み依頼をかけます。 しばらくののち、無事に取り込んでいただきました。やった!

f:id:junichim:20181027213542p:plain

Excel Online で見てみると、ちゃんと表示されてます。 めでたし、めでたし。

(参考)

データ可視化テンプレートを新しく追加する