今回から何回かに分けて、QGIS2.0を用いたバッファ分析について書いていきます(ハンダイ・ジンチリのGIS実習向け)。
事例としては、大阪府豊中市にある各保育施設から半径500m圏内に含まれる0~4歳人口について集計する、っていうのをやってみたいと思います。認可・認可外・こども園など全部ひっくるめた分析だし、保育所の対象年齢と合ってないし、ぜんぜん本気の分析じゃないんですが・・・。
分析作業のざっくりとした手順は以下の通りです。
- 必要なデータを準備。
- QGISに豊中市の地図データを読み込み、それに統計データを結合。
- 保育施設のポイントデータを作成。
- 保育施設のポイントデータから500mバッファポリゴンを作成。
- バッファポリゴンを小地域単位(重なり合う小地域ポリゴンの大きさ)に分割。
- 分割されたバッファポリゴンと重なり合う小地域ポリゴンとの面積比を計算。
- 面積比を利用して人口を按分し、分割されたバッファポリゴン内の人口を推計。
- 分割されたバッファポリゴンの人口を集計し、各保育施設の500mバッファ領域内の人口等を推計。
実際には、上記のうち5~8は一挙に実行可能なツールやプラグインがありそうな気もしますが、いまのところ知らないし、また、QGISの1つ1つの操作に慣れることに重きをおいて、コツコツと地道にやっていきましょう。
今回は、上記の「1.必要なデータを準備」です。
まずは保育施設のデータ。iタウンページや豊中市の保育所(保育園)一覧を参考にして、77か所のデータを集め、ジオコーディングを行って各施設の経度・緯度を取得しました。これらの具体的なやり方については、[甲南GIS12]iタウンページの検索結果からジオコーディングで使用する住所リストを作成や、[甲南GIS13]住所リストのジオコーディングと地図化を参考にしてください。
保育施設の種別データも追加して、最終的には以下のような表が完成しました。
ここで1つ留意点。各データの項目名は半角英数字、かつ、できるだけ短いもの(できれば半角5文字程度)がよいです。項目名は日本語(2バイト文字)もOKなのですが、できるだけ短くという点からも半角英数字がベターかな、と。半角5文字程度にする理由は後ほどわかります。
表が完成したら、最終的にはCSV形式で保存します。
次は豊中市の地図データおよび統計データ。地図で見る統計(統計GIS)からダウンロードできる、平成22年国勢調査の小地域データを利用します。統計データは、少なくとも「年齢別(5歳階級、4区分)、男女別人口」が必要です。地図(境界)データは数種類ありますが、世界測地系、かつ、地図の単位が「メートル」である平面直角座標系(面積計算やバッファ分析を行うことを考慮)のシェープファイル、すなわち、「世界測地系平面直角座標系・Shape形式」を選択します。
バッファ分析を行う場合は、バッファ領域が対象地域外にはみ出ることも当然ありうるので、対象地域周辺の地図データも揃えたほうがよいのですが、今回に関しては、保育所への「越境入所」は基本的にないだろうと考え(認可外はあるかもしれませんが・・・)、豊中市のデータのみ使用します。
地図データに関しては、ダウンロード・解凍してできたシェープファイルをそのまま使えばよいのですが、統計データに関しては少し加工が必要です。
たとえば、豊中市の「年齢別(5歳階級、4区分)、男女別人口」のデータをダウンロード・解凍すると、「tblT000573C27203.txt」というテキストファイル(中身はカンマ区切り(CSV形式)のデータ)が得られます。まず、この長っちょろいファイル名をできるだけ短い(半角5文字程度)ものに変更します。今回の例では「AGE.txt」としておきましょう。次に、ファイルの拡張子を「txt」から「csv」に変更します。これで「AGE.csv」というCSV形式のファイルに変わりました。
続いて、このファイルをExcelで開き、以下のポイントに沿ってデータを加工します。
- <KEY_CODE>の列は必ず残す(地図データとの結合に必要)。
- 不要なデータ項目を削除(全部残してもかまわないですが)。
- 1行目にデータ項目名を入力。半角英数字のできるだけ短いものがよい。
- 日本語のデータ項目名が入っている2行目を削除。
- データ内にみられる「-」(ハイフン)を「0」(ゼロ)に置換。
- データ内にみられる「X」を空白セルに置換。「X」は秘匿を示すもので、秘匿地域・秘匿データの扱いについてはもっと厳密に考えるべきなのですが、今回はとりあえず欠損値扱いとします。
上記の加工後、以下のような表ができあがります(わかりやすくするために、必要最小限の項目のみ残しました)。<TOTAL>は「総数、年齢「不詳」含む」を、<T0_4>は「総数0~4歳」を示しています。ここで、ファイルを上書き保存。
最後に、もうひと手間。先に作業手順だけ書いてしまうと、上掲の表が文字型(<KEY_CODE>は文字型として扱います)、文字型(<NAME>)、整数型(<TOTAL>)、整数型(<T0_4>)という列の並びになっていることをふまえて、メモ帳などのテキストエディタを開き、以下の図のように入力。
これを、対応する統計データと同じファイル名で(今回の場合「AGE」)、とりあえずテキストファイルとして保存。そして、ファイルの拡張子を「txt」から「csvt」に変更。このCSVTファイルは、統計データのCSVファイルとセットで保存しておきます。
このCSVTファイルを作成した意味を簡単に説明すると、CSVファイル本体にはデータ型の定義を保存できないため、別ファイルで定義する、ということです。”String”は文字型を、”Integer”は整数型を意味します。他に、”Real”(実数型;小数点ありの数値)などもあります。この定義をしておかないと、後でQGISに読み込んだときにすべてのデータが文字型として扱われてしまい、困ってしまうのです。このことに関する詳細については、csvtファイル – Bravo-Astroの備忘録、属性データにCSVまたはDBFファイルを結合したい – QGIS逆引辞典Wiki、属性テーブルの検索と操作 ― GeoPacific.org(の下のほう)を参考にしました。
CSVTファイル作成のポイントは、統計データ(CSVファイル)の各列に対応するデータ型を、必ず「”」で囲み、カンマで区切って並べる、ということです。
保育施設のCSVファイル、地図データ(シェープファイル)、統計データのCSVファイルとこれに対応するCSVTファイル、これらが揃えばようやく最低限のデータ準備は完了です。長かった・・・。次回からは、これらのデータをQGISに読み込んでいきます。では、また。