今回は、全球規模の気象・環境データなど、非常に大きなラスタデータ(格子状の地理空間データ)をZarrという形式を用いて解析するという、少し専門的ながらも近年ますます一般的になりつつあるユースケースを紹介します。
どうすればブラウザ上でテラバイト規模のデータを可視化できるのでしょうか?その答えは、構造化されたZarrファイル形式と高性能なデータ可視化ツールの組み合わせにあります。
Zarrとは?
Zarrは、n次元配列を格納するためのクラウドネイティブなデータフォーマットです。
・チャンク化:データを小さな単位に分割して保存する
・圧縮:効率よく容量を削減
・複数のストレージ対応:ローカル・クラウドなど、さまざまな場所に保存可能
この柔軟性により、開発者はデータ構造を最適化しながら、巨大なデータセットを効率的に扱うことが可能となります。

Zarr形式では、データがチャンク化されているため、必要な部分だけをオンデマンドで読み込めます。全体を一度にメモリに展開する必要がありません。これが大規模データ処理を可能にする最大のポイントです。
データセット
今回使用するのは、フィンランド気象研究所(Finnish Meteorological Institute)が提供するデータセットです。地球全体をカバーし、大気質予測を中心に、異常気象の早期把握などに使われています。

このデータは日次で提供され、最大5日先までの時間別予測を含むため、データ量は非常に膨大です。有り難いことに、Source CooperativeのユーザーがこのデータをZarr形式に変換して公開しており、誰でもアクセス可能になっています。
データ処理ツール:Fused
データ処理にはFused(https://fused.io)を使用します。Fusedは、Pythonでユーザー定義関数(UDF)を作成し、スケーラブルにデータ解析を行えるプラットフォームです。UDFはサーバーレスアーキテクチャ上で実行され、ブラウザ内で高速な可視化を実現します。
また、Fusedは最新バージョンのZarrをネイティブにサポートしており、キャッシング、自動デプロイなど多くの機能を備えています。そのため、今回のような「大規模データを軽量に扱う」ユースケースに最適なツールです。
まず、複数のマップタイルを同時に処理できるよう、Tiled UDFを作成します。次に、各タイルの範囲に応じてZarrファイルから個別のデータチャンクを取得し、マップを可視化します。

データの読み込みには、Source Cooperativeのバケットから直接Zarrデータを読み込むFsspecStore関数を使用します。

次に、必要なデータチャンクを抽出するための次元配列を読み込みます。このデータセットには以下の4つの次元があります:
– 緯度(latitude)
– 経度(longitude)
– 初期観測時刻(init_time)
– 予測ステップ(forecast step)

メタデータで定義されているinit_timeは「2024-11-14からの日数」としてエンコードされているため、datetime形式にデコードします。他の配列は通常通り読み取ることができます。

デコードが完了したら、目的のデータにアクセスできます。
まず、対象日時のdatetimeオブジェクトを作成し、対応する配列インデックスを取得します。次に、UDFタイルの範囲を使って緯度・経度のインデックスを特定します。

最後に、取得したい予測ステップを選択し、Zarrデータセットから対応するデータキューブを抽出します。ここでは1ステップのみを定義していますが、複数ステップの範囲を指定して集計することも可能です。例えば、ステップ0からステップ24(最初の24時間)の平均予測粉塵濃度を計算する、といった応用もできます。

抽出した値を適切なカラーパレットにマッピングすることで、最終的な可視化結果を得ることができます。
まとめ
ZarrとFusedを組み合わせることで、ブラウザ上で巨大なデータセットを直接扱うことが可能になります。一時的なダウンロードや専用サーバーを用意する必要はなく、リアルタイムでインパクトのあるデータ解析と可視化を実現できます。ZarrとFusedの組み合わせは、気候研究、都市計画、災害対応など、巨大なデータを取り扱う必要のあるさまざまな分野で強力な手段となるでしょう。
今回使用したデータセットやコードに興味がある方は、以下のリソースをご覧ください:
• 元データ: https://silam.fmi.fi/aqforecast.html?region=glob
• Source Cooperative データ: https://source.coop/bkr/silam-dust
• HTMLマップ: https://www.fused.io/server/v1/realtime-shared/fsh_5WOa5Fd5uLwTyJmTFuZmK/run/file
• Fused コード/UDF: https://www.fused.io/workbench/catalog/Silam_Global_Dust_Zarr-b187b63a-027c-42ec-b6f2-e9ff3520a7f4
出典:https://element84.com/software-engineering/is-zarr-the-new-cog/
https://silam.fmi.fi/dust.html
Zarrを用いた地理空間データ処理や、Fusedを活用した可視化環境の構築に関心をお持ちの方は、ぜひ弊社までお問い合わせください。
プロジェクトへの導入支援や技術検証のご相談も承っております。