Looker Studio(旧Data Studio)を使って、GISデータを可視化してみる

Looker Studio(旧Data Studio)では、BigQueryを使ってGISデータを可視化することができます。本記事では、そのためのセットアップ方法について紹介します。

<!-- more -->

## モチベーション
業務においてGISデータを使ってWeb上に定期的にレポーティングしたいことがあります。QGISやArcGISなどのソフトを使うこともできるのですが、棒グラフや散布図などの他のデータと並べて比較したいときに難しい面があります。Looker Studioでは、グラフ、表、マップ等、多種のデータを1ページ上に並べることができ、多面的にデータを見ることができます。

マップには塗り分けマップ・ヒートマップ・ラインマップがあります。その中で国・都道府県・市区町村で統計情報を可視化できる[^1]のですが、場合によっては道路単位やメッシュ単位などの任意区域でデータを可視化したいことがあります。

## GISデータ可視化のフローチャート

以下の通りとなります。

国・都道府県・市区町村など決まったエリアで可視化したいときはAppendix.に記載の手順が利用できます。

メッシュ単位や道路単位など、任意の区域ごとに可視化したい場合はケース1.および2.の手順が利用できます。

```mermaid
graph TD
A{集計単位 = 任意の区域} --　Yes --> B{区域はポリゴンかラインか}
A -- No --> C[Appendix.塗り分けマップ+位置フィールドを使う]
B --　ポリゴン --> D[ケース1.塗り分けマップ+地域空間フィールドを使う]
B --　ライン --> E[ケース2.ラインマップ+地域空間フィールドを使う]
```

## ケース1および2の流れ
いずれのケースでも、Looker Studioの地域空間フィールドを使います。当該フィールドではWKT[^2]のPOLYGON, MULTIPOLYGON, LINESTRINGで定義した形状情報を渡します。

地域空間フィールドを使うにあたり、以下の注意点があります。

- データソースはBigQueryのみで、なおかつ対象となるカラムを GEOGRAPHY型で定義する必要があります。これ以外の方法だとLooker Studio側が地域空間フィールドを検知できません。
- POLYGONで座標群を定義するとき、座標は反時計回り(Counter-Clockwise, CCW)にする必要があります。時計回り(Clockwise, CW)で定義すると外側が塗りつぶされるため、世界全体が塗りつぶされてしまいます。

可視化の流れは以下の通りです。

1. CSVファイルもしくはGoogleスプレッドシート等にて、元データを用意します。区域ごとに、ID、WKTと値のカラムを用意します。
    - 例えば、1行が`"abc", "POLYGON((135 35, 135 35.1, 134.9 35.1, 134.9 35, 135 35))", 123`や`"3305", "LINESTRING(135 35, 135 35.1, 135.1 35.1)", 4567`の様になります。
    - 値のカラムは、必要に応じて複数カラム用意してもOKです。
    - 定期的にデータをアップデートしたい場合、Dataflow, Cloud Functionsなどから定期的にデータを差し込む形をとることもできます。
2. BigQueryにて、データソースを用意します。
    1. テーブルを作成します。
        - テーブルのスキーマについて、地域空間フィールドにしたいカラムをGEOGRAPHY側で定義します。当該カラムはWKTのLINESTRING, POLYGON, MULTIPOLYGONのいずれかである必要があります。それ以外のスキーマに制限はありません。
        - Google Drive上のcsvデータを元とする場合、ソースにて"テーブルの作成元 = ドライブ"、"ドライブのURI = CSVファイルのURL"、"ファイル形式 = CSV"とします。この場合、データはテーブルにインポートされます。
        - Google スプレッドシートを元とする場合、ソースにて"テーブルの作成元 = ドライブ"、"ドライブのURI = スプレッドシートのURL"、"ファイル形式 = Google スプレッドシート"とします。この場合、スプレッドシート → BigQuery → Looker Studioのデータフローでデータがクエリされます。
3. Looker Studioにて、以下の設定を行います。
    1. データソースを接続します。
    2. "グラフを追加"にて、ケース1なら塗り分けマップ、ケース2ならラインマップを指定します。
    3. フィールド"地域空間フィールド"にて、1.で作成したGEOGRAPHYのカラムを指定します。
    4. フィールド"位置"にて、区域のIDとなるカラムを指定します。
    5. フィールド"色の指標"にて、区域ごとに可視化したいフィールドを指定します。

### ケース1: ポリゴンを描画する場合
メッシュごとに可視化したい場合などに概要します。ポリゴンを使うので、四角形だけでなく六角形や三角など多種の形状で表現可能です。

例えば、東京近辺で、7月の最高気温[℃]を1kmメッシュ単位でマッピングしたデータを可視化すると以下の通りとなります。

※ 元データは[国土数値情報　平均値メッシュデータ　地域メッシュコード5339 令和4年](https://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-G02-v3_0.html)です。

![スクリーンショット 2023-03-02 9.55.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1967276/24755b22-b9a9-fc50-7f41-f03fbc1dbf42.png)

### ケース2: ラインを描画する場合
道路単位などで可視化したい場合に利用します。

ただし、ラインマップではスタイルの最大値の色を変更できません。スタイルから最大値の色を変えたいとき、一度塗り分けマップなどにしてから変更するとOKです。ラインマップに戻すと最大値の色を変更できています。

## Appendix: 塗り分けマップ+位置フィールドを使う場合
Looker Studioでは、大陸・国・都道府県・都道府県(地方行政区画 第1レベル)・市区町村(地方行政区画 第2レベル)・郵便番号・住所などでデータを可視化できるようになっています。このため、これらの区域でデータを可視化したい場合は以下の流れで可視化できます。

1. スプレッドシートなど、任意のデータソースを用意します。
2. Looker Studioにて、以下の設定を行います。
    1. データソースを接続します。
    2. "グラフを追加"にて、塗り分けマップを指定します。
    3. フィールド"位置"にて、住所情報(例: 〜県〜市)が入ったフィールドを指定します。タイプは地域から区域に応じて選択します。例えば市区町村単位なら"地方行政区画(第2レベル)"となります。

![スクリーンショット 2023-03-02 9.42.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1967276/37ca1cc2-5f84-bcc9-66b4-dde6b8bf9991.png)

![スクリーンショット 2023-03-02 9.41.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1967276/68c44d6a-e1c0-f57e-7286-6919260a798d.png)


[^1]: "〜県"というデータであれば、位置フィールドに"地方行政区画（第１レベル）"と指定すれば都道府県ごとに塗り分けマップができます。"〜県〜市"というデータであれば、位置に"地方行政区画（第２レベル）"と指定すれば市区町村ごとに塗り分けマップができます。
[^2]: WKT(Wikipedia): https://ja.wikipedia.org/wiki/Well-known_text