Jupyter Notebookの利用方法

櫻川貴司 
この資料ではJupyter Notebookの利用方法を簡単に紹介します。但しリンク先の文献を参照して調べることや、Jupyterが動いてしまえば上方の[Help]メニューからその機能を知ることは簡単にできるので、それで必要十分という人もいらっしゃるでしょう。ここでは最初からそちらを読むよりももう少し手軽な概要の説明を目指しています。

以下に含まれる実行例はAnaconda3とその拡張ソフトウェアがインストールされているPCを前提にしています。 ただしインストール状況によっては説明中の一部の拡張機能を利用できない場合があります。 それらを試したい場合、BYODのPCに各種ソフトウェアをインストールして使用することを検討してください。

(注意: この資料では語句の説明の参照先をWikipediaにしている場合があります。)

Jupyter notebookとは

プログラムと文章、表、グラフ、画像を混在させて編集・実行できるフリーのソフトウェアであり、例えば以下のように利用できます。

  • メモ帳として。数式やグラフを混在できるし、それなりに美しく出力できます。
  • プログラマブル電卓として。数式やプログラムも結果の上に表示され、結果を文章中に埋め込んだりグラフ化して表示したりできます。
  • Markdownのエディタとして。それなりに美しく整形した結果をすぐに確認しながら文書を編集できます。
  • 簡易的なwebページのエディタとして。Markdown形式で入力した文章、プログラムとその結果のグラフ等をHTML形式に変換できます。
  • $\mathrm{\LaTeX}$(語句説明)のソースの簡単な作成エディタとして。HTMLの場合とほぼ同様に$\mathrm{\LaTeX}$のソースに変換できます。ただし現状では不具合も多く、後で修正が必要です。
  • 簡易的なプレゼンテーション資料作成エディタとして。プレゼンテーション中にプログラムを実行し、結果を表示できるところが大きな特徴です。

セミナー等のレジュメ作成、レポート作成、論文の草稿作成、各種資料の作成、種々のメモの作成には非常に便利です。本格的な長いプログラムを作成する時には必ずしも適していない場合もあるでしょうが、定規や色鉛筆を超える機能を持った文房具としてのプログラムを作成して資料の体裁を整えることや、短いプログラムを実験的に作成して試すには向いています。機械学習やデータ処理の実験のプログラム作成と記録には多くの場合に適しています。この資料自身もJupyterを用いて作成しました。

歴史

文章とプログラムを混在させて記述するというプログラミングスタイルは、 D. Knuthによる文芸的プログラミングというプログラミングパラダイムに遡れます(1983年投稿の論文、Knuth著「文芸的プログラミング」(1994)もあります)。 そこではプログラムを文芸・芸術作品の一種としてそのドキュメントとともに同時作成するという考え方をします。 プログラマはプログラムを書く際の思考過程に沿う形でプログラムとドキュメントを記述していきます。 Knuthはそのようにして$\mathrm{\TeX}$(語句説明)の処理系を記述しました。 当時行われたのはPascalのコード生成と、ドキュメントとしては$\mathrm{\TeX}$のソースの生成です。

その後有料ソフトウェアであるMathematicanotebookインタフェースが組み込まれました(1988年頃)。 有料の数学ソフトウェアには同様の機能を組み込んだものがいくつかあります。 これらは文芸的プログラミングを(少なくともある程度)行える環境となっていますが、 実際の使われ方は紙のノートでやるように雑多な式の変形を行ったり、 グラフを描いたり、 アイデアを書きとめたり、 メモ的な使い方をしたりします。 芸術的な指向性で使うという場面はむしろ少ないかもしれません。

現代的なnotebookは文章、データ、プログラム、グラフ、表、画像等を混在させて編集・表示できるものであり、 データやプログラムを少し改変して何度も試すことが簡単にできます。 プログラムの処理結果をグラフ等の形で文章と混在させて表示できます。 これは定規やコンパス、色鉛筆等の文房具を使って紙のノートにグラフを書き込んでいたのを、 代わりにプログラムにそれをやらせているわけです。 紙のノートの場合よりはるかに正確かつ精密にグラフや画像を表示させることができます。

実現方法は、Notebookのデータ処理を行うサーバがあり、操作はwebブラウザから行います。また多人数でnotebookを閲覧・共有することも一部で可能になっています。 Notebookインタフェースは数学系・データ分析用のソフトウェアでの利用が多かったと言えますが、 プログラミング入門や他の領域でも微修正を行いつつプログラムを書く場合に特に適しているため、利用が広がりつつあります。

Jupyterは元々、Pythonをwebブラウザ上でで対話的に実行するIPythonという環境があり、 それの処理系部分を切り離して多言語対応を可能にしたもので、 notebookの利用が可能となっています。 その名称は主要な対象言語であるJulia、Python、Rから来ています。 他に機能が類似したシステムとしてはApache Zeppelinがあります。

将来

(この項目には未説明の用語が色々出てきますので、後で読み直していただけた方がよいかもしれません。)
上の節で説明しましたように、 プログラムを(ある程度本格的な)文章や他のデータとともに記述するというスタイルは結構前からありました。 しかしフリーソフトウェアとして現在の形態のものが出てきたのは比較的最近です。 Notebook形式の便利さが世の中に十分に認識されると、 今後はフリーを含めて類似ソフトウェアが増えてくることが考えられます。 競争が激しくなれば自然に機能競争も起きてくるでしょう。

Jupyterは非常に便利なフリーソフトウェアであり、 さまざまな拡張機能が開発され、追加されています。 それでもさらに追加されると便利な機能がいろいろあると考えられます。 また、拡張機能があっても最新のJupyterとの互換性が十分に確認されていないものが多い状況にあります。 例えば編集機能は、小さいプログラムを編集するには十分かもしれませんが、 vimEmacs(両者の機能にも考え方の違いから大きな差があります)と比べると、 もう少し機能を増やしたいと思うことはあるでしょう。 またデバッガ的な機能も本格的な開発環境のデバッガと比べると差があります。 この面では言語による差があり、ソースでのエラー箇所がわかりにくいと特に機能差が目立ちます。 Notebook環境にデバッガをうまく統合することができればもっと使いやすくなるでしょう。 これらは開発環境という面では重要ポイントであり、短期的にも更なる改良が行われることが望まれます。

