Pythonを使用した再現可能なデータサイエンスのためのツールとプロトコル


50

Pythonを使用したデータサイエンスプロジェクトに取り組んでいます。プロジェクトにはいくつかの段階があります。各ステージは、データセットの取得、Pythonスクリプト、補助データ、構成およびパラメーターの使用、および別のデータセットの作成で構成されます。コードをgitに保存し、その部分をカバーします。私は聞いてみたい:

  1. データバージョン管理のためのツール。
  2. ステージと実験を再現できるツール。
  3. そのようなプロジェクトのプロトコルおよび推奨ディレクトリ構造。
  4. 自動化されたビルド/実行ツール。

2
この質問の質問はどこにありますか?ヘルプセンターのガイドラインを確認してください。具体的には、「質問する動機が「______に関する議論に参加したい」である場合、ここでは質問しないでください。」
空気14

「あなたが直面している実際の問題に基づいて、実用的で回答可能な質問をするべきです。」
ユヴァルF 14

これは、「データサイエンスの実行方法を教えてください」が実用的かつ回答可能であり、実際の問題に基づいているのとほぼ同じ方法で、実用的かつ回答可能であり、実際の問題に基づいています。
エア14

回答:


46

再現性のある研究(RR)のトピックは今日非常に人気があり、結果として巨大ですが、私の答えが答えとして十分包括的であり今後の研究に十分な情報を提供してくれることを願っています。

RR用のPython固有のツールは確かに存在しますが、より普遍的なツールに焦点を当てる方が理にかなっていると思います(将来どのプログラミング言語とコンピューティング環境で作業するかは確実にわかりません)。それでは、リストごとにどのツールが利用可能か見てみましょう。

1)データバージョン管理用のツール。(非常に)ビッグデータを使用する予定がない限りgit、ソースコードのバージョン管理に使用するものと同じを使用するのが理にかなっていると思います。インフラストラクチャはすでに存在しています。ファイルがバイナリで大きくても、このアドバイスが役立つ場合があります:https : //stackoverflow.com/questions/540535/managing-large-binary-files-with-git

2)RRワークフローと実験を管理するためのツール。このカテゴリで最も人気のあるツールのリストを、私の知る限り(人気の降順で)示します。

  • Taverna Workflow Management Systemhttp://www.taverna.org.uk)-非常に堅実で、少し複雑すぎるツールのセット。主なツールは、Javaベースのデスクトップソフトウェアです。ただし、オンラインワークフローリポジトリポータルmyExperimenthttp://www.myexperiment.org)と互換性があり、ユーザーはRRワークフローを保存および共有できます。Tavernaと完全に互換性のあるWebベースのRRポータルはTaverna Onlineと呼ばれますが、ロシアのまったく異なる組織(そこでOnlineHPChttp : //onlinehpc.comと呼ばれる)によって開発および保守されています。

  • ケプラープロジェクトhttps://kepler-project.org

  • VisTrailshttp://vistrails.org

  • マダガスカルhttp://www.reproducibility.org

。ここでの例と科学ワークフローに興味深い記事です実際の使用に基づいてワークフロー設計とデータ解析、ケプラーmyExperiment:プロジェクトをhttp://f1000research.com/articles/3-110/v1が

ソフトウェアファミリに例示される、リテラシープログラミングパラダイムを実装するRRツールは多数ありますLaTeX。レポートの生成と表示に役立つツールも大きなカテゴリでありSweaveknitrおそらく最も有名なツールです。SweaveRに焦点を当てたツールですが、追加の努力が必要ですが、Pythonベースのプロジェクトと統合できます(https://stackoverflow.com/questions/2161152/sweave-for-python)。knitrモダンであり、人気のあるツール(などRStudio)による広範なサポートがあり、言語に依存しない(http://yihui.name/knitr/demo/engines)ので、これはより良いオプションだと思います。

3)プロトコルおよび推奨ディレクトリ構造。用語プロトコルワークフロー)を使用して暗示されていることを正しく理解している場合、一般に、標準のRRデータ分析ワークフローは次の一連のフェーズで構成されていると思います:データ収集 => データ準備(クリーニング、変換、マージ、サンプリング)=> データ分析 => 結果のプレゼンテーション(レポートおよび/またはプレゼンテーションの生成)。それでも、すべてのワークフローはプロジェクト固有であるため、特定のタスクには追加のステップを追加する必要がある場合があります。

