Лучший способ хранения большого количества данных временных рядов с тегами с использованием Python - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь запустить кучу симуляций (системы питания) и сохранить все результаты в словарях.Вот организация данных:

Поскольку у меня не такая сложная структура объектов, я решил использовать укроп для хранения словаря, который содержит набор словарей (каждый из ключей которых содержит класс)

import dill as pickle

class Results():
    def __init__(self):
        self.volt = []
        self.angle = []
        self.freq = []

def save_obj(obj, name ):
    # save as pickle object
    currentdir = os.getcwd()
    objDir = currentdir + '/obj'
    if not os.path.isdir(objDir):
        os.mkdir(objDir)
    with open(objDir+ '/' +  name + '.pkl', 'wb') as f:
        pickle.dump(obj, f, pickle.HIGHEST_PROTOCOL,recurse = 'True')




EventDict = {}

########### conceptual code to get all the data
# simList is a list of approximately 7200 events
for event in simList:
    ResultsDict = {}
    for element in network: # 24 elements in network (23 buses,or nodes,  and time)
        # code to get voltage, angle and frequency (each of which is a list of 1200 elements)
        if element == 'time':
            ResultsDict['time'] = element
        else:
            ResultsDict[element] = Results()
            ResultsDict[element].volt = element.volt
            ResultsDict[element].angle = element.angle
            ResultsDict[element].freq = element.freq
    EventDict[event] = ResultsDict


save_obj(EventDict,'EventData')

Результирующий объект pickle походит на 5 гигабайт, и когда я пытаюсь загрузить, я получаю следующую ошибку, говорящую, что ему не хватило памяти:получить эту трассировку.Я понимаю, что эта проблема, потому что EventDict огромен.Итак, я думаю, что я спрашиваю, есть ли лучший способ хранить такие данные временного ряда, с некоторой функциональностью маркировки каждого данных ключом, чтобы я знал, что это представляет?Я открыт для предложений, отличных от pickle, поскольку он быстр при загрузке и не требует слишком больших усилий при загрузке в python.

1 Ответ

0 голосов
/ 26 октября 2018

Проверьте «Быстрое хранилище данных для данных временных рядов Pandas с помощью PyStore» https://medium.com/@aroussi/fast-data-store-for-pandas-time-series-data-using-pystore-89d9caeef4e2

Возможно, придется разбивать данные на части во время чтения. https://cmdlinetips.com/2018/01/how-to-load-a-massive-file-as-small-chunks-in-pandas/

...