Notebook形式のインタフェースに表計算を統合する、という拡張も考えられます。 表計算は、プログラミングという名の付く学習を必ずしもしなくても 計算機にある程度自由な計算をさせられる優れたインタフェースであり、登場当時画期的なものでした。 現在のJupyterでは表計算のシートをnotebookの一部として埋め込んで類似の使い方をすることはできません。 統合すれば、日常の文房具的な計算機利用のかなりの部分をカバーすることになります(授業等でも表計算ソフトを別にやらなくてよくなります)。 しかしこの方向性の拡張には、kernelの言語で同じ計算処理と結果の表示が可能なのだから必要ない、 あるいはデザイン上の思想に合わない、という反対意見もあるかもしれません。 また、入れるにしても主にJupyterの側に入れるのか、 kernelの言語のライブラリとして入れるのか、 その時に言語の拡張をした方が綺麗に入るのか、 など多くの選択肢があり、設計上の議論点が多くあります。

次に少し長期的な話です。 過去に属する技術であって以前からnotebookにおいて実現可能だがまだ実現されていないこともいろいろあります。 しかしNotebookインタフェースの未来がどのようなものになりえるのか、 まだ実現途上の技術も含めて考えてみます。 またここでは専門家だけでなく一般の人にとって意味がある可能性があるものも含めます。

まず音声インタフェース等を組み込んだものを作ることができるでしょう。 数式やプログラムの音声入出力、 またスマートフォンやタブレット等で数式や図形などを手書き入力して$\mathrm{\TeX}$のソースを得たり、 曲線の方程式を得たりなどの技術を開発して統合することが考えられます。 VR,AR技術等の応用も考えられ、notebookの操作や結果の表示・表現に大きな変革の可能性があります。 またこの方向性ではnotebookという形態・メタファーそのものも変わるかもしれません。 人工知能の様々なアプリケーションへの応用の一環として、 様々なアシスト機能がついたものが出てくる可能性があります。 Markdownセルの自動翻訳は、読むだけであればwebブラウザの機能として実現できそうですが、 セル内容を使用言語の異なる利用者が編集すると元原稿の言語の文章に反映されるようなものも考えられます。 SNSと統合してプログラムや数式の質問を容易に行えるようにすることもできるでしょう。 数式やプログラム、データの類似検索のインタフェースとしても適していると考えられます。

仕組み

クライアントサーバモデルで動作します。 クライアントはEdgeやChrome、Firefox等のwebブラウザであり、Jupyterサーバがローカル(ここではクライアントが動作しているPCのことをローカルと言っています。通常は目の前にある場合が多いでしょう)あるいはリモート(ローカル以外のPC)で動作してそれらの間で通信が行われます。

入力・表示以外の処理はサーバが行う

サーバはnotebookの状態を保持し、それの表示を計算してHTML等に変換し、クライアントのwebブラウザに送ります。WebブラウザはそれをユーザのPC画面に表示します。その際にはJavascriptのプログラムが多用されます。これは通常のwebサーバとクライアントの関係とほぼ同じです。通常のwebページの場合との違いはnotebookの内容をクライアント側からほぼ完全に変更・編集可能なのと、やはりクライアント側から任意のプログラムを編集・入力してサーバ側で実行可能であることです。プログラムの実行結果はクライアント側に送られて表示されます。

Kernelがプログラム部分を実行する

Notebook内のプログラムはサーバ側のkernel(Jupyterサーバの、プログラムを実行する部分)で実行されます(計算機関係ではkernelという言葉が他の意味でも用いられるので注意してください)。 Kernelはnotebookごとに異なりえます。一つのnotebookに対応するkernelは一つだけですが、途中で切り替えることは可能です(実際にはあまりしません)。通常、notebookの画面の右上に言語(kernel)名が出ています。ある言語をJupyterで実行するには、そのプログラミング言語のkernelを予めサーバ側にインストールしておく必要があります。使っているJupyterサーバでどのようなkernelが既インストール済みなのかを見る方法は後で述べます。

インストール方法(ローカル)

最も単純にはJupyterサーバをクライアントと同じローカルPCで動かします。そのためにはローカルPCにJupyterサーバをインストールしておく必要があります。メディアセンタのPCの場合にはWindowsにAnaconda3がインストールされており、Jupyterもそれに含まれています。それを利用する、つまり言語としてPythonを使用するのであればメディアセンタのPCの場合、ユーザはインストールする必要はないです(ただしインストール状況によっては一部の拡張機能を利用できない場合があります)。またJuliaなど他の言語を利用したくて、その言語のインストールパッケージにJupyterが含まれている場合には、それをインストールすれば利用できるはずです。ただしJuliaはインストール済みなのに、Julia用にはJupyterを利用できない状況になっている場合があります。

以下では主にBYODのPCにPythonの処理系をインストールすることでそれに含まれるJupyterをインストールする例を紹介します。ただしBYOD以外の場合にも適用できる部分は多いです。Juliaをインストールして使用したい場合の資料は別に用意してあります。

BYODのPCへのインストールについて

BYODのPCの場合、少なくとも購入時点ではJupterはインストールされておらず、インストールの必要があります

AnacondaをインストールすることでJupyterをインストール

簡単でお勧めなのはAnacondaというPythonディストリビューションをインストールすることで、こうするとJupyterがAnacondaに含まれているので同時にインストールされ、動作可能になります。当然Pythonも(Jupyterからも)利用可能になります。Anacondaを利用している人は多いので、ネットで検索して情報を得るのも容易です。

但し、注意点があります。AnacondaにはPythonの処理系が含まれていますので、 インストールするとデフォルトで動作するPythonのversionが変わる可能性があり、 すでに利用しているPythonのプログラムによっては問題が生じる場合があり得ます。

Pythonのversionをどうするか

Anacondaをダウンロードする際にはPythonのversionをどうするかを決める必要があります。初めてPython(Anaconda)をインストールし、特に他に使いたいPythonのソフトウェアがない場合にはPython3の方のAnacondaをインストールしてください。これはやはりこれからは新しい言語仕様のPythonが使われるようになっていくだろうからです。ただし過去に作られたソフトウェアでPython2を利用しているものを使いたい場合には考えないといけません。

