PythonやRでデータ分析をするとき、JupyterなどのNotebook上でコーディングしている人もいることでしょう。
別々に作成したNotebookを1つに結合したい、と思ったことのある人もいることでしょう。
例えば、JupyterのNotebook全体をコピペするという方法もあります。他には、そのためのPythonのライブラリー「nbmerge」や「nbformat」を使う、という手もあります。
主な方法は3つです。
- セルのコピーと貼り付け
- nbmergeツールを使用する
- nbconvertでどうにかする
今回は、「複数のNotebookを1つにする方法」です。
セルのコピーと貼り付け
最も直接的な方法です。
2つのNotebookを1つにする例を説明します。
コピー元の片方のNotebookに移動し……
全てのセルを選択(Edit > Select All Cells)します。
その状態で、コピー(Edit > Copy Cells)します。
これで、Notebook全体のセルがコピーされます。
その後、張り付ける先のNotebookに移動します。
その末尾まで移動し、末尾に貼り付け(Edit > Paste Cells Below)をします。
nbmergeツールを使用する
nbmergeは、Jupyter Notebookファイル(.ipynb)を結合するためのコマンドラインツールです。
nbmergeを使用するには、そのPythonライブラリーがインストールされている必要があります。
まだインストールされていない方は、インストールしましょう。
以下、コードです。
pip install nbmerge
では、2つのNotebookを1つにする例で説明します。
結合前のNotebookを、以下の2つとします。
- notebook1.ipynb
- notebook2.ipynb
同じディレクトリに置くことを忘れないでください。
結合後のNotebookを、以下とします。
- merged.ipynb
このNotebookは実行後に新たに作成されます。
以下、コードです。コマンドプロンプト上で実行してください。
nbmerge notebook1.ipynb notebook2.ipynb > merged.ipynb
これだけです。
nbconvertでどうにかする
Notebook(.ipynbファイル)を他の形式に変換するための、Pythonライブラリーがあります。
nbconvertです。例えば、以下のような形式に変換することができます。
- HTML
- LaTeX
- ReStructuredText
- Markdown
- Python script
使い方を工夫すると、複数のNotebookを1つに結合することができます。
nbconvertを使用するには、そのPythonライブラリーがインストールされている必要があります。
まだインストールされていない方は、インストールしましょう。
以下、コードです。
pip install nbformat
では、2つのNotebookを1つにする例で説明します。
nbmergeの場合と同じく、
結合前のNotebookを、以下の2つとします。
- notebook1.ipynb
- notebook2.ipynb
同じディレクトリに置くことを忘れないでください。
結合後のNotebookを、以下とします。
- merged.ipynb
このNotebookは実行後に新たに作成されます。
以下、コードです。
import nbformat as nbf # 2つのNotebookファイルを読み込みます。 ntbk1 = nbf.read('notebook1.ipynb', nbf.NO_CONVERT) ntbk2 = nbf.read('notebook2.ipynb', nbf.NO_CONVERT) # 新しいNotebookを作成し、2つのNotebookのセルを結合します。 merged_ntbk = nbf.v4.new_notebook() merged_ntbk.cells = ntbk1.cells + ntbk2.cells # 結合したNotebookを新しいファイルに書き出します。 with open('merged.ipynb', 'w') as f: nbf.write(merged_ntbk, f)
先ほどのmergedの方がややシンプルですが、開発が止まっているのが気になるところです。
ちなみに、nbconvertは今現在(2023年7月25日現在)開発は続けられ進化中です。
まとめ
今回は、「複数のNotebookを1つにする方法」を説明しました。
主な方法は3つです。
- セルのコピーと貼り付け
- nbmergeツールを使用する
- nbconvertでどうにかする
やる必要がありましたら、試してみてください。