BigQuery Geo Vizで地理空間データの可視化を行う(BigQuery GIS)

2020.12.03

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

データアナリティクス事業本部のkobayashiです。

クラスメソッド BigQuery Advent Calendar 2020 の3日目のエントリになります。

BigQueryでは位置情報を用いた地理空間データの分析と可視化がBigQuery GISで簡単に行なえます。今回はその可視化ツールとしてBigQuery Geo Vizをつかって地理空間情報を可視化してみます。

BigQueryの公式ドキュメントには一般公開データセットを使ったチュートリアル(BigQuery GIS の概要 | Google Cloud )があるのでこれを実践してみても良いのですが、地理空間データBigQueryにインポートするところから作業してみたいのと単純に自分の趣味で地震の震源データのプロットを行ってみます。

参考 - BigQuery GIS の概要 | Google Cloud

データの準備

震源データは広く一般に公開されているUSGS(アメリカ地質調査所) の震源データカタログからデータを取得して使います。

データのダウンロード

USGSの Search Earthquake Catalog へアクセスし、2020年のデータをダウンロードします。

ここでダウンロード形式なのですが、BigQuery GISでは以下の形式が扱えます。

BigQuery GIS データの操作 | Google Cloud

  • GeoJSON
  • Well-known text(WKT)
  • Well-known binary(WKB)

USGSのサイトでもGeoJSON形式でデータがダウンロードできますが、注意したいのがGeoJSON形式のままデータをインポートできるわけではなく、ジオメトリオブジェクトをサポートしているだけですのでここでGeoJSON形式でダウンロードしても加工が必要ですのでCSV形式でダウンロードします。

BigQueryのドキュメントより引用

GeoJSON 内の個々のジオメトリ オブジェクトのみサポートします。BigQuery GIS は現在、GeoJSON フィーチャー オブジェクト、フィーチャー コレクション オブジェクト、GeoJSON ファイル形式をサポートしていません。

ダウロードしたデータを確認してみます。

time,latitude,longitude,depth,mag,magType,nst,gap,dmin,rms,net,id,updated,place,type,horizontalError,depthError,magError,magNst,status,locationSource,magSource
2020-11-15T04:27:02.292Z,32.9075,-100.8785,5,3.5,mb_lg,,36,0.183,0.94,us,us7000cf5p,2020-11-15T05:45:14.442Z,"21 km N of Snyder, Texas",earthquake,1.9,2,0.041,156,reviewed,us,us
2020-11-15T00:06:02.138Z,38.1604,-117.8624,6.3,2.7,ml,29,55.81,0.007,0.1597,nn,nn00783990,2020-11-15T03:56:42.322Z,"33 km SE of Mina, Nevada",earthquake,,0.6,0.27,14,reviewed,nn,nn
2020-11-14T23:08:21.363Z,31.7131,-104.1148,1.11,2.8,ml,,48,0.232,0.7,us,us7000cf3p,2020-11-14T23:24:05.040Z,"48 km W of Mentone, Texas",earthquake,1.6,7.9,0.062,60,reviewed,us,us

今回扱うデータはPoint形式ですので{ "type": "Point", "coordinates": [{longitude},{latitude}] }に文字列を直すよりも、longitude,latitudeのカラムのまま取り込み、標準 SQL の地理関数 | BigQuery | Google Cloud で緯度・経度を地理空間情報として扱います。

他方、ジオメトリオブジェクトでLine,Polygonを扱いたい場合はジオメトリオブジェクトの形式に修正する必要があるのでまた別の機会にまとめます。

データ取り込み

USGSでダウンロードしたCSVデータからテーブルを作成します。1年分のデータですと10MBを軽く超えてしまうのでGoogle Cloud Storage経由でデータをアップロードします。

手順1)バケットを作成してファイルをアップロードする。

手順2)BigQueryのテーブル作成からアップロードしたファイルをもとにテーブルを作成する。

クエリエディタでデータをプレビューしてテーブルの中身を確認します。 以下の様な形でデータが取り込まれていることが確認できます。

BigQuery Geo Vizで可視化

クエリの作成と対象データの確認

BigQuery Geo Vizで可視化を行う前にクエリエディタにてデータの絞り込みを行いその結果を確認します。絞り込む条件としては2020年に発生した地震のうち日本周辺のものにしています。

SELECT
  st_geogpoint(longitude,
    latitude) AS point,
  time,
  depth,
  mag,
  place
