在Jupyter扩展中访问数据对象

14

我为我的Jupyter Notebook创建了一个JavaScript扩展,可以为我绘制一些数据。目前,我在扩展内部将数据硬编码。

我的问题:有没有办法访问Notebook中存在的数据对象?

例如,下面是一个扩展的示例代码:

define([
    'base/js/namespace'
], function(
    Jupyter
) {
  function test_second_extension() {

    var handler = function () {
      console.log(
          'This is the current notebook application instance:',
          Jupyter.notebook
      );
      var data = [{"x": 1, "y": 5}, {"x": 2, "y":12}, {"x": 3, "y": 27}];
      console.log(data);
    };

    var action = {
        icon: 'fa-comment-o', // a font-awesome class used on buttons, etc
        help    : 'Print notebook instance',
        help_index : 'zz',
        handler : handler
    };
    var prefix = 'test_second_extension';
    var action_name = 'show-alert';

    var full_action_name = Jupyter.actions.register(action, action_name, prefix); // returns 'my_extension:show-alert'
    Jupyter.toolbar.add_buttons_group([full_action_name]);
  }

  return {
    load_ipython_extension: test_second_extension
  };
});

这是我在Python3 Jupyter单元格中的代码:

import pandas as pd
data = pd.read_json('[{"x": 1, "y": 5}, {"x": 2, "y":12}, {"x": 3, "y": 27}]')

有没有一种方法可以从扩展中访问在Jupyter单元格中创建的数据对象,而不是硬编码它?


请参考 https://jupyter-notebook.readthedocs.io/en/stable/examples/Notebook/Importing%20Notebooks.html。这可能会对你有所帮助。虽然没有解释为什么要创建自己的JS绘图扩展,但如果您想要一个交互式JS绘图包,可以考虑使用Bokeh。 - Trenton McKinney
你是指Jupyter的数据可以通过浏览器访问吗?这意味着它也可以在开发控制台中访问? - fcsr
@fcsr - 是的,基本上,Jupyter单元格中的数据可以从控制台访问(因此也可以从我的JavaScript扩展访问)。 - R.D.
@Trenton_M - 使用我们自己的JS绘图扩展的原因是为了快速显示我们设计的适合许多数据结构的常见数据图。目前我们在Zeppelin中已经实现了这个功能,但我们正在尝试切换到Jupyter。我还没有研究过Bokeh,我会尝试看看它是否适合我的用例。但我仍然很好奇是否有一种方法可以从javascript扩展程序的单元格中访问数据对象。 - R.D.
这里似乎有一个有用的回答:https://dev59.com/1p_ha4cB1Zd3GeqP7vZh - Michael B
1个回答

1
有点不太流畅,但试试这个。
from IPython.core.display import Javascript
import json

#list of dicts
list_of_dicts = [{"x": 1, "y": 5}, {"x": 2, "y":12}, {"x": 3, "y": 27}]

#convert to json string
json_list = json.dumps(list_of_dicts)

#run in cell
#This will run in the console check your browser
Javascript("""
var json_list = {};
window.variable = json_list;
console.log(json_list);""".format(json_list))

#or as a function
#replace console_log with what you need
def run_in_console(data):
    json_list = json.dumps(data)
    return Javascript("""
        var json_list = {};
        window.variable = json_list;
        console.log(json_list);""".format(json_list))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接