kt.log

Import data from Azure Open Datasets in Python

オープンデータを使って検証をしたり、プロダクト開発をしたりする際に利用できるデータソースとして、 Azure Open Datasets という選択肢があります。Azure サービスから利用することができ、基本的に無料で利用可能です。技術的なドキュメントは こちら で公開されています。
本記事では、 Azure Open Datasets のうちの1つのデータセットを対象に、Python でデータをインポートする方法を解説します。

前提

  • Microsoft Azure に利用可能なサブスクリプションを持っている

免責

  • 筆者の環境は英語です。画面が日本語表示になっていない点、ご了承ください。

手順

本記事では NOAA Global Forecast System (全米海洋大気局 (NOAA) グローバル予測システム (GFS)) のデータセットを利用します。Python SDK のドキュメントは こちら です。

本データセットが利用できる Azure のサービスは、以下の通りです。

つまり Jupyter Notebook が利用可能なサービスから Azure Open Datasets を利用できるということで、いずれかの環境を用意した上で、以下の手順を実行します。

事前準備

Azure ML の SDK をインストールします。シェルから pip でインストールする方法は以下の通りになります。

1
pip install azureml-opendatasets

それ以外の方法として、例えば Azure Databricks ではクラスターのライブラリを GUI でインストールしますが、その際には PyPI から azureml-opendatasets をインストールするように設定します。

コードを書く

1
2
3
4
5
6
7
from azureml.opendatasets import NoaaGfsWeather
from dateutil import parser

start_date = parser.parse("2018-12-20")
end_date = parser.parse("2018-12-20")
gfs = NoaaGfsWeather(start_date, end_date)
gfs_df = gfs.to_spark_dataframe()

コンストラクタ NoaaGfsWeather() が生成するインスタンス(変数 gfs の中身)は Apache Parquet 形式です。これに対して to_spark_dataframe() 関数をコールすることで、 Spark の DataFrame 形式に変換しています(変数 gfs_df の中身)。

NoaaGfsWeather のデータセット全体は非常に巨大です。上記のコードでは1日分のデータのみを取得していますが、それでも概算で約1GB程度のデータ量となることに注意してください。

DataFrame のスキーマは以下の通りになっています。

1
2
3
4
5
6
7
8
9
10
11
12
13
currentDatetime:timestamp
forecastHour:integer
latitude:double
longitude:double
precipitableWaterEntireAtmosphere:double
seaLvlPressure:double
snowDepthSurface:double
temperature:double
windSpeedGustSurface:double
totalCloudCoverConvectiveCloud:double
year:integer
month:integer
day:integer

データを表示する

Notebook からの実行であれば、テーブルでデータを表示することができます。

1
display(gfs_df.limit(5))

まとめ

Python を使って Azure Open Datasets からデータをインポートする方法について解説しました。SDK として利用できるため、ファイルや Web API 等の形式に比べて非常に扱いやすいと思います。
Azure Open Datasets では他にも様々なデータが提供されています。ぜひ活用をして、検証やAI開発などに役立てていきましょう。