FROM
  `data_set_test1.earthquake_usgs_p`
WHERE
  DATE(time) >= "2020-01-01"
  AND DATE(time) <= "2020-12-31"
  AND ST_WITHIN(ST_GeogPoint(longitude,
      latitude),
    ST_GeogFromText('POLYGON((153.0 48.0, 153.0 20.0, 119.0 20.0,119.0 48.0,153.0 48.0))') )

下記のクエリのポイントとしては以下の通りになります。

  • ST_GeogPoint(longitude,latitude) AS point
    • ST_GeogPoint関数を使い、経度・緯度カラムのデータを用いてGEOGRAPHY型のPointデータを取得
  • ST_WITHIN(ST_GeogPoint(longitude, latitude), ST_GeogFromText('POLYGON((153.0 48.0, 153.0 20.0, 119.0 20.0,119.0 48.0,153.0 48.0))') )

    • ST_GeogFromText関数でGEOGRAPHY型のPolygonデータ(おおよそ日本を覆う経度・緯度)を作成し、震源の経度・緯度がその範囲内に収まるようにST_WITHIN関数でフィルタリング

クエリの実行結果は以下の通り、2020年の日本周辺の震源データになっています。

BigQuery Geo Viz で可視化

BigQuery Geo Vizを使うためにはまずはじめにBigQuery Geo VizにBigQueryへのアクセス権を付与する必要があります。

手順1)BigQuery Geo Viz にアクセスし、Autorizeを押下する。

手順2)「BigQuery Geo Viz」に移動のモーダルが表示されるのでプロジェクトにアクセスできるユーザーでログインする。

手順3)BigQuery Geo Vizの画面に戻るとプロジェクトが選択できるようになっているので、対象のプロジェクトを選択し、クエリエディタに先ほどのクエリを貼り付け、 Runを押下する。

上図のように震源データが地図上にプロットされます。

GISなのでこれを見やすいようにStyle変更してみます。具体的にはどうするかというと

  • 資源の深さによりアイコンのカラー(fillColor)を変更する。
  • マグニチュードによりアイコンの半径(circleRadius)を変更する。

を行ってみます。

手順4)3 Style > fillColorを選択し、アイコンのカラーを下記の用に設定する。

  • Data-driven : チェック
  • Function : linearを選択
  • Field : depthを選択
  • Domain
    • min : 0を入力
    • max : 570を入力(* Fieldを選択するとmax値が表示されるのでそれを参考にする)
  • Range
    • min : #2ca25fを入力
    • max : #70260bを入力

手順5)3 Style > circleRadiusを選択し、アイコンの半径を下記の用に設定する。

  • Data-driven : チェック
  • Function : linearを選択
  • Field : magを選択
  • Domain
    • min : 1を入力
    • max : 7を入力(* Fieldを選択するとmax値が表示されるのでそれを参考にする)
  • Range
    • min : 1000を入力
    • max : 10000を入力

マグニチュードを線形補間することに違和感がありますが今回はBigQuery Geo Vizの動きを見たいので置いておきます。

Styleの設定方法はドキュメント(BigQuery GIS 可視化の形式設定 | Google Cloud )に詳しく書かれているのでそちらを参考にしてください、

手順6)Apply Styleを押下すると地図上に設定したStyleが適用されて表示される。

画像を見るとプレート境界の沈み込み帯で地震が起きていることがよくわかり、太平洋プレートの沈み込み帯の深い箇所(アイコンのカラーが濃い茶色の箇所)でも地震が起きていることがよくわかります。

なおここで作成したBigQuery Geo Vizのクエリ・Styleは4 Share > Create Share Linkを押下し、リンクを取得することで他ユーザーとシェアすることができます。ただし、そのユーザーがプロジェクトのBigQueryのデータにアクセスする権限が必要になります。

まとめ

位置情報を用いた地理空間データをBigQuery Geo Vizを用いて地理空間情報として可視化しました。ポイントデータでしたら簡単にBigQueryにインポートし、BigQueryの地理関数を使うことで表示できました。BigQuery Geo Vizは可視化ツールとしては非常におすすめです。次はPolygonデータを扱ってみたいと思います。

最後まで読んで頂いてありがとうございました。

クラスメソッド BigQuery Advent Calendar 2020 4日目は、兼本侑始 さんです。お楽しみに。