Heim >Java >javaLernprogramm >Jupyter Notebook für Java

Jupyter Notebook für Java

WBOY
WBOYOriginal
2024-09-11 06:31:33846Durchsuche

Das leistungsstarke Jupyter Notebook

Jupyter Notebooks sind ein hervorragendes Tool, das ursprünglich entwickelt wurde, um Datenwissenschaftlern und Ingenieuren dabei zu helfen, ihre Arbeit mit Daten mithilfe der Programmiersprache Python zu vereinfachen. Tatsächlich sind Notebooks aufgrund ihres interaktiven Charakters ideal, um die Codeergebnisse schnell anzuzeigen, ohne eine Entwicklungsumgebung einzurichten, zu kompilieren, zu verpacken usw. Diese Funktion war von entscheidender Bedeutung für die Einführung in Datenwissenschaft, maschinellem Lernen und statistischer Modellierung, wo Entwicklungskompetenz weniger wichtig war als Fachwissen in der Datenmanipulation.

Vorteile

Im Folgenden sind einige der Vorteile des Jupyter-Notebooks aufgeführt

  1. Interaktive Entwicklung: Mit Notebooks können Entwickler Code in kleinen Blöcken schreiben, ihn sofort testen und Ergebnisse visualisieren. Dieser interaktive Workflow fördert eine schnellere Iteration und Fehlerbehebung und eignet sich ideal für die Datenexploration, Algorithmusentwicklung und schnelle Prototypenerstellung.
  2. Umfassende Visualisierungen: Typischerweise ist Notebook mit leistungsstarken Visualisierungsbibliotheken integriert, die Diagramme, Diagramme und andere visuelle Ausgaben inline anzeigen können.
  3. Dokumentation und Code zusammen: Notebooks kombinieren ausführbaren Code mit Markdown-Zellen, sodass Entwickler ihren Code dokumentieren, Logik erklären usw. können und so besser lesbare und wartbare Codebasen erstellen.
  4. Zusammenarbeit: Durch die gemeinsame Nutzung von Notizbüchern können Teammitglieder Code überprüfen und ausführen, ohne eine Entwicklungsumgebung einzurichten, was die Zusammenarbeit erleichtert, insbesondere in funktionsübergreifenden Teams mit nicht-technischen Stakeholdern.
  5. Reproduzierbarkeit: Notizbücher können von oben nach unten wiederholt werden, um sicherzustellen, dass jede Analyse oder jeder Test konsistent reproduziert werden kann. Dies ist entscheidend für das Debuggen, Testen oder Präsentieren von Ergebnissen.

Zusammenfassend können wir das sagen

Jupyter-Notebooks optimieren den Entwicklungsprozess, von der ersten Erkundung bis zum produktionsreifen Code, und bieten Flexibilität und Echtzeit-Feedback.

Durchbrechen Sie die Python-Barriere

In Anbetracht der Vorteile, die Jupyter-Notebooks bieten, wäre es für Softwareentwickler großartig, einen solchen Notebook-Ansatz zu nutzen, um beispielsweise USE CASE TESTS für Projekte zu entwickeln oder nützliche INTERAKTIVE HOW-TO-Anleitungen.

Die Frage hier ist:

IST ES MÖGLICH, EIN JUPYTER-NOTEBOOK FÜR ANDERE PROGRAMMIERSPRACHEN ALS PYTHON ZU VERWENDEN?

Die Antwort ist

JA?.

Die Jupiter-Architektur

Die Jupyter-Tools wurden so konzipiert, dass sie durch das

Kernel-Konzept mehrere Programmiersprachen unterstützen, siehe Diagramm unten:

Jupyter Notebook for Java

Der Kernel ist die Art und Weise, wie der Jupyter-Notebook-Server vom Benutzer in das Notebook-Dokument (.ipynb) geschriebene Codeblöcke auswertet. Daher reicht es aus, über einen Kernel zu verfügen, der den Code der Programmiersprache Ihrer Wahl auswerten kann Es wird vom Jupyter-Notebook unterstützt.

Natürlich lässt sich leicht ableiten, dass jede potenzielle Programmiersprache, die ein Jupyter-Kernel unterstützen kann, die Read-Eval-Print-Loop-Funktion (REPL) unterstützen sollte.

Die Frage lautet:

GIBT ES ANDERE JUPYTER-KERNEL ALS PYTHON ONE❓?

Die Antwort ist

Ja?.

In letzter Zeit habe ich an Langgraph4J gearbeitet, einer Java-Implementierung des bekannteren Langgraph.js, einer Javascript-Bibliothek, die von Langchain zum Erstellen von Agenten- und Multiagenten-Workflows verwendet wird. Interessant ist, dass [Langchain.js] Javascript-Jupyter-Notebooks verwendet, die auf einem DENO-Jupiter-Kernel basieren, um Anleitungen zu implementieren und zu dokumentieren.

Also stand ich vor einem Dilemma, wie ich denselben Ansatz in Java verwenden (oder möglicherweise simulieren) sollte, und ohne große Hoffnung begann ich, nach einem Jupyter-Kernel zu suchen, der Java unterstützt, wenn man bedenkt, dass es ab der JDK 9-Version die Einführung von gab JShell, die die REPL für Java aktiviert hat.

Der Java Jupyter Kernel

Nach ein wenig Recherche (und dem seltsamen Gedanken, mich in eine DIY-Implementierung zu stürzen) bin ich bei rapaio-jupyter-kernel gelandet, einem Jupyter-Kernel, der Java unterstützt? Im Projekt heißt es:

Jupyter-Kernel für Java-Sprache basierend auf JShell. Es implementiert die Jupyter-Nachrichtenspezifikation Version 5.4 und erfordert Java = 22.

Es ist erstaunlich; Ich fange an, es zu benutzen und WOW!?. Werfen Sie einen Blick auf einige seiner Funktionen. Nachfolgend habe ich die repräsentativsten zusammengefasst:

Funktionen des Java Jupyter-Notebooks


Sie können normales Java schreiben.

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))
Komplex[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 ノートブックの多用途性は Python を超えて拡張され、rapaio-jupyter-kernel のようなカーネルの統合により Java 開発者にとって新境地が開かれます。私のお気に入りの機能は、状況に応じてインタラクティブに文書化する HOWTO を作成できることですが、潜在的な使用例が多数あり、それを探索するのはあなた次第です。そのため、探索してお知らせください。

この知識がお役に立てば幸いです。それまでの間、コーディングを楽しんでください。 ? 

?私の Java ノートブックの実験は Github にありますか? 


元々は 2024 年 9 月 6 日に https://bsorrentino.github.io で公開されました。

Das obige ist der detaillierte Inhalt vonJupyter Notebook für Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn