都道府県ポリゴンから離島を除外してみた(後編)

都道府県ポリゴンから離島を除外してみた(後編) | Tableau-id Press -タブロイド-
2021-04-30_03

こんにちは。藤です。

前編に引き続き、後編では具体的な作り方を見ていきましょう。

ちなみに Alteryx のワークフローは以下が最終形です。

Step 1 データを取得する

今回使用するデータは二種類あり、ともに国土数値情報から取得できます。

①行政区域データ

都道府県の境界線ポリゴンデータです。市区町村の粒度で境界線があります。2021年5月7日の時点では、2020年のデータが公開されていますのでそれを使います。

以下のサイトからダウンロード可能です。

国土数値情報 行政区域データ

②国・都道府県の機関データ

様々な公共施設のポイントデータを持っていますが、ここでは都道府県庁のデータを使い、都道府県庁がある島以外を離島として切り離します。

公開されている最新版が平成25年とちょっと古いです。しかし、都道府県庁が別の島に移転したような話は聞いたことがないので、今回の用途には問題無いと判断しています。

以下のサイトからダウンロード可能です。

国土数値情報 国・都道府県の機関

以前は国土数値情報をダウンロードする際に都度アンケートがあったのですが、いまは無くなっており、あっさりダウンロードできます。

なお、外部データになりますので、実務で使う際には必ず利用規約に目を通しましょう。

国土数値情報 利用規約

Step 2 ローデータの前処理をする

ここから具体的な Alteryx での処理に入っていきます。

まずは下ごしらえとして前処理を行います。料理と一緒で、皮むきとかあく抜きみたいな作業であり、ここで手を抜くと後で痛い目にあったりします。

『データプレップ(Data Preparation)』と呼ばれるフェーズです。分析業務の5~8割を占めると言われる領域で、結果を左右する極めて重要でありながら、とても地味でパズルゲームのようなストレスフルな領域です。

にもかかわらず、データ分析経験の無い人からはここのコスト(労力・時間)を評価されづらい、という厳しい一面を持ちます。

まず最初に①行政区域データを下ごしらえします。

結論から言うと、今回のデータ加工処理には関係ないものの、公開されている行政区域データには一部不具合があります。

具体的には東京都のデータに関して『支庁』が N03_003(郡・政令都市名)に含まれています。これは本来 N03_002(支庁・振興局名)に入るべき項目です。※国土情報提供サイト運営事務局に報告済み

こういった不具合は、最初から発見できるものではなく、後工程の処理結果で問題が発覚し、手戻りして修正することになるケースが大半です。今回のケースでは、ローデータの N03_002 (支庁・振興局名)という列は必要ないため早々に除外していたものの、各ポリゴンの中身を確認していた際に、東京都の離島の市区郡町村名が確認できなかったため、不具合が判明しました。

一連のプロセスについて、分析担当者に何の落ち度もありませんが、原因究明と修正に時間を取られることになります・・・。

追記(2021年5月8日)
社内より、国土数値情報が公開する説明によるとN03_002(支庁・振興局名)は
『当該都道府県が「北海道」の場合、該当する支庁・振興局の名称』
になっているので、東京都の『支庁』が入らないのは当然で不具合ではないのでは、というとても鋭い指摘がありました。
ここで私が『不具合』と考えたのは、東京都の『支庁』がN03_003(郡・政令都市名)に入っていることであり、N03_002を北海道に限定している仕様・定義そのものになります。
『支庁』としての位置づけは北海道と東京で近しく(厳密には異なるようです・・・参考リンク)、住所としての位置づけは『郡』とは明確に異なるため(住所に『三宅支庁』とかは入れない)、データの二次利用を鑑みればN03_002の定義から北海道縛りを無くした上で東京都の支庁も含めたほうが一般的に使いやすいはずで『具合が良い』のではと思っています。

先述した通り、今回の目的に限って言えば影響は無いので、下の赤枠のプロセスは無くても問題ありませんが、もしもこれを市区郡町村ポリゴンを作りたい、みたいなニーズがあるならば赤枠が必要になります。

具体的な処理としては、東京都の不具合を修正(誤ったカラムに入っているものを移動)し

『市区郡町村名』になるような新しいカラムを作ります。

IF文の分岐は、郡がつく場合は『郡町村名』として、二つのカラムの結合が必要であること、政令指定都市かどうかで『市』の入るカラムが異なるため、数式を調整しています。

これで市区郡町村名が出てきます。

※今回の目的には不要なのになぜ含まれているのかというと、過去に市区郡町村ポリゴンを作成した時に使ったフローを流用し、結果として不要な処理を除去し忘れた、というのが正直なところです。ただ、情報としては有益かもと思い、そのままにして説明を加えることにしました。

少し脇道に逸れましたが、必要な処理に戻ります。

出力データをキレイに並べたいので、二けたの都道府県コードを作ります。

続いて、以下のように不要なカラムを除外し、残すカラム名をわかりやすく変更します。変更しなくても進められますが、ローデータのカラム名のままではどこに何が入っているのかわかりづらく、度々仕様書を確認することになるので名称を変えておく方が後々ラクです。

