QGIS演習#03 | バッファ人口を概算で算出する

city-data

前回の演習では、施設から一定距離の範囲をバッファとして作成し、「施設にアクセスしやすい範囲」を地図上で可視化しました。

しかし、生活圏を地図で表示しただけでは、

  • その範囲にどれくらいの人が住んでいるのか
  • 施設がどれくらいの人口をカバーしているのか

を正確に測ることはできません。

そこで今回は、前回作成したバッファを使い、「バッファ内人口」を算出していきます。本記事では、以下の流れで進めていきます。

人口データの前処理(座標系の変換)

インデックス作成

概算人口算出(属性の空間結合)

また、今回使用するデータは以下の通りです。

  • 前回作成した施設バッファ(画像中では「施設バッファ」から始まるレイヤ名を使用)
  • 国勢調査2020年人口データ(画像中では「人口ポリゴン」から始まるレイヤ名を使用)

なお今回は、人口データとして「QGIS演習#01-2」の講座で作成した「5次メッシュ人口」を使用します。

QGIS演習#01-2 | 国勢調査データで高齢化率を可視化する(メッシュデータ編)
前回の演習(QGIS演習 #01)では、国勢調査2020年の小地域データを使い、人口や高齢化率を可視化しました。前回記事はこちらです。小地域データは、「○○町○丁目」のような、人間にとって理解しやすい…

はじめに

人口メッシュデータから特定のエリア内の人口を算出する方法はいくつかあります。今回は、その中でも最も計算がシンプルな「メッシュ総取り」で人口を推計する方法を扱います(下図の左側です。右側は次回扱います)

例えば、ある施設バッファと重なる人口メッシュが3つあり、それぞれの人口が以下のようになっていたとします。

  • メッシュA:120人
  • メッシュB:80人
  • メッシュC:150人

この場合、バッファ内人口の概算値は

  • 120人 + 80人 + 150人 = 350人

となります。QGISでは、属性の空間結合(集計つき)という機能を用いて、バッファに対して「重なっているメッシュの属性値(人口)を集計する」ことができます。

ただし、今回ご紹介する「メッシュ総取り」は人口をやや多めに見積る可能性がある点に注意が必要です。

  • まず大まかな人口規模を知りたい
  • 手早く施設ごとのカバー人口を比較したい
  • 厳密な人口推定は不要

という場合には向いていますが、人口をより丁寧に推計したい場合は、次回扱う「面積按分」を用いることが望ましいです。

前処理

人口ポリゴンを平面直角座標系へ変換

まずは、人口データの座標系を確認します。今回扱う「属性の空間結合」では、集計に用いる2つのデータ(バッファデータと人口データ)の座標系が揃っている必要があります。

前回までに作成したバッファデータは平面直角座標系のため、人口データも同様の座標に変換します。

右下のレイヤ一覧で、人口ポリゴンのレイヤを右クリックし、CRSを平面直角座標系(現在扱っている広島県のデータの場合、EPSG:6671)に変更します。なお、今回の処理では保存するデータ形式として「GeoPackage」を選択しましょう(詳しい理由は割愛しますが、この次に行うインデックス作成という作業のための対応です。インデックス作成の機能はファイル形式によって処理がうまくできないため…。)

バッファデータのデータ形式をGeoPakageに変換

バッファデータについても前処理を行います。次に行う「インデックスを作成」の処理は、実はGeoJSON形式には対応していないなど、データ形式によって対応可否が変わってきます。前回までに作成したバッファデータはGeoJSONだったはず。Geopackage形式のデータを新たに作り直しましょう。

インデックス

次に、空間インデックスを作成します。

例えば今回のように、「人口メッシュ」と「施設バッファ」の重なりを判定する処理では、空間インデックスを作成しておくことで、処理速度を大幅に改善できます。

空間インデックスを作成しない場合、QGISは「すべてのメッシュ」に対して重なり判定を行おうとします。そのため、実際には遠く離れていて絶対に重ならないメッシュに対しても、1件ずつ判定処理が実行されてしまい、データ量が多いと極端に処理が遅くなります。

一方、空間インデックスを作成すると、「近くにある可能性がある地物だけ」を効率的に探索できるようになるため、不要な重なり判定を大幅に減らすことができます。

人口メッシュや小地域データのように件数の多いデータを扱う場合は、事前に空間インデックスを作成しておくことをおすすめします。

インデックスの作成

上部メニューから「ベクタ → データ管理ツール → 空間インデックスの作成」を選択します。表示された画面で、対象レイヤに人口ポリゴンを指定し、「実行」を押せばインデックスの作成は完了です。

インデックスの作成自体は数秒で終わりますが、この処理をしておくだけで、この後に行う「属性の空間結合」の処理速度が大きく変わります。

同様に、施設バッファ側についても空間インデックスを作成しておきましょう。

処理自体はすぐに終わります。画面上では大きな変化はありませんが、以降の空間結合や交差処理を行う際の下準備になります。

属性の空間結合

次に、QGISの「属性の空間結合(集計)」を使って、施設バッファと重なる人口ポリゴンの人口を合計します。

上部メニューから「プロセッシング → ツールボックス」を選択し、QGIS画面右側に「プロセッシングツールボックス」を表示します。ツールボックスの検索欄で「属性の空間結合」と入力し、「属性の空間結合(集計つき)」を選択します。

なお、「属性の空間結合」には「集計つき」と「集計なし」の2種類があります。今回は、施設バッファと重なるメッシュ人口の合計値を求めたいので、「集計つき」を使用します。

「属性の空間結合(集計つき)」のウィンドウが出現したら以下の設定をしてください。

  • 地物を結合するレイヤ:施設のバッファポリゴン
  • 集計形式:交差する(Intersect)
  • 比較対象:人口データ
  • 集計フィールド:人口総数 ※集計したい対象のフィールドを選択してください
  • 集計方法:sum(合算)

設定ができたら、「実行」ボタンを押します。処理には少し時間がかかる場合がありますが、完了すると、「施設バッファと重なった人口メッシュの人口の合計値」を持つ施設バッファが新たに表示されます。

新たに表示されたレイヤは、施設バッファごとの人口総数を持ったデータです。

つまり、「各施設から半径250m圏内に、どれくらいの人口が存在するか」を集計した結果になります。属性テーブルを開くと、人口総数の合計値が新しいフィールドとして追加されていることが確認できます。

色定義の変更

最後に、人口総数の合計値を持つバッファデータについて、人口規模を色分けして表示してみましょう。

右下のレイヤ一覧で、出力された施設バッファレイヤを右クリックし、「プロパティ」を開きます。

「シンボロジ」から「連続値による定義」を選択し、値には、属性の空間結合で追加された人口合計のフィールドを指定します。今回の例では、「人口総数_sum」のようなフィールドが追加されているはずです。このフィールドを使って色分けすることで、人口の多いバッファほど濃い色で表示されるようになり、施設ごとのカバー人口の違いを視覚的に把握しやすくなります。

設定できたら「OK」を押します。これで、各施設の徒歩圏内にどれくらいの人口が存在するかを、地図上で視覚的に確認できるようになりました。

まとめ

今回は、前回作成した施設バッファと人口ポリゴンを重ね、QGISの「属性の空間結合(集計)」を使って、バッファ内人口を概算しました。属性の空間結合を使うと、バッファと重なる人口メッシュの人口を合計し、施設ごとのカバー人口を手早く確認できます。

一方で、少しでも重なった人口メッシュ全体が集計されるため、結果は概算値になります。そこで次回は、バッファと人口ポリゴンが実際に重なっている面積をもとに人口を按分する「面積按分」の方法を扱います。