Overture Maps Foundationのデータを活用したい (1): Placesデータのダウンロード
はじめに
Overture Maps Foundationというものがあります。
背景はこのあたりも見ていただけると分かります。
Overture Maps Foundationは、世界中の地図サービスを強化できるような、共有アセットとしてのオープンな地図データの開発を目的とした取り組み。OpenStreetMapなど既存の地図データと、参加メンバーによる新たな地図データ、加えてAIやマシンラーニング技術を活用し、「現実世界の生きたデジタル記録」としての地図構築を進めていくという。
地図情報は有料/無料のデータソースやAPIが入り乱れているのが現状で、なかなか開発が大変という話があります。そのため、こういった動きは注視しています。
News: データ公開 (2023/7/26)
先日7/26に最初のデータがリリースされました。
ここではPlacesデータをダウンロードして、確認してみた内容のログを残そうと思います。
Places データのダウンロード
データですが、こちらからダウンロードできます。
Release Notesなどはこちらにあります。
ライセンスはこのように設定されています。
- Places Theme: CDLA Permissive v 2.0
- Buildings Theme: ODbL
- Transportation Theme: ODbL
- Administrative Boundaries Theme: CDLA Permissive v 2.0
ダウンロードですが、githubレポジトリにも書いてあるとおりS3経由・Azure経由で、Parquetファイルがダウンロードできるようです。
レポジトリには、Amazon Athenaを使う方法、Microsoft Synapseを使う方法、DuckDBを使う方法、ファイルを直接ダウンロードする方法、の4パターンのドキュメントが用意されているようです (日本語が不正確かもしれませんが…)。
例えば、Placesデータですが、7/26のデータについてはこのように記載されています。
- Amazon S3: s3://overturemaps-us-west-2/release/2023-07-26-alpha.0/theme=places
- Microsoft Azure: https://overturemapswestus2.blob.core.windows.net/release/2023-07-26-alpha.0/theme=places
実際にParquetファイルをダウンロードしてみます。といっても、以下のコマンドを実行するだけです。aws-cliは適当にインストールします (M1 Mac環境で試したので、brewでインストールしました)。Overtureはデータを保存したディレクトリです。
aws s3 cp --no-sign-request --recursive s3://overturemaps-us-west-2/release/2023-07-26-alpha.0/theme=places Overture
結果として次のようにダウンロードされました(端末を適当にキャプチャしました)。個別のファイルは280MBぐらいになっているようです。
データを確認してみる
pandas
Parquet形式を読みたいので、Pythonから読んでみます。Parquet形式自体はPandasが読めるようですが、OvertureのデータはPandasへの変換で対応していないデータ型があるようで、現状読むことができません。
# 簡単に読むコード
import pandas as pd
pd.read_parquet("./20230725_210643_00079_ayc64_01c760ca-02aa-4387-8b71-b2eaa6c7c700")
次のようなエラーになります。
ArrowNotImplementedError: Not implemented type for Arrow list to pandas: map<string, string ('array_element')>
pyarrow
Pandasがデータを読めずに困ったので、まったく使ったことがないですが pyarrow でデータを読んでみました。こちらは読み込みまでは確認しました。1,942,141 行のデータが格納されているみたいですね。
import pyarrow.parquet
data = pyarrow.parquet.read_table("20230725_210643_00079_ayc64_01c760ca-02aa-4387-8b71-b2eaa6c7c700")
# => 1,942,141
print(data.num_rows)
ダウンロードしたファイルは30個あったので、概算すると30×200万=6000万の情報がダウンロードできているのでしょうか (全部確認していませんが…)。
どのようにデータが格納されているか、は scheme の方に書かれていると思います。実際にPOIのデーアを確認するために、Places の scheme をチラ見してから、データを見てみます。
例えば0行目のaddressを見てみると、次のようなデータでした。
print(data["addresses"][0])
# => <pyarrow.ListScalar: [[('postcode', 'LL57 2NX'), ('freeform', 'Ffordd Bronwydd'), ('country', 'GB')]]>
GBのPOIなんですね。
まとめ
データをダウンロードするまではできたのですが、まだうまく活用できていない状態でした。引き続き触ってみようと思っています。
続き
続きの記事をこちらに公開しました。
Discussion