サンプルのディレクトリ構造については、データ分析のワークフローとプロジェクトを自動化する試みとして、RパッケージProjectTemplatehttp://projecttemplate.net)のドキュメントをご覧ください。

ここに画像の説明を入力してください

4)自動ビルド/実行ツール。私の答えはユニバーサル(言語に依存しない)RRツールに焦点を当てているため、最も一般的なツールはmakeです。make優先されるRRワークフロー自動化ツールとして使用するいくつかの理由については、http//bost.ocks.org/mike/makeの記事を参照してください。確かに、のいくつかの側面を改善するか、いくつかの追加機能を追加する他の同様のツールがありmakeます。例:(ant公式には、Apache Ant:http : //ant.apache.org)、Maven(「次世代ant」:http : //maven.apache.org)、rakehttps://github.com/ruby/rake) 、Makepp http://makepp.sourceforge.net)。そのようなツールの包括的なリストについては、Wikipedia:http : //en.wikipedia.org/wiki/List_of_build_automation_softwareを参照してください


ここではリテラシープログラミングに関するリンクです。基本的に、コードがスタンドアロンドキュメントになるようにコードに十分なコメントを付けることです。
貪欲な

@gaborous:リテラシープログラミングの意味については認識していますが、パラダイムへのリンクは含まれていません。そのためのソースは数多くあり、見つけやすいからです。それにもかかわらず、あなたのコメントをありがとう。
アレクサンドルブレフ

1
私はそれを推測しました、それが私が興味のある読者へのコメントとしてこの情報を追加した理由です:)
豪華な

4
これは非常に包括的な答えですが、一つの側面が欠けているように思われることに驚いています。クロス検証は、ほとんどのDSプロジェクトの重要なコンポーネントであり、通常、ランダムなサンプルが必要であり、再現性が困難になる場合があります。統計的変動に関係なく結果を再現できるようにするために、ランダムジェネレーターに同じシードを使用することについて簡単に触れることをお勧めします。ありがとう!
AN6U5

@ AN6U5:優しい言葉をありがとう!賛成-その面を見逃しました(+1)。クロスバリデーションに関する関連する簡単な情報を追加して、回答を自由に更新してください。
アレクサンドルブレフ16

24

大学で研究を始めて以来、私は常に満足のいくワークフローを探していました。私はついに私が満足している何かを見つけたと思います:

1)すべてをバージョン管理下に置きます(Gitなど):

趣味の研究プロジェクトにはGitHubを使用し、職場での研究には大学が提供するプライベートGitLabサーバーを使用します。データセットもそこに保管します。

2)IPythonノートブックのドキュメントとともに、ほとんどの分析を行います。コード、プロット、およびディスカッション/結論をすべて1つのドキュメントにまとめることは(私にとって)非常に体系化されています%runマジックを介してIPythonノートブックから、目的、結果、その他のパラメーターに関する情報を追加します。

タイムスタンプを作成し、使用したさまざまなパッケージバージョンとGitハッシュを追跡するのに便利な「ウォーターマーク」と呼ばれる、IPythonおよびIPythonノートブック用の小さなセルマジック拡張機能を作成しました。

例えば


%watermark

29/06/2014 01:19:10

CPython 3.4.1
IPython 2.1.0

compiler   : GCC 4.2.1 (Apple Inc. build 5577)
system     : Darwin
release    : 13.2.0
machine    : x86_64
processor  : i386
CPU cores  : 2
interpreter: 64bit


%watermark -d -t

29/06/2014 01:19:11 


%watermark -v -m -p numpy,scipy

CPython 3.4.1
IPython 2.1.0

numpy 1.8.1
scipy 0.14.0

compiler   : GCC 4.2.1 (Apple Inc. build 5577)
system     : Darwin
release    : 13.2.0
machine    : x86_64
processor  : i386
CPU cores  : 2
interpreter: 64bit

詳細については、こちらドキュメントを参照してください


2
私は透かしの魔法が好きです。知らない人のために、GitHubは現在、学術機関に関連するユーザー向けに最大5つの無料のプライベートリポジトリを提供しています。
bogatron 14

19

最良の再現性ツールは、次のようなアクションのログを作成することです。

experiment/input ; expected ; observation/output ; current hypothesis and if supported or rejected
exp1 ; expected1 ; obs1 ; some fancy hypothesis, supported

