本日は当ブログでもよく使用しているESRIさんの日本地図を加工してみようと思います。このデータは全国の市区町村ごとのポリゴンデータなのですが、県ごとのポリゴンが欲しいという方もいるかと思います。単純に県ごとにするだけなら簡単なのですが、人口や世帯数といったデータも一緒に集約することはArcMapではできない?!のではないでしょうか。←自分がやり方を知らないだけかもですが・・・
また、今回のソースと加工したデータはGitHubで公開しました。
https://github.com/sanvarie/MinnanoArcGIS
URL
以下サイトでダウンロード可能です。
全国市区町村界データ | 製品 | ESRIジャパン
仕様
ただのコピペですが。
県ごとのポリゴンを作成
ディゾルブを行います。以下スクリプトを実行してください。また、事前に「ArcPyJapan.gdb」というgdbを作成しておいてください。ちなみにここまでは【Pythonで分析】ArcpyとPandasを使用して将来推計人口を視覚化する - GIS奮闘記でやりましたね。よく考えたら今回はほとんどこの時と同じようなことをしているような・・・でもまぁ気にしません(笑)
サンプルコード
dissolve.py
# -*- coding: utf-8 -*- import arcpy #ディゾルブ arcpy.Dissolve_management("D:\python\soccer\japan_ver80.shp", "C:\ArcPySample\ArcPyJapan.gdb\Japan", "KEN", "", "MULTI_PART", "DISSOLVE_LINES")
結果を確認します。県ごとのポリゴンが完成しました。ただ、このままだと人口、世帯数がありませんね。
カラム追加
上記で作成したポリゴンに人口、世帯数カラムを追加します。
サンプルコード
addcolumn.py
# -*- coding: utf-8 -*- import arcpy arcpy.env.workspace = "C:\ArcPySample\ArcPyJapan.gdb" arcpy.AddField_management("Japan", "P_NUM", "Long") arcpy.AddField_management("Japan", "H_NUM", "Long")
カラムが追加されましたね。
県ポリゴンに人口、世帯数を与える
上記で追加した人口、世帯数カラムに値を付与します。
インストール
Pandasのインストールをお願いします。
サンプルコード
updatejapanmap.py
# -*- coding: utf-8 -*- import arcpy import pandas as pd #日本地図のShape inFeatures = "D:\python\soccer\japan_ver80.shp" #更新するフィーチャクラスがあるgdb arcpy.env.workspace = "C:\ArcPySample\ArcPyJapan.gdb" field_list = [] for field in arcpy.ListFields(inFeatures): if field.type != "Geometry": field_list.append(field.name) df = pd.DataFrame(arcpy.da.FeatureClassToNumPyArray(inFeatures,field_list,null_value=-9999)) #グルーピング df_group = df.groupby('KEN')['P_NUM','H_NUM'].sum() for key,row in df_group.iterrows(): cursorJ = arcpy.UpdateCursor("Japan") for rowJ in cursorJ: if key == rowJ.KEN: rowJ.setValue("P_NUM", row.P_NUM) rowJ.setValue("H_NUM", row.H_NUM) cursorJ.updateRow(rowJ)
人口、世帯数を持った県ごとのポリゴンの作成に成功しました。
最近、オープンデータの数が増加している気がしますが、自分の求めているものとちょっと違っていたりする経験がある方が多いのではないでしょうか。こういった技術を使えば、オープンデータを自分の欲しかったデータに加工することが可能です(今回はかなり簡単な例でしたが)。