5

2 つの異なるデータ セットに対して同じ分析を行うときに、IPython Notebook (Jupyter) でコードをモジュール化して再利用する良い方法はありますか?

たとえば、データ ファイルの分析を行う多数のセルを含むノートブックがあります。同じ形式の別のデータ ファイルがあり、同じ分析を実行して出力を比較したいと考えています。これらのオプションはどれも、これには特に魅力的ではありません。

  • セルをコピーして 2 番目のノートブックに貼り付けます。分析コードが複製され、更新が困難になりました。
  • 分析コードをモジュールに移動し、両方のファイルに対して実行します。これにより、現在生成されている図のセルごとの形式が失われ、1 つの巨大なセルにすべてがごちゃ混ぜになります。
  • 両方のファイルを 1 つのノートブックに読み込み、分析を並べて実行します。これには多くのコピー アンド ペーストも含まれ、3 つまたは 4 つの異なるデータ ファイルにうまく一般化できません。

これを行うより良い方法はありますか?

4

1 に答える 1

2

IPython デモ モードの例に従って、デモ ディレクティブをスタンドアロン モジュールに組み込むことができます。

次に、ノートブックで実際に実行するときに、次の重要な部分に進むたびにデモ オブジェクト ラッパーを呼び出します。したがって、セルはほとんどそのデモ ラッパー オブジェクトへの呼び出しで構成されます。

オプション 2 は明らかにコードの再利用に最適であり、ソフトウェア エンジニアリングのすべてにおいてほぼ間違いなくデファクト スタンダードです。

ノートブックの概念自体は、3、4、5、... の異なるデータ ファイルにうまく拡張できないと私は主張します。ノートブックのプレゼンテーションは、バッチ処理の容器を意図したものではありません。さまざまなデータ セットにわたってパラメーター スイープを行う必要があり、各パラメーター グループにロードされたさまざまなデータの上で分析を再実行したい場合 (「パラメーター」がさまざまなファイル名と同じくらい単純な場合でも)、次のようになります。コードの悪臭。「インタラクティブ」な方法で実行されている分析のレベルが間違っている可能性があります。「インタラクティブに」分析を目撃することと、同時にバッチ処理を実行することは、ほとんど相容れない 2 つの目標です。はるかに良いアイデアは、プレゼンテーションの観点から「オフライン」で、すべてのパラメーター セットを個別にバッチ処理することです。次に、計算および保存されたバッチ結果から視覚的な結果を生成できる一連のスタンドアロン関数を構築します。次に、ノートブックは単なる一連の関数呼び出しであり、それぞれがすべてのパラメーター セットにわたって要約データ (バッチ処理中のパラメーター セットの選択からの例である可能性があります) を一度に生成し、必要な比較と有意義な比較を行います。結果データを並べて表示します。

1 つのパラメーター セットで分析を実行する対話型プレゼンテーション全体を「目撃」してから、いくつかのグローバル変数を変更する/新しいノートブックに切り替える/同じノートブックでより多くのセルを実行して、別のパラメーター セットで同じプレゼンテーションを「目撃する」ことは境界線に聞こえますプレゼンテーションを消費するそのモードが、対象となるすべてのパラメーター セットの結果を最初に計算し、重要な結果を比較にまとめた、ターゲットを絞った要約プレゼンテーションを消費するよりも厳密に悪くない状況を想像できないという意味で、私には役に立たない.

おそらく、私が思いつく唯一のケースは、おもちゃの周波数データや、単純なフーリエ解析などを行う一連のノートブックなど、おもちゃの教育的デモです。しかし、これはまさに、解析関数をヘルパー モジュールにすることが望まれるケースであり、ノートブック自体は、ノートブックを実行するおもちゃの入力ファイルを選択的に宣言できるようにするだけです。

于 2015-03-30T19:14:08.027 に答える