サンゴと海綿の分布の探索
このセクションでは、カタリナ島周辺の水域におけるサンゴと海綿の分布を左右する要因の一部を探索します。 まず、National Oceanic and Atmospheric Administration (米国海洋大気庁、NOAA) からデータをダウンロードし、対象地域を選択して、探索に向けてデータを準備します。
深海サンゴと海綿データのダウンロード
NOAA のデータは、世界中のサンゴと海綿の既知の生息地を示します。 GIS の使用方法を学ぶ上で、パブリック データのダウンロードや操作方法を理解することは重要な一面です。 はじめに、NOAA の Deep Sea Coral Research and Technology Program から 2 つのデータセットをダウンロードします。 まず、Deep-Sea Coral and Sponge Map Portal を開きます。 このサイトに掲載されているデータは四半期ごとに更新され、海洋生物の研究において有益です。 このセクションのステップでは、世界の特定の地域の種をダウンロードする方法を示します。 分析範囲はカリフォルニア州沖のカタリナ島周辺なので、北太平洋のデータをダウンロードします。
- コンピューターで File Explorer を開きます。 コンピューター上の見つけやすい場所にフォルダーを作成し、「DeepSeaCoralSponge」という名前を付けます。
このチュートリアルでは、C:\Lessons\DeepSeaCoralSponge\ に、データが表示されます。 別のフォルダーを使用できますが、以下の手順でそのパスを必ず調整してください。
- https://www.ncei.noaa.gov/maps/deep-sea-corals/mapSites.htm を開きます。
NOAA Deep-Sea Coral & Sponge Map Portal には、NOAA Deep Sea Coral Research and Technology Profram によって作成および管理されるマップが掲載されています。 このマップのデータは四半期ごとに更新されます。
- ページの上部で [Data Query] をクリックします。
- [Data Query] ウィンドウの [Region] セクションでドロップダウン メニューをクリックし、[North Pacific] をクリックします。
- [Search] をクリックします。
検索が完了するまでに、場合によっては数分ほどかかります。
- データの読み込みが完了すると、ページ上部で [Data Download] をクリックします。
データのダウンロード ウィンドウが表示されます。
- デフォルト値のまま、[Customized Download] をクリックします。
カスタマイズされたダウンロード ページが開き、北太平洋地域のデータが表示されます。
- 下にスクロールして [File type] をクリックします。
- [File type] で、[.csv] で始まるオプションを選択します。
- [送信] をクリックします。
データがダウンロードされるまで数分かかることがあります。
- コンピューター上で、ダウンロードした .csv ファイルを選択します。
ヒント:
ファイル名は、冒頭が deep_sea_corals_ で、その後に deep_sea_corals_f6a2_cb18_f6f1.csv のような文字列が続きます。
- 前の手順で作成した [DeepSeaCoralSponge] フォルダーに .csv ファイルをドラッグします。
北太平洋地域の深海サンゴのデータをダウンロードしました。 次に、プロジェクト地域の沿岸起伏モデルをダウンロードします。
NOAA 沿岸起伏モデルのダウンロード
NOAA Coastal Relief Models は、海底地形と沿岸地形を統合したパブリック ラスター データセットです。 ここでは、南カリフォルニアのモデルをダウンロードします。
- NCEI Geoportal ページを開きます。
分析範囲はカタリナ島なので、南カリフォルニア地域のデータをダウンロードします。
- 検索ボックスに「U.S. Coastal Relief Model - Southern California Version 2」と入力し、Enter キーを押します。
- 検索結果で [U.S. Coastal Relief Model - Southern California Version 2] をクリックします。
- [Download Data] セクションまで下方向にスクロールし、2 つ目の [Download NetCDF File] リンクをクリックします。
crm_socal_3as_vers2.nc ファイルがダウンロードされます。これは、3 秒角 (90 メートル) の解像度を持つデータです。 もう一方の [Download NetCDF File] リンクは、1 秒角 (30 メートル) の解像度を持つデータを示します。 このチュートリアルの目的には、90 メートルの解像度データが適しています。
ヒント:
これは 512 MB のファイルです。 接続速度によっては、コンピューターにダウンロードされるまで数分かかる場合があります。
- ダウンロードが完了したら、コンピューター上で crm_socal_3as_vers2.nc ファイルを探し、プロジェクト フォルダーにドラッグします。
- crm_socal_3as_vers2.nc ファイルを右クリックし、名前を「SouthernCABathymetry.nc」に変更します。
deep_sea_corals_ .csv ファイルには、緯度、経度、深度の列の単位を説明する行があります。 これは、テーブルをスプレッドシートとして表示する研究者には便利ですが、テーブルをポイント フィーチャに変換すると問題が発生します。 スプレッドシート エディターで .csv ファイルを開き、この行を削除します。
- Microsoft Excel (またはその他のスプレッドシート エディター) で deep_sea_corals_ .csv ファイルを開きます。
2 行目には、列 K、L、M、T の単位の説明文が含まれています。 インポートしたいデータ値は、2 行目以降の行にあります。
- 行 2 の行番号をクリックし、行を選択します。
- 行を右クリックし、[削除] をクリックします。
行が削除されます。 これで、データ テーブルが正しく書式設定され、ジオデータベースにインポートできるようになりました。
- [保存]ボタンをクリックし、ファイルを閉じます。
NOAA のパブリック データをダウンロードし、ジオデータベースにインポートできるよう書式設定を調整しました。 次に、データを ArcGIS Pro に追加し、解析用の NetCDF データを準備し、ジオデータベース テーブルからポイントを作成します。
沿岸起伏モデルのインポート
ダウンロードしたデータセットは、NOAA が公開しているデータのごく一部でしかありません。 このセクションでは、沿岸起伏モデルを使用し、サンタ カタリナ島周辺の環境について派生ラスターを作成する方法を説明します。 ここで生成した情報を、サンゴと海綿の位置データベースに取り込みます。
データの追加とシンボルの変更
次に、ArcGIS Pro で新しいプロジェクトを開始し、プロジェクトにデータを追加します。
- ArcGIS Pro を開きます。
- [新しいプロジェクト] セクションで [マップ] をクリックします。
- プロジェクトに「Deep Sea Coral and Sponge Database」と名前を付けます。
- [OK] をクリックします。
注意:
[カタログ] ウィンドウが開いていない場合は、[表示] タブをクリックして [カタログ] ウィンドウをクリックします。
- [カタログ] ウィンドウで、[データベース] を展開します。
プロジェクトを作成したとき、プロジェクト データを格納するために、ArcGIS Pro によって新しいジオデータベースが作成されました。 このジオデータベースに CSV テーブルをインポートします。
- [Deep Sea Coral and Sponge Database] を右クリックし、[インポート] をポイントして [複数のテーブル] をクリックします。
- [入力テーブル] では、このチュートリアルの前半でダウンロードし、編集した .csv ファイルを参照して選択します。
- [実行] をクリックします。
CSV テーブルがジオデータベースにインポートされるまで、ツールが 1 ~ 2 分間実行されます。
- [カタログ] ウィンドウでジオデータベースを展開し、テーブルをマップ上にドラッグします。
テーブルが [コンテンツ] ウィンドウの [スタンドアロン テーブル] セクションに追加されます。
- [コンテンツ] ウィンドウで [deep_sea_corals] テーブルを右クリックし、[XY データの表示] をクリックします。
- [XY データの表示] ウィンドウの [出力フィーチャクラス] に「CoralandSpongeLocations」と入力します。
このツールは、テーブルに経度と緯度のフィールドが含まれていることを検出し、経度と緯度を [X フィールド] および [Y フィールド] 入力パラメーターに割り当てます。
- [OK] をクリックします。
ツールの実行には、1 分間ほどかかります。 ツールが終了すると、新しい [CoralandSpongeLocations] フィーチャクラスがマップに追加されます。
[deep_sea_corals] テーブルは不要になります。
- [スタンドアロン テーブル] セクションで [deep_sea_corals] テーブルを右クリックし、[削除] をクリックします。
次に、[CoralandSpongeLocations] レイヤーのシンボルを編集します。
- [CoralandSpongeLocations] レイヤーを右クリックし、[シンボル] をクリックします。
[シンボル] ウィンドウが表示されます。
- [シンボル] ウィンドウで、[プライマリ シンボル] ドロップダウン リストをクリックして、[個別値] をクリックします。
- [フィールド 1] ドロップダウン リストをクリックし、[VernacularNameCategory] をクリックします。
- [シンボル] ウィンドウを閉じます。
- [クイック アクセス ツールバー] で、[保存] ボタンをクリックして、プロジェクトを保存します。
マップの座標系の設定
ここでは、カリフォルニア州沖のカタリナ島周辺の水域におけるサンゴと海綿の分布を左右する要因を調査します。 精度を期するため、マップの座標系をカリフォルニア用に設計された投影座標系に設定します。
- [コンテンツ] ウィンドウで、[マップ] をダブルクリックします。
[マップ プロパティ] ウィンドウが表示されます。
- [マップ プロパティ] ウィンドウで、[座標系] をクリックします。
- [使用可能な XY 座標系] ボックスに「NAD 1983 California (Teale) Albers」と入力し、Enter キーを押します。
- [投影座標系] を展開し、[State Systems] を展開して、[NAD 1983 California (Teale) Albers (Meters)] をクリックします。
- [OK] をクリックします。
マップの座標系が [NAD 1983 California (Teale) Albers] 座標系に変わり、マップの XY 単位がメートルに設定されます。
この投影法は、カリフォルニア州の面積計算をサポートするよう最適化されています。 それ以外の部分は歪んでいますが、対象地域は歪みが少ない部分なので問題ありません。 調査に関連するポイントを抽出するため、太平洋の遠方にあるポイントの歪みも問題ありません。
プロジェクトのデータの選択
北太平洋全体のデータをダウンロードしたので、プロジェクトの対象地域 (AOI) を設定し、データをこのエリアにクリップします。 これにより、より扱いやすいデータのサブセットを操作できるようになります。
- [カタログ] ウィンドウで [ポータル] をクリックし、[ArcGIS Online] をクリックします。 検索バーに「California_Detail_Learn_ArcGIS」と入力します。
注意:
[カタログ] ウィンドウを開くには、リボンの [表示] タブをクリックし、[ウィンドウ] グループで [カタログ ウィンドウ] をクリックします。
- 検索結果で、Learn_ArcGIS が所有する [California_Detail_Learn_ArcGIS] レイヤーをマップ上にドラッグします。
- [コンテンツ] ウィンドウで [dtl_st_trim] を右クリックし、[名前の変更] をクリックして、レイヤーの名前を [California] に変更します。
- リボンの [マップ] タブをクリックし、[照会] グループで [場所検索] をクリックします。
- [場所検索] ウィンドウの検索バーに「Catalina Island」と入力し、[Catalina Island, CA, USA] をクリックします。
マップ上でカタリナ島にズームします。
- マップ ウィンドウの下隅にある、ドロップダウン縮尺インジケーターをクリックし、[1:500,000] を選択します。
- リボン上の [マップ] タブをクリックし、[ナビゲーション] セクションで [マップ操作] をクリックします。
- カタリナ島が中心になるように、マップをクリックして画面移動します。
- [選択] グループで、[選択] をクリックします。
サンゴと海綿のポイントのみを選択するには、[CoralandSpongeLocations] レイヤーのみを選択可能なレイヤーにします。
- [コンテンツ] ウィンドウで [CoralandSpongeLocations] レイヤーを右クリックして [選択] にポインターを合わせ、[このレイヤーのみ選択可能にする] をクリックします。
- [選択] ツールをアクティブにし、カタリナ島周辺海域のサンゴと海綿の観察ポイントを囲むボックスをドラッグします。
選択したポイントはシアンでハイライト表示され、ポイントが選択されていることを示します。
- [コンテンツ] で [CoralandSpongeLocations] を右クリックし、[データ] にポインターを合わせて [フィーチャのエクスポート] をクリックします。
- [フィーチャのエクスポート] ウィンドウの [出力フィーチャクラス] に「CoralandSpongeCatalina」と入力します。
ツールに、入力に選択項目があることを示すメッセージが示されます。 選択したエリアによって、選択されたポイント数が変わることがあります。 正確な数は重要ではありませんが、目安としては 6,000 個前後が適切です。
ツールを実行する前に、出力フィーチャクラスの投影法を設定します。
- [フィーチャのエクスポート] ツールで [環境] タブをクリックします。
- [出力座標] セクションで [出力座標系] ドロップダウン リストをクリックし、[現在のマップ [マップ]] をクリックします。
- [OK] をクリックします。
このツールは、カタリナ島周辺の AOI で選択したフィーチャをエクスポートします。 複数の分析範囲がある場合、その場所での解析に適した座標系を設定し、その場所を拡大してフィーチャを選択し、マップの座標系を使用してエクスポートするという同じ方法により、他のデータセットを作成して解析および比較することも可能です。
- [コンテンツ] ウィンドウで[CoralandSpongeLocations] レイヤーをオフにします。
カタリナ島周辺の選択したフィーチャのみが表示されるようになります。
- プロジェクトを保存します。
ヒント:
Ctrl + S キーを押して、プロジェクトを保存することもできます。
境界となる四角形の作成
次に、AOI に対して境界となる四角形を作成し、沿岸起伏モデルをラスターとしてインポートします。
- 必要に応じて、ArcGIS Pro でプロジェクトを開きます。
- リボンの [解析] タブをクリックして、[ツール] をクリックします。
[ジオプロセシング] ウィンドウが表示されます。
- [ジオプロセシング] ウィンドウの検索バーに「ジオメトリの最小範囲 → ポリゴン」と入力します。 検索結果のリストで [ジオメトリの最小範囲 → ポリゴン] ツールをクリックします。
- [ジオメトリの最小範囲 → ポリゴン] ツール ウィンドウで、次のパラメーターを設定します。
- [入力フィーチャ] で [CoralandSpongeCatalina] を選択します。
- [出力フィーチャ] に「CatalinaBoundary」と入力します。
- [ジオメトリ タイプ] で [エンベロープ] を選択します。
- [実行] をクリックします。
- [コンテンツ] ウィンドウで [CatalinaBoundary] レイヤーのシンボルをクリックします。
- [シンボル] ウィンドウの [ギャラリー] タブで [黒 (アウトライン付き - 2 ポイント)] を選択します。
これで、分析範囲を表すポリゴンと、その中に含まれるサンゴと海綿の観測ポイントが作成されました。
海底地形データの追加
沿岸起伏モデルは NetCDF 形式です。 NetCDF は配列指向の科学データの共有に使用されるデータ形式であり、海洋学ではこの形式が一般的に使用されています。 NetCDF ファイルから、解析に使用するラスター データセットを作成します。
- ジオプロセシング ウィンドウで、戻る矢印をクリックします。 「Make NetCDF Raster Layer」と入力し、[NetCDF ラスター レイヤーの作成] をクリックしてツールを開きます。
- [NetCDF ラスター レイヤーの作成] ツール ウィンドウの [入力 netCDF ファイル] で [参照] ボタンをクリックします。
- [入力 netCDF ファイル] ウィンドウで C:\DeepSeaCoralSponge フォルダー (または crm_socal_3as_vers2.nc ファイルを保存した場所) を参照します。
- [SouthernCABathymetry.nc] をクリックし、[OK] をクリックします。
[変数] パラメーターは [Band1]、[X ディメンション] 値と [Y ディメンション] 値は [lon] と [lat] にそれぞれ設定されます。
- [実行] をクリックします。
ヒント:
このステップが完了するまでに数分かかることがあります。
南カリフォルニア地域全体のラスター レイヤーが表示されます。
- プロジェクトを保存します。
解析用のレイヤーの準備
ダウンロードしたデータを正確に解析できるようにするため、海底地形レイヤーを投影し、クリップします。 投影座標系に投影された地形や海底地形ラスターは、それぞれの標高単位や深さ単位と一致する単位で解析するのが最適です。 ここでは、深さはメートル単位です。 データ フレームと [CoralSpongeCatalina] レイヤーに設定したカリフォルニアの投影座標系にラスターを投影します。 この座標系では、距離単位として、深さの値と同じ単位であるメートルを使用します。
- [ジオプロセシング] ウィンドウで [ラスターの投影変換] ツールを検索して開きます。
- [ラスターの投影変換] ウィンドウで、[入力ラスター] に [Band1_Layer] を選択し、[出力ラスター データセット] に「CatalinaBathymetry」と入力します。
- [出力座標系] でドロップダウン メニューをクリックし、[現在のマップ [マップ]] をクリックします。
座標系がデータ フレームと一致するよう更新されます。
地理座標系変換も自動的に適用されます。 変換は、入力座標系と出力座標系の地理座標系 (GCS) が異なる場合に、データが適切に配置されるように使用されます。 この場合、NetCDF データで使用される WGS 1984 GCS と California Teale Albers 座標系で使用される NAD 1983 GCS の違いを考慮した変換が行われます。
- [環境] タブをクリックします。
- [環境] タブの [処理範囲] セクションで [範囲] ドロップダウン メニューをクリックし、[CatalinaBoundary] をクリックします。
これにより、AOI の海底地形データのみが投影され、調査範囲のみを網羅する小さなラスターが作成されます。 処理範囲を AOI に限定することでディスク容量を節約し、処理時間を短縮できます。
- [実行] をクリックします。
海底地形ラスター全体を投影するには数分かかることがありますが、こうするとはるかに速くなります。
- [コンテンツ] ウィンドウで [CatalinaBathymetry] を右クリックし、[シンボル] をクリックします。
- [シンボル] ウィンドウでオプション ボタンをクリックし、[レイヤーからインポート] をクリックします。
[レイヤーのシンボル情報を適用 (Apply Symbology From Layer)] ツールが表示されます。
- [シンボル レイヤー] で [Band1_Layer] を選択し、[実行] をクリックします。
海底地形データをカタリナ地域にクリップし、平面座標系に投影してシンボル化したので、マップ上に大きな [Band1_Layer] を表示する必要はなくなりました。
- [コンテンツ] ウィンドウで [Band1_Layer] を右クリックし、[削除] をクリックします。
- プロジェクトを保存します。
ラスター解析の実行
AOI の海底地形ラスターが準備されたので、ここから傾斜角および傾斜方向ラスターを作成します。 これらのラスターを使用し、分析範囲におけるサンゴと海綿の分布を左右する要因のいくつかを探索します。
- [ジオプロセシング] ウィンドウの検索バーに「Slope (Spatial Analyst)」と入力します。 [傾斜角] ツールをクリックします。
- [傾斜角] ツール ウィンドウの [入力ラスター] で [CatalinaBathymetry] を選択します。 [出力ラスター] に「CatalinaSlope」と入力します。
- [実行] をクリックします。
傾斜角が AOI の各セルに対して計算されます。 傾斜角は、ラスター サーフェスの各セルの傾斜を特定します。 傾斜角の値が小さくなるほど地表は平らになり、傾斜角の値が大きくなるほど地表が急勾配になります。
- [ジオプロセシング] ウィンドウの戻るボタンをクリックします。 [傾斜方向 (Spatial Analyst)] ツールを検索し、クリックします。
- [傾斜方向] ツール ウィンドウの [入力ラスター] で [CatalinaBathymetry] を選択します。 [出力ラスター] に「CatalinaAspect」と入力します。
- [実行] をクリックします。
傾斜方向が AOI の各セルに対して計算されます。 [傾斜方向] ツールは、下りの傾斜角が指している方向を特定します。 出力ラスターの各セルの値は、その位置でサーフェスが向いている方位方向を示しています。
- プロジェクトを保存します。
データベースの強化
サンタ カタリナ島の AOI の海底地形、傾斜角、傾斜方向ラスターが作成されたので、これらの値をサンゴと海綿のデータベースに取り込みます。 [複数の抽出値 → ポイント] ツールを使用し、これら 3 つのラスターの値をサンゴと海綿の各位置ポイントに追加します。 これにより、サンゴと海綿が観察された場所で、これらの環境パラメーターがどのように変化するかを理解できるグラフを作成します。
- [ジオプロセシング] ウィンドウを開きます。 [複数の抽出値 → ポイント] ツールを検索して開きます。
- [複数の抽出値 → ポイント] ツール ウィンドウの [入力フィーチャ] で [CoralandSpongeCatalina] を選択します。
- [入力ラスター] では、次の値を選択します。
- CatalinaBathymetry
- CatalinaSlope
- CatalinaAspect
- 対応する [出力フィールド名] には、次のように入力します。
- Bathymetry
- Slope
- Aspect
- [実行] をクリックします。
- [コンテンツ] ウィンドウで [CoralandSpongeCatalina] レイヤーを右クリックし、[属性テーブル] をクリックします。
- 属性テーブルで、[海底地形]、[傾斜角]、[傾斜方向] の値が各フィーチャに追加されていることを確認します。
- テーブルを閉じて、プロジェクトを保存します。
サンゴと海綿の観察ポイントを環境データで強化したので、次に、これらの値をチャートで視覚化します。
Python でのデータの探索
ArcGIS Pro には、データ サイエンス コミュニティがデータ探索に使用している ArcGIS Notebooks が含まれています。 Notebooks で Python コードを使用し、3 つの環境変数と、サンゴと海綿のさまざまな種との関係を調べます。 これにより、望ましい生息環境を把握することができます。
Notebooks を使用したチャートの作成
水深をインポートし、傾斜角および傾斜方向のラスターを生成し、結果として得られたデータをサンゴと海綿の観察に追加しました。 レイヤーを視覚的に検査して洞察を得ることもできますが、チャートを作成するとデータを簡単に理解できる場合もあります。 次に、データを探索するためにチャートを作成します。
- リボンの [解析] タブをクリックします。 [ジオプロセシング] グループで [Python] の横にあるドロップダウン矢印をクリックし、[Python Notebook] をクリックします。
[Notebook] ウィンドウが表示され、[カタログ] ウィンドウの新しいグループ [Notebooks] に新しいノートブックがリストされます。
Python ノートブックと Python ウィンドウは、Python コードを実行できる 2 通りの方法です。
Python ウィンドウのコードは、Enter キーを押した直後に実行されます。 Notebooks では、異なるセルに複数のコード行を入力し、コードを実行して編集し、再実行できます。 Notebooks は、コードのプロトタイプ作成やデータ解析に便利です。
- [カタログ] ウィンドウで [Notebooks] を展開します。
- [新しい Notebook.ipynb] を右クリックし、[名前の変更] を選択します。
- 「CoralSponge」と入力し、Enter キーを押します。
- ノートブックで空のセルをクリックします。
- 次のコード行をコピーしてセルに貼り付けるか入力して、ArcPy モジュールをセルにインポートします。
import arcpy
Python は大文字と小文字を区別するため、大文字と小文字が一致する必要があります。
- 1 つ目のセルの上にあるツールバーの [実行] をクリックします。
セルの実行中、アスタリスク [*] が角括弧に囲まれて表示されます ([*])。 実行が完了すると、アスタリスクは数字 [1] に置換され、1 つ目のセルの下に新しい空白のセルが表示されます。
arcpy モジュールには、さまざまなデスクトップ マッピングおよび解析タスクをサポートするための Python コードが含まれています。
セルにコードを入力する際、入力ミスなどのエラーが発生することがあります。 その場合、セルの後にエラー メッセージが表示されることがあります。
- 2 つ目のセルをクリックして「import ARCPY」と入力し、[実行] ボタンをクリックします。
Python に ARCPY という名前のモジュールがインストールされていないため、このコード行によりエラーが発生ます。 元の 1 行目である import arcpy は正常に実行されます。 import ARCPY (または arcPy、ArcPy など、arcpy 以外のバリエーション) は失敗します。 これは、大文字と小文字の違いが Python のコードに影響を与えることを示す例です。 人間が流し読みして理解できるような小さな入力ミスでも、Python コードではエラーの原因となります。
次に、データからチャートを作成するためのコードを記述します。 arcpy の Chart クラスを使用します。
- 2 番目のセルで [import ARCPY] 行を削除します。
2 番目のセルのコードを、ArcGIS Pro のグラフィカル ユーザー インターフェイスを使用してチャートを作成するのと本質的に同じことを行うコードに置換します。 しかし、arcpy.Chart クラスを使ってチャートを作成する場合、ユーザー インターフェイス要素をクリックするのではなく、Python コマンドを使用してチャートの詳細を指定します。
- 次のコードをコピーして、2 番目のセルに貼り付けます。
my_chart = arcpy.Chart('my_chart') my_chart.type = 'bar' my_chart.title = 'CoralandSpongeCatalina' my_chart.description = 'This chart shows the mean Slope values that correspond with the taxa in the CoralandSpongeCatalina layer.'
1 行目 (my_chart = arcpy.Chart('my_chart')) は変数を作成し、Chart クラスに属する新しいオブジェクトと等しくなるように設定します。 このオブジェクトは my_chart と呼ばれます。 Chart クラスは、チャートのテンプレートとして捉えることができます。 チャートを 1 つ作成済みなので、これがどのようなチャートなのか、どの特性を持っているのかを指定する必要があります。 残りのコード行でこれを行います。
次の行 (my_chart.type = 'bar') では、チャートがバー チャートであることを指定します。 チャートの type プロパティを bar に設定します。 my_chart.type という表記は、my_chart の type プロパティにアクセスし、等号でそのプロパティに値 'bar' を割り当てます。 Chart オブジェクト クラスはさまざまなタイプのチャートをサポートし、バー、折れ線、散布図などの名前で識別されます。 これらの名前は、引用符で囲まれた Python 文字列として指定されます。
my_chart.title と my_chart.description で始まるその後の行では、チャートのタイトルと説明を指定します。 このコードは、タイプの設定と同じ方法を取ります。つまり、my_chart オブジェクトのプロパティにアクセスし、特定の文字列値に設定します。 この場合、テキスト ボックスに説明を入力するのではなく、コード行に Python 文字列を追加しました。
- 次のコードをコピーし、セルの下に貼り付けます。
my_chart.xAxis.field = 'VernacularNameCategory' my_chart.xAxis.aggregation = 'VernacularNameCategory' my_chart.xAxis.title = 'Name' my_chart.yAxis.field = 'Slope' my_chart.yAxis.title = 'Mean Slope' my_chart.bar.aggregation = 'MEAN'
次の 3 行 (my_chart.xAxis で始まる) は、X 軸で使用されるレイヤーのフィールドと、その列の値を集約する方法を指定します。 これらの 2 行では、[VernacularNameCategory] は [CoralandSpongeCatalina] レイヤー属性テーブルのフィールドで、さまざまな種類のサンゴと海綿の名前が含まれます。 集約に対して [VernacularNameCategory] を指定することは、そのフィールドの個別値によって、値がグループ化されることを意味します。 次に、X 軸のタイトルが [Name] に設定され、その軸にサンゴと海綿の名前がラベル付けされます。
my_chart.yAxis で始まる 2 つの行と my_chart.bar.aggregation は、Y 軸のフィールド、タイトル、集約方法を指定します。 データ テーブルの [Slope] フィールドを使用し、平均値を使用して集約します。 Y 軸は、サンゴと海綿の各グループの傾斜角の平均値を示すため、[Mean Slope] とラベル付けされます。
注意:
[複数の抽出値 → ポイント] ツールを実行したときにデフォルトの出力フィールド名を受け入れた場合、[CoralandSpongeCatalina] レイヤーの属性テーブルを確認し、傾斜角値を含むフィールドの名前を特定する必要があります。 my_chart.yAxis.field = 'Slope' 行を編集し、正しいフィールド名 ([Slope] ではない場合) を含める必要があります。
- 次のコードをコピーし、セルの下に貼り付けます。
my_chart.dataSource = 'CoralandSpongeCatalina' my_chart.addToLayer = 'CoralandSpongeCatalina'
最後の 2 行では、データの元となるマップ上のレイヤーを指定し、そのレイヤーにチャートを追加します。
注意:
レイヤー名を [CoralandSpongeCatalina] 以外にした場合は、この行をレイヤー名に合わせて編集する必要があります。
これでセルが作成されました。
- [実行] をクリックします。
チャートは作成されましたが、何も起こらないようです。 チャートを表示するには、Python コードを実行する必要があります。
- 次の新しいセルで、次のコードをコピーして貼り付け、[実行] をクリックします。
my_chart
チャートがセルの下に表示されます。
- 以下のコードをコピーし、次のセルに貼り付けます。
outChartName = "CoralandSpongeCatalinaSlope.svg" outSVGPath = "C:/Lessons/DeepSeaCoralSponge/" + outChartName my_chart.exportToSVG(outSVGPath, width=1500, height=800)
注意:
C:/Lessons/DeepSeaCoralSponge/ 以外の場所に [DeepSeaCoralSponge] プロジェクト フォルダーを作成した場合は、セル内のパスがコンピューター上のパスと一致するよう編集します。 区切り文字としてスラッシュ以外を使用すると、パスがおかしくなることがあります。 Python では \ をエスケープ文字として使用しており、他の文字と組み合わせることで改行やタブを表すことがあるため、このパスにはスラッシュを使用することをお勧めします。
コードの 1 行目 (outChartName = で始まる) は、チャート ファイルのファイル名 (ファイル拡張子を含む) を定義します。 ファイル名は、引用符で囲まれた文字列です。
2 行目 (outSVGPath =) は、そのファイルを保存するパスを指定する文字列を定義します。 + 記号でファイル名が付加されています。この記号を使用するとテキスト文字列をつなげたり (これを「連結」と呼びます)、Python で数字を足したりすることができます。
3 行目 (my_chart.exportToSVG) は、チャート オブジェクトの exportToSVG メソッドを呼び出し、ファイル名を含むフルパス、ピクセル単位の幅、ピクセル単位の高さを括弧で囲み、メソッドのパラメーターとして指定します。
- セルを実行します。
チャート ファイルがフォルダーに作成されます。
- コンピューターの Microsoft File Explorer でフォルダーに移動し、チャート画像を開きます。
チャートはノートブックに表示されるものよりも大きくなります。これは、出力チャートに対して異なるディメンションを指定したためです。
- チャートを確認後、閉じます。
この方法では、特に ArcGIS Pro インターフェイスをクリックする手順と比べると多大な労力を要するように見えるかもしれませんが、コードを使用すると処理を自動化できるという利点があります。 次のセクションでは、このコードを関数に変換し、これを呼び出して複数のチャートを作成する方法について説明します。
チャート作成機能の作成
ここまで、Python コードを使用して 1 つのチャートを作成する方法を見てきました。 次に、コードを再利用しやすくするためにアレンジします。 複数のチャートを作成できる Python 関数を作成します。
- 以下のコードをコピーし、次のセルに貼り付けます。
def coral_and_sponge_chart(layer, field):
この行は def から始まります。 これは、新しい関数を定義することを Python に伝えます。 次の部分は、関数の名前である coral_and_sponge_chart です。 関数名は、コードを実行するときに関数内のコード ブロックを参照するために使用されます。 次の部分は括弧で囲まれています。 これらは、関数が受け取るパラメーターです。 パラメーターは関数への入力であり、何らかの結果を生成するために関数によって処理されます。 この関数は、入力としてレイヤーとフィールド名を受け取ります。 このフィールドのバー チャートが作成されます。 行の末尾はコロンです。 これは、次行以降は関数のコード ブロックであることを意味します。
- Enter キーを押します。
関数の定義を開始する行の後で Enter キーを押すと、次の行は 4 つのスペースでインデントされます。
- 以下のコードをコピーし、セルに貼り付けます。
my_chart = arcpy.Chart('MyChart') my_chart.type = 'bar'
これらの 2 行は、前のチャートを作成したときのコードと同じですが、4 つのスペースでインデントされています。 Python では、インデントを使用してコード セクションをまとめます。 この関数内のコード ブロック行は、すべて 4 つのスペースでインデントされる必要があります。
これらの行は、Chart クラスからチャートを作成し、それがバー チャートであることを指定します。
- Enter キーを押し、次のコードをコピーして、セル内の chart.type 行の後に貼り付けます。
my_chart.title = layer
この行は、元のチャート コードの次行のように始まりますが、チャートのタイトルを特定の文字列として指定するのではなく、タイトルは入力レイヤー パラメーターと同じでなくてはならないことを指定します。 つまり、レイヤーにかかわらず、出力チャート タイトルはそのレイヤー名と一致することを意味します。
- 次のコードをコピーし、セル内の my_chart.title 行の後に貼り付けます。
my_chart.description = f'This chart shows the mean {field} values that correspond with the taxa in the {layer} layer.'
この行は、元のチャート コードの行に似ていますが、いくつかの違いがあります。 1 つ目の違いは、説明を特定の文字列と等しく設定するのではなく、この行では f-string (書式設定された文字列) と等しく設定する点です。 書式設定された文字列とは、値を代入できる文字列です。 冒頭は f で、その後に引用符が続きます。 f は、Python に対し、これが書式設定された文字列であることを示します。
2 つ目の相違点とは、説明にテキスト [the mean Slope values] を含めるよう設定するのではなく、コードが the mean {field} values と記述される点です。 これは何を意味するのでしょうか。
これは f 文字列なので、コード {field} は関数の入力パラメーターのフィールド名で置換されます。 in the {layer} layer を含むコードの末尾も同様です。 {layer} はレイヤー名で置換されます。 そうすると、出力されるチャート説明が、入力レイヤーおよびフィールド名と一致するようになります。
- 同じセルで改行し、次のコードをコピーして貼り付けます。
my_chart.xAxis.field = 'VernacularNameCategory' my_chart.xAxis.aggregation = 'VernacularNameCategory' my_chart.xAxis.title = 'Name'
これらの 3 つの行は元のチャート コードとまったく同じですが、コード ブロックの一部となるように 4 つのスペースでインデントされています。 この関数は、入力レイヤーの [VernacularNameCategory] フィールド値ごとにバーをプロットし、チャートの X 軸に Name という名前を付けます。
この行は、[VernacularNameCategory] フィールドを持たないレイヤーで関数を実行すると失敗し、エラーになります。 ただし、[CoralandSpongeLocations] のすべてのポイントにこのフィールドがあるので、どの分析範囲を選択しても正常に動作します。
- 同じセルで改行し、次のコードをコピーして貼り付けます。
my_chart.yAxis.field = field my_chart.yAxis.title = 'Name'
このコードは Y 軸のプロパティを設定しています。
- 同じセルで改行し、次のコードをコピーして貼り付けます。
my_chart.bar.aggregation = 'MEAN'
この行は、元のコードの行とまったく同じです。 サンゴと海綿の種類ごとに、入力フィールドの平均値をバーに表示させます。
- 同じセルで改行し、次のコードをコピーして貼り付けます。
my_chart.dataSource = layer my_chart.addToLayer = layer
これらの 3 つの行は元のチャート コードと似ていますが、データ ソースを設定して、特定の名前付きレイヤー (元のチャートでは [CoralandSpongeCatalina]) にチャートを追加する代わりに、関数の入力レイヤーに対してそれを行います。 別の分析範囲 (ハワイ周辺や、アラスカ沖など) のサンゴと海綿の生息ポイントのサブセットを作成し、それに対して傾斜角、傾斜方向、水深の値を追加し、別の名前を付けても、この関数は正常に動作してチャートを作成し、入力レイヤーと関連付けます。
- 同じセルで改行し、次のコードをコピーして貼り付けます。
outChartName = layer + field + ".svg" outSVGPath = "C:/Lessons/DeepSeaCoralSponge/" + outChartName my_chart.exportToSVG(outSVGPath, width=1500, height=800)
これらの行は、元のコードの行に似ています。 outChartName 行は、関数に渡されたレイヤー名とフィールド名を連結し、チャートの名前を構築します。 アラスカの分析範囲に対してレイヤーを作成すると、出力チャート名には、そのレイヤーの名前が反映されます。
注意:
C:/Lessons/DeepSeaCoralSponge/ 以外の場所に DeepSeaCoralSponge プロジェクト フォルダーを作成した場合は、コンピューター上のパスと一致するようにパスを編集します。
- 同じセルで改行し、次のコードをコピーして貼り付けます。
return my_chart
return ステートメントでは、関数を呼び出すコードに対し、関数からチャート オブジェクトが返されます。
次のチャートを作成するコード ブロックが完成しました。
関数を定義する最初の行は左端の列から始まります。それ以降の行は 4 つのスペースでインデントされる必要があります。
def coral_and_sponge_chart(layer, field): my_chart = arcpy.Chart('MyChart') my_chart.type = 'bar' my_chart.title = layer my_chart.description = f'This chart shows the mean {field} values that correspond with the taxa in the {layer} layer.' my_chart.xAxis.field = 'VernacularNameCategory' my_chart.xAxis.aggregation = 'VernacularNameCategory' my_chart.yAxis.field = field my_chart.xAxis.title = 'Name' my_chart.yAxis.title = field my_chart.bar.aggregation = 'MEAN' my_chart.dataSource = layer my_chart.addToLayer = layer outChartName = layer + field + ".svg" outSVGPath = "C:/Lessons/DeepSeaCoralSponge/" + outChartName my_chart.exportToSVG(outSVGPath, width=1500, height=800) return my_chart
- [実行] をクリックします。
セルは実行されますが、何も返されません。
注意:
エラー メッセージが表示された場合は、ここからコード ブロック全体をコピーし、セルに貼り付けて実行します。 outSVGPath 変数のパスは、必ずスラッシュを使用して、お使いのコンピューターの実際のパスに合わせて更新してください。
セルを実行しても、このコードから何も返されないのはなぜでしょうか。
関数は定義されていますが、他の Python コードによってその関数を実行、または呼び出す必要があります。
- 以下のコードをコピーし、次のセルに貼り付けます。
coral_and_sponge_chart()
- セルを実行します。
エラー メッセージが表示されます。
このエラーには、関数に必須の 2 つの位置引数 (layer と field) が欠けていることが示されます。 関数を正しく実行するには、これらの値が必要です。
- セルの内容を次のコードで置換し、[実行] をクリックします。
coral_and_sponge_chart('CoralandSpongeCatalina', 'Slope')
チャートがノートブックに表示され、チャートの .svg グラフィック ファイルが指定したフォルダーに作成されます。 最初のコードの出力と同じファイル名ですが、このファイルを見てみると、[更新日] 値が更新されているのがわかります。
その結果は、最初のコード ブロックで得た結果と同じです。 しかし、今回はレイヤー名とフィールド名を渡せる関数があるので、別のチャートが表示されます。
- 次のセルで、次のコードをコピーして貼り付け、[実行] をクリックします。
myList = ['Slope', 'Aspect', 'Bathymetry']
- 次のセルで、次のコードをコピーして貼り付け、[実行] をクリックします。
print(myList)
Python では、リストは角括弧で囲まれます。これは、カンマで区切られたグループをまとめて格納する手段です。 この場合、リスト myList には、Slope、Aspect、Bathymetry のフィールドの名前を持つ 3 つの文字列が含まれます。
[複数の抽出値 → ポイント] ツールを実行したときにデフォルトの出力フィールド名を受け入れた場合、[CoralandSpongeCatalina] レイヤーの属性テーブルを確認してフィールド名を決定し、myList の値が一致するよう編集し、そのセルを再度実行して myList 値をリセットする必要があります。
- 次のセルで、次のコードをコピーして貼り付け、[実行] をクリックします。
for envField in myList: outChart = coral_and_sponge_chart('CoralandSpongeCatalina', envField)
このセルには、新しい Python コード コンストラクトである for ループが含まれます。 for ループでは、一連の項目をループ (反復) させることができます。 最初の行は、ループが myList の各項目を処理して、一時変数 envField に割り当てるよう指定します。 コロンは、次のセクションが for ループのコード ブロックになることを意味します。 次の行は、関数定義の行と同じように、4 つのスペースでインデントされます。 for ループ ブロックでインデントされた行は、ループの各サイクル (反復) ごとにすべて実行されます。
この場合、コード ブロックは 1 行だけです。 これは先ほど、coral_and_sponge_chart 関数をテストするために実行した行に非常によく似ています。 変数を作成し、その値を [CoralandSpongeCatalina] レイヤーで coral_and_sponge_chart 関数を実行するのと同じように設定しますが、Slope フィールドも指定するのではなく、envField 変数から取得するフィールド名で実行します。 リストには 3 つの項目があるので、ループは 3 回実行され、3 つのフィールドのそれぞれに対してチャートが作成されます。
- コンピューターの File Explorer で、関数定義で指定したフォルダーを参照します。
属性ごとにチャートが表示されるはずです。 これらの出力ファイルは、プレゼンテーションで使用したり、ArcGIS StoryMaps を使用してストーリーに追加したり、ArcGIS Pro でマップ レイアウトに配置したりできます。
3 つのチャートを手動で作成するよりも、この方が少し時間を短縮できます。 たとえば、6 つの異なる環境変数でサンゴと海綿の生息ポイントを強化したとします。 それらのフィールド値のリストを作成して関数を呼び出すと、これら 3 つを作成するのと同じくらいの時間でそれぞれのチャートを作成できます。
5 つの分析範囲があり、そのそれぞれに対してすべての値のチャートを作成するとします。 この関数はレイヤー名もパラメーターとして受け取るため、すべてのレイヤー名のリストを作成し、それらをループする for ループを作成し、その for ループ内で先ほど作成したループを呼び出すことができます。
これを実現するためのコードは次のとおりです。
myLayersList = ['CoralandSpongeCatalina'] # You would add comma separated layer names in # quotation marks to the myLayersList, such as: # ['CoralandSpongeCatalina', 'CoralandSpongeAlaska', 'CoralandSpongeHawaii'] myList = ['Slope', 'Aspect', 'Bathymetry'] # You could add comma separated field names to the list for lyrName in myLayersList: # outer loop, iterate over the layer names in the list for envField in myList: # inner loop, iterate over the field names for that layer outChart = coral_and_sponge_chart(lyrName, envField)
6 つの変数と 5 つの分析範囲のレイヤーがある場合、3 つのチャートを作成するのとほぼ同じ時間で 30 個のチャートを作成できます。
- 次のセルで、次のコードをコピーして貼り付け、[実行] をクリックします。
outChart
ループによって 3 つのチャートが作成されました。 このセルを実行しても、1 つしか表示されないのはなぜでしょうか。
変数 outChart は、ループのサイクルごとに新しいチャートにリセットされます。 ループが完了すると、最後のサイクルで作成されたチャートに変数が割り当てられます。 ループから出力ファイルを書き出す際に発生しがちな問題は、複数の出力を期待していたのに 1 つしか得られないことです。 多くの場合、これは出力ファイル名がループの各サイクルで同じであることが原因です。 結果はサイクルごとに生成されますが、名前が同じなので、同じファイルがサイクルのたびに上書きされてしまいます。 ここでの coral_and_sponge_chart 関数では、入力変数からファイル名を構築することでこの問題を回避しています。
outChartName = layer + field + ".svg"
この問題に対処するには、他の方法もあります。 1 つは、ループ内に counter 変数を含めて、それを出力ファイル名に連結し、outfile_1、outfile_2、outfile_3 のようにする方法です。 もう 1 つは、ファイル名に現在時刻を付加する方法です。この方法は、各サイクルの処理時間がよほど短くない限りは有効です。 さらに、一意の識別子を作成し、それをファイル名に追加する方法もあります。しかし、この方法ではファイル名が長くなり、混乱をきたす可能性があります。
- プロジェクトを保存します。
ヒント:
さらに挑戦したい方は、他の対象地域を選択して、このチュートリアルの手順を使用してチャートを作成してみてください。
このチュートリアルでは、NOAA から水深データと、サンゴと海綿のデータをダウンロードする方法を学びました。 ラスター解析のために、データを適切な平面座標系に投影する方法を学習しました。 また、対象地域を作成し、AOI の傾斜角レイヤーと傾斜方向レイヤーを生成し、その情報をサンゴと海綿の属性に付加する方法も学びました。 さらに、Python を使用してチャートを作成し、複数のチャートの生成を自動化するための関数を定義する方法についても学びました。 これらの技術を駆使して、世界中の複数の地域におけるサンゴと海綿のデータを解析できます。
他のチュートリアルについては、チュートリアル ギャラリーをご覧ください。