データベースを使用して大量の結果を処理する必要がありますか?


8

バックグラウンド:

現在、大量のパラメータ変動実験を行っています。これらはnumpyを使用してPython 2.6以降で実行されています。これらの実験の実行には約2週間かかります。

大まかに私は3つのパラメーター(独立変数)を値の範囲で変化させています。さらに6つの独立変数を修正します(今のところ)4つの従属変数についてレポートしています。

私が変更しているパラメーターの1つは、いくつかのプロセス(およびコンピューター)に分散されています。これらの各パラメーターcsvについて、すべての変数(独立、固定、依存を含む)の値を各行に含む個別のファイルを生成します。すべてのバリエーションで、約80,000行のデータが生成されると予想されます

ほとんどの場合、私は従属変数の1つの値だけを見ていますが、予期しないことが起こったときに何が起こっているかを説明できるので、他の変数はそのままにしておきます。

この実験の以前のバージョンでは、2つのパラメーター(それぞれ2つの値のみ)で変化していcsvましたが、このファイルをスプレッドシートプログラムにコピーアンドペーストし、一連のコピーペーストを実行して、興味のある従属変数のみのテーブルを作成しました。 。MS-Excelで厄介なことをして数式で並べ替えること。これは、私が持っていた6つの実験結果セットにとって十分な苦痛でした。この実行が完了するまでに、結果が2桁増えることになります。

質問:

一度終わったら、csvファイルのすべての結果をデータベースにダンプし、興味のある部分を照会できると考えていました。次に、それらの結果を取り、分析のためにスプレッドシートに入れます。グラフを作成し、制御結果に関連するスコアを見つけるなど

私は正しい線に沿って考えていますか?(これは人々がすることですか?)

私のデータベースfooは、MS-Accessを使用していて良かったとしても、最近はかなり錆びています。これにもMS-Accessを使うつもりでした。

回答:


8

完全に機能するデータベースは確かに機能しますが、あなたの目的にとってはやり過ぎかもしれません。でも5105 行は約25MB以下のデータでなければなりません。

データのクエリに使用するのと同じツールで分析/プロットなどを行うことを強くお勧めします。分析対象を変更するだけで1行のコードを変更して2秒待つだけで、データを最大限に活用することがはるかに簡単になるというのが私の経験です。コピー貼り付けも非常にエラーが発生しやすいです。彼らのデータが意味をなさず、Excelシートにデータをコピーするときに間違いを犯したことに気付いただけで、必死になっているところに何人かを見かけました。

まったくPythonに慣れている場合は、パンダまたは(メモリに収まらないほど多くのデータがある場合)pytablesを使用することをお勧めします。これにより、データベース(速度を含む)のすべての利点が得られます。Pandasには、データをプロットして分析するための多くのユーティリティ関数があり、完全な科学的Pythonスタックも用意されています。パンダの使用例については、このipythonノートブックご覧ください。

同様のツールがRだけでなく、MatlabやStataなどの商用ソフトウェアにも存在すると思います。

HDF5は、最初にデータを保存するための優れた汎用的な方法であり、多くの言語で優れたライブラリをサポートしています。


データを個別に分析および生成する必要があります。データの生成には2週間ほどかかります。これはあなたの答えに何かを変えますか?
Lyndon White

すみません、はっきりしていませんでした。つまり、データのクエリに使用するツールは、分析やプロットと同じツールでなければなりません。1つのスクリプトを実行するだけですべてをやり直すことができるのは大きな利点です。私はデータをhdf5に格納しますが、SQLiteデータベース(Geoffが提案したような)を好む場合は、PythonのSQLAlchemyを使用してデータベースから読み取ることもできます。
LKlevin 14年

そうですね。また、プログラマティックかつ反復可能な分析を提唱している
リンドンホワイト

はい!「このグラフのデータをどのように正確に分析しましたか?」という質問に答えます。全体を実行するスクリプトを見るだけではるかに簡単です。
LKlevin 2014年

パンダを使用して分析を開始したので、この答えを受け入れることができると思います。
リンドンホワイト

5

これにはスマトラなどのツールを使用することを強くお勧めします。さまざまなパラメーターを使用して多くのシミュレーション実行を追跡するために、私はあなたと同様の「歩行者」アプローチを使用していましたが、そのようなアドホックアプローチを事前に正しく設計して必要なすべてのユースケースと拡張機能を予測します(たとえば、追加のパラメーターを導入する必要がある場合にどうなるか)。

スマトラはすべてのシミュレーション実行を追跡し、それらをデータベースに保存して、後で(Python APIを使用して)クエリを実行して、関心のあるレコードをフィルタリングおよび分析できます。非常に柔軟性が高く、ワークフローに負担をかけません。これは大きなプラスです。また、結果をすばやく参照(または生成されたファイルを検査/ダウンロード)できるWebインターフェースが付属しているため、非常に便利です。デフォルトのデータベースはSQLiteを使用しており、80,000以上のシミュレーション結果を格納するために使用すると、少し遅くなると想像できます。PostgreSQLバックエンドがありますが、使用したことがないため、そのパフォーマンスを保証できません。

