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 차원 배열 집합으로 나타낼 수있는 경우에만 데이터에 대해 완전히 자연스러운 매핑을 제공한다는 것입니다. 시뮬레이션의 출력이 어떤 종류의 배열에있는 것이 일반적이므로 문제가되지 않을 것입니다.
좋은 시작점
파이썬 : http://www.openbookproject.net/thinkcs/python/english2e/
HDF5 : http://www.h5py.org/docs/