これは紙に書き留めることができますが、実験が計算フレームワークに収まる場合、計算ツールを使用してそのロギングプロセスを部分的または完全に自動化できます(特に、巨大な可能性のある入力データセットと出力数字)。

学習曲線の低いPython用の優れた再現性ツールは、もちろんIPython / Jupyter Notebookです%logonと%logstartの魔法を忘れないでください)。ヒント:ノートブックが再現可能であることを確認するには、カーネルを再起動し、すべてのセルを上から下に実行してみてください(ボタン「すべてのセルを実行」)。エラーを回避するためにセルを非直線的かつ非順次的かつ非自明な方法で実行する必要がある場合は、少しやり直す必要があります。

非常に新しい(2015)もう1つの優れたツールはrecipyです。これはスマトラ(下記参照)に非常に似ていますが、Python専用に作成されています。Jupyter Notebooksで動作するかどうかはわかりませんが、著者が頻繁に使用していることは知っているので、現在サポートされていない場合は将来的にサポートされると思います。

Gitも素晴らしく、Pythonに縛られていません。すべての実験、コード、データセット、図などの履歴を保持するだけでなく、科学技術を使用して保守(git pickaxe)、共同作業(責め)およびデバッグ(git - bisect)するためのツールも提供しますデバッグの方法(デルタデバッグと呼ばれます)。架空の研究者が自分の実験記録システムを作成しようとして、それがGitの複製になるまでのストーリー次に示します。

pypiで Python APIを使用して)任意の言語で動作する別の一般的なツールは、複製可能な研究を行うのに役立つように特別に設計されたSumatraです(replicableは、まったく同じコードとソフトウェアを使用して同じ結果を生成することを目的としていますが、再現性は、どの媒体でも同じ結果が得られますが、これは非常に難しく、時間がかかり、自動化できません。

スマトラの仕組みは次のとおりです。スマトラで行う各実験では、このソフトウェアはビデオゲームでよく見られる「ゲームの状態を保存する」ように動作します。より正確には、保存されます:

  • 指定したすべてのパラメーター。
  • 実験アプリケーションと設定ファイル全体の正確なソースコード状態。
  • 出力/プロット/結果、および実験アプリケーションによって生成されたファイル。

次に、各実験のタイムスタンプとその他のメタデータを使用してデータベースを構築し、後でwebGUIを使用してクロールできます。Sumatraは特定の時点で特定の実験のためにアプリケーションの完全な状態を保存したため、特定の結果を生成したコードをいつでも復元できるため、複製可能な研究を低コストで実行できます(ただし、巨大なデータセットで作業しますが、毎回すべてを保存したくない場合は例外を設定できます)。

もう1つの素晴らしいツールは、GNOMEのZeitgeist(以前はPythonでコーディングされていましたが、現在はValaに移植されています)、すべてを網羅したアクションジャーナリングシステムです。類似性と使用パターン。たとえば、「プロジェクトXの作業中、昨年1か月間、私にとって最も関連性が高かったものなどの質問に答えます。。興味深いことに、Evernoteに似たメモを取るアプリであるZim Desktop Wikiには、Zeitgeistと連携するプラグインがあります。

最終的には、Git、Sumatra、または他の任意のソフトウェアを使用できますが、ほぼ同じ複製能力を提供しますが、Sumatraは科学研究用に特別に調整されているため、クロールするWeb GUIのようないくつかの派手なツールを提供しますGitはコードのメンテナンスに合わせて調整されていますが、Gitにはgit-bisectなどのデバッグツールが含まれているため、実験にコードが含まれる場合は、実際には改善される可能性があります。または、もちろん両方を使用できます!

/ EDIT:dsignはここで非常に重要な点に触れました。セットアップの複製可能性は、アプリケーションの複製可能性と同じくらい重要です。言い換えれば、少なくとも、使用したライブラリとコンパイラの完全なリストを、それらの正確なバージョンプラットフォームの詳細とともに提供する必要があります。

個人的には、Pythonを使用した科学計算では、ライブラリと一緒にアプリケーションをパッケージ化するのは非常に苦痛であることがわかりました。そのため、現在、Anacondaなどのオールインワン科学Pythonパッケージを使用しています(優れたパッケージマネージャーcondaを使用)。ユーザーに同じパッケージを使用するようアドバイスするだけです。別の解決策は、virtualenvを自動的に生成するスクリプトを提供するか、dsignまたはオープンソースVagrantで引用されている商用Dockerアプリケーションを使用してすべてをパッケージ化することです(たとえば Vagrantを使用して簡単に再配布可能なものを生成するpylearn2-in-a-box仮想環境パッケージ)。

最後に、必要なときに常に完全に動作する環境を確保するために、仮想マシン(VirtualBoxを参照)を作成できます。また、内部で実行する準備ができた状態でマシンの状態(スナップショット)を保存することもできます。その後、含まれるすべてのものとこの仮想マシンを共有するだけで、誰でも正確な設定で実験を再現できます。これはおそらく、ソフトウェアベースの実験を再現する最良の方法です。コンテナはより軽量な代替品かもしれませんが、環境全体を含んでいないため、レプリケーションの忠実度はより低くなります。

/ EDIT2:再現性のある研究を行うための基本的なことを要約した素晴らしいビデオ(デバッグ用ですが、これは研究にも適用できます):実験と科学的手法の各ステップの記録、一種の「明示的な実験」


14

必ずdockerをチェックしてください!そして一般的に、ソフトウェアエンジニアリングが分離と再現性を確保するために何十年にもわたって作成した他のすべての良いもの。

再現可能なワークフローだけでは十分ではなく、ワークフローを簡単に再現できることを強調したいと思います。私の言いたいことをお見せしましょう。プロジェクトでPython、データベースX、Scipyを使用するとします。最も確実には、特定のライブラリを使用してPythonからデータベースに接続し、Scipyはいくつかのスパース代数ルーチンを使用します。これはすべて非常に単純なセットアップですが、完全に単純なセットアップではありません。誰かがあなたのスクリプトを実行したい場合、彼女はすべての依存関係をインストールする必要があります。さらに悪いことに、彼女は互換性のないバージョンが既にインストールされている可能性があります。それらを修正するには時間がかかります。また、ある時点で計算をクラスター、別のクラスター、またはクラウドサーバーに移動する必要がある場合にも時間がかかります。

ここでdockerが便利だと思います。Dockerは、バイナリ環境向けのレシピを形式化およびコンパイルする方法です。dockerfileに次のように書くことができます(ここではDockerfile構文の代わりにここでは平易な英語を使用しています)。

  • Ubuntuのような基本的なバイナリ環境から始めます
  • libsparse-devをインストールします
  • (Pip)numpyとscipyをインストールする
  • Xをインストール
  • libX-devをインストールします
  • (Pip)python-Xのインストール
  • IPython-Notebookをインストールする
  • pythonスクリプト/ノートブックをバイナリ環境、これらのデータファイル、およびこれらの構成にコピーして、その他のさまざまなことを行います。再現性を確保するには、ローカルファイルではなく名前付きURLからコピーします。
  • IPython-Notebookを実行することもできます。

pipは特定のパッケージバージョンを選択する際に非常にクリーンな作業を行うことができるため、いくつかの行はpipを使用してPythonにインストールします。それもチェックしてください!

以上です。Dockerfileを作成した後、それをビルドできる場合は、誰でもどこでもビルドできます(たとえば、Dockerfileから参照されるパブリックURLに配置するなど、プロジェクト固有のファイルにアクセスできる場合)。最良の方法は、他の人が使用できるように、結果の環境(「イメージ」と呼ばれる)をパブリックまたはプライベートサーバー(「レジスタ」と呼ばれる)にアップロードすることです。そのため、ワークフローを公開すると、Dockerfileの形式で完全に再現可能なレシピと、自分や他の人が自分の仕事を簡単に再現できる方法の両方が得られます。

docker run dockerregistery.thewheezylab.org/nowyouwillbelieveme

または、彼らがあなたのスクリプトなどをいじくり回したい場合:

docker run -i -t dockerregistery.thewheezylab.org/nowyouwillbelieveme /bin/bash

8

残念ながら、私はPlankの投稿に回答するのに十分な評価ポイントを持っていないので、スレッド全体に回答しなければなりません。ごめんなさい。

私は実際、上記のオープンソースの集合的知識フレームワークの開発者です。GitHubを介して共有される統一されたJSON APIとJSONメタを使用して、アーティファクトと実験ワークフローの再利用可能および再現可能なPythonコンポーネントとしての共有を簡素化しようとします。また、同じ統一されたJSON APIを使用して予測分析に接続することもできます。

新しいバージョンV1.8.1をリリースし、詳細なドキュメントを提供しましたので、今すぐ概念を理解しやすくなることを願っています:http ://github.com/ctuning/ck/wiki

現在、このフレームワークに基づいた多くの学術および産業プロジェクトがありますので、そのうちの1つを確認してください-ボランティアが再現可能な方法で提供するモバイルデバイスでのクラウドソーシングプログラムの最適化:http : //cknowledge.org/repo

また、ここでは再現可能な科学に関連するさまざまなリソースを追跡しています:https : //github.com/ctuning/ck/wiki/Enabling-open-science

私は主にコンピューターシステムの研究を再現可能にすることに焦点を当てていますが、他のドメインの同僚と興味深いチャットをして、彼らは非常に似た問題を抱えているようです。ですから、私たちのフレームワークが他のコミュニティにとって助けになることができれば、とてもうれしいです!ご質問やご提案がございましたら、お気軽にお問い合わせください!


1
再現可能な研究に関するこの夏のダイジェスト(関連ツール、データセット、記事、イベントへのリンクを含む)も興味深いかもしれません:github.com/ctuning/ck/wiki/Enabling-open-science-blog-20160919
gfursin

7

再現可能な研究に専念するコース全体があります。 https://www.coursera.org/learn/reproducible-research このコースはRに基づいていますが、基礎となるアイデアを学ぶことができます。

1つの簡単な方法は、Ipythonノートブックを使用して、データのクリーニング、探索的分析、モデルの構築など、実行するすべての汚れた作業を保存し続けることです。


6

最近、次のツールに出会いました-http://github.com/ctuning/ck。既にPythonで書かれており、必要なものが含まれているようです(私の同僚はパイロットプロジェクトで画像認識を自動化するために使用しています)。

長所:

  1. 非常に小さく、ポータブルでカスタマイズ可能
  2. 実験を配布し、予測分析を使用してそれらを処理するWebサーバーを含む
  3. クラウドソーシングとコンパイラの最適化を再現するためのクールな使用例があります-http://cknowledge.org/repo

短所:

  1. 少し低レベル-JSON APIまたはコマンドラインを使用して、GitHubを介して共有されるPythonコンポーネントから独自のワークフローを実装する必要があります
  2. ドキュメントはやや複雑です-私は彼らがすぐにそれを更新する時間を見つけることを本当に望みます。

6

私が作成し、最近リリースしたオープンソースツールhttp://dvc.orgまたはDVCは、まさにあなたが到達しようとしていることをします:

  1. [データバージョン管理のツール。] DVCはGitの上で動作し、データファイルバージョン管理を追加し(ファイルはGitの外部に保存されます)、コードとデータファイル間の依存関係を追跡します。DVCは、コードとデータの依存グラフ(DAG)を自動的に導出します。
  2. [ステージと実験を再現できるツール] dvc repro data/scores.csvは、DAGに必要なすべての手順を再現します。
  3. [このようなプロジェクトのプロトコルと推奨ディレクトリ構造。] DVCでは、dataすべてのデータファイルを保存するデータディレクトリ(デフォルト)が必要でした。ただし、DVCは実際のコンテンツを透過的に.cacheディレクトリに移動し、シンボリックリンクを作成します(そう、Windowsでも動作するようにしました)。.cacheディレクトリはコマンドでGitリポジトリに同期されていないが、それはクラウド(S3またはGCP)を介して同期することができdvc sync data/scores.csv(それ同期のようなキャッシュからデータファイルを対応しました.cache/scores.csv_29de545
  4. [自動化されたビルド/実行ツール。]上記を参照してください。

DVCチュートリアルは、「データバージョン管理:反復的な機械学習」という良い出発点です。


5

免責事項:私はこれを行うためのオープンソースツールを作成する会社、Datmoで働いています。

再現性のベストプラクティスは次のとおりです。

1)まず、Dockerfileを作成し、そのファイルですべての依存関係がカバーされるようにすることにより、環境をDocker環境にコンテナー化します。このリソースが最適であることがわかりました(https://arxiv.org/pdf/1410.0846.pdf

2)それができたら、すべてのパフォーマンスメトリックと構成を追跡できる場所を決定する必要があります(将来の実験のために再訪できるように)

3)最後に、新しい実験者/開発者がコードを再検討し、環境でそれを複製し、構成とパフォーマンスメトリックをどこに保存したかを確認できるように、ドキュメントを作成します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.