Java 用 Jupyter ノートブック

WBOY
リリース: 2024-09-11 06:31:33
オリジナル
823 人が閲覧しました

Jupyter Notebook の強力な点

Jupyter Notebook は、もともとデータ サイエンティストやエンジニアが Python プログラミング言語を使用してデータの操作を簡素化できるように開発された優れたツールです。実際、ノートブックはインタラクティブな性質を備えているため、開発環境、コンパイル、パッケージ化などをセットアップせずに、コードの結果をすぐに確認するのに最適です。この機能は、開発スキルがデータ操作の専門知識よりも重要視されていたデータ サイエンス、機械学習、統計モデリングでの採用において非常に重要でした。

利点

以下は Jupyter ノートブックの利点の一部です

  1. インタラクティブな開発: ノートブックを使用すると、開発者はコードを小さなチャンクに分けて記述し、すぐにテストして結果を視覚化できます。このインタラクティブなワークフローは、反復とデバッグの高速化を促進し、データ探索、アルゴリズム開発、迅速なプロトタイピングに最適です。
  2. 豊富なビジュアライゼーション: 通常、Notebook は、プロット、グラフ、その他のビジュアル出力をインラインで表示できる強力なビジュアライゼーション ライブラリと統合されています。
  3. ドキュメントとコードの統合: ノートブックは実行可能コードとマークダウン セルを組み合わせることで、開発者がコードを文書化し、ロジックを説明するなどして、より読みやすく保守しやすいコードベースを作成できるようにします。
  4. コラボレーション: ノートブックを共有することで、チームメンバーは開発環境をセットアップせずにコードをレビューして実行できるため、特に技術以外の関係者が関与する部門横断的なチームでのコラボレーションが容易になります。
  5. 再現性: ノートブックは上から下まで再実行できるため、分析やテストを一貫して再現できます。これは、デバッグ、テスト、結果の表示にとって非常に重要です。

まとめると次のように言えます

Jupyter ノートブックは、初期の調査から本番環境に対応したコードに至るまで、開発プロセスを合理化し、柔軟性とリアルタイムのフィードバックを提供します。

Pythonの壁を打ち破る

Jupyter ノートブックが提供する利点を考慮すると、ソフトウェア開発者がこのようなノートブックのアプローチを使用して、たとえばプロジェクトの ユース ケース テスト を開発したり、役立つ インタラクティブなハウツー を提供したりするのは素晴らしいことです。 🎜>。

ここでの質問は次のとおりです:

Python 以外のプログラミング言語に Jupyter Notebook を使用することは可能ですか?

答えは はいですか?

ジュピターのアーキテクチャ

Jupyter ツールは、カーネル の概念を通じて複数のプログラミング言語をサポートするように設計されています。以下の図を参照してください。

Jupyter Notebook for Java

カーネルは、Jupyter ノートブック サーバーがノートブック ドキュメント (.ipynb) 内でユーザーによって記述されたコードのブロックを評価する方法であるため、選択したプログラミング言語のコードを評価できるカーネルがあれば十分です。 Jupyter Notebook でサポートされています。
もちろん、Jupyter カーネルがサポートできる潜在的なプログラミング言語はすべて Read–eval–print Loop (REPL) 機能をサポートする必要があると推測するのは簡単です。

質問は次のようになります。

Python ONE 以外の Jupyter カーネルはありますか?

答えははいですか?

最近私は、Langchain によるエージェントおよびマルチエージェント ワークフローの作成に使用される Javascript ライブラリである、より有名な Langgraph.js の Java 実装である Langgraph4J に取り組んでいます。興味深い点は、[Langchain.js] が DENO Jupiter Kernel を利用した Javascript Jupyter ノートブックを使用して How-To を実装および文書化していることです。
そこで、同じアプローチを Java でどのように使用する (またはシミュレートする) かというジレンマに直面しました。そして、JDK 9 バージョンからはJava の REPL を有効にする JShell。

Java Jupyter カーネル

少し調べた後 (そして、DIY 実装に挑戦してみようという奇妙な考えも)、Java をサポートする Jupyter カーネルである rapaio-jupyter-kernel にたどり着きました。プロジェクトには次のように記載されています:

JShell に基づく Java 言語用の Jupyter カーネル。 Jupyter メッセージ仕様バージョン 5.4 を実装しており、Java = 22 が必要です。

それはすごいですね。使い始めて、すごい!?。その機能のいくつかを見てみましょう。以下に最も代表的なものをまとめました:

Java Jupyter ノートブックの機能


通常の Java を書くことができます。

var result = 2 + 2;
result
ログイン後にコピー

4

// including classes
record Complex(double a, double b) {
    public Complex add(Complex c) {
        return new Complex(a+c.a, b+c.b);
    }
}
Complex x = new Complex(10,20);
x.add(new Complex(1,1))
ログイン後にコピー

複素数[a=11.0, b=21.0]

// methods can also be implemented
int add(int a, int b) { return a+b; }
add(2,3)
ログイン後にコピー

5

Magic commands

Besides Java code, a cell can contain special commands implemented by the kernel. These are called magic code and there are two types: magic lines and magic cells.
Magic lines are lines which are prefixed with %. After the prefix it is followed by the magic command and the optional parameters. Below is an example of magic line:

// magic line which asks JShell to list the types defined in this notebook in this moment
%jshell /types
ログイン後にコピー

| record Complex

Magic commands interpolation

