ここからは特別演習です。研修で時間が余ったときに取り組む、サブ演習としてご用意しました。本編の流れからは独立しているので、いつ読んでいただいても大丈夫です。
第23回で、Power BIの「塗り分け地図」というビジュアルを学びました。都道府県ごとに色を付けて数値の大きさを表現できる、便利なビジュアルでしたね。ところが、この塗り分け地図には一つ弱点があります。
初期状態で用意されている地図の形(シェイプ)は、アメリカ合衆国の州しか入っていないのです。日本の市区町村を塗り分けたければ、地図の形を自分で用意して、Power BIに読み込ませる必要があります。
この演習では、東京都の市区町村を人口で塗り分ける地図を作ります。流れは次の3ステップです。
1. 国土交通省の「国土数値情報」から、東京都の行政区域データをダウンロードする
2. Webアプリ「mapshaper」で、島しょ部を除き、線を簡略化して、TopoJSON形式に変換する
3. Power BIの塗り分け地図に、そのTopoJSONをカスタムマップとして登録する
人口データは、こちらをお使いください。東京都の市区町村53行(23区・26市・西多摩郡4町村)に、地域・人口・世帯数を付けたCSVで、レッスン一覧ページからダウンロードできる練習データのzipの「08_special」フォルダーに入っています。
📥 練習データ(全レッスン共通)をダウンロード(zip・約1.8MB)
まず、地図の元になるデータを手に入れます。国土交通省が「国土数値情報ダウンロードサイト」で、地形・土地利用・行政区域などのGISデータを無償で提供しています。ブラウザで「国土数値情報」と検索すると、すぐに見つかります。
上部メニューの「国土数値情報」から、「データダウンロード」を選びます。
たくさんのデータが並んでいますが、今回使うのは「行政区域データ」です。都道府県や市区町村の境界線が入ったデータで、このサイトのダウンロード数ランキングでも1位の定番データです。
行政区域データのページを下にスクロールすると、都道府県の一覧が出てきます。「東京都」にチェックを入れて、「年度で絞り込み」で最新の年度を選びます。
すると、東京都のファイルが1行だけ表示されます。ファイル名は「N03-」で始まるzipファイルで、容量は10MB少々です。ダウンロードボタンを押して、パソコンに保存してください。利用規約の確認画面が出た場合は、内容を読んで同意します。
zipの中には、GeoJSON形式とシェープファイル形式の両方が入っています。GeoJSONは、地図の形をテキストで表現したファイル形式で、多くのツールで読み書きできます。ただし、このままPower BIに読み込ませることはできません。Power BIの塗り分け地図が受け付けるのは、「TopoJSON」という別の形式だからです。
GeoJSONをTopoJSONに変換するには、「mapshaper(マップシェイパー)」というWebアプリを使います。ブラウザで mapshaper.org を開いてください。インストールは不要で、無料で使えます。
開くと「Import files」という画面が出るので、先ほどダウンロードしたzipファイルを、そのままドラッグ&ドロップします。解凍しなくても、zipのまま読み込んでくれます。
読み込みが終わると、画面に地図が表示されます。ところが、何やら小さな点が縦に並んでいて、東京都の本土はいちばん上に小さく見えるだけです。これは、東京都には伊豆諸島・小笠原諸島という島しょ部が含まれていて、南に大きく広がっているためです。
このままでは、市区町村の塗り分けが見えません。そこで、島しょ部を取り除いて、本土(23区・26市・西多摩郡)だけを残します。画面左の「Console」ボタンを押すと、コマンドを入力する黒い画面が開きます。ここに、次の1行を入力して Enter を押してください。
filter '+N03_007 >= 13101 && +N03_007 < 13361'
N03_007 は、行政区域データに入っている「全国地方公共団体コード」の列です。東京都は 13 で始まり、13101(千代田区)から順に番号が付いています。島しょ部は 13361(大島町)以降なので、「13101以上、13361未満」でフィルターすると本土だけが残る、という仕組みです。
「Retained 151 of 6,904 features」と表示されれば成功です。6,904個あった図形が151個に減りました。53市区町村なのに151個あるのは、飛び地や埋立地など、1つの市区町村が複数の図形に分かれているためです。Consoleを閉じると、見慣れた東京都の形になっています。
次に、線を簡略化します。行政区域データの境界線は非常に細かく、このままTopoJSONにするとファイルが大きくなり、Power BIでの描画も重くなります。画面右上の「Simplify」を押してください。
「Method」に3つの方式が並んでいます。今回は初期選択の「Douglas-Peucker(ダグラス・ポイカー)」のまま「Apply」を押しますが、3つの違いを簡単に押さえておきましょう。
Douglas-Peucker(初期選択):線の両端を結んだ直線から最も遠い点を残す、を繰り返す方式です。処理が速く、角(かど)は保たれやすい反面、簡略化を強めるとギザギザやスパイク状のトゲが出やすくなります。
Visvalingam / effective area:面積の小さい三角形を作る点から順に消す方式です。境界がなめらかに丸まり、地図の見た目が自然になります。行政界の塗り分けマップでは、一般にこちらが好まれます。
Visvalingam / weighted area:上の面積に「重み」を加え、細長く突き出た形(半島や岬など)を消えにくくした改良版です。海岸線の特徴を残したいときに向きます。
「Apply」を押すと、画面上部にスライダーが現れます。これが簡略化の強さで、右に動かすほど点が減ります。今回は「0.30%」まで下げました。元の点の0.3%だけ残す、という意味です。ここまで減らしても、市区町村の形はきちんと分かりますね。
スライダーを動かした後でも、もう一度「Simplify」を押せば、方式を切り替えて結果を見比べることができます。時間があれば、Visvalingam に切り替えて、境界線の丸まり方の違いを確かめてみてください。
最後に書き出しです。画面右上の「Export」を押し、「File format」で「TopoJSON」を選んで「Export」ボタンを押します。ファイル名は、後で分かりやすいように tokyo_shape.json などに変えておくとよいでしょう。
ちなみに、この演習で使った「Console に入力するコマンド」は、mapshaper の本来の使い方です。もともとはコマンドラインのツールで、Webアプリ版はその画面付きバージョンなのです。Console に tips と入力すると、使えるコマンドのヒントが表示されます。
ここからはPower BIの作業です。まず、人口データのCSVを読み込みます。「データを取得」から「テキスト/CSV」を選び、練習データのzip内「08_special」フォルダーの powerbi-tokyo-population.csv を開いてください。テーブルビューで、53行が読み込まれていることを確認します。
レポートビューに戻り、視覚化ウィンドウで「塗り分け地図」のビジュアルを選びます。データウィンドウから「市区町村」を「場所」に、「人口」を「色の彩度」に入れてください。
すると、アメリカ合衆国の地図が表示されます。これが冒頭でお話しした弱点です。場所に日本の市区町村名を入れても、地図の形がアメリカしかないので、何も塗られません。
ここで、先ほど書き出したTopoJSONの出番です。ビジュアルの書式設定を開き、「ビジュアル」タブの「マップの設定」を展開します。
1. 「型」を「ファイルのアップロード」にします。
2. 「マップの種類」が「カスタム マップ」に変わります。
3. 「マップの種類を追加する」の右にあるボタンから、TopoJSONファイルを選びます。
読み込みが終わると、地図が東京都の形に変わり、市区町村名が一致した場所に色が付きます。
もし色が付かない市区町村があれば、「マップの種類のキーの表示」を押してみてください。TopoJSONに入っている地名の一覧が表示されるので、CSVの市区町村名と表記が一致しているかを確認できます。地図側の地名と、データ側の地名がぴったり一致することが、塗り分け地図の条件です。
仕上げに配色を整えます。書式設定の「色」を開き、「色の彩度」で「最小」と「最大」の色を選びます。今回は、薄い青から濃い青へのグラデーションにしました。人口の多い区ほど濃く塗られ、世田谷区や練馬区、大田区の人口の多さが一目で分かります。
これで完成です。地図の形を自分で用意できるようになると、都道府県だけでなく、市区町村、さらには自社の営業エリアといった独自の区分でも、塗り分け地図が作れるようになります。
国土数値情報のほかに、市区町村ごとのGeoJSONを配布しているGitHubリポジトリもあります。「JapanCityGeoJson」で検索すると見つかります。
https://github.com/niiyz/JapanCityGeoJson
こちらは、都道府県フォルダーの中に、市区町村1つにつき1ファイルという構成になっています。そのため、東京都のように複数の市区町村で塗り分けるには、必要なJSONファイルを結合しなければいけません。mapshaperなら、複数のファイルをまとめてドロップしてから、Consoleで merge-layers と入力すると1つのレイヤーに結合できます。
ファイルが分かれている分、必要な市区町村だけを選んで地図にできるのが利点です。国土数値情報のように filter で絞り込む手間が要らないので、目的に応じて使い分けてみてください。
書き出したTopoJSONは、テキストエディターで開くと数字の羅列で、人の目で読むのはほぼ無理です。「地名のキーがどの列に入っているか」「市区町村名の表記がCSVと合っているか」「余計な島しょ部が残っていないか」といった確認は、以前ならコマンドラインのツールが必要でした。
今は、生成AIを使うと楽に対応できます。ChatGPTやClaude、Copilotなどにファイルをそのまま渡して、「このTopoJSONに入っている地名の一覧を出して」「市区町村名の表記ゆれがないか調べて」と頼めば、中身を読み解いて答えてくれます。
複数のGeoJSONを結合したい、特定の市区町村だけ抜き出したい、といった加工も、やり方を聞けば手順を教えてくれます。
地図データの扱いは、ハードルが高い分野でした。生成AIという相談相手を得て、その敷居はぐっと下がっています。ぜひ、いろいろな地図に挑戦してみてください。