見出し画像

【実習編】非専門家のためのQGIS ~テーブル結合の使い方~

I. はじめに

今回は、e-Statのデータを用いてコロプレスマップを作成します。e-Statとは、日本の政府統計をまとめたポータルサイトで、国勢調査をはじめ企業統計、農林業センサスなど様々な統計データが公開されています。

e-Statのデータは「行政の管轄」だけあって、利用者の利便性を考えているのかどうか分からない、クセの強いデータです。しかし、GISデータを組み合わせて利用できれば、何千、何万通りもの地図を描くことができるようになります。有用であることは間違いないので、使いこなせるようになりましょう。

e-StatのデータとGISとを結びつけるには、テーブル結合という操作が必須になってきます。まずは、テーブル結合がどのようなものなのか紹介します。


II. テーブル結合とは

前回のコロプレスマップ作成noteでは、シェープファイルの属性テーブルに統計情報を直接入力し、地図化しました。しかし、このような統計情報の付与は非効率で大変なので、普通は行いません。今回は、テーブル結合という方法を用いてシェープファイルに統計情報を与えます。

テーブル結合とは、2つのテーブルのそれぞれある列に着目したとき、一致する値があればその値をキーとして2つのテーブルをくっつける操作のことです(※1)。

画像1

QGISでは、
  1. GISデータの属性テーブル同士
  2. GISデータの属性テーブルとExcelやCSVなどのテーブルデータ
  3. ExcelやCSVなどのテーブルデータ同士
で結合することができます(※2)。
この中で最も重要なのは、ただのテーブルをGISデータと結びつけて地図として表現できるようにする2番ですね。この記事でも、2番の結合を扱います。具体的な操作やテーブル結合の結果などはIV.で紹介します。まずは、必要となるデータを準備しましょう。

※1 ExcelならVlookup関数、BashやSQL等ならjoinと同等の機能です。
※2 Excel同士の結合をQGIS上で行う意味は薄いですが。


III. データの準備

1. データのダウンロード

下記のアドレスをクリックするか、google等で「e-stat」と検索し、e-Statのウェブサイトにアクセスします。

トップページの上段に、キーワード検索の枠があります。この枠に「国勢調査」と記入し、[ 検索 ] ボタンをクリックします。検索を実行するとページが変わり、検索結果が表示されます。そうしたら、表の一番上にある「国勢調査」をクリックしましょう。

画像2

国勢調査のページに移ると大正9年データから最新である平成27年(2015年)データまでの一覧表が表示されます。今回は、平成27年を使ってみましょう。「平成27年国勢調査」の「ファイル」列のセルをクリックして次のページに進みます。

画像3

「平成27年国勢調査」の中にも様々な調査項目があります。ここでは最も基本的な調査項目である「人口等基本集計」を使います。「人口等基本集計」の下にある「全国結果[71件]」をクリックして次のページに進みましょう。

画像4

「人口等基本集計」も調査項目によって様々なファイルに分かれています。ここでも同様に最も基本的な項目である「総人口・総世帯数」の「人口、人口増減...」を使います。[ CSV ] ボタンをクリックするとCSVファイルをダウンロードできます(※3)。

画像5

※3 CSVファイルとは、Comma-Separated Variablesの頭文字から名付けられたファイルで、カンマ( , )区切りで成形されたテキストファイルです。メモ帳などのテキストエディタで開くことができます。また、メモ帳で作ったファイルを、拡張子を「.csv」とすればCSVファイルとして保存できます。MS Excelがインストールされている場合は、CSVファイルはExcelに関連付けられ、Excelで開かれます。このとき、カンマはセルで区切られて表示されます。

---   ---   ---   ---   ---   ---   ---   ---

2. データの前処理

QGISではExcelファイル(.xlsx)やCSVファイルなどをテーブルデータとして読み込むことができます。QGISで開くとレイヤに追加されます。ただし、テーブルデータは幾何情報を持っていないので、QGISに読み込んでも地図は表示されませんが・・・。

QGISでテーブルデータを扱うとき、一般に1行目をヘッダー、2行目以降をデータとして読み込みます。したがって、QGISで正しく扱えるように、フォーマットを整える必要があります。

それでは国勢調査のCSVファイルを開いてみましょう。ここではExcelで開きます。中身を見ると、1行目から9行目までファイル内容の説明になっています。1行目がヘッダーになっていないので、このままではQGISで正しく読み込むことができません。まずは、1~9行目までを削除します。

画像6

次に、このデータは全国、都道府県、市区町村などいくつかの階層のデータが混在しています。一方、結合に使用するGISデータは都道府県界なので、欲しい情報は都道府県のみになります。このままでも、次の作業に進むことはできますが、余分な情報が入った状態ではデータサイズが大きくなり、結合やその後のQGIS上での処理時間が余分に掛かるようになるので、要らない情報を削ぎ落すクレンジングを行いましょう。