Sometimes there is a need to run a magic command in a more dynamic way. This can be done using magic interpolation.
Magic interpolation is the interpolation of marked content which starts with \{ and ends with }. Any content decorated with those markers is evaluated in jshell and the result is transformed in a String which replaces the decorated content in the magic command.

String version = "1.0.2";
ログイン後にコピー

 

%dependency /add com.github.javafaker:javafaker:\{version}
ログイン後にコピー

Adding dependency com.github.javafaker:javafaker:1.0.2

Dependency management ?

You can add dependencies using %dependency /add and after adding all dependencies you can call %dependency /resolve

%dependency /add com.github.javafaker:javafaker:1.0.2
%dependency /resolve
ログイン後にコピー

Adding dependency com.github.javafaker:javafaker:1.0.2
Solving dependencies
Resolved artifacts count: 5
Add to classpath: /home/ati/work/rapaio-jupyter-kernel/target/mima_cache/com/github/javafaker/javafaker/1.0.2/javafaker-1.0.2.jar
Add to classpath: /home/ati/work/rapaio-jupyter-kernel/target/mima_cache/org/apache/commons/commons-lang3/3.5/commons-lang3-3.5.jar
Add to classpath: /home/ati/work/rapaio-jupyter-kernel/target/mima_cache/org/yaml/snakeyaml/1.23/snakeyaml-1.23-android.jar
Add to classpath: /home/ati/work/rapaio-jupyter-kernel/target/mima_cache/com/github/mifmif/generex/1.0.2/generex-1.0.2.jar
Add to classpath: /home/ati/work/rapaio-jupyter-kernel/target/mima_cache/dk/brics/automaton/automaton/1.11-8/automaton-1.11-8.jar

When added you can import and use the dependency.

import com.github.javafaker.Faker;
var faker = new Faker();
faker.name().fullName()
ログイン後にコピー

Hayley Anderson

Resolving conflict dependencies

You there are conflicts you can manage them with optional. Let's take an example which have conflicts:

%dependency /add com.google.guava:guava:20.0 --optional
%dependency /add com.google.inject:guice:4.2.2
%dependency /add com.google.guava:guava:25.1-android
%dependency /resolve
ログイン後にコピー

Help on magic commands

The magic %help provides more examples and guidance.

JShell commands

Some JShell commands are implemented. For example you can inspect which variables are defined

%jshell /vars
ログイン後にコピー

or the types you defined in this session

%jshell /types
ログイン後にコピー

Execute bash commands

You can execute bash scripting commands. Here we display the java version number.

%%bash
java --version
ログイン後にコピー

openjdk 22.0.2 2024-07-16
OpenJDK Runtime Environment Corretto-22.0.2.9.1 (build 22.0.2+9-FR)
OpenJDK 64-Bit Server VM Corretto-22.0.2.9.1 (build 22.0.2+9-FR, mixed mode, sharing)

You can even define variables. In fact all the lines below cell magic marker are executed as a bash script.

%%bash
name="John"
echo "Hello $name"
ログイン後にコピー

Hello John

Show an image for immediate inspection

%image https://www.google.com/logos/doodles/2024/paris-games-sailing-6753651837110529.4-law.gif
ログイン後にコピー

Jupyter Notebook for Java

Display data

Jupyter notebooks uses outputs to display objects of various types. By default when an object is returned as the result of the last code operation, that result is displayed.
The object which is displayed can be anything. If the object has a display handler registered, than that renderer is used to transform the object into a displayable content. If there is no registered display handler than the object is transformed into a string and that will be displayed.
Previously we used magic commands to display an image. However for BufferedImages there is a registered handler and if you obtain an instance of a BufferedImage it will be displayed properly.

import javax.imageio.*;
display(ImageIO.read(new URL("https://www.google.com/logos/doodles/2024/paris-games-sailing-6753651837110529.4-law.gif")));
ログイン後にコピー

Displayed data has a mime type. You can use that to describe how the object should be interpreted. For example we display a markdown snippet and we direct the output interpretation of the snippet through MIME type.

display("text/markdown", "Markdown *test* **snippet**:\n* bullet 1\n* bullet 2")
ログイン後にコピー

Markdown test snippet:

  • bullet 1
  • bullet 2

display command returns an id which identifies the piece of output from the notebook which handles the display. Notice that we captured the id of the display. This id can be used to update the same display with a different content. For example we can update the content of that display with a html snippet, using the MIME type for interpretation.

String id = display("text/markdown", "Markdown *test* **snippet**:\n* bullet 1\n* bullet 2");
ログイン後にコピー

 

updateDisplay(id, "text/html", "Html <i>test</i> <b>snippet</b>:<p><ulist><li>bullet 1</li><li>bullet 2</li></ulist></p>")
ログイン後にコピー

A Java object is displayed as a String using Objects.toString. As such, if the object has an implementation of toString, that method will be called.

new Complex(10,Math.PI);
ログイン後にコピー

Complex[a=10.0, b=3.141592653589793]


结论

Jupyter Notebook 的多功能性超出了 Python 的范畴,rapaio-jupyter-kernel 等内核的集成为 Java 开发人员开辟了新天地。我最喜欢的功能是可以交互式地编写操作方法,在上下文中记录它们,但是有很多潜在的用例,这取决于您来探索它们,所以让我们探索一下并让我知道。

希望这些知识对您有所帮助,同时享受编码的乐趣! ? 

?我的 Java 笔记本实验在 Github 上吗? 


最初于 2024 年 9 月 6 日发布于 https://bsorrentino.github.io。

以上がJava 用 Jupyter ノートブックの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート