Aikの技術日記

技術的な進捗とか成果とかを細々と投稿するブログです。時々雑記も。

Jupyterについて調べてみました

はじめに

Pythonistなら知っている人もいるかもしれない「Jupyter」。
こちらを自分が扱っているプロジェクトに使うことは出来ないかと思い、Jupyterについて少しだけ調べてみました。

(結論から言うと、自分が扱っているプロジェクトには別のものを使うことになったのですがね…。
(ただ、せっかく学んだのにもったいないと言う貧乏心で、今回の記事を書こうと思ったわけです。

参考記事群

今回調べるにあたり、参考にさせていただいた記事を下記に残しておきます。

(正直いうと、今回の記事は特に自信がなく…自分がPythonistではないので、モチベが続かなかったっていうのが主要因ですかね。
(Jupyterについてもっと深く知りたいPythonistの方は、下記の参考記事を読む方が為になられると思います…。

IPython Notebook(Jupyter)って何ができるの? - Fire Engine
データ分析の必需品「Jupyter Notebook」の魅力とは - DeepAge

そもそもJupyterとは

まず、Jupyterとは何かについて見ていきましょう。
以下はJupyter公式ページの序文です。

Project Jupyter exists to develop open-source software, open-standards, and services for interactive computing across dozens of programming languages.

訳: Project Jupyterはオープンソースソフトウェアかつオープンスタンダードで、数十のプログラミング言語における、対話式コンピューティングのためのサービスを開発するために存在します。

※ちなみにオープンスタンダードについてはこちらを参考に:
オープンスタンダードが重要な理由 - ITmedia エンタープライズ

なお、このJupyterですが…以前はIPythonという名前だったそうで。
元々Pythonのためのものでしたが、各種言語でも扱える様にしたことで名前を変更したそうな…。

ちなみにJupyterと言う名前の由来は、対応することになった主要言語(Julia+Python+R)から取ったものらしいです。

また、Jupyterはプロジェクトとして運用されており、配下には様々なツールが存在します。
最も、ほとんどがJupyter Notebookを使いやすく運用したりするためのツールではありますが…。

Jupyterプロジェクトについて、詳しく知りたい方は下記をご参照ください。
https://jupyter.readthedocs.io/en/latest/architecture/visual_overview.html

Jupyter Notebookとは

Jupyter Notebookは、Jupyterプロジェクトの根幹部分であるものです。
以下はJupyter公式ページに書かれている紹介文です。

The Jupyter Notebook is an open-source web application that allows you to create and share documents that contain live code, equations, visualizations and narrative text.
Uses include: data cleaning and transformation, numerical simulation, statistical modeling, data visualization, machine learning, and much more.

訳: Jupyterノートブックは、ライブコード、方程式、視覚化、物語テキストを含むドキュメントを作成して共有できるオープンソースのWebアプリケーションです。
データの消去と変換、数値シミュレーション、統計モデリング、データの視覚化、機械学習などがこれに含まれてあります。

また、詳しい特徴としては下記をあげています。
※筆者が公式ページより意訳したものです。おそらく誤訳はしてないつもりではありますが…。

  • 多彩な言語サポート
    • 本Notebookは、Python, R, Julia, Scalaを含む40種類以上の言語をサポートしています。
  • Notebookのシェア
    • NotebookはemailやDropbox, GitHub, Jupyter Notebook Viewerを使ってシェアする事ができます。
  • インタラクティブ(対話的)な出力
  • 大規模なデータ統合
    • Apache Sparkなどの大規模なデータツールをPython、R、Scalaから活用します。pandas、scikit-learn、ggplot2、TensorFlowを使って探してみてください。

原文表示

  • Language of choice
    • The Notebook has support for over 40 programming languages, including Python, R, Julia, and Scala.
  • Share notebooks
    • Notebooks can be shared with others using email, Dropbox, GitHub and the Jupyter Notebook Viewer.
  • Interactive output
    • Your code can produce rich, interactive output: HTML, images, videos, LaTeX, and custom MIME types.
  • Big data integration
    • Leverage big data tools, such as Apache Spark, from Python, R and Scala. Explore that same data with pandas, scikit-learn, ggplot2, TensorFlow.

上記に挙げたうちの「インタラクティブ(対話的)な出力」と言うのが、Jupyter Notebookを強力なツールとしているもの…だと思います。
どう言うことかと言うと…。

まず、Jupyter Notebookでは、プログラムやメモは全て「セル」と呼ばれる単位で記述します。
普通にコードを書くタイプのセルや、Markdown型のセルを選んで、その中に自由に記述できます。

そしてこのセルを同一ファイルに記述出来るのです。
ちょっとしたメモ書きや、プログラムの説明をソースコードとともに書ける…素敵ですよね。

また、出力結果(表形式やグラフ描画のライブラリを使ってグラフィカルに表示も可能)も同一ファイルに記述されるので、1つのファイルを見るだけで…。

…が参照できちゃうのです。
これがJupyter Notebookが提唱する「インタラクティブ(対話的)な出力」…と言うものだと思います、多分。

筆者も試しにHello WorldプログラムをJupyter Notebookで書いてみました。
確かにこれはつおい…。

"Jupyter NotebookでのPython「Hello World」プログラム"
いい感じです

簡単なPythonプログラムを手っ取り早くやってみたい時や、Pythonの入門時にこれを使うといいかもですね!

筆者がやりたかったこと

さて、ここで筆者がやりたかったことを書きましょう。

筆者がやりたかったのは、Jupyter Notebookが持つ「ファイルのツリー構造表示機能」や「ファイルの編集機能」をRuby on Railsにくっつけることです。

(ぶっちゃけこれ言うと筆者が関わってるプロジェクトの方向性が見えちゃうことになりそうですが…。
(こ、根幹部分は言ってないので多分大丈夫なはずです、多分(震え)。

ただ、Jupyter Notebook公式ページにその様な記述もなく、またJupyter Notebookをその様に使っている記事は当然見られず…まぁそうですよね、これらは本ツールの付属機能ですからね。

もしかしたらJupyter Notebookのその辺りの機能は、他のオープンソースライブラリ等を用いて実装されているかもしれないと思い…。

ソースコードを覗いて、ツリー構造表示機能やファイル編集機能に使われているライブラリ等がないかも見てみましたが、ソースコードがCompact化されていたので、何とも手の打ちようがありませんでした。

コメントもないタイプだったので…独自ライブラリか何かを使っているのでしょうかね…?

結局…

色々検討した結果、Jupyter Notebookを本プロジェクトに使うのは止めることにしました。
幸いにも他のWebAPIを師に教えてもらったので、今後はそちらについて調べていこうかなと思っています。

また、Jupyter Notebookを調べているうちにPythonへの興味も少しだけ出てきたので…。
現状のタスクが片付いたら、Prograteとかで勉強してみようかなって思います。
(現状のタスクが終わればですが…(遠い目))。

ではでは|д゚)