Jupyterと一緒に使います

ノートパソコンで働く

Jupyter ノートは計算可能な文書であり,通常探索的な作業,データ分析,授業,プレゼンテーションに用いられる.ノートは一連のものです セルを入力する これらは,セルの直後の出力を表示するために単独で実行することができる.他には 経典 ノートは、新しい方のためのノートもございます JupyterLab プロジェクトです。Bokehは独立サーバコンテンツを埋め込むこともできるし,Bokehサーバコンテンツを埋め込むこともできる.

独立出力.

独立したBokehコンテンツ(すなわち、Bokehサーバを使用しない)は、古典的なJupyterノートおよびJupyterLabに直接埋め込むことができます。

クラシックなノートパソコン

定番JupyterノートにBokeh図をイントラネットで表示しますので、ご利用ください output_notebook() 関数は(またはそれ以外)ではなく|boke.io|からのものである output_file() 私たちが以前見た機能。他の修正は必要ありません。いつ? show() 呼び出し時には,描画は次のノート出力セルにインライン表示される.木星のスクリーンショットを見ることができます

../../_images/notebook_inline.png

呼び出すことにより,単一のノート出力ユニット格に複数の描画を表示することができる. show() 入力セルでは複数回繰り返す.描画は順に表示される.

../../_images/notebook_inline_multiple.png

JupyterLab

BukehマップをJupyterLabに埋め込むためには、2つのJupyterLab拡張をインストールする必要があります。まず、インストール jupyterlab-manager 以下のコマンドを実行することで:

jupyter labextension install @jupyter-widgets/jupyterlab-manager

そして同じようにインストールします jupyter_bokeh 内線:

jupyter labextension install @bokeh/jupyter_bokeh

実装後,使用方法は上記の古典的なノートと同様である.

../../_images/joyplot_jupyter_lab.png

Bokehサーバアプリケーション

Plot EventsおよびBokehの内蔵ウィジェットをPythonコールバックコードに直接接続することができる完全なBokehサーバアプリケーションを埋め込むこともできます。見 Bokehサーバの実行 Bokehサーバアプリケーションに関する一般的な情報と、以下のノートにJupyterノートに埋め込まれたBokehアプリケーションの完全な例:

JupyterHub

JupyterHubインスタンスからノートを実行する際に、Bokehサーバアプリケーションを埋め込むためには、クライアントブラウザとJupyterLabユニットで動作するBokehサーバとの間のネットワーク接続を可能にするために、いくつかの追加のステップを実行する必要があります。これは、ブラウザがBokehサーバがリッスンしているポートに接続する必要があり、JupyterHubはブラウザとJupyterLabコンテナとの間のリバースプロキシとして機能するからです。上記のすべてのJupyterLabに従って動作を説明し,以下のステップを継続して実行する.

まず、インストールしなければなりません nbserverproxy サーバが拡張される。これは、以下のコマンドを実行することによって行うことができる。

pip install nbserverproxy && jupyter serverextension enable --py nbserverproxy

次に、Bokehサーバに接続するためのブラウザのURLの作成を支援するための関数を定義する必要があります。これが伝えられるのは show() 最後の一歩に。ここでは参考実装を提供しますが、環境変数を修正したり、定義したりしなければなりません。 EXTERNAL_URL JupyterHubがインストールしているURLに追加します。デフォルトの場合、JupyterHubは設定されます。 JUPYTERHUB_SERVICE_PREFIX それがそうです。

def remote_jupyter_proxy_url(port):
    """
    Callable to configure Bokeh's show method when a proxy must be
    configured.

    If port is None we're asking about the URL
    for the origin header.
    """
    base_url = os.environ['EXTERNAL_URL']
    host = urllib.parse.urlparse(base_url).netloc

    # If port is None we're asking for the URL origin
    # so return the public hostname.
    if port is None:
        return host

    service_url_path = os.environ['JUPYTERHUB_SERVICE_PREFIX']
    proxy_url_path = 'proxy/%d' % port

    user_url = urllib.parse.urljoin(base_url, service_url_path)
    full_url = urllib.parse.urljoin(user_url, proxy_url_path)
    return full_url

最後に、ステップ2で定義された関数を渡すことができます show() Notebook_urlキーワードパラメータとして、Bokehは、サーバを設定し、グラフィックスをロードするためのURLを作成する際にこのパラメータを呼び出す:

show(obj, notebook_url=remote_jupyter_proxy_url)

このとき、Bokehマップは、JupyterLab環境で定義されているpythonコールバックをロードして実行する必要があります。

ノートパソコンを信頼する

使用中のノートのバージョンによれば、ノートを閉じ、その後再オープンしたときにBokeh Plotを再レンダリングするために、“信頼”ノートが必要となる場合がある。“信頼ノート”オプションは、通常、“ファイル”メニューの下にあります。