後述するようにPythonの言語仕様は様々に分岐しており、実行したいアプリケーションによってどのディストリビューションをインストールするかが変わってきます。特にメジャーversionが違うPython2と3ではかなり言語仕様が異なっているために、3の処理系では2の方のプログラムを実行できない場合が数多くあります。また、一時期最新版のAnacondaでインストールされるPython3.6ではTensorflowが動作しなかったように、versionの細かい違いに注意しないといけない場合もあります。この場合には一つ前のversionのAnacondaをインストールするか、仮想環境としてPython3.5のものを用意する必要がありました。Versionの異なるPythonを利用する複数のアプリケーションを使う場合のために、Pythonのversion切り替えのソフトウェアも(こちらも複数)開発されています。どのversionのPythonを使うべきか考えないといけない場合や仮想環境などにより複数のPythonを使い分ける必要がある場合はこの資料の守備範囲外とします。例えばpyenvを使用してユーザのホームディレクトリ内にAnacondaをインストールし、それのJupyterを利用することも可能ですが、ここでは詳しくは述べません。

ややこしい状況

このようにややこしくなっている理由は、開発が非常に活発なため、Jupyterも含めてPython系の処理系側のソフトウェアは仕様やインストール形態の分散が激しく、同じ名称のソフトウェアが何通りもの版があってそれぞれそれなりに使われていたり、OSによってインストールのされ方が異なっていて同じソフトウェアがファイルシステム中の異なる場所にインストールされたりしてしまう場合があるということです。版の違いについてはそれを吸収するためのソフトウェアが別に提供されていたりもします(pyenvなど)。Aというソフトウェアをインストールした後でBという別のソフトウェアをインストールしたらそれに2種類のJupyterがインストールされてしまった、ということが起こり得ます(例えばA=Jupyterを含むAnaconda以外のソフトウェアで、B=Anacondaとするとこうなる場合があり得ます)。AとBが衝突せず別物として動作し、協調して動くべきところはちゃんとそうなればよいのです(例えばAとBがプログラミング言語だとして、Jupyterからそれらをうまく選択できるなど)が、そううまくいくとは限りません。うまくいかない場合は問題解消に苦労することになります。

以下、まずはインストールからコンソールでの初回起動までをOSごとに記します。なお表示されるversionや種々のデザイン等は時期によって異なります。あるいは全く違った方法でインストールするように変わる可能性もありますのでもしそうならリンク先を読むなり検索するなりして調査してください。注意点として、webブラウザでファイルをダウンロードした後ウイルススキャナのパターンファイルを更新してからダウンロードしたファイルを必ずスキャンするようにしてください。

インストールには3-4GB程度の空き領域が必要です。

WindowsへのAnacondaのインストール

Installing on Windows を参照してそれに従ってインストールします。 簡単には、GUI版インストーラの方を使うとよいでしょう。 ファイルをダウンロードしてスキャン後、ダブルクリックしてインストーラを起動します。 インストールの途中、以下の選択肢が出ます。

  1. Just Me (recommended)
  2. All Users (requires admin privileges)

1の場合にはインストーラを起動したユーザのホームディレクトリ内にインストールされます。 BYODのPCではない場合、 例えば教育用計算機システムなどの場合には、 利用できる記憶領域が限られていることがあり、 1を行なって問題が生じないか検討する必要があります。

2の場合にはインストール先の位置が通常はC:\Program Filesなどとなります。 インストール先への書き込み権限が必要であり、 管理者権限の認証を経ることになります。 一箇所にインストールされて他の多くのアプリケーションと同様に複数ユーザで共用できます。

MacへのAnacondaのインストール

Installing on macOSを参照してそれに従ってインストールします。 簡単には、GUI版インストーラの方を使うとよいでしょう。 ファイルをダウンロードしてスキャン後、ダブルクリックしてインストーラを起動します。 インストールの途中、以下の選択肢が出ます。()内は薄く表示され、選択できません。

  1. (このコンピュータのすべてのユーザ用にインストール)
  2. 自分専用にインストール
  3. 特定のディスクにインストール

2の場合にはインストーラを起動したユーザのホームディレクトリ内にインストールされます。 利用できる記憶領域が限られている教育用計算機システムなどの場合、 2を行なって問題が生じないか検討する必要があります。 BYODのPCの場合には2以外にすれば複数ユーザで領域を共有できます。

3の場合にはインストール先の位置として通常は/optなどを指定します。 インストール先への書き込み権限が必要であり、 通常管理者権限のあるユーザで行います。 うまくいけば一箇所にインストールされて他の多くのアプリケーションと同様に複数ユーザで共用できます。 但しAnacondaのバージョンによって1の選択肢が消えている場合、 必ずしもサポートされていない可能性があり、 実際その後一般ユーザで実行するとエラーが出る場合があります。 これはエラーメッセージが特定するファイルのあるディレクトリ内のファイル達の許可の問題である可能性があります。 原因がそれであれば、管理者権限のあるユーザでファイル達の許可を他のユーザからも読み込み可能に変更してやるととりあえず動作する様です。 但し繰り返しますがうまく動作しない部分があるかもしれませんし、 他の問題も出てくるかもしれません。

許可の変更例(ターミナルで実行):

\$ sudo find /opt/anaconda -perm 0600 -exec chmod go+r {} \;↩︎

パス: /opt/anacondaは実際のインストール先に変更してください。 インストール後、それぞれの場合に応じ、実際に使用する各ユーザで環境変数PATHについて以下の設定を~/.bash_profileの最後に追加して再ログインしておきます。これらは自動で追加される場合もあるかもしれません。
 2. export PATH=~/anaconda/bin:${PATH}
 3. export PATH=/opt/anaconda/bin:${PATH}
自分で追加する場合、anaconda/binの場所が正しいかどうか確かめる必要があります。

Linuxへのインストール

Installing on Linuxを参照してそれに従ってインストールします。 WindowsやMacの場合と同様に自分専用(install as a user)か共用かの選択があります。 共用の場合には管理者権限が必要です。

MIT-SchemeやSageMathを追加する場合

例えばWindowsでMIT-Scheme(のkernel)やSageMathを後から追加する場合には問題含みの面があり、うまくインストールされているPCもあるでしょうが、それらと同様の水準で動作するようにBYODのPCに楽にうまくインストールできるかどうかはわかりません。環境やインストールする時期(パッケージの版)によっても難易度は変わると考えられます。その部分についてはここでは述べません。

Jupyterサーバの起動方法(ローカル)

