
国土数値情報の緯度・経度情報をQuickSightで取り扱えるフォーマットに変換してみた
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
データアナリティクス事業本部の藤川です。
QuickSightで地理空間情報を簡単に取り扱えますが、地理空間情報には様々なフォーマットがあり、実はとても厄介です。
地理空間情報をQuickSightで取り扱えるフォーマットに変換する方法をご紹介したいと思います。
QuickSightが扱える緯度と経度の座標の有効範囲
QuickSightは特定の範囲内の緯度と経度をサポートしています。単位は「度」です。
※参考:緯度と経度に関する問題
| 座標 | 有効範囲 |
|---|---|
| 緯度 | -90 ~ 90 |
| 経度 | -180 ~ 180 |
平面角を表すものですが、緯度、経度は「秒」で表現される場合もあります。
こちらの記事でご紹介した国土数値情報は、緯度、経度を「秒」で表しています。
国土数値情報の緯度、経度は「秒」、QuickSightの緯度、経度は「度」ですので、「秒」から「度」に変換が必要です。
1度 = 60分 = 3600秒ですので、次式のような変換が必要です。
1秒 = 1/3600度
やってみた
国土数値情報のデータをQuickSightで使用できるようにしてみたいと思います。
ここでは、計算フィールドを使って、QuickSight内で変換してみます。
サンプルデータを用意
- サンプルデータを用意します。こちらの記事でご紹介したデータを流用します。
- QuickSightを開きます。
データセットを開きます。
- 「地価公示データ」というデータセットをクリックします。
データセットの編集ボタンをクリックします。
- 「地価公示データ」(カスタムSQL)の右側にある矢印をクリックし、
SQLクエリを編集をクリックします。
- カスタムSQLを次のように変更します。緯度、経度の2行を追加しただけです。
select "都道府県名", "駅距離", "緯度", "経度", "h27価格" as "2015年", "h28価格" as "2016年", "h29価格" as "2017年", "h30価格" as "2018年", "h31価格" as "2019年", "r2価格" as "2020年" from "hello_athena".landprice a left join "hello_athena".prefcode b on substr(a."所在地コード", 1, 2) = b."都道府県コード" where "用途" = '000' 適用ボタンをクリックします。閉じるボタンをクリックします。
計算フィールドを追加
この時点では、緯度、経度は「10進数」というデータ型です。まだ、ロケーション(地理空間コード)として認識されていません。
latitude、longitudeという名称の計算フィールドを追加して、変換できるようにします。
計算フィールドを追加ボタンをクリックします。
名前を追加にlatitudeと入力し、その下のフィールドに次の通り入力します。{緯度}/3600保存ボタンをクリックします。
- 再度、
計算フィールドを追加ボタンをクリックします。 -
名前を追加にlongitudeと入力し、その下のフィールドに次の通り入力します。{経度}/3600 保存ボタンをクリックします。- 画面左側のフィールド一覧で、
latitudeの3点リーダーをクリックし、座標に追加をクリックします。
新しい地理空間の座標を作成を選択し、追加ボタンをクリックします。
座標に名前を付けるにGeocode(任意の名前で構いません)と入力し、緯度で使用するフィールドにはlatitudeを、経度で使用するフィールドにはlongitudeを選択します。座標の作成ボタンをクリックします。
- 画面右側の
保存ボタンをクリックします。
※筆者の環境では、SPICEを選択するとエラーが出てしまいましたので、直接クエリに変更しました。
分析に地理空間情報を表示
- QuickSightを開きます。
- 「分析」を開きます。
- こちらの記事でご紹介した「地価公示データ analysis」を流用します。
ビジュアルタイプで地図上のポイント(Geospatial Charts (Maps))をクリックします。
フィールドウェルに次のようにセットします。
- データは
Geospatialが5,000件、Colorが31件までに制限されるため、都道府県でフィルタを掛ける等絞り込むようにしてください。
他の地理空間情報フォーマットに対応
公式サイトには、緯度、経度をDMS(時分秒)形式からQuickSightが取り扱える「度」に変換する方法が掲載されています。
※参考:緯度と経度に関する問題
度、分、秒 (DMS) 形式の座標を使用する(度分秒→度)
「文字列」型の緯度、経度というカラムにDMS形式の緯度、経度が入力されている場合、そのままお使いいただけます。
- 計算フィールド
latitudeを追加します。ifelse( split({緯度}, "''", 2) = "N", parseInt(split(split({緯度}, "°", 1), "'", 1) ) + (parseDecimal(split(split({緯度}, "°", 2), "'", 1) ) /60) + (parseDecimal(split(split({緯度}, "°", 2), "'", 2) ) /3600), (parseInt(split(split({緯度}, "°", 1), "'", 1) ) + (parseDecimal(split(split({緯度}, "°", 2), "'", 1) ) /60) + (parseDecimal(split(split({緯度}, "°", 2), "'", 2) ) /3600)) * -1 ) - 計算フィールド
longitudeを追加します。ifelse( split({経度}, "''", 2) = "E", parseInt(split(split({経度}, "°", 1), "'", 1) ) + (parseDecimal(split(split({経度}, "°", 2), "'", 1) ) /60) + (parseDecimal(split(split({経度}, "°", 2), "'", 2) ) /3600), (parseInt(split(split({経度}, "°", 1), "'", 1) ) + (parseDecimal(split(split({経度}, "°", 2), "'", 1) ) /60) + (parseDecimal(split(split({経度}, "°", 2), "'", 2) ) /3600)) * -1 ) - 次のようなサンプルデータがあるとします。
緯度 経度 場所 51°30'26.4636''N 0°7'39.9288''W サンプル 34°38'35.3''N 134°59'50''E 明石市 - この場合、次のように変換されます。
緯度 経度 場所 latitude longitude 51°30'26.4636''N 0°7'39.9288''W サンプル 51.5074 -0.1278 34°38'35.3''N 134°59'50''E 明石市 34.6431 134.9972
さいごに
QuickSight以外でも緯度、経度情報を使用する場合は、前処理する段階でフォーマットを変換しておくのが便利でしょう。 今回は、QuickSightの計算フィールドを使用し、QuickSight側でデータ加工してみました。アドホックな分析で、国土数値情報を使用したい場合には重宝すると思います。 ご利用シーンに合わせて是非使い分けてみてください。







