Skip to content

pythonで地理空間ラスターデータを扱う

ラスターデータとは、地理空間データの一種で、幾何学的な位置に関する情報を格子や行列の形で格納したものです。これらの行列は、属性の種類と数に応じて、各次元が特徴を表し、その中の各ピクセルが特徴を表す値を含む多次元になります。例えば、ある都市の気象情報を多次元配列で表現したデータセットには、気温、相対湿度、風速などの情報が含まれます。衛星画像など、地理的な位置を表す画像もラスタデータの一種です。

イントロプロット

netCDF、PNG、JPEG、TIFF、バイナリファイルは、ラスターデータの一例です。データタイプの広範なリストは、ラスターデータファイルフォーマットのリストにあります。ラスターデータと、Pythonを使ってラスターデータを表現しアクセスするさまざまな方法についての詳細は、「Introduction to geospatial data using Python」の記事に記載されています。このチュートリアルでは、Pythonでラスターデータを扱う方法を説明するコード例を提供します。

前提条件

このチュートリアルを完了するには、以下のものが必要です。

ステップ

セットアップ

  1. IBM Cloud にサインアップまたはログインします。

  2. 「リソース」ページの上部にある「Create resource」をクリックします。リソースは、左上のハンバーガー・メニューの下にあります。

    リソースダッシュボードの作成

  3. Watson Studio」を検索して、そのタイルをクリックします。

    Watson Studio タイル

  4. Lite プランを選択して、Create をクリックします。

  5. リソースリストに戻り、Watson Studio サービスをクリックして、Get Startedをクリックします。

    Watson Studio の開始

    これで Watson Studio になっているはずです。

  6. Create a project または New project のいずれかをクリックします。

  7. Create an empty project(空のプロジェクトの作成)を選択します。
  8. プロジェクトに名前を付けます。
  9. 既存のObject Storageサービスインスタンスを選択するか、新しいインスタンスを作成します。これはノートブックとデータを保存するために使用されます。注:「プロジェクト」ページに戻るときは、「更新」を忘れずにクリックしてください。
  10. Createをクリックします。

プロジェクトの作成 アクセストークン

ノートブックにデータを読み込むには、アクセストークンが必要です。

  1. プロジェクトの上部にある「設定」タブを開き、スクロールダウンして「アクセストークン」を選択します。
  2. New token」をクリックします。
  3. 新しいトークンに名前を付け、Editorを選択し、Createをクリックします。

    アクセストークン

    これは、ノートブックの後半で必要になります。

カスタムPython環境の作成

デフォルトのPython環境には必要なライブラリがインストールされていないため、conda createを使ってカスタマイズした環境を作成する必要があります。ただし、この環境はIBM Cloud上で動作するため、いくつかの手順があります。

  1. プロジェクトの上部にある環境タブに移動します。
  2. 新しい環境定義をクリックします。

    新しい環境の定義

  3. 新しい環境に名前を付けます。

  4. デフォルトのまま、フリーのハードウェア構成 Free - 1 vCPU and 4 GB RAMDefault Python 3.6 を選択して、 Create をクリックします。

    環境の定義

  5. 新しい環境をカスタマイズします。スクロールダウンして、Customizationの下にあるCreateリンクをクリックします。

    Customization option

  6. 編集可能なテキストフィールドが表示されます。テキストをすべて削除し、以下のコードをコピーしてテキストフィールドに貼り付けます。

  7. Apply」をクリックします。

これで、この新しい環境を使ってノートブックを実行することができます。

ノートブックの読み込みと実行

新しいノートブックを追加するには

  1. Add to projectをクリックして、Notebookを選択します。

    ノートブックの追加

  2. New notebook from URL」を選択します。

  3. ノートブックに名前を付け、URL https://github.com/IBM/data-analysis-using-python/blob/master/notebooks/raster-data-using-python.ipynb をコピーします。
  4. 作成したカスタムランタイム環境を選択し、ノートブックの作成をクリックします。

ノートブックがロードされます。ノートブックの指示に従って、すべてのセルを実行してください。その後、このチュートリアルに戻ります。

ノートブックの概要

データセットについて

data setには、1961年から1990年までの絶対温度を5°×5°のグリッドで収録しています。データはNetCDF形式で表現されています。

netCDF4 と matplotlib

netCDFを使ったデータ解析

このチュートリアルの前半では、PythonのGnetCDF4モジュールを使って、データセットからデータを抽出する方法を見ました。次のコードサンプルでは、このノートブック全体で使用したインポートの明示的なリストを示しています。

インポートの明示的なリスト

まず、前のステップで作成したプロジェクト・トークンを使用するヘルパー関数でデータセットをインポートします。

ヘルパー関数のコード

次に、netCDF4のDictionaryコレクションを使用して、データとnetCDFファイルを構成するフィールド間の関係を分析します。

1.2.1

netCDFファイルのデータモデルバージョンを抽出するには、data_model変数を使用します。データモデルは、NETCDF3_CLASSIC, NETCDF4, NETCDF4_CLASSIC, NETCDF3_64BIT_OFFSET, NETCDF3_63BIT_DATAのいずれかのデータモデルバージョンである。

データモデルの種類

dimensionsは、Dimensionsクラスのインスタンスにマッピングされたデータセットからの変数名を持つ辞書を返します。これは、変数の名前とそのサイズを提供します。

次元関数

variables は、データセットからの変数名を Variable クラスのインスタンスにマッピングした辞書を返します。

変数関数

次のコード例では、variablesコードサンプルで返された辞書のキーとして、データセットから変数にアクセスする方法を示しています。

データセットの変数にアクセスする

matplotlibを使った作図

では、matplotlibとその拡張機能を使って、Pythonで2Dマップをプロットする方法を見てみましょう。ここでは、matplotlibのbasemapツールキットを使用します。点を2Dの表面にマッピングするために、basemapクラスは24種類の投影をサポートしています。この例では、Miller Cylindrical Projectionsを使用していますが、これは一般的に航海用の地図ではなく壁掛け用の地図に使用されます。elcrnrlonllcrnrlatは、希望する地図領域の左下隅の経度と緯度を指します(度)。 urcrnrlonurcrnrlat は目的の地図領域の右下隅の経度と緯度(度)を表します。

ベースマップ

addcyclic はデータセットに経度の列を追加します。コードを見ると、温度のエントリを含む配列に経度の配列が追加されています。shiftgridは、すべての経度とデータを東か西に移動させます。meshgridメソッドは,1次元の座標配列から座標行列を返すものである.コードでは,meshgridを用いて,経度と緯度の配列を_x_と_y_の座標配列に変換しています.

xarray と Cartopy

xarrayを使ったデータ解析

チュートリアルのこのパートでは、xarrayを使ってnetCDFデータを処理する方法を見ていきます。xarrayは多次元配列の分析に便利で、pandasとNumPyの関数を共有しています。xarrayは、netCDFファイルを扱うための堅牢なライブラリであることが証明されています。

以下のコード例は,ノートブックを実行するために必要なインポートを示している。

xarrayのコード

次に、xarrayを使ってデータセットを開き、ロードします。

データセットのロード

xarrayは以下のデータ構造をサポートしている。

  • DataArray, 多次元配列である。
  • Dataset, 複数のDataArrayオブジェクトからなる辞書

netCDFのデータは、xarrayのDatasetとして表現される。

valuesはデータセット内の値を表すn次元の配列を返す。このデータセットにはlat, lon, timeの3つの座標が含まれていることがわかる。また、データ変数であるtemperatureは浮動小数点数である。

データセットの値

dimsは、x, y, _z_座標の値を返します。

dimsの値

coords は、values 変数から、座標部分だけを返します。

Coordsの座標

xarrayはpandasの拡張機能であるため、データセットをDataFrameに変換するメソッドが用意されています。

DataFrameへの変換

xarrayを使った作図

xarrayでは、matplotlibライブラリを拡張することで、プロッティング機能もサポートしています。DataArrayオブジェクトは、xarrayライブラリを使ってプロットすることができます。Datasetオブジェクトをプロットするには、関連するDataArrayまたはdimensionにアクセスする必要があります。

xarrayを使用したプロッティング

カートピーを使った作図

Cartopyは、xarrayと互換性のあるいくつかのプロッティング・アプリケーションの一つです。他のアプリケーションとしては、Seaborn、HoloViews、GeoViewsなどがあります。

以下の例は、cartopyを使って視覚化を行う簡単な例です。Molleweide projectionとMiller Cylindrical Projectionsを比較しています。Cartopy projection listでは、投影の完全なリストを提供しています。

カートピーアプリケーション

次の例は、1月と6月の気温の強弱を比較したヒートマップです。

気温の比較例

Conclusion

このチュートリアルでは、地理空間ラスターデータの基本を説明しました。また、2つのPythonライブラリを使用したNetCDFデータの解析方法の概要を説明しました。最初の例では、データの抽出にnetCFF4 Pythonライブラリを使用し、可視化にmatplotlibを使用する方法を示しました。2つ目の例では、データを扱うために xarray を、グラフをプロットするために Cartopy を使用する方法を示しました。