今回は、都道府県単位のポリゴンを作るため、いったん【集計】ツールでグルーピングしてしまいます。

Alteryx なら【集計】ツールで簡単にポリゴンを結合できます。

【集計】ツール前のデータです。12万レコード弱に分割されれています。

【集計】ツール後のデータです。47レコードに集約されました。本島と離島で見かけ上離れていても、ポリゴンデータとしてはグルーピングされ、都道府県につき1レコードになっています。

どこまでを『前処理』と定義するかは難しいところですが、行政区域データに関してはいったんここまでにしましょう。

続いて都道府県庁データです。

こちらはあまりやることはありません。仕様書に従い、【フィルター】ツールで都道府県庁データを抽出し、【セレクト】ツールで必要なデータに絞ります。都道府県庁データはこの後一か所でしか使わないのでカラム名のリネームも省略します。

とりあえず、このくらいで下ごしらえは終了です。

Step 3 都道府県ポリゴンを作る

実際に BI ツール で使用するポリゴンを作ります。(最後の出力形式を変更すれば、Tableau 以外でも使えます。)

本題に入る前に、準備運動として、まずは離島を含んだままのポリゴンを作ってみましょう。

ここで重要なプロセスはポリゴンの『間引き』です。

元データの境界線はいびつな形状であるため、ファイルサイズが200MB以上あります。下ごしらえで47レコードに集約しても150MB近くあり、これを BI ツール等で可視化しようとすると描画パフォーマンスに確実に悪影響があります。

BI ツールで可視化したいのは、精度の高い境界線ではなく、マップ上に可視化することで地域特性や位置関係に関連した新たな知見を得るため、ということがほとんどだと思います。その場合、境界線が実際に比べて粗くても目的に悪影響を与えることはありません。

そのため、一般的にポリゴンの間引きを行います。

ポリゴンの中身は点と点を直線で結んでいますので、点を間引くことでそこに含有されるデータ数を減らし、サイズを大幅に削減することができます。

Alteryx では【一般化】ツールでポリゴンの間引きが可能です。

『しきい値』と『単位』で間引きの粒度を設定します。

ここでは0.25kmにしていますが、可視化目的に応じて粒度を変更するのが良いと思います。

今回0.25kmにした理由は、Tableauに組み込まれているポリゴンの粒度がそのくらいだったためです。(目視確認なので厳密ではありません。)

【一般化】ツール前(つまり間引き前)

なかなかの精度で沿岸部も描かれています。

一方、【一般化】ツール後(つまり間引き後)

こんな感じになりました。

データ量は148MB⇒0.6MBと劇的に変わります。

ちなみに Tableau のデフォルトポリゴンはこんな感じです。

江の島が・・・

ここだけみると、Tableau のポリゴンの方がもう少し粗いかもしれませんが、大勢に影響はないのでこのまま進めます。

なお、今回の間引き(0.25km)によって、少なくとも沖ノ鳥島は丸ごと間引かれてしまいました・・・。

厳密に調査していませんが、多分0.25kmでは大きすぎたんでしょう。

技術的には、間引きしても島の消滅を防ぐこと(消滅する場合のみ、元のポリゴンを使うなど)も可能ですが、今回は対応せずに進めます。

あとはカラム名を調整して、Tableau 用であれば HYPER 形式で出力して終了です。

ここまでは準備運動です。(回り道しまくってます。)

次のステップで、離島を除外してみましょう。

Step 4 離島を除外した都道府県ポリゴンを作る

ようやく本題です。

まず、Step 2 で作成した都道府県ポリゴンを島単位で分割します。

【ポリゴン分割】ツールで一発です。

これにより、隣接してない領域が全て分割されました。

※この時点で下ごしらえのポリゴン結合前と同じくらいのレコード数に戻っているので、そもそもポリゴン結合前のままでも良かった説があります。(というかきっとそうでしょう・・・。)ただ、ここまでブログを書いてから気づいた話なのでこのまま進めます。ちゃんとリファクタリングしていればこのようなことは起こりませんね。反省・・・。 

参考)リファクタリングのススメ

次に、このポリゴンと Step 2 で作成した都道府県庁ポイントをマッチングさせます。

【空間マッチ】ツールで行います。

各都道府県庁ポイントは、ポリゴンの1レコードに紐づくため、47レコードに絞り込まれます。

その後のプロセスは Step 3 と同じです。ソート、間引き、カラム名調整、出力です。

上のマップの通り、東京都の離島、佐渡島、淡路島、奄美大島などが除外され、赤い色が落ちています。

Step 5 東京都のみ離島を除外する

おまけのようなものですが、 Step 3 の東京以外と Step 4 の東京をくっつければ完成です。

おわりに

今回作成したデータソースは github で公開しています。記載されている利用規約に沿っていただければご自由に二次利用可能です。

淡路島は入れたい、間引きの粒度をもっと粗くしたい、市区郡町村レベルで同じものがを作りたい、などのカスタマイズも Alteryx があれば簡単です。

トレーニングを含め、Alteryx の導入支援も幅広く行っていますので、ご興味のある方は是非こちらからお問い合わせください。

それではまた。