Python
Pandoc
Word
MachineLearning
Jupyter

Jupyter NotebookをPandocでWord(docx)に変換する

はじめに

Jupyter Notebookに付属しているjupyter-nbconvertとテキスト変換ツールpandocを使ってみたのでメモ。

ツール化した

以下でjupyter-nbconverterpandocを使った方法を説明していますが、それらを1つのツールとしてまとめました。

動機

論文やレポートなどのアカデミックな文書は研究室に入るまでずっと、Latexとか書かないといけないと私は思っていましたが、実際には今日日(たいていの)国際学会でもdocxやlatexのテンプレートが用意されていて提出することができたりします。

どんな書式で書くにしても当然、数式や図をこしらえる必要があったりして、個人的には数式をWordの付属ツールを使って書くのは面倒だと感じていて、数式だけはLatexで書いてLaTeXiTを使ってPDF化・画像化するなんてことをすることも多いです。

次のようなニュースもあるのですが、今回はスルーしておきます。

また、研究のコンセプト検証でプロトタイプを作るときには再現できるソースコードとその実行結果もほしいところです。

以上をまとめると、Jupyter Notebookでいろいろ書いてみて、完璧ではなくてもWord形式のファイルで論文提出のためにアウトプットがほしいという動機になります。

ツール

  • Jupyter NotebookはPythonでデータ解析をやるというPyDataのムーブメントの中でNumpy・Matplotlib・Scikit etcと並んで定番となっているツール・ライブラリ群の1つです。ですが、Jupyter Notebookに限っては今ではR・Rubyなどの言語から利用することができます
  • pandocはある形式テキストを別形式に変換するツールです(Jupyter Notebookの依存パッケージとしてpandocが使われているようです)

やってみたこと

  1. Jupyter Notebookで数式・アイディア・コード・実行結果・図をまとめる
  2. jupyter-nbconvertでJupyter Notebookで作られるipynb形式のファイルMarkdown形式テキストに変換する
  3. Markdown形式テキストpandocdocx形式のファイルに変換する

インストール

公式ドキュメントを読んで各環境に合わせてインストール

おためし

対象のJupyter Notebookは、以下の記事で使ったもの。

母集団比率の区間推定 - akimachoのはてなブログ

$ curl -O  https://gist.githubusercontent.com/akimach/27e87cb7f97dc253921b9ea8b7b332b5/raw/fd112a66a3ca953dd7ad26098cccfe1d532ba0d7/binominal_confidience_interval.ipynb
$ jupyter-nbconvert binominal_confidience_interval.ipynb --to markdown
$ pandoc binominal_confidience_interval.md -t docx -o binominal_confidience_interval.docx

結果

Jupyterで開くと何やらLatexで数式が書かれていますが、

\hat{p}\; -\; K_{\frac{\alpha}{2}}\cdot \sqrt{\frac{\hat{p}\; \left(1\; -\; \hat{p} \right)}{n}}\; <\; p\; <\; \hat{p}\; +\; K_{\frac{\alpha}{2}}\cdot \sqrt{\frac{\hat{p}\left( 1-\hat{p} \right)}{n}}

QiitaのMathjax(かな?)を使うと以下のような数式になります。

$$\hat{p}\; -\; K_{\frac{\alpha}{2}}\cdot \sqrt{\frac{\hat{p}\; \left(1\; -\; \hat{p} \right)}{n}}\; <\; p\; <\; \hat{p}\; +\; K_{\frac{\alpha}{2}}\cdot \sqrt{\frac{\hat{p}\left( 1-\hat{p} \right)}{n}}$$

上のコマンドにしたがって変換すると、

piyo.png

Word内で数式がいじれるようになりました。

Markdownで書かれた要素も以下のとおりWord形式に準ずるものになっています。

piyo04.png

ソースコードのハイライトも効いているようです。

piyo02.png

グラフもきちんと表示されています。

piyo03.png

おわりに

これで自動週砲ができるのではないでしょうか。pandocはePub形式にも対応しているのでJupyter Notebookで数学+PythonのテキストをePubに変換してAmazonで出版してみるといったことも容易になりますね。

今回pandocを使ってみて便利だったので、もっとテンプレートとか使って活用してみたいと思っています。