LoginSignup
31
30

More than 5 years have passed since last update.

IPython Notebookのノートをバッチ処理化する

Last updated at Posted at 2014-09-15

IPython Notebook、インタラクティブなデータ分析、プログラミング環境として非常に便利。そしてヘビーに使っているとバッチ処理の様なコードも書いて実行したくなる。ノートを保存した時の.ipynbファイルを実行する方法をまとめていく。まずは2つ。

ipython nbconvertコマンドで.pyファイルを生成する

いつのまにかnbconvertがiPython本体に取り込まれていた。

ipython nbconvert mynote.ipynb --to=python

たとえば次の夜間バッチ処理的なノートをnbconvertにかけてみる。

スクリーンショット 2014-09-15 15.28.15.png

生成後のソースは次の通り、プロファイルを指定したとしてもstartupスクリプトが含まれないのに注意。またpylabモード前提のコードは実質動かせないだろう。

# coding: utf-8

# In[19]:

from pymongo import MongoClient
from datetime import timedelta, datetime


# In[26]:

# ローカルのMongoDBを処理する
con = MongoClient('localhost')
db = con['test']


# In[27]:

# 処理対象の日付 (0時以降に前日の集計を行なう)
process_date = datetime.now().date() - timedelta(days=1)
process_date


# In[28]:

xxx_count = 0
yyy_count = 0
with db.events.find({'time': {}}) as cur: # from-to指定は省略
    for doc in cur:
        pass
        # なんらかの集計


# In[ ]:

#  集計結果の更新
db.daily_state.update({'date': process_date}, {'$set': 'values': {
    'xxx_count': xxx_count,
    'yyy_count': yyy_count
}})

runipyを使って、.ipynbファイルのまま実行する

paulgb/runipy
https://github.com/paulgb/runipy

.ipynbファイルをパースして中のPythonコードをipythonで順に実行していくというコマンド。

runipy mynote.ipynb

nbconvertと似ているが、実行後の結果をHTMLファイルとして出力できたりする。cronに仕込んで日次レポートを生成するといった用途に使える。コマンドラインからpythonスクリプト内で使う任意のパラメータも渡せる。しかし、IPythonのプロファイルを指定できないため、ipython_notebook_config.pyの設定を駆使している場合は使いづらい。

Profileが指定できないのは不便という事で、forkして--profile-dirを指定できるようにしたバージョンはプルリク済み。

hagino3000/runipy
https://github.com/hagino3000/runipy

runipyについては開発が停滞しているように見えるので、使いたい人は全力でコミットするのが良さそう。

31
30
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31
30