Anacondaをインストールした場合、WidnowsであればメニューにJupyter notebookという項目があるなら、それを選択します。あるいはコマンド・プロンプトやPowerShell、MacやLinuxであれば仮想端末にjupyter notebookと入力し実行します。するとwebブラウザが立ち上がり、以下のような表示となります。 jupyter1.png コマンドとしてjupyterを動かした場合には、Jupyterサーバがその時のカレント・ディレクトリ内部しか参照できなくなりますので注意してください。

インストール方法(リモート)

これについて詳しくは省略します。これはリモートから利用できるJupyterサーバを運用しようという話であり、それなりに分かっている人が行うことですし、セキュリティ上の対策も必要で、この資料で扱う範囲を超えています。

リモートからJupyterサーバを最も簡単に利用するには、サーバの設定は特にいじらずにローカルにしか接続できない設定のままとしてsshのポートフォワーディングによるのが楽でしょう。 もちろんsshやファイアウォールの設定はセキュリティを考慮して正しく行う必要があります。

多人数で同一サーバのJupyterを使うにはJupyterHubがあります。

Notebookの利用

この節ではnotebookの利用方法について簡単に説明します。

新しいnotebookの作成

右上の[New]からkernelを選択します。例えばPython 3(3は表示されていない場合もあります)を選択すると、実行できるのはPythonで書かれたプログラムということになります。この時表示されるkernelが既にインストールされているkernelということになります。 Kernelを選択すると次のページが開きます。 タイトルから下2行目の、アイコンが並んでいる部分が(もしあれば)それはToolbarであり、 1行目のメニューから選択する操作の一部等をクリックにより実現しています。 Toolbarのボタンやキーボードショートカットの方が操作は楽だったりしますが、 以下では主にメニューによる操作についてのみ記述します。 jupyter2.png

Notebookが表示されたら、まず[Help]メニューの[User Interface Tour]を選択してください。 ポップアップした表示の右下のボタンをクリックしてゆくと、 基本的なユーザインタフェースの説明が表示されます。 [Help]メニューには[Keyboard Shortcuts]や種々のヘルプの項目があり、 それらを選択すれば詳しい使い方が表示されます。 それらのうちMarkdownは節タイトルや強調、リンク等を入力する方法のまとめであり、 下の方は言語の説明になっています。 また[Help]→[Abount]を選択するとJupyter等のversionを確認することができます。 この資料はversion 5.0.0のnotebook serverに基づいています。

Notebookの編集

新しいnotebookでは最初最下行にIn [ ]:とその右側の枠が表示されます。これをセルと言い、notebookで入力・編集・実行する単位となります。セルにはtypeがあり、例えばプログラムのCodeなのかMarkdownなのかを指定します。当初はCodeのtype、すなわちプログラム(の断片)となっています。ここにプログラムを書いて編集できます。もちろんその時にkernelに設定されている言語として正しくないと、実行した時にエラーとなります。

EditモードとCommandモード

Notebookの状態としてeditモードとcommandモードがあります。editモードではセルの中身を編集します。Commandモードではセルの挿入、削除、コピー、移動、分割等のnotebookレベルの編集を行います。 右上に「E」と表示されていて、セルの左端の縦線が緑色で、セルの中にカーソルが表示されているならeditモードで、セルの中身を編集できます(色に関しては後述のテーマを変えると変化します)。カーソルキーも使えます。入力を終えて[Shift]+↩︎を押し、セルの中身を実行もしくは整形表示してみてください。Code typeのまま実行すると正しいPythonのプログラムでないとエラーとなるはずです。エラーが出ても問題ありませんが気になるならMarkdownに変更するとよいでしょう。Commandモードでは右上の表示が「C」に変わり、選択しているセルの左側の縦線が青色になります。この状態では[Edit]メニューから選んだ操作などを実行できます。[Help]メニューの[Keyboard Shortcuts]を参照すると両モードで編集等のために利用できるキーボードの操作の概要が表示されます。これはメニュー中の[Edit Keyboard Shortcuts]により変更することが可能です。

Markdown

Markdownというのはmarkup言語の一つです。 Markupとは文章の表示の仕方や構造を指定することであり、 それを行うための他の言語としては例えば$\mathrm{\TeX}$やHTMLがあります。 Markdownは非常に簡単に指定を行えるのが特徴です。 しかし複雑な指定を行いたい部分に関しては他の高機能なmarkup言語の機能を取り込めるようにすることで補っています。 この名称は指定が(人間にとって)煩雑になりやすい他のmarkup言語を意識して洒落で付けた名称だと考えられます。

WordやWriterなど通常のワードプロセッサのソフトウェアはいわゆるWYSIWYG方式となっています。 それに対しMarkup方式の場合にはWYSIWYGとは異なり、markupのためのキーワードや記号が文章に混じることになります。 しかしMarkdownの範囲で済む場合には非常に簡便な指示が混じるだけで済みます(他の言語の機能を取り込んだ場合は別)。 またnotebook形式のMarkdownエディタの場合には一瞬で表示結果を確認することができ、 使い勝手はWYSIWYG方式に近づいています。

セルのtypeをMarkdownにするには対象セルを選択しておいてメニューの[Cell]→[Cell Type]→[Markdown]を選択します。すると左側のIn [ ]:が消え、Markdown typeとなります。同様に[Code]を選択するとプログラムのコードを入力するtypeに設定できます(戻せます)。

コマンドモードでTypeがMarkdownのセルの内容が整形表示されている時、 そのセルをダブルクリックすることでMarkdownソースが表示されます。 この状態でさらにクリックすると編集モードになり、中身を編集することができます。

[Help]→[Markdown]から少し辿った先のBasic writing and formatting syntaxにおおよその基本的な書き方を説明してあります。 またMarkdownという単語を検索すれば多数の説明が見つかるでしょう。 但しMarkdownには方言が多く、記述されている全ての機能がサポートされているとは限りません。 実際にそのように記述して表示されるかどうか試してみてください。 この資料のように元がJupyter Notebookであるとわかっているページなら それを実現するMarkdownの記法があると考えられます。 例としていくつかの記法について述べておきます。

セクションタイトル(節の題目)

行頭に1から6個の#とその後に空白とタイトルを入れます。 数が多いほど低い階層の区切りを意味します。

# タイトル1

タイトル1

## タイトル2

タイトル2

###### タイトル6
タイトル6

強調

*イタリック*と**太字**です。

