GIS奮闘記

現役GISエンジニアの技術紹介ブログ。主にPythonを使用。

【Pythonで分析】ArcpyとPandasを使用して将来推計人口を視覚化する

本日は将来推計人口について考えてみます。将来推計人口とは、国連や各国政府が推計した将来の人口のことです。日本では、直近の国勢調査による人口数を基に、出生率や死亡率などを考慮して推計し、国立社会保障・人口問題研究所がほぼ5年ごとに作成、公表します。

今回は2015年の人口を「1」として将来推計人口の色分けを行ってみたいと思います。

日本地図の作成

まずは、前回使用した日本地図を都道府県ごとに集約します。つまり、ディゾルブですね。以下スクリプトを使用してください。

# -*- coding: utf-8 -*-
import arcpy

#入力用のShapeファイルと出力用のフィーチャクラスなどを指定
arcpy.Dissolve_management("D:\python\population\japan_ver80.shp", "C:\ArcPySample\ArcPySample.gdb\japan",
                          "KEN", "", "MULTI_PART",
                          "DISSOLVE_LINES")

これが
f:id:sanvarie:20160112081208p:plain

こんな感じでディゾルブされました。本当は市区町村別に出したかったのですが、一覧がみつからず今回は断念して、都道府県別にします。。。
f:id:sanvarie:20160112081212p:plain

将来推計人口データのダウンロード

国立社会保障・人口問題研究所から都道府県別の将来推計人口データをダウンロードします。
http://www.ipss.go.jp/pp-fuken/j/fuken2007/suikei.html

f:id:sanvarie:20160112082205p:plain

ダウンロードしたEXCELを以下のようなCSVに加工してください。
f:id:sanvarie:20160112144637p:plain

pandasのインストール

こういった場合はpandasが便利です。インストールをお願いします。

サンプルコード①

2015年の人口を「1」として将来推計人口の算出を行います。

# -*- coding: utf-8 -*-
import pandas as pd

#csv読込
df = pd.read_csv("D:\python\population\population.csv",encoding="SHIFT-JIS")

#pandasのカラム追加
df['percent2020'] = ""
df['percent2025'] = ""
df['percent2030'] = ""
df['percent2035'] = ""

#japanレイヤにカラムを追加
arcpy.AddField_management("japan", "PercentOf2020", "Double")
arcpy.AddField_management("japan", "PercentOf2025", "Double")
arcpy.AddField_management("japan", "PercentOf2030", "Double")
arcpy.AddField_management("japan", "PercentOf2035", "Double")

for key,rowD in df.iterrows():
    cursorJ = arcpy.UpdateCursor("japan")
    for rowJ in cursorJ:
        if rowD.todouhuken == rowJ.KEN:
            percent2020 = float(rowD.year2020.replace(",", "")) / float(rowD.year2015.replace(",", ""))
            percent2025 = float(rowD.year2025.replace(",", "")) / float(rowD.year2015.replace(",", ""))
            percent2030 = float(rowD.year2030.replace(",", "")) / float(rowD.year2015.replace(",", ""))
            percent2035 = float(rowD.year2035.replace(",", "")) / float(rowD.year2015.replace(",", ""))
            rowJ.setValue("PercentOf2020", percent2020)
            rowJ.setValue("PercentOf2025", percent2025)
            rowJ.setValue("PercentOf2030", percent2030)
            rowJ.setValue("PercentOf2035", percent2035)
            cursorJ.updateRow(rowJ)

正常終了後、テーブルウインドウを確認してみてください。以下のようになっていたら成功です。
f:id:sanvarie:20160113081311p:plain

以下のようにレイヤのプロパティを変更します。
f:id:sanvarie:20160113100246p:plain

サンプルコード②

以下スクリプトをArcMap上で実行してください。タイマーなどをしかけて一定間隔ごとに描画させてもいいかもしれませんね。

# -*- coding: utf-8 -*-
import arcpy

mxd = arcpy.mapping.MapDocument("CURRENT")
for lyr in arcpy.mapping.ListLayers(mxd):
    if lyr.symbologyType == "GRADUATED_COLORS":
        if lyr.symbology.valueField == "":
            lyr.symbology.valueField = "PercentOf2020"
        elif lyr.symbology.valueField == "PercentOf2020":
            lyr.symbology.valueField = "PercentOf2025"
        elif lyr.symbology.valueField == "PercentOf2025":
            lyr.symbology.valueField = "PercentOf2030"
        elif lyr.symbology.valueField == "PercentOf2030":
            lyr.symbology.valueField = "PercentOf2035"
        else:
            lyr.symbology.valueField = "PercentOf2020"
        lyr.symbology.classBreakValues = [0,0.80 ,0.825 ,0.85, 0.875, 0.90, 0.925, 0.95 , 0.975, 1.00, 1.025, 1.05,1.075, 1.10]
        arcpy.RefreshActiveView()
2020年の将来推計人口

ほとんどの地域が微減といったところでしょうか。東京と見づらいのですが沖縄だけ唯一微増していますね。
f:id:sanvarie:20160113095422p:plain

2025年の将来推計人口

北海道、東北、北陸、四国、山陰、九州南部に顕著な現象が見られます。
f:id:sanvarie:20160113095522p:plain

2030年の将来推計人口

ほとんどの地域で大きな人口減少が見られます。秋田県はなんと現在の人口の8割程度になってしまうみたいですね。
f:id:sanvarie:20160113095644p:plain

2035年の将来推計人口

どの地域も現在と比べると8割、良くて9割程度の人口になってしまうみたいですね。沖縄だけは微増をキープしています。これは興味深いですね。
f:id:sanvarie:20160113095726p:plain

2035年以降も人口減少は続くと思うので、このままだと日本の衰退は確実ですね。かといって移民政策をとるわけにもいかず、出生率をあげることもできず、ジリ貧が続くのではないでしょうか。なんとか良くなってほしいものですがなかなか難しい問題ですね。今回は将来推計人口についてでしたが、高齢化についての分析などもおもしろそうですね。

以上、「ArcpyとPandasを使用して将来推計人口を視覚化する」でした。