ノートブックでデータサイエンスのワークフローを効率化する
データサイエンスのノートブックの使い方で効率と明瞭さを向上させる。
― 1 分で読む
データサイエンティストはよくノートブックを使ってデータサイエンスのパイプラインを作ったり実行したりするんだ。ノートブックを使うと、ユーザーはコードを「セル」って呼ばれる部分に分けて実行できて、独立してどの順番でも動かせる。このやり方は、開発者がデータサイエンスの探索的な性質にぴったりなんだけど、いろいろな問題もあって、プロセスが非効率的で混乱しがちなんだ。
ノートブックの問題
検査コードによる雑然
大きな問題の一つは、ノートブックにメインのパイプラインに関係ない余分なセルが増えてしまうこと。これらのセルにはデータを確認するためのコードが含まれていて、データセットの列をチェックしたりするんだ。このコードはデータを理解するには役立つけど、実際の処理やモデル化には必要ないんだ。こういう余計な検査セルが多すぎると、ノートブックがごちゃごちゃして実行も遅くなっちゃう。
実行順序の問題
もう一つの問題は、セルをどの順番ででも実行できる自由さから生じるんだ。いくつかのセルが他のセルの出力に依存している場合、順番を無視して実行するとエラーが出ることがある。例えば、データセットが読み込まれる前に、そのデータセットにアクセスしようとするセルを実行したら、問題が起きちゃう。
変更後の古い状態
セルが変更されると、他のセルがその情報に依存していると古くなっちゃうんだ。ユーザーがセルを編集してから他のセルを実行すると、再実行しない限り古いデータを使うことになる。これが原因で不正確な結果が出ることも。どのセルを再実行する必要があるかを追跡するのが難しくなって、開発者は安全を考えてノートブック全体を再実行する羽目になることが多い。これは時間とリソースの無駄だよね。
不要な再実行
ノートブックでのコード実行の最小単位はセルだから、変更がないコードでも、修正されたコードと同じセルにあると再実行されちゃうことがある。これがプロセスを著しく遅くしてしまうんだ。特にノートブックに長時間かかるデータ準備やモデル訓練のタスクが含まれているとね。
既存の解決策
これらの問題を解決するための方法はいくつかあるんだ。一つのアプローチはデータフロー解析を使って、どのセルがどのセルに依存しているかを見つけ出して、正しい順序で実行すること。例えば、データフローノートブックでは、各セルにユニークなIDを付けるんだ。セルが実行されるとき、システムはそれが依存しているすべてのセルがすでに実行されているかを確認するんだ。他のツールでは、各セルの入力と出力を追跡して、安全でない操作を防ぐ仕組みを持っている。
ただ、これらの方法では、ノートブックの外部の値の変更やパイプラインと検査コードの混乱といった他の一般的な問題には完全には対処できてないんだ。
提案されたアプローチ
これらの問題を解決するには、データサイエンスパイプラインを実行する基盤としてセルを使うのをやめた方がいいかもしれない。代わりに、プロセスを合理化できる別の方法があるんだ。
パイプラインと検査コードの分離
一つのアイデアは、データを処理するコード(パイプラインコード)とデータを検査するコードを分けること。セルに「パイプライン」または「検査」とタグ付けをすることで、ユーザーはパイプラインにだけ集中したいときに検査セルを除外できるようにするんだ。
例えば、両方のタイプのコードが混ざったノートブックがあったら、ユーザーはパイプラインセルだけを表示するようフィルタリングできる。こうすることで、雑然を減らしてコードの重要な部分に集中できる。
変数のためのコンテキストアクション
検査セルに頼る代わりに、各変数に対するメニューを作ることができる。このメニューは、その変数の型に関連するアクションを提供するんだ。例えば、変数がテーブルを表している場合、そのメニューでテーブルの列を表示するオプションを提供できる。これで、ユーザーは追加の検査コードを書く必要なくデータとやり取りできるようになる。
コンテキストメニューのアクションは変数のデータ型に基づいて機能するから、ユーザーは必要に応じてデータを検査したり操作したりできて、余計なセルでノートブックを clutter しなくて済む。この変更でノートブックが簡素化されて、ナビゲートしやすく理解しやすくなるよ。
最小限の実行計画
このアプローチでは、必要なコードだけが実行されるように実行計画を使うことも含まれるんだ。各セルをブロックとして扱う代わりに、個々の操作を細かく見ていくんだ。データがこれらの操作をどのように流れるかを示すグラフを作成できる。これで、何が変更されたかに基づいて、どの操作が実行される必要があるかを特定しやすくなる。
例えば、ユーザーがデータセットを表示したいとき、ただ一つのデータだけが必要な場合、ノートブックの全体を再実行する必要はない。計画があれば、システムは重要な操作だけを特定できて、プロセスをかなり速くすることができる。
操作の純粋性
この新しいアプローチでは、操作を「純粋」または「非純粋」と分類できる。純粋な操作は、自分の出力以外には何も変えないものだ。例えば、2つの数を足す関数は、入力にのみ依存していて他のものには影響を与えないから純粋だ。
一方、非純粋な操作はファイルから読み込んだり書き込んだりすることがある。操作が純粋か非純粋かを知ることで、システムは独立している場合、操作を並行して実行できるようになる。これがさらなるパフォーマンスの向上につながるかもしれない。
変更の取り扱い
変更があった場合、システムは何を再実行するか賢く判断する必要がある。ユーザーがパイプラインの一部を修正したとき、システムはその変更に依存している他の部分を調べるんだ。すべてを再実行する代わりに、必要な部分だけを選択的に更新できる。これで無駄な計算を減らせて、パイプラインの開発と改良のスピードを保つことができる。
技術的な課題
この新しいアプローチを実装するにはいくつかの技術的な課題があるんだ。ノートブックはしばしば言語特有のカーネルに依存していて、静的型付けやデータフロー解析といった機能を追加するにはさらなる作業が必要になる。一部のプログラミング言語では、これらの機能を完全に実装するのが難しいこともある。
これを解決するために、Safe-DSっていう新しいドメイン固有言語を導入することができる。この言語を使えば、データサイエンスパイプラインを実装しやすくなって、静的解析に必要な機能を提供できるんだ。
今後の計画
次のステップは、この新しいアプローチの動作プロトタイプを作成すること。プロトタイプはSafe-DS言語と一緒に開発され、実行計画やコンテキストメニューを作成するための機能が含まれるんだ。プロトタイプが完成したら、既存のノートブックソリューションとテストして、コードの理解度、正確性、パフォーマンスの改善を測る予定だよ。
さらに、Safe-DSを強化して操作を純粋か非純粋かを特定して分類できるようにして、実行計画を最適化する能力を向上させることも計画している。
結論
まとめると、ノートブックをデータサイエンスのパイプラインに使うには大きな課題がある。パイプラインコードと検査コードを分けて、変数アクションのためにコンテキストメニューを使って、より良い実行計画を作ることでプロセスを簡素化して生産性を向上させることができる。こういった変更があれば雑然を排除してエラーを減らして、開発を早められるから、データサイエンティストたちはデータを行動可能なインサイトに変えることに集中できるようになるんだ。
タイトル: An Alternative to Cells for Selective Execution of Data Science Pipelines
概要: Data Scientists often use notebooks to develop Data Science (DS) pipelines, particularly since they allow to selectively execute parts of the pipeline. However, notebooks for DS have many well-known flaws. We focus on the following ones in this paper: (1) Notebooks can become littered with code cells that are not part of the main DS pipeline but exist solely to make decisions (e.g. listing the columns of a tabular dataset). (2) While users are allowed to execute cells in any order, not every ordering is correct, because a cell can depend on declarations from other cells. (3) After making changes to a cell, this cell and all cells that depend on changed declarations must be rerun. (4) Changes to external values necessitate partial re-execution of the notebook. (5) Since cells are the smallest unit of execution, code that is unaffected by changes, can inadvertently be re-executed. To solve these issues, we propose to replace cells as the basis for the selective execution of DS pipelines. Instead, we suggest populating a context-menu for variables with actions fitting their type (like listing columns if the variable is a tabular dataset). These actions are executed based on a data-flow analysis to ensure dependencies between variables are respected and results are updated properly after changes. Our solution separates pipeline code from decision making code and automates dependency management, thus reducing clutter and the risk of making errors.
著者: Lars Reimann, Günter Kniesel-Wünsche
最終更新: 2023-04-07 00:00:00
言語: English
ソースURL: https://arxiv.org/abs/2302.14556
ソースPDF: https://arxiv.org/pdf/2302.14556
ライセンス: https://creativecommons.org/licenses/by/4.0/
変更点: この要約はAIの助けを借りて作成されており、不正確な場合があります。正確な情報については、ここにリンクされている元のソース文書を参照してください。
オープンアクセスの相互運用性を利用させていただいた arxiv に感謝します。