Jupyter Lab を使ってみよう

JupyterLab は、コード、データ、そして Jupyter Notebook のファイル形式(*.ipynb)を扱う最新の対話型開発環境(IDE)です。Jupyter Notebook 同様、オープンソースとして公開されています。
ArcGIS API for Python(以下、Python API )のバージョン 1.5.0 以降で対応しています。

JupyterLab で GIS データとグラフの操作

JupyterLab は、より柔軟で強力なユーザー体験を実現するために Jupyter Notebook の主要コンポーネント (ノートブック、ターミナル、テキスト エディター、ファイル ブラウザー、ipywidgets など) をベースに構築されています。JupyterLab の詳細は JupyterLab のブログGitHub をご参照ください。

JupyterLab をはじめる

Python API を JupyterLab で使用するためには、いくつかインストールなどの設定が必要です。

インストール

  • バージョン 1.5.0 以上の Python API をインストールするか、既存の環境を 1.5.0 以上にアップデートする ターゲットの仮想環境がある場合は、アクティベート(activate)してから行います。Python API のインストールまたはアップデートの方法はインストールガイドをご覧ください。

  • 次の 2 つのコマンドを実行します

    • jupyter labextension install @jupyter-widgets/jupyterlab-manager
    • jupyter labextension install arcgis-map-ipywidget@バージョン番号

2 つ目のコマンドの最後にある「バージョン番号」部分は、使用する Python API のバージョンに合わせて変更してください (例:1.6.1)。
エラー等で正常に完了できない場合は、お使いの端末または現在の環境に npm および nodejs をインストールする必要があります。インストールの詳細は npm のウェブサイト、または node.js のウェブサイトを参照してください。

  • 以上の設定が完了したら、次のコマンドで JupyterLab を起動します。
    • jupyter lab

任意のディレクトリをルート ディレクトリとして起動したい場合は、cd コマンドでディレクトリを移動してから起動コマンドを実行します。

ファイルエクスプローラー

JupyterLab は、従来の Jupyter Notebook のように、既存のノートブックを開いたり、新しいノートブックを作成したり、コンテンツを整理するためのファイルエクスプローラを備えています。 JupyterLab のファイルエクスプローラは、メインビューの左側のウィンドウです。

JupyterLab も Jupyter Notebook と同様に、ノートブック形式(*.ipynb)で動作しコードや結果を保存できます。この 2 つのツールの違いは、主にユーザーインターフェースといくつかの外部エクステンションが追加された点です。

ウィンドウとタブを使用する

JupyterLab には、Jupyter Notebook とは違って、「ウィンドウ」と「タブ」という概念があります。 これにより、ノートブックを重ねたり、横に並べたり、タブで整理したりすることができます。これらの操作は、以下のように「タブ」をクリックしてドラッグするだけで可能です。

どのようなウィンドウでもこのようにドラッグすることが可能です。*.csv、*.json などのファイルも表示や編集することができます。

セルの使用

上記のウィンドウとタブと同様に、JupyterLab ではノートブックのセルをドラッグアンドドロップして移動することができます。 JupyterLab は、1 つのノートブックから別のノートブックにセルをドラッグする機能もサポートしています。 移動したいセルの左側の領域をクリックして、それをドラッグします。

JupyterLab では、Shift キーを押しながら複数のセルを選択することもできます。前述のようにこれらのセルを移動するか、右クリックして [Copy Cells] を選択してコピーします。また、右クリックのメニューには、[Create New View For Output] を含む多くのオプションがあります。[Create New View For Output] を使用すると、任意のセルの実行結果を別のタブで表示することができ、重ねたり、並べて表示したりすることができます。

JupyterLab には他にも様々なセルの操作ができるので、いろいろと探してみてください!

マップ ウィジェットとの連携

バージョン 1.5.0 以上の Python API では、2D 回転、3D モード、3D レンダラーのサポートなどマップ ウィジェットの機能が多数追加されています。これらの機能の詳細については、ガイドページ(米国ESRI ページ)でご紹介しています。このガイドでは、マップ ウィジェットと JupyterLab のシームレスな連携を紹介します。

