どのようにIJavaカーネルでJupyterノートブックにTablesawグラフを埋め込むには?

ギャレットウィルソン:

私は埋め込みたいのですがTablesaw使用JupyterノートブックにインタラクティブなグラフをIJavaのカーネルを。私はTablesawはボックスのこのアウトを行うことができないかもしれないことを認識し、私はこれを実現するために少し努力をして喜びました。ので、私は確信してどこから始めればないんだけど、私は、Javaの専門家だが、私はJupyterノートへとIJavaカーネルに新たなんです。オブジェクトを埋め込むためJupyterノートブック用またはIJavaのためのいくつかのAPIはありますか?

すべての私の最初のアナコンダをインストールした後、何の問題もなくJupyterノートブックにIJavaカーネルをインストールしました。これまでのところ、それは、Windows 10上でのOpenJDK 11を使用して滞りなく働いています!次はTablesawを使用しようとしました。私は、そのMavenの依存関係を追加CSVファイルをロードし、プロットを作成することができました。非常に素晴らしい!

しかしTablesawはPlotlyを使用して、一時的なHTMLファイルを生成し、インタラクティブなプロットを表示するには、ブラウザを起動するグラフを生成します。言い換えれば、グラフはJupyterノートブック内に表示されません

Tablesawはあり埋め込まれたグラフを例使用BeakerXカーネル(ないIJava)を、そしてあなたが見ることができるように、彼らはTablesawを埋め込む(「線形回帰で遊ぶ(マネー)ボール」までスクロールダウン)Plot を直接Jupyterノートブック内私は概念的にJavaのカーネルでJupyterノートでインタラクティブTablesawグラフを埋め込むことを知っているので可能です。

BeakerXにこの能力を何か特定のですか?私はBeakerXに切り替えるだろうが、ドキュメントから、私はBeakerXサポートするJava 9+については何も表示されませんでした。またIJavaは直接JShellの上に構築された、スリムな実装のように思えました。

どこでTablesawの埋め込む方法を把握するために開始しますPlotIJavaカーネル、彼らはBeakerXでやっている方法を使用してJupyterノートブックにインタラクティブなグラフとしてオブジェクトを?

SpencerPark:

IJavaカーネルは2つの主な機能を持っていますdisplay_datadisplayそして、render両方のフックRendererからベースカーネル我々はのためのレンダリング機能を登録することができFiguretablesawからタイプ。

  1. 経由tablesaw-jsplot依存(およびすべての必要な推移の依存関係)を追加しloadFromPOM、細胞の魔法:

    %%loadFromPOM
    <dependency>
        <groupId>tech.tablesaw</groupId>
        <artifactId>tablesaw-jsplot</artifactId>
        <version>0.30.4</version>
    </dependency>
    
  2. 以下のためのレンダリング機能を登録するIJavaのレンダラ。

    1. 私たちは、のために登録を作成しますtech.tablesaw.plotly.components.Figure
    2. 出力タイプは、中に指定されていない場合、我々はそれがデフォルトにしたいレンダリングtext/html(とpreferringコール)。
    3. HTMLが要求されてレンダリングすると、我々はターゲットの構築<div>だけでなく、plotlyことにレンダリング呼び出すJavaScriptを<div>このロジックのほとんどはtablesaw者を介して行われるasJavascriptJupyterノートブックのに方法はなくフックrequireAMDモジュールのセットアップ。

    import io.github.spencerpark.ijava.IJava;
    
    IJava.getKernelInstance().getRenderer()
        .createRegistration(tech.tablesaw.plotly.components.Figure.class)
        .preferring(io.github.spencerpark.jupyter.kernel.display.mime.MIMEType.TEXT_HTML)
        .register((figure, ctx) -> {
            ctx.renderIfRequested(io.github.spencerpark.jupyter.kernel.display.mime.MIMEType.TEXT_HTML, () -> {
                String id = UUID.randomUUID().toString().replace("-", "");
    
                figure.asJavascript(id);
                Map<String, Object> context = figure.getContext();
    
                StringBuilder html = new StringBuilder();
                html.append("<div id=\"").append(id).append("\"></div>\n");
                html.append("<script>require(['https://cdn.plot.ly/plotly-1.44.4.min.js'], Plotly => {\n");
                html.append("var target_").append(id).append(" = document.getElementById('").append(id).append("');\n");
                html.append(context.get("figure")).append('\n');
                html.append(context.get("plotFunction")).append('\n');
                html.append("})</script>\n");
                return html.toString();
            });
        });
    
  3. その後、我々は(から取られたディスプレイにテーブルを作成することができTablesawドキュメント)。

    import tech.tablesaw.api.*;
    import tech.tablesaw.plotly.api.*;
    import tech.tablesaw.plotly.components.*;
    
    String[] animals = {"bear", "cat", "giraffe"};
    double[] cuteness = {90.1, 84.3, 99.7};
    
    Table cuteAnimals = Table.create("Cute Animals")
        .addColumns(
            StringColumn.create("Animal types", animals),
            DoubleColumn.create("rating", cuteness)
        );
    cuteAnimals
    
  4. 最後に作成することができFigure、テーブル用とIJavaで物事を表示するための3つの方法のうちの1つを介して、それを表示します。

    VerticalBarPlot.create("Cute animals", cuteAnimals, "Animal types", "rating");
    

    相当するrenderコール"text/html"我々は(好ましいタイプとして設定しているため暗黙的preferring登録時)

    render(VerticalBarPlot.create("Cute animals", cuteAnimals, "Animal types", "rating"), "text/html");
    

    それはセルの最後ではない場合や、display関数が別のオプションです。たとえば、チャートと表示させcuteAnimals、その後に:

    Figure figure = VerticalBarPlot.create("Cute animals", cuteAnimals, "Animal types", "rating");
    display(figure);
    
    cuteAnimals
    

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=215581&siteId=1