PowerBiでTopoJSON形式のファイルを読み込んで塗りつぶしマップ(マップのシェイプ)を利用する方法をご紹介します
AkimasaKajitaniです。今回はPowerBIの「マップのシェイプ」
をご紹介したいと思います。
これは、プレビュー機能となっており、「オプション」の「プレビュー機能」タブにてオンにすることができます。オンにするには、「図形マップのビジュアル」をクリックします。
「マップのシェイプ」とは?
マップのシェイプは、一見「塗り分け地図」にも似ていますが、正確に地理的な場所に空間オブジェクトをプロットして表現するというものではなく、地理的には正しくなくても、自分の表現したいところに表現したい空間オブジェクトを置いて表現することができます。
例えば、アメリカの地図であれば、ハワイやアラスカなどが離れたところにあるため、以下のように地図の場所を無駄にカナダが専有する、ということになってしまいます。なお、こちらの地図はアメリカの州ごとの人口を塗りつぶしで表現しています。
しかし、マップのシェイプを使えば、以下のようにアラスカやハワイを開いている場所に配置し、視覚的にわかりやすく無駄なく表現できるようになります。
もちろん、地図的に正しい位置に表示したい、ということになってくるとこのままでは使えない、ということなりますが、統計データなどの表示では大きな威力を発揮します。PowerBIではこのような地図を14種類持っています(ただし、日本地図はありません)。
カスタムマップ
さて、このように便利な機能ですが、カスタムマップを指定するとTopoJSON形式で作成されたファイルを地図として読み込むことが可能です。このデータ内には空間オブジェクトと、CSVなどのデータを紐付けるためのIDが必要になります。
問題はこのTopoJSONで、様々なところで配布されているデータはEsri社のShape形式であることが多いです。場合によってはGeoJSON形式、ということはありますが、TopoJSON形式は今のところWEB上のツール(mapshaper )を使うか、コマンドラインツールでShapeファイルやGeoJSONから変換するのが一般的なようです。
今回はTopoJSONの作り方には言及しません。
このTopoJSONは、空間オブジェクト(ポリゴン)の境界を共有しているオブジェクト同士は、境界のデータを共用することでデータを大幅に圧縮するような構造になっています。そのため、データ量としては軽くなるため、ここ最近で使われてだしています。BIツールなどにはデータ量が減って良いのではないでしょうか。(入手性が悪い、という問題はありますが)
「マップのシェイプ」の設定の方法
それでは、マップのシェイプを設定して行きたいと思います。
データとしては、eStat から国勢調査のデータをダウンロードして使っています。このShapeファイルについて、TopoJSON化したファイルと、CSV化したファイルを読み込みます。TopoJSON化は、私はAlteryxで実施しています(CSV化も同様です)。Alteryxを使わない場合は、mapshaperでTopoJSON化を行い、CSV化はQGISなどを使えば簡単にできます。
手順としては以下のとおりです。
- データの読み込み
- マップのシェイプを追加
- 地図データを読み込み
- 「色の彩度」に塗り分けしたいデータをセット、「場所」にデータと地図データを紐付けるフィールドをセット
それでは具体的にやってみたいと思います。まず、データを読み込みましょう。ShapeファイルをCSVにしたファイルを読み込んでいきます。
そのまま読み込んでいきましょう。
「視覚化」から「マップのシェイプ」を選択します。
この段階で一旦塗り分けで表示したいデータを選択します。今回は「JINKO」を使い、「色の彩度」に追加しましょう。
これでデフォルトの「アメリカ」の地図が表示されます。次にマップを読み込んでいきます。「視覚化」の「マップの設定」を選択します。
ここで、「マップの設定」の「マップの種類」で「カスタムマップ」を選択します。
さらに、実際のファイル(TopoJSON形式の地図データ)を選択していきます。
これにより、地図が表示されます。
ここで、地図の場所と表示したいデータを紐付ける項目を視覚化の「場所」に追加します。今回は「KEYCODE1」で紐づけが可能です。
しかし、実はこれだけだと地図が表示されません。どうやらデータが数値型であることが理由のようで、これをテキスト型に変更すれば表示することが可能です。
これでようやく表示が可能になります。ここでは、さらにフィルターに「CITY_NAME」を追加し、市区町村名でフィルタできるようにしています。ここでは、川崎市にしぼっています。
データをフィルタで絞っても、地図自体は同期してくれないため、地図も表示範囲を絞りたい場合は、地図用のファイルに対してしぼった地図を別途再作成して読み込み直す必要があります。このあたりあまり融通が効かないので気をつける必要があります。
※今回は、自動ズームと選択範囲のズームを使って選択範囲の川崎市にズームしています
注意点
なお、Helpには1500レコードまでしか表示できないような記載がありますが、3000レコードを超えてくるとうまく紐づけてくれないようでした(ポリゴンは描画されます)。実際に神奈川県の人口データを読み込んだ場合の結果は以下のとおりです。灰色の部分がうまく紐づいていません。
まとめ
- 「マップのシェイプ」でカスタム地図を使う方法をご紹介しました。
- カスタム地図は、TopoJSONで読み込む必要があります
- カスタム地図の場合、3000レコードを超えると正確に描画されないようです(Helpページでは1500レコードと記載されています)
- マップのシェイプはPowerBI Desktopのみでしか利用することができないことに注意願います
参考URL
※2024年1月25日時点の情報です