4列目「地域識別コード」を見ると、「a」と記入されているものが都道府県(と全国)のレコードになっていることが分かります。そこで、フィルタ機能で「a」が入っている行のみを表示させ、それを別シートにコピーし、都道府県のみのデータにしましょう。

画像21

「a」でフィルタをかけたとき、都道府県レコードとともに「全国」レコードも残ってしまいました。「全国」の行は不要なので削除します。
列について、必要な情報は「GISデータとマッチングするためのキー列」と「統計情報」です。つまりA列~F列は不要なので削除します。

画像7

最後にヘッダーを修正します。前回のnoteの繰り返しになりますが、シェープファイルのヘッダーは10バイトしか入りません。現状のヘッダー名では長すぎて結合の際に半端な文字列で切られてしまうので、短く分かりやすい名前に変更しておきます。
特に、都道府県列はヘッダー名が入っていません。このままQGISに持っていくと、テーブルを適切に読み込んでくれない可能性が高いので、ヘッダー名を正しく指定してください。

画像8

ここまで修正出来たらファイルを保存します。保存形式はExcelでもcsvでも構いません。Excelで保存する場合は不要なシートを削除しておきましょう。

bash等で処理したい場合は、次のようなコマンドで成形できます(ヘッダー名は適当に直してください)。ただし、ダウンロードしたCSVはShist-JISなので文字コードに注意。

$ grep "a" input.csv | grep -v "全国" | cut -d "," -f7- > output.csv

# grep で「a」を含む行を抽出します。今回はヘッダーにも「a」が含まれているのでこれで済みます。
# grep -v で「全国」を含まない行を抽出します。これで都道府県のみになります。
# cut -d "," -f7- で7列目以降、つまり都道府県列から右側の列を抽出します。
# input.csv、output.csv等のファイル名やそのディレクトリ指定は、適当に修正してください。


IV. テーブル結合

ここからQGISでの操作になります。まず必要なデータをQGISに読み込みましょう。今回使うのは都道府県界データと、上で作成した国勢調査のテーブルデータです。

QGISにExcelファイルやCSVファイルを取り込む方法ですが、基本操作はシェープファイルの時とほぼ変わりません。操作例を下に画像で示しました。これらを参考に、QGISにデータを用意しましょう。

画像9

上図:Excelファイルを読み込む場合
QGIS 3.10以降では、読み込んだ情報が文字化けすることが多いので、CSV形式で読み込むことを推奨。

画像10

上図:CSVファイルを読み込む場合

QGISでファイルを読み込んだら、早速ですがテーブル結合に進みます。
テーブル結合は、結合先となるレイヤのレイヤプロパティから設定します。今回の例では、結合先である都道府県界のデータに国勢調査のテーブルを結合するので、都道府県界のレイヤプロパティを開きます。

レイヤの右クリックからレイヤプロパティを開き、左のアイコンメニューから「結合」を選択します。続いて、ウィンドウ下にある[+]ボタンをクリックします。すると「ベクタ結合の構築」というウィンドウが新しく表示されます。

「ベクタ結合の構築」では、まず「レイヤの結合」で結合するレイヤを選択します。今回は国勢調査のテーブルですね。
「結合フィールド」では、国勢調査テーブルの中で結合のキーとなるフィールド(列)を選択します。ここでは都道府県名が入ったフィールドを設定しています。
「ターゲットフィールド」は、都道府県界レイヤで結合のキーとなるフィールドを選択します。「N03_001」というフィールドに都道府県名が入っているので、プルダウンの中から選択します。
結合されたフィールドのフィールド名は、初期設定では「ファイル名+ _ +元のフィールド名」となります。非常に長いフィールド名となりますが、シェープファイルのフィールド名の文字数には制限があるので長すぎても困ります。フィールド名にファイル名は不要なので、「フィールド名の接頭辞」にチェックを入れ、接頭辞に指定されているファイル名を削除します。設定が完了したら、[ OK ] をクリックしましょう。

画像11

結合のルールが1つ追加されました。[ OK ] ボタンをクリックしてレイヤプロパティを閉じます。ちなみに、[ + ] ボタンから結合の設定を更に追加し、1つの対象レイヤに複数のテーブルを結合させることもできます。

画像12

結合結果を確認してみましょう。都道府県界レイヤを右クリックし、属性テーブルを開きます。テーブルの右側部分に国勢調査のデータが追加されています。

画像13

ここで注意すべきポイントは、テーブル結合では、2つのテーブルをリンク情報によって繋いでいるにすぎず、テーブル結合したフィールドは、まだシェープファイルに保存されていません。結果を保存するには、新たなシェープファイルとしてエクスポートします

画像14


V. コロプレスマップの作成

それでは、テーブル結合した都道府県界データを用いてコロプレスマップを作成しましょう。レイヤから「レイヤプロパティ」を開き、左のメニューから「シンボロジ」を選択します。

ウィンドウ一番上の塗り分け方法を「段階に分けられた(graduated)(※4)」に切り替え、カラムをH22年からH27年にかけての人口の変化率を示したフィールドにします。そして、ウィンドウ下部の[分類]ボタンをクリックします。

