TLDR
अपने इनपुट को प्रबंधित / संशोधित करने और अपने डेटा को व्यवस्थित / संग्रहीत करने के लिए HDF5 का उपयोग करने के लिए अजगर का उपयोग करें और उसे संशोधित करें। जैसा कि यह पहले लगता है कि जटिल हो सकता है कि यह अभी भी SQL- कुछ की तुलना में सरल होगा।
लंबे उत्तर + उदाहरण
मैं व्यक्तिगत रूप से पायथन स्क्रिप्टिंग और एचडीएफ 5 फ़ाइल प्रारूप के संयोजन का उपयोग इस प्रकार की स्थितियों से निपटने के लिए करता हूं। पायथन स्क्रिप्टिंग आपके रनफाइल्स को बदलने के लिए आवश्यक पाठ प्रतिस्थापन को संभाल सकता है (और डुप्लिकेट रन की जांच कर सकता है), और कुछ और स्क्रिप्टिंग के साथ आप अपने प्रोग्राम से आउटपुट डेटा ले सकते हैं और इसे एचडीएफ 5 फ़ाइल में डाल सकते हैं।
एचडीएफ 5 के बारे में सोचना सामान्य फ़ाइल सिस्टम की तरह कमोबेश ठीक है (यानी आपके कंप्यूटर पर निर्देशिका और उपनिर्देशिका का सेट), लेकिन एक ऐसा जो आसानी से बड़े डेटा सेट में बदल जाता है। प्रत्येक निर्देशिका / उपनिर्देशिका को मेटाडेटा के साथ टैग किया जा सकता है (आपके मामले में या तो बस पैरामीटर जो आप अलग-अलग हैं, या मापदंडों का पूरा सेट)। जब आपके डेटा का विश्लेषण करने का समय आता है तो आप मेटाडेटा के आधार पर इसके माध्यम से खोज सकते हैं।
यहाँ एक छोटा उदाहरण दिया गया है कि यह मेरे कुछ सिमुलेशन डेटा (पहले से ही 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 में से प्रत्येक एक उपनिर्देशिका है जो किसी दिए गए सिमुलेशन से आउटपुट डेटा रखता है, और जिसे संबंधित मेटाडेटा के साथ टैग किया गया है। एक अजगर स्क्रिप्ट जो रनों के माध्यम से खोज करती है और वांछित मेटाडाटा वाले लोगों की सूची इस तरह दिखाई देगी:
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"]
एक नोट हालांकि यह है कि एचडीएफ 5 आपके डेटा के लिए पूरी तरह से प्राकृतिक मानचित्रण पेश करने जा रहा है, अगर यह आपके डेटा को एन-आयामी सरणियों के सेट के रूप में प्रस्तुत करना संभव है। यह सिमुलेशन के आउटपुट के लिए किसी प्रकार के सरणी में होना बहुत आम है, इसलिए यह संभवतः एक मुद्दा नहीं होगा।
अच्छे शुरुआती बिंदु
पायथन: http://www.openbookproject.net/thinkcs/python/english2e/
HDF5: http://www.h5py.org/docs/