それはまだ初期の開発段階にあり、いくつか不足している点がありますが、私はこの1年のほとんどすべてのシミュレーションに使用しており、想像もできないほど多くの時間を節約してくれました私がそれなしで何をするか。個人的には、異なるコンピューター間(またはクラスター上)の計算には使用していませんが、この種のワークフローをサポートしていると思います。不明な点や必要なものが正確に見つからない場合は、メーリングリストで質問してください。小さなコミュニティですが、とてもフレンドリーで役立つコミュニティです。

これがあなたが興味を持っている何かであるなら、私に一言を言ってください、そしてあなたを動かすために(または単にインスピレーションのために)私のワークフローとボイラープレートコードを共有させていただきます。

実際のデータ分析に関して、私はLKlevinに同意します。パンダとIPythonノートブックは知っておくと非常に便利なツールです(スマトラでは、レコードをパンダにインポートできますが、現時点では少しだけですが、間違いなくすぐに改善される)。また、データやシミュレーションの結果をHDF5形式で保存すると便利な場合があることも想像できます。この場合、pytablesはツールボックスの優れたツールです。(私はHDF5のサポートがスマトラで計画されていることを覚えているようですが、今のところ情報を見つけることができず、これがまだ実装されているかどうかわかりません。)

最後に、私はこれらの種類のタスクを支援する他のツールがあると確信しています(このプレゼンテーションスライドの「短いリスト」を参照してください)。しかし、個人的には、スマトラが提供する機能性と柔軟性に非常に満足しているので、それらのいずれも試していません。


1

はい、すべての結果をデータベースにダンプできます。また、データベースを使用することを選択する人もいます。データベースを使用する状況に対処する必要はまだありませんでしたが、ワークショップで他のインストラクターがデータベースを使用してデータを収集する方法を教えていました。大規模でないデータベースの場合、私が理解している限りでは、基盤となるテクノロジーはそれほど重要ではありません。副担任はSQLite3を使用しました。Linuxへのインストールは簡単で、OS Xには標準で付属しており、Windowsでも使用できると思います。

OS XとLinuxのターミナルからSQLiteデータベースにアクセスすることが可能です。Windowsでそれがどのように行われるかはわかりません。たとえば、Python標準ライブラリのsqlite3パッケージを使用して、Pythonパッケージを利用してプログラムでデータベースの読み取りと書き込みを行うこともできます。

データセットが非常に大きくなる場合は、他のデータベース実装の方が適しています。その時点で、データベースの専門家に相談することをお勧めします。


1

すべてのデータがメモリに快適に収まる場合(たとえば、1 GB未満であるため、分析に余裕がある場合)、DBは過剰です。メモリ内のファイル全体を読み取り、必要な部分を選択するだけです。一方、データが増加し始める(または大きくなりすぎる可能性がある)場合、DBは高速で簡単なクエリを提供できます(「エネルギーが正確に2で、温度が27を超えるすべての速度を教えてください」)。

別のトピックは、データの生成です。データに2週間かかるので、コンピューティングクラスター上で並行してデータを生成していると想定しています。並列書き込み用のDBの設定は複雑であり、データが転送されてロックがかけられているため、プロセスが遅くなる可能性があります。一度書くだけでよいので、各プロセスで独自の一時テキストファイルを生成し、そこに結果を書き込んで、中央プロセスでそれぞれを読み取り、マスターDBにダンプすることができます。最も単純なケースでは、このスクリプトは単純catで、結果をプレーンテキストとして保存できます。

ここで、DBを使用したいとします。ユースケースがテキストファイルより少し高度な場合(Numpyを使用してCSVをロードした場合はどうするか)、PyTablesを介してHDF5をお勧めします。これは高速で、設定が簡単で、Numpyに対応しており、チューニングしたい場合は高度な機能がたくさんあります。また、配列の圧縮、クエリ、保存もサポートしています。Linux、Windows、Macへのインストールも簡単です。HDF5データレイアウトは、スプレッドシートのようなテーブルにすぎません。結果の.h5ファイルは、適切なライブラリがインストールされていれば、多くのコンピューター言語から読み取ることができます。

一方、SQLがあります。あなたはPythonのstdlibにそれを持っているので、すでにインストールされていますが、数値作業にはあまり適していません(たとえば、Numpy配列を簡単に保存して回復することはできません)。これは非常によく知られており、ほとんどすべての言語に対するラッパーがあり、デフォルトでそれらの多くが付属しているため、サードパーティが他の言語からインターフェースする必要がある場合に最適なオプションです。

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