※4 QGIS v12では「連続値による定義(graduated)」

画像15

続いて、階級区分や配色の設定を行います。人口増加率は0を境に「減った/増えた」と値の意味が異なってくることから青系と赤系の2色を使うことにしました。閾値は、「自然なブレイク」をベースとして、ヒストグラムを確認しながら手動で微調整しています。

画像16

階級区分設定を適用させ、表示された地図が下図になります。2010年から2015年にかけて、人口が増加したのは47都道府県中8都府県しかありませんね。しかもそのほとんどが大都市圏で、他地域からの流入による社会増加に起因するものと思われます(※5)。
また、特に減少率の高い地域として福島県が見られますが、これは2011年に発生した東日本大震災および福島第一原発の事故に伴う県外避難の影響が現れています。

※5 社会増加とは転入率と転出率の差から人口が増えたもののことを指します。一方、出生率と死亡率の差から人口が増えた場合は自然増加と呼びます。

画像17

ここでは省略しますが、今回のコロプレスマップもレイアウト設定を整えて、出力してみましょう。


VI. コロプレスマップに適するデータ、適さないデータ

コロプレスマップは、「割合」「比率」「密度」などの指標を地図で示すときに使う地図です。一方で、地域や範囲の面積に依存して値が大きく左右される「絶対量」は、コロプレスマップによる表現には適していません。

今回使用した国勢調査データには、人口数や世帯数などの「絶対量」も含まれていましたが、人口の変化率を描画対象に選択したのもこのような理由があってのことでした。

同じような議論で、適切なデータを使っていても、正積図法でない図法でコロプレスマップを描くことも不適とされています。例えば、世界の森林率をメルカトル図法で表現すると、ロシアやカナダや拡大されて描かれるため、世界全体の森林率が高いように誤解させる可能性がある、というわけです。

先日、読売新聞のニュースサイトでは、2019年9月11日に千葉県を襲った台風15号による停電状況を示した下図のようなコロプレスマップを公開していました。これは停電した軒数という「絶対量」を表した地図ですが、上述の通り好ましくない地図表現ということになります。
面積の小さい自治体は軒総数が少なくなり、停電軒数の総数も少なくなります。その結果、停電軒数の少ない階級に区分されますが、その地域の被害が小さいかどうかとは必ずしもイコールではないため、誤解を招く恐れがあります。コロプレスマップを使うのであれば、「軒総数に占める停電軒数の割合」のような指標で階級区分するべきです(※6)。

※6 この地図に関して、個人的には、表現方法にコロプレスマップを用いた点についてはそこまで思うところはありません。しかし、最も被害軒数が多い階級に「青」を割り当てたその色使いは良くないと思います。大抵の人は、青で塗られた部分を「低い値の地域」という先入観で地図を見るはずですから。

画像18


---   ---   ---   ---   ---   ---   ---   ---

それでは、人口数のような面積に依存する絶対量にはどのような地図表現を用いるべきかというと、下図のように図形表現を使用します。この地図は、2015年の都道府県別人口数を円シンボルの大きさで表したものです。

画像19

地図的にはこの表現が正しいのですが、この図が見やすいかと問われると微妙なところですね。理由は2つ。

1. 特に関東地方において、シンボルが重なってどの円がどの県を指しているのかよく分からないです。重ならないように大きさを調整すると、今度は人口数の少ない県のシンボルがさらに小さくなります。バランス調整が大変です。

2. シンボルの大きさから統計量の差異を読み取ることが難しいという問題もあります。つまり、人口に2倍の差があるとき、円の面積を2倍にして描いても、地図を見る側が「面積2倍」を正しく認知できない可能性が高いという問題です。

下図について、左端の円の2倍の面積を持つ円はどれでしょう?

画像20

正解は右から3番目の円です。面積が2倍ということは、半径は1.414倍になっています。ちなみに右端の円は半径が2倍になっています。つまり面積は4倍ですね。どうでしょう?面積2倍、4倍が直感的に判断できますか?

コロプレスマップおよび図形シンボルは、どちらで描いても微妙な場面があります。「こうすべき」という地図の原理に縛られるよりは、凡例やラベルを付けて分かりやすくする、統計情報と合わせて掲載してソースを確認できるようにする、といった工夫で対処する道を考えるべきではないかと思います。


VII. おわりに

今回はテーブル結合のやり方をメインに、国勢調査データからコロプレスマップを作成しました。e-Statでは統計情報とともにGISデータも公開しており、テーブル結合を用いれば市町村、町丁目レベルのコロプレスマップも作れるようになります。テーブル結合は、e-Statのデータを用いて地図を作るうえでは必須のスキルといっても過言ではありません。属性テーブルを手動編集がメチャクチャ速い、ミスもしない、その手間を厭わない、という超人でなければ、テーブル結合を使いこなせるようになりましょう。


記事の内容でもそれ以外でも、地理やGISに関して疑問な点があれば、可能な限りお答えしたいと思います。