跳转到主要内容

将Observable笔记本连接到Jupyter内核,实现双向交互

项目描述

observable-jupyter-widget

在Jupyter中运行Observable笔记本,在Python和JavaScript之间发送值

Observable相当不错。但有时你需要Python!或者更常见的是,你已经有了Jupyter。如果你能在Jupyter中使用(或他人的)Observable笔记本,来回传递值会怎么样呢?

  • 允许Jupyter笔记本的查看者使用强大的Observable输入,如FIPS县代码笔刷,以交互式方式指定Python值(参见示例Colab笔记本
  • 在交互式D3图表上显示Jupyter中计算出的数据(查看画廊
  • 在observablehq.com上快速迭代数据可视化:发布Observable笔记本的更新,等待几秒钟,然后刷新Jupyter网页。没错,无需重启内核!
  • 或者创建强大的交互式小部件,无需构建web应用即可从Python请求更多数据。显示一个地图,当用户从具有大量RAM的服务端Jupyter内核平移地图时,请求更多客户端数据。

这个库与observable-jupyter类似,允许将Python值一次性输入到一个Observable笔记本中。与该库不同,此小部件版本允许发送新的输入,并将Observable单元格的输出返回到Python。它还与Jupyter小部件生态系统集成,例如,回调可以在嵌入中每次产生新值时运行。

用法

安装包并导入模块。

!pip install observable_jupyter_widget
import observable_jupyter_widget

实例化一个小部件对象,并在没有分号的单元格的最后一行写入变量名来显示它。

传入您想要渲染的Observable笔记本,可选地包括要显示的单元格,用于Observable笔记本中的替换输入的Python值,以及要报告输出值的Observable单元格。

w = observable_jupyter_widget.ObservableWidget(
    '@ballingt/embedding-example',
    cells=['vegaPetalsWidget', 'viewof minSepalLength', 'viewof minSepalWidth', 'extraCell'], # optional
    inputs={'extraCell': 123},  # optional
    outputs=['minSepalLength', 'extraCell']  # optional
)
w

小部件有一个.value属性,它是一个从Observable单元格中获取值的字典。

print(w.value)

使用redefine方法可以重新定义Observable输入为新值

w.redefine(extraCell=10000)

请参见示例Colab笔记本

限制

ObservableWidgets仅在屏幕上运行#2

出于安全考虑(防止嵌入的笔记本运行不受信任的Python代码),嵌入的Observable笔记本在一个iframe中运行。Observable运行时在