../../_images/notebook_trust.png

ノートスライド.

It is possible to use a notebook in conjunction with Reveal.js to generate slideshows from notebook cell content. It is also possible to include standalone (i.e. non-server) Bokeh plots in such sideshows, however, some steps must be followed to correctly display the output. Primarily: the cell containing output_notebook must be not be skipped.

オブジェクトのレンダリングセル出力. output_notebook CallはBokehJSライブラリがロードされていることを確認する責任がある。これがなければ、Bokeh陰謀は機能しない。このセル格タイプをタグ付けすると “スキップ” BokehJSをロードすることもなく,Bokeh描画も表示されない.もしこのセルを隠したいなら、もう一つの方法はそれをマークすることです “備考” スライドタイプです。

ノートハンドル.

前に表示された描画をその場で更新することができる.議論するとき notebook_handle=True 伝達することができます show() すると,ハンドルオブジェクトを1つ返す.このハンドル対象は push_notebook() 関数は,最近の描画属性,データソース値などの任意の変更を用いて描画を更新する.此 notebook handle この機能は古典的なJupyterノートパソコンでのみサポートされており,JupyterLabやZeppelinでは実現されていない.

以下のスクリーンショットにノートハンドルの基本的な使い方を示す.

まず,標準関数および push_notebook()

../../_images/notebook_comms1.png

次にストーリーを作成して notebook_handle=True 至る show()

../../_images/notebook_comms2.png

ハンドルを見ると,出力セルに関連していることが分かる In[2] 先ほど示したのは

../../_images/notebook_comms3.png

今,描画のすべての属性を更新して呼び出します push_notebook() 使用ハンドル:

../../_images/notebook_comms4.png

この操作を実行した後、前の出力セルに注意してください In[2] もう変わりました( なし 再実行中)

../../_images/notebook_comms5.png

ノートハンドルを使用したより詳細なプレゼンテーションについては、以下のノートの例を参照してください。

木星相互動者

ノートの小さな部品を使用することができます(これを呼ぶ) interactors それがそうです。そのための鍵は push_notebook() 機能は上記のとおりである.通常,インタラクションの更新コールでは,小さな部品の値に応じて描画を更新するために呼び出される.のスクリーンショット examples/howto/notebook_comms/Jupyter Interactors.ipynb ノートの例を以下に示す.

../../_images/notebook_interactors.png

もっと例のノート

ノートを使用する他の例については、参照されたい bokeh-notebook 貯蔵庫です。まず、ローカルクローンリポジトリ:

git clone https://github.com/bokeh/bokeh-notebooks.git

そして,WebブラウザでJupyterノートを起動する.あるいは、すぐにオンラインで動作可能なリアルタイムノートは、ホストによって管理されています。 Binder それがそうです。

他にもノートがあります examples 大体のところ Bokeh 買い戻し:

ノート通信例:

ノート以外のIPyWidget

前節では,JupyterLabと古典的なノート環境でBokehを使用する方法を学習した.私たちが逆のことをしたいと仮定して、特に活力に満ちた木星生態系を利用する。 IPyWidgets なお,Bokehアプリケーションでは,これらの環境に制限されない.これは以下のような点で実現できる ipywidgets_bokeh Bokehの延長部:

$ conda install -c bokeh ipywidgets_bokeh

あるいは…。

$ pip install ipywidgets_bokeh

そして、BokehでIPyWidgetを使用することができます。 IPyWidget モデル化され、パッケージが文書に追加されるか、またはレイアウトに含まれる。これはJupyter以外で動作することを考慮して、インストールおよび/または拡張を有効にする必要はありません。

例を引く

単一のJupyterスライダを有するアプリケーションを作成し、スライダを操作する際にその値をコンソールに記録したいと仮定する。私たちはまず小さな部品を構築して観察者を配置しますこれはJupyterで行った動作と同じです

from ipywidgets import FloatSlider
angle = FloatSlider(min=0, max=360, value=0, step=1, description="Angle")

def on_change(change):
    print(f"angle={change['new']} deg")
angle.observe(on_change, names="value")

小さな部品をBokehと統合するためには、私たちはそれを包装しなければなりません IPyWidget

from ipywidgets_bokeh import IPyWidget
ipywidget = IPyWidget(widget=angle)

次にパッケージをBokeh文書に追加しました

from bokeh.plotting import curdoc
doc = curdoc()
doc.add_root(ipywidget)

このプログラムを実行するには,コードが保存されていると仮定する. ipy_slider.py 私たちは発行します bokeh serve ipy_slider.py (会いましょう) Bokehサーバの実行 (詳細は参照)。このアプリケーションはhttp://localhost:5006/ipy_liderで見つけることができます。

From here, one can create more complex layouts and include advanced widgets, like ipyleaflet, ipyvolume, etc. More examples are available in the Bokeh repository under examples/howto/ipywidgets.