by 『前処理大全(第12章)』
12-1 日本測地系から世界測地系の変換、
度分秒から度への変換
- 緯度/経度の表現方法
- 世界測地系:今の世界標準。いくつか種類があるが、WGS84系が主流。
- 日本測地系:明示から利用。現在は世界測地系が主流だが、いまだに日本測地系のデータも存在する。
- 緯度/経度の表現方法
- 度だけで表す
- 度分秒で表す
度分秒は、度の小数点以下の値を10進数で表すのでなく、60進数で表す表現方法。具体的には、度の下の単位として分があり、60分で1度となる。さらに、分の下の単位として秒があり、60秒で1分となる。たとえば、「35度30分15秒」の15秒は、0.25(15/60)分なので、「35度30.25分」となり、さらに30.25分は約0.504(30.25/60)度。つまり、「35度30分15秒」は「35.504度」と同じ意味となる。
データ分析で緯度/経度を扱う場合は、度分秒で表す方法は数値が表す意味がおのおの異なり比較や計算が難しいため、すべて度だけで表す方法に揃える方が望ましい。
例)日本測地系から世界測地系への変換
対象データ:ホテルの予約レコード
顧客テーブルの家の緯度、経度を度単位に変更し、日本測地系から世界測地系に変換する。
(※正確な変換には、国勢地理院配布のパラメータファイルを適用し、バイリニア補完する必要がある。)
補:利用ライブラリ
- pyproj:地理的な位置を示す情報を扱うときに、座標系・測地系変換を行ったり、2点間の距離・方位角を計算したりできる。
- 以下の顧客テーブル(customer_tb)の、home_latitude, home_longitudeを度単位に変更し、日本測地系から世界測地系に変換
- Python
- 分・秒を度に変換する関数を作成し、分・秒を度に変換するコード
- 日本測地系を世界測地系に変換するコード
pyprjライブラリのtransform関数は、経度緯度の測地系を変換する関数。1つめの引数は変換前の測地系オブジェクト、2つめの引数は変換後の測地系オブジェクト、3つめの引数が経度、4つめの引数で経度を指定する。戻り値は経度と緯度のタプル。
12-2 2点間の距離、方角の計算
お店と顧客の住所から2点間の距離を求めたり、移動前と移動後の車の位置がわかれば、移動方角が計算できる。
注意点:地球が球面のため、計算式によっては誤差が発生する。
- 距離の計算式:
- Hubeny:計算が簡単。誤差は0.1%程度、距離が長くなるほど誤差は増える。
- Vincenty、Haversine:計算は複雑。ただし、測定距離に大きく依存せずに小さな誤差に収めることができる。
2,000km以内の計算ならば、Hubenyで問題ない。
また、方角は方位角を計算した後、北を -45 ~ 45度、東を 45 ~ 135度、南を -180 ~ -135と、-45度 ~ -135度を西とすることで、取得できる。より細かい方角が欲しい場合は、方位角から方角に変換する際の範囲を細かくすれば実現できる。
例)距離の計算
ホテルの予約レコードが対象。予約テーブル(reserve_tb)に顧客テーブル(customer_tb)とホテルテーブル(hotel_tb)を結合し、家からホテルまでの距離(Haversine式と、Vincentry式と、Hubeny式の3種類で)と、方角(方位角)を計算する。
- 予約テーブル(reserve_tb)
- 顧客テーブル(customer_tb)
- ホテルテーブル(hotel_tb)
- 分・秒を度に変換し、日本測地系から世界測地系に変換するコード
- 距離、方角の計算コード
- 結果
0コメント