Buku Nota Jupyter ialah alat yang sangat baik, pada asalnya dibangunkan untuk membantu saintis data dan jurutera memudahkan kerja mereka dengan data menggunakan bahasa pengaturcaraan python. Malah, sifat interaktif buku nota menjadikannya ideal untuk melihat hasil kod dengan cepat tanpa menyediakan persekitaran pembangunan, penyusunan, pembungkusan dan sebagainya. Ciri ini sangat penting untuk diterima pakai dalam sains data, pembelajaran mesin dan pemodelan statistik yang kemahiran pembangunan kurang penting daripada kepakaran manipulasi data.
Di bawah ialah beberapa kelebihan buku nota Jupyter
Merumuskan kita boleh mengatakan bahawa
Buku nota Jupyter memperkemas proses pembangunan, daripada penerokaan awal kepada kod sedia pengeluaran, menawarkan kefleksibelan dan maklum balas masa nyata.
Memandangkan kelebihan yang menawarkan buku nota Jupyter, adalah bagus untuk pembangun perisian menggunakan pendekatan buku nota tersebut untuk membangunkan, contohnya, UJIAN KES GUNA untuk projek atau menyediakan CARA-CARA INTERAKTIF yang berguna.
Persoalannya di sini ialah:
ADAKAH MUNGKIN MENGGUNAKAN BUKU NOTA JUPYTER UNTUK BAHASA PENGATURCARAAN SELAIN PYTHON❓?
Jawapannya YA?.
Alat Jupyter telah direka bentuk untuk menyokong berbilang bahasa pengaturcaraan melalui konsep Kernel, lihat rajah di bawah:
Inti ialah cara pelayan komputer riba Jupyter menilai blok kod yang ditulis oleh pengguna di dalam dokumen buku nota (.ipynb), jadi adalah mencukupi untuk mempunyai kernel yang boleh menilai kod bahasa pengaturcaraan pilihan anda. ia disokong oleh buku nota Jupyter.
Sudah tentu, adalah mudah untuk menyimpulkan bahawa setiap bahasa pengaturcaraan yang berpotensi yang boleh disokong oleh Kernel Jupyter harus menyokong ciri gelung Read–eval–print (REPL).
Soalannya menjadi:
ADAKAH JUPYTER KERNEL SELAIN PYTHON ONE❓?
Jawapannya Ya?.
Kebelakangan ini saya telah mengusahakan Langgraph4J yang merupakan pelaksanaan Java bagi Langgraph.js yang lebih terkenal iaitu perpustakaan Javascript yang digunakan untuk mencipta aliran kerja ejen dan berbilang ejen oleh Langchain. Nota yang menarik ialah [Langchain.js] menggunakan buku nota Jupyter Javascript yang dikuasakan oleh Inti Musytari DENO untuk melaksanakan dan mendokumenkan How-Tos.
Jadi, saya menghadapi dilema tentang cara menggunakan (atau mungkin mensimulasikan) pendekatan yang sama di Jawa dan, tanpa banyak harapan, saya mula mencari Jupyter Kernel yang menyokong Java memandangkan, daripada versi JDK 9, terdapat pengenalan JShell yang mendayakan REPL untuk Java.
Selepas sedikit penyelidikan (dan pemikiran yang aneh untuk cuba memasukkan diri saya ke dalam pelaksanaan DIY) saya mendarat di rapaio-jupyter-kernel yang merupakan Jupyter Kernel yang menyokong Java ?. Projek menyatakan:
Inti Jupyter untuk bahasa Java berdasarkan JShell. Ia melaksanakan spesifikasi mesej Jupyter versi 5.4 dan memerlukan Java = 22.
Sungguh menakjubkan; Saya mula menggunakannya dan WOW!?. Lihat beberapa cirinya, di bawah saya telah meringkaskan ciri yang paling mewakili:
Anda boleh menulis Java biasa.
var result = 2 + 2; resultSalin selepas log masuk4
// 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))Salin selepas log masukKompleks[a=11.0, b=21.0]
// methods can also be implemented int add(int a, int b) { return a+b; } add(2,3)Salin selepas log masuk5
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 /typesSalin selepas log masuk| 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";Salin selepas log masuk
%dependency /add com.github.javafaker:javafaker:\{version}Salin selepas log masukAdding 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 /resolveSalin selepas log masukAdding 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.jarWhen added you can import and use the dependency.
import com.github.javafaker.Faker; var faker = new Faker(); faker.name().fullName()Salin selepas log masukHayley 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 /resolveSalin selepas log masukHelp 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 /varsSalin selepas log masukor the types you defined in this session
%jshell /typesSalin selepas log masukExecute bash commands
You can execute bash scripting commands. Here we display the java version number.
%%bash java --versionSalin selepas log masukopenjdk 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"Salin selepas log masukHello John
Show an image for immediate inspection
%image https://www.google.com/logos/doodles/2024/paris-games-sailing-6753651837110529.4-law.gifSalin selepas log masukDisplay 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")));Salin selepas log masukDisplayed 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")Salin selepas log masukMarkdown 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");Salin selepas log masuk
updateDisplay(id, "text/html", "Html <i>test</i> <b>snippet</b>:<p><ulist><li>bullet 1</li><li>bullet 2</li></ulist></p>")Salin selepas log masukA 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);Salin selepas log masukComplex[a=10.0, b=3.141592653589793]
Jupyter Notebook 的多功能性超越了 Python 的範疇,rapaio-jupyter-kernel 等核心的集合成為 Java 開發人員開闢了新天地。我最喜歡的功能是可以互動式地編寫操作方法,在上下文中記錄它們,但是有很多潛在的用例,這取決於您來探索它們,所以讓我們探索一下並讓我知道。
希望這些知識對您有幫助,同時享受編碼的樂趣! ?
?我的 Java 筆電實驗在 Github 上嗎?
原於 2024 年 9 月 6 日發佈於 https://bsorrentino.github.io。
Atas ialah kandungan terperinci Jupyter Notebook untuk Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!