Python API の MapView クラスのデフォルトの表示動作は、Jupyter Notebook と同じで、ウィジェットはセルの出力にマップが表示されます。JupyterLab では、これに加えて以下のようなボタンが表示されます。

このボタンを押すと、ウィジェットが新しいウィンドウで表示されます。 このウィンドウは、他のすべてのウィンドウと同様に、タブでの表示、分割などが可能です。 ウィジェットを元に戻すには、以下のボタンを押します。

ここからは、実際にコードを試してみましょう。
以下のセルを実行します。

from arcgis.gis import GIS

# JupyterLab へ地図を表示する
gis = GIS()
map = gis.map()
map

Web マップ と Web シーン

Web マップ、Web シーン の両方とも、このボタンを使用することができます。

from arcgis.mapping import WebMap
webmap_item = gis.content.get("ab42b088573d4253a22a8b38ee698ccd")
webmap = WebMap(webmap_item)
webmap
from arcgis.mapping import WebScene
webscene_item = gis.content.get("421433baeb8d487b903d4a89df79149b")
webscene = WebScene(webscene_item)
webscene

プログラムによるウィンドウの制御

ここまではこの機能をマウスで実行しましたが、Pythonを使用して制御することもできます。 MapView ウィジェットの各インスタンスには、tab_mode プロパティと toggle_window_view() メソッドがあります。tab_mode を設定すると、地図ウィジェットの新しいウィンドウへの移動方法が変更されます。 この動作を試すには、以下のコードを実行してみてください。

# 対象の地図を表示する
map = gis.map()
map
# コメントをひとつずつオフにして実行し、map で表示している地図の UI ボタンを都度押してみてください。
# map.tab_mode = "split-bottom"
# map.tab_mode = "split-right"
# map.tab_mode = "auto"
# map.tab_mode = "tab-after"

UI ボタンによる新しいウィンドウでの地図表示は、toggle_window_view() メソッドを使用することでも制御できます。次のコードでは、マップが表示されたらメソッドを使用して新しいウィンドウで表示させます。新しいウィンドウに戻すときも、このメソッドを使用可能です。
以下のコードを実行してみてください。

from arcgis.widgets import MapView
# 対象の地図を表示する
map = MapView(gis=gis)
map
map.toggle_window_view()

タイトル(タブに表示されるテキスト)と tab_mode をメソッドを呼び出すたびに指定することも可能です。

# 対象の地図を表示する
map = gis.map(mode="3D")
map
# このセルを実行して、新しいウィンドウに地図を表示します
map.toggle_window_view(title="My 3D Map", tab_mode="split-top")
# ウィンドウを元に戻す
map.toggle_window_view()
import time

# このセルを実行して全てのタブモードの挙動を確認してみてください
tab_modes = ['auto', 'split-top' 'split-bottom', 'split-left',
'split-right', 'tab-before', 'tab-after']
for tab_mode in tab_modes:
    # 新しいウィンドウで開く
    map.toggle_window_view(title=tab_mode, tab_mode=tab_mode)
    time.sleep(4)
    # ウィンドウを元に戻す
    map.toggle_window_view()
    time.sleep(4)

最後に、3 つ以上の Web シーンを表示すると仮定した表示方法をご紹介します。各マップ ID で構成したリストから、1 度だけ処理を実行し、3 つの Web シーンを一度にすべて新しいタブに表示します。

#このセルの内容を1度で実行する
from arcgis.gis import GIS
from arcgis.widgets import MapView
gis = GIS()
for webscene_id in ['31874da8a16d45bfbc1273422f772270', '91b46c2b162c48dba264b2190e1dbcff', '46c47340708f446ba7f112f139e8ae5e']:
    webscene_item = gis.content.get(webscene_id)
    map = MapView(gis=gis, item=webscene_item, mode="3D")
    map.toggle_window_view(title=webscene_item.title, tab_mode='tab-after')

より詳細な情報は、マップ ウィジェットの API リファレンスを参照してください。