QGISに取り込んだデータをいろいろな条件でフィルター(抽出)する方法を解説します。
国勢調査のデータを「特定の町丁だけ」や「人口が一定以上の地域だけ」などの条件で抽出し地図上に表示することが可能になります。
国勢調査の人口データを取り込んだ状態を想定して解説をすすめますので、国勢調査のデータをQGISで表示できていない方は国勢調査結果をQGISで表示する手順を解説を参考に表示しておきましょう。
フィルター機能の演算子の働きを一覧で確認したい場合は、QGISフィルタ機能の演算子の違いを実行例を使って確認するで紹介しています。
QGISのフィルター機能を使う前に確認しておくこと
今回解説する内容は、QGISの「フィルター」という機能を使用します。
QGISのフィルターとは、EXCEL等の表計算ソフトにおけるフィルタ機能と同じく、特定列の特定のデータのみを抽出して表示する方法です。
例えば「都道府県名がデータとして入っている列にフィルタ操作をして、東京都のデータのみを抽出する」ような使い方ができます。
GISデータの中身を確認する
フィルター操作をする際には、抽出したいデータがどの列に入っているかを把握しておかなければいけません。
そのため、以下の手順でデータの中身を確認します。
国勢調査結果をQGISで表示する手順を画像で解説のやり方に沿って国勢調査データを取り込んだ状態では、QGISの画面はこのようになっています。
左下のレイヤパネルに表示されている国勢調査データのレイヤ名(この例では「豊島区人口」)の上で右クリックして出てきたメニューから「属性テーブルを開く」を選択します。
すると、このようなウインドウが表示されます。
表計算ソフトのような表形式で整理されたGISデータの中身が確認できました。
各行は地図上ではそれぞれ1つの地物(地図上に表示された形のこと)に対応しています。つまり、行数分だけ地物が地図上に表示されています。今回の例では行数分だけ小地域が地図上に表示されています。
そして、列の数だけ各地物に情報が関連付けられています。
もう少し詳しく内容を見てみると「S_NAME」列には「巣鴨4丁目」や「駒込1丁目」などの文字列が入っており、その地物の町丁名の情報が記録された列であることがわかります。
右の方にスクロールすると人口の情報が記録された列もあり、例えば「総数、年齢「不詳」を含む」列には、全ての年齢と性別を含んだ総人口の情報が記録されています。
QGISのフィルター機能の基本操作
実際にQGISを操作しながら、フィルタ機能の基本的な手順を確認します。
レイヤパネルの国勢調査データのレイヤ名の上で右クリックし、表示されるメニューより「フィルター」を選択します。
すると「クエリビルダ」というウインドウが表示されます。
この画面でフィルタする条件を入力します。
基本的な操作方法は左上の「フィールド」欄からフィルターする列名を選び、下の「プロバイダ特有のフィルタ式欄に条件式を入力します。
それでは少し操作してみましょう。
左上の「フィールド」パネルには、先程「属性テーブル」で確認したGISデータの列名が一覧表示されています。
表示されている文字列からフィルターする列名をダブルクリックすると「プロバイダ特有のフィルタ式」欄に列名が入力されます。
その状態でその上にある「演算子」パネルから「=」や「<」などの演算子をクリックするとその演算子が「プロバイダ特有のフィルタ式」欄に追記されます。
そこに直接数字を入力したりして条件式を完成させます。
これは簡単な条件式の例ですが、条件式の基本的な入力の流れはこのような手順です。
ここから実際にいろいろな条件式を入力しながらフィルター操作を試してみます。
特定の町丁名に該当するデータを抽出する
最初の例として、町丁名でデータを抽出する方法を解説します。
はじめに、フィルター操作をしたい列名を確認します。
レイヤパネルの国勢調査データのレイヤ名の上で右クリックし「属性テーブル」を開きます。
抽出したい情報が入っている列の名前を確認します。
属性テーブルを確認すると町丁名の情報は「S_NAME」列に記録されていることがわかります。
フィルターの条件式を決定する
列名を確認したらフィルターの条件式を決定します。
属性テーブルウインドウを閉じ、先ほど開いた「クエリビルダ」ウインドウを表示します。
ここから具体的なフィルター操作に入っていきます。
フィルター操作は「プロバイダ特有フィルタ式」欄にフィルタの条件式を入力することで行います。
今回は特定の町丁だけを抽出することを目指します。
地図上に表示されている地物から〇〇町〇〇丁目という町丁だけを抽出して地図上に表示する場合、以下のような条件式を入力します。
フィルターの関係式:”S_NAME” = ‘〇〇町〇〇丁目’
この条件式は「S_NAME」列が「〇〇町〇〇丁目」に該当する場合のみ、地図上に表示させるという意味になります。
実際にやってみましょう。
フィルターの条件式を入力する
「クエリビルダ」ウインドウ左上の「フィールド」欄に表示されている文字列の中から抽出したいデータが記録されている列名を見つけます。
今回データを抽出するの列名は「S_NAME」です。
真ん中あたりに「S_NAME」がありますので、見つけたら列名の上でダブルクリックします。
すると下の「プロバイダ特有フィルタ式」欄に選択した列名が追加されます。
その状態で「演算子」パネルにある「=」をクリックします。
すると列名の右側に「=」が追加されました。
続いて「フィールド」欄の「S_NAME」を選択した状態で右上の「値」欄の右下にある「全ての」をクリックします。※最新版のQGISでは「全ての」は「すべて」に名称が変更されています。
「S_NAME」を選択した状態とは「フィールド」欄の「S_NAME」をクリックし色が変わっている状態です。
「値」欄の右下にある「すべて」をクリックすると「値」欄に「S_NAME」列に含まれるデータが一覧表示されます。
町丁名のデータが記録されている「S_NAME」列を選択しているので、町丁名がズラッと表示されたと思います。
この中から抽出したい町丁名を選びます。
今回は「池袋3丁目」を抽出することにします。
データ一覧から「池袋3丁目」を見つけダブルクリックします。
すると「プロバイダ特有フィルタ式」欄の式に町丁名が追加されて条件式が完成しました。
条件式が入力されたら右下の「OK」をクリックします。
すると地図の画面に戻り選択した町丁のみが表示された状態になっています。
条件式を工夫して複雑な条件で抽出する
条件式を工夫するともっと複雑な抽出が行なえます。
今回は以下の4つの条件でデータの抽出を行う方法を解説します。
- 特定の町丁名に該当しない
- 総人口が4000人以上
- 若年女性(20〜34歳)の人口が500人以上
- 特定の町丁名に該当せず、かつ高齢者(65歳以上)の人口が700人以上
特定の町丁名に該当しないデータを抽出する
上の例と逆に、特定の町丁以外の町丁を抽出してみます。
レイヤパネルの国勢調査データのレイヤ名の上で右クリックし「クエリビルダ」ウインドウを表示します。
「プロバイダ特有フィルタ式」欄に先程の条件式が入った状態なので「クリア」をクリックして条件式を削除します。
これで地図上では先程のフィルタ操作をする前の状態に戻ります。
〇〇町〇〇丁目という町丁に「該当しない」町丁を抽出して表示する場合、以下のような条件式を入力します。
フィルターの条件式: NOT “町丁名が入った列名” = ‘〇〇町〇〇丁目’
条件式の頭に「NOT」をつけるとそれに続く式に該当しない地物のみを抽出します。
「=」のあとに「NOT」ではないので気を付けましょう。
それでは実際にやってみます。
はじめに「演算子」パネルにある「NOT」をクリックします。
すると「NOT」が「プロバイダ特有フィルタ」欄に入力されます。
続いて左上の「フィールド」欄から「S_NAME」の文字列を見つけダブルクリックします。
下の「プロバイダ特有フィルタ式」欄に列名が追加されますので続けて「演算子」パネルにある「=」をクリックし列名の右側に「=」を追加します。
先程と同じく、「S_NAME」を選択した状態で右上の「値」欄の右下にある「全ての」をクリックします。※最新版のQGISでは「全ての」は「すべて」に名称が変更されています。
町丁名が一覧表示されるので地図上に表示しない町丁名を選択します。
今回は「池袋3丁目」を表示しないことにします。
データ一覧から「池袋3丁目」を見つけダブルクリックします。
すると「プロバイダ特有フィルタ式」欄の町丁名が追加されて条件式が完成しました。
条件式が入力されたら右下の「OK」をクリックします。
すると地図の画面に戻り、先程と逆に選択した町丁のみが表示されていない状態になっています。
総人口が4000人以上のデータを抽出する
今度は、総人口を使って町丁を抽出してみます。
今回のように総人口〇〇人以上のデータを抽出して表示する場合、以下のような関係式を入力します。
フィルターの条件式: “人口が入った列名” >= ○○
上の例で「=」と入力していたところが、「以上」を意味する「>=」に変わります。
実際にやってみましょう。
まず「属性テーブル」ウインドウを開き総人口のデータが記録されている列名を確認します。
総人口のデータは属性テーブルの右の方にある「総数、年齢「不詳」を含む」列に記録されています。
総人口のデータが記録されている列名を確認したら属性テーブルウインドウを閉じます。
レイヤパネルの国勢調査データのレイヤ名の上で右クリックし「クエリビルダ」ウインドウを表示します。
「プロバイダ特有フィルタ式」パネルに先程の条件式が入った状態なので「クリア」をクリックし、条件式を削除します。
左上の「フィールド」欄の中から「総数、年齢「不詳」を含む」の文字列を見つけダブルクリックします。
下の「プロバイダ特有フィルタ式」欄に列名が追加されますので続けて「演算子」パネルにある「>=」をクリックします。
今度は「>=」の右側に直接人口の数字を入力します。
今回は人口4000人以上のデータを抽出するので半角で「4000」と入力します。
選択した小地域によっては、もっと人口が少ない場合もありますので数字は適宜調整してください。
これで条件式は完成です。
条件式が入力されたら右下の「OK」をクリックします。
すると地図の画面に戻り、総人口が4000人以上の町丁のみが抽出して表示されています。
若年女性(20〜34歳)の人口が500人以上のデータを抽出する
今度は、総人口ではなく特定の年齢層の合計人口を使って町丁を抽出してみます。
国勢調査のデータの場合、年齢層別人口は5歳区切りで集計されています。
若年女性(20〜34歳)の場合は20〜24歳、25〜29歳、30〜34歳の3つの年齢層に分けられており、GISデータの内部でも3つの列に分かれてデータが記録されています。
今回のように複数の年齢層の合計人口が〇〇人以上のデータを抽出して表示する場合、以下のような条件式を入力します。
フィルターの条件式:”年齢層1の人口が入った列名”+”年齢層2の人口が入った列名”+”年齢層3の人口が入った列名” >= ○○
上で示した総人口の例では総人口の列名がひとつ入力されていたところに、今回は複数の列の合計を計算する計算式が入力されています。
実際にやってみましょう。
まず「属性テーブル」ウインドウを開き若年女性(20〜34歳)の人口のデータが記録されている列名を確認します。
若年女性(20~34歳)の人口データは右の方にある「女20〜24歳」列に20〜24歳女性人口、「女25〜29歳」列に25〜29歳女性人口、「女30〜34歳」列に30〜34歳女性人口の3つの列に分かれて記録されています。
若年女性の人口データが記録されている列名を確認したら属性テーブルウインドウを閉じます。
レイヤパネルの国勢調査データのレイヤ名の上で右クリックし「クエリビルダ」ウインドウを表示します。
「プロバイダ特有フィルタ式」パネルに先程の条件式が入った状態なので「クリア」をクリックし、条件式を削除します。
左上の「フィールド」欄から「女20〜24歳」の文字列を見つけダブルクリックします。
下の「プロバイダ特有フィルタ式」欄に選択した列名が追加されますので半角で「+」と入力します。
次は「フィールド」欄から「女25〜29歳」を見つけダブルクリックします。
「プロバイダ特有フィルタ式」欄に選択した列名が追加されたら半角で「+」と入力します。
さらに「フィールド」欄から「女30〜34歳」を見つけダブルクリックします。
「プロバイダ特有フィルタ式」欄に選択した列名が追加されたら今度は「演算子」パネルにある「>=」をクリックします。
そして「>=」の右側に直接人口の数字を入力します。
今回は人口500人以上のデータを抽出するので半角で「500」と入力します。
選択した小地域によっては、もっと人口が少ない場合もありますので数字は適宜調整してください。
これで条件式は完成です。
条件式が入力されたら右下の「OK」をクリックします。
すると地図の画面に戻り、若年女性(20〜34歳)の人口が500人以上の町丁のみが抽出して表示されています。
特定の町丁名に該当せず、かつ高齢者(65歳以上)の人口が700人以上のデータを抽出する
今度は、これまでの方法の複合です。
町丁名と総人口の条件を合わせて町丁を抽出してみます。
〇〇町〇〇丁目という町丁に該当しない町丁で、さらに人口〇〇人以上のデータを抽出して表示する場合、以下のような条件式を入力します。
フィルターの条件式: NOT “町丁名が入った列名” = ‘南〇〇町〇〇丁目’ AND “人口が入った列名” >= ○○
複数の条件式が「AND」でつながれて構成されています。
ANDの左側の条件式は特定の町丁に該当しない町丁を抽出する条件式、ANDの右側は人口が〇〇人以上のデータを抽出する条件式となっています。
実際にやってみましょう。
まず「属性テーブル」ウインドウを開き抽出するデータが記録されている列名を確認します。
町丁名のデータが入った列名はすでに「S_NAME」と確認しているので高齢者(65歳以上)人口のデータが入っている列の名前を確認します。
高齢者(65歳以上)の人口は右の方にある「総数65歳以上」列に記録されています。
高齢者(65歳以上)の人口が記録されている列名を確認したら属性テーブルウインドウを閉じます。
レイヤパネルの国勢調査データのレイヤ名の上で右クリックし「クエリビルダ」ウインドウを表示します。
「プロバイダ特有フィルタ式」パネルに先程の関係式が入った状態なので「クリア」をクリックし、関係式を削除します。
はじめに「演算子」パネルにある「NOT」をクリックします。
「プロバイダ特有フィルタ」欄にNOTが入力されますので、続けて左上の「フィールド」欄から「S_NAME」の文字列を見つけダブルクリックします。
下の「プロバイダ特有フィルタ式」欄に列名が追加されますので続けて「演算子」パネルにある「=」をクリックします。
先程と同じく、「S_NAME」を選択した状態で右上の「値」欄の右下にある「全ての」をクリックします。※最新版のQGISでは「全ての」は「すべて」に名称が変更されています。
町丁名が一覧表示されるので地図上に表示しない町丁名を選択します。
今回は「池袋3丁目」を表示しないことにします。
データ一覧から「池袋3丁目」を見つけダブルクリックします。
すると「プロバイダ特有フィルタ式」欄に町丁名が追加されて関係式の前半が完成しました。
続いて高齢者(65歳以上)の人口についての関係式を入力します。
まず「演算子」パネルにある「AND」をクリックします。
左上の「フィールド」欄の中から「総数65歳以上」の文字列を見つけダブルクリックします。
下の「プロバイダ特有フィルタ式」欄に選択した列名が追加されますので続けて「演算子」パネルにある「>=」をクリックします。
そして「>=」の右側に直接人口の数字を直接入力します。
今回は高齢者人口700人以上のデータを抽出するので半角で「700」と入力します。
選択した小地域によっては、もっと人口が少ない場合もありますので数字は適宜調整してください。
これで条件式は完成です。
条件式が入力されたら右下の「OK」をクリックします。
すると地図の画面に戻り、池袋3丁目に該当せずかつ高齢者(65歳以上)の人口が700人以上の町丁のみが抽出して表示されています。
抽出した地物を保存する
フィルター操作を行うと地図上の表示が操作に応じて変化しました。
ただし、この状態は一時的にフィルタ操作を反映した表示がされているだけで、データ自体はもとのまま変更されておらず、上でやってみたように「クエリビルダ」ウインドウで「クリア」をクリックすると元に戻ります。
抽出後の地物のみをデータとして保存したい場合は、次のような操作を行います。
レイヤパネルの国勢調査データのレイヤ名の上で右クリックし「エクスポート」から「地物の保存」※を選択します。
※QGISのバージョンによっては「新規ファイルに地物を保存」という表記になっている
すると「ベクターレイヤーを名前で保存」というウインドウが表示されます。
「形式」の選択メニューが「GeoPackage」となっているのを確認して、「ファイル名」と書かれた欄の右端にある点が3つ並んだところをクリックします。
ファイルの保存場所と、ファイル名を入力するウインドウが表示されるので、あなたが解りやすい名前をつけて保存しましょう。
今後は、このファイルをQGISに取り込むと、抽出した状態で地図上に表示されます。
まとめ
今回は、QGISに取り込んだ国勢調査のデータを様々な条件で抽出する方法を解説しました。
条件式で条件を設定してデータを抽出できるようになると、国勢調査の結果を使って分析できることが増えます。
- あなたのお店の周りには、どの程度ターゲットの年齢層の人たちが生活しているんだろうか?
- 多くのターゲット層が生活している地区はどのあたりにあるんだろうか?
- 介護事業を計画している地区の周辺の高齢者率はどの程度なんだろうか?
こんなふうにあなたが知りたい情報を絞り込んで分析することができるようになります。
是非、いろんな条件式を作成して、あなたの役に立つデータを作成してみましょう。
使用したデータ
- 国勢調査「年齢(5歳階級、4区分)別、男女別人口」
- OpenStreetMap