TLDR
Pythonを使用して入力を管理/変更し、出力をコーラルし、HDF5を使用してデータを整理/保存します。一見複雑に見えるかもしれませんが、SQLなんでもよりも簡単です。
より長い回答+例
私は個人的に、PythonスクリプトとHDF5ファイル形式の組み合わせを使用して、このような状況に対処しています。Pythonスクリプティングは、ランファイルの変更に必要なテキスト置換を処理でき(重複ランをチェックできます)、さらにいくつかのスクリプティングを使用して、プログラムから出力データを取得し、HDF5ファイルに書き込むことができます。
HDF5は、通常のファイルシステム(コンピュータ上のディレクトリとサブディレクトリのセット)とほぼ同じであると考えるのが最も簡単ですが、大きなデータセットに簡単に拡張できます。各ディレクトリ/サブディレクトリは、メタデータでタグ付けできます(この場合、変更するパラメーターのみ、またはパラメーターのセット全体)。データを分析するときは、メタデータに基づいてデータを検索できます。
これは、次のようなシミュレーションデータ(既にHDF5形式)に基づいてこれがどのように機能するかを示す短い例です。
mydata.hdf5
|___Run01(metadata: {size:13, maxSteps:1e7, maxTime:inf})
|___Run02(metadata: {size:10, maxSteps:1e6, maxTime:inf})
|___Run03(metadata: {size:13, maxSteps:1e7, maxTime:inf})
|___Run04(metadata: {size:9, maxSteps:1e7, maxTime:inf})
mydata.hdf5
はHDF5ファイルであり、各Runxxは特定のシミュレーションからの出力データを保持するサブディレクトリであり、関連するメタデータでタグ付けされています。実行を検索し、目的のメタデータを持つ実行のリストを返すPythonスクリプトは、次のようになります。
import sys
import h5py #the python module that interfaces with HDF5
def GetRuns(hdfRoot, attributeValuePairs):
return [subdir for subdir in hdfRoot.values() if not(attributeValuePairs.viewitems() - dict(subdir.attrs).viewitems())]
if __name__=="__main__":
attributeValuePairs = dict(zip(sys.argv[2::2], sys.argv[3::2]))
with h5py.File(sys.argv[1]) as hdfRoot:
runs = GetRuns(hdfRoot, attributeValuePairs)
#do something here with runs...
print runs
そのため、ディレクトリが含まれているコマンドラインにいる場合はmydata.hdf5
、上記のスクリプトを次のように実行できます。
python myscript.py mydata.hdf5 maxSteps 1e7 size 13
これは、メタデータが部分的または完全に一致する実行を見つけるようにスクリプトに指示します{'maxSteps':'1e7', 'size':'13'}
。その後、スクリプトはそのデータを(「ここで何かを行う」セクションで)好きなように操作し、次のようなリストを出力します。
["Run01", "Run03"]
ただし、HDF5は、データをn次元配列のセットとして表すことができる場合にのみ、データに対して完全に自然なマッピングを提示することに注意してください。シミュレーションの出力が何らかの配列になることはかなり一般的であるため、これはおそらく問題にはなりません。
良い出発点
Python:http:
//www.openbookproject.net/thinkcs/python/english2e/ HDF5:http : //www.h5py.org/docs/