イタリック太字です。

**太字中の_イタリック_と**、~~打ち消し線~~。

太字中の_イタリック_と打ち消し線

HTMLを使った<u>アンダーライン</u>と<font color="red">赤字</font>。

HTMLを使ったアンダーライン赤字

引用とコード

> この部分は  
> 引用です。

この部分は 引用です。

` ` ` (3連続`とすること)
int x;
x = x + 1;
` ` `
int x;
x = x + 1;

箇条書き

- 点で始まる箇条書き。
- 2行目。
  • 点で始まる箇条書き。
  • 2行目。
1. 番号付け。
1. 行頭の1は他の数字でも構いません。
    1. 2レベル目
    1. 2レベル目の2行目
  1. 番号付け。
  2. 行頭の1は他の数字でも構いません。
    1. 2レベル目
    2. 2レベル目の2行目

リンクと画像

[テキスト](usage+of+jupyter+notebook.html)

テキスト

括弧内はURLあるいはサーバ内の相対パスです。

![画像非表示の場合の代替表示文字列](test.png)

画像非表示の場合の代替表示文字列

カッコ内はURLあるいはサーバ内の相対パスです。 ファイルが存在しないと代替表示文字列が表示されます。

| 無指定 | 左詰     | 中央揃 | 右詰 |
|--------|:-----|:------:|-----:|
| n1.    | l1.  | c1.    | r1.  |
| n2.    | l2.  | c2.    | r2.  |
| $\int_1^2x dx$ | $\left(\begin{array}{cc}1&2\\3&4\end{array}\right)$ | <font color="red">赤</font> | **太字** |
無指定 左詰     中央揃 右詰
n1. l1. c1. r1.
n2. l2. c2. r2.
$\int_1^2x dx$ $\left(\begin{array}{cc}1&2\\3&4\end{array}\right)$ 太字

(数式部分については以下の$\mathrm{\LaTeX}$による数式入力の項目を参照してください。)

その他

改行は行末の連続空白。

行末に空白を2つ入れています。  
すると改行します。
空白を入れないとこの行のように前の行とつながります。

行末に空白を2つ入れています。
すると改行します。 空白を入れないとこの行のように前の行とつながります。

$\mathrm{\LaTeX}$形式による数式入力

部分的に$\mathrm{\LaTeX}$形式で入力することも可能であり、基本的には数式部分をこれで記述します。ただし任意の$\mathrm{\LaTeX}$コマンドを利用できるわけではなく、ごく限られた命令しか使えません。例えば\usepackageや\tabularなどは使えません。簡単な表がMarkdownの機能の方でサポートされています。\array(の一部の機能)は使えます。 これらはMathJaxというライブラリを用いて実現されています。

$$\int x^3dx = \frac14x^4+C, \qquad A=\left(\begin{array}{cc}a&b\\c&d\end{array}\right)$$
$$\int x^3dx = \frac14x^4+C, \qquad A=\left(\begin{array}{cc}a&b\\c&d\end{array}\right)$$

一部にHTMLのコードを直接書くことも可能です。

<div style="text-align:center;">中央揃え</div>
中央揃え
<div style="text-align:right;">右揃え</div>
右揃え

セルの編集が終わったら、[Shift]+[return]により整形して表示するモードとして表示を確認します。

但し$\mathrm{\LaTeX}$やHTMLで記述してwebブラウザでうまく表示されても、 それらを後述の.htmlファイルや.texファイルに変換した場合にうまい具合に表示されるかどうかは やってみないとわからないところがあります。 HTMLで記述したものを$\mathrm{\LaTeX}$に変換するとうまく表示されない場合が多いようです。

コードの編集と実行

右上にPython 3などと表示されている言語、つまりその時のkernelの言語でプログラム(の断片)を入力・編集し、やはり[Shift]+↩︎により実行します。結果の値があれば入力部分のすぐ下に表示されます。ここにグラフ等の形で表示させることも可能ですが、その方法の説明はプログラミング入門の一部として扱うのが望ましいためこの資料では説明していません。予定では別の資料で説明します。

Notebookとしてこの資料を参照している場合、次のセルを選択して実行してみてください。HTMLファイルあるいはPDFファイルとして参照している場合には下記部分をnotebookにキー入力あるいはコピー&ペーストして入力して実行してみてください。どちらの場合にも内容を変更できるなら変更して再び実行してみてください。

In [1]:
# これはPythonのコード。例えばJuliaやRではimportの左に"#"を挿入し、math.を削除すると動作するはずである。
# 例: 2次方程式の解の一つ (Pythonの場合#から右側はコメント)
# ax^2 + bx + c = 0
import math # 数学函数(この場合sqrtのみ)を使うためにライブラリを読み込む
a = 1
b = 1
c = -1
(-b + math.sqrt(b**2 - 4*a*c))/(2*a)
Out[1]:
0.6180339887498949

編集中のnotebookの保存と終了

Notebookの内容をJupyterサーバのファイルとして保存するには、[File]→[Save and Checkpoint]を選択します。このようにするとその時のnotebookの名称のファイル名で保存されます。[File]→[Rename...]により名称を変更しておくと後で参照したり整理したりする時に便利です。

編集・参照中のNotebookの利用を終了するには[File]→[Close and Halt]を選択します。あるいはJupyterの最初のウィンドウで[Running]タブをクリックし、Notebooksの当該notebookの[Shutdown]ボタンをクリックします。後者の方法だと編集中のnotebookの内容が何も警告されずに消える場合があり得るので注意してください。

既存のnotebookの利用と操作

Jupiterの最初のウィンドウの[Files]タブで当該ファイルをクリックすれば前回の編集・参照の続きを行えます。

コピー・名称変更・移動・削除

Jupiterの最初のウィンドウの[Files]タブで当該ファイルのチェックボックスをチェックし、[Duplicate][Rename][Move][Download][ゴミ箱アイコン]などのうち表示されているものをクリックすることで各種ファイル操作を行えます。ダウンロードは.ipynb形式となります。

ファイルのダウンロード・アップロード

この節でnotebookのファイルを手元にダウンロードしたり逆にアップロードする方法を簡単に説明します。

Notebook形式(.ipynb)でのダウンロード

Notebookの画面で[File]→[Download as]→[Notebook(.ipynb)]を選択するとnotebookの内容をダウンロード・保存できます。

HTML・$\mathrm{\LaTeX}$形式でのダウンロード

同様に[HTML(.html)][LaTeX(.tex)]を選択すればそれらの形式でダウンロードできます。ただし$\mathrm{\LaTeX}$形式の場合、そのままでは手元の$\mathrm{\LaTeX}$処理系でエラーが出る場合があります。具体的には画像ファイルを含める部分でエラーが出る時があり、その時にはそれらの部分を修正する必要があります。テキストエディタで画像の拡張子を探索して修正します。またwebブラウザによる表示やHTML形式の場合には問題なく変換されるが、$\mathrm{\LaTeX}$の場合にはうまくいかない他の場合として、各種ヘッダ(行頭の#,##など)やリストの前に空白行を一行入れてない場合があります(セルの冒頭を除く)。前述の中央揃えなど、HTMLを直接記述した場合にもうまくいかなかったりします。現状ではその他にも種々の問題点が残っており、$\mathrm{\LaTeX}$形式の場合にはダウンロード後にかなり編集しないとうまく動かない場合が多いです。しかしそういった問題を後で修正しても最初から$\mathrm{\LaTeX}$で入力するよりは楽な場合が多々あります。

他の形式でのダウンロード

他にいくつかの形式でダウンロードが可能になっています。 形式によりデータの一部がダウンロードされる場合があります。

メニューにPDF形式でのダウンロードの選択肢がある場合がありますが、日本語交じりのデータだと文字が出力されないことがあります。そういう場合にはwebブラウザのプリント機能等でPDFに変換するか、$\mathrm{\LaTeX}$形式でダウンロードして$\mathrm{\LaTeX}$処理系で変換するなどします。ただし上述した問題があるので、webブラウザを用いた方が無難でしょう。

Notebook形式でのアップロード

Jupyterの最初の画面で右上の方の[Upload]ボタンをクリックするとnotebook(.ipynb)形式のファイルをJupyterサーバにアップロードできます。

ローカルJupyterサーバの場合のファイルの置き場所

ローカルにJupyterサーバを動かしているとします。OSのメニュー等から起動した場合にはユーザのホームデリレクトリ内など、インストール時に指定した場所等がJupyterサーバのファイルの置き場所であり、コマンド・プロンプト等から起動した場合には起動時のカレント・ディレクトリ内となります。ファイルをダウンロード・アップロードする代わりにそれらの場所にあるファイルを直接読み書きすることも可能です。

kernelの切り替え

Kernelを後から切り替えることも可能であり、notebookの[Kernel]→[Change kernel]から選択します。言うまでもなくCodeのセルは、内容がkernelと合っていないと実行時にエラーが出ます。

サーバ内でのコマンド操作

Jupyterサーバ内でシェルコマンド(Windowsの場合は動作するコマンドがかなり異なります)を実行する方法として3つ挙げておきます。

  • Kernelごとのコマンド実行方法に従う。 例えばPython kernelのnotebookで、Code typeのセルで!の後にシェルコマンドを入力し実行する。
  • Jupyterの最初のウィンドウで[New][Terminal]という項目がある場合にはそれを選択する。
  • Bashなどのコマンド実行のためのkernelがある場合にはそれによりシェルコマンドを実行する。
In [2]:
# Pythonがkernelの場合には!の後のコマンドを実行する
! echo "A sample command."
# これは文字列をそのまま出力するコマンド。
A sample command.
In [1]:
# Julia kernelの場合。環境によっては動かないこともある。
run(`echo A sample command.`)
A sample command.

Jupyterサーバの停止

Jupyterサーバを停止するにはそのサーバで稼働している全てのnotebookをまず停止します(notebookの停止の項目を参照)。その後Jupyterサーバの動いているコマンド・プロンプトや仮想端末で[Ctrl]-Cを押します。すると例えば以下のように表示されます。

Shutdown this notebook server (y/[n])?

y↩︎と入力するとサーバが停止します。その後ウィンドウを消します。 環境によっては尋ねずにいきなり停止する場合もあります。 [Ctrl]-Cを何度か入力しても有効でない場合にはウィンドウを消します。

ここから課題の前までの部分は他より少し難しく、課題を解くのに必要でもありません。そのため最初は必ずしも読まなくても問題ありません。また拡張機能がインストールされていなくて、管理者権限もない場合には当然使えません。BYODのPCなどで自分でJupyterをインストールした場合ならば下記の変更・追加・機能拡張が可能でしょうが、メディアセンタのPCなどの場合には可能でない場合があるので注意してください。

Jupyterの見栄えの変更

Notebookの見栄えを変更できます。これらの変更の一部はHTMLや$\mathrm{\LaTeX}$に変換した場合にも反映される場合があります。

ただしこの節を含めて後の部分はJupyterの拡張機能であり、教育用計算機システムなどの場合にはAnaconda等そのものはインストールされていても、 拡張機能の一部がインストールされていない場合や、 インストールされていてもうまく動作していない場合があり得ます。 そのような場合にその拡張機能を使いたければ、BYODのPCにAnaconda3と拡張機能をインストールして使用することを検討してください。

フォントサイズの変更

最も簡単にはwebブラウザの拡大縮小機能(ズーム)により大きさを変更できます。しかし後述のjtコマンドをサーバで入力することでデフォルトのフォントサイズを変更できます。フォントサイズのみを変更できる場合には、そうした方が望ましい結果となる場合があります。

Jupyter-themesによる見栄えの変更

Jupyter-themesをサーバ(ローカルにサーバを動作させている場合にはローカルのPC)にインストールすれば色・フォントサイズ等を変更することが可能です。インストール方法と使用方法は基本的にはリンク先を見ていただきたいです。但し以下にインストール後の基本的な利用方法のみ書いておきます。ただし任意に色を設定しようと思うと設定ファイルの中身をいじる必要が出てきます。

注意点としては、これらの拡張機能のインストール時に、 Anacondaのインストール先によっては管理者権限が必要になる場合があることを挙げられます。 まだインストールされてなく、インストールに必要な権限がない場合には当然ながら以下の操作を行えません.

In [2]:
# Python kernelの場合。以下では!によりJupyterサーバでコマンドを動作させている
# サーバ側の環境が、これでjtが正しく動作するようになっている必要がある。
v = ! jt -l
     # 利用可能なテーマのリスト(環境により異なる)。
v    # ここではコマンドの実行結果を一旦Pythonの変数に代入しているが、! jt -lとしてもよい。
     # あるいはコマンドプロンプトや仮想端末で左端から!までを除いて実行する。
# 以下の結果はインストールされているテーマ(.lessファイル)によって変わってきます。
Out[2]:
['Available Themes: ',
 '   blue1',
 '   chesterish',
 '   grade3',
 '   gruvboxd',
 '   gruvboxl',
 '   monokai',
 '   oceans16',
 '   onedork',
 '   solarizedd',
 '   solarizedl',
 '   solarizedl2']
In [3]:
! jt -t solarizedl -T -cellw 1150  # テーマの設定。ただしnotebookの再起動後に反映される。
In [1]:
fs = 12    # フォントサイズ等も設定する。{}内はPythonの式として計算され置き換えられる。
! jt -t solarizedl2 -T -cellw '100%' -fs {fs} -nfs {fs} -tfs {fs} -dfs {fs} -ofs {fs}
# jtやjupyterのバージョンと.lessファイルの不整合によってエラーが出る場合があります。
In [ ]:
! jt -r    # リセット。元々のテーマに戻す。
In [ ]:
# Julia kernelの場合の例。環境によっては動かないこともある。
# そのような場合には一時的にkernelをPythonに切り替えて上の方法で実行する。
run(`jt -l`)

-Pオプションを付けるとセルの左側の領域が出なくなります。 ただしこうすると特にHTMLに変換した場合、CodeセルとMarkdownセルの違いを見分けにくくなります。

-cellw "100%"などと比率でページ幅を指定するとwebブラウザのウィンドウ幅に従って改行位置が変わります。 -cellw 1150などとピクセル数で指定することもできます。

In [1]:
# jtの使い方とオプション一覧の表示
! jt --help
usage: jt [-h] [-l] [-t THEME] [-f MONOFONT] [-fs MONOSIZE] [-nf NBFONT]
          [-nfs NBFONTSIZE] [-tf TCFONT] [-tfs TCFONTSIZE] [-dfs DFFONTSIZE]
          [-ofs OUTFONTSIZE] [-m MARGINS] [-cursw CURSORWIDTH]
          [-cursc CURSORCOLOR] [-cellw CELLWIDTH] [-lineh LINEHEIGHT] [-altp]
          [-altmd] [-P] [-T] [-N] [-vim] [-r] [-dfonts]

optional arguments:
  -h, --help            show this help message and exit
  -l, --list            list available themes
  -t THEME, --theme THEME
                        theme name to install
  -f MONOFONT, --monofont MONOFONT
                        monospace code font
  -fs MONOSIZE, --monosize MONOSIZE
                        code font-size
  -nf NBFONT, --nbfont NBFONT
                        notebook font
  -nfs NBFONTSIZE, --nbfontsize NBFONTSIZE
                        notebook fontsize
  -tf TCFONT, --tcfont TCFONT
                        txtcell font
  -tfs TCFONTSIZE, --tcfontsize TCFONTSIZE
                        txtcell fontsize
  -dfs DFFONTSIZE, --dffontsize DFFONTSIZE
                        pandas dataframe fontsize
  -ofs OUTFONTSIZE, --outfontsize OUTFONTSIZE
                        output area fontsize
  -m MARGINS, --margins MARGINS
                        fix margins of main intro page
  -cursw CURSORWIDTH, --cursorwidth CURSORWIDTH
                        set cursorwidth (px)
  -cursc CURSORCOLOR, --cursorcolor CURSORCOLOR
                        cursor color (r, b, g, p)
  -cellw CELLWIDTH, --cellwidth CELLWIDTH
                        set cell width (px)
  -lineh LINEHEIGHT, --lineheight LINEHEIGHT
                        code/text line-height (%)
  -altp, --altprompt    alt input prompt style
  -altmd, --altmarkdown
                        alt markdown cell style
  -P, --hideprompt      hide cell input prompt
  -T, --toolbar         make toolbar visible
  -N, --nbname          nb name/logo visible
  -vim, --vimext        toggle styles for vim
  -r, --reset           reset to default theme
  -dfonts, --defaultfonts
                        force fonts to browser default

Jupyterの機能拡張

ここではJupiterの機能を拡張するための方法としてkernelの追加とextensionの追加について簡単に説明します。

注意点としては、これらの拡張機能のインストール時に、 Anaconda等のインストール先によっては管理者権限等が必要になる場合があることを挙げられます。

Kernelの追加

Jupyterでは前述のようにnotebook単位でkernelを切り替えて使うことができます。しかしJupyterサーバにインストールされていないkernelの言語は実行することはできません。メニューの[New][File]→[New Notebook][Kernel]→[Change Kernel]で出てくるものがインストールされているkernelになります(もちろんうまくインストールされていなければ動作はしません)。

新しくカーネルをインストールするにはJupyter kernelsを参照してインストールを行います。場合によってはそうしなくてもGUIでワンクリックでインストールできるようになっているkernelがある場合もあります。また自分で新しいカーネルを作ることも可能です。ここではそれらについては詳しくは説明しません。

現在はnotebookごとにプログラミング言語を一つ1指定して使うようになっていますが、Pythonの場合には行頭の!により(bashなどの)シェルコマンドを利用することができます。これは言ってみれば複数言語を切り替えて利用しているわけです。特別なkernelとして複数のkernelを切り替えてプログラムを実行するようなものを作れば複数言語対応のnotebookを実現できるはずです。

Extensionの追加

Jupyter notebook extensionsという、Jupyterの機能を拡張するためのソフトウェアが公開されています。これのインストールと利用方法についても基本的にはリンク先を参照してください。複数あるインストール方法のうちでは、condaによるものが、比較的新しい版の拡張がインストールされるようです。ただしうまくインストールされない場合には他の方法を試してください。

個々のextensionのon/off等はサーバの仮想端末等からコマンドで行うこともできますが、Jupyter Nbextensions ConfiguratorもインストールしてJupyterの最初の画面に[Nbextensions]というタブ([Clusters]タブの右隣)を出すように設定すれば、後は個々の機能拡張のon/offとパラメータの設定をwebブラウザから簡単に行えるようになります。

少々残念なことに、PythonやJupyterの版によって互換性が保証されているextensionとそうでないものがあります。

プレゼンテーション

Jupyterを用いてプレゼンテーションを行う方法は大きく分けて3つあります。

  1. Jupyter+webブラウザをそのまま使う方法。
    • 予めNbextensionsのzenmodeを有効にしておく。
    • また予め、jt -T -cellw "100%" ...などとしてウィンドウ幅により改行位置が変わるようにしておく。
    • ノートブックの[Help]→[Edit Keyboad Shortcuts]によりtoggle toolbarのショートカットを設定する。
    • Nbextensionsのzenmodeにチェックを入れ、zenmodeを有効にし、メニュー部分を消して表示領域を広げる。
    • 2項目上で設定したショートカットを入力し、Toolbarを消す。
    • Webブラウザをフルスクリーン表示とする。
    • ブラウザのツールバーなどをなるべく消す。
    • ブラウザの(ショートカットなどの)機能により文字を大きくする。

こうするとスクロールできるので用途によって、 あるいはセルをページごとに区切っていない場合に適しています。 また、HTMLファイルに変換した後もブラウザを同様に操作すればプログラムの実行や 即時変更以外のプレゼンテーションを行えます。 ただし1の方法ではキー一つでページを行き来したりはできません。

 2. Jupyterの拡張機能を使う方法。通常のプレゼンテーションソフトウェアに近い操作を行えます。
   $\bullet$ RISE
   $\bullet$ nbpresent
 3. Notebookをプレゼンテーション用のデータに変換して使う方法。
 4.  HTMLファイルに変換し、ブラウザの表示拡大機能を利用して表示します。 ブラウザの上の部分は、ブラウザの表示設定によりできるだけ小さくします。 ただし、ブラウザの幅の変化によって改行位置が変わるようなHTMLファイルになるように指定する必要があります。

4の指定にはjtコマンドを使います。上のjtコマンドの説明を参照してください。 jtコマンドがうまく動作せず、ページ幅が一定になるようにしかできない場合、4はうまくいきません。

以下はそれらのうちの一つ、RISEを使う場合の簡単な説明です。

まずRISEをインストールします。この作業はJupyterのインストールに対して一回行います。

In [ ]:
# Python kernelの場合。
# anacondaを共通領域に管理者権限等でインストールした場合には以下の操作はbashから管理者権限等で行う(!なし)。
! pip install RISE
! jupyter-nbextension install rise --py --sys-prefix
! jupyter-nbextension enable rise --py --sys-prefixtttt

RISEをインストールした時には、現在開いているnotebookの内容を(必要なら)保存して、notebookを閉じ、再び開きます。あるいは他のnotebookを開きます。Jupyterのversionによってはサーバの再起動が必要な場合もあるようです。Toolbarの右の方に棒グラフのアイコンのボタンが現れます。Nbextensions ConfiguratorによるとRISEの互換性が確認できないとのことですが、試してみたところそれほど問題ないようです。

RISEを使ってプレゼンテーションを行うには、まずセルごとのスライド属性を設定します。[View]→[Cell Toolbar]→[Slideshow]を選択すると各セルの右上でSlide Tpyeを選択できるようになります。 この表示は同じく[None]を選択すれば消えます。

 - Slide Sub-Slide Fragment Skip Notes
上のスライドの続き 新しいスライド 新しいサブスライド 追加で下に表示 表示しない ノート

「-」はセルは別だが上と同じスライドとする場合に選択します。 「Sub-Slide」だとプレゼンテーション時に次のスライドを表示するSpaceや→では表示されなくなり、 別のキー操作で表示されるようになります。要するに見せるか見せないか状況に応じて簡単に選択できるスライドとなります。 「Fragment」は上のセルを表示している下に追加で表示されるようになります。

注意すべきなのは、表示の最小単位がセルであることです。 一つのセルが大きくて画面をはみ出すとスクロールが効かないため縮小表示しか表示手段がありません。 これはHTMLファイルの生成とプレゼンテーション資料作成に同じnotebookを使う場合、多少不便な場合があります。 番号付きリストが長い場合にもセルを分けなければならず番号付がうまくいかなくなります。 しかし現状そうなっています。 RISEでも指定によりスクロールが効いたりセルを分割してスライドにできたりすればよい気がします。 Split Cells Notebookというextensionと併用するとダブルコラムの表示にできますが、 プログラムの出力の画像の表示等の幅が狭くなりすぎる場合があるようです。

プレゼンテーションを行うには、なるべくならフルスクリーンモードにできてタイトルバー等を全て隠せるwebブラウザを使います。 例えばChromeやSafari等です。 FirefoxをMacで使う場合にはプラグインが必要です(Old Lion Fullscreenなど)。 そのようにした上でToolBarの棒グラフのアイコンのボタンをクリックするとプレゼンテーションモードが始まります。 カーソルキーあるいは右下のボタンのクリックでスライド間を移動できます。 左下にhelpのボタン「?」、左上にプレゼンテーションモード終了ボタン「x」があります。 文字の大きさの設定はブラウザの機能で行えます

課題

  1. 画像と数式、画像、表、外部リンク入りのnotebookを作成せよ。文章の分量が400文字以上で、それなりに体裁を整えること。
  2. NotebookからHTMLファイルを作成する。Webブラウザにより何らかの方法でPDFファイルを生成する。
  3. PDFファイルの表示が意図通りであることを確認する。ただし、PDFファイルについては、背景色・文字の色はうまく再現されなくてもよく、 リンクをクリックしてもURLの先がブラウザで表示されなくてよいものとする。
  4. HTMLファイルをローカルに(同じPC上で)ブラウザで参照してうまく表示されることを確認する。
  5. ファイル名はいずれもkadai06.拡張子とすること。拡張子の部分は.pdfあるいは.htmlである。
  6. HTMLファイルと他の必要なファイル(多分画像ファイル)をwebサーバにアップロードせよ。 ただしアップロード方法はJupyterの初回には扱わない場合があるので、そういう場合にはその前まで行うこと。
  7. アップロード後にHTMLファイルはネットワークを介してwebブラウザで参照し、意図通りに表示されることを確認すること。特に画像や数式、表、リンク(HTMLの場合)がうまく表示される・動作することを念入りに確認する。
  8. HTMLファイルをアクセスできるURLと課題番号kadai06と課題提出用IDを何らかの方法でPDFファイル中に記すこと。 場合によってはPDFファイルを作り直す必要がある。
  9. PDFファイルをPandAで提